diff --git a/.gitignore b/.gitignore index 218ceb9f3325f872dde992670fbb26b3ffd02e6d..0d74d48fe6bbca5c405a9052f53f580c963b1843 100644 --- a/.gitignore +++ b/.gitignore @@ -39,4 +39,3 @@ nbproject .CVS .idea node_modules -dist diff --git a/.travis.yml b/.travis.yml index 2d26206d58cbb7c8fc894e21646b93fc1aabf2d9..2d6cd8f4f425afc2f026172851b172151b9f8f3e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,5 @@ language: node_js node_js: - - 0.6 + - 0.8 +before_script: + - npm install -g grunt-cli \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 43c716180230e03195e8ac414f46acab5180565e..712b023ce6c9d527a32ab5a06b5e7c9c3a7eab40 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -26,7 +26,6 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso ## Pull requests - Try to submit pull requests against the latest `*-wip` branch for easier merging -- Any changes to the docs must be made to the Mustache templates, not just the compiled HTML pages - CSS changes must be done in .less files first, never just the compiled files - 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 diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000000000000000000000000000000000000..222bb25b60c5cc34787f90c1fd2d29dd3426931a --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,124 @@ +module.exports = function(grunt) { + + // Project configuration. + grunt.initConfig({ + // Metadata. + pkg: grunt.file.readJSON('package.json'), + banner: '/**\n' + + '* <%= pkg.name %>.js v<%= pkg.version %> by @fat and @mdo\n' + + '* Copyright <%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' + + '* <%= _.pluck(pkg.licenses, "url").join(", ") %>\n' + + '*/\n', + // Task configuration. + clean: { + dist: ['dist'] + }, + concat: { + options: { + banner: '<%= banner %>', + stripBanners: false + }, + bootstrap: { + src: ['js/*.js'], + dest: 'dist/js/<%= pkg.name %>.js' + } + }, + jshint: { + options: { + jshintrc: 'js/.jshintrc' + }, + gruntfile: { + src: 'Gruntfile.js' + }, + src: { + src: ['js/*.js'] + }, + test: { + src: ['js/tests/unit/*.js'] + } + }, + recess: { + options: { + compile: true + }, + bootstrap: { + files: { + 'dist/css/bootstrap.css': ['less/bootstrap.less'] + } + }, + min: { + options: { + compress: true + }, + files: { + 'dist/css/bootstrap.min.css': ['less/bootstrap.less'] + } + } + }, + uglify: { + options: { + banner: '<%= banner %>' + }, + bootstrap: { + files: { + 'dist/js/<%= pkg.name %>.min.js': ['<%= concat.bootstrap.dest %>'] + } + } + }, + qunit: { + options: { + inject: 'js/tests/unit/phantom.js' + }, + files: ['js/tests/*.html'] + }, + connect: { + server: { + options: { + port: 3000, + base: '.' + } + } + }, + watch: { + src: { + files: '<%= jshint.src.src %>', + tasks: ['jshint:src', 'qunit'] + }, + test: { + files: '<%= jshint.test.src %>', + tasks: ['jshint:test', 'qunit'] + }, + recess: { + files: 'less/*.less', + tasks: ['recess'] + } + } + }); + + + // These plugins provide necessary tasks. + grunt.loadNpmTasks('grunt-contrib-connect'); + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-qunit'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-recess'); + + + // Test task. + grunt.registerTask('test', ['jshint', 'qunit']); + + // JS distribution task. + grunt.registerTask('dist-js', ['concat', 'uglify']); + + // CSS distribution task. + grunt.registerTask('dist-css', ['recess']); + + // Full distribution task. + grunt.registerTask('dist', ['clean', 'dist-css', 'dist-js']); + + // Default task. + grunt.registerTask('default', ['test', 'dist']); +}; diff --git a/Makefile b/Makefile deleted file mode 100644 index 257754b509790ec6f48afb2a4d1f42672e666c00..0000000000000000000000000000000000000000 --- a/Makefile +++ /dev/null @@ -1,105 +0,0 @@ -BOOTSTRAP ?= ./docs/assets/css/bootstrap.css -BOOTSTRAP_LESS ?= ./less/bootstrap.less -DATE=$(shell date +%I:%M%p) -CHECK=\033[32m✔ Done\033[39m -HR=\033[37m--------------------------------------------------\033[39m -PATH := ./node_modules/.bin:$(PATH) - - -# -# BUILD DOCS -# - -build: - @echo "\n\n" - @echo "\033[36mBuilding Bootstrap...\033[39m" - @echo "${HR}" - @printf "Running JSHint on JavaScript..." - @jshint js/*.js --config js/.jshintrc - @jshint js/tests/unit/*.js --config js/.jshintrc - @echo " ${CHECK}" - @printf "Compiling LESS with Recess..." - @recess --compile ${BOOTSTRAP_LESS} > ${BOOTSTRAP} - @echo " ${CHECK}" - @printf "Prepping documentation assets..." - @cp js/tests/vendor/jquery.js docs/assets/js/ - @echo " ${CHECK}" - @printf "Compiling and minifying JavaScript..." - @cat js/transition.js js/alert.js js/button.js js/carousel.js js/collapse.js js/dropdown.js js/modal.js js/tooltip.js js/popover.js js/scrollspy.js js/tab.js js/affix.js > docs/assets/js/bootstrap.js - @uglifyjs -nc docs/assets/js/bootstrap.js > docs/assets/js/bootstrap.min.tmp.js - @echo "/**\n* Bootstrap.js v3.0.0 by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > docs/assets/js/copyright.js - @cat docs/assets/js/copyright.js docs/assets/js/bootstrap.min.tmp.js > docs/assets/js/bootstrap.min.js - @rm docs/assets/js/copyright.js docs/assets/js/bootstrap.min.tmp.js - @echo " ${CHECK}" - @echo "${HR}" - @echo "\033[36mSuccess!\n\033[39m" - @echo "\033[37mThanks for using Bootstrap," - @echo "<3 @mdo and @fat\n\033[39m" - -# -# RUN JSHINT & QUNIT TESTS IN PHANTOMJS -# - -test: - jshint js/*.js --config js/.jshintrc - jshint js/tests/unit/*.js --config js/.jshintrc - node js/tests/server.js & - phantomjs js/tests/phantom.js "http://localhost:3000/js/tests" - kill -9 `cat js/tests/pid.txt` - rm js/tests/pid.txt - -# -# CLEANS THE ROOT DIRECTORY OF PRIOR BUILDS -# - -clean: - rm -r bootstrap - -# -# BUILD SIMPLE BOOTSTRAP DIRECTORY -# recess & uglifyjs are required -# - -bootstrap: bootstrap-css bootstrap-js - - -# -# JS COMPILE -# -bootstrap-js: bootstrap/js/*.js - -bootstrap/js/*.js: js/*.js - mkdir -p bootstrap/js - cat js/transition.js js/alert.js js/button.js js/carousel.js js/collapse.js js/dropdown.js js/modal.js js/tooltip.js js/popover.js js/scrollspy.js js/tab.js js/affix.js > bootstrap/js/bootstrap.js - uglifyjs -nc bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.min.tmp.js - echo "/*!\n* Bootstrap.js by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > bootstrap/js/copyright.js - cat bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js > bootstrap/js/bootstrap.min.js - rm bootstrap/js/copyright.js bootstrap/js/bootstrap.min.tmp.js - -# -# CSS COMPILE -# - -bootstrap-css: bootstrap/css/*.css - -bootstrap/css/*.css: less/*.less - mkdir -p bootstrap/css - recess --compile ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.css - recess --compress ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.min.css - -# -# WATCH LESS FILES -# - -watch: - echo "Watching less files..."; \ - watchr -e "watch('less/.*\.less') { system 'make' }" - -# -# BUILD AND START SERVER -# - -run: build - jekyll build && jekyll server - -.PHONY: docs watch gh-pages bootstrap-css bootstrap-js diff --git a/README.md b/README.md index 3d9dc7f60cade219df6c0c7ec5c7bb639c6fce4b..52ce9d29117cfcb967f95b2c4d6ca1d5336ff824 100644 --- a/README.md +++ b/README.md @@ -12,75 +12,73 @@ Three quick start options are available: * [Download the latest release](https://github.com/twitter/bootstrap/zipball/master). * Clone the repo: `git clone git://github.com/twitter/bootstrap.git`. -* Install with [Bower](http://bower.io): `bower install bootstrap`. +* Install with Twitter's [Bower](http://github.com/bower/bower): `bower install bootstrap`. -Read the [Getting Started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. +Read the [Getting Started page](http://getbootstrap.com/getting-started/) for information on the framework contents, basic template guidelines, and more. +## Bootstrap elsewhere -## Bugs and feature requests +Beyond getting started with the Bootstrap core, there are ways to use Bootstrap in other tools and services: -Have a bug or a feature request? [Please open a new issue](https://github.com/twitter/bootstrap/issues). Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/). +* [Roots WordPress theme](https://github.com/retlehs/roots) - A WordPress starter theme based on HTML5 Boilerplate & Bootstrap from Twitter. +Have suggestions? Let us know with a [new issue](https://github.com/twitter/bootstrap/issues). -## Documentation -Bootstrap's documentation, included in this repo in the `/docs` directory, is built with [Jekyll](http://jekyllrb.com) and publicly hosted on GitHub Pages at [http://getbootstrap.com](http://getbootstrap.com). The docs maybe also be run locally. +## Bugs and feature requests -### Running documentation locally +Have a bug or a feature request? [Please open a new issue](https://github.com/twitter/bootstrap/issues). Before opening any issue, please search for existing issues and read the [Issue Guidelines](https://github.com/necolas/issue-guidelines), written by [Nicolas Gallagher](https://github.com/necolas/). +======= 1. If necessary, [install Jekyll](http://jekyllrb.com/docs/installation) (requires v1.x). 2. From the `/bootstrap` directory, run `jekyll serve` in the command line. 3. Open [http://localhost:9001](http://localhost:9001) in your browser, and voilà . -Learn more about using Jekyll by reading their [documentation](http://jekyllrb.com/docs/home/). -### Documentation for previous releases +## Documentation -Documentation for v2.3.2 has been made available for the time being at [http://getbootstrap.com/2.3.2/docs](http://getbootstrap.com/2.3.2/docs) while folks transition to Bootstrap 3. +Bootstrap's docs are built using [Jekyll](http://jekyllrb.com) and hosted on GitHub Pages at [http://getbootstrap.com](http://getbootstrap.com). To view our docs locally, you'll need to [install Jekyll](https://github.com/mojombo/jekyll/wiki/install) to run a local server. -For previous releases, documentation is available for [download via Git tags](https://github.com/twitter/bootstrap/tags). +Documentation for [previous versions](https://github.com/twitter/bootstrap/tags) is also available via tags. ## Compiling CSS and JavaScript -Bootstrap includes a [makefile](Makefile) with convenient methods for working with the framework. Before getting started, install [the necessary local dependencies](package.json): +Bootstrap uses [GruntJS](http://gruntjs.com/) with convenient methods for working with the framework. Before getting started, be sure to have `grunt-cli` installed globally (`npm install -g grunt-cli`) and then install [the necessary local dependencies](package.json): ``` +# if grunt-cli isn't already installed +$ npm install -g grunt-cli + $ npm install ``` -When completed, you'll be able to run the various make commands provided. - -### Available makefile commands +When completed, you'll be able to run the various grunt commands provided: -#### Build - `make` -`make` runs the Recess compiler to rebuild the `/less` files and compile the docs. **Requires recess and uglify-js.** +#### Build - `grunt` +`grunt` runs the Recess compiler to rebuild the `/less` files and compile the docs. **Requires recess and uglify-js.** -#### Compile CSS, JS, and fonts - `make bootstrap` -`make bootstrap` creates the `/bootstrap` directory with compiled files. **Requires recess and uglify-js.** +#### Compile CSS, JS, and fonts - `grunt bootstrap` +`grunt bootstrap` creates the `/bootstrap` directory with compiled files. **Requires recess and uglify-js.** -#### Tests - `make test` +#### Tests - `grunt test` Runs jshint and qunit tests headlessly in [phantomjs](http://code.google.com/p/phantomjs/) (used for ci). **Requires phantomjs.** -#### Watch - `make watch` -This is a convenience method for watching just Less files and automatically building them whenever you save. **Requires the watchr gem.** +#### Watch - `grunt watch` +This is a convenience method for watching just Less files and automatically building them whenever you save. -### Troubleshooting dependencies - -Should you encounter problems with installing dependencies or running makefile commands, uninstall all previous dependency versions (global and local). Then, rerun `npm install`. +Should you encounter problems with installing dependencies or running the grunt commands, uninstall any previous versions (global and local) you may have installed, and then rerun `npm install`. ## Contributing -Please read through our guidelines for contributing to Bootstrap. Included are directions for opening issues, coding standards, and notes on development. - -More over, if your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo). +Please submit all pull requests against *-wip branches. If your pull request contains JavaScript patches or features, you must include relevant unit tests. All HTML and CSS should conform to the [Code Guide](http://github.com/mdo/code-guide), maintained by [Mark Otto](http://github.com/mdo). -Editor preferences are available in the [editor config](.editorconfig) for easy use in common text editors. Read more and download plugins at [http://editorconfig.org](http://editorconfig.org). +Editor preferences are also available in the [editor config](.editorconfig) for easy application in common text editors. Read more and download plugins at [http://editorconfig.com](http://editorconfig.com). diff --git a/_config.yml b/_config.yml index ddef7b2b9e910006aaae95444acebbc4ee1dab52..0ab7ee81edc77576fe930e9732992a6768b06cb6 100644 --- a/_config.yml +++ b/_config.yml @@ -6,6 +6,6 @@ pygments: true permalink: pretty # Server -source: ./docs destination: ./_gh_pages +exclude: [".editorconfig", ".gitignore", ".ruby-version", "bower.json", "composer.json", "CONTRIBUTING.md", "LICENSE", "Makefile", "package.json", "node_modules", "README.md"] port: 9001 diff --git a/_includes/ads.html b/_includes/ads.html new file mode 100644 index 0000000000000000000000000000000000000000..495e7ba47f59b8c183a33dd9264fffae1296978b --- /dev/null +++ b/_includes/ads.html @@ -0,0 +1 @@ +<div id="carbonads-container"><div class="carbonad"><div id="azcarbon"></div><script type="text/javascript">var z = document.createElement("script"); z.type = "text/javascript"; z.async = true; z.src = "http://engine.carbonads.com/z/32341/azcarbon_2_1_0_HORIZ"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(z, s);</script></div></div> \ No newline at end of file diff --git a/docs/_includes/footer.html b/_includes/footer.html similarity index 89% rename from docs/_includes/footer.html rename to _includes/footer.html index fcfc7c48285f77b111239022783731b3146529d9..7c3bb56396bdfef26547042ab1eb12976fba63ef 100644 --- a/docs/_includes/footer.html +++ b/_includes/footer.html @@ -2,10 +2,10 @@ ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="/assets/js/jquery.js"></script> -<script src="/assets/js/bootstrap.js"></script> +<script src="/dist/js/bootstrap.js"></script> <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> -<script src="/assets/js/holder/holder.js"></script> +<script src="/assets/js/holder.js"></script> <script src="/assets/js/application.js"></script> diff --git a/docs/_includes/header.html b/_includes/header.html similarity index 93% rename from docs/_includes/header.html rename to _includes/header.html index af2104ebb8a88fb627a355778960ac939e0ceb4b..35c2df08459a6cde9d27234cd71290113c96f040 100644 --- a/docs/_includes/header.html +++ b/_includes/header.html @@ -12,7 +12,7 @@ </title> <!-- Bootstrap core CSS --> -<link href="/assets/css/bootstrap.css" rel="stylesheet"> +<link href="/dist/css/bootstrap.css" rel="stylesheet"> {% if page.layout != "example" %} <!-- Documentation extras --> @@ -23,7 +23,7 @@ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries --> <!--[if lt IE 9]> <script src="/assets/js/html5shiv.js"></script> - <script src="/assets/js/respond/respond.min.js"></script> + <script src="/assets/js/respond.min.js"></script> <![endif]--> <!-- Favicons --> diff --git a/docs/_includes/nav-components.html b/_includes/nav-components.html similarity index 96% rename from docs/_includes/nav-components.html rename to _includes/nav-components.html index a8dd8c64f059cb7f7b03f77447200d0aa96dcf19..514dcfed3c06f3f197c99a4c77d73755a084d0cf 100644 --- a/docs/_includes/nav-components.html +++ b/_includes/nav-components.html @@ -3,6 +3,7 @@ <ul class="nav"> <li><a href="#dropdowns-example">Example</a></li> <li><a href="#dropdowns-alignment">Alignment options</a></li> + <li><a href="#dropdowns-headers">Headers</a></li> <li><a href="#dropdowns-disabled">Disabled menu items</a></li> </ul> </li> @@ -93,9 +94,7 @@ <a href="#list-group">List group</a> <ul class="nav"> <li><a href="#list-group-basic">Basic list group</a></li> - <li><a href="#list-group-chevrons">Chevrons</a></li> <li><a href="#list-group-badges">Badges</a></li> - <li><a href="#list-group-badges-chevrons">Badges and chevrons</a></li> <li><a href="#list-group-linked">Linked items</a></li> <li><a href="#list-group-custom-content">Custom content</a></li> <!-- <li><a href="#list-group-pic">Leading picture</a></li> --> diff --git a/docs/_includes/nav-css.html b/_includes/nav-css.html similarity index 98% rename from docs/_includes/nav-css.html rename to _includes/nav-css.html index a52285b2966410e1e7f37656426dc8a4b1a872e2..fb00465c2dd955ebce3b323d0c74aa4c0abe3d9d 100644 --- a/docs/_includes/nav-css.html +++ b/_includes/nav-css.html @@ -22,7 +22,6 @@ <li><a href="#grid-offsetting">Offset columns</a></li> <li><a href="#grid-nesting">Nested columns</a></li> <li><a href="#grid-column-ordering">Column ordering</a></li> - <li><a href="#grid-small">Small device grid</a></li> <li><a href="#grid-less">LESS mixins and variables</a></li> </ul> </li> diff --git a/docs/_includes/nav-customize.html b/_includes/nav-customize.html similarity index 95% rename from docs/_includes/nav-customize.html rename to _includes/nav-customize.html index 38c96d5439c08079cd925a255abdaf2a14d7f374..1539b0c25a4271eedb7a09d87f4dc973c45e29b8 100644 --- a/docs/_includes/nav-customize.html +++ b/_includes/nav-customize.html @@ -5,7 +5,7 @@ <a href="#plugins">jQuery plugins</a> </li> <li> - <a href="#variables">LESS variables</a> + <a href="#less-variables">LESS variables</a> <ul class="nav"> <li><a href="#variables-basics">Basics</a></li> <li><a href="#variables-buttons">Buttons</a></li> diff --git a/docs/_includes/nav-getting-started.html b/_includes/nav-getting-started.html similarity index 61% rename from docs/_includes/nav-getting-started.html rename to _includes/nav-getting-started.html index fd6f8c98b0d59fba2c244a5cdf3ac4b20e44de3f..022d335cd6587db0ddeeedd545261d62eae78b3b 100644 --- a/docs/_includes/nav-getting-started.html +++ b/_includes/nav-getting-started.html @@ -9,11 +9,13 @@ <a href="#whats-included">What's included</a> </li> <li> - <a href="#examples">Templates and examples</a> - <ul class="nav"> - <li><a href="#examples-template">HTML template</a></li> - <li><a href="#examples-list">List of examples</a></li> - </ul> + <a href="#template">Basic template</a> +</li> +<li> + <a href="#browsers">Browser support</a> +</li> +<li> + <a href="#license-faqs">License FAQs</a> </li> <li> <a href="#customizing">Customizing Bootstrap</a> diff --git a/docs/_includes/nav-javascript.html b/_includes/nav-javascript.html similarity index 100% rename from docs/_includes/nav-javascript.html rename to _includes/nav-javascript.html diff --git a/docs/_includes/nav-main.html b/_includes/nav-main.html similarity index 83% rename from docs/_includes/nav-main.html rename to _includes/nav-main.html index fceeb7a869bd96173777aa76b6f0dbb4ecd6049b..40244d3a240d86b83bcac0ff0ce3551f7ce9ef4e 100644 --- a/docs/_includes/nav-main.html +++ b/_includes/nav-main.html @@ -24,6 +24,13 @@ <a href="/customize">Customize</a> </li> </ul> + {% if page.layout == "default" %} + <ul class="nav navbar-nav pull-right"> + <li> + <a href="http://getbootstrap.com/2.3.2/">Looking for Bootstrap 2.3.2?</a> + </li> + </ul> + {% endif %} </div> </div> </div> diff --git a/docs/_includes/social-buttons.html b/_includes/social-buttons.html similarity index 100% rename from docs/_includes/social-buttons.html rename to _includes/social-buttons.html diff --git a/docs/_layouts/default.html b/_layouts/default.html similarity index 59% rename from docs/_layouts/default.html rename to _layouts/default.html index 68bcbf8d23ae1cb138736d1f3ee5d9610de9d5b1..30a261ce8649d7e26335c8c07e2d4525d4c9c19f 100644 --- a/docs/_layouts/default.html +++ b/_layouts/default.html @@ -1,4 +1,4 @@ -<!DOCTYPE html> + <!DOCTYPE html> <html lang="en"> <head> <!-- Meta, title, CSS, favicons, etc. --> @@ -15,6 +15,7 @@ <div class="container"> <h1>{{ page.title }}</h1> <p>{{ page.lead }}</p> + {% include ads.html %} </div> </div> @@ -49,8 +50,21 @@ </div> - <!-- Main docs footer (social buttons, copyright, etc). --> - {% include colophon.html %} + <!-- Footer + ================================================== --> + <footer class="bs-footer"> + {% include social-buttons.html %} + + <p>Designed and built with all the love in the world by <a href="http://twitter.com/mdo" target="_blank">@mdo</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.</p> + <p>Code licensed under <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>, documentation under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> + <ul class="footer-links"> + <li><a href="http://blog.getbootstrap.com">Blog</a></li> + <li class="muted">·</li> + <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Issues</a></li> + <li class="muted">·</li> + <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">Changelog</a></li> + </ul> + </footer> <!-- JS and analytics only. --> {% include footer.html %} diff --git a/docs/_layouts/home.html b/_layouts/home.html similarity index 100% rename from docs/_layouts/home.html rename to _layouts/home.html diff --git a/docs/assets/css/docs.css b/assets/css/docs.css similarity index 88% rename from docs/assets/css/docs.css rename to assets/css/docs.css index f07654a98fb42c3ddb6b0f670fee254cb786febd..dea0bd72184c60ee744bd5ea2b63d96df2d6683c 100644 --- a/docs/assets/css/docs.css +++ b/assets/css/docs.css @@ -13,6 +13,19 @@ body { padding-top: 50px; /* Account for fixed navbar */ } +/* Custom docs button */ +.btn-bs { + color: #b94a48; + background-color: #fff; + border-color: #e5e5e5; +} +.btn-bs:hover, +.btn-bs:active { + color: #fff; + background-color: #b94a48; + border-color: #b94a48; +} + /* Top nav and header @@ -43,6 +56,15 @@ body { border-color: #993c3a; } +/* Old docs callout */ +.bs-old-docs { + padding: 15px 20px; + color: #777; + border-bottom: 1px solid #e5e5e5; +} +.bs-old-docs strong { + color: #555; +} /* Homepage masthead @@ -63,20 +85,11 @@ body { } /* Download button */ -.bs-masthead .btn { +.bs-masthead .btn-bs { margin-top: 5px; margin-bottom: 5px; padding: 18px 24px; font-size: 21px; - color: #b94a48; /* redeclare to override the `.jumbotron a` */ - background-color: #fff; - border-color: #e5e5e5; -} -.bs-masthead .btn:hover, -.bs-masthead .btn:active { - color: #fff; /* redeclare to override the `.jumbotron a` */ - background-color: #b94a48; - border-color: #b94a48; } /* Textual links */ @@ -95,12 +108,10 @@ body { } + /* Customize and Download button -------------------------------------------------- */ -.bs-customizer { - -} .bs-customizer .toggle { float: right; } @@ -116,23 +127,8 @@ body { background-color: #fafafa; } - .bs-customize-download { - text-align:center; -} -.bs-customize-download .btn { - margin-top: 5px; - margin-bottom: 5px; - padding: 18px 24px; - font-size: 21px; - color: #b94a48; - background-color: #fff; - border-color: #b94a48; -} -.bs-customize-download .btn:hover, -.bs-customize-download .btn:active { - color: #fff; - background-color: #b94a48; + text-align: center; } @@ -146,7 +142,7 @@ body { font-size: 16px; color: #5a5a5a; text-align: center; - border-bottom: 1px solid #ddd; + border-bottom: 1px solid #e5e5e5; } .bs-header h1 { color: #b94a48; @@ -155,6 +151,45 @@ body { font-weight: 300; line-height: 1.5; } +.bs-header .container { + position: relative; +} + +/* Ads in page headers */ +.carbonad { + width: auto !important; + margin: 50px -30px -40px !important; + padding: 20px !important; + overflow: hidden; /* clearfix */ + height: auto !important; + font-size: 13px !important; + line-height: 16px !important; + text-align: left; + background: none !important; + border: 0 !important; + border-top: 1px solid #e5e5e5 !important; +} +.carbonad-img { + margin: 0 !important; +} +.carbonad-text, +.carbonad-tag { + float: none !important; + display: block !important; + width: auto !important; + height: auto !important; + margin-left: 145px !important; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif !important; +} +.carbonad-text { + padding-top: 0 !important; +} +.carbonad-tag { + text-align: left !important; +} +.carbonad #azcarbon > img { + display: none; /* hide what I assume are tracking images */ +} /* Padding for in-page bookmarks */ .bs-docs-section { @@ -222,11 +257,10 @@ body { /* Side notes for calling out things -------------------------------------------------- */ +/* Base styles (regardless of theme) */ .bs-callout { margin: 20px 0; padding: 15px 30px 15px 15px; - background-color: #fcf2f2; - border-left: 5px solid #df7c7b; } .bs-callout h4 { margin-top: 0; @@ -239,6 +273,20 @@ body { background-color: #fff; } +/* Themes for different contexts */ +.bs-callout-danger { + background-color: #fcf2f2; + border-left: 5px solid #df7c7b; +} +.bs-callout-warning { + background-color: #fefbed; + border-left: 5px solid #f5d659; +} +.bs-callout-info { + background-color: #f0f7fd; + border-left: 5px solid #55a9e1; +} + /* Special grid styles @@ -346,6 +394,7 @@ body { .bs-example.form-inline input[type="password"] { width: 180px; } +.bs-example-control-sizing select, .bs-example-control-sizing input[type="text"] + input[type="text"] { margin-top: 10px; } @@ -479,43 +528,6 @@ body { -/* Icons --------------------------------------------------- */ - -.the-icons { - padding-bottom: 1px; - margin-left: 0; - list-style: none; - margin-bottom: 20px; - overflow: hidden; -} -.the-icons li { - float: left; - width: 100px; - height: 110px; - padding: 10px; - border: 1px solid #ddd; - font-size: 12px; - line-height: 1.25; - text-align: center; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - margin: 0 -1px -1px 0; -} -.the-icons .glyphicon { - display: block; - margin: 5px auto; - vertical-align: middle; - margin-right: 3px; - font-size: 24px; -} -.the-icons li:hover { - background-color: rgba(255,0,0,.1); -} - - - /* Responsive docs -------------------------------------------------- */ @@ -602,6 +614,7 @@ body { } .footer-links { margin: 10px 0; + padding-left: 0; } .footer-links li { display: inline; @@ -617,7 +630,8 @@ body { } .bs-social-buttons { display: inline-block; - margin: 0; + margin-bottom: 0; + padding-left: 0; list-style: none; } .bs-social-buttons li { @@ -742,6 +756,12 @@ input.focused { line-height: 1; } + .carbonad { + margin: 0 !important; + border: 1px solid #e5e5e5 !important; + border-radius: 4px; + } + /* Show the docs nav */ .bs-sidebar { display: block; @@ -778,9 +798,17 @@ input.focused { width: 213px; } - /* Icons */ - .the-icons li { - width: 12.5%; + .bs-header h1, + .bs-header p { + margin-right: 380px; + } + .carbonad { + position: absolute; + top: 20px; + right: 0; + padding: 15px !important; + width: 330px !important; + min-height: 132px; } } diff --git a/docs/assets/css/pygments-manni.css b/assets/css/pygments-manni.css similarity index 100% rename from docs/assets/css/pygments-manni.css rename to assets/css/pygments-manni.css diff --git a/assets/ico/apple-touch-icon-114-precomposed.png b/assets/ico/apple-touch-icon-114-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..4bce6da0baa2d3bb4e0c63df054e0988532f8a9c Binary files /dev/null and b/assets/ico/apple-touch-icon-114-precomposed.png differ diff --git a/assets/ico/apple-touch-icon-144-precomposed.png b/assets/ico/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..0b6baa106a5a64e41871c8e0bc06bb960e978dad Binary files /dev/null and b/assets/ico/apple-touch-icon-144-precomposed.png differ diff --git a/assets/ico/apple-touch-icon-57-precomposed.png b/assets/ico/apple-touch-icon-57-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..31625ad400ecc28364304d38fe9b89af67d41d6d Binary files /dev/null and b/assets/ico/apple-touch-icon-57-precomposed.png differ diff --git a/assets/ico/apple-touch-icon-72-precomposed.png b/assets/ico/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..fc8a855eabee65bdedac6fb81b8982128b126889 Binary files /dev/null and b/assets/ico/apple-touch-icon-72-precomposed.png differ diff --git a/assets/ico/favicon.png b/assets/ico/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..2a5db926567034140197e7d2c4590defc90fa268 Binary files /dev/null and b/assets/ico/favicon.png differ diff --git a/docs/assets/js/application.js b/assets/js/application.js similarity index 97% rename from docs/assets/js/application.js rename to assets/js/application.js index 4fa65cb9eea1ebc616be15bed020e86e0c18e537..3fa5f07b77a4efd1776bf6e2cad2068cc02b7b8d 100644 --- a/docs/assets/js/application.js +++ b/assets/js/application.js @@ -92,7 +92,6 @@ .map(function () { return this.value }) .toArray() , vars = {} - , img = ['glyphicons-halflings.png', 'glyphicons-halflings-white.png'] $("#less-variables input") .each(function () { @@ -107,7 +106,6 @@ js: js , css: css , vars: vars - , img: img } }) }) diff --git a/docs/assets/js/holder/holder.js b/assets/js/holder.js similarity index 100% rename from docs/assets/js/holder/holder.js rename to assets/js/holder.js diff --git a/docs/assets/js/html5shiv.js b/assets/js/html5shiv.js similarity index 100% rename from docs/assets/js/html5shiv.js rename to assets/js/html5shiv.js diff --git a/docs/assets/js/jquery.js b/assets/js/jquery.js similarity index 100% rename from docs/assets/js/jquery.js rename to assets/js/jquery.js diff --git a/docs/assets/js/respond/respond.min.js b/assets/js/respond.min.js similarity index 100% rename from docs/assets/js/respond/respond.min.js rename to assets/js/respond.min.js diff --git a/bower.json b/bower.json index f246145ee20b533ebf6f2cae235c68c13456adea..246ffd86ac3dc4f90616c43a8cc486e9a5a6bb15 100644 --- a/bower.json +++ b/bower.json @@ -3,6 +3,6 @@ "version": "3.0.0", "main": ["./docs/assets/js/bootstrap.js", "./docs/assets/css/bootstrap.css"], "dependencies": { - "jquery": "~1.8.0" + "jquery": ">= 1.9.0" } } diff --git a/docs/components.html b/components.html similarity index 95% rename from docs/components.html rename to components.html index 79b00e991371c88e4299c25c9c8d8f0ee86b7503..6eb849ea7b67ea2a9197c7fde4fc48b1192f12a2 100644 --- a/docs/components.html +++ b/components.html @@ -12,7 +12,7 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na <div class="page-header"> <h1>Dropdown menus</h1> </div> - <p class="lead">Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href="./javascript.html#dropdowns">dropdown JavaScript plugin</a>.</p> + <p class="lead">Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href="/javascript/#dropdowns">dropdown JavaScript plugin</a>.</p> <h3 id="dropdowns-example">Example</h3> <p>Wrap the dropdown's trigger and the dropdown menu within <code>.dropdown</code>, or another element that declares <code>position: relative;</code>. Then add the menu's HTML.</p> @@ -46,6 +46,31 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na <ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> ... </ul> +{% endhighlight %} + + <h3 id="dropdowns-headers">Dropdown headers</h3> + <p>Add a header to break up label sections of actions in any dropdown menu.</p> + <div class="bs-example"> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <li class="dropdown-header">Dropdown header</li> + <li><a tabindex="-1" href="#">Action</a></li> + <li><a tabindex="-1" href="#">Another action</a></li> + <li><a tabindex="-1" href="#">Something else here</a></li> + <li class="divider"></li> + <li class="dropdown-header">Dropdown header</li> + <li><a tabindex="-1" href="#">Separated link</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <li class="dropdown-header">Dropdown header</li> + ... + <li class="divider"></li> + <li class="dropdown-header">Dropdown header</li> + ... +</ul> {% endhighlight %} <h3 id="dropdowns-disabled">Disabled menu options</h3> @@ -76,9 +101,9 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na <div class="page-header"> <h1>Button groups</h1> </div> - <p class="lead">Group a series of buttons together on a single line with the button group. Add on optional JavaScript radio and checkbox style behavior with <a href="./javascript.html#buttons">our buttons plugin</a>.</p> + <p class="lead">Group a series of buttons together on a single line with the button group. Add on optional JavaScript radio and checkbox style behavior with <a href="/javascript/#js-buttons">our buttons plugin</a>.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Tooltips & popovers in button groups require special setting</h4> <p>When using tooltips or popovers on elements within a <code>.btn-group</code>, you'll have to specify the option <code>container: 'body'</code> to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).</p> </div> @@ -167,7 +192,13 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na {% endhighlight %} <h3 id="btn-groups-justified">Justified button groups</h3> - <p>Make a group of buttons stretch at the same size to span the entire width of its parent. <strong>This only works with <code><a></code> elements</strong> as the <code><button></code> doesn't pick up these styles.</p> + <p>Make a group of buttons stretch at the same size to span the entire width of its parent.</p> + + <div class="bs-callout bs-callout-warning"> + <h4>Element-specific usage</h4> + <p>This only works with <code><a></code> elements as the <code><button></code> doesn't pick up these styles.</p> + </div> + <div class="bs-example"> <div class="btn-group btn-group-justified"> <a href="#" class="btn btn-default">Left</a> @@ -193,9 +224,9 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na </div> <p class="lead">Use any button to trigger a dropdown menu by placing it within a <code>.btn-group</code> and providing the proper menu markup.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Plugin dependency</h4> - <p>Button dropdowns require the <a href="#dropdown-plugin">dropdown plugin</a> to be included in your version of Bootstrap.</p> + <p>Button dropdowns require the <a href="/javascript/#dropdowns">dropdown plugin</a> to be included in your version of Bootstrap.</p> </div> <h3 id="btn-dropdowns-single">Single button dropdowns</h3> @@ -530,7 +561,7 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na <h3 id="nav-disabled-links">Disabled state</h3> <p>For any nav component (tabs, pills, or list), add <code>.disabled</code> for <strong>gray links and no hover effects</strong>.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-warning"> <h4>Link functionality not impacted</h4> <p>This class will only change the <code><a></code>'s appearance, not its functionality. Use custom JavaScript to disable links here.</p> </div> @@ -559,7 +590,7 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na <h2 id="nav-dropdowns">Dropdowns</h2> - <p>Add dropdown menus with a little extra HTML and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.</p> + <p>Add dropdown menus with a little extra HTML and the <a href="/javascript/#dropdowns">dropdowns JavaScript plugin</a>.</p> <h3>Tabs with dropdowns</h3> <div class="bs-example"> @@ -814,7 +845,7 @@ lead: "Dozens of reusable components built to provide iconography, dropdowns, na </div> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Body padding required</h4> <p>The fixed navbar will overlay your other content, unless you add <code>padding</code> to the top of the <code><body></code>. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.</p> {% highlight css %} @@ -843,7 +874,7 @@ body { padding-top: 70px; } </div> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Body padding required</h4> <p>The fixed navbar will overlay your other content, unless you add <code>padding</code> to the bottom of the <code><body></code>. Try out your own values or use our snippet below. Tip: By default, the navbar is 50px high.</p> {% highlight css %} @@ -896,7 +927,7 @@ body { padding-bottom: 70px; } <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li class="divider"></li> - <li class="nav-header">Nav header</li> + <li class="dropdown-header">Dropdown header</li> <li><a href="#">Separated link</a></li> <li><a href="#">One more separated link</a></li> </ul> @@ -944,9 +975,9 @@ body { padding-bottom: 70px; } </div><!-- /.navbar --> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Plugin dependency</h4> - <p>The responsive navbar requires the <a href="#collapse">collapse plugin</a> to be included in your version of Bootstrap.</p> + <p>The responsive navbar requires the <a href="/javascript/#collapse">collapse plugin</a> to be included in your version of Bootstrap.</p> </div> @@ -973,7 +1004,7 @@ body { padding-bottom: 70px; } <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li class="divider"></li> - <li class="nav-header">Nav header</li> + <li class="dropdown-header">Dropdown header</li> <li><a href="#">Separated link</a></li> <li><a href="#">One more separated link</a></li> </ul> @@ -1016,7 +1047,7 @@ body { padding-bottom: 70px; } <h1>Breadcrumbs <small></small></h1> </div> <p class="lead">Indicate the current page's location within a navigational hierarchy.</p> - <p>Separators are automatically added in CSS through <code>:after</code> and <code>content</code>.</p> + <p>Separators are automatically added in CSS through <code>:before</code> and <code>content</code>.</p> <div class="bs-example"> <ul class="breadcrumb"> <li class="active">Home</li> @@ -1048,7 +1079,7 @@ body { padding-bottom: 70px; } <div class="page-header"> <h1>Pagination</h1> </div> - <p class="lead">Provide pagination links for your site or app with the multi-page pagination component, or the simpler <a href="./docs/#pagination-pager">pager alternative</a>.</p> + <p class="lead">Provide pagination links for your site or app with the multi-page pagination component, or the simpler <a href="#pagination-pager">pager alternative</a>.</p> <h2 id="pagination-default">Standard pagination</h2> <p>Simple pagination inspired by Rdio, great for apps and search results. The large block is hard to miss, easily scalable, and provides large click areas.</p> @@ -1261,7 +1292,7 @@ body { padding-bottom: 70px; } <h4>Self collapsing</h4> <p>When there are no new or unread items, badges will simply collapse (via CSS's <code>:empty</code> selector) provided no content exists within.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>Badges won't self collapse in Internet Explorer 8 because it lacks support for the <code>:empty</code> selector.</p> </div> @@ -1352,7 +1383,7 @@ body { padding-bottom: 70px; } <div class="page-header"> <h1>Thumbnails</h1> </div> - <p class="lead">Extend Bootstrap's <a href="./docs/#grid">grid system</a> with the thumbnail component to easily display grids of images, videos, text, and more.</p> + <p class="lead">Extend Bootstrap's <a href="/css/#grid">grid system</a> with the thumbnail component to easily display grids of images, videos, text, and more.</p> <h3>Default thumbnails</h3> <p>By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.</p> @@ -1452,10 +1483,16 @@ body { padding-bottom: 70px; } <div class="page-header"> <h1>Alerts</h1> </div> - <p class="lead">Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. For inline dismissal, use the <a href="./docs/#js-alerts">alerts jQuery plugin</a>.</p> + <p class="lead">Provide contextual feedback messages for typical user actions with the handful of available and flexible alert messages. For inline dismissal, use the <a href="/javascript/#js-alerts">alerts jQuery plugin</a>.</p> <h3 id="alerts-default">Default alert</h3> - <p>Wrap any text and an optional dismiss button in <code>.alert</code> for a basic warning alert message. <strong>To ensure proper behavior across all devices</strong>, be sure to use <code><button></code> element with the <code>data-dismiss="alert"</code> data attribute.</p> + <p>Wrap any text and an optional dismiss button in <code>.alert</code> for a basic warning alert message.</p> + + <div class="bs-callout bs-callout-warning"> + <h4>Ensure proper behavior across all devices</h4> + <p>Be sure to use the <code><button></code> element with the <code>data-dismiss="alert"</code> data attribute.</p> + </div> + <div class="bs-example"> <div class="alert"> <button type="button" class="close" data-dismiss="alert">×</button> @@ -1548,7 +1585,7 @@ body { padding-bottom: 70px; } </div> <p class="lead">Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>Progress bars use CSS3 transitions and animations to achieve some of their effects. These features are not supported in Internet Explorer 9 and below or older versions of Firefox. Opera 12 does not support animations.</p> </div> @@ -1813,33 +1850,6 @@ body { padding-bottom: 70px; } <li class="list-group-item">Porta ac consectetur ac</li> <li class="list-group-item">Vestibulum at eros</li> </ul> -{% endhighlight %} - - <h3 id="list-group-chevrons">With chevrons</h3> - <p>Add Glyphicon chevrons that are automatically moved to the right.</p> - <div class="bs-example"> - <ul class="list-group"> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - Cras justo odio - </li> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - Dapibus ac facilisis in - </li> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - Morbi leo risus - </li> - </ul> - </div> -{% highlight html %} -<ul class="list-group"> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - Cras justo odio - </li> -</ul> {% endhighlight %} <h3 id="list-group-badges">With badges</h3> @@ -1867,37 +1877,6 @@ body { padding-bottom: 70px; } Cras justo odio </li> </ul> -{% endhighlight %} - - <h3 id="list-group-badges-chevrons">With badges and chevrons</h3> - <p>Why not both?</p> - <div class="bs-example"> - <ul class="list-group"> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - <span class="badge">14</span> - Cras justo odio - </li> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - <span class="badge">2</span> - Dapibus ac facilisis in - </li> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - <span class="badge">1</span> - Morbi leo risus - </li> - </ul> - </div> -{% highlight html %} -<ul class="list-group"> - <li class="list-group-item"> - <span class="glyphicon glyphicon-chevron-right"></span> - <span class="badge">14</span> - Cras justo odio - </li> -</ul> {% endhighlight %} <h3 id="list-group-linked">Linked list group</h3> @@ -1906,19 +1885,14 @@ body { padding-bottom: 70px; } <div class="list-group"> <a href="#" class="list-group-item active"> Cras justo odio - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Dapibus ac facilisis in - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Morbi leo risus - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Porta ac consectetur ac - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Vestibulum at eros - <span class="glyphicon glyphicon-chevron-right"></span> </a> </div> </div> @@ -1926,19 +1900,14 @@ body { padding-bottom: 70px; } <div class="list-group"> <a href="#" class="list-group-item active"> Cras justo odio - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Dapibus ac facilisis in - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Morbi leo risus - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Porta ac consectetur ac - <span class="glyphicon glyphicon-chevron-right"></span> </a> <a href="#" class="list-group-item">Vestibulum at eros - <span class="glyphicon glyphicon-chevron-right"></span> </a> </div> {% endhighlight %} @@ -2058,7 +2027,7 @@ body { padding-bottom: 70px; } {% endhighlight %} <h3 id="panels-list-group">With list groups</h3> - <p>Easily include full-width <a href="./docs/#list-group">list groups</a> within any panel.</p> + <p>Easily include full-width <a href="#list-group">list groups</a> within any panel.</p> <div class="bs-example"> <div class="panel"> <!-- Default panel contents --> diff --git a/docs/css.html b/css.html similarity index 95% rename from docs/css.html rename to css.html index 95295a359c34161ef479737baca8fcbb4bce9387..4500efdd1b4f45f5c5bbb33fda01cad0c6f2c5f9 100644 --- a/docs/css.html +++ b/css.html @@ -2,7 +2,7 @@ layout: default title: CSS slug: css -lead: "Fundamental HTML elements styled and enhanced with extensible classes." +lead: "Global CSS settings, fundamental HTML elements styled and enhanced with extensible classes, and an advanced grid system." --- @@ -57,7 +57,7 @@ lead: "Fundamental HTML elements styled and enhanced with extensible classes." - <!-- Glyphicons icont font + <!-- Glyphicons icon font ================================================== --> <div class="bs-docs-section" id="glyphicons"> <div class="page-header"> @@ -259,10 +259,10 @@ lead: "Fundamental HTML elements styled and enhanced with extensible classes." </div> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Need more examples?</h4> <p>We dive into more grid layouts in a separate page, free of chrome and documentation to better show you the power of the grid.</p> - <p><a class="btn btn-danger" target="_blank" href="../examples/grid/">More grid examples</a></p> + <p><a class="btn btn-danger" target="_blank" href="http://examples.getbootstrap.com/grid/">More grid examples</a></p> </div> <h3 id="grid-offsetting">Offsetting columns</h3> @@ -341,7 +341,7 @@ lead: "Fundamental HTML elements styled and enhanced with extensible classes." {% endhighlight %} <h3 id="grid-less">LESS mixins and variables</h3> - <p>In addition to <a href="#grid-example">prebuilt grid classes</a> for fast layouts, Bootstrap includes LESS variables and mixins for quickly generating your own simple, semantic layouts.</p> + <p>In addition to <a href="#grid-example-basic">prebuilt grid classes</a> for fast layouts, Bootstrap includes LESS variables and mixins for quickly generating your own simple, semantic layouts.</p> <h4>Variables</h4> <p>Variables determine the number of columns, the gutter width, and the media query point at which to begin floating columns. We use these to generate the predefined grid classes documented above, as well as for the custom mixins listed below.</p> @@ -520,7 +520,10 @@ lead: "Fundamental HTML elements styled and enhanced with extensible classes." <em>rendered as italicized text</em> {% endhighlight %} - <p>Feel free to use <code><b></code> and <code><i></code> in HTML5. <code><b></code> is meant to highlight words or phrases without conveying additional importance while <code><i></code> is mostly for voice, technical terms, etc.</p> + <div class="bs-callout bs-callout-info"> + <h4>Alternate elements</h4> + <p>Feel free to use <code><b></code> and <code><i></code> in HTML5. <code><b></code> is meant to highlight words or phrases without conveying additional importance while <code><i></code> is mostly for voice, technical terms, etc.</p> + </div> <h3>Alignment classes</h3> <p>Easily realign text to components with text alignment classes.</p> @@ -788,10 +791,10 @@ lead: "Fundamental HTML elements styled and enhanced with extensible classes." </dl> {% endhighlight %} - <h5>Auto-truncating</h5> - <p> - Horizontal description lists will truncate terms that are too long to fit in the left column fix <code>text-overflow</code>. In narrower viewports, they will change to the default stacked layout. - </p> + <div class="bs-callout bs-callout-info"> + <h4>Auto-truncating</h4> + <p>Horizontal description lists will truncate terms that are too long to fit in the left column with <code>text-overflow</code>. In narrower viewports, they will change to the default stacked layout.</p> + </div> </div> @@ -878,7 +881,7 @@ For example, <code><section></code> should be wrapped as inline. <h3 id="tables-striped">Striped</h3> <p>Use <code>.table-striped</code> to add zebra-striping to any table row within the <code><tbody></code>.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>Striped tables are styled via the <code>:nth-child</code> CSS selector, which is not available in IE8.</p> </div> @@ -1045,8 +1048,8 @@ For example, <code><section></code> should be wrapped as inline. - <h2 id="tables-row-classes">Optional row classes</h2> - <p>Use contextual classes to color table rows.</p> + <h2 id="tables-row-classes">Contextual table classes</h2> + <p>Use contextual classes to color table rows or individual cells.</p> <table class="table table-bordered table-striped"> <colgroup> <col class="col-lg-1"> @@ -1063,25 +1066,25 @@ For example, <code><section></code> should be wrapped as inline. <td> <code>.success</code> </td> - <td>Indicates a successful or positive action.</td> + <td>Indicates a successful or positive action</td> </tr> <tr> <td> <code>.danger</code> </td> - <td>Indicates a dangerous or potentially negative action.</td> + <td>Indicates a dangerous or potentially negative action</td> </tr> <tr> <td> <code>.warning</code> </td> - <td>Indicates a warning that might need attention.</td> + <td>Indicates a warning that might need attention</td> </tr> <tr> <td> - <code>.info</code> + <code>.active</code> </td> - <td>Used as an alternative to the default styles.</td> + <td>Applies the hover color to a particular row or cell</td> </tr> </tbody> </table> @@ -1090,42 +1093,64 @@ For example, <code><section></code> should be wrapped as inline. <thead> <tr> <th>#</th> - <th>Product</th> - <th>Payment Taken</th> - <th>Status</th> + <th>Column heading</th> + <th>Column heading</th> + <th>Column heading</th> </tr> </thead> <tbody> <tr class="success"> <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> </tr> - <tr class="danger"> + <tr> <td>2</td> - <td>TB - Monthly</td> - <td>02/04/2012</td> - <td>Declined</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> </tr> - <tr class="warning"> + <tr class="danger"> <td>3</td> - <td>TB - Monthly</td> - <td>03/04/2012</td> - <td>Pending</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> + </tr> + <tr> + <td>4</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> + </tr> + <tr class="warning"> + <td>5</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> + </tr> + <tr> + <td>6</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> + </tr> + <tr class="active"> + <td>7</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> </tr> </tbody> </table> </div><!-- /example --> {% highlight html %} -... <tr class="success"> <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> + <td>Column content</td> + <td>Column content</td> + <td>Column content</td> </tr> -... {% endhighlight %} </div> @@ -1178,7 +1203,7 @@ For example, <code><section></code> should be wrapped as inline. <h3 id="forms-inline">Inline form</h3> <p>Add <code>.form-inline</code> for left-aligned and inline-block controls for a compact layout.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <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> </div> @@ -1260,7 +1285,7 @@ For example, <code><section></code> should be wrapped as inline. <h3>Inputs</h3> <p>Most common form control, text-based input fields. Includes support for all HTML5 types: text, password, datetime, datetime-local, date, month, time, week, number, email, url, search, tel, and color.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Type declaration required</h4> <p>Inputs will only be fully styled if their <code>type</code> is properly declared.</p> </div> @@ -1408,12 +1433,12 @@ For example, <code><section></code> should be wrapped as inline. <h3 id="forms-disabled-fieldsets">Disabled fieldsets</h3> <p>Add the <code>disabled</code> attribute to a <code><fieldset></code> to disable all the controls within the <code><fieldset></code> at once.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-warning"> <h4>Link functionality of <code><a></code> not impacted</h4> <p>This class will only change the appearance of <code><a class="btn btn-default"></code> buttons, not their functionality. Use custom JavaScript to disable links here.</p> </div> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>While Bootstrap will apply these styles in all browsers, IE and Safari don't actually support the <code><disabled></code> attribute on a <code><fieldset></code>. Use custom JavaScript to disable the fieldset in these browsers.</p> </div> @@ -1462,19 +1487,19 @@ For example, <code><section></code> should be wrapped as inline. <p>Validation styles are applied on a per-input basis. With horizontal forms, the <code><label class="control-label"></code> will always be styled.</p> <form class="bs-example form-horizontal"> - <div class="control-group has-warning"> + <div class="has-warning"> <label class="control-label" for="inputWarning">Input with warning</label> <div class="controls"> <input type="text" class="input-with-feedback" id="inputWarning"> </div> </div> - <div class="control-group has-error"> + <div class="has-error"> <label class="control-label" for="inputError">Input with error</label> <div class="controls"> <input type="text" class="input-with-feedback" id="inputError"> </div> </div> - <div class="control-group has-success"> + <div class="has-success"> <label class="control-label" for="inputSuccess">Input with success</label> <div class="controls"> <input type="text" class="input-with-feedback" id="inputSuccess"> @@ -1482,19 +1507,19 @@ For example, <code><section></code> should be wrapped as inline. </div> </form> {% highlight html %} -<div class="control-group has-warning"> +<div class="has-warning"> <label class="control-label" for="inputWarning">Input with warning</label> <div class="controls"> <input type="text" class="input-with-feedback" id="inputWarning"> </div> </div> -<div class="control-group has-error"> +<div class="has-error"> <label class="control-label" for="inputError">Input with error</label> <div class="controls"> <input type="text" class="input-with-feedback" id="inputError"> </div> </div> -<div class="control-group has-success"> +<div class="has-success"> <label class="control-label" for="inputSuccess">Input with success</label> <div class="controls"> <input type="text" class="input-with-feedback" id="inputSuccess"> @@ -1510,11 +1535,11 @@ For example, <code><section></code> should be wrapped as inline. <h3 id="forms-input-groups">Input groups</h3> <p>Add text or buttons before, after, or on both sides of any text-based input. Use <code>.input-group</code> with an <code>.add-on</code> to prepend or append elements to an <code><input></code>.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>Avoid using <code><select></code> elements here as they cannot be fully styled in WebKit browsers.</p> </div> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Tooltips & popovers in input groups require special setting</h4> <p>When using tooltips or popovers on elements within an <code>.input-group</code>, you'll have to specify the option <code>container: 'body'</code> to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip or popover is triggered).</p> </div> @@ -1747,12 +1772,26 @@ For example, <code><section></code> should be wrapped as inline. <input class="input-large" type="text" placeholder=".input-large"> <input type="text" placeholder="Default input"> <input class="input-small" type="text" placeholder=".input-small"> + + <select class="input-large"> + <option value="">.input-large</option> + </select> + <select> + <option value="">Default select</option> + </select> + <select class="input-small"> + <option value="">.input-small</option> + </select> </div> </form> {% highlight html %} <input class="input-large" type="text" placeholder=".input-large"> <input type="text" placeholder="Default input"> <input class="input-small" type="text" placeholder=".input-small"> + +<select class="input-large">...</select> +<select>...</select> +<select class="input-small">...</select> {% endhighlight %} <h4>Column sizing</h4> @@ -1897,7 +1936,7 @@ For example, <code><section></code> should be wrapped as inline. <button type="button" class="btn btn-default btn-large" disabled="disabled">Button</button> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>If you add the <code>disabled</code> attribute to a <code><button></code>, Internet Explorer 9 and below will render text gray with a nasty text-shadow that we cannot fix.</p> </div> @@ -1915,7 +1954,7 @@ For example, <code><section></code> should be wrapped as inline. <p> We use <code>.disabled</code> as a utility class here, similar to the common <code>.active</code> class, so no prefix is required. </p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-warning"> <h4>Link functionality not impacted</h4> <p>This class will only change the <code><a></code>'s appearance, not its functionality. Use custom JavaScript to disable links here.</p> </div> @@ -1936,7 +1975,7 @@ For example, <code><section></code> should be wrapped as inline. <input class="btn btn-default" type="submit" value="Submit"> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-warning"> <h4>Cross-browser rendering</h4> <p>As a best practice, <strong>we highly recommend using the <code><button></code> element whenever possible</strong> to ensure matching cross-browser rendering.</p> </div> @@ -1953,7 +1992,7 @@ For example, <code><section></code> should be wrapped as inline. </div> <p>Add classes to an <code><img></code> element to easily style images in any project.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p>Keep in mind that Internet Explorer 8 lacks support for rounded corners.</p> </div> diff --git a/docs/customize.html b/customize.html similarity index 95% rename from docs/customize.html rename to customize.html index ed33632891657f7e37a4cf16cfee154b749e57a2..511e94e41a66ddb252b79c2914052a0997958867 100644 --- a/docs/customize.html +++ b/customize.html @@ -206,12 +206,6 @@ lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to ge <div class="row"> <div class="col-lg-4"> <h4>Media</h4> - <div class="checkbox"> - <label> - <input type="checkbox" checked value="glyphicons.less"> - Glyphicons - </label> - </div> <div class="checkbox"> <label> <input type="checkbox" checked value="thumbnails.less"> @@ -355,9 +349,15 @@ lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to ge </div> </div> </div> - <div class="bs-callout"> - <h4>Heads up!</h4> - <p>All checked plugins will be compiled into a single file, <code>bootstrap.js</code>. All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.</p> + + <div class="bs-callout bs-callout-info"> + <h4>Produces two files</h4> + <p>All checked plugins will be compiled into a readable <code>bootstrap.js</code> and a minified <code>bootstrap.min.js</code>. We recommend you use the minified version in production.</p> + </div> + + <div class="bs-callout bs-callout-danger"> + <h4>jQuery required</h4> + <p>All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.</p> </div> </div> @@ -404,9 +404,20 @@ lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to ge <label>@line-height-base</label> <input type="text" placeholder="1.428571429"> <p class="help-block">Used to calculate line-height throughout Bootstrap.</p> + </div> + </div> + + <h4>Headings</h4> + <div class="row"> + <div class="col-lg-6"> + <label>@headings-font-family</label> + <input type="text" placeholder="@font-family-base"> + <p class="help-block">Choose a separate font-family for headings.</p> <label>@headings-font-weight</label> <input type="text" placeholder="500"> <p class="help-block">Choose a separate font-weight for headings.</p> + </div> + <div class="col-lg-6"> <label>@headings-line-height</label> <input type="text" placeholder="1.1"> <p class="help-block">Choose a separate line-height for headings.</p> @@ -464,6 +475,24 @@ lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to ge </div> </div> + <h3>Container sizes</h3> + <p>Define the maximum width of <code>.container</code> for different screen sizes.</p> + <div class="row"> + <div class="col-lg-6"> + <label>@container-tablet</label> + <input type="text" placeholder="728px"> + <p class="help-block">For <code>@screen-small</code> and up.</p> + <label>@container-desktop</label> + <input type="text" placeholder="940px"> + <p class="help-block">For <code>@screen-medium</code> and up.</p> + </div> + <div class="col-lg-6"> + <label>@container-large-desktop</label> + <input type="text" placeholder="1170px"> + <p class="help-block">For <code>@screen-large</code> and up.</p> + </div> + </div> + <h3>Grid system</h3> <p>Define your custom responsive grid.</p> <div class="row"> @@ -528,7 +557,7 @@ lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to ge <label>@btn-default-color</label> <input type="text" placeholder="#fff"> <label>@btn-default-bg</label> - <input type="text" placeholder="#a7a99aa"> + <input type="text" placeholder="#474949"> <label>@btn-default-border</label> <input type="text" placeholder="@btn-default-bg"> <h4>Primary</h4> @@ -1126,9 +1155,9 @@ lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to ge </div> <p class="lead">Hooray! Your custom version of Bootstrap is now ready to be compiled. Just click the button below to finish the process.</p> <div class="bs-customize-download"> - <a class="btn" href="#" onclick="_gaq.push(['_trackEvent', 'Customize', 'Download', 'Customize and Download']);">Customize and Download</a> + <a class="btn btn-bs" href="#" onclick="_gaq.push(['_trackEvent', 'Customize', 'Download', 'Customize and Download']);">Customize and Download</a> </div> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>What's included?</h4> <p>Downloads include compiled CSS, compiled and minified CSS, and compiled jQuery plugins, all nicely packed up into a zipball for your convenience.</p> </div> diff --git a/docs/assets/css/bootstrap.css b/dist/css/bootstrap.css similarity index 96% rename from docs/assets/css/bootstrap.css rename to dist/css/bootstrap.css index 28f561a323074a4fa94c799d78d2202a70d5f894..aed3a36bfbc6176f5082893a6c394159031ff3f1 100644 --- a/docs/assets/css/bootstrap.css +++ b/dist/css/bootstrap.css @@ -329,7 +329,7 @@ img { } .img-responsive { - display: block; + display: inline-block; height: auto; max-width: 100%; } @@ -342,6 +342,13 @@ img { border-radius: 500px; } +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eeeeee; +} + p { margin: 0 0 10px; } @@ -517,9 +524,9 @@ ol { } ul ul, +ol ul, ul ol, -ol ol, -ol ul { +ol ol { margin-bottom: 0; } @@ -590,14 +597,6 @@ dd { clear: both; } -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #fff; - border-bottom: 1px solid rgba(255, 255, 255, 0.5); -} - abbr[title], abbr[data-original-title] { cursor: help; @@ -672,11 +671,7 @@ address { code, pre { - padding: 0 3px 2px; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - border-radius: 4px; } code { @@ -685,6 +680,7 @@ code { color: #c7254e; white-space: nowrap; background-color: #f9f2f4; + border-radius: 4px; } pre { @@ -693,6 +689,7 @@ pre { margin: 0 0 10px; font-size: 13px; line-height: 1.428571429; + color: #333333; word-break: break-all; word-wrap: break-word; background-color: #f5f5f5; @@ -1113,8 +1110,10 @@ th { .table thead > tr > th, .table tbody > tr > th, +.table tfoot > tr > th, .table thead > tr > td, -.table tbody > tr > td { +.table tbody > tr > td, +.table tfoot > tr > td { padding: 8px; line-height: 1.428571429; vertical-align: top; @@ -1126,10 +1125,10 @@ th { } .table caption + thead tr:first-child th, -.table caption + thead tr:first-child td, .table colgroup + thead tr:first-child th, -.table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child th, +.table caption + thead tr:first-child td, +.table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child td { border-top: 0; } @@ -1144,9 +1143,11 @@ th { .table-condensed thead > tr > th, .table-condensed tbody > tr > th, +.table-condensed tfoot > tr > th, .table-condensed thead > tr > td, -.table-condensed tbody > tr > td { - padding: 4px 5px; +.table-condensed tbody > tr > td, +.table-condensed tfoot > tr > td { + padding: 5px; } .table-bordered { @@ -1158,8 +1159,10 @@ th { .table-bordered > thead > tr > th, .table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, .table-bordered > thead > tr > td, -.table-bordered > tbody > tr > td { +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { border-left: 1px solid #dddddd; } @@ -1212,15 +1215,15 @@ th { } .table-bordered > caption + thead > tr:first-child > th:first-child, -.table-bordered > caption + tbody > tr:first-child > td:first-child, .table-bordered > colgroup + thead > tr:first-child > th:first-child, +.table-bordered > caption + tbody > tr:first-child > td:first-child, .table-bordered > colgroup + tbody > tr:first-child > td:first-child { border-top-left-radius: 4px; } .table-bordered > caption + thead > tr:first-child > th:last-child, -.table-bordered > caption + tbody > tr:first-child > td:last-child, .table-bordered > colgroup + thead > tr:first-child > th:last-child, +.table-bordered > caption + tbody > tr:first-child > td:last-child, .table-bordered > colgroup + tbody > tr:first-child > td:last-child { border-top-right-radius: 4px; } @@ -1246,6 +1249,12 @@ table th[class^="col-"] { float: none; } +.table > tbody > tr > td.active, +.table > tbody > tr > th.active, +.table > tbody > tr.active > td { + background-color: #f5f5f5; +} + .table > tbody > tr > td.success, .table > tbody > tr > th.success, .table > tbody > tr.success > td { @@ -1333,7 +1342,7 @@ input[type="search"], input[type="tel"], input[type="color"] { display: block; - min-height: 38px; + height: 38px; padding: 8px 12px; font-size: 14px; line-height: 1.428571429; @@ -1345,8 +1354,6 @@ input[type="color"] { -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -webkit-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -moz-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; - -o-transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; transition: border-color ease-in-out 0.15s, box-shadow ease-in-out 0.15s; } @@ -1459,7 +1466,6 @@ input[type="checkbox"] { line-height: normal; } -select, input[type="file"] { height: 38px; /* In IE7, the height of the select element cannot be changed by height, only font-size. TODO: Check if this is still needed when dropping IE7 support */ @@ -1486,6 +1492,11 @@ input[type="checkbox"]:focus { outline-offset: -2px; } +input[type="number"]::-webkit-outer-spin-button, +input[type="number"]::-webkit-inner-spin-button { + height: auto; +} + input:-moz-placeholder, textarea:-moz-placeholder { color: #999999; @@ -1577,7 +1588,7 @@ input[type="url"].input-large, input[type="search"].input-large, input[type="tel"].input-large, input[type="color"].input-large { - min-height: 56px; + height: 56px; padding: 14px 16px; font-size: 18px; border-radius: 6px; @@ -1599,12 +1610,23 @@ input[type="url"].input-small, input[type="search"].input-small, input[type="tel"].input-small, input[type="color"].input-small { - min-height: 30px; + height: 30px; padding: 5px 10px; font-size: 12px; border-radius: 3px; } +select.input-large { + height: 56px; + line-height: 56px; +} + +select.input-small { + height: 30px; + line-height: 30px; +} + +.has-warning .help-block, .has-warning .control-label { color: #c09853; } @@ -1628,6 +1650,7 @@ input[type="color"].input-small { border-color: #c09853; } +.has-error .help-block, .has-error .control-label { color: #b94a48; } @@ -1651,6 +1674,7 @@ input[type="color"].input-small { border-color: #b94a48; } +.has-success .help-block, .has-success .control-label { color: #468847; } @@ -1777,11 +1801,10 @@ input[type="color"].input-small { .input-group-btn > .btn { position: relative; - float: left; } .input-group-btn > .btn + .btn { - margin-left: -1px; + margin-left: -4px; } .input-group-btn > .btn:hover, @@ -2061,6 +2084,13 @@ fieldset[disabled] .btn-info.active { border-color: #5bc0de; } +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + .btn-link, .btn-link:active, .btn-link[disabled], @@ -2078,13 +2108,6 @@ fieldset[disabled] .btn-link { border-color: transparent; } -.btn-link { - font-weight: normal; - color: #428bca; - cursor: pointer; - border-radius: 0; -} - .btn-link:hover, .btn-link:focus { color: #2a6496; @@ -2133,8 +2156,6 @@ input[type="button"].btn-block { .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } @@ -2147,8 +2168,6 @@ input[type="button"].btn-block { height: 0; overflow: hidden; -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -o-transition: height 0.35s ease; transition: height 0.35s ease; } @@ -2185,9 +2204,7 @@ input[type="button"].btn-block { border-radius: 4px; -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; + background-clip: padding-box; } .dropdown-menu.pull-right { @@ -2264,6 +2281,14 @@ input[type="button"].btn-block { outline: 0; } +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.428571429; + color: #999999; +} + .dropdown-backdrop { position: fixed; top: 0; @@ -2292,15 +2317,6 @@ input[type="button"].btn-block { margin-bottom: 1px; } -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; -} - -.typeahead { - z-index: 1051; -} - .list-group { padding-left: 0; margin-bottom: 20px; @@ -2326,6 +2342,11 @@ input[type="button"].btn-block { border-bottom-left-radius: 4px; } +.list-group-item > .badge { + float: right; + margin-right: -15px; +} + .list-group-item-heading { margin-top: 0; margin-bottom: 5px; @@ -2365,16 +2386,6 @@ a.list-group-item.active .list-group-item-text { color: #e1edf7; } -.list-group-item > .badge, -.list-group-item > .glyphicon-chevron-right { - float: right; - margin-right: -15px; -} - -.list-group-item > .glyphicon + .badge { - margin-right: 5px; -} - .panel { padding: 15px; margin-bottom: 20px; @@ -2529,7 +2540,6 @@ button.close { .nav { padding-left: 0; margin-bottom: 0; - margin-left: 0; list-style: none; } @@ -2709,17 +2719,6 @@ button.close { text-align: center; } -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 1.428571429; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; -} - .tabbable:before, .tabbable:after { display: table; @@ -2768,6 +2767,7 @@ button.close { .navbar { position: relative; + min-height: 50px; padding-right: 15px; padding-left: 15px; margin-bottom: 20px; @@ -2857,7 +2857,7 @@ button.close { .navbar-brand { display: block; max-width: 200px; - padding: 15px; + padding: 15px 15px; margin-right: auto; margin-left: auto; font-size: 18px; @@ -2878,6 +2878,8 @@ button.close { position: absolute; top: 10px; right: 10px; + width: 48px; + height: 32px; padding: 8px 12px; background-color: transparent; border: 1px solid #ddd; @@ -2944,11 +2946,6 @@ button.close { background-color: #d5d5d5; } -.navbar-nav > .dropdown > a .caret { - border-top-color: #777777; - border-bottom-color: #777777; -} - .navbar-nav > .open > a .caret, .navbar-nav > .open > a:hover .caret, .navbar-nav > .open > a:focus .caret { @@ -2956,6 +2953,11 @@ button.close { border-bottom-color: #555555; } +.navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + .navbar-nav.pull-right > li > .dropdown-menu, .navbar-nav > li > .dropdown-menu.pull-right { right: 0; @@ -3268,8 +3270,8 @@ button.close { width: 1%; } -.btn-group[data-toggle="buttons-radio"] > .btn > input[type="radio"], -.btn-group[data-toggle="buttons-checkbox"] > .btn > input[type="checkbox"] { +.btn-group[data-toggle="buttons"] > .btn > input[type="radio"], +.btn-group[data-toggle="buttons"] > .btn > input[type="checkbox"] { display: none; } @@ -3286,15 +3288,11 @@ button.close { text-shadow: 0 1px 0 #fff; } -.breadcrumb > li:after { +.breadcrumb > li + li:before { display: inline-block; padding: 0 5px; color: #ccc; - content: "\00a0 /"; -} - -.breadcrumb > li:last-child:after { - display: none; + content: "/\00a0"; } .breadcrumb > .active { @@ -3323,6 +3321,19 @@ button.close { border-left-width: 0; } +.pagination > li:first-child > a, +.pagination > li:first-child > span { + border-left-width: 1px; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + .pagination > li > a:hover, .pagination > li > a:focus, .pagination > .active > a, @@ -3345,19 +3356,6 @@ button.close { background-color: #ffffff; } -.pagination > li:first-child > a, -.pagination > li:first-child > span { - border-left-width: 1px; - border-bottom-left-radius: 4px; - border-top-left-radius: 4px; -} - -.pagination > li:last-child > a, -.pagination > li:last-child > span { - border-top-right-radius: 4px; - border-bottom-right-radius: 4px; -} - .pagination-large > li > a, .pagination-large > li > span { padding: 14px 16px; @@ -3473,14 +3471,11 @@ button.close { display: none; overflow: auto; overflow-y: scroll; - -webkit-overflow-scrolling: touch; } .modal.fade { top: -25%; -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; - -moz-transition: opacity 0.3s linear, top 0.3s ease-out; - -o-transition: opacity 0.3s linear, top 0.3s ease-out; transition: opacity 0.3s linear, top 0.3s ease-out; } @@ -3507,9 +3502,7 @@ button.close { outline: none; -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; + background-clip: padding-box; } .modal-backdrop { @@ -3611,7 +3604,7 @@ button.close { position: absolute; z-index: 1030; display: block; - font-size: 11px; + font-size: 12px; line-height: 1.4; opacity: 0; filter: alpha(opacity=0); @@ -3954,24 +3947,18 @@ button.close { border: 1px solid #dddddd; border-radius: 4px; -webkit-transition: all 0.2s ease-in-out; - -moz-transition: all 0.2s ease-in-out; - -o-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } -.thumbnail > img, -.img-thumbnail { - display: block; - height: auto; - max-width: 100%; -} - .thumbnail { display: block; } +.thumbnail > img, .img-thumbnail { display: inline-block; + height: auto; + max-width: 100%; } a.thumbnail:hover, @@ -4191,8 +4178,6 @@ a.list-group-item.active > .badge, -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -o-transition: width 0.6s ease; transition: width 0.6s ease; } @@ -4202,10 +4187,7 @@ a.list-group-item.active > .badge, background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; + background-size: 40px 40px; } .progress.active .progress-bar { @@ -4281,9 +4263,6 @@ a.list-group-item.active > .badge, .accordion-heading .accordion-toggle { display: block; padding: 8px 15px; -} - -.accordion-toggle { cursor: pointer; } @@ -4306,14 +4285,12 @@ a.list-group-item.active > .badge, position: relative; display: none; -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } .carousel-inner > .item > img, .carousel-inner > .item > a > img { - display: block; + display: inline-block; height: auto; max-width: 100%; line-height: 1; @@ -4403,7 +4380,9 @@ a.list-group-item.active > .badge, filter: alpha(opacity=90); } -.carousel-control .glyphicon { +.carousel-control .glyphicon, +.carousel-control .icon-prev, +.carousel-control .icon-next { position: absolute; top: 50%; left: 50%; @@ -4415,6 +4394,14 @@ a.list-group-item.active > .badge, margin-left: -10px; } +.carousel-control .icon-prev:before { + content: '\2039'; +} + +.carousel-control .icon-next:before { + content: '\203a'; +} + .carousel-indicators { position: absolute; bottom: 20px; @@ -4422,24 +4409,26 @@ a.list-group-item.active > .badge, z-index: 15; width: 100px; padding-left: 0; - margin: 0 0 0 -50px; + margin-left: -50px; text-align: center; list-style: none; } .carousel-indicators li { display: inline-block; - width: 8px; - height: 8px; - margin-right: 0; - margin-left: 0; + width: 10px; + height: 10px; + margin: 1px; text-indent: -999px; cursor: pointer; border: 1px solid #fff; - border-radius: 5px; + border-radius: 10px; } .carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; background-color: #fff; } @@ -4461,7 +4450,9 @@ a.list-group-item.active > .badge, } @media screen and (min-width: 768px) { - .carousel-control .glyphicon { + .carousel-control .glyphicon, + .carousel-control .icon-prev, + .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; @@ -4578,14 +4569,41 @@ td.visible-sm { display: none !important; } +tr.visible-md { + display: none !important; +} + +th.visible-md, +td.visible-md { + display: none !important; +} + .visible-lg { display: none !important; } +tr.visible-lg { + display: none !important; +} + +th.visible-lg, +td.visible-lg { + display: none !important; +} + .hidden-sm { display: none !important; } +tr.hidden-sm { + display: none !important; +} + +th.hidden-sm, +td.hidden-sm { + display: none !important; +} + .hidden-md { display: block !important; } @@ -4616,6 +4634,13 @@ td.hidden-lg { .visible-sm { display: none !important; } + tr.visible-sm { + display: none !important; + } + th.visible-sm, + td.visible-sm { + display: none !important; + } .visible-md { display: block !important; } @@ -4629,6 +4654,13 @@ td.hidden-lg { .visible-lg { display: none !important; } + tr.visible-lg { + display: none !important; + } + th.visible-lg, + td.visible-lg { + display: none !important; + } .hidden-sm { display: block !important; } @@ -4642,6 +4674,13 @@ td.hidden-lg { .hidden-md { display: none !important; } + tr.hidden-md { + display: none !important; + } + th.hidden-md, + td.hidden-md { + display: none !important; + } .hidden-lg { display: block !important; } @@ -4658,9 +4697,23 @@ td.hidden-lg { .visible-sm { display: none !important; } + tr.visible-sm { + display: none !important; + } + th.visible-sm, + td.visible-sm { + display: none !important; + } .visible-md { display: none !important; } + tr.visible-md { + display: none !important; + } + th.visible-md, + td.visible-md { + display: none !important; + } .visible-lg { display: block !important; } @@ -4694,12 +4747,28 @@ td.hidden-lg { .hidden-lg { display: none !important; } + tr.hidden-lg { + display: none !important; + } + th.hidden-lg, + td.hidden-lg { + display: none !important; + } } .visible-print { display: none !important; } +tr.visible-print { + display: none !important; +} + +th.visible-print, +td.visible-print { + display: none !important; +} + @media print { .visible-print { display: block !important; @@ -4714,4 +4783,11 @@ td.hidden-lg { .hidden-print { display: none !important; } -} + tr.hidden-print { + display: none !important; + } + th.hidden-print, + td.hidden-print { + display: none !important; + } +} \ No newline at end of file diff --git a/dist/css/bootstrap.min.css b/dist/css/bootstrap.min.css new file mode 100644 index 0000000000000000000000000000000000000000..82a9ad4ddfc18e182614ee213e946643cd4748ed --- /dev/null +++ b/dist/css/bootstrap.min.css @@ -0,0 +1,9 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + *//*! normalize.css v2.1.0 | MIT License | git.io/normalize */article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,video{display:inline-block}audio:not([controls]){display:none;height:0}[hidden]{display:none}html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:focus{outline:thin dotted}a:active,a:hover{outline:0}h1{margin:.67em 0;font-size:2em}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}hr{height:0;-moz-box-sizing:content-box;box-sizing:content-box}mark{color:#000;background:#ff0}code,kbd,pre,samp{font-family:monospace,serif;font-size:1em}pre{white-space:pre-wrap}q{quotes:"\201C" "\201D" "\2018" "\2019"}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:0}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid #c0c0c0}legend{padding:0;border:0}button,input,select,textarea{margin:0;font-family:inherit;font-size:100%}button,input{line-height:normal}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button}button[disabled],html input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{padding:0;box-sizing:border-box}input[type="search"]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}textarea{overflow:auto;vertical-align:top}table{border-collapse:collapse;border-spacing:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}@page{margin:2cm .5cm}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:62.5%;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.428571429;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}img{vertical-align:middle}.img-responsive{display:inline-block;height:auto;max-width:100%}.img-rounded{border-radius:6px}.img-circle{border-radius:500px}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:21px;font-weight:200;line-height:1.4}small{font-size:85%}cite{font-style:normal}.text-muted{color:#999}a.text-muted:hover,a.text-muted:focus{color:#808080}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-danger{color:#b94a48}a.text-danger:hover,a.text-danger:focus{color:#953b39}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.1}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small{font-weight:normal;line-height:1;color:#999}h1,h2,h3{margin-top:20px;margin-bottom:10px}h4,h5,h6{margin-top:10px;margin-bottom:10px}h1,.h1{font-size:38px}h2,.h2{font-size:32px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}h1 small,.h1 small{font-size:24px}h2 small,.h2 small{font-size:18px}h3 small,.h3 small,h4 small,.h4 small{font-size:14px}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt,dd{line-height:1.428571429}dt{font-weight:bold}dd{margin-left:10px}.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}.dl-horizontal dd:before,.dl-horizontal dd:after{display:table;content:" "}.dl-horizontal dd:after{clear:both}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #999}abbr.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;border-left:5px solid #eee}blockquote p{font-size:17.5px;font-weight:300;line-height:1.25}blockquote p:last-child{margin-bottom:0}blockquote small{display:block;line-height:1.428571429;color:#999}blockquote small:before{content:'\2014 \00A0'}blockquote.pull-right{float:right;padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0}blockquote.pull-right p,blockquote.pull-right small{text-align:right}blockquote.pull-right small:before{content:''}blockquote.pull-right small:after{content:'\00A0 \2014'}q:before,q:after,blockquote:before,blockquote:after{content:""}address{display:block;margin-bottom:20px;font-style:normal;line-height:1.428571429}code,pre{font-family:Monaco,Menlo,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;white-space:nowrap;background-color:#f9f2f4;border-radius:4px}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.428571429;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px}pre.prettyprint{margin-bottom:20px}pre code{padding:0;color:inherit;white-space:pre-wrap;background-color:transparent;border:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.container:before,.container:after{display:table;content:" "}.container:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}.row:before,.row:after{display:table;content:" "}.row:after{clear:both}@media(min-width:768px){.row{margin-right:-15px;margin-left:-15px}}.row .row{margin-right:-15px;margin-left:-15px}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12{float:left}.col-1{width:8.333333333333332%}.col-2{width:16.666666666666664%}.col-3{width:25%}.col-4{width:33.33333333333333%}.col-5{width:41.66666666666667%}.col-6{width:50%}.col-7{width:58.333333333333336%}.col-8{width:66.66666666666666%}.col-9{width:75%}.col-10{width:83.33333333333334%}.col-11{width:91.66666666666666%}.col-12{width:100%}@media(min-width:768px){.container{max-width:728px}.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.333333333333332%}.col-sm-2{width:16.666666666666664%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333333333%}.col-sm-5{width:41.66666666666667%}.col-sm-6{width:50%}.col-sm-7{width:58.333333333333336%}.col-sm-8{width:66.66666666666666%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333333334%}.col-sm-11{width:91.66666666666666%}.col-sm-12{width:100%}.col-push-1{left:8.333333333333332%}.col-push-2{left:16.666666666666664%}.col-push-3{left:25%}.col-push-4{left:33.33333333333333%}.col-push-5{left:41.66666666666667%}.col-push-6{left:50%}.col-push-7{left:58.333333333333336%}.col-push-8{left:66.66666666666666%}.col-push-9{left:75%}.col-push-10{left:83.33333333333334%}.col-push-11{left:91.66666666666666%}.col-pull-1{right:8.333333333333332%}.col-pull-2{right:16.666666666666664%}.col-pull-3{right:25%}.col-pull-4{right:33.33333333333333%}.col-pull-5{right:41.66666666666667%}.col-pull-6{right:50%}.col-pull-7{right:58.333333333333336%}.col-pull-8{right:66.66666666666666%}.col-pull-9{right:75%}.col-pull-10{right:83.33333333333334%}.col-pull-11{right:91.66666666666666%}}@media(min-width:992px){.container{max-width:940px}.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.333333333333332%}.col-lg-2{width:16.666666666666664%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333333333%}.col-lg-5{width:41.66666666666667%}.col-lg-6{width:50%}.col-lg-7{width:58.333333333333336%}.col-lg-8{width:66.66666666666666%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333333334%}.col-lg-11{width:91.66666666666666%}.col-lg-12{width:100%}.col-offset-1{margin-left:8.333333333333332%}.col-offset-2{margin-left:16.666666666666664%}.col-offset-3{margin-left:25%}.col-offset-4{margin-left:33.33333333333333%}.col-offset-5{margin-left:41.66666666666667%}.col-offset-6{margin-left:50%}.col-offset-7{margin-left:58.333333333333336%}.col-offset-8{margin-left:66.66666666666666%}.col-offset-9{margin-left:75%}.col-offset-10{margin-left:83.33333333333334%}.col-offset-11{margin-left:91.66666666666666%}}@media(min-width:1200px){.container{max-width:1170px}}table{max-width:100%;background-color:transparent}th{text-align:left}.table{width:100%;margin-bottom:20px}.table thead>tr>th,.table tbody>tr>th,.table tfoot>tr>th,.table thead>tr>td,.table tbody>tr>td,.table tfoot>tr>td{padding:8px;line-height:1.428571429;vertical-align:top;border-top:1px solid #ddd}.table thead>tr>th{vertical-align:bottom}.table caption+thead tr:first-child th,.table colgroup+thead tr:first-child th,.table thead:first-child tr:first-child th,.table caption+thead tr:first-child td,.table colgroup+thead tr:first-child td,.table thead:first-child tr:first-child td{border-top:0}.table tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed thead>tr>th,.table-condensed tbody>tr>th,.table-condensed tfoot>tr>th,.table-condensed thead>tr>td,.table-condensed tbody>tr>td,.table-condensed tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd;border-collapse:separate;border-left:0;border-radius:4px}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border-left:1px solid #ddd}.table-bordered>caption+thead>tr:first-child th,.table-bordered>caption+tbody>tr:first-child th,.table-bordered>caption+tbody>tr:first-child td,.table-bordered>colgroup+thead>tr:first-child th,.table-bordered>colgroup+tbody>tr:first-child th,.table-bordered>colgroup+tbody>tr:first-child td,.table-bordered>thead:first-child>tr:first-child th,.table-bordered>tbody:first-child>tr:first-child th,.table-bordered>tbody:first-child>tr:first-child td{border-top:0}.table-bordered>thead:first-child>tr:first-child>th:first-child,.table-bordered>tbody:first-child>tr:first-child>td:first-child,.table-bordered>tbody:first-child>tr:first-child>th:first-child{border-top-left-radius:4px}.table-bordered>thead:first-child>tr:first-child>th:last-child,.table-bordered>tbody:first-child>tr:first-child>td:last-child,.table-bordered>tbody:first-child>tr:first-child>th:last-child{border-top-right-radius:4px}.table-bordered>thead:last-child>tr:last-child>th:first-child,.table-bordered>tbody:last-child>tr:last-child>td:first-child,.table-bordered>tbody:last-child>tr:last-child>th:first-child,.table-bordered>tfoot:last-child>tr:last-child>td:first-child,.table-bordered>tfoot:last-child>tr:last-child>th:first-child{border-bottom-left-radius:4px}.table-bordered>thead:last-child>tr:last-child>th:last-child,.table-bordered>tbody:last-child>tr:last-child>td:last-child,.table-bordered>tbody:last-child>tr:last-child>th:last-child,.table-bordered>tfoot:last-child>tr:last-child>td:last-child,.table-bordered>tfoot:last-child>tr:last-child>th:last-child{border-bottom-right-radius:4px}.table-bordered>tfoot+tbody:last-child>tr:last-child>td:first-child{border-bottom-left-radius:0}.table-bordered>tfoot+tbody:last-child>tr:last-child>td:last-child{border-bottom-right-radius:0}.table-bordered>caption+thead>tr:first-child>th:first-child,.table-bordered>colgroup+thead>tr:first-child>th:first-child,.table-bordered>caption+tbody>tr:first-child>td:first-child,.table-bordered>colgroup+tbody>tr:first-child>td:first-child{border-top-left-radius:4px}.table-bordered>caption+thead>tr:first-child>th:last-child,.table-bordered>colgroup+thead>tr:first-child>th:last-child,.table-bordered>caption+tbody>tr:first-child>td:last-child,.table-bordered>colgroup+tbody>tr:first-child>td:last-child{border-top-right-radius:4px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class^="col-"]{display:table-column;float:none}table td[class^="col-"],table th[class^="col-"]{display:table-cell;float:none}.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td{background-color:#f5f5f5}.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td{background-color:#dff0d8;border-color:#d6e9c6}.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td{background-color:#f2dede;border-color:#eed3d7}.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td{background-color:#fcf8e3;border-color:#fbeed5}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td{background-color:#d0e9c6;border-color:#c9e2b3}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td{background-color:#ebcccc;border-color:#e6c1c7}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td{background-color:#faf2cc;border-color:#f8e5be}form{margin:0}fieldset{padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px;font-weight:bold}select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type="search"],input[type="tel"],input[type="color"]{display:block;height:38px;padding:8px 12px;font-size:14px;line-height:1.428571429;color:#555;vertical-align:middle;background-color:#fff;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}select:focus,textarea:focus,input[type="text"]:focus,input[type="password"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{border-color:rgba(82,168,236,0.8);outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6)}select[disabled],textarea[disabled],input[type="text"][disabled],input[type="password"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled],select[readonly],textarea[readonly],input[type="text"][readonly],input[type="password"][readonly],input[type="datetime"][readonly],input[type="datetime-local"][readonly],input[type="date"][readonly],input[type="month"][readonly],input[type="time"][readonly],input[type="week"][readonly],input[type="number"][readonly],input[type="email"][readonly],input[type="url"][readonly],input[type="search"][readonly],input[type="tel"][readonly],input[type="color"][readonly],fieldset[disabled] select,fieldset[disabled] textarea,fieldset[disabled] input[type="text"],fieldset[disabled] input[type="password"],fieldset[disabled] input[type="datetime"],fieldset[disabled] input[type="datetime-local"],fieldset[disabled] input[type="date"],fieldset[disabled] input[type="month"],fieldset[disabled] input[type="time"],fieldset[disabled] input[type="week"],fieldset[disabled] input[type="number"],fieldset[disabled] input[type="email"],fieldset[disabled] input[type="url"],fieldset[disabled] input[type="search"],fieldset[disabled] input[type="tel"],fieldset[disabled] input[type="color"]{cursor:not-allowed;background-color:#eee}input,select,textarea{width:100%}input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}textarea{height:auto}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{height:38px;line-height:38px}select[multiple],select[size]{height:auto}select optgroup{font-family:inherit;font-size:inherit;font-style:inherit}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}input[type="number"]::-webkit-outer-spin-button,input[type="number"]::-webkit-inner-spin-button{height:auto}input:-moz-placeholder,textarea:-moz-placeholder{color:#999}input::-moz-placeholder,textarea::-moz-placeholder{color:#999}input:-ms-input-placeholder,textarea:-ms-input-placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.radio,.checkbox{display:block;min-height:20px;padding-left:20px;margin-top:10px;margin-bottom:10px;vertical-align:middle}.radio label,.checkbox label{display:inline;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{float:left;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:normal;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}select.input-large,textarea.input-large,input[type="text"].input-large,input[type="password"].input-large,input[type="datetime"].input-large,input[type="datetime-local"].input-large,input[type="date"].input-large,input[type="month"].input-large,input[type="time"].input-large,input[type="week"].input-large,input[type="number"].input-large,input[type="email"].input-large,input[type="url"].input-large,input[type="search"].input-large,input[type="tel"].input-large,input[type="color"].input-large{height:56px;padding:14px 16px;font-size:18px;border-radius:6px}select.input-small,textarea.input-small,input[type="text"].input-small,input[type="password"].input-small,input[type="datetime"].input-small,input[type="datetime-local"].input-small,input[type="date"].input-small,input[type="month"].input-small,input[type="time"].input-small,input[type="week"].input-small,input[type="number"].input-small,input[type="email"].input-small,input[type="url"].input-small,input[type="search"].input-small,input[type="tel"].input-small,input[type="color"].input-small{height:30px;padding:5px 10px;font-size:12px;border-radius:3px}select.input-large{height:56px;line-height:56px}select.input-small{height:30px;line-height:30px}.has-warning .help-block,.has-warning .control-label{color:#c09853}.has-warning .input-with-feedback{padding-right:32px;border-color:#c09853;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .input-with-feedback:focus{border-color:#a47e3c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-error .help-block,.has-error .control-label{color:#b94a48}.has-error .input-with-feedback{padding-right:32px;border-color:#b94a48;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .input-with-feedback:focus{border-color:#953b39;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-success .help-block,.has-success .control-label{color:#468847}.has-success .input-with-feedback{padding-right:32px;border-color:#468847;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .input-with-feedback:focus{border-color:#356635;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}.input-group{display:table;border-collapse:separate}.input-group.col{float:none;padding-right:0;padding-left:0}.input-group input,.input-group select{width:100%;margin-bottom:0}.input-group-addon,.input-group-btn,.input-group input{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group input:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:8px 12px;font-size:14px;font-weight:normal;line-height:1.428571429;text-align:center;text-shadow:0 1px 0 #fff;background-color:#eee;border:1px solid #ccc;border-radius:4px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.input-group-addon.input-small{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-large{padding:14px 16px;font-size:18px;border-radius:6px}.input-group input:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group input:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-4px}.input-group-btn>.btn:hover,.input-group-btn>.btn:active{z-index:2}.form-inline input,.form-inline select,.form-inline textarea,.form-inline .radio,.form-inline .checkbox{display:inline-block}.form-inline .radio,.form-inline .checkbox{margin-top:0;margin-bottom:0}.form-horizontal .row+.row{margin-top:15px}.form-horizontal .control-label{padding-top:6px}@media(min-width:768px){.form-horizontal .control-label{text-align:right}}.btn{display:inline-block;padding:8px 12px;margin-bottom:0;font-size:14px;font-weight:500;line-height:1.428571429;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;border:1px solid transparent;border-radius:4px}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#fff;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:default;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#fff;background-color:#474949;border-color:#474949}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active{background-color:#3a3c3c;border-color:#2e2f2f}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#474949;border-color:#474949}.btn-primary{color:#fff;background-color:#428bca;border-color:#428bca}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active{background-color:#357ebd;border-color:#3071a9}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#428bca}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#f0ad4e}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active{background-color:#eea236;border-color:#ec971f}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#f0ad4e}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d9534f}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active{background-color:#d43f3a;border-color:#c9302c}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d9534f}.btn-success{color:#fff;background-color:#5cb85c;border-color:#5cb85c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active{background-color:#4cae4c;border-color:#449d44}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#5cb85c}.btn-info{color:#fff;background-color:#5bc0de;border-color:#5bc0de}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active{background-color:#46b8da;border-color:#31b0d5}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#5bc0de}.btn-link{font-weight:normal;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#333;text-decoration:none}.btn-large{padding:14px 16px;font-size:18px;border-radius:6px}.btn-small{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%;padding-right:0;padding-left:0}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}.collapse.in{height:auto}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid #000;border-right:4px solid transparent;border-left:4px solid transparent;content:""}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:2px;margin:9px 0;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.428571429;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#fff;text-decoration:none;background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#357ebd;background-image:-webkit-gradient(linear,left 0,left 100%,from(#428bca),to(#357ebd));background-image:-webkit-linear-gradient(top,#428bca,0%,#357ebd,100%);background-image:-moz-linear-gradient(top,#428bca 0,#357ebd 100%);background-image:linear-gradient(to bottom,#428bca 0,#357ebd 100%);background-repeat:repeat-x;outline:0;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca',endColorstr='#ff357ebd',GradientType=0)}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:default;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.428571429;color:#999}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid #000;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}.list-group{padding-left:0;margin-bottom:20px;background-color:#fff}.list-group-item{position:relative;display:block;padding:10px 30px 10px 15px;margin-bottom:-1px;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right;margin-right:-15px}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item .list-group-item-text{color:#555}a.list-group-item:hover,a.list-group-item:focus{text-decoration:none;background-color:#f5f5f5}a.list-group-item.active{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}a.list-group-item.active .list-group-item-heading{color:inherit}a.list-group-item.active .list-group-item-text{color:#e1edf7}.panel{padding:15px;margin-bottom:20px;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-heading{padding:10px 15px;margin:-15px -15px 15px;font-size:17.5px;font-weight:500;background-color:#f5f5f5;border-bottom:1px solid #ddd;border-top-right-radius:3px;border-top-left-radius:3px}.panel-footer{padding:10px 15px;margin:15px -15px -15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-primary{border-color:#428bca}.panel-primary .panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success .panel-heading{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.panel-warning{border-color:#fbeed5}.panel-warning .panel-heading{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.panel-danger{border-color:#eed3d7}.panel-danger .panel-heading{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.panel-info{border-color:#bce8f1}.panel-info .panel-heading{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.list-group-flush{margin:15px -15px -15px}.list-group-flush .list-group-item{border-width:1px 0}.list-group-flush .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.list-group-flush .list-group-item:last-child{border-bottom:0}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-large{padding:24px;border-radius:6px}.well-small{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav:before,.nav:after{display:table;content:" "}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999;text-decoration:none;cursor:default;background-color:transparent}.nav>li+.nav-header{margin-top:9px}.nav.open>a,.nav.open>a:hover,.nav.open>a:focus{color:#fff;background-color:#428bca;border-color:#428bca}.nav.open>a .caret,.nav.open>a:hover .caret,.nav.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}.nav>.pull-right{float:right}.nav .nav-divider{height:2px;margin:9px 0;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #fff}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.428571429;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{display:table-cell;float:none;width:1%}.nav-tabs.nav-justified>li>a{text-align:center}.nav-tabs.nav-justified>li>a{margin-right:0;border-bottom:1px solid #ddd}.nav-tabs.nav-justified>.active>a{border-bottom-color:#fff}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:5px}.nav-pills>li+li>a{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li>a{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{display:table-cell;float:none;width:1%}.nav-justified>li>a{text-align:center}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tabbable:before,.tabbable:after{display:table;content:" "}.tabbable:after{clear:both}.tab-content>.tab-pane,.pill-content>.pill-pane{display:none}.tab-content>.active,.pill-content>.active{display:block}.nav .caret{border-top-color:#428bca;border-bottom-color:#428bca}.nav a:hover .caret{border-top-color:#2a6496;border-bottom-color:#2a6496}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;padding-right:15px;padding-left:15px;margin-bottom:20px;background-color:#eee;border-radius:4px}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar:before,.navbar:after{display:table;content:" "}.navbar:after{clear:both}.navbar-nav{margin-top:10px;margin-bottom:15px}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px;line-height:20px;color:#777;border-radius:4px}.navbar-nav>li>a:hover,.navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-nav>.active>a,.navbar-nav>.active>a:hover,.navbar-nav>.active>a:focus{color:#555;background-color:#d5d5d5}.navbar-nav>.disabled>a,.navbar-nav>.disabled>a:hover,.navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-nav.pull-right{width:100%}.navbar-static-top{border-radius:0}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;border-radius:0}.navbar-fixed-top{top:0}.navbar-fixed-bottom{bottom:0;margin-bottom:0}.navbar-brand{display:block;max-width:200px;padding:15px 15px;margin-right:auto;margin-left:auto;font-size:18px;font-weight:500;line-height:20px;color:#777;text-align:center}.navbar-brand:hover,.navbar-brand:focus{color:#5e5e5e;text-decoration:none;background-color:transparent}.navbar-toggle{position:absolute;top:10px;right:10px;width:48px;height:32px;padding:8px 12px;background-color:transparent;border:1px solid #ddd;border-radius:4px}.navbar-toggle:hover,.navbar-toggle:focus{background-color:#ddd}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;background-color:#ccc;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-form{margin-top:6px;margin-bottom:6px}.navbar-form input,.navbar-form select,.navbar-form textarea,.navbar-form .radio,.navbar-form .checkbox{display:inline-block}.navbar-form .radio,.navbar-form .checkbox{margin-top:0;margin-bottom:0}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-nav>.dropdown>a:hover .caret,.navbar-nav>.dropdown>a:focus .caret{border-top-color:#333;border-bottom-color:#333}.navbar-nav>.open>a,.navbar-nav>.open>a:hover,.navbar-nav>.open>a:focus{color:#555;background-color:#d5d5d5}.navbar-nav>.open>a .caret,.navbar-nav>.open>a:hover .caret,.navbar-nav>.open>a:focus .caret{border-top-color:#555;border-bottom-color:#555}.navbar-nav>.dropdown>a .caret{border-top-color:#777;border-bottom-color:#777}.navbar-nav.pull-right>li>.dropdown-menu,.navbar-nav>li>.dropdown-menu.pull-right{right:0;left:auto}.navbar-inverse{background-color:#222}.navbar-inverse .navbar-brand{color:#999}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#999}.navbar-inverse .navbar-nav>li>a{color:#999}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.dropdown>a:hover .caret{border-top-color:#fff;border-bottom-color:#fff}.navbar-inverse .navbar-nav>.dropdown>a .caret{border-top-color:#999;border-bottom-color:#999}.navbar-inverse .navbar-nav>.open>a .caret,.navbar-inverse .navbar-nav>.open>a:hover .caret,.navbar-inverse .navbar-nav>.open>a:focus .caret{border-top-color:#fff;border-bottom-color:#fff}@media screen and (min-width:768px){.navbar-brand{float:left;margin-right:5px;margin-left:-15px}.navbar-nav{float:left;margin-top:0;margin-bottom:0}.navbar-nav>li{float:left}.navbar-nav>li>a{border-radius:0}.navbar-nav.pull-right{float:right;width:auto}.navbar-toggle{position:relative;top:auto;left:auto;display:none}.nav-collapse.collapse{height:auto!important;overflow:visible!important}}.navbar-btn{margin-top:6px}.navbar-text{margin-top:15px;margin-bottom:15px}.navbar-link{color:#777}.navbar-link:hover{color:#333}.navbar-inverse .navbar-link{color:#999}.navbar-inverse .navbar-link:hover{color:#fff}.btn .caret{border-top-color:#fff}.dropup .btn .caret{border-bottom-color:#fff}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:active,.btn-group-vertical>.btn:active{z-index:2}.btn-group .btn+.btn{margin-left:-1px}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar:before,.btn-toolbar:after{display:table;content:" "}.btn-toolbar:after{clear:both}.btn-toolbar .btn-group{float:left}.btn-toolbar>.btn+.btn,.btn-toolbar>.btn-group+.btn,.btn-toolbar>.btn+.btn-group,.btn-toolbar>.btn-group+.btn-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-large+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn .caret{margin-left:0}.btn-large .caret{border-width:5px}.dropup .btn-large .caret{border-bottom-width:5px}.btn-group-vertical>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn+.btn{margin-top:-1px}.btn-group-vertical .btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical .btn:first-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical .btn:last-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%}.btn-group-justified .btn{display:table-cell;float:none;width:1%}.btn-group[data-toggle="buttons"]>.btn>input[type="radio"],.btn-group[data-toggle="buttons"]>.btn>input[type="checkbox"]{display:none}.breadcrumb{padding:8px 15px;margin:0 0 20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block;text-shadow:0 1px 0 #fff}.breadcrumb>li+li:before{display:inline-block;padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{float:left;padding:4px 12px;line-height:1.428571429;text-decoration:none;background-color:#fff;border:1px solid #ddd;border-left-width:0}.pagination>li:first-child>a,.pagination>li:first-child>span{border-left-width:1px;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>.active>a,.pagination>.active>span{background-color:#f5f5f5}.pagination>.active>a,.pagination>.active>span{color:#999;cursor:default}.pagination>.disabled>span,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999;cursor:default;background-color:#fff}.pagination-large>li>a,.pagination-large>li>span{padding:14px 16px;font-size:18px}.pagination-large>li:first-child>a,.pagination-large>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-large>li:last-child>a,.pagination-large>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-small>li>a,.pagination-small>li>span{padding:5px 10px;font-size:12px}.pagination-small>li:first-child>a,.pagination-small>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-small>li:last-child>a,.pagination-small>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager:before,.pager:after{display:table;content:" "}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#f5f5f5}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999;cursor:default;background-color:#fff}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;display:none;overflow:auto;overflow-y:scroll}.modal.fade{top:-25%;-webkit-transition:opacity .3s linear,top .3s ease-out;transition:opacity .3s linear,top .3s ease-out}.modal.fade.in{top:0}.modal-dialog{position:relative;top:0;right:0;left:0;z-index:1050;width:auto;padding:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1030;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.fade.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{min-height:16.428571429px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.428571429}.modal-body{position:relative;padding:20px}.modal-footer{padding:19px 20px 20px;margin-top:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer:before,.modal-footer:after{display:table;content:" "}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}@media screen and (min-width:768px){.modal-dialog{right:auto;left:50%;width:560px;padding-top:30px;padding-bottom:30px;margin-left:-280px}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}}.tooltip{position:absolute;z-index:1030;display:block;font-size:12px;line-height:1.4;opacity:0;filter:alpha(opacity=0);visibility:visible}.tooltip.in{opacity:1;filter:alpha(opacity=100)}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:rgba(0,0,0,0.9);border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-top-color:rgba(0,0,0,0.9);border-width:5px 5px 0}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-top-color:rgba(0,0,0,0.9);border-width:5px 5px 0}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-top-color:rgba(0,0,0,0.9);border-width:5px 5px 0}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-right-color:rgba(0,0,0,0.9);border-width:5px 5px 5px 0}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-left-color:rgba(0,0,0,0.9);border-width:5px 0 5px 5px}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-bottom-color:rgba(0,0,0,0.9);border-width:0 5px 5px}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-bottom-color:rgba(0,0,0,0.9);border-width:0 5px 5px}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-bottom-color:rgba(0,0,0,0.9);border-width:0 5px 5px}.popover{position:absolute;top:0;left:0;z-index:1010;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2);background-clip:padding-box;-webkit-bg-clip:padding-box;-moz-bg-clip:padding}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:normal;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover .arrow,.popover .arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover .arrow{border-width:11px}.popover .arrow:after{border-width:10px;content:""}.popover.top .arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top .arrow:after{bottom:1px;margin-left:-10px;border-top-color:#fff;border-bottom-width:0;content:" "}.popover.right .arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right .arrow:after{bottom:-10px;left:1px;border-right-color:#fff;border-left-width:0;content:" "}.popover.bottom .arrow{top:-11px;left:50%;margin-left:-11px;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);border-top-width:0}.popover.bottom .arrow:after{top:1px;margin-left:-10px;border-bottom-color:#fff;border-top-width:0;content:" "}.popover.left .arrow{top:50%;right:-11px;margin-top:-11px;border-left-color:#999;border-left-color:rgba(0,0,0,0.25);border-right-width:0}.popover.left .arrow:after{right:1px;bottom:-10px;border-left-color:#fff;border-right-width:0;content:" "}.alert{padding:10px 35px 10px 15px;margin-bottom:20px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert hr{border-top-color:#f8e5be}.alert .alert-link{font-weight:500;color:#a47e3c}.alert .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-block{padding-top:15px;padding-bottom:15px}.alert-block>p,.alert-block>ul{margin-bottom:0}.alert-block p+p{margin-top:5px}.thumbnail,.img-thumbnail{padding:4px;line-height:1.428571429;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail{display:block}.thumbnail>img,.img-thumbnail{display:inline-block;height:auto;max-width:100%}a.thumbnail:hover,a.thumbnail:focus{border-color:#428bca}.thumbnail>img{margin-right:auto;margin-left:auto}.thumbnail .caption{padding:9px;color:#333}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.label{display:inline;padding:.25em .6em;font-size:75%;font-weight:500;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#999;border-radius:.25em}.label[href]:hover,.label[href]:focus{color:#fff;text-decoration:none;cursor:pointer;background-color:#808080}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#999;border-radius:10px}.badge:empty{display:none}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.btn .badge{position:relative;top:-1px}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-moz-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-ms-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;color:#fff;text-align:center;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar{background-color:#428bca;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;-ms-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-color:#d9534f;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-color:#5cb85c;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-color:#f0ad4e;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-color:#5bc0de;background-image:-webkit-gradient(linear,0 100%,100% 0,color-stop(0.25,rgba(255,255,255,0.15)),color-stop(0.25,transparent),color-stop(0.5,transparent),color-stop(0.5,rgba(255,255,255,0.15)),color-stop(0.75,rgba(255,255,255,0.15)),color-stop(0.75,transparent),to(transparent));background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:-moz-linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,0.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,0.15) 50%,rgba(255,255,255,0.15) 75%,transparent 75%,transparent)}.accordion{margin-bottom:20px}.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;border-radius:4px}.accordion-heading{border-bottom:0}.accordion-heading .accordion-toggle{display:block;padding:8px 15px;cursor:pointer}.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:inline-block;height:auto;max-width:100%;line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);opacity:.5;filter:alpha(opacity=50)}.carousel-control.left{background-color:rgba(0,0,0,0.0001);background-color:transparent;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.5)),to(rgba(0,0,0,0.0001)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.5) 0),color-stop(rgba(0,0,0,0.0001) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.5) 0,rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000',endColorstr='#00000000',GradientType=1)}.carousel-control.right{right:0;left:auto;background-color:rgba(0,0,0,0.5);background-color:transparent;background-image:-webkit-gradient(linear,0 top,100% top,from(rgba(0,0,0,0.0001)),to(rgba(0,0,0,0.5)));background-image:-webkit-linear-gradient(left,color-stop(rgba(0,0,0,0.0001) 0),color-stop(rgba(0,0,0,0.5) 100%));background-image:-moz-linear-gradient(left,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,0.0001) 0,rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000',endColorstr='#80000000',GradientType=1)}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon,.carousel-control .icon-prev,.carousel-control .icon-next{position:absolute;top:50%;left:50%;z-index:5;display:inline-block;width:20px;height:20px;margin-top:-10px;margin-left:-10px}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:20px;left:50%;z-index:15;width:100px;padding-left:0;margin-left:-50px;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;margin-left:-15px;font-size:30px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}}.jumbotron{padding:30px;margin-bottom:30px;font-size:21px;font-weight:200;line-height:2.1428571435;color:inherit;background-color:#eee}.jumbotron h1{line-height:1;color:inherit}.jumbotron p{line-height:1.4}@media screen and (min-width:768px){.jumbotron{padding:50px 60px;border-radius:6px}.jumbotron h1{font-size:63px}}.clearfix:before,.clearfix:after{display:table;content:" "}.clearfix:after{clear:both}.pull-right{float:right}.pull-left{float:left}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media screen and (max-width:400px){@-ms-viewport{width:320px}}.hidden{display:none!important;visibility:hidden!important}.visible-sm{display:block!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}.hidden-sm{display:none!important}tr.hidden-sm{display:none!important}th.hidden-sm,td.hidden-sm{display:none!important}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}@media(min-width:768px) and (max-width:991px){.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}.visible-md{display:block!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}.visible-lg{display:none!important}tr.visible-lg{display:none!important}th.visible-lg,td.visible-lg{display:none!important}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}.hidden-md{display:none!important}tr.hidden-md{display:none!important}th.hidden-md,td.hidden-md{display:none!important}.hidden-lg{display:block!important}tr.hidden-lg{display:table-row!important}th.hidden-lg,td.hidden-lg{display:table-cell!important}}@media(min-width:992px){.visible-sm{display:none!important}tr.visible-sm{display:none!important}th.visible-sm,td.visible-sm{display:none!important}.visible-md{display:none!important}tr.visible-md{display:none!important}th.visible-md,td.visible-md{display:none!important}.visible-lg{display:block!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}.hidden-sm{display:block!important}tr.hidden-sm{display:table-row!important}th.hidden-sm,td.hidden-sm{display:table-cell!important}.hidden-md{display:block!important}tr.hidden-md{display:table-row!important}th.hidden-md,td.hidden-md{display:table-cell!important}.hidden-lg{display:none!important}tr.hidden-lg{display:none!important}th.hidden-lg,td.hidden-lg{display:none!important}}.visible-print{display:none!important}tr.visible-print{display:none!important}th.visible-print,td.visible-print{display:none!important}@media print{.visible-print{display:block!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}.hidden-print{display:none!important}tr.hidden-print{display:none!important}th.hidden-print,td.hidden-print{display:none!important}} \ No newline at end of file diff --git a/docs/assets/js/bootstrap.js b/dist/js/bootstrap.js similarity index 95% rename from docs/assets/js/bootstrap.js rename to dist/js/bootstrap.js index 03888ac5f96b8338827474bdeb0f5cfac3fa293d..2580e8938271d312587d7c99f3fb242d2427c988 100644 --- a/docs/assets/js/bootstrap.js +++ b/dist/js/bootstrap.js @@ -1,8 +1,13 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ /* ======================================================================== - * Bootstrap: transition.js v3.0.0 - * http://twitter.github.com/bootstrap/javascript.html#transitions + * Bootstrap: affix.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#affix * ======================================================================== - * Copyright 2013 Twitter, Inc. + * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,31 +25,105 @@ +function ($) { "use strict"; - // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) - // ============================================================ + // AFFIX CLASS DEFINITION + // ====================== - function transitionEnd() { - var el = document.createElement('bootstrap') + var Affix = function (element, options) { + this.options = $.extend({}, Affix.DEFAULTS, options) + this.$window = $(window) + .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) + .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - var transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } + this.$element = $(element) + this.affixed = + this.unpin = null - for (var name in transEndEventNames) { - if (el.style[name] !== undefined) { - return { end: transEndEventNames[name] } - } - } + this.checkPosition() } - $(function () { - $.support.transition = transitionEnd() + Affix.DEFAULTS = { + offset: 0 + } + + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) + } + + Affix.prototype.checkPosition = function () { + if (!this.$element.is(':visible')) return + + var scrollHeight = $(document).height() + var scrollTop = this.$window.scrollTop() + var position = this.$element.offset() + var offset = this.options.offset + var offsetTop = offset.top + var offsetBottom = offset.bottom + var reset = 'affix affix-top affix-bottom' + + if (typeof offset != 'object') offsetBottom = offsetTop = offset + if (typeof offsetTop == 'function') offsetTop = offset.top() + if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() + + var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : + offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : + offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false + + if (this.affixed === affix) return + + this.affixed = affix + this.unpin = affix == 'bottom' ? position.top - scrollTop : null + + this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) + } + + + // AFFIX PLUGIN DEFINITION + // ======================= + + var old = $.fn.affix + + $.fn.affix = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.affix') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.affix', (data = new Affix(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.affix.Constructor = Affix + + + // AFFIX NO CONFLICT + // ================= + + $.fn.affix.noConflict = function () { + $.fn.affix = old + return this + } + + + // AFFIX DATA-API + // ============== + + $(window).on('load', function () { + $('[data-spy="affix"]').each(function () { + var $spy = $(this) + var data = $spy.data() + + data.offset = data.offset || {} + + if (data.offsetBottom) data.offset.bottom = data.offsetBottom + if (data.offsetTop) data.offset.top = data.offsetTop + + $spy.affix(data) + }) }) }(window.jQuery); + /* ======================================================================== * Bootstrap: alert.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#alerts @@ -141,6 +220,7 @@ $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) }(window.jQuery); + /* ======================================================================== * Bootstrap: button.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#buttons @@ -196,10 +276,11 @@ } Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + var $parent = this.$element.closest('[data-toggle="buttons"]') - if ($parent) { - $parent.find('.active').removeClass('active') + if ($parent.length) { + var $input = this.$element.find('input').prop('checked', !this.$element.hasClass('active')) + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') } this.$element.toggleClass('active') @@ -243,9 +324,11 @@ var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') + e.preventDefault() }) }(window.jQuery); + /* ======================================================================== * Bootstrap: carousel.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#carousel @@ -378,7 +461,7 @@ $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) - this.$element.one($.support.transition.end, function () { + this.$element.find('.item').one($.support.transition.end, function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false @@ -437,12 +520,13 @@ var $this = $(this), href var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 var options = $.extend({}, $target.data(), $this.data()) - var slideIndex + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false $target.carousel(options) if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').pause().to(slideIndex).cycle() + $target.data('bs.carousel').to(slideIndex) } e.preventDefault() @@ -456,6 +540,7 @@ }) }(window.jQuery); + /* ======================================================================== * Bootstrap: collapse.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#collapse @@ -502,28 +587,37 @@ Collapse.prototype.show = function () { if (this.transitioning || this.$element.hasClass('in')) return + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + var dimension = this.dimension() var scroll = $.camelCase(['scroll', dimension].join('-')) var actives = this.$parent && this.$parent.find('> .accordion-group > .in') if (actives && actives.length) { - var hasData = actives.data('collapse') + var hasData = actives.data('bs.collapse') if (hasData && hasData.transitioning) return actives.collapse('hide') - hasData || actives.data('collapse', null) + hasData || actives.data('bs.collapse', null) } this.$element[dimension](0) - this.transition('addClass', $.Event('show.bs.collapse'), 'shown.bs.collapse') + this.transition('addClass', 'shown.bs.collapse') if ($.support.transition) this.$element[dimension](this.$element[0][scroll]) } Collapse.prototype.hide = function () { if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + var dimension = this.dimension() this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide.bs.collapse'), 'hidden') + this.transition('removeClass', 'shown.bs.hidden') this.$element[dimension](0) } @@ -540,18 +634,14 @@ return this } - Collapse.prototype.transition = function (method, startEvent, completeEvent) { + Collapse.prototype.transition = function (method, completeEvent) { var that = this var complete = function () { - if (startEvent.type == 'show') that.reset() + if (completeEvent == 'shown.bs.collapse') that.reset() that.transitioning = 0 that.$element.trigger(completeEvent) } - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - this.transitioning = 1 this.$element[method]('in') @@ -574,10 +664,10 @@ $.fn.collapse = function (option) { return this.each(function () { var $this = $(this) - var data = $this.data('collapse') + var data = $this.data('bs.collapse') var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) } @@ -598,20 +688,26 @@ // ================= $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') + var $this = $(this), href + var target = $this.attr('data-target') || e.preventDefault() || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var option = $(target).data('collapse') ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') var $parent = parent && $(parent) - if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed') - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) }) }(window.jQuery); + /* ======================================================================== * Bootstrap: dropdown.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#dropdowns @@ -767,6 +863,7 @@ .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) }(window.jQuery); + /* ======================================================================== * Bootstrap: modal.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#modals @@ -794,7 +891,7 @@ var Modal = function (element, options) { this.options = options - this.$element = $(element).delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.$element = $(element).on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) this.$backdrop = this.isShown = null @@ -929,11 +1026,12 @@ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') .appendTo(document.body) - this.$backdrop.click( - this.options.backdrop == 'static' ? - $.proxy(this.$element[0].focus, this.$element[0]) - : $.proxy(this.hide, this) - ) + this.$element.on('click', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) if (doAnimate) this.$backdrop[0].offsetWidth // force reflow @@ -1001,7 +1099,7 @@ $target .modal(option) .one('hide', function () { - $this.focus() + $this.is(':visible') && $this.focus() }) }) @@ -1010,10 +1108,10 @@ .on('bs.modal.hidden', '.modal', function () { $body.removeClass('modal-open') }) }(window.jQuery); + /* ======================================================================== - * Bootstrap: tooltip.js v3.0.0 - * http://twitter.github.com/bootstrap/javascript.html#affix - * Inspired by the original jQuery.tipsy by Jason Frame + * Bootstrap: popover.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#popovers * ======================================================================== * Copyright 2012 Twitter, Inc. * @@ -1033,342 +1131,393 @@ +function ($) { "use strict"; - // TOOLTIP PUBLIC CLASS DEFINITION + // POPOVER PUBLIC CLASS DEFINITION // =============================== - var Tooltip = function (element, options) { - this.type = - this.options = - this.enabled = - this.timeout = - this.hoverState = - this.$element = null - - this.init('tooltip', element, options) - } - - Tooltip.DEFAULTS = { - animation: true - , placement: 'top' - , selector: false - , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' - , trigger: 'hover focus' - , title: '' - , delay: 0 - , html: false - , container: false + var Popover = function (element, options) { + this.init('popover', element, options) } - Tooltip.prototype.init = function (type, element, options) { - this.enabled = true - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) + Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, { + placement: 'right' + , trigger: 'click' + , content: '' + , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' + }) - var triggers = this.options.trigger.split(' ') - for (var i = triggers.length; i--;) { - var trigger = triggers[i] + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) - } - } + Popover.prototype.constructor = Popover - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS } - Tooltip.prototype.getDefaults = function () { - return Tooltip.DEFAULTS - } + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() - Tooltip.prototype.getOptions = function (options) { - options = $.extend({}, this.getDefaults(), this.$element.data(), options) + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } + $tip.removeClass('fade top bottom left right in') - return options + $tip.find('.popover-title:empty').hide() } - Tooltip.prototype.enter = function (obj) { - var defaults = this.getDefaults() - var options = {} - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }) + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget)[this.type](options).data('bs.' + this.type) + Popover.prototype.getContent = function () { + var $e = this.$element + var o = this.options - if (!self.options.delay || !self.options.delay.show) return self.show() + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) + } - clearTimeout(this.timeout) + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } - self.hoverState = 'in' - this.timeout = setTimeout(function () { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) + Popover.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData(this.type) } - Tooltip.prototype.leave = function (obj) { - var self = obj instanceof this.constructor ? - obj : $(obj.currentTarget)[this.type](this._options).data('bs.' + this.type) - clearTimeout(this.timeout) + // POPOVER PLUGIN DEFINITION + // ========================= - if (!self.options.delay || !self.options.delay.hide) return self.hide() + var old = $.fn.popover - self.hoverState = 'out' - this.timeout = setTimeout(function () { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) + $.fn.popover = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.popover') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.popover', (data = new Popover(this, options))) + if (typeof option == 'string') data[option]() + }) } - Tooltip.prototype.show = function () { - var e = $.Event('show.bs.'+ this.type) + $.fn.popover.Constructor = Popover - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return + // POPOVER NO CONFLICT + // =================== - var $tip = this.tip() + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } - this.setContent() +}(window.jQuery); - if (this.options.animation) $tip.addClass('fade') +/* ======================================================================== + * Bootstrap: scrollspy.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ - var placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) ++function ($) { "use strict"; - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + // SCROLLSPY CLASS DEFINITION + // ========================== - var tp - var pos = this.getPosition() - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight + function ScrollSpy(element, options) { + var href + var process = $.proxy(this.process, this) + var $element = $(element).is('body') ? $(window) : $(element) - switch (placement) { - case 'bottom': - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'top': - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'left': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} - break - case 'right': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} - break - } + this.$body = $('body') + this.$scrollElement = $element.on('scroll.bs.scroll-spy.data-api', process) + this.options = $.extend({}, ScrollSpy.DEFAULTS, options) + this.selector = (this.options.target + || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 + || '') + ' .nav li > a' + this.offsets = $([]) + this.targets = $([]) + this.activeTarget = null - this.applyPlacement(tp, placement) - this.$element.trigger('shown.bs.' + this.type) - } + this.refresh() + this.process() } - Tooltip.prototype.applyPlacement = function(offset, placement) { - var replace - var $tip = this.tip() - var width = $tip[0].offsetWidth - var height = $tip[0].offsetHeight + ScrollSpy.DEFAULTS = { + offset: 10 + } - $tip - .offset(offset) - .addClass(placement) - .addClass('in') + ScrollSpy.prototype.refresh = function () { + this.offsets = $([]) + this.targets = $([]) - var actualWidth = $tip[0].offsetWidth - var actualHeight = $tip[0].offsetHeight + var self = this + var $targets = this.$body + .find(this.selector) + .map(function () { + var $el = $(this) + var href = $el.data('target') || $el.attr('href') + var $href = /^#\w/.test(href) && $(href) - if (placement == 'top' && actualHeight != height) { - replace = true - offset.top = offset.top + height - actualHeight + return ($href + && $href.length + && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null + }) + .sort(function (a, b) { return a[0] - b[0] }) + .each(function () { + self.offsets.push(this[0]) + self.targets.push(this[1]) + }) + } + + ScrollSpy.prototype.process = function () { + var scrollTop = this.$scrollElement.scrollTop() + this.options.offset + var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight + var maxScroll = scrollHeight - this.$scrollElement.height() + var offsets = this.offsets + var targets = this.targets + var activeTarget = this.activeTarget + var i + + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets.last()[0]) && this.activate(i) } - if (placement == 'bottom' || placement == 'top') { - var delta = 0 + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target - $tip.offset(offset) + $(this.selector) + .parents('.active') + .removeClass('active') - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') } - if (replace) $tip.offset(offset) + active.trigger('activate') } - Tooltip.prototype.replaceArrow = function(delta, dimension, position) { - this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + + // SCROLLSPY PLUGIN DEFINITION + // =========================== + + var old = $.fn.scrollspy + + $.fn.scrollspy = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.scrollspy') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) + if (typeof option == 'string') data[option]() + }) } - Tooltip.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() + $.fn.scrollspy.Constructor = ScrollSpy - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this } - Tooltip.prototype.hide = function () { - var that = this - var $tip = this.tip() - var e = $.Event('hide.bs.' + this.type) - this.$element.trigger(e) + // SCROLLSPY DATA-API + // ================== - if (e.isDefaultPrevented()) return + $(window).on('load', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + $spy.scrollspy($spy.data()) + }) + }) - $tip.removeClass('in') +}(window.jQuery); - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).detach() - }, 500) +/* ======================================================================== + * Bootstrap: tab.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#tabs + * ======================================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================================== */ - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.detach() - }) - } - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() ++function ($) { "use strict"; - this.$element.trigger('hidden.bs.' + this.type) + // TAB CLASS DEFINITION + // ==================== - return this + var Tab = function (element) { + this.element = $(element) } - Tooltip.prototype.fixTitle = function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } - } - Tooltip.prototype.hasContent = function () { - return this.getTitle() - } + if ($this.parent('li').hasClass('active')) return - Tooltip.prototype.getPosition = function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } + var previous = $ul.find('.active:last a')[0] + var e = $.Event('show.bs.tab', { + relatedTarget: previous + }) - Tooltip.prototype.getTitle = function () { - var title - var $e = this.$element - var o = this.options + $this.trigger(e) - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + if (e.isDefaultPrevented()) return - return title - } + var $target = $(selector) - Tooltip.prototype.tip = function () { - return this.$tip = this.$tip || $(this.options.template) + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown.bs.tab' + , relatedTarget: previous + }) + }) } - Tooltip.prototype.arrow =function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && $active.hasClass('fade') - Tooltip.prototype.validate = function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') - Tooltip.prototype.enable = function () { - this.enabled = true - } + element.addClass('active') - Tooltip.prototype.disable = function () { - this.enabled = false - } + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } - Tooltip.prototype.toggleEnabled = function () { - this.enabled = !this.enabled - } + if (element.parent('.dropdown-menu')) { + element.closest('li.dropdown').addClass('active') + } - Tooltip.prototype.toggle = function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data('bs.' + this.type) : this - self.tip().hasClass('in') ? self.leave(self) : self.enter(self) - } + callback && callback() + } - Tooltip.prototype.destroy = function () { - this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) + transition ? + $active.one($.support.transition.end, next) : + next() + + $active.removeClass('in') } - // TOOLTIP PLUGIN DEFINITION - // ========================= + // TAB PLUGIN DEFINITION + // ===================== - var old = $.fn.tooltip + var old = $.fn.tab - $.fn.tooltip = function (option) { + $.fn.tab = function ( option ) { return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tooltip') - var options = typeof option == 'object' && option + var $this = $(this) + var data = $this.data('bs.tab') - if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (!data) $this.data('bs.tab', (data = new Tab(this))) if (typeof option == 'string') data[option]() }) } - $.fn.tooltip.Constructor = Tooltip + $.fn.tab.Constructor = Tab - // TOOLTIP NO CONFLICT - // =================== + // TAB NO CONFLICT + // =============== - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old + $.fn.tab.noConflict = function () { + $.fn.tab = old return this } + + // TAB DATA-API + // ============ + + $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + e.preventDefault() + $(this).tab('show') + }) + }(window.jQuery); + /* ======================================================================== - * Bootstrap: popover.js v3.0.0 - * http://twitter.github.com/bootstrap/javascript.html#popovers + * Bootstrap: tooltip.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#affix + * Inspired by the original jQuery.tipsy by Jason Frame * ======================================================================== * Copyright 2012 Twitter, Inc. * @@ -1388,389 +1537,345 @@ +function ($) { "use strict"; - // POPOVER PUBLIC CLASS DEFINITION + // TOOLTIP PUBLIC CLASS DEFINITION // =============================== - var Popover = function (element, options) { - this.init('popover', element, options) - } - - Popover.DEFAULTS = $.extend({} , $.fn.tooltip.Constructor.DEFAULTS, { - placement: 'right' - , trigger: 'click' - , content: '' - , template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' - }) - - - // NOTE: POPOVER EXTENDS tooltip.js - // ================================ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - - Popover.prototype.constructor = Popover + var Tooltip = function (element, options) { + this.type = + this.options = + this.enabled = + this.timeout = + this.hoverState = + this.$element = null - Popover.prototype.getDefaults = function () { - return Popover.DEFAULTS + this.init('tooltip', element, options) } - Popover.prototype.setContent = function () { - var $tip = this.tip() - var title = this.getTitle() - var content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) + Tooltip.DEFAULTS = { + animation: true + , placement: 'top' + , selector: false + , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>' + , trigger: 'hover focus' + , title: '' + , delay: 0 + , html: false + , container: false + } - $tip.removeClass('fade top bottom left right in') + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) - $tip.find('.popover-title:empty').hide() - } + var triggers = this.options.trigger.split(' ') - Popover.prototype.hasContent = function () { - return this.getTitle() || this.getContent() - } + for (var i = triggers.length; i--;) { + var trigger = triggers[i] - Popover.prototype.getContent = function () { - var content = typeof this.options.content == 'function' ? - this.options.content.call(this.$element[0]) : - this.options.content + if (trigger == 'click') { + this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) + } else if (trigger != 'manual') { + var eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' + var eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - return content || this.$element.attr('data-content') - } + this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) + this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) + } + } - Popover.prototype.tip = function () { - if (!this.$tip) this.$tip = $(this.options.template) - return this.$tip + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() } - Popover.prototype.destroy = function () { - this.hide().$element.off('.' + this.type).removeData(this.type) + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS } + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) - // POPOVER PLUGIN DEFINITION - // ========================= + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } - var old = $.fn.popover + return options + } - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.popover') - var options = typeof option == 'object' && option + Tooltip.prototype.enter = function (obj) { + var defaults = this.getDefaults() + var options = {} - if (!data) $this.data('bs.popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value }) - } - $.fn.popover.Constructor = Popover + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](options).data('bs.' + this.type) + if (!self.options.delay || !self.options.delay.show) return self.show() - // POPOVER NO CONFLICT - // =================== + clearTimeout(this.timeout) - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this + self.hoverState = 'in' + this.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) } -}(window.jQuery); -/* ======================================================================== - * Bootstrap: scrollspy.js v3.0.0 - * http://twitter.github.com/bootstrap/javascript.html#scrollspy - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this._options).data('bs.' + this.type) + clearTimeout(this.timeout) -+function ($) { "use strict"; + if (!self.options.delay || !self.options.delay.hide) return self.hide() - // SCROLLSPY CLASS DEFINITION - // ========================== + self.hoverState = 'out' + this.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } - function ScrollSpy(element, options) { - var href - var process = $.proxy(this.process, this) - var $element = $(element).is('body') ? $(window) : $(element) + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.'+ this.type) - this.$body = $('body') - this.$scrollElement = $element.on('scroll.bs.scroll-spy.data-api', process) - this.options = $.extend({}, ScrollSpy.DEFAULTS, options) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.offsets = $([]) - this.targets = $([]) - this.activeTarget = null + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) - this.refresh() - this.process() - } + if (e.isDefaultPrevented()) return - ScrollSpy.DEFAULTS = { - offset: 10 - } + var $tip = this.tip() - ScrollSpy.prototype.refresh = function () { - this.offsets = $([]) - this.targets = $([]) + this.setContent() - var self = this - var $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - var href = $el.data('target') || $el.attr('href') - var $href = /^#\w/.test(href) && $(href) + if (this.options.animation) $tip.addClass('fade') - return ($href - && $href.length - && [[ $href.position().top + (!$.isWindow(self.$scrollElement.get(0)) && self.$scrollElement.scrollTop()), href ]]) || null - }) - .sort(function (a, b) { return a[0] - b[0] }) - .each(function () { - self.offsets.push(this[0]) - self.targets.push(this[1]) - }) - } + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement - ScrollSpy.prototype.process = function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - var scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - var maxScroll = scrollHeight - this.$scrollElement.height() - var offsets = this.offsets - var targets = this.targets - var activeTarget = this.activeTarget - var i + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) && this.activate(i) - } + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) + var tp + var pos = this.getPosition() + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + switch (placement) { + case 'bottom': + tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'top': + tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'left': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} + break + case 'right': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} + break + } + + this.applyPlacement(tp, placement) + this.$element.trigger('shown.bs.' + this.type) } } - ScrollSpy.prototype.activate = function (target) { - this.activeTarget = target - - $(this.selector) - .parents('.active') - .removeClass('active') + Tooltip.prototype.applyPlacement = function(offset, placement) { + var replace + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight - var selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' + $tip + .offset(offset) + .addClass('in') - var active = $(selector) - .parents('li') - .addClass('active') + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight - if (active.parent('.dropdown-menu').length) { - active = active - .closest('li.dropdown') - .addClass('active') + if (placement == 'top' && actualHeight != height) { + replace = true + offset.top = offset.top + height - actualHeight } - active.trigger('activate') - } + if (placement == 'bottom' || placement == 'top') { + var delta = 0 + if (offset.left < 0){ + delta = offset.left * -2 + offset.left = 0 - // SCROLLSPY PLUGIN DEFINITION - // =========================== + $tip.offset(offset) - var old = $.fn.scrollspy + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.scrollspy') - var options = typeof option == 'object' && option + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } - if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) + if (replace) $tip.offset(offset) } - $.fn.scrollspy.Constructor = ScrollSpy - + Tooltip.prototype.replaceArrow = function(delta, dimension, position) { + this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } - // SCROLLSPY NO CONFLICT - // ===================== + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') } + Tooltip.prototype.hide = function () { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) - // SCROLLSPY DATA-API - // ================== + this.$element.trigger(e) - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) + if (e.isDefaultPrevented()) return -}(window.jQuery); -/* ======================================================================== - * Bootstrap: tab.js v3.0.0 - * http://twitter.github.com/bootstrap/javascript.html#tabs - * ======================================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ======================================================================== */ + $tip.removeClass('in') + + function removeWithAnimation() { + var timeout = setTimeout(function () { + $tip.off($.support.transition.end).detach() + }, 500) + $tip.one($.support.transition.end, function () { + clearTimeout(timeout) + $tip.detach() + }) + } -+function ($) { "use strict"; + $.support.transition && this.$tip.hasClass('fade') ? + removeWithAnimation() : + $tip.detach() - // TAB CLASS DEFINITION - // ==================== + this.$element.trigger('hidden.bs.' + this.type) - var Tab = function (element) { - this.element = $(element) + return this } - Tab.prototype.show = function () { - var $this = this.element - var $ul = $this.closest('ul:not(.dropdown-menu)') - var selector = $this.attr('data-target') - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + Tooltip.prototype.fixTitle = function () { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') } + } - if ($this.parent('li').hasClass('active')) return - - var previous = $ul.find('.active:last a')[0] - var e = $.Event('show.bs.tab', { - relatedTarget: previous - }) + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } - $this.trigger(e) + Tooltip.prototype.getPosition = function () { + var el = this.$element[0] + return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { + width: el.offsetWidth + , height: el.offsetHeight + }, this.$element.offset()) + } - if (e.isDefaultPrevented()) return + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options - var $target = $(selector) + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown.bs.tab' - , relatedTarget: previous - }) - }) + return title } - Tab.prototype.activate = function (element, container, callback) { - var $active = container.find('> .active') - var transition = callback - && $.support.transition - && $active.hasClass('fade') + Tooltip.prototype.tip = function () { + return this.$tip = this.$tip || $(this.options.template) + } - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') + Tooltip.prototype.arrow =function(){ + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + } - element.addClass('active') + Tooltip.prototype.validate = function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } + Tooltip.prototype.enable = function () { + this.enabled = true + } - if (element.parent('.dropdown-menu')) { - element.closest('li.dropdown').addClass('active') - } + Tooltip.prototype.disable = function () { + this.enabled = false + } - callback && callback() - } + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } - transition ? - $active.one($.support.transition.end, next) : - next() + Tooltip.prototype.toggle = function (e) { + var self = e ? $(e.currentTarget)[this.type](this._options).data('bs.' + this.type) : this + self.tip().hasClass('in') ? self.leave(self) : self.enter(self) + } - $active.removeClass('in') + Tooltip.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) } - // TAB PLUGIN DEFINITION - // ===================== + // TOOLTIP PLUGIN DEFINITION + // ========================= - var old = $.fn.tab + var old = $.fn.tooltip - $.fn.tab = function ( option ) { + $.fn.tooltip = function (option) { return this.each(function () { - var $this = $(this) - var data = $this.data('bs.tab') + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option - if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) if (typeof option == 'string') data[option]() }) } - $.fn.tab.Constructor = Tab + $.fn.tooltip.Constructor = Tooltip - // TAB NO CONFLICT - // =============== + // TOOLTIP NO CONFLICT + // =================== - $.fn.tab.noConflict = function () { - $.fn.tab = old + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old return this } - - // TAB DATA-API - // ============ - - $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - }(window.jQuery); + /* ======================================================================== - * Bootstrap: affix.js v3.0.0 - * http://twitter.github.com/bootstrap/javascript.html#affix + * Bootstrap: transition.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#transitions * ======================================================================== - * Copyright 2012 Twitter, Inc. + * Copyright 2013 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -1788,101 +1893,28 @@ +function ($) { "use strict"; - // AFFIX CLASS DEFINITION - // ====================== - - var Affix = function (element, options) { - this.options = $.extend({}, Affix.DEFAULTS, options) - this.$window = $(window) - .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) - - this.$element = $(element) - this.affixed = - this.unpin = null - - this.checkPosition() - } - - Affix.DEFAULTS = { - offset: 0 - } - - Affix.prototype.checkPositionWithEventLoop = function () { - setTimeout($.proxy(this.checkPosition, this), 1) - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - var scrollTop = this.$window.scrollTop() - var position = this.$element.offset() - var offset = this.options.offset - var offsetTop = offset.top - var offsetBottom = offset.bottom - var reset = 'affix affix-top affix-bottom' - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - var affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ? false : - offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ? 'bottom' : - offsetTop != null && (scrollTop <= offsetTop) ? 'top' : false - - if (this.affixed === affix) return - - this.affixed = affix - this.unpin = affix == 'bottom' ? position.top - scrollTop : null - - this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) - } - - - // AFFIX PLUGIN DEFINITION - // ======================= - - var old = $.fn.affix - - $.fn.affix = function (option) { - return this.each(function () { - var $this = $(this) - var data = $this.data('bs.affix') - var options = typeof option == 'object' && option - - if (!data) $this.data('bs.affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + function transitionEnd() { + var el = document.createElement('bootstrap') - // AFFIX NO CONFLICT - // ================= + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } - $.fn.affix.noConflict = function () { - $.fn.affix = old - return this + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } } - - // AFFIX DATA-API - // ============== - - $(window).on('load', function () { - $('[data-spy="affix"]').each(function () { - var $spy = $(this) - var data = $spy.data() - - data.offset = data.offset || {} - - if (data.offsetBottom) data.offset.bottom = data.offsetBottom - if (data.offsetTop) data.offset.top = data.offsetTop - - $spy.affix(data) - }) + $(function () { + $.support.transition = transitionEnd() }) }(window.jQuery); diff --git a/dist/js/bootstrap.min.js b/dist/js/bootstrap.min.js new file mode 100644 index 0000000000000000000000000000000000000000..fbee087934219e1bdcf9a56562e7ee2bb0c4be2d --- /dev/null +++ b/dist/js/bootstrap.min.js @@ -0,0 +1,6 @@ +/** +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 +*/ ++function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=null,this.checkPosition()};b.DEFAULTS={offset:0},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),c=this.$window.scrollTop(),d=this.$element.offset(),e=this.options.offset,f=e.top,g=e.bottom,h="affix affix-top affix-bottom";"object"!=typeof e&&(g=f=e),"function"==typeof f&&(f=e.top()),"function"==typeof g&&(g=e.bottom());var i=null!=this.unpin&&c+this.unpin<=d.top?!1:null!=g&&d.top+this.$element.height()>=b-g?"bottom":null!=f&&f>=c?"top":!1;this.affixed!==i&&(this.affixed=i,this.unpin="bottom"==i?d.top-c:null,this.$element.removeClass(h).addClass("affix"+(i?"-"+i:"")))}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(window.jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.on(a.support.transition.end,c):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d)};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(a){var b="disabled",c=this.$element,d=c.is("input")?"val":"html",e=c.data();a+="Text",e.resetText||c.data("resetText",c[d]()),c[d](e[a]||this.options[a]),setTimeout(function(){"loadingText"==a?c.addClass(b).attr(b,b):c.removeClass(b).removeAttr(b)},0)},b.prototype.toggle=function(){var a=this.$element.closest('[data-toggle="buttons"]');if(a.length){var b=this.$element.find("input").prop("checked",!this.$element.hasClass("active"));"radio"===b.prop("type")&&a.find(".active").removeClass("active")}this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover"},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition.end&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;this.sliding=!0,f&&this.pause(),e=e.length?e:this.$element.find(".item")[h]();var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});if(!e.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(j),j.isDefaultPrevented())return;e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),this.$element.find(".item").one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid")},0)})}else{if(this.$element.trigger(j),j.isDefaultPrevented())return;d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return f&&this.cycle(),this}};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension(),d=a.camelCase(["scroll",c].join("-")),e=this.$parent&&this.$parent.find("> .accordion-group > .in");if(e&&e.length){var f=e.data("bs.collapse");if(f&&f.transitioning)return;e.collapse("hide"),f||e.data("bs.collapse",null)}this.$element[c](0),this.transition("addClass","shown.bs.collapse"),a.support.transition&&this.$element[c](this.$element[0][d])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.reset(this.$element[c]()),this.transition("removeClass","shown.bs.hidden"),this.$element[c](0)}}},b.prototype.reset=function(a){var b=this.dimension();return this.$element.removeClass("collapse")[b](a||"auto")[0].offsetWidth,this.$element[null!=a?"addClass":"removeClass"]("collapse"),this},b.prototype.transition=function(b,c){var d=this,e=function(){"shown.bs.collapse"==c&&d.reset(),d.transitioning=0,d.$element.trigger(c)};this.transitioning=1,this.$element[b]("in"),a.support.transition&&this.$element.hasClass("collapse")?this.$element.one(a.support.transition.end,e):e()},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find("[data-toggle=collapse][data-parent="+i+"]").not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(window.jQuery),+function(a){"use strict";function b(){a(d).remove(),a(e).each(function(b){var d=c(a(this));d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown")),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown"))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){if("ontouchstart"in document.documentElement&&a('<div class="dropdown-backdrop"/>').insertBefore(a(this)).on("click",b),f.trigger(d=a.Event("show.bs.dropdown")),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown")}return e.focus(),!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=a("[role=menu] li:not(.divider):visible a",f);if(h.length){var i=h.index(h.filter(":focus"));38==b.keyCode&&i>0&&i--,40==b.keyCode&&i<h.length-1&&i++,~i||(i=0),h.eq(i).focus()}}}};var g=a.fn.dropdown;a.fn.dropdown=function(b){return this.each(function(){var c=a(this),d=c.data("dropdown");d||c.data("dropdown",d=new f(this)),"string"==typeof b&&d[b].call(c)})},a.fn.dropdown.Constructor=f,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=g,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",e,f.prototype.toggle).on("keydown.bs.dropdown.data-api",e+", [role=menu]",f.prototype.keydown)}(window.jQuery),+function(a){"use strict";var b=function(b,c){this.options=c,this.$element=a(b).on("click.dismiss.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};b.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},b.prototype.toggle=function(){return this[this.isShown?"hide":"show"]()},b.prototype.show=function(){var b=this,c=a.Event("show.bs.modal");this.$element.trigger(c),this.isShown||c.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.backdrop(function(){var c=a.support.transition&&b.$element.hasClass("fade");b.$element.parent().length||b.$element.appendTo(document.body),b.$element.show(),c&&b.$element[0].offsetWidth,b.$element.addClass("in").attr("aria-hidden",!1),b.enforceFocus(),c?b.$element.one(a.support.transition.end,function(){b.$element.focus().trigger("shown.bs.modal")}):b.$element.focus().trigger("shown.bs.modal")}))},b.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),a.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal())},b.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.focus()},this))},b.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},b.prototype.hideWithTransition=function(){var b=this,c=setTimeout(function(){b.$element.off(a.support.transition.end),b.hideModal()},500);this.$element.one(a.support.transition.end,function(){clearTimeout(c),b.hideModal()})},b.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.removeBackdrop(),a.$element.trigger("hidden.bs.modal")})},b.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},b.prototype.backdrop=function(b){var c=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var d=a.support.transition&&c;if(this.$backdrop=a('<div class="modal-backdrop '+c+'" />').appendTo(document.body),this.$element.on("click",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c){return this.each(function(){var d=a(this),e=d.data("bs.modal"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);e||d.data("bs.modal",e=new b(this,f)),"string"==typeof c?e[c]():f.show&&e.show()})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());b.preventDefault(),e.modal(f).one("hide",function(){c.is(":visible")&&c.focus()})});var d=a(document.body).on("bs.modal.shown",".modal",function(){d.addClass("modal-open")}).on("bs.modal.hidden",".modal",function(){d.removeClass("modal-open")})}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.init("popover",a,b)};b.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"html":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title:empty").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData(this.type)};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(window.jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this),g=a(c).is("body")?a(window):a(c);this.$body=a("body"),this.$scrollElement=g.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){this.offsets=a([]),this.targets=a([]);var b=this;this.$body.find(this.selector).map(function(){var c=a(this),d=c.data("target")||c.attr("href"),e=/^#\w/.test(d)&&a(d);return e&&e.length&&[[e.position().top+(!a.isWindow(b.$scrollElement.get(0))&&b.$scrollElement.scrollTop()),d]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parents(".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(window.jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.attr("data-target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(window.jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focus",i="hover"==g?"mouseleave":"blur";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.enter=function(b){var c=this.getDefaults(),d={};this._options&&a.each(this._options,function(a,b){c[a]!=b&&(d[a]=b)});var e=b instanceof this.constructor?b:a(b.currentTarget)[this.type](d).data("bs."+this.type);return e.options.delay&&e.options.delay.show?(clearTimeout(this.timeout),e.hoverState="in",this.timeout=setTimeout(function(){"in"==e.hoverState&&e.show()},e.options.delay.show),void 0):e.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this._options).data("bs."+this.type);return clearTimeout(this.timeout),c.options.delay&&c.options.delay.hide?(c.hoverState="out",this.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide),void 0):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this.tip();this.setContent(),this.options.animation&&c.addClass("fade");var d="function"==typeof this.options.placement?this.options.placement.call(this,c[0],this.$element[0]):this.options.placement;c.detach().css({top:0,left:0,display:"block"}).addClass(d),this.options.container?c.appendTo(this.options.container):c.insertAfter(this.$element);var e,f=this.getPosition(),g=c[0].offsetWidth,h=c[0].offsetHeight;switch(d){case"bottom":e={top:f.top+f.height,left:f.left+f.width/2-g/2};break;case"top":e={top:f.top-h,left:f.left+f.width/2-g/2};break;case"left":e={top:f.top+f.height/2-h/2,left:f.left-g};break;case"right":e={top:f.top+f.height/2-h/2,left:f.left+f.width}}this.applyPlacement(e,d),this.$element.trigger("shown.bs."+this.type)}},b.prototype.applyPlacement=function(a,b){var c,d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight;d.offset(a).addClass("in");var g=d[0].offsetWidth,h=d[0].offsetHeight;if("top"==b&&h!=f&&(c=!0,a.top=a.top+f-h),"bottom"==b||"top"==b){var i=0;a.left<0&&(i=-2*a.left,a.left=0,d.offset(a),g=d[0].offsetWidth,h=d[0].offsetHeight),this.replaceArrow(i-e+g,g,"left")}else this.replaceArrow(h-f,h,"top");c&&d.offset(a)},b.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},b.prototype.hide=function(){function b(){var b=setTimeout(function(){c.off(a.support.transition.end).detach()},500);c.one(a.support.transition.end,function(){clearTimeout(b),c.detach()})}var c=this.tip(),d=a.Event("hide.bs."+this.type);return this.$element.trigger(d),d.isDefaultPrevented()?void 0:(c.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?b():c.detach(),this.$element.trigger("hidden.bs."+this.type),this)},b.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},b.prototype.hasContent=function(){return this.getTitle()},b.prototype.getPosition=function(){var b=this.$element[0];return a.extend({},"function"==typeof b.getBoundingClientRect?b.getBoundingClientRect():{width:b.offsetWidth,height:b.offsetHeight},this.$element.offset())},b.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},b.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},b.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},b.prototype.enable=function(){this.enabled=!0},b.prototype.disable=function(){this.enabled=!1},b.prototype.toggleEnabled=function(){this.enabled=!this.enabled},b.prototype.toggle=function(b){var c=b?a(b.currentTarget)[this.type](this._options).data("bs."+this.type):this;c.tip().hasClass("in")?c.leave(c):c.enter(c)},b.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var c=a.fn.tooltip;a.fn.tooltip=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof c&&c;e||d.data("bs.tooltip",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.tooltip.Constructor=b,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=c,this}}(window.jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]}}a(function(){a.support.transition=b()})}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap.min.js b/docs/assets/js/bootstrap.min.js index e35afa96003de13e967a18c15dc3ce29a168b78c..08ec1d279697ce6eac9126eee18eab36097381b2 100644 --- a/docs/assets/js/bootstrap.min.js +++ b/docs/assets/js/bootstrap.min.js @@ -1,6 +1,6 @@ /** -* Bootstrap.js v3.0.0 by @fat & @mdo -* Copyright 2012 Twitter, Inc. -* http://www.apache.org/licenses/LICENSE-2.0.txt +* bootstrap.js v3.0.0 by @fat and @mdo +* Copyright 2013 Twitter Inc. +* http://www.apache.org/licenses/LICENSE-2.0 */ -+function(e){"use strict";function t(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var n in t)if(e.style[n]!==undefined)return{end:t[n]}}e(function(){e.support.transition=t()})}(window.jQuery),+function(e){"use strict";var t='[data-dismiss="alert"]',n=function(n){e(n).on("click",t,this.close)};n.prototype.close=function(t){function s(){i.trigger("closed.bs.alert").remove()}var n=e(this),r=n.attr("data-target");r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));var i=e(r);t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close.bs.alert"));if(t.isDefaultPrevented())return;i.removeClass("in"),e.support.transition&&i.hasClass("fade")?i.on(e.support.transition.end,s):s()};var r=e.fn.alert;e.fn.alert=function(t){return this.each(function(){var r=e(this),i=r.data("bs.alert");i||r.data("bs.alert",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.alert.Constructor=n,e.fn.alert.noConflict=function(){return e.fn.alert=r,this},e(document).on("click.bs.alert.data-api",t,n.prototype.close)}(window.jQuery),+function(e){"use strict";var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r)};t.DEFAULTS={loadingText:"loading..."},t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.is("input")?"val":"html",i=n.data();e+="Text",i.resetText||n.data("resetText",n[r]()),n[r](i[e]||this.options[e]),setTimeout(function(){e=="loadingText"?n.addClass(t).attr(t,t):n.removeClass(t).removeAttr(t)},0)},t.prototype.toggle=function(){var e=this.$element.closest('[data-toggle="buttons-radio"]');e&&e.find(".active").removeClass("active"),this.$element.toggleClass("active")};var n=e.fn.button;e.fn.button=function(n){return this.each(function(){var r=e(this),i=r.data("button"),s=typeof n=="object"&&n;i||r.data("bs.button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.bs.button.data-api","[data-toggle^=button]",function(t){var n=e(t.target);n.hasClass("btn")||(n=n.closest(".btn")),n.button("toggle")})}(window.jQuery),+function(e){"use strict";var t=function(t,n){this.$element=e(t),this.$indicators=this.$element.find(".carousel-indicators"),this.options=n,this.paused=this.sliding=this.interval=this.$active=this.$items=null,this.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};t.DEFAULTS={interval:5e3,pause:"hover"},t.prototype.cycle=function(t){return t||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(e.proxy(this.next,this),this.options.interval)),this},t.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},t.prototype.to=function(t){var n=this,r=this.getActiveIndex();if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){n.to(t)}):r==t?this.pause().cycle():this.slide(t>r?"next":"prev",e(this.$items[t]))},t.prototype.pause=function(t){return t||(this.paused=!0),this.$element.find(".next, .prev").length&&e.support.transition.end&&(this.$element.trigger(e.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},t.prototype.next=function(){if(this.sliding)return;return this.slide("next")},t.prototype.prev=function(){if(this.sliding)return;return this.slide("prev")},t.prototype.slide=function(t,n){var r=this.$element.find(".item.active"),i=n||r[t](),s=this.interval,o=t=="next"?"left":"right",u=t=="next"?"first":"last",a=this;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u]();var f=e.Event("slide.bs.carousel",{relatedTarget:i[0],direction:o});if(i.hasClass("active"))return;this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var t=e(a.$indicators.children()[a.getActiveIndex()]);t&&t.addClass("active")}));if(e.support.transition&&this.$element.hasClass("slide")){this.$element.trigger(f);if(f.isDefaultPrevented())return;i.addClass(t),i[0].offsetWidth,r.addClass(o),i.addClass(o),this.$element.one(e.support.transition.end,function(){i.removeClass([t,o].join(" ")).addClass("active"),r.removeClass(["active",o].join(" ")),a.sliding=!1,setTimeout(function(){a.$element.trigger("slid")},0)})}else{this.$element.trigger(f);if(f.isDefaultPrevented())return;r.removeClass("active"),i.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this};var n=e.fn.carousel;e.fn.carousel=function(n){return this.each(function(){var r=e(this),i=r.data("bs.carousel"),s=e.extend({},t.DEFAULTS,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("bs.carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(t){var n=e(this),r,i=e(n.attr("data-target")||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,"")),s=e.extend({},i.data(),n.data()),o;i.carousel(s),(o=n.attr("data-slide-to"))&&i.data("bs.carousel").pause().to(o).cycle(),t.preventDefault()}),e(window).on("load",function(){e('[data-ride="carousel"]').each(function(){var t=e(this);t.carousel(t.data())})})}(window.jQuery),+function(e){"use strict";var t=function(n,r){this.$element=e(n),this.options=e.extend({},t.DEFAULTS,r),this.transitioning=null,this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.DEFAULTS={toggle:!0},t.prototype.dimension=function(){var e=this.$element.hasClass("width");return e?"width":"height"},t.prototype.show=function(){if(this.transitioning||this.$element.hasClass("in"))return;var t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){var i=r.data("collapse");if(i&&i.transitioning)return;r.collapse("hide"),i||r.data("collapse",null)}this.$element[t](0),this.transition("addClass",e.Event("show.bs.collapse"),"shown.bs.collapse"),e.support.transition&&this.$element[t](this.$element[0][n])},t.prototype.hide=function(){if(this.transitioning||!this.$element.hasClass("in"))return;var t=this.dimension();this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide.bs.collapse"),"hidden"),this.$element[t](0)},t.prototype.reset=function(e){var t=this.dimension();return this.$element.removeClass("collapse")[t](e||"auto")[0].offsetWidth,this.$element[e!=null?"addClass":"removeClass"]("collapse"),this},t.prototype.transition=function(t,n,r){var i=this,s=function(){n.type=="show"&&i.reset(),i.transitioning=0,i.$element.trigger(r)};this.$element.trigger(n);if(n.isDefaultPrevented())return;this.transitioning=1,this.$element[t]("in"),e.support.transition&&this.$element.hasClass("collapse")?this.$element.one(e.support.transition.end,s):s()},t.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var n=e.fn.collapse;e.fn.collapse=function(n){return this.each(function(){var r=e(this),i=r.data("collapse"),s=e.extend({},t.DEFAULTS,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(t){var n=e(this),r,i=n.attr("data-target")||t.preventDefault()||(r=n.attr("href"))&&r.replace(/.*(?=#[^\s]+$)/,""),s=e(i).data("collapse")?"toggle":n.data(),o=n.attr("data-parent"),u=o&&e(o);u&&u.find("[data-toggle=collapse][data-parent="+o+"]").not(n).addClass("collapsed"),n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),+function(e){"use strict";function i(){e(t).remove(),e(n).each(function(t){var n=s(e(this));if(!n.hasClass("open"))return;n.trigger(t=e.Event("hide.bs.dropdown"));if(t.isDefaultPrevented())return;n.removeClass("open").trigger("hidden.bs.dropdown")})}function s(t){var n=t.attr("data-target");n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,""));var r=n&&e(n);return r&&r.length?r:t.parent()}var t=".dropdown-backdrop",n="[data-toggle=dropdown]",r=function(t){var n=e(t).on("click.bs.dropdown",this.toggle)};r.prototype.toggle=function(t){var n=e(this);if(n.is(".disabled, :disabled"))return;var r=s(n),o=r.hasClass("open");i();if(!o){"ontouchstart"in document.documentElement&&e('<div class="dropdown-backdrop"/>').insertBefore(e(this)).on("click",i),r.trigger(t=e.Event("show.bs.dropdown"));if(t.isDefaultPrevented())return;r.toggleClass("open").trigger("shown.bs.dropdown")}return n.focus(),!1},r.prototype.keydown=function(t){if(!/(38|40|27)/.test(t.keyCode))return;var r=e(this);t.preventDefault(),t.stopPropagation();if(r.is(".disabled, :disabled"))return;var i=s(r),o=i.hasClass("open");if(!o||o&&t.keyCode==27)return t.which==27&&i.find(n).focus(),r.click();var u=e("[role=menu] li:not(.divider):visible a",i);if(!u.length)return;var a=u.index(u.filter(":focus"));t.keyCode==38&&a>0&&a--,t.keyCode==40&&a<u.length-1&&a++,~a||(a=0),u.eq(a).focus()};var o=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var n=e(this),i=n.data("dropdown");i||n.data("dropdown",i=new r(this)),typeof t=="string"&&i[t].call(n)})},e.fn.dropdown.Constructor=r,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=o,this},e(document).on("click.bs.dropdown.data-api",i).on("click.bs.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.bs.dropdown.data-api",n,r.prototype.toggle).on("keydown.bs.dropdown.data-api",n+", [role=menu]",r.prototype.keydown)}(window.jQuery),+function(e){"use strict";var t=function(t,n){this.options=n,this.$element=e(t).delegate('[data-dismiss="modal"]',"click.dismiss.modal",e.proxy(this.hide,this)),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},t.prototype.toggle=function(){return this[this.isShown?"hide":"show"]()},t.prototype.show=function(){var t=this,n=e.Event("show.bs.modal");this.$element.trigger(n);if(this.isShown||n.isDefaultPrevented())return;this.isShown=!0,this.escape(),this.backdrop(function(){var n=e.support.transition&&t.$element.hasClass("fade");t.$element.parent().length||t.$element.appendTo(document.body),t.$element.show(),n&&t.$element[0].offsetWidth,t.$element.addClass("in").attr("aria-hidden",!1),t.enforceFocus(),n?t.$element.one(e.support.transition.end,function(){t.$element.focus().trigger("shown.bs.modal")}):t.$element.focus().trigger("shown.bs.modal")})},t.prototype.hide=function(t){t&&t.preventDefault(),t=e.Event("hide.bs.modal"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},t.prototype.enforceFocus=function(){e(document).off("focusin.bs.modal").on("focusin.bs.modal",e.proxy(function(e){this.$element[0]!==e.target&&!this.$element.has(e.target).length&&this.$element.focus()},this))},t.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",e.proxy(function(e){e.which==27&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},t.prototype.hideWithTransition=function(){var t=this,n=setTimeout(function(){t.$element.off(e.support.transition.end),t.hideModal()},500);this.$element.one(e.support.transition.end,function(){clearTimeout(n),t.hideModal()})},t.prototype.hideModal=function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden.bs.modal")})},t.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},t.prototype.backdrop=function(t){var n=this,r=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var i=e.support.transition&&r;this.$backdrop=e('<div class="modal-backdrop '+r+'" />').appendTo(document.body),this.$backdrop.click(this.options.backdrop=="static"?e.proxy(this.$element[0].focus,this.$element[0]):e.proxy(this.hide,this)),i&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in");if(!t)return;i?this.$backdrop.one(e.support.transition.end,t):t()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),e.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(e.support.transition.end,t):t()):t&&t()};var n=e.fn.modal;e.fn.modal=function(n){return this.each(function(){var r=e(this),i=r.data("bs.modal"),s=e.extend({},t.DEFAULTS,r.data(),typeof n=="object"&&n);i||r.data("bs.modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(t){var n=e(this),r=n.attr("href"),i=e(n.attr("data-target")||r&&r.replace(/.*(?=#[^\s]+$)/,"")),s=i.data("modal")?"toggle":e.extend({remote:!/#/.test(r)&&r},i.data(),n.data());t.preventDefault(),i.modal(s).one("hide",function(){n.focus()})});var r=e(document.body).on("bs.modal.shown",".modal",function(){r.addClass("modal-open")}).on("bs.modal.hidden",".modal",function(){r.removeClass("modal-open")})}(window.jQuery),+function(e){"use strict";var t=function(e,t){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",e,t)};t.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},t.prototype.init=function(t,n,r){this.enabled=!0,this.type=t,this.$element=e(n),this.options=this.getOptions(r);var i=this.options.trigger.split(" ");for(var s=i.length;s--;){var o=i[s];if(o=="click")this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this));else if(o!="manual"){var u=o=="hover"?"mouseenter":"focus",a=o=="hover"?"mouseleave":"blur";this.$element.on(u+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(a+"."+this.type,this.options.selector,e.proxy(this.leave,this))}}this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.getOptions=function(t){return t=e.extend({},this.getDefaults(),this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},t.prototype.enter=function(t){var n=this.getDefaults(),r={};this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)});var i=t instanceof this.constructor?t:e(t.currentTarget)[this.type](r).data("bs."+this.type);if(!i.options.delay||!i.options.delay.show)return i.show();clearTimeout(this.timeout),i.hoverState="in",this.timeout=setTimeout(function(){i.hoverState=="in"&&i.show()},i.options.delay.show)},t.prototype.leave=function(t){var n=t instanceof this.constructor?t:e(t.currentTarget)[this.type](this._options).data("bs."+this.type);clearTimeout(this.timeout);if(!n.options.delay||!n.options.delay.hide)return n.hide();n.hoverState="out",this.timeout=setTimeout(function(){n.hoverState=="out"&&n.hide()},n.options.delay.hide)},t.prototype.show=function(){var t=e.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(t);if(t.isDefaultPrevented())return;var n=this.tip();this.setContent(),this.options.animation&&n.addClass("fade");var r=typeof this.options.placement=="function"?this.options.placement.call(this,n[0],this.$element[0]):this.options.placement;n.detach().css({top:0,left:0,display:"block"}),this.options.container?n.appendTo(this.options.container):n.insertAfter(this.$element);var i,s=this.getPosition(),o=n[0].offsetWidth,u=n[0].offsetHeight;switch(r){case"bottom":i={top:s.top+s.height,left:s.left+s.width/2-o/2};break;case"top":i={top:s.top-u,left:s.left+s.width/2-o/2};break;case"left":i={top:s.top+s.height/2-u/2,left:s.left-o};break;case"right":i={top:s.top+s.height/2-u/2,left:s.left+s.width}}this.applyPlacement(i,r),this.$element.trigger("shown.bs."+this.type)}},t.prototype.applyPlacement=function(e,t){var n,r=this.tip(),i=r[0].offsetWidth,s=r[0].offsetHeight;r.offset(e).addClass(t).addClass("in");var o=r[0].offsetWidth,u=r[0].offsetHeight;t=="top"&&u!=s&&(n=!0,e.top=e.top+s-u);if(t=="bottom"||t=="top"){var a=0;e.left<0&&(a=e.left*-2,e.left=0,r.offset(e),o=r[0].offsetWidth,u=r[0].offsetHeight),this.replaceArrow(a-i+o,o,"left")}else this.replaceArrow(u-s,u,"top");n&&r.offset(e)},t.prototype.replaceArrow=function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle();e.find(".tooltip-inner")[this.options.html?"html":"text"](t),e.removeClass("fade in top bottom left right")},t.prototype.hide=function(){function i(){var t=setTimeout(function(){n.off(e.support.transition.end).detach()},500);n.one(e.support.transition.end,function(){clearTimeout(t),n.detach()})}var t=this,n=this.tip(),r=e.Event("hide.bs."+this.type);this.$element.trigger(r);if(r.isDefaultPrevented())return;return n.removeClass("in"),e.support.transition&&this.$tip.hasClass("fade")?i():n.detach(),this.$element.trigger("hidden.bs."+this.type),this},t.prototype.fixTitle=function(){var e=this.$element;(e.attr("title")||typeof e.attr("data-original-title")!="string")&&e.attr("data-original-title",e.attr("title")||"").attr("title","")},t.prototype.hasContent=function(){return this.getTitle()},t.prototype.getPosition=function(){var t=this.$element[0];return e.extend({},typeof t.getBoundingClientRect=="function"?t.getBoundingClientRect():{width:t.offsetWidth,height:t.offsetHeight},this.$element.offset())},t.prototype.getTitle=function(){var e,t=this.$element,n=this.options;return e=t.attr("data-original-title")||(typeof n.title=="function"?n.title.call(t[0]):n.title),e},t.prototype.tip=function(){return this.$tip=this.$tip||e(this.options.template)},t.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},t.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},t.prototype.enable=function(){this.enabled=!0},t.prototype.disable=function(){this.enabled=!1},t.prototype.toggleEnabled=function(){this.enabled=!this.enabled},t.prototype.toggle=function(t){var n=t?e(t.currentTarget)[this.type](this._options).data("bs."+this.type):this;n.tip().hasClass("in")?n.leave(n):n.enter(n)},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tooltip"),s=typeof n=="object"&&n;i||r.data("bs.tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.noConflict=function(){return e.fn.tooltip=n,this}}(window.jQuery),+function(e){"use strict";var t=function(e,t){this.init("popover",e,t)};t.DEFAULTS=e.extend({},e.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),t.prototype=e.extend({},e.fn.tooltip.Constructor.prototype),t.prototype.constructor=t,t.prototype.getDefaults=function(){return t.DEFAULTS},t.prototype.setContent=function(){var e=this.tip(),t=this.getTitle(),n=this.getContent();e.find(".popover-title")[this.options.html?"html":"text"](t),e.find(".popover-content")[this.options.html?"html":"text"](n),e.removeClass("fade top bottom left right in"),e.find(".popover-title:empty").hide()},t.prototype.hasContent=function(){return this.getTitle()||this.getContent()},t.prototype.getContent=function(){var e=typeof this.options.content=="function"?this.options.content.call(this.$element[0]):this.options.content;return e||this.$element.attr("data-content")},t.prototype.tip=function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},t.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData(this.type)};var n=e.fn.popover;e.fn.popover=function(n){return this.each(function(){var r=e(this),i=r.data("bs.popover"),s=typeof n=="object"&&n;i||r.data("bs.popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),+function(e){"use strict";function t(n,r){var i,s=e.proxy(this.process,this),o=e(n).is("body")?e(window):e(n);this.$body=e("body"),this.$scrollElement=o.on("scroll.bs.scroll-spy.data-api",s),this.options=e.extend({},t.DEFAULTS,r),this.selector=(this.options.target||(i=e(n).attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=e([]),this.targets=e([]),this.activeTarget=null,this.refresh(),this.process()}t.DEFAULTS={offset:10},t.prototype.refresh=function(){this.offsets=e([]),this.targets=e([]);var t=this,n=this.$body.find(this.selector).map(function(){var n=e(this),r=n.data("target")||n.attr("href"),i=/^#\w/.test(r)&&e(r);return i&&i.length&&[[i.position().top+(!e.isWindow(t.$scrollElement.get(0))&&t.$scrollElement.scrollTop()),r]]||null}).sort(function(e,t){return e[0]-t[0]}).each(function(){t.offsets.push(this[0]),t.targets.push(this[1])})},t.prototype.process=function(){var e=this.$scrollElement.scrollTop()+this.options.offset,t=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,n=t-this.$scrollElement.height(),r=this.offsets,i=this.targets,s=this.activeTarget,o;if(e>=n)return s!=(o=i.last()[0])&&this.activate(o);for(o=r.length;o--;)s!=i[o]&&e>=r[o]&&(!r[o+1]||e<=r[o+1])&&this.activate(i[o])},t.prototype.activate=function(t){this.activeTarget=t,e(this.selector).parents(".active").removeClass("active");var n=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',r=e(n).parents("li").addClass("active");r.parent(".dropdown-menu").length&&(r=r.closest("li.dropdown").addClass("active")),r.trigger("activate")};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("bs.scrollspy"),s=typeof n=="object"&&n;i||r.data("bs.scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.noConflict=function(){return e.fn.scrollspy=n,this},e(window).on("load",function(){e('[data-spy="scroll"]').each(function(){var t=e(this);t.scrollspy(t.data())})})}(window.jQuery),+function(e){"use strict";var t=function(t){this.element=e(t)};t.prototype.show=function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target");r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;var i=n.find(".active:last a")[0],s=e.Event("show.bs.tab",{relatedTarget:i});t.trigger(s);if(s.isDefaultPrevented())return;var o=e(r);this.activate(t.parent("li"),n),this.activate(o,o.parent(),function(){t.trigger({type:"shown.bs.tab",relatedTarget:i})})},t.prototype.activate=function(t,n,r){function o(){i.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),t.addClass("active"),s?(t[0].offsetWidth,t.addClass("in")):t.removeClass("fade"),t.parent(".dropdown-menu")&&t.closest("li.dropdown").addClass("active"),r&&r()}var i=n.find("> .active"),s=r&&e.support.transition&&i.hasClass("fade");s?i.one(e.support.transition.end,o):o(),i.removeClass("in")};var n=e.fn.tab;e.fn.tab=function(n){return this.each(function(){var r=e(this),i=r.data("bs.tab");i||r.data("bs.tab",i=new t(this)),typeof n=="string"&&i[n]()})},e.fn.tab.Constructor=t,e.fn.tab.noConflict=function(){return e.fn.tab=n,this},e(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(t){t.preventDefault(),e(this).tab("show")})}(window.jQuery),+function(e){"use strict";var t=function(n,r){this.options=e.extend({},t.DEFAULTS,r),this.$window=e(window).on("scroll.bs.affix.data-api",e.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",e.proxy(this.checkPositionWithEventLoop,this)),this.$element=e(n),this.affixed=this.unpin=null,this.checkPosition()};t.DEFAULTS={offset:0},t.prototype.checkPositionWithEventLoop=function(){setTimeout(e.proxy(this.checkPosition,this),1)},t.prototype.checkPosition=function(){if(!this.$element.is(":visible"))return;var t=e(document).height(),n=this.$window.scrollTop(),r=this.$element.offset(),i=this.options.offset,s=i.top,o=i.bottom,u="affix affix-top affix-bottom";typeof i!="object"&&(o=s=i),typeof s=="function"&&(s=i.top()),typeof o=="function"&&(o=i.bottom());var a=this.unpin!=null&&n+this.unpin<=r.top?!1:o!=null&&r.top+this.$element.height()>=t-o?"bottom":s!=null&&n<=s?"top":!1;if(this.affixed===a)return;this.affixed=a,this.unpin=a=="bottom"?r.top-n:null,this.$element.removeClass(u).addClass("affix"+(a?"-"+a:""))};var n=e.fn.affix;e.fn.affix=function(n){return this.each(function(){var r=e(this),i=r.data("bs.affix"),s=typeof n=="object"&&n;i||r.data("bs.affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.noConflict=function(){return e.fn.affix=n,this},e(window).on("load",function(){e('[data-spy="affix"]').each(function(){var t=e(this),n=t.data();n.offset=n.offset||{},n.offsetBottom&&(n.offset.bottom=n.offsetBottom),n.offsetTop&&(n.offset.top=n.offsetTop),t.affix(n)})})}(window.jQuery); \ No newline at end of file ++function(t){"use strict";function e(){var t=document.createElement("bootstrap"),e={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var i in e)if(void 0!==t.style[i])return{end:e[i]}}t(function(){t.support.transition=e()})}(window.jQuery),+function(t){"use strict";var e='[data-dismiss="alert"]',i=function(i){t(i).on("click",e,this.close)};i.prototype.close=function(e){function i(){s.trigger("closed.bs.alert").remove()}var o=t(this),n=o.attr("data-target");n||(n=o.attr("href"),n=n&&n.replace(/.*(?=#[^\s]*$)/,""));var s=t(n);e&&e.preventDefault(),s.length||(s=o.hasClass("alert")?o:o.parent()),s.trigger(e=t.Event("close.bs.alert")),e.isDefaultPrevented()||(s.removeClass("in"),t.support.transition&&s.hasClass("fade")?s.on(t.support.transition.end,i):i())};var o=t.fn.alert;t.fn.alert=function(e){return this.each(function(){var o=t(this),n=o.data("bs.alert");n||o.data("bs.alert",n=new i(this)),"string"==typeof e&&n[e].call(o)})},t.fn.alert.Constructor=i,t.fn.alert.noConflict=function(){return t.fn.alert=o,this},t(document).on("click.bs.alert.data-api",e,i.prototype.close)}(window.jQuery),+function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o)};e.DEFAULTS={loadingText:"loading..."},e.prototype.setState=function(t){var e="disabled",i=this.$element,o=i.is("input")?"val":"html",n=i.data();t+="Text",n.resetText||i.data("resetText",i[o]()),i[o](n[t]||this.options[t]),setTimeout(function(){"loadingText"==t?i.addClass(e).attr(e,e):i.removeClass(e).removeAttr(e)},0)},e.prototype.toggle=function(){var t=this.$element.closest('[data-toggle="buttons-radio"]');t&&t.find(".active").removeClass("active"),this.$element.toggleClass("active")};var i=t.fn.button;t.fn.button=function(i){return this.each(function(){var o=t(this),n=o.data("button"),s="object"==typeof i&&i;n||o.data("bs.button",n=new e(this,s)),"toggle"==i?n.toggle():i&&n.setState(i)})},t.fn.button.Constructor=e,t.fn.button.noConflict=function(){return t.fn.button=i,this},t(document).on("click.bs.button.data-api","[data-toggle^=button]",function(e){var i=t(e.target);i.hasClass("btn")||(i=i.closest(".btn")),i.button("toggle")})}(window.jQuery),+function(t){"use strict";var e=function(e,i){this.$element=t(e),this.$indicators=this.$element.find(".carousel-indicators"),this.options=i,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",t.proxy(this.pause,this)).on("mouseleave",t.proxy(this.cycle,this))};e.DEFAULTS={interval:5e3,pause:"hover"},e.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},e.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},e.prototype.to=function(e){var i=this,o=this.getActiveIndex();return e>this.$items.length-1||0>e?void 0:this.sliding?this.$element.one("slid",function(){i.to(e)}):o==e?this.pause().cycle():this.slide(e>o?"next":"prev",t(this.$items[e]))},e.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(".next, .prev").length&&t.support.transition.end&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},e.prototype.next=function(){return this.sliding?void 0:this.slide("next")},e.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},e.prototype.slide=function(e,i){var o=this.$element.find(".item.active"),n=i||o[e](),s=this.interval,a="next"==e?"left":"right",r="next"==e?"first":"last",l=this;this.sliding=!0,s&&this.pause(),n=n.length?n:this.$element.find(".item")[r]();var h=t.Event("slide.bs.carousel",{relatedTarget:n[0],direction:a});if(!n.hasClass("active")){if(this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid",function(){var e=t(l.$indicators.children()[l.getActiveIndex()]);e&&e.addClass("active")})),t.support.transition&&this.$element.hasClass("slide")){if(this.$element.trigger(h),h.isDefaultPrevented())return;n.addClass(e),n[0].offsetWidth,o.addClass(a),n.addClass(a),this.$element.one(t.support.transition.end,function(){n.removeClass([e,a].join(" ")).addClass("active"),o.removeClass(["active",a].join(" ")),l.sliding=!1,setTimeout(function(){l.$element.trigger("slid")},0)})}else{if(this.$element.trigger(h),h.isDefaultPrevented())return;o.removeClass("active"),n.addClass("active"),this.sliding=!1,this.$element.trigger("slid")}return s&&this.cycle(),this}};var i=t.fn.carousel;t.fn.carousel=function(i){return this.each(function(){var o=t(this),n=o.data("bs.carousel"),s=t.extend({},e.DEFAULTS,"object"==typeof i&&i),a="string"==typeof i?i:s.slide;n||o.data("bs.carousel",n=new e(this,s)),"number"==typeof i?n.to(i):a?n[a]():s.interval&&n.pause().cycle()})},t.fn.carousel.Constructor=e,t.fn.carousel.noConflict=function(){return t.fn.carousel=i,this},t(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(e){var i,o,n=t(this),s=t(n.attr("data-target")||(i=n.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,"")),a=t.extend({},s.data(),n.data());s.carousel(a),(o=n.attr("data-slide-to"))&&s.data("bs.carousel").pause().to(o).cycle(),e.preventDefault()}),t(window).on("load",function(){t('[data-ride="carousel"]').each(function(){var e=t(this);e.carousel(e.data())})})}(window.jQuery),+function(t){"use strict";var e=function(i,o){this.$element=t(i),this.options=t.extend({},e.DEFAULTS,o),this.transitioning=null,this.options.parent&&(this.$parent=t(this.options.parent)),this.options.toggle&&this.toggle()};e.DEFAULTS={toggle:!0},e.prototype.dimension=function(){var t=this.$element.hasClass("width");return t?"width":"height"},e.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var e=this.dimension(),i=t.camelCase(["scroll",e].join("-")),o=this.$parent&&this.$parent.find("> .accordion-group > .in");if(o&&o.length){var n=o.data("collapse");if(n&&n.transitioning)return;o.collapse("hide"),n||o.data("collapse",null)}this.$element[e](0),this.transition("addClass",t.Event("show.bs.collapse"),"shown.bs.collapse"),t.support.transition&&this.$element[e](this.$element[0][i])}},e.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var e=this.dimension();this.reset(this.$element[e]()),this.transition("removeClass",t.Event("hide.bs.collapse"),"hidden"),this.$element[e](0)}},e.prototype.reset=function(t){var e=this.dimension();return this.$element.removeClass("collapse")[e](t||"auto")[0].offsetWidth,this.$element[null!==t?"addClass":"removeClass"]("collapse"),this},e.prototype.transition=function(e,i,o){var n=this,s=function(){"show"==i.type&&n.reset(),n.transitioning=0,n.$element.trigger(o)};this.$element.trigger(i),i.isDefaultPrevented()||(this.transitioning=1,this.$element[e]("in"),t.support.transition&&this.$element.hasClass("collapse")?this.$element.one(t.support.transition.end,s):s())},e.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var i=t.fn.collapse;t.fn.collapse=function(i){return this.each(function(){var o=t(this),n=o.data("collapse"),s=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i);n||o.data("collapse",n=new e(this,s)),"string"==typeof i&&n[i]()})},t.fn.collapse.Constructor=e,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(e){var i,o=t(this),n=o.attr("data-target")||e.preventDefault()||(i=o.attr("href"))&&i.replace(/.*(?=#[^\s]+$)/,""),s=t(n).data("collapse")?"toggle":o.data();o[t(n).hasClass("in")?"addClass":"removeClass"]("collapsed"),t(n).collapse(s)})}(window.jQuery),+function(t){"use strict";function e(){t(o).remove(),t(n).each(function(e){var o=i(t(this));o.hasClass("open")&&(o.trigger(e=t.Event("hide.bs.dropdown")),e.isDefaultPrevented()||o.removeClass("open").trigger("hidden.bs.dropdown"))})}function i(e){var i=e.attr("data-target");i||(i=e.attr("href"),i=i&&/#/.test(i)&&i.replace(/.*(?=#[^\s]*$)/,""));var o=i&&t(i);return o&&o.length?o:e.parent()}var o=".dropdown-backdrop",n="[data-toggle=dropdown]",s=function(e){t(e).on("click.bs.dropdown",this.toggle)};s.prototype.toggle=function(o){var n=t(this);if(!n.is(".disabled, :disabled")){var s=i(n),a=s.hasClass("open");if(e(),!a){if("ontouchstart"in document.documentElement&&t('<div class="dropdown-backdrop"/>').insertBefore(t(this)).on("click",e),s.trigger(o=t.Event("show.bs.dropdown")),o.isDefaultPrevented())return;s.toggleClass("open").trigger("shown.bs.dropdown")}return n.focus(),!1}},s.prototype.keydown=function(e){if(/(38|40|27)/.test(e.keyCode)){var o=t(this);if(e.preventDefault(),e.stopPropagation(),!o.is(".disabled, :disabled")){var s=i(o),a=s.hasClass("open");if(!a||a&&27==e.keyCode)return 27==e.which&&s.find(n).focus(),o.click();var r=t("[role=menu] li:not(.divider):visible a",s);if(r.length){var l=r.index(r.filter(":focus"));38==e.keyCode&&l>0&&l--,40==e.keyCode&&r.length-1>l&&l++,~l||(l=0),r.eq(l).focus()}}}};var a=t.fn.dropdown;t.fn.dropdown=function(e){return this.each(function(){var i=t(this),o=i.data("dropdown");o||i.data("dropdown",o=new s(this)),"string"==typeof e&&o[e].call(i)})},t.fn.dropdown.Constructor=s,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=a,this},t(document).on("click.bs.dropdown.data-api",e).on("click.bs.dropdown.data-api",".dropdown form",function(t){t.stopPropagation()}).on("click.bs.dropdown.data-api",n,s.prototype.toggle).on("keydown.bs.dropdown.data-api",n+", [role=menu]",s.prototype.keydown)}(window.jQuery),+function(t){"use strict";var e=function(e,i){this.options=i,this.$element=t(e).delegate('[data-dismiss="modal"]',"click.dismiss.modal",t.proxy(this.hide,this)),this.$backdrop=this.isShown=null,this.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};e.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},e.prototype.toggle=function(){return this[this.isShown?"hide":"show"]()},e.prototype.show=function(){var e=this,i=t.Event("show.bs.modal");this.$element.trigger(i),this.isShown||i.isDefaultPrevented()||(this.isShown=!0,this.escape(),this.backdrop(function(){var i=t.support.transition&&e.$element.hasClass("fade");e.$element.parent().length||e.$element.appendTo(document.body),e.$element.show(),i&&e.$element[0].offsetWidth,e.$element.addClass("in").attr("aria-hidden",!1),e.enforceFocus(),i?e.$element.one(t.support.transition.end,function(){e.$element.focus().trigger("shown.bs.modal")}):e.$element.focus().trigger("shown.bs.modal")}))},e.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event("hide.bs.modal"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),t(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),t.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal())},e.prototype.enforceFocus=function(){t(document).off("focusin.bs.modal").on("focusin.bs.modal",t.proxy(function(t){this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.focus()},this))},e.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},e.prototype.hideWithTransition=function(){var e=this,i=setTimeout(function(){e.$element.off(t.support.transition.end),e.hideModal()},500);this.$element.one(t.support.transition.end,function(){clearTimeout(i),e.hideModal()})},e.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.removeBackdrop(),t.$element.trigger("hidden.bs.modal")})},e.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},e.prototype.backdrop=function(e){var i=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&i;if(this.$backdrop=t('<div class="modal-backdrop '+i+'" />').appendTo(document.body),this.$backdrop.click("static"==this.options.backdrop?t.proxy(this.$element[0].focus,this.$element[0]):t.proxy(this.hide,this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!e)return;o?this.$backdrop.one(t.support.transition.end,e):e()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),t.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(t.support.transition.end,e):e()):e&&e()};var i=t.fn.modal;t.fn.modal=function(i){return this.each(function(){var o=t(this),n=o.data("bs.modal"),s=t.extend({},e.DEFAULTS,o.data(),"object"==typeof i&&i);n||o.data("bs.modal",n=new e(this,s)),"string"==typeof i?n[i]():s.show&&n.show()})},t.fn.modal.Constructor=e,t.fn.modal.noConflict=function(){return t.fn.modal=i,this},t(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(e){var i=t(this),o=i.attr("href"),n=t(i.attr("data-target")||o&&o.replace(/.*(?=#[^\s]+$)/,"")),s=n.data("modal")?"toggle":t.extend({remote:!/#/.test(o)&&o},n.data(),i.data());e.preventDefault(),n.modal(s).one("hide",function(){i.focus()})});var o=t(document.body).on("bs.modal.shown",".modal",function(){o.addClass("modal-open")}).on("bs.modal.hidden",".modal",function(){o.removeClass("modal-open")})}(window.jQuery),+function(t){"use strict";var e=function(t,e){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",t,e)};e.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},e.prototype.init=function(e,i,o){this.enabled=!0,this.type=e,this.$element=t(i),this.options=this.getOptions(o);for(var n=this.options.trigger.split(" "),s=n.length;s--;){var a=n[s];if("click"==a)this.$element.on("click."+this.type,this.options.selector,t.proxy(this.toggle,this));else if("manual"!=a){var r="hover"==a?"mouseenter":"focus",l="hover"==a?"mouseleave":"blur";this.$element.on(r+"."+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(l+"."+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&"number"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},e.prototype.enter=function(e){var i=this.getDefaults(),o={};this._options&&t.each(this._options,function(t,e){i[t]!=e&&(o[t]=e)});var n=e instanceof this.constructor?e:t(e.currentTarget)[this.type](o).data("bs."+this.type);return n.options.delay&&n.options.delay.show?(clearTimeout(this.timeout),n.hoverState="in",this.timeout=setTimeout(function(){"in"==n.hoverState&&n.show()},n.options.delay.show),void 0):n.show()},e.prototype.leave=function(e){var i=e instanceof this.constructor?e:t(e.currentTarget)[this.type](this._options).data("bs."+this.type);return clearTimeout(this.timeout),i.options.delay&&i.options.delay.hide?(i.hoverState="out",this.timeout=setTimeout(function(){"out"==i.hoverState&&i.hide()},i.options.delay.hide),void 0):i.hide()},e.prototype.show=function(){var e=t.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(e),e.isDefaultPrevented())return;var i=this.tip();this.setContent(),this.options.animation&&i.addClass("fade");var o="function"==typeof this.options.placement?this.options.placement.call(this,i[0],this.$element[0]):this.options.placement;i.detach().css({top:0,left:0,display:"block"}),this.options.container?i.appendTo(this.options.container):i.insertAfter(this.$element);var n,s=this.getPosition(),a=i[0].offsetWidth,r=i[0].offsetHeight;switch(o){case"bottom":n={top:s.top+s.height,left:s.left+s.width/2-a/2};break;case"top":n={top:s.top-r,left:s.left+s.width/2-a/2};break;case"left":n={top:s.top+s.height/2-r/2,left:s.left-a};break;case"right":n={top:s.top+s.height/2-r/2,left:s.left+s.width}}this.applyPlacement(n,o),this.$element.trigger("shown.bs."+this.type)}},e.prototype.applyPlacement=function(t,e){var i,o=this.tip(),n=o[0].offsetWidth,s=o[0].offsetHeight;o.offset(t).addClass(e).addClass("in");var a=o[0].offsetWidth,r=o[0].offsetHeight;if("top"==e&&r!=s&&(i=!0,t.top=t.top+s-r),"bottom"==e||"top"==e){var l=0;0>t.left&&(l=-2*t.left,t.left=0,o.offset(t),a=o[0].offsetWidth,r=o[0].offsetHeight),this.replaceArrow(l-n+a,a,"left")}else this.replaceArrow(r-s,r,"top");i&&o.offset(t)},e.prototype.replaceArrow=function(t,e,i){this.arrow().css(i,t?50*(1-t/e)+"%":"")},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(".tooltip-inner")[this.options.html?"html":"text"](e),t.removeClass("fade in top bottom left right")},e.prototype.hide=function(){function e(){var e=setTimeout(function(){i.off(t.support.transition.end).detach()},500);i.one(t.support.transition.end,function(){clearTimeout(e),i.detach()})}var i=this.tip(),o=t.Event("hide.bs."+this.type);return this.$element.trigger(o),o.isDefaultPrevented()?void 0:(i.removeClass("in"),t.support.transition&&this.$tip.hasClass("fade")?e():i.detach(),this.$element.trigger("hidden.bs."+this.type),this)},e.prototype.fixTitle=function(){var t=this.$element;(t.attr("title")||"string"!=typeof t.attr("data-original-title"))&&t.attr("data-original-title",t.attr("title")||"").attr("title","")},e.prototype.hasContent=function(){return this.getTitle()},e.prototype.getPosition=function(){var e=this.$element[0];return t.extend({},"function"==typeof e.getBoundingClientRect?e.getBoundingClientRect():{width:e.offsetWidth,height:e.offsetHeight},this.$element.offset())},e.prototype.getTitle=function(){var t,e=this.$element,i=this.options;return t=e.attr("data-original-title")||("function"==typeof i.title?i.title.call(e[0]):i.title)},e.prototype.tip=function(){return this.$tip=this.$tip||t(this.options.template)},e.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},e.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},e.prototype.enable=function(){this.enabled=!0},e.prototype.disable=function(){this.enabled=!1},e.prototype.toggleEnabled=function(){this.enabled=!this.enabled},e.prototype.toggle=function(e){var i=e?t(e.currentTarget)[this.type](this._options).data("bs."+this.type):this;i.tip().hasClass("in")?i.leave(i):i.enter(i)},e.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var i=t.fn.tooltip;t.fn.tooltip=function(i){return this.each(function(){var o=t(this),n=o.data("bs.tooltip"),s="object"==typeof i&&i;n||o.data("bs.tooltip",n=new e(this,s)),"string"==typeof i&&n[i]()})},t.fn.tooltip.Constructor=e,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=i,this}}(window.jQuery),+function(t){"use strict";var e=function(t,e){this.init("popover",t,e)};e.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),e.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),e.prototype.constructor=e,e.prototype.getDefaults=function(){return e.DEFAULTS},e.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),i=this.getContent();t.find(".popover-title")[this.options.html?"html":"text"](e),t.find(".popover-content")[this.options.html?"html":"text"](i),t.removeClass("fade top bottom left right in"),t.find(".popover-title:empty").hide()},e.prototype.hasContent=function(){return this.getTitle()||this.getContent()},e.prototype.getContent=function(){var t="function"==typeof this.options.content?this.options.content.call(this.$element[0]):this.options.content;return t||this.$element.attr("data-content")},e.prototype.tip=function(){return this.$tip||(this.$tip=t(this.options.template)),this.$tip},e.prototype.destroy=function(){this.hide().$element.off("."+this.type).removeData(this.type)};var i=t.fn.popover;t.fn.popover=function(i){return this.each(function(){var o=t(this),n=o.data("bs.popover"),s="object"==typeof i&&i;n||o.data("bs.popover",n=new e(this,s)),"string"==typeof i&&n[i]()})},t.fn.popover.Constructor=e,t.fn.popover.noConflict=function(){return t.fn.popover=i,this}}(window.jQuery),+function(t){"use strict";function e(i,o){var n,s=t.proxy(this.process,this),a=t(i).is("body")?t(window):t(i);this.$body=t("body"),this.$scrollElement=a.on("scroll.bs.scroll-spy.data-api",s),this.options=t.extend({},e.DEFAULTS,o),this.selector=(this.options.target||(n=t(i).attr("href"))&&n.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=t([]),this.targets=t([]),this.activeTarget=null,this.refresh(),this.process()}e.DEFAULTS={offset:10},e.prototype.refresh=function(){this.offsets=t([]),this.targets=t([]);var e=this;this.$body.find(this.selector).map(function(){var i=t(this),o=i.data("target")||i.attr("href"),n=/^#\w/.test(o)&&t(o);return n&&n.length&&[[n.position().top+(!t.isWindow(e.$scrollElement.get(0))&&e.$scrollElement.scrollTop()),o]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,i=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,o=i-this.$scrollElement.height(),n=this.offsets,s=this.targets,a=this.activeTarget;if(e>=o)return a!=(t=s.last()[0])&&this.activate(t);for(t=n.length;t--;)a!=s[t]&&e>=n[t]&&(!n[t+1]||n[t+1]>=e)&&this.activate(s[t])},e.prototype.activate=function(e){this.activeTarget=e,t(this.selector).parents(".active").removeClass("active");var i=this.selector+'[data-target="'+e+'"],'+this.selector+'[href="'+e+'"]',o=t(i).parents("li").addClass("active");o.parent(".dropdown-menu").length&&(o=o.closest("li.dropdown").addClass("active")),o.trigger("activate")};var i=t.fn.scrollspy;t.fn.scrollspy=function(i){return this.each(function(){var o=t(this),n=o.data("bs.scrollspy"),s="object"==typeof i&&i;n||o.data("bs.scrollspy",n=new e(this,s)),"string"==typeof i&&n[i]()})},t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=i,this},t(window).on("load",function(){t('[data-spy="scroll"]').each(function(){var e=t(this);e.scrollspy(e.data())})})}(window.jQuery),+function(t){"use strict";var e=function(e){this.element=t(e)};e.prototype.show=function(){var e=this.element,i=e.closest("ul:not(.dropdown-menu)"),o=e.attr("data-target");if(o||(o=e.attr("href"),o=o&&o.replace(/.*(?=#[^\s]*$)/,"")),!e.parent("li").hasClass("active")){var n=i.find(".active:last a")[0],s=t.Event("show.bs.tab",{relatedTarget:n});if(e.trigger(s),!s.isDefaultPrevented()){var a=t(o);this.activate(e.parent("li"),i),this.activate(a,a.parent(),function(){e.trigger({type:"shown.bs.tab",relatedTarget:n})})}}},e.prototype.activate=function(e,i,o){function n(){s.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),e.addClass("active"),a?(e[0].offsetWidth,e.addClass("in")):e.removeClass("fade"),e.parent(".dropdown-menu")&&e.closest("li.dropdown").addClass("active"),o&&o()}var s=i.find("> .active"),a=o&&t.support.transition&&s.hasClass("fade");a?s.one(t.support.transition.end,n):n(),s.removeClass("in")};var i=t.fn.tab;t.fn.tab=function(i){return this.each(function(){var o=t(this),n=o.data("bs.tab");n||o.data("bs.tab",n=new e(this)),"string"==typeof i&&n[i]()})},t.fn.tab.Constructor=e,t.fn.tab.noConflict=function(){return t.fn.tab=i,this},t(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(e){e.preventDefault(),t(this).tab("show")})}(window.jQuery),+function(t){"use strict";var e=function(i,o){this.options=t.extend({},e.DEFAULTS,o),this.$window=t(window).on("scroll.bs.affix.data-api",t.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(i),this.affixed=this.unpin=null,this.checkPosition()};e.DEFAULTS={offset:0},e.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},e.prototype.checkPosition=function(){if(this.$element.is(":visible")){var e=t(document).height(),i=this.$window.scrollTop(),o=this.$element.offset(),n=this.options.offset,s=n.top,a=n.bottom,r="affix affix-top affix-bottom";"object"!=typeof n&&(a=s=n),"function"==typeof s&&(s=n.top()),"function"==typeof a&&(a=n.bottom());var l=null!=this.unpin&&i+this.unpin<=o.top?!1:null!=a&&o.top+this.$element.height()>=e-a?"bottom":null!=s&&s>=i?"top":!1;this.affixed!==l&&(this.affixed=l,this.unpin="bottom"==l?o.top-i:null,this.$element.removeClass(r).addClass("affix"+(l?"-"+l:"")))}};var i=t.fn.affix;t.fn.affix=function(i){return this.each(function(){var o=t(this),n=o.data("bs.affix"),s="object"==typeof i&&i;n||o.data("bs.affix",n=new e(this,s)),"string"==typeof i&&n[i]()})},t.fn.affix.Constructor=e,t.fn.affix.noConflict=function(){return t.fn.affix=i,this},t(window).on("load",function(){t('[data-spy="affix"]').each(function(){var e=t(this),i=e.data();i.offset=i.offset||{},i.offsetBottom&&(i.offset.bottom=i.offsetBottom),i.offsetTop&&(i.offset.top=i.offsetTop),e.affix(i)})})}(window.jQuery); \ No newline at end of file diff --git a/docs/getting-started.html b/getting-started.html similarity index 70% rename from docs/getting-started.html rename to getting-started.html index 56e6cbc323defe3c9abca39321edeb50c68a2b88..b8775ad590d86d2e61ff8ece3f2a7a3690c4c525 100644 --- a/docs/getting-started.html +++ b/getting-started.html @@ -49,7 +49,7 @@ lead: "An overview of Bootstrap, how to download and use, basic templates and ex <script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> {% endhighlight %} - <div class="bs-callout" id="callout-less-compilation"> + <div class="bs-callout bs-callout-warning" id="callout-less-compilation"> <h4>LESS compilation</h4> <p>If you download the original files, you need to compile Bootstrap's LESS files into usable CSS. To do that, Bootstrap only officially supports <a href="http://twitter.github.io/recess/">Recess</a>, Twitter's CSS hinter built on top of <a href="http://lesscss.org">less.js</a>.</p> </div> @@ -75,17 +75,19 @@ bootstrap/ {% endhighlight %} <p>This is the most basic form of Bootstrap: compiled files for quick drop-in usage in nearly any web project. We provide compiled CSS and JS (<code>bootstrap.*</code>), as well as compiled and minified CSS and JS (<code>bootstrap.min.*</code>). The image files are compressed using <a href="http://imageoptim.com/">ImageOptim</a>, a Mac app for compressing PNGs.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>jQuery required</h4> <p>Please note that <strong>all JavaScript plugins require jQuery</strong> to be included, as shown in the <a href="#examples">starter template</a>.</p> </div> </div> - <!-- Examples + + + <!-- Template ================================================== --> - <div class="bs-docs-section" id="examples"> + <div class="bs-docs-section" id="template"> <div class="page-header"> - <h1>Templates and examples</h1> + <h1>Basic template</h1> </div> <p class="lead">Make use of a super basic HTML template, or dive into a few examples we've started for you. We encourage folks to iterate on these examples and not simply use them as an end result.</p> @@ -114,102 +116,82 @@ bootstrap/ </html> {% endhighlight %} - <h3 id="examples-list">Examples</h3> - <div class="bs-examples"> - <div class="row"> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/starter-template/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-starter.png" alt=""> - </a> - <h4>Starter template</h4> - <p>A barebones HTML page with Bootstrap's CSS and JavaScript included.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/grid/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-grid.png" alt=""> - </a> - <h4>Basic grid layouts</h4> - <p>Simple grid layouts to familiarize you with using the Bootstrap grid system.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/jumbotron/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-marketing.png" alt=""> - </a> - <h4>Basic marketing site</h4> - <p>Features a jumbotron for primary message and three supporting elements.</p> - </div> + <hr> + + <h3>Looking for more example templates?</h3> + <p>Check out the new <a href="https://github.com/twbs/bootstrap-examples">Examples repository on GitHub</a>, or <a href="http://examples.getbootstrap.com">view them in your browser</a>. Included are over a dozen example templates for building with and extending Bootstrap.</p> + </div> + + + + <!-- Browser compatibility + ================================================== --> + <div class="bs-docs-section" id="browsers"> + <div class="page-header"> + <h1>Browser compatibility</h1> + </div> + <p class="lead">Bootstrap is built to work best in the latest desktop and mobile browsers, meaning older and less advanced browsers might receive a less stylized, though fully functional, version of certain components.</p> + + <h4>Supported browsers</h4> + <p>Specifically, we support the latest versions of the following:</p> + <ul> + <li>Chrome (Mac, Windows, iOS, and Android)</li> + <li>Safari (Mac and iOS only, as Windows has more or less been discontinued)</li> + <li>Firefox (Mac, Windows)</li> + <li>Internet Explorer</li> + <li>Opera (Mac, Windows)</li> + </ul> + <p><strong>Internet Explorer 8 and 9</strong> are also supported. However, please be aware that many CSS3 properties—e.g., rounded corners and shadows—are not supported by IE8. Unofficially, Bootstrap should look and behave well enough in Chromium for Linux and Internet Explorer 7, though they are not officially supported.</p> + + <h4>IE Compatibility modes</h4> + <p>Bootstrap is not supported in the old Internet Explorer compatibility modes. To be sure you're using the latest rendering mode for IE, consider including <code><meta http-equiv="X-UA-Compatible" content="IE=edge"></code> in your pages. See <a href="http://stackoverflow.com/questions/6771258/whats-the-difference-if-meta-http-equiv-x-ua-compatible-content-ie-edge">this StackOverflow question</a> for more information.</p> + </div> + + + + <!-- License FAQs + ================================================== --> + <div class="bs-docs-section" id="license-faqs"> + <div class="page-header"> + <h1>License FAQs</h1> + </div> + <p class="lead">Bootstrap is released under the Apache 2 license. Boiled down to smaller chunks, it can be described with the following conditions.</p> + + <div class="row"> + <div class="col-12 col-lg-6"> + <h4>It allows you to:</h4> + <ul> + <li>Freely download and use Twitter open source software, in whole or in part, for personal, company internal or commercial purposes</li> + <li>Use Twitter open source software in packages or distributions that you create</li> + </ul> </div> - <div class="row"> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/jumbotron-narrow/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-jumbotron-narrow.png" alt=""> - </a> - <h4>Narrow marketing</h4> - <p>Slim, lightweight marketing template for small projects or teams.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/justified-nav/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-justified-nav.png" alt=""> - </a> - <h4>Justified nav</h4> - <p>Marketing page with equal-width navigation links in a modified navbar.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/signin/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-signin.png" alt=""> - </a> - <h4>Sign in</h4> - <p>Barebones sign in form with custom, larger form controls and a flexible layout.</p> - </div> + <div class="col-12 col-lg-6"> + <h4>It forbids you to:</h4> + <ul> + <li>Redistribute any piece of Twitter open source originated software without proper attribution</li> + <li>Use any marks owned by Twitter in any way that might state or imply that Twitter endorses your distribution</li> + <li>Use any marks owned by Twitter in any way that might state or imply that you created the Twitter software in question</li> + </ul> </div> - <div class="row"> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/sticky-footer/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-sticky-footer.png" alt=""> - </a> - <h4>Sticky footer</h4> - <p>Pin a fixed-height footer to the bottom of the user's viewport.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/sticky-footer-navbar/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-sticky-footer-navbar.png" alt=""> - </a> - <h4>Sticky footer w/ navbar</h4> - <p>Add a fixed navbar to the default sticky footer template.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/carousel/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-carousel.png" alt=""> - </a> - <h4>Carousel jumbotron</h4> - <p>An interactive riff on the basic marketing site featuring a prominent carousel.</p> - </div> + </div> + <div class="row"> + <div class="col-12 col-lg-6"> + <h4>It requires you to:</h4> + <ul> + <li>Include a copy of the license in any redistribution you may make that includes Twitter software</li> + <li>Provide clear attribution to Twitter for any distributions that include Twitter open source software</li> + </ul> </div> - <div class="row"> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/navbar/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-navbar.png" alt=""> - </a> - <h4>Navbar</h4> - <p>Basic template for showcasing how the navbar works.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/navbar-static-top/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-navbar-static-top.png" alt=""> - </a> - <h4>Static top navbar</h4> - <p>Basic template for showcasing the static navbar variation.</p> - </div> - <div class="col-lg-4"> - <a class="thumbnail" href="/examples/navbar-fixed-top/" target="_blank"> - <img src="/assets/img/examples/bootstrap-example-navbar-fixed-top.png" alt=""> - </a> - <h4>Fixed top navbar</h4> - <p>Basic template for showcasing the fixed navbar variation.</p> - </div> + <div class="col-12 col-lg-6"> + <h4>It does not require you to:</h4> + <ul> + <li>Include the source of the Twitter software itself, or of any modifications you may have made to it, in any redistribution you may assemble that includes it</li> + <li>Submit changes that you make to the software back to Twitter (though such feedback is encouraged)</li> + </ul> </div> </div> - </div> + <p>The full Bootstrap license is located <a href="https://github.com/twbs/bootstrap/blob/master/README.md">in the project repository</a> for more information.</p> + </div><!-- /.bs-docs-section --> @@ -222,7 +204,7 @@ bootstrap/ <p>Once you've downloaded and included Bootstrap's CSS into your templates, you can move on to customizing the included components. To do so, create a new stylesheet (LESS, if you like, or just plain CSS) to house your customizations.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Compiled or minified?</h4> <p>Unless you plan on reading a good chunk of the compiled CSS, go with the minified. It's the same code, just compacted. Less bandwidth is good, especially in production environments.</p> </div> @@ -276,7 +258,7 @@ bootstrap/ </ul> <p>Going beyond light customizations and into visual overhauls is just as straightforward as the above custom button. For a site like <a href="http://yourkarma.com">Karma</a>, which uses Bootstrap as a CSS reset with heavy modifications, more extensive work is involved, but well worth it in the end.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Alternate customization methods</h4> <p>While not recommended for folks new to Bootstrap, you may use one of two alternate methods for customization. The first is modifying the source .less files (making upgrades super difficult), and the second is mapping source LESS code to <a href="http://ruby.bvision.com/blog/please-stop-embedding-bootstrap-classes-in-your-html">your own classes via mixins</a>. For the time being, neither options are documented here.</p> </div> diff --git a/docs/index.html b/index.html similarity index 57% rename from docs/index.html rename to index.html index ae38cb9795f6a8d848c8d1753f16da8a3d0374ca..b798f3013c9133173f4a7535892d2da5f2cde9c2 100644 --- a/docs/index.html +++ b/index.html @@ -3,13 +3,22 @@ layout: home title: Bootstrap --- +<div class="bs-old-docs"> + <div class="container"> + <strong> + <a href="/2.3.2/">Looking for Bootstrap 2.3.2 docs?</a> + </strong> + We've moved it to a new home while we push forward with Bootstrap 3. <a href="http://blog.getbootstrap.com/">Read the blog post</a> for details. + </div> +</div> + <div class="container"> <div class="bs-masthead"> - <h1>Bootstrap</h1> + <h1>Bootstrap 3</h1> <p class="lead">Sleek, intuitive, and powerful mobile-first front-end framework for faster and easier web development.</p> <p> - <a href="assets/bootstrap.zip" class="btn btn-large" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download 3.0.0']);">Download Bootstrap</a> + <a href="assets/bootstrap.zip" class="btn btn-bs btn-large" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download 3.0.0 RC1']);">Download Bootstrap 3.0.0 RC1</a> </p> {% include social-buttons.html %} @@ -19,7 +28,7 @@ title: Bootstrap <a href="http://github.com/twitter/bootstrap" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'GitHub project']);">GitHub project</a> </li> <li> - <a href="./getting-started/#examples" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Examples']);">Examples</a> + <a href="http://examples.getbootstrap.com" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Examples']);">Examples</a> </li> <li> <a href="http://glyphicons.getbootstrap.com" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Glyphicons']);">Glyphicons</a> @@ -27,7 +36,6 @@ title: Bootstrap <li> <a href="http://expo.getbootstrap.com" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Expo']);">Bootstrap Expo</a> </li> - <li>Version 3.0.0</li> </ul> </div> diff --git a/docs/javascript.html b/javascript.html similarity index 96% rename from docs/javascript.html rename to javascript.html index 91198bd197aa43b4d0da0bfdece30d31f1b2e130..b4e053056a89fd4e07b91ec4fdf2b3e8c31e7931 100644 --- a/docs/javascript.html +++ b/javascript.html @@ -14,8 +14,14 @@ lead: "Bring Bootstrap's components to life with over a dozen custom jQuery plug </div> <h3 id="js-individual-compiled">Individual or compiled</h3> - <p>Plugins can be included individually, or all at once. <strong>Do not attempt to include both.</strong> Both <strong>bootstrap.js</strong> and <strong>bootstrap.min.js</strong> contain all plugins in a single file.</p> - <div class="bs-callout"> + <p>Plugins can be included individually (using <code>bootstrap-*.js</code> original files, or all at once (using <code>bootstrap.js</code> or the minified <code>bootstrap.min.js</code>.</p> + + <div class="bs-callout bs-callout-danger"> + <h4>Do not attempt to include both.</h4> + <p>Both <code>bootstrap.js</code> and <code>bootstrap.min.js</code> contain all plugins in a single file.</p> + </div> + + <div class="bs-callout bs-callout-danger"> <h4>Plugin dependencies</h4> <p>Some plugins and CSS components depend on other plugins. If you include plugins individually, make sure to check for these dependencies in the docs.</p> </div> @@ -65,7 +71,7 @@ $('#myModal').on('show.bs.modal', function (e) { }) {% endhighlight %} - <div class="bs-callout" id="callout-third-party-libs"> + <div class="bs-callout bs-callout-warning" id="callout-third-party-libs"> <h4>Third-party libraries</h4> <p><strong>Bootstrap does not officially support third-party JavaScript libraries</strong> like Prototype or jQuery UI. Despite <code>.noConflict</code> and namespaced events, there may be compatibility problems that you need to fix on your own. Ask on the <a href="http://groups.google.com/group/twitter-bootstrap">mailing list</a> if you need help.</p> </div> @@ -99,7 +105,7 @@ $('#myModal').on('show.bs.modal', function (e) { ================================================== --> <div class="bs-docs-section" id="modals"> <div class="page-header"> - <h1>Modals <small>bootstrap-modal.js</small></h1> + <h1>Modals <small>modal.js</small></h1> </div> <h2 id="modals-examples">Examples</h2> @@ -335,7 +341,7 @@ $('#myModal').on('hidden.bs.modal', function () { ================================================== --> <section id="dropdowns"> <div class="page-header"> - <h1>Dropdowns <small>bootstrap-dropdown.js</small></h1> + <h1>Dropdowns <small>dropdown.js</small></h1> </div> @@ -477,7 +483,7 @@ $('.dropdown-toggle').dropdown() ================================================== --> <section id="scrollspy"> <div class="page-header"> - <h1>ScrollSpy <small>bootstrap-scrollspy.js</small></h1> + <h1>ScrollSpy <small>scrollspy.js</small></h1> </div> @@ -504,7 +510,7 @@ $('.dropdown-toggle').dropdown() </div> </div> </div> - <div data-spy="scroll" data-target="#navbar-example" data-offset="0" class="scrollspy-example"> + <div data-spy="scroll" data-target="#navbar-example2" data-offset="0" class="scrollspy-example"> <h4 id="fat">@fat</h4> <p>Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3 wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred irony biodiesel keffiyeh artisan ullamco consequat.</p> <h4 id="mdo">@mdo</h4> @@ -537,7 +543,7 @@ $('.dropdown-toggle').dropdown() $('#navbar-example').scrollspy() {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Resolvable ID targets required</h4> <p>Navbar links must have resolvable id targets. For example, a <code><a href="#home">home</a></code> must correspond to something in the DOM like <code><div id="home"></div></code>.</p> </div> @@ -601,7 +607,7 @@ $('#myScrollspy').on('activate.bs.scrollspy', function () { ================================================== --> <section id="tabs"> <div class="page-header"> - <h1>Togglable tabs <small>bootstrap-tab.js</small></h1> + <h1>Togglable tabs <small>tab.js</small></h1> </div> @@ -728,7 +734,7 @@ $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { ================================================== --> <section id="tooltips"> <div class="page-header"> - <h1>Tooltips <small>bootstrap-tooltip.js</small></h1> + <h1>Tooltips <small>tooltip.js</small></h1> </div> <h2>Examples</h2> @@ -749,7 +755,7 @@ $('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { </ul> </div><!-- /example --> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Tooltips in button groups and input groups require special setting</h4> <p>When using tooltips on elements within a <code>.btn-group</code> or an <code>.input-group</code>, you'll have to specify the option <code>container: 'body'</code> (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the tooltip is triggered).</p> </div> @@ -809,7 +815,7 @@ $('#example').tooltip(options) <td>trigger</td> <td>string</td> <td>'hover focus'</td> - <td>how tooltip is triggered - click | hover | focus | manual. Note you case pass trigger multiple, space separated, trigger types.</td> + <td>how tooltip is triggered - click | hover | focus | manual. You may pass multiple triggers; separate them with a space.</td> </tr> <tr> <td>delay</td> @@ -831,7 +837,7 @@ $('#example').tooltip(options) </tr> </tbody> </table> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Data attributes for individual tooltips</h4> <p>Options for individual tooltips can alternatively be specified through the use of data attributes, as explained above.</p> </div> @@ -869,17 +875,17 @@ $('#example').tooltip(options) ================================================== --> <section id="popovers"> <div class="page-header"> - <h1>Popovers <small>bootstrap-popover.js</small></h1> + <h1>Popovers <small>popover.js</small></h1> </div> <h2>Examples</h2> <p>Add small overlays of content, like those on the iPad, to any element for housing secondary information. Hover over the button to trigger the popover.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Plugin dependency</h4> <p>Popovers require the <a href="#tooltips">tooltip plugin</a> to be included in your version of Bootstrap.</p> </div> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Popovers in button groups and input groups require special setting</h4> <p>When using popovers on elements within a <code>.btn-group</code> or an <code>.input-group</code>, you'll have to specify the option <code>container: 'body'</code> (documented below) to avoid unwanted side effects (such as the element growing wider and/or losing its rounded corners when the popover is triggered).</p> </div> @@ -1019,7 +1025,7 @@ $('#example').tooltip(options) </tr> </tbody> </table> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Data attributes for individual popovers</h4> <p>Options for individual popovers can alternatively be specified through the use of data attributes, as explained above.</p> </div> @@ -1054,7 +1060,7 @@ $('#example').tooltip(options) ================================================== --> <div class="bs-docs-section" id="js-alerts"> <div class="page-header"> - <h1>Alert messages <small>bootstrap-alert.js</small></h1> + <h1>Alert messages <small>alert.js</small></h1> </div> @@ -1133,7 +1139,7 @@ $('#my-alert').bind('closed.bs.alert', function () { ================================================== --> <div class="bs-docs-section" id="js-buttons"> <div class="page-header"> - <h1>Buttons <small>bootstrap-button.js</small></h1> + <h1>Buttons <small>button.js</small></h1> </div> <h2>Example uses</h2> @@ -1162,9 +1168,9 @@ $('#my-alert').bind('closed.bs.alert', function () { {% endhighlight %} <h4>Checkbox</h4> - <p>Add <code>data-toggle="buttons-checkbox"</code> for checkbox style toggling on btn-group.</p> + <p>Add <code>data-toggle="buttons"</code> to a group of checkboxes for checkbox style toggling on btn-group.</p> <div class="bs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-checkbox"> + <div class="btn-group" data-toggle="buttons"> <label class="btn btn-primary"> <input type="checkbox"> Option 1 </label> @@ -1177,7 +1183,7 @@ $('#my-alert').bind('closed.bs.alert', function () { </div> </div><!-- /example --> {% highlight html %} -<div class="btn-group" data-toggle="buttons-checkbox"> +<div class="btn-group" data-toggle="buttons"> <label class="btn btn-primary"> <input type="checkbox"> Option 1 </label> @@ -1191,9 +1197,9 @@ $('#my-alert').bind('closed.bs.alert', function () { {% endhighlight %} <h4>Radio</h4> - <p>Add <code>data-toggle="buttons-radio"</code> for radio style toggling on btn-group.</p> + <p>Add <code>data-toggle="buttons"</code> to a group of radio inputs for radio style toggling on btn-group.</p> <div class="bs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-radio"> + <div class="btn-group" data-toggle="buttons"> <label class="btn btn-primary"> <input type="radio" name="options" id="option1"> Option 1 </label> @@ -1206,7 +1212,7 @@ $('#my-alert').bind('closed.bs.alert', function () { </div> </div><!-- /example --> {% highlight html %} -<div class="btn-group" data-toggle="buttons-radio"> +<div class="btn-group" data-toggle="buttons"> <label class="btn btn-primary"> <input type="radio" name="options" id="option1"> Option 1 </label> @@ -1239,7 +1245,7 @@ $('.nav-tabs').button() <h4>$().button('toggle')</h4> <p>Toggles push state. Gives the button the appearance that it has been activated.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Auto toggling</h4> <p>You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.</p> </div> @@ -1254,7 +1260,7 @@ $('.nav-tabs').button() <button type="button" class="btn" data-loading-text="loading stuff...">...</button> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Cross-browser compatibility</h4> <p><a href="https://github.com/twitter/bootstrap/issues/793">Firefox persists the disabled state across page loads</a>. A workaround for this is to use <code>autocomplete="off"</code>.</p> </div> @@ -1278,13 +1284,13 @@ $('.nav-tabs').button() ================================================== --> <section id="collapse"> <div class="page-header"> - <h1>Collapse <small>bootstrap-collapse.js</small></h1> + <h1>Collapse <small>collapse.js</small></h1> </div> <h3>About</h3> <p>Get base styles and flexible support for collapsible components like accordions and navigation.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-danger"> <h4>Plugin dependency</h4> <p>Collapse requires the <a href="#transitions">transitions plugin</a> to be included in your version of Bootstrap.</p> </div> @@ -1488,7 +1494,7 @@ $('#myCollapsible').on('hidden.bs.collapse', function () { ================================================== --> <section id="carousel"> <div class="page-header"> - <h1>Carousel <small>bootstrap-carousel.js</small></h1> + <h1>Carousel <small>carousel.js</small></h1> </div> <h2>Examples</h2> @@ -1512,10 +1518,10 @@ $('#myCollapsible').on('hidden.bs.collapse', function () { </div> </div> <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"> - <span class="glyphicon glyphicon-chevron-left"></span> + <span class="icon-prev"></span> </a> <a class="right carousel-control" href="#carousel-example-generic" data-slide="next"> - <span class="glyphicon glyphicon-chevron-right"></span> + <span class="icon-next"></span> </a> </div> </div><!-- /example --> @@ -1541,17 +1547,21 @@ $('#myCollapsible').on('hidden.bs.collapse', function () { <!-- Controls --> <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"> - <span class="glyphicon glyphicon-chevron-left"></span> + <span class="icon-prev"></span> </a> <a class="right carousel-control" href="#carousel-example-generic" data-slide="next"> - <span class="glyphicon glyphicon-chevron-right"></span> + <span class="icon-next"></span> </a> </div> {% endhighlight %} +<div class="bs-callout"> + <h4>Glyphicon Alternative</h4> + <p>With <a href="/css/#glyphicons">Glyphicons</a> available, you may choose to style the left and right toggle buttons with <code>.glyphicon-chevron-left</code> and <code>.glyphicon-chevron-right</code>.</p> +</div> <h3>Optional captions</h3> <p>Add captions to your slides easily with the <code>.carousel-caption</code> element within any <code>.item</code>. Place just about any optional HTML within there and it will be automatically aligned and formatted.</p> - <div class="bs-callout"> + <div class="bs-callout bs-callout-info"> <h4>Responsive visibility</h4> <p><strong>Captions are hidden by default</strong> and will show up only with viewports greater than 768px wide.</p> </div> @@ -1586,10 +1596,10 @@ $('#myCollapsible').on('hidden.bs.collapse', function () { </div> </div> <a class="left carousel-control" href="#carousel-example-captions" data-slide="prev"> - <span class="glyphicon glyphicon-chevron-left"></span> + <span class="icon-prev"></span> </a> <a class="right carousel-control" href="#carousel-example-captions" data-slide="next"> - <span class="glyphicon glyphicon-chevron-right"></span> + <span class="icon-next"></span> </a> </div> </div><!-- /example --> @@ -1705,7 +1715,7 @@ $('#myCarousel').on('slide.bs.carousel', function () { ================================================== --> <section id="affix"> <div class="page-header"> - <h1>Affix <small>bootstrap-affix.js</small></h1> + <h1>Affix <small>affix.js</small></h1> </div> <h2>Example</h2> @@ -1722,7 +1732,7 @@ $('#myCarousel').on('slide.bs.carousel', function () { <div data-spy="affix" data-offset-top="200">...</div> {% endhighlight %} - <div class="bs-callout"> + <div class="bs-callout bs-callout-warning"> <h4>Requires positioning</h4> <p>You must manage the position of a pinned element and the behavior of its immediate parent. Position is controlled by <code>affix</code>, <code>affix-top</code>, and <code>affix-bottom</code>. Remember to check for a potentially collapsed parent when the affix kicks in as it's removing content from the normal flow of the page.</p> </div> diff --git a/js/button.js b/js/button.js index c29647840b81f82726f859169fd8c31f929c4eb7..b4d66b68b570026ef5c202d9741e4390696e6632 100644 --- a/js/button.js +++ b/js/button.js @@ -53,10 +53,11 @@ } Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') + var $parent = this.$element.closest('[data-toggle="buttons"]') - if ($parent) { - $parent.find('.active').removeClass('active') + if ($parent.length) { + var $input = this.$element.find('input').prop('checked', !this.$element.hasClass('active')) + if ($input.prop('type') === 'radio') $parent.find('.active').removeClass('active') } this.$element.toggleClass('active') @@ -100,6 +101,7 @@ var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') + e.preventDefault() }) }(window.jQuery); diff --git a/js/carousel.js b/js/carousel.js index 547007d2dd90d7a52138398b8f21f9d7fb5e7791..78e8785460d229921c469d07a1a39f827ba9536d 100644 --- a/js/carousel.js +++ b/js/carousel.js @@ -130,7 +130,7 @@ $next[0].offsetWidth // force reflow $active.addClass(direction) $next.addClass(direction) - this.$element.one($.support.transition.end, function () { + this.$element.find('.item').one($.support.transition.end, function () { $next.removeClass([type, direction].join(' ')).addClass('active') $active.removeClass(['active', direction].join(' ')) that.sliding = false @@ -189,12 +189,13 @@ var $this = $(this), href var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 var options = $.extend({}, $target.data(), $this.data()) - var slideIndex + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false $target.carousel(options) if (slideIndex = $this.attr('data-slide-to')) { - $target.data('bs.carousel').pause().to(slideIndex).cycle() + $target.data('bs.carousel').to(slideIndex) } e.preventDefault() diff --git a/js/collapse.js b/js/collapse.js index 7c3c20da173c7011ec731dde41b5009c109e9990..8d4c6afecd10e0788463aeb311874526eb3891c2 100644 --- a/js/collapse.js +++ b/js/collapse.js @@ -44,28 +44,37 @@ Collapse.prototype.show = function () { if (this.transitioning || this.$element.hasClass('in')) return + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + var dimension = this.dimension() var scroll = $.camelCase(['scroll', dimension].join('-')) var actives = this.$parent && this.$parent.find('> .accordion-group > .in') if (actives && actives.length) { - var hasData = actives.data('collapse') + var hasData = actives.data('bs.collapse') if (hasData && hasData.transitioning) return actives.collapse('hide') - hasData || actives.data('collapse', null) + hasData || actives.data('bs.collapse', null) } this.$element[dimension](0) - this.transition('addClass', $.Event('show.bs.collapse'), 'shown.bs.collapse') + this.transition('addClass', 'shown.bs.collapse') if ($.support.transition) this.$element[dimension](this.$element[0][scroll]) } Collapse.prototype.hide = function () { if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + var dimension = this.dimension() this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide.bs.collapse'), 'hidden') + this.transition('removeClass', 'shown.bs.hidden') this.$element[dimension](0) } @@ -82,18 +91,14 @@ return this } - Collapse.prototype.transition = function (method, startEvent, completeEvent) { + Collapse.prototype.transition = function (method, completeEvent) { var that = this var complete = function () { - if (startEvent.type == 'show') that.reset() + if (completeEvent == 'shown.bs.collapse') that.reset() that.transitioning = 0 that.$element.trigger(completeEvent) } - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - this.transitioning = 1 this.$element[method]('in') @@ -116,10 +121,10 @@ $.fn.collapse = function (option) { return this.each(function () { var $this = $(this) - var data = $this.data('collapse') + var data = $this.data('bs.collapse') var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) } @@ -140,17 +145,22 @@ // ================= $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - var target = $this.attr('data-target') + var $this = $(this), href + var target = $this.attr('data-target') || e.preventDefault() || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - var option = $(target).data('collapse') ? 'toggle' : $this.data() - var parent = $this.attr('data-parent') + var $target = $(target) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $this.data() + var parent = $this.attr('data-parent') var $parent = parent && $(parent) - if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed') - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) + if (!data || !data.transitioning) { + if ($parent) $parent.find('[data-toggle=collapse][data-parent=' + parent + ']').not($this).addClass('collapsed') + $this[$target.hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + } + + $target.collapse(option) }) }(window.jQuery); diff --git a/js/modal.js b/js/modal.js index 81766b323542c3640d8bf4db48985d015e1128b4..88bc1cb8048e7539efd38d08e07daebe3fe2edb9 100644 --- a/js/modal.js +++ b/js/modal.js @@ -25,7 +25,7 @@ var Modal = function (element, options) { this.options = options - this.$element = $(element).delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.$element = $(element).on('click.dismiss.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) this.$backdrop = this.isShown = null @@ -160,11 +160,12 @@ this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') .appendTo(document.body) - this.$backdrop.click( - this.options.backdrop == 'static' ? - $.proxy(this.$element[0].focus, this.$element[0]) - : $.proxy(this.hide, this) - ) + this.$element.on('click', $.proxy(function (e) { + if (e.target !== e.currentTarget) return + this.options.backdrop == 'static' + ? this.$element[0].focus.call(this.$element[0]) + : this.hide.call(this) + }, this)) if (doAnimate) this.$backdrop[0].offsetWidth // force reflow @@ -232,7 +233,7 @@ $target .modal(option) .one('hide', function () { - $this.focus() + $this.is(':visible') && $this.focus() }) }) diff --git a/js/popover.js b/js/popover.js index e58e24908ca587acc4f347851d489d70f3295390..482985b639dbf86b1f6d3f35123eb192b764de1f 100644 --- a/js/popover.js +++ b/js/popover.js @@ -64,11 +64,13 @@ } Popover.prototype.getContent = function () { - var content = typeof this.options.content == 'function' ? - this.options.content.call(this.$element[0]) : - this.options.content + var $e = this.$element + var o = this.options - return content || this.$element.attr('data-content') + return $e.attr('data-content') + || (typeof o.content == 'function' ? + o.content.call($e[0]) : + o.content) } Popover.prototype.tip = function () { diff --git a/js/tests/index.html b/js/tests/index.html index 0cfadc598bb6fd6d1a7a96b6c72478622a8e12e9..501bf38f2ec5eb35c570c9217463c4631ec8ce2b 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -11,9 +11,6 @@ <link rel="stylesheet" href="vendor/qunit.css" type="text/css" media="screen" /> <script src="vendor/qunit.js"></script> - <!-- phantomjs logging script--> - <script src="unit/phantom.js"></script> - <!-- plugin sources --> <script src="../../js/transition.js"></script> <script src="../../js/alert.js"></script> diff --git a/js/tests/unit/button.js b/js/tests/unit/button.js index 943d36d1b487cce6677acef1954bafefa698ab03..1c557e08fb6738b3b8e5bb6d963e35b20a925f00 100644 --- a/js/tests/unit/button.js +++ b/js/tests/unit/button.js @@ -40,14 +40,15 @@ $(function () { ok(btn.hasClass('disabled'), 'btn has disabled class') start() stop() + btn.button('reset') + equals(btn.html(), 'mdo', 'btn text equals mdo') + setTimeout(function () { + ok(!btn.attr('disabled'), 'btn is not disabled') + ok(!btn.hasClass('disabled'), 'btn does not have disabled class') + start() + }, 0) }, 0) - btn.button('reset') - equals(btn.html(), 'mdo', 'btn text equals mdo') - setTimeout(function () { - ok(!btn.attr('disabled'), 'btn is not disabled') - ok(!btn.hasClass('disabled'), 'btn does not have disabled class') - start() - }, 0) + }) test("should toggle active", function () { diff --git a/js/tests/unit/modal.js b/js/tests/unit/modal.js index 9187b5e23a48cf9aa2d9fd2a3cdc9f25cce3bc0c..90762ea9011df027e3c374766ec4aa38e31a6130 100644 --- a/js/tests/unit/modal.js +++ b/js/tests/unit/modal.js @@ -134,4 +134,23 @@ $(function () { }) .modal("show") }) + + test("should close modal when clicking outside of modal-content", function () { + stop() + $.support.transition = false + var div = $("<div id='modal-test'><div class='contents'></div></div>") + div + .bind("shown.bs.modal", function () { + ok($('#modal-test').length, 'modal insterted into dom') + $('.contents').click() + ok($('#modal-test').is(":visible"), 'modal visible') + $('#modal-test').click() + }) + .bind("hidden.bs.modal", function() { + ok(!$('#modal-test').is(":visible"), 'modal hidden') + div.remove() + start() + }) + .modal("show") + }) }) diff --git a/js/tests/unit/phantom.js b/js/tests/unit/phantom.js index c01e71c154e4e0bc0363aea3acb606271bc384a3..c584c5a353f31fa01a287a35baf7fbdedf1c7abe 100644 --- a/js/tests/unit/phantom.js +++ b/js/tests/unit/phantom.js @@ -1,21 +1,69 @@ -// Logging setup for phantom integration -// adapted from Modernizr - -QUnit.begin = function () { - console.log("Starting test suite") - console.log("================================================\n") -} - -QUnit.moduleDone = function (opts) { - if (opts.failed === 0) { - console.log("\u2714 All tests passed in '" + opts.name + "' module") - } else { - console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module") - } -} - -QUnit.done = function (opts) { - console.log("\n================================================") - console.log("Tests completed in " + opts.runtime + " milliseconds") - console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.") -} +/* + * grunt-contrib-qunit + * http://gruntjs.com/ + * + * Copyright (c) 2013 "Cowboy" Ben Alman, contributors + * Licensed under the MIT license. + */ + +/*global QUnit:true, alert:true*/ +(function () { + 'use strict'; + + // Don't re-order tests. + QUnit.config.reorder = false + // Run tests serially, not in parallel. + QUnit.config.autorun = false + + // Send messages to the parent PhantomJS process via alert! Good times!! + function sendMessage() { + var args = [].slice.call(arguments) + alert(JSON.stringify(args)) + } + + // These methods connect QUnit to PhantomJS. + QUnit.log = function(obj) { + // What is this I don’t even + if (obj.message === '[object Object], undefined:undefined') { return } + // Parse some stuff before sending it. + var actual = QUnit.jsDump.parse(obj.actual) + var expected = QUnit.jsDump.parse(obj.expected) + // Send it. + sendMessage('qunit.log', obj.result, actual, expected, obj.message, obj.source) + } + + QUnit.testStart = function(obj) { + sendMessage('qunit.testStart', obj.name) + } + + QUnit.testDone = function(obj) { + sendMessage('qunit.testDone', obj.name, obj.failed, obj.passed, obj.total) + } + + QUnit.moduleStart = function(obj) { + sendMessage('qunit.moduleStart', obj.name) + } + + QUnit.begin = function () { + sendMessage('qunit.begin') + console.log("Starting test suite") + console.log("================================================\n") + } + + QUnit.moduleDone = function (opts) { + if (opts.failed === 0) { + console.log("\r\u2714 All tests passed in '" + opts.name + "' module") + } else { + console.log("\u2716 " + opts.failed + " tests failed in '" + opts.name + "' module") + } + sendMessage('qunit.moduleDone', opts.name, opts.failed, opts.passed, opts.total) + } + + QUnit.done = function (opts) { + console.log("\n================================================") + console.log("Tests completed in " + opts.runtime + " milliseconds") + console.log(opts.passed + " tests of " + opts.total + " passed, " + opts.failed + " failed.") + sendMessage('qunit.done', opts.failed, opts.passed, opts.total, opts.runtime) + } + +}()) diff --git a/js/tests/unit/popover.js b/js/tests/unit/popover.js index fb00175673ff933a1bbec53255fc3b01a49054fc..767d79864b73f0f6351cb03600c34baa69f1f825 100644 --- a/js/tests/unit/popover.js +++ b/js/tests/unit/popover.js @@ -77,6 +77,26 @@ $(function () { $('#qunit-fixture').empty() }) + + test("should get title and content from attributes #2", function () { + $.support.transition = false + var popover = $('<a href="#" title="@mdo" data-content="loves data attributes (ã¥ï½¡â—•‿‿◕。)㥠︵ â”»â”â”»" >@mdo</a>') + .appendTo('#qunit-fixture') + .popover({ + title: 'ignored title option', + content: 'ignored content option' + }) + .popover('show') + + ok($('.popover').length, 'popover was inserted') + equals($('.popover .popover-title').text(), '@mdo', 'title correctly inserted') + equals($('.popover .popover-content').text(), "loves data attributes (ã¥ï½¡â—•‿‿◕。)㥠︵ â”»â”â”»", 'content correctly inserted') + + popover.popover('hide') + ok(!$('.popover').length, 'popover was removed') + $('#qunit-fixture').empty() + }) + test("should respect custom classes", function() { $.support.transition = false var popover = $('<a href="#">@fat</a>') diff --git a/js/tests/unit/tooltip.js b/js/tests/unit/tooltip.js index 638edefc26dc9955cf26b0f254bb4afe8da43b28..5f7847e9250fd78fa52f57145db5268299a35aa2 100644 --- a/js/tests/unit/tooltip.js +++ b/js/tests/unit/tooltip.js @@ -291,4 +291,54 @@ $(function () { container.remove() }, 100) }) + + test("should add position class before positioning so that position-specific styles are taken into account", function(){ + $("head").append('<style> .tooltip.right { white-space: nowrap; } .tooltip.right .tooltip-inner { max-width: none; } </style>') + + var container = $("<div />").appendTo("body") + , target = $('<a href="#" rel="tooltip" title="very very very very very very very very long tooltip in one line"></a>') + .appendTo(container) + .tooltip({placement: 'right'}) + .tooltip('show') + , tooltip = container.find(".tooltip") + + ok( Math.round(target.offset().top + target[0].offsetHeight/2 - tooltip[0].offsetHeight/2) === Math.round(tooltip.offset().top) ) + target.tooltip('hide') + }) + + test("tooltip title test #1", function () { + var tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip" style="display: inline-block; position: absolute; top: 0; left: 0;"></a>') + .appendTo('#qunit-fixture') + .tooltip({ + }) + .tooltip('show') + equal($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title from title attribute is set') + tooltip.tooltip('hide') + ok(!$(".tooltip").length, 'tooltip removed') + }) + + test("tooltip title test #2", function () { + var tooltip = $('<a href="#" rel="tooltip" title="Simple tooltip" style="display: inline-block; position: absolute; top: 0; left: 0;"></a>') + .appendTo('#qunit-fixture') + .tooltip({ + title: 'This is a tooltip with some content' + }) + .tooltip('show') + equal($('.tooltip').children('.tooltip-inner').text(), 'Simple tooltip', 'title is set from title attribute while prefered over title option') + tooltip.tooltip('hide') + ok(!$(".tooltip").length, 'tooltip removed') + }) + + test("tooltip title test #3", function () { + var tooltip = $('<a href="#" rel="tooltip" style="display: inline-block; position: absolute; top: 0; left: 0;"></a>') + .appendTo('#qunit-fixture') + .tooltip({ + title: 'This is a tooltip with some content' + }) + .tooltip('show') + equal($('.tooltip').children('.tooltip-inner').text(), 'This is a tooltip with some content', 'title from title option is set') + tooltip.tooltip('hide') + ok(!$(".tooltip").length, 'tooltip removed') + }) + }) diff --git a/js/tooltip.js b/js/tooltip.js index d95624bdc2959aa87066c104343da3a627c11ae5..1f84b5cf5d32223fbc8870a547e432f86f7766d9 100644 --- a/js/tooltip.js +++ b/js/tooltip.js @@ -147,6 +147,7 @@ $tip .detach() .css({ top: 0, left: 0, display: 'block' }) + .addClass(placement) this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) @@ -183,7 +184,6 @@ $tip .offset(offset) - .addClass(placement) .addClass('in') var actualWidth = $tip[0].offsetWidth diff --git a/less/accordion.less b/less/accordion.less index 59765f15402f4d5abe097f5b318ef5d4f3b3de8e..c3023ac49e02cf41bdf0191016f41a48e088cda2 100644 --- a/less/accordion.less +++ b/less/accordion.less @@ -11,24 +11,21 @@ // Group == heading + body .accordion-group { margin-bottom: 2px; - border: 1px solid #e5e5e5; + border: 1px solid @accordion-border-color; border-radius: @border-radius-base; } .accordion-heading { border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -// General toggle styles -.accordion-toggle { - cursor: pointer; + .accordion-toggle { + display: block; + padding: 8px 15px; + cursor: pointer; + } } // Inner needs the styles because you can't animate properly with any styles on the element .accordion-inner { padding: 9px 15px; - border-top: 1px solid #e5e5e5; + border-top: 1px solid @accordion-border-color; } diff --git a/less/alerts.less b/less/alerts.less index 24b79114372e2b0d76bd4ab2f9aa16f15cc10d63..66aa6cf2469e12a73f20cd85991d17437808ced1 100644 --- a/less/alerts.less +++ b/less/alerts.less @@ -43,37 +43,13 @@ // ------------------------- .alert-success { - background-color: @alert-success-bg; - border-color: @alert-success-border; - color: @alert-success-text; - hr { - border-top-color: darken(@alert-success-border, 5%); - } - .alert-link { - color: darken(@alert-success-text, 10%); - } + .alert-variant(@alert-success-bg, @alert-success-border, @alert-success-text); } .alert-danger { - background-color: @alert-danger-bg; - border-color: @alert-danger-border; - color: @alert-danger-text; - hr { - border-top-color: darken(@alert-danger-border, 5%); - } - .alert-link { - color: darken(@alert-danger-text, 10%); - } + .alert-variant(@alert-danger-bg, @alert-danger-border, @alert-danger-text); } .alert-info { - background-color: @alert-info-bg; - border-color: @alert-info-border; - color: @alert-info-text; - hr { - border-top-color: darken(@alert-info-border, 5%); - } - .alert-link { - color: darken(@alert-info-text, 10%); - } + .alert-variant(@alert-info-bg, @alert-info-border, @alert-info-text); } // Block alerts @@ -82,11 +58,12 @@ .alert-block { padding-top: 15px; padding-bottom: 15px; -} -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; + + > p, + > ul { + margin-bottom: 0; + } + p + p { + margin-top: 5px; + } } diff --git a/less/badges.less b/less/badges.less index 665aed9218032dd1b8131e371d9482c282ccf5be..216d6014b9ab372951f82229a9785a4a930c4d10 100644 --- a/less/badges.less +++ b/less/badges.less @@ -10,12 +10,12 @@ padding: 3px 7px; font-size: @font-size-small; font-weight: bold; - color: #fff; + color: @badge-color; line-height: 1; vertical-align: middle; white-space: nowrap; text-align: center; - background-color: @gray-light; + background-color: @badge-bg; border-radius: 10px; // Empty labels/badges collapse @@ -28,25 +28,23 @@ a.badge { &:hover, &:focus { - color: #fff; + color: @badge-link-hover-color; text-decoration: none; cursor: pointer; } } // Quick fix for labels/badges in buttons -.btn { - .badge { - position: relative; - top: -1px; - } +.btn .badge { + position: relative; + top: -1px; } // Account for counters in navs a.list-group-item.active > .badge, .nav-pills > .active > a > .badge { - color: @link-color; - background-color: #fff; + color: @badge-active-color; + background-color: @badge-active-bg; } .nav-pills > li > a > .badge { margin-left: 3px; diff --git a/less/breadcrumbs.less b/less/breadcrumbs.less index 2fe8217a36603a4fb6aed187c80419d62e1b99d0..22bf8eef6302abb6802536409aa7842764ab6121 100644 --- a/less/breadcrumbs.less +++ b/less/breadcrumbs.less @@ -5,24 +5,28 @@ .breadcrumb { padding: 8px 15px; - margin: 0 0 @line-height-computed; + margin-bottom: @line-height-computed; list-style: none; - background-color: #f5f5f5; + background-color: @breadcrumb-bg; border-radius: @border-radius-base; > li { display: inline-block; +<<<<<<< HEAD text-shadow: 0 1px 0 #fff; - &:after { + &+li:before { display: inline-block; - content: "\00a0 /"; // Unicode space added since inline-block means non-collapsing white-space + content: "/\00a0"; // Unicode space added since inline-block means non-collapsing white-space padding: 0 5px; color: #ccc; - } - &:last-child:after { - display: none; // No divider after last element +======= + &+li:before { + content: "/\00a0"; // Unicode space added since inline-block means non-collapsing white-space + padding: 0 5px; + color: @breadcrumb-color; +>>>>>>> upstream/3.0.0-wip } } > .active { - color: @gray-light; + color: @breadcrumb-active-color; } } diff --git a/less/button-groups.less b/less/button-groups.less index 408e7c75d9a3a4a6d3f7e2e44bce4bf509b86b7c..f345f4e13823912e79542f6be7289b58c95576ff 100644 --- a/less/button-groups.less +++ b/less/button-groups.less @@ -40,11 +40,12 @@ float: left; } // Space out series of button groups - > .btn + .btn, - > .btn-group + .btn, - > .btn + .btn-group, - > .btn-group + .btn-group { - margin-left: 5px; + > .btn, + > .btn-group { + + .btn, + + .btn-group { + margin-left: 5px; + } } } @@ -72,9 +73,11 @@ .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { border-radius: 0; } -.btn-group > .btn-group:first-child > .btn:last-child, -.btn-group > .btn-group:first-child > .dropdown-toggle { - .border-right-radius(0); +.btn-group > .btn-group:first-child { + > .btn:last-child, + > .dropdown-toggle { + .border-right-radius(0); + } } .btn-group > .btn-group:last-child > .btn:first-child { .border-left-radius(0); @@ -134,14 +137,16 @@ margin-top: -1px; } } -.btn-group-vertical .btn:not(:first-child):not(:last-child) { - border-radius: 0; -} -.btn-group-vertical .btn:first-child { - .border-bottom-radius(0); -} -.btn-group-vertical .btn:last-child { - .border-top-radius(0); +.btn-group-vertical .btn { + &:not(:first-child):not(:last-child) { + border-radius: 0; + } + &:first-child { + .border-bottom-radius(0); + } + &:last-child { + .border-top-radius(0); + } } @@ -160,7 +165,7 @@ // Checkbox and radio options -.btn-group[data-toggle="buttons-radio"] > .btn > input[type="radio"], -.btn-group[data-toggle="buttons-checkbox"] > .btn > input[type="checkbox"] { +.btn-group[data-toggle="buttons"] > .btn > input[type="radio"], +.btn-group[data-toggle="buttons"] > .btn > input[type="checkbox"] { display: none; } diff --git a/less/buttons.less b/less/buttons.less index 6280d3448a2f86e9d90f61dbe8ab459775b89264..3cc7da00d1bf92abd8a80673882184b685760f7b 100644 --- a/less/buttons.less +++ b/less/buttons.less @@ -81,33 +81,32 @@ // ------------------------- // Make a button look and behave like a link -.btn-link, -.btn-link:active, -.btn-link[disabled], -fieldset[disabled] .btn-link { - background-color: transparent; - background-image: none; - .box-shadow(none); -} -.btn-link, -.btn-link:hover, -.btn-link:focus, -.btn-link:active { - border-color: transparent; -} .btn-link { color: @link-color; font-weight: normal; cursor: pointer; border-radius: 0; -} -.btn-link:hover, -.btn-link:focus { - color: @link-hover-color; - text-decoration: underline; - background-color: transparent; -} -.btn-link { + + &, + &:active, + &[disabled], + fieldset[disabled] & { + background-color: transparent; + background-image: none; + .box-shadow(none); + } + &, + &:hover, + &:focus, + &:active { + border-color: transparent; + } + &:hover, + &:focus { + color: @link-hover-color; + text-decoration: underline; + background-color: transparent; + } &[disabled], fieldset[disabled] & { &:hover, diff --git a/less/carousel.less b/less/carousel.less index 13159db41fb0bbd978180a649ebfdb412a756371..85c0b95a3ef7eefd33999974c77ab7f009380b81 100644 --- a/less/carousel.less +++ b/less/carousel.less @@ -8,15 +8,10 @@ position: relative; } -// Wrap all slides, but only show the active one .carousel-inner { position: relative; overflow: hidden; width: 100%; -} - -// Immediate parent of all slides -.carousel-inner { > .item { display: none; @@ -80,13 +75,8 @@ color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0,0,0,.6); - - // we can't have this transition here - // because webkit cancels the carousel - // animation if you trip this while - // in the middle of another animation - // ;_; - // .transition(opacity .2s linear); + // We can't have this transition here because webkit cancels the carousel + // animation if you trip this while in the middle of another animation. // Set gradients for backgrounds &.left { @@ -109,7 +99,9 @@ } // Toggles - .glyphicon { + .glyphicon, + .icon-prev, + .icon-next { position: absolute; top: 50%; left: 50%; @@ -120,33 +112,51 @@ margin-top: -10px; margin-left: -10px; } + // Non-glyphicon toggles + .icon-prev { + &:before { + content: '\2039';// SINGLE LEFT-POINTING ANGLE QUOTATION MARK (U+2039) + } + } + .icon-next { + &:before { + content: '\203a';// SINGLE RIGHT-POINTING ANGLE QUOTATION MARK (U+203A) + } + } } // Optional indicator pips // ----------------------------- .carousel-indicators { position: absolute; - bottom: 20px; + bottom: 10px; left: 50%; z-index: 15; +<<<<<<< HEAD width: 100px; - margin: 0 0 0 -50px; + margin-left: -50px; +======= + width: 120px; + margin-left: -60px; +>>>>>>> upstream/3.0.0-wip padding-left: 0; list-style: none; text-align: center; li { display: inline-block; - width: 8px; - height: 8px; - margin-left: 0; - margin-right: 0; + width: 10px; + height: 10px; + margin: 1px; text-indent: -999px; border: 1px solid #fff; - border-radius: 5px; + border-radius: 10px; cursor: pointer; } .active { + margin: 0; + width: 12px; + height: 12px; background-color: #fff; } } @@ -175,7 +185,9 @@ @media screen and (min-width: @screen-tablet) { // Scale up the controls a smidge - .carousel-control .glyphicon { + .carousel-control .glyphicon, + .carousel-control .icon-prev, + .carousel-control .icon-next { width: 30px; height: 30px; margin-top: -15px; @@ -189,4 +201,9 @@ right: 20%; padding-bottom: 30px; } + + // Move up the indicators + .carousel-indicators { + bottom: 20px; + } } diff --git a/less/close.less b/less/close.less index e879da4d62d2a4df21ba9b7eaa24f1a44600247b..5fe23b3dc81dd363e85f1fe19ef0f5a1cbbb8615 100644 --- a/less/close.less +++ b/less/close.less @@ -19,15 +19,15 @@ cursor: pointer; .opacity(.5); } -} -// Additional properties for button version -// iOS requires the button element instead of an anchor tag. -// If you want the anchor version, it requires `href="#"`. -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; + // Additional properties for button version + // iOS requires the button element instead of an anchor tag. + // If you want the anchor version, it requires `href="#"`. + button& { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; + } } diff --git a/less/code.less b/less/code.less index 63c255010de4f87ddf69555a7b9d48299d693e04..8dd34670a8ec2566b36013b06b4ecf7e5a5c86a8 100644 --- a/less/code.less +++ b/less/code.less @@ -6,11 +6,7 @@ // Inline and block code styles code, pre { - padding: 0 3px 2px; font-family: @font-family-monospace; - font-size: (@font-size-base - 2); - color: @gray-dark; - border-radius: 4px; } // Inline code @@ -20,6 +16,7 @@ code { color: #c7254e; background-color: #f9f2f4; white-space: nowrap; + border-radius: 4px; } // Blocks of code @@ -31,6 +28,7 @@ pre { line-height: @line-height-base; word-break: break-all; word-wrap: break-word; + color: @gray-dark; background-color: #f5f5f5; border: 1px solid #ccc; // IE8 fallback border: 1px solid rgba(0,0,0,.15); diff --git a/less/dropdowns.less b/less/dropdowns.less index f2ddc43924435b61bbefd1053ab509edff99d507..7e35d42871caee81530a0909413ac9e87186d54c 100644 --- a/less/dropdowns.less +++ b/less/dropdowns.less @@ -62,40 +62,48 @@ // Hover/Focus state // ----------- -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus { - text-decoration: none; - color: @dropdown-link-hover-color; - #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); +.dropdown-menu > li > a { + &:hover, + &:focus { + text-decoration: none; + color: @dropdown-link-hover-color; + #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); + } } // Active state // ------------ -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: @dropdown-link-active-color; - text-decoration: none; - outline: 0; - #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); +.dropdown-menu > .active > a { + &, + &:hover, + &:focus { + color: @dropdown-link-active-color; + text-decoration: none; + outline: 0; + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); + } } // Disabled state // -------------- // Gray out text and ensure the hover/focus state remains gray -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: @gray-light; +.dropdown-menu > .disabled > a { + &, + &:hover, + &:focus { + color: @gray-light; + } } // Nuke hover/focus effects -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - background-image: none; // Remove CSS gradient - .reset-filter(); - cursor: default; +.dropdown-menu > .disabled > a { + &:hover, + &:focus { + text-decoration: none; + background-color: transparent; + background-image: none; // Remove CSS gradient + .reset-filter(); + cursor: default; + } } // Open state for the dropdown @@ -112,6 +120,17 @@ } } +// Dropdown section headers +// --------------------------- +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: @font-size-small; + line-height: @line-height-base; + color: @gray-light; +} + + // Backdrop to catch body clicks on mobile, etc. // --------------------------- @@ -150,17 +169,3 @@ margin-bottom: 1px; } } - -// Tweak nav headers -// --------------------------- -// Increase padding from 15px to 20px on sides -.dropdown .dropdown-menu .nav-header { - padding-left: 20px; - padding-right: 20px; -} - -// Typeahead -// --------------------------- -.typeahead { - z-index: 1051; -} diff --git a/less/forms.less b/less/forms.less index ea340007c9cfce7798ff6c51ae5396d84452795b..c366eb00970c10bcec51d766872f6ca9ff928178 100644 --- a/less/forms.less +++ b/less/forms.less @@ -55,7 +55,7 @@ input[type="search"], input[type="tel"], input[type="color"] { display: block; - min-height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) + height: @input-height-base; // Make inputs at least the height of their button counterpart (base line-height + padding + border) padding: @padding-base-vertical @padding-base-horizontal; font-size: @font-size-base; line-height: @line-height-base; @@ -123,10 +123,8 @@ input[type="checkbox"] { } // Set the height of select and file controls to match text inputs -select, input[type="file"] { - height: @input-height-base; /* In IE7, the height of the select element cannot be changed by height, only font-size. TODO: Check if this is still needed when dropping IE7 support */ - line-height: @input-height-base; + display: block; } // Make multiple select elements height not fixed @@ -149,6 +147,16 @@ input[type="checkbox"]:focus { .tab-focus(); } +// Fix for Chrome number input +// Setting certain font-sizes causes the `I` bar to appear on hover of the bottom increment button. +// See https://github.com/twitter/bootstrap/issues/8350 for more. +input[type="number"] { + &::-webkit-outer-spin-button, + &::-webkit-inner-spin-button { + height: auto; + } +} + // Placeholder // ------------------------- @@ -191,19 +199,10 @@ textarea { margin-top: -5px; // Move up sibling radios or checkboxes for tighter spacing } -/* -// Move the options list down to align with labels -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; // has to be padding because margin collapses -} -*/ - // Radios and checkboxes on same line .radio-inline, .checkbox-inline { display: inline-block; -// padding-top: 5px; padding-left: 20px; margin-bottom: 0; vertical-align: middle; @@ -238,18 +237,28 @@ input[type="search"], input[type="tel"], input[type="color"] { &.input-large { - min-height: @input-height-large; + height: @input-height-large; padding: @padding-large-vertical @padding-large-horizontal; font-size: @font-size-large; border-radius: @border-radius-large; } &.input-small { - min-height: @input-height-small; + height: @input-height-small; padding: @padding-small-vertical @padding-small-horizontal; font-size: @font-size-small; border-radius: @border-radius-small; } } +select { + &.input-large { + height: @input-height-large; + line-height: @input-height-large; + } + &.input-small { + height: @input-height-small; + line-height: @input-height-small; + } +} @@ -382,9 +391,9 @@ input[type="color"] { } .input-group-btn > .btn { position: relative; - float: left; // Collapse white-space + // Jankily prevent input button groups from wrapping + .btn { - margin-left: -1px; + margin-left: -4px; } // Bring the "active" button to the front &:hover, @@ -427,7 +436,7 @@ input[type="color"] { } // Only right align form labels here when the columns stop stacking -@media (min-width: 768px) { +@media (min-width: @screen-tablet) { .form-horizontal .control-label { text-align: right; } diff --git a/less/jumbotron.less b/less/jumbotron.less index 39bec9be68128eb504f05bfcde85bbc6b9118cad..ca51b481aec82d07cd67ac62c65e3246cd8ab89e 100644 --- a/less/jumbotron.less +++ b/less/jumbotron.less @@ -18,13 +18,10 @@ p { line-height: 1.4; } -} -@media screen and (min-width: @screen-tablet) { - .jumbotron { + @media screen and (min-width: @screen-tablet) { padding: 50px 60px; border-radius: @border-radius-large; // Only round corners at higher resolutions - h1 { font-size: (@font-size-base * 4.5); } diff --git a/less/labels.less b/less/labels.less index 92fe8f89e2293803aff9a594d341d05692ec495c..d7852d107757f9c0520365df38455c00a0b228f3 100644 --- a/less/labels.less +++ b/less/labels.less @@ -15,7 +15,7 @@ background-color: @gray-light; border-radius: .25em; - // Add hover effects, but only for links + // Add hover effects, but only for links &[href] { &:hover, &:focus { @@ -30,41 +30,17 @@ // Colors // Contextual variations (linked labels get darker on :hover) .label-danger { - background-color: @label-danger-bg; - &[href] { - &:hover, - &:focus { - background-color: darken(@label-danger-bg, 10%); - } - } + .label-variant(@label-danger-bg); } .label-success { - background-color: @label-success-bg; - &[href] { - &:hover, - &:focus { - background-color: darken(@label-success-bg, 10%); - } - } + .label-variant(@label-success-bg); } .label-warning { - background-color: @label-warning-bg; - &[href] { - &:hover, - &:focus { - background-color: darken(@label-warning-bg, 10%); - } - } + .label-variant(@label-warning-bg); } .label-info { - background-color: @label-info-bg; - &[href] { - &:hover, - &:focus { - background-color: darken(@label-info-bg, 10%); - } - } -} \ No newline at end of file + .label-variant(@label-info-bg); +} diff --git a/less/list-group.less b/less/list-group.less index f9d9f612cd36a3531661952e208859986a63ae49..34718633ac528a6acce0ed8ac790650a3bd0b46f 100644 --- a/less/list-group.less +++ b/less/list-group.less @@ -22,16 +22,22 @@ // Place the border on the list items and negative margin up for better styling margin-bottom: -1px; border: 1px solid @list-group-border; -} -// Round the first and last items -.list-group-item:first-child { - .border-top-radius(@border-radius-base); -} -.list-group-item:last-child { - margin-bottom: 0; - .border-bottom-radius(@border-radius-base); -} + // Round the first and last items + &:first-child { + .border-top-radius(@border-radius-base); + } + &:last-child { + margin-bottom: 0; + .border-bottom-radius(@border-radius-base); + } + + // Align badges within list items + > .badge { + float: right; + margin-right: -15px; + } +} // Custom content options // ------------------------- @@ -50,45 +56,34 @@ // Custom content within linked items a.list-group-item { + // Colorize content accordingly .list-group-item-heading { color: #333; } .list-group-item-text { color: #555; } -} -// Hover state -a.list-group-item:hover, -a.list-group-item:focus { - text-decoration: none; - background-color: @list-group-hover-bg; -} - -// Active class on item itself, not parent -a.list-group-item.active { - z-index: 2; // Place active items above their siblings for proper border styling - color: @list-group-active-color; - background-color: @list-group-active-bg; - border-color: @list-group-active-border; - - // Force color to inherit for custom content - .list-group-item-heading { - color: inherit; - } - .list-group-item-text { - color: lighten(@list-group-active-bg, 40%); + // Hover state + &:hover, + &:focus { + text-decoration: none; + background-color: @list-group-hover-bg; } -} -// Chevrons and badges within list items -// ------------------------- + // Active class on item itself, not parent + &.active { + z-index: 2; // Place active items above their siblings for proper border styling + color: @list-group-active-color; + background-color: @list-group-active-bg; + border-color: @list-group-active-border; -.list-group-item > .badge, -.list-group-item > .glyphicon-chevron-right { - float: right; - margin-right: -15px; -} -.list-group-item > .glyphicon + .badge { - margin-right: 5px; + // Force color to inherit for custom content + .list-group-item-heading { + color: inherit; + } + .list-group-item-text { + color: lighten(@list-group-active-bg, 40%); + } + } } diff --git a/less/media.less b/less/media.less index bcba8081c1178fd055eed96dc9a02a6291adac7a..5ad22cd6d540fa378940c97910eabad478b09cba 100644 --- a/less/media.less +++ b/less/media.less @@ -36,11 +36,13 @@ // Media image alignment // ------------------------- -.media > .pull-left { - margin-right: 10px; -} -.media > .pull-right { - margin-left: 10px; +.media { + > .pull-left { + margin-right: 10px; + } + > .pull-right { + margin-left: 10px; + } } diff --git a/less/mixins.less b/less/mixins.less index 24ca797ffd06c7f4a06e0a52929aaac2abb36093..4dbfa83ef5cd6bad7bf65ee4328bae0d36bc9e45 100644 --- a/less/mixins.less +++ b/less/mixins.less @@ -71,7 +71,7 @@ // CSS image replacement // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 .hide-text() { - font: 0/0 a; + font: ~"0/0" a; color: transparent; text-shadow: none; background-color: transparent; @@ -110,62 +110,46 @@ // Transitions .transition(@transition) { -webkit-transition: @transition; - -moz-transition: @transition; - -o-transition: @transition; transition: @transition; } .transition-delay(@transition-delay) { -webkit-transition-delay: @transition-delay; - -moz-transition-delay: @transition-delay; - -o-transition-delay: @transition-delay; transition-delay: @transition-delay; } .transition-duration(@transition-duration) { -webkit-transition-duration: @transition-duration; - -moz-transition-duration: @transition-duration; - -o-transition-duration: @transition-duration; transition-duration: @transition-duration; } // Transformations .rotate(@degrees) { -webkit-transform: rotate(@degrees); - -moz-transform: rotate(@degrees); -ms-transform: rotate(@degrees); - -o-transform: rotate(@degrees); transform: rotate(@degrees); } .scale(@ratio) { -webkit-transform: scale(@ratio); - -moz-transform: scale(@ratio); -ms-transform: scale(@ratio); - -o-transform: scale(@ratio); transform: scale(@ratio); } .translate(@x, @y) { -webkit-transform: translate(@x, @y); - -moz-transform: translate(@x, @y); -ms-transform: translate(@x, @y); - -o-transform: translate(@x, @y); transform: translate(@x, @y); } .skew(@x, @y) { -webkit-transform: skew(@x, @y); - -moz-transform: skew(@x, @y); -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885 - -o-transform: skew(@x, @y); transform: skew(@x, @y); } .translate3d(@x, @y, @z) { -webkit-transform: translate3d(@x, @y, @z); - -moz-transform: translate3d(@x, @y, @z); - -o-transform: translate3d(@x, @y, @z); transform: translate3d(@x, @y, @z); } // Backface visibility // Prevent browsers from flickering when using CSS 3D transforms. -// Default value is `visible`, but can be changed to `hidden +// Default value is `visible`, but can be changed to `hidden` // See git pull https://github.com/dannykeane/bootstrap.git backface-visibility for examples .backface-visibility(@visibility){ -webkit-backface-visibility: @visibility; @@ -175,16 +159,11 @@ // Background clipping .background-clip(@clip) { - -webkit-background-clip: @clip; - -moz-background-clip: @clip; background-clip: @clip; } // Background sizing .background-size(@size) { - -webkit-background-size: @size; - -moz-background-size: @size; - -o-background-size: @size; background-size: @size; } @@ -331,7 +310,7 @@ // -------------------------------------------------- // Short retina mixin for setting background-image and -size -.retina-image(@file-1x, @file-2x, @width-1x, @height-1x) { +.img-retina(@file-1x, @file-2x, @width-1x, @height-1x) { background-image: url("@{file-1x}"); @media @@ -361,6 +340,20 @@ border-bottom: 1px solid @bottom; } +// Alerts +// ------------------------- +.alert-variant(@background, @border, @text-color) { + background-color: @background; + border-color: @border; + color: @text-color; + hr { + border-top-color: darken(@border, 5%); + } + .alert-link { + color: darken(@text-color, 10%); + } +} + // Button psuedo states // ------------------------- // Easily pump out default styles, as well as :hover, :focus, :active, @@ -392,6 +385,18 @@ } } +// Labels +// ------------------------- +.label-variant(@color) { + background-color: @color; + &[href] { + &:hover, + &:focus { + background-color: darken(@color, 10%); + } + } +} + // Navbar vertical align // ------------------------- // Vertically center elements in the navbar. @@ -401,6 +406,15 @@ margin-bottom: ((@navbar-height - @element-height) / 2); } +// Progress bars +// ------------------------- +.progress-bar-variant(@color) { + background-color: @color; + .progress-striped & { + #gradient > .striped(@color); + } +} + // Responsive utilities // ------------------------- // More easily include all the states for responsive-utilities.less. @@ -411,7 +425,12 @@ td& { display: table-cell !important; } } - +.responsive-invisibility() { + display: none !important; + tr& { display: none !important; } + th&, + td& { display: none !important; } +} // Grid System // ----------- @@ -423,8 +442,6 @@ .clearfix(); } -// Make a grid - // Creates a wrapper for a series of columns .make-row() { // Then clear the floated columns @@ -441,6 +458,7 @@ margin-right: (@grid-gutter-width / -2); } } + // Generate the columns .make-column(@columns) { position: relative; @@ -456,6 +474,7 @@ width: percentage((@columns / @grid-columns)); } } + // Generate the column offsets .make-column-offset(@columns) { @media (min-width: @grid-float-breakpoint) { @@ -473,7 +492,22 @@ } } +// Generate the small columns +.make-small-column(@columns) { + position: relative; + float: left; + // Prevent columns from collapsing when empty + min-height: 1px; + // Inner gutter via padding + padding-left: (@grid-gutter-width / 2); + padding-right: (@grid-gutter-width / 2); + @max-width: (@grid-float-breakpoint - 1); + // Calculate width based on number of columns available + @media (max-width: @max-width) { + width: percentage((@columns / @grid-columns)); + } +} // Framework mixins // -------------------------------------------------- @@ -481,6 +515,7 @@ // Generate form validation states .form-field-validation(@text-color: #555, @border-color: #ccc, @background-color: #f5f5f5) { // Color the label text + .help-block, .control-label { color: @text-color; } diff --git a/less/modals.less b/less/modals.less index 144588a7bfea40d015cd1f2c85282cca7990d83b..d7912109738f7b2463900e0cc8cf811fc4980f43 100644 --- a/less/modals.less +++ b/less/modals.less @@ -23,7 +23,6 @@ bottom: 0; left: 0; z-index: @zindex-modal-background; - -webkit-overflow-scrolling: touch; // When fading in the modal, animate it to slide down &.fade { diff --git a/less/navbar.less b/less/navbar.less index b8283601d636b50a73beb1c3f2ff44d0385302b9..c87c8e68c3f82cccd3edb9aa86e91c1b8a2a7353 100644 --- a/less/navbar.less +++ b/less/navbar.less @@ -5,9 +5,10 @@ // Wrapper and base class .navbar { position: relative; + min-height: @navbar-height; // Ensure a navbar always shows (e.g., without a .navbar-brand in collapsed mode) margin-bottom: 20px; - padding-left: @navbar-padding; - padding-right: @navbar-padding; + padding-left: @navbar-padding-horizontal; + padding-right: @navbar-padding-horizontal; background-color: @navbar-bg; border-radius: @border-radius-base; @@ -20,7 +21,6 @@ .navbar-nav { // Space out from .navbar .brand and .btn-navbar when stacked in mobile views - // and outdent nav links so text lines up with logo. margin-top: 10px; margin-bottom: 15px; @@ -30,23 +30,27 @@ color: @navbar-link-color; line-height: 20px; border-radius: @border-radius-base; + &:hover, + &:focus { + color: @navbar-link-hover-color; + background-color: @navbar-link-hover-bg; + } } - > li > a:hover, - > li > a:focus { - color: @navbar-link-hover-color; - background-color: @navbar-link-hover-bg; - } - > .active > a, - > .active > a:hover, - > .active > a:focus { - color: @navbar-link-active-color; - background-color: @navbar-link-active-bg; + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-link-active-color; + background-color: @navbar-link-active-bg; + } } - > .disabled > a, - > .disabled > a:hover, - > .disabled > a:focus { - color: @navbar-link-disabled-color; - background-color: @navbar-link-disabled-bg; + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-link-disabled-color; + background-color: @navbar-link-disabled-bg; + } } // Right aligned contents @@ -96,7 +100,7 @@ max-width: 200px; margin-left: auto; margin-right: auto; - padding: @navbar-padding; + padding: @navbar-padding-vertical @navbar-padding-horizontal; font-size: @font-size-large; font-weight: 500; line-height: @line-height-computed; @@ -115,6 +119,8 @@ position: absolute; top: 10px; right: 10px; + width: 48px; + height: 32px; padding: 8px 12px; background-color: transparent; border: 1px solid #ddd; @@ -168,22 +174,22 @@ } // Remove background color from open dropdown - > .open > a, - > .open > a:hover, - > .open > a:focus { - background-color: @navbar-link-active-bg; - color: @navbar-link-active-color; + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-link-active-bg; + color: @navbar-link-active-color; + .caret { + border-top-color: @navbar-link-active-color; + border-bottom-color: @navbar-link-active-color; + } + } } > .dropdown > a .caret { border-top-color: @navbar-link-color; border-bottom-color: @navbar-link-color; } - > .open > a .caret, - > .open > a:hover .caret, - > .open > a:focus .caret { - border-top-color: @navbar-link-active-color; - border-bottom-color: @navbar-link-active-color; - } } // Right aligned menus need alt position @@ -217,23 +223,28 @@ .navbar-nav { > li > a { color: @navbar-inverse-link-color; + + &:hover, + &:focus { + color: @navbar-inverse-link-hover-color; + background-color: @navbar-inverse-link-hover-bg; + } } - > li > a:hover, - > li > a:focus { - color: @navbar-inverse-link-hover-color; - background-color: @navbar-inverse-link-hover-bg; - } - > .active > a, - > .active > a:hover, - > .active > a:focus { - color: @navbar-inverse-link-active-color; - background-color: @navbar-inverse-link-active-bg; + > .active > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-active-color; + background-color: @navbar-inverse-link-active-bg; + } } - > .disabled > a, - > .disabled > a:hover, - > .disabled > a:focus { - color: @navbar-inverse-link-disabled-color; - background-color: @navbar-inverse-link-disabled-bg; + > .disabled > a { + &, + &:hover, + &:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } } } @@ -251,11 +262,13 @@ // Dropdowns .navbar-nav { - > .open > a, - > .open > a:hover, - > .open > a:focus { - background-color: @navbar-inverse-link-active-bg; - color: @navbar-inverse-link-active-color; + > .open > a { + &, + &:hover, + &:focus { + background-color: @navbar-inverse-link-active-bg; + color: @navbar-inverse-link-active-color; + } } > .dropdown > a:hover .caret { border-top-color: @navbar-inverse-link-hover-color; @@ -265,13 +278,16 @@ border-top-color: @navbar-inverse-link-color; border-bottom-color: @navbar-inverse-link-color; } - > .open > a .caret, - > .open > a:hover .caret, - > .open > a:focus .caret { - border-top-color: @navbar-inverse-link-active-color; - border-bottom-color: @navbar-inverse-link-active-color; + > .open > a { + &, + &:hover, + &:focus { + .caret { + border-top-color: @navbar-inverse-link-active-color; + border-bottom-color: @navbar-inverse-link-active-color; + } + } } - } } @@ -284,7 +300,7 @@ .navbar-brand { float: left; - margin-left: -(@navbar-padding); + margin-left: -(@navbar-padding-horizontal); margin-right: 5px; } .navbar-nav { diff --git a/less/navs.less b/less/navs.less index d42ad3588371120322ef9e6f119f8a6a4d1cf32e..9f671643a775787bddd0ad78306f40c8926b60f8 100644 --- a/less/navs.less +++ b/less/navs.less @@ -7,7 +7,6 @@ // -------------------------------------------------- .nav { - margin-left: 0; margin-bottom: 0; padding-left: 0; // Override default ul/ol list-style: none; @@ -31,13 +30,14 @@ // Disabled state sets text to gray and nukes hover/tab effects &.disabled > a { color: @gray-light; - } - &.disabled > a:hover, - &.disabled > a:focus { - color: @gray-light; - text-decoration: none; - background-color: transparent; - cursor: default; + + &:hover, + &:focus { + color: @gray-light; + text-decoration: none; + background-color: transparent; + cursor: default; + } } // Space the headers out when they follow another list item (link) @@ -47,15 +47,17 @@ } // Open dropdowns - &.open > a, - &.open > a:hover, - &.open > a:focus { - color: #fff; - background-color: @link-color; - border-color: @link-color; - .caret { - border-top-color: #fff; - border-bottom-color: #fff; + &.open > a { + &, + &:hover, + &:focus { + color: #fff; + background-color: @link-color; + border-color: @link-color; + .caret { + border-top-color: #fff; + border-bottom-color: #fff; + } } } @@ -99,14 +101,16 @@ } // Active state, and it's :hover to override normal :hover - &.active > a, - &.active > a:hover, - &.active > a:focus { - color: @gray; - background-color: @body-bg; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; + &.active > a { + &, + &:hover, + &:focus { + color: @gray; + background-color: @body-bg; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; + } } } // pulling this in mainly for less shorthand @@ -134,11 +138,13 @@ } // Active state - &.active > a, - &.active > a:hover, - &.active > a:focus { - color: #fff; - background-color: @component-active-bg; + &.active > a { + &, + &:hover, + &:focus { + color: #fff; + background-color: @component-active-bg; + } } } } @@ -189,22 +195,6 @@ -// Nav headers (for dropdowns and lists) -// ------------------------- - -.nav-header { - display: block; - padding: 3px 15px; - font-size: @font-size-mini; - font-weight: bold; - line-height: @line-height-base; - color: @gray-light; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - text-transform: uppercase; -} - - - // Tabbable tabs // ------------------------- @@ -218,9 +208,11 @@ .pill-content > .pill-pane { display: none; } -.tab-content > .active, -.pill-content > .active { - display: block; +.tab-content, +.pill-content { + > .active { + display: block; + } } diff --git a/less/pagination.less b/less/pagination.less index 320387a67d4955d6062c6dc4ebc237e7aeb76fd6..45c53ebcef33e3b0792e9ae223404032286c4680 100644 --- a/less/pagination.less +++ b/less/pagination.less @@ -6,83 +6,103 @@ padding-left: 0; margin: @line-height-computed 0; border-radius: @border-radius-base; + + > li { + display: inline; // Remove list-style and block-level defaults + > a, + > span { + float: left; // Collapse white-space + padding: 4px 12px; + line-height: @line-height-base; + text-decoration: none; + background-color: @pagination-bg; + border: 1px solid @pagination-border; + border-left-width: 0; + } + &:first-child { + > a, + > span { + border-left-width: 1px; + .border-left-radius(@border-radius-base); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius-base); + } + } + } + + > li > a:hover, + > li > a:focus, + > .active > a, + > .active > span { + background-color: @pagination-active-bg; + } + > .active > a, + > .active > span { + color: @gray-light; + cursor: default; + } + + > .disabled { + > span, + > a, + > a:hover, + > a:focus { + color: @gray-light; + background-color: @pagination-bg; + cursor: default; + } + } } -.pagination > li { - display: inline; // Remove list-style and block-level defaults -} -.pagination > li > a, -.pagination > li > span { - float: left; // Collapse white-space - padding: 4px 12px; - line-height: @line-height-base; - text-decoration: none; - background-color: @pagination-bg; - border: 1px solid @pagination-border; - border-left-width: 0; -} -.pagination > li > a:hover, -.pagination > li > a:focus, -.pagination > .active > a, -.pagination > .active > span { - background-color: @pagination-active-bg; -} -.pagination > .active > a, -.pagination > .active > span { - color: @gray-light; - cursor: default; -} -.pagination > .disabled > span, -.pagination > .disabled > a, -.pagination > .disabled > a:hover, -.pagination > .disabled > a:focus { - color: @gray-light; - background-color: @pagination-bg; - cursor: default; -} -.pagination > li:first-child > a, -.pagination > li:first-child > span { - border-left-width: 1px; - .border-left-radius(@border-radius-base); -} -.pagination > li:last-child > a, -.pagination > li:last-child > span { - .border-right-radius(@border-radius-base); -} - // Sizing // -------------------------------------------------- // Large .pagination-large { - > li > a, - > li > span { - padding: @padding-large-vertical @padding-large-horizontal; - font-size: @font-size-large; - } - > li:first-child > a, - > li:first-child > span { - .border-left-radius(@border-radius-large); - } - > li:last-child > a, - > li:last-child > span { - .border-right-radius(@border-radius-large); + > li { + > a, + > span { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; + } + &:first-child { + > a, + > span { + .border-left-radius(@border-radius-large); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius-large); + } + } } } // Small .pagination-small { - > li > a, - > li > span { - padding: @padding-small-vertical @padding-small-horizontal; - font-size: @font-size-small; - } - > li:first-child > a, - > li:first-child > span { - .border-left-radius(@border-radius-small); - } - > li:last-child > a, - > li:last-child > span { - .border-right-radius(@border-radius-small); + > li { + > a, + > span { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + } + &:first-child { + > a, + > span { + .border-left-radius(@border-radius-small); + } + } + &:last-child { + > a, + > span { + .border-right-radius(@border-radius-small); + } + } } } diff --git a/less/popovers.less b/less/popovers.less index 2c79da9a0389b5925b50f799b0e0cf57042c4ca8..33488e885ee139fa81f2df9ff541d4ae4b97fc7b 100644 --- a/less/popovers.less +++ b/less/popovers.less @@ -50,14 +50,16 @@ // // .arrow is outer, .arrow:after is inner -.popover .arrow, -.popover .arrow:after { - position: absolute; - display: block; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; +.popover .arrow { + &, + &:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; + } } .popover .arrow { border-width: @popover-arrow-outer-width; diff --git a/less/print.less b/less/print.less index 64c1ff9fa919997b38e7e26b0de59415fd64d780..1e4bffe3fa571adfa08c8601f4f2a04fa13e48d2 100644 --- a/less/print.less +++ b/less/print.less @@ -71,15 +71,30 @@ .navbar { display: none; } - .table td, - .table th { - background-color: #fff !important; - } - .btn > .caret, - .dropup > .btn > .caret { - border-top-color: #000 !important; + .table { + td, + th { + background-color: #fff !important; + } + } + .btn, + .dropup > .btn { + > .caret { + border-top-color: #000 !important; + } } .label { border: 1px solid #000; } + + .table { + border-collapse: collapse !important; + } + .table-bordered { + th, + td { + border: 1px solid #ddd !important; + } + } + } diff --git a/less/progress-bars.less b/less/progress-bars.less index e963fa9681fff6244020a508436e76c1526e320b..59f81048f0838fe2c64682cb1aef85bb9dcd3c28 100644 --- a/less/progress-bars.less +++ b/less/progress-bars.less @@ -87,32 +87,20 @@ // Danger (red) .progress-bar-danger { - background-color: @progress-bar-danger-bg; - .progress-striped & { - #gradient > .striped(@progress-bar-danger-bg); - } + .progress-bar-variant(@progress-bar-danger-bg); } // Success (green) .progress-bar-success { - background-color: @progress-bar-success-bg; - .progress-striped & { - #gradient > .striped(@progress-bar-success-bg); - } + .progress-bar-variant(@progress-bar-success-bg); } // Warning (orange) .progress-bar-warning { - background-color: @progress-bar-warning-bg; - .progress-striped & { - #gradient > .striped(@progress-bar-warning-bg); - } + .progress-bar-variant(@progress-bar-warning-bg); } // Info (teal) .progress-bar-info { - background-color: @progress-bar-info-bg; - .progress-striped & { - #gradient > .striped(@progress-bar-info-bg); - } + .progress-bar-variant(@progress-bar-info-bg); } diff --git a/less/responsive-utilities.less b/less/responsive-utilities.less index 21e5d7556dc16127b0f83e15269c5c953dafb55c..38dd9639afbf93b53437aaa515c9df1f51101dc5 100644 --- a/less/responsive-utilities.less +++ b/less/responsive-utilities.less @@ -36,13 +36,19 @@ // Visibility utilities // For Phones -.visible-sm { +.visible-sm { .responsive-visibility(); } -.visible-md { display: none !important; } -.visible-lg { display: none !important; } +.visible-md { + .responsive-invisibility(); +} +.visible-lg { + .responsive-invisibility(); +} -.hidden-sm { display: none !important; } +.hidden-sm { + .responsive-invisibility(); +} .hidden-md { .responsive-visibility(); } @@ -53,16 +59,22 @@ // Tablets & small desktops only @media (min-width: @screen-tablet) and (max-width: @screen-tablet-max) { - .visible-sm { display: none !important; } + .visible-sm { + .responsive-invisibility(); + } .visible-md { .responsive-visibility(); } - .visible-lg { display: none !important; } + .visible-lg { + .responsive-invisibility(); + } .hidden-sm { .responsive-visibility(); } - .hidden-md { display: none !important; } + .hidden-md { + .responsive-invisibility(); + } .hidden-lg { .responsive-visibility(); } @@ -70,8 +82,12 @@ // For desktops @media (min-width: @screen-desktop) { - .visible-sm { display: none !important; } - .visible-md { display: none !important; } + .visible-sm { + .responsive-invisibility(); + } + .visible-md { + .responsive-invisibility(); + } .visible-lg { .responsive-visibility(); } @@ -82,16 +98,22 @@ .hidden-md { .responsive-visibility(); } - .hidden-lg { display: none !important; } + .hidden-lg { + .responsive-invisibility(); + } } // Print utilities -.visible-print { display: none !important; } +.visible-print { + .responsive-invisibility(); +} .hidden-print { } @media print { .visible-print { .responsive-visibility(); } - .hidden-print { display: none !important; } + .hidden-print { + .responsive-invisibility(); + } } diff --git a/less/scaffolding.less b/less/scaffolding.less index 79447c3f5b1a85ee1950d92b2138ea403631467b..b6128dc5d1afdf17f0b17d87d335278dd047dd1c 100644 --- a/less/scaffolding.less +++ b/less/scaffolding.less @@ -64,14 +64,14 @@ img { // Responsive images (ensure images don't scale beyond their parents) .img-responsive { - display: block; + display: inline-block; max-width: 100%; // Part 1: Set a maximum relative to the parent height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching } // Rounded corners .img-rounded { - border-radius: 6px; + border-radius: @border-radius-large; } // Image thumbnails @@ -81,3 +81,15 @@ img { .img-circle { border-radius: 500px; // crank the border-radius so it works with most reasonably sized images } + + +// Horizontal rules +// ------------------------- + +hr { + margin-top: @line-height-computed; + margin-bottom: @line-height-computed; + border: 0; + border-top: 1px solid @hr-border; +} + diff --git a/less/tables.less b/less/tables.less index 88481a9444c87430ecc066b997e1a150c9337a7c..b742897c17aa4d83849d7b21abf0f734cce40fd6 100644 --- a/less/tables.less +++ b/less/tables.less @@ -19,27 +19,32 @@ th { width: 100%; margin-bottom: @line-height-computed; // Cells - thead > tr > th, - tbody > tr > th, - thead > tr > td, - tbody > tr > td { - padding: 8px; - line-height: @line-height-base; - vertical-align: top; - border-top: 1px solid @table-border-color; + thead, + tbody, + tfoot { + > tr { + > th, + > td { + padding: @table-cell-padding; + line-height: @line-height-base; + vertical-align: top; + border-top: 1px solid @table-border-color; + } + } } // Bottom align for column headings thead > tr > th { vertical-align: bottom; } // Remove top border from thead by default - caption + thead tr:first-child th, - caption + thead tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + thead tr:first-child td, - thead:first-child tr:first-child th, - thead:first-child tr:first-child td { - border-top: 0; + caption + thead, + colgroup + thead, + thead:first-child { + tr:first-child { + th, td { + border-top: 0; + } + } } // Account for multiple tbody instances tbody + tbody { @@ -58,11 +63,15 @@ th { // ------------------------------- .table-condensed { - thead > tr > th, - tbody > tr > th, - thead > tr > td, - tbody > tr > td { - padding: 4px 5px; + thead, + tbody, + tfoot { + > tr { + > th, + > td { + padding: @table-condensed-cell-padding; + } + } } } @@ -77,11 +86,15 @@ th { border-left: 0; border-radius: @border-radius-base; - > thead > tr > th, - > tbody > tr > th, - > thead > tr > td, - > tbody > tr > td { - border-left: 1px solid @table-border-color; + > thead, + > tbody, + > tfoot { + > tr { + > th, + > td { + border-left: 1px solid @table-border-color; + } + } } // Prevent a double border > caption + thead > tr:first-child th, @@ -95,33 +108,31 @@ th { > tbody:first-child > tr:first-child td { border-top: 0; } - // For first th/td in the first row in the first thead or tbody - > thead:first-child > tr:first-child > th:first-child, - > tbody:first-child > tr:first-child > td:first-child, - > tbody:first-child > tr:first-child > th:first-child { - border-top-left-radius: @border-radius-base; - } - // For last th/td in the first row in the first thead or tbody - > thead:first-child > tr:first-child > th:last-child, - > tbody:first-child > tr:first-child > td:last-child, - > tbody:first-child > tr:first-child > th:last-child { - border-top-right-radius: @border-radius-base; - } - // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot - > thead:last-child > tr:last-child > th:first-child, - > tbody:last-child > tr:last-child > td:first-child, - > tbody:last-child > tr:last-child > th:first-child, - > tfoot:last-child > tr:last-child > td:first-child, - > tfoot:last-child > tr:last-child > th:first-child { - border-bottom-left-radius: @border-radius-base; - } - // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot - > thead:last-child > tr:last-child > th:last-child, - > tbody:last-child > tr:last-child > td:last-child, - > tbody:last-child > tr:last-child > th:last-child, - > tfoot:last-child > tr:last-child > td:last-child, - > tfoot:last-child > tr:last-child > th:last-child { - border-bottom-right-radius: @border-radius-base; + > thead:first-child > tr:first-child > th, + > tbody:first-child > tr:first-child > td, + > tbody:first-child > tr:first-child > th { + // For first th/td in the first row in the first thead or tbody + &:first-child{ + border-top-left-radius: @border-radius-base; + } + // For last th/td in the first row in the first thead or tbody + &:last-child{ + border-top-right-radius: @border-radius-base; + } + } + > thead:last-child > tr:last-child > th, + > tbody:last-child > tr:last-child > td, + > tbody:last-child > tr:last-child > th, + > tfoot:last-child > tr:last-child > td, + > tfoot:last-child > tr:last-child > th { + // For first th/td (can be either) in the last row in the last thead, tbody, and tfoot + &:first-child{ + border-bottom-left-radius: @border-radius-base; + } + // For last th/td (can be either) in the last row in the last thead, tbody, and tfoot + &:last-child{ + border-bottom-right-radius: @border-radius-base; + } } // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot @@ -133,19 +144,18 @@ th { } // Special fixes to round the left border on the first td/th - > caption + thead > tr:first-child > th:first-child, - > caption + tbody > tr:first-child > td:first-child, - > colgroup + thead > tr:first-child > th:first-child, - > colgroup + tbody > tr:first-child > td:first-child { - border-top-left-radius: @border-radius-base; - } - > caption + thead > tr:first-child > th:last-child, - > caption + tbody > tr:first-child > td:last-child, - > colgroup + thead > tr:first-child > th:last-child, - > colgroup + tbody > tr:first-child > td:last-child { - border-top-right-radius: @border-radius-base; + > caption, + > colgroup { + + thead > tr:first-child > th, + + tbody > tr:first-child > td { + &:first-child { + border-top-left-radius: @border-radius-base; + } + &:last-child { + border-top-right-radius: @border-radius-base; + } + } } - } @@ -156,9 +166,11 @@ th { // Default zebra-stripe styles (alternating gray and transparent backgrounds) .table-striped { > tbody { - > tr:nth-child(odd) > td, - > tr:nth-child(odd) > th { - background-color: @table-bg-accent; + > tr:nth-child(odd) { + > td, + > th { + background-color: @table-bg-accent; + } } } } @@ -171,9 +183,11 @@ th { // Placed here since it has to come after the potential zebra striping .table-hover { > tbody { - > tr:hover > td, - > tr:hover > th { - background-color: @table-bg-hover; + > tr:hover { + > td, + > th { + background-color: @table-bg-hover; + } } } } @@ -188,10 +202,14 @@ table col[class^="col-"] { float: none; display: table-column; } -table td[class^="col-"], -table th[class^="col-"] { - float: none; - display: table-cell; +table { + td, + th { + &[class^="col-"] { + float: none; + display: table-cell; + } + } } @@ -201,6 +219,11 @@ table th[class^="col-"] { // Exact selectors below required to override .table-striped .table > tbody > tr { + > td.active, + > th.active, + &.active > td { + background-color: @table-bg-hover; + } > td.success, > th.success, &.success > td { diff --git a/less/thumbnails.less b/less/thumbnails.less index b15b8d25abb8a29cc1e76a6ae1601b4119a96530..1f896708d8a52a7041d476bc7e1c0b43d0ef3c79 100644 --- a/less/thumbnails.less +++ b/less/thumbnails.less @@ -17,15 +17,12 @@ border-radius: @thumbnail-border-radius; .transition(all .2s ease-in-out); } -.thumbnail > img, -.img-thumbnail { - .img-responsive(); -} .thumbnail { display: block; } +.thumbnail > img, .img-thumbnail { - display: inline-block; + .img-responsive(); } // Add a hover state for linked versions only diff --git a/less/tooltip.less b/less/tooltip.less index 790eb1cd3e0b5a7d8c9569b308b540c7033e52e5..fef430900a3e9b1d5d7d46ed64c08996e7be4a13 100644 --- a/less/tooltip.less +++ b/less/tooltip.less @@ -9,7 +9,7 @@ z-index: @zindex-tooltip; display: block; visibility: visible; - font-size: @font-size-mini; + font-size: @font-size-small; line-height: 1.4; .opacity(0); diff --git a/less/type.less b/less/type.less index 9892d558901f2cbba46a9232e2a3e01e5b100377..9986124dcd600141bf877bae8bdcb403cf1d9ee2 100644 --- a/less/type.less +++ b/less/type.less @@ -107,12 +107,10 @@ ul, ol { margin-top: 0; margin-bottom: (@line-height-computed / 2); -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; + ul, + ol{ + margin-bottom: 0; + } } // List options @@ -164,15 +162,6 @@ dd { // MISC // ---- -// Horizontal rules -hr { - margin: @line-height-computed 0; - border: 0; - border-top: 1px solid @hr-border; - border-bottom: 1px solid #fff; - border-bottom: 1px solid rgba(255,255,255,.5); -} - // Abbreviations and acronyms abbr[title], // Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 @@ -203,7 +192,7 @@ blockquote { line-height: @line-height-base; color: @gray-light; &:before { - content: '\2014 \00A0'; + content: '\2014 \00A0';// EM DASH, NBSP } } @@ -223,7 +212,7 @@ blockquote { content: ''; } &:after { - content: '\00A0 \2014'; + content: '\00A0 \2014';// NBSP, EM DASH } } } diff --git a/less/variables.less b/less/variables.less index e01d3062d1429f1172b627dd86ddfe1b81dd5e32..321590f5383e3d182f1bc8fa609dd15be7feba69 100644 --- a/less/variables.less +++ b/less/variables.less @@ -6,7 +6,6 @@ // Global values // -------------------------------------------------- - // Grays // ------------------------- @@ -48,7 +47,6 @@ @font-size-base: 14px; @font-size-large: ceil(@font-size-base * 1.25); // ~18px @font-size-small: ceil(@font-size-base * 0.85); // ~12px -@font-size-mini: ceil(@font-size-base * 0.75); // ~11px @line-height-base: 1.428571429; // 20/14 @line-height-computed: floor(@font-size-base * @line-height-base); // ~20px @@ -81,9 +79,13 @@ // Tables // ------------------------- +@table-cell-padding: 8px; +@table-condensed-cell-padding: 5px; + @table-bg: transparent; // overall background-color @table-bg-accent: #f9f9f9; // for striping -@table-bg-hover: #f5f5f5; // for hover +@table-bg-hover: #f5f5f5; +@table-bg-active: @table-bg-hover; @table-border-color: #ddd; // table and cell border @@ -173,7 +175,8 @@ @navbar-height: 50px; @navbar-color: #777; @navbar-bg: #eee; -@navbar-padding: floor(@grid-gutter-width / 2); // ~15px +@navbar-padding-horizontal: floor(@grid-gutter-width / 2); // ~15px +@navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); // Navbar links @navbar-link-color: #777; @@ -366,6 +369,28 @@ @well-bg: #f5f5f5; +// Accordion +// ------------------------- +@accordion-border-color: #e5e5e5; + + +// Badges +// ------------------------- +@badge-color: #fff; +@badge-link-hover-color: #fff; + +@badge-bg: #f5f5f5; +@badge-active-color: @link-color; +@badge-active-bg: #fff; + + +// Breadcrumbs +// ------------------------- +@breadcrumb-bg: #f5f5f5; +@breadcrumb-color: #ccc; +@breadcrumb-active-color: @gray-light; + + // Miscellaneous // ------------------------- diff --git a/package.json b/package.json index 8d3f14160f8b9f1cd24734965593e2d821f27a5a..af9fb2d9f003c85a68b83f88a6522d5fefe61a47 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ , "keywords": ["bootstrap", "css"] , "homepage": "http://twitter.github.com/bootstrap/" , "author": "Twitter Inc." - , "scripts": { "test": "make test" } + , "scripts": { "test": "grunt test" } , "repository": { "type": "git" , "url": "https://github.com/twitter/bootstrap.git" @@ -17,9 +17,14 @@ } ] , "devDependencies": { - "uglify-js": "1.3.4" - , "jshint": "2.1.2" - , "recess": "1.1.7" - , "connect": "2.1.3" + "grunt": "~0.4.1" + , "grunt-contrib-connect": "~0.3.0" + , "grunt-contrib-clean": "~0.5.0" + , "grunt-contrib-concat": "~0.3.0" + , "grunt-contrib-jshint": "~0.6.0" + , "grunt-contrib-uglify": "~0.2.2" + , "grunt-contrib-qunit": "~0.2.2" + , "grunt-contrib-watch": "~0.5.1" + , "grunt-recess": "~0.3.3" } }