diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000000000000000000000000000000000..ad9d6beae3925fee183007abccb57d3643de8f88 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +# editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[Makefile] +indent_style = tab diff --git a/.gitignore b/.gitignore index 3b10ffb3848326714e44aff2c3c6b1c1f1e4fff2..218ceb9f3325f872dde992670fbb26b3ffd02e6d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,7 @@ +# Ignore compiled docs +_gh_pages +_site + # Numerous always-ignore extensions *.diff *.err @@ -10,6 +14,7 @@ *.vi *~ *.sass-cache +*.ruby-version # OS or Editor folders .DS_Store diff --git a/.travis.yml b/.travis.yml index b8e1f17207d7935b9c6cebd65bbdacd81e0f569e..2d26206d58cbb7c8fc894e21646b93fc1aabf2d9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,3 @@ language: node_js node_js: - - 0.6 \ No newline at end of file + - 0.6 diff --git a/CHANGELOG.md b/CHANGELOG.md index 154fb2c52885522300a92e3503197940e6f938fd..c7609beab8e99347e4de945b824b5c8155fd1f09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -196,7 +196,7 @@ Running makefile now require JSHint and Recess. - Add jshint support - Add travis-ci support w/ headless phantom integration -- Replace UA sniffing in bootstrap-transitions.js +- Replace UA sniffing in transitions.js - Add MSTransitionEnd event to transition plugin - Fix pause method in carousel (shouldn't restart when hovering over controls) - Fix crazy opera bug #1776 @@ -357,4 +357,4 @@ Complete rewrite of the library. For full details, head to the upgrading doc at - Bug fixes ## v1.0.0 -- **Initial release** \ No newline at end of file +- **Initial release** diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 463bfca781f6615e308cff94973699ebf5a625ad..43c716180230e03195e8ac414f46acab5180565e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -23,12 +23,6 @@ We only accept issues that are bug reports or feature requests. Bugs must be iso -## Notes on the repo - -As of v2.0.0, Bootstrap's documentation is powered by Mustache templates and built via `make` before each commit and release. This was done to enable internationalization (translation) in a future release by uploading our strings to the [Twitter Translation Center](http://translate.twttr.com/). Any edits to the docs should be first done in the Mustache files and then recompiled into the HTML. - - - ## Pull requests - Try to submit pull requests against the latest `*-wip` branch for easier merging @@ -40,16 +34,16 @@ As of v2.0.0, Bootstrap's documentation is powered by Mustache templates and bui -## Coding standards: HTML +## Coding standards + +### HTML - Two spaces for indentation, never tabs - Double quotes only, never single quotes - Always use proper indentation - Use tags and elements appropriate for an HTML5 doctype (e.g., self-closing tags) - - -## Coding standards: CSS +### CSS - Adhere to the [Recess CSS property order](http://markdotto.com/2011/11/29/css-property-order/) - Multiple-line approach (one property and value per line) @@ -58,9 +52,7 @@ As of v2.0.0, Bootstrap's documentation is powered by Mustache templates and bui - For multiple, comma-separated selectors, place each selector on it's own line - Attribute selectors, like `input[type="text"]` should always wrap the attribute's value in double quotes, for consistency and safety (see this [blog post on unquoted attribute values](http://mathiasbynens.be/notes/unquoted-attribute-values) that can lead to XSS attacks). - - -## Coding standards: JS +### JS - No semicolons - Comma first diff --git a/LICENSE b/LICENSE index 2bb9ad240fa04c8cf706a4901c4807878e90c2dc..d9a10c0d8e868ebf8da0b3dc95bb0be634c34bfe 100644 --- a/LICENSE +++ b/LICENSE @@ -173,4 +173,4 @@ incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. - END OF TERMS AND CONDITIONS \ No newline at end of file + END OF TERMS AND CONDITIONS diff --git a/Makefile b/Makefile index 3150adae5c183068a512d3a32c4132086e6a4370..40f5a44f06d4d9eb1ba1e607611b7c4eda890638 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,9 @@ -BOOTSTRAP = ./docs/assets/css/bootstrap.css -BOOTSTRAP_LESS = ./less/bootstrap.less -BOOTSTRAP_RESPONSIVE = ./docs/assets/css/bootstrap-responsive.css -BOOTSTRAP_RESPONSIVE_LESS = ./less/responsive.less +BOOTSTRAP ?= ./docs/assets/css/bootstrap.css +BOOTSTRAP_LESS ?= ./less/bootstrap.less DATE=$(shell date +%I:%M%p) -CHECK=\033[32m✔\033[39m -HR=\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\# +CHECK=\033[32m✔ Done\033[39m +HR=\033[37m--------------------------------------------------\033[39m +PATH := ./node_modules/.bin:$(PATH) # @@ -12,39 +11,39 @@ HR=\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\#\ # build: - @echo "\n${HR}" - @echo "Building Bootstrap..." - @echo "${HR}\n" - @./node_modules/.bin/jshint js/*.js --config js/.jshintrc - @./node_modules/.bin/jshint js/tests/unit/*.js --config js/.jshintrc - @echo "Running JSHint on javascript... ${CHECK} Done" - @./node_modules/.bin/recess --compile ${BOOTSTRAP_LESS} > ${BOOTSTRAP} - @./node_modules/.bin/recess --compile ${BOOTSTRAP_RESPONSIVE_LESS} > ${BOOTSTRAP_RESPONSIVE} - @echo "Compiling LESS with Recess... ${CHECK} Done" - @node docs/build - @cp img/* docs/assets/img/ - @cp js/*.js docs/assets/js/ + @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 fonts/* docs/assets/fonts/ @cp js/tests/vendor/jquery.js docs/assets/js/ - @echo "Compiling documentation... ${CHECK} Done" - @cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js js/bootstrap-affix.js > docs/assets/js/bootstrap.js - @./node_modules/.bin/uglifyjs -nc docs/assets/js/bootstrap.js > docs/assets/js/bootstrap.min.tmp.js - @echo "/**\n* Bootstrap.js v2.3.1 by @fat & @mdo\n* Copyright 2012 Twitter, Inc.\n* http://www.apache.org/licenses/LICENSE-2.0.txt\n*/" > docs/assets/js/copyright.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 "Compiling and minifying javascript... ${CHECK} Done" - @echo "\n${HR}" - @echo "Bootstrap successfully built at ${DATE}." - @echo "${HR}\n" - @echo "Thanks for using Bootstrap," - @echo "<3 @mdo and @fat\n" + @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: - ./node_modules/.bin/jshint js/*.js --config js/.jshintrc - ./node_modules/.bin/jshint js/tests/unit/*.js --config js/.jshintrc + 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` @@ -62,7 +61,7 @@ clean: # recess & uglifyjs are required # -bootstrap: bootstrap-img bootstrap-css bootstrap-js +bootstrap: bootstrap-fonts bootstrap-css bootstrap-js # @@ -72,48 +71,34 @@ bootstrap-js: bootstrap/js/*.js bootstrap/js/*.js: js/*.js mkdir -p bootstrap/js - cat js/bootstrap-transition.js js/bootstrap-alert.js js/bootstrap-button.js js/bootstrap-carousel.js js/bootstrap-collapse.js js/bootstrap-dropdown.js js/bootstrap-modal.js js/bootstrap-tooltip.js js/bootstrap-popover.js js/bootstrap-scrollspy.js js/bootstrap-tab.js js/bootstrap-typeahead.js js/bootstrap-affix.js > bootstrap/js/bootstrap.js - ./node_modules/.bin/uglifyjs -nc bootstrap/js/bootstrap.js > bootstrap/js/bootstrap.min.tmp.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 COMPLILE +# CSS COMPILE # bootstrap-css: bootstrap/css/*.css bootstrap/css/*.css: less/*.less mkdir -p bootstrap/css - ./node_modules/.bin/recess --compile ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.css - ./node_modules/.bin/recess --compress ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.min.css - ./node_modules/.bin/recess --compile ${BOOTSTRAP_RESPONSIVE_LESS} > bootstrap/css/bootstrap-responsive.css - ./node_modules/.bin/recess --compress ${BOOTSTRAP_RESPONSIVE_LESS} > bootstrap/css/bootstrap-responsive.min.css + recess --compile ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.css + recess --compress ${BOOTSTRAP_LESS} > bootstrap/css/bootstrap.min.css # -# IMAGES +# FONTS # -bootstrap-img: bootstrap/img/* +bootstrap-fonts: bootstrap/fonts/* -bootstrap/img/*: img/* - mkdir -p bootstrap/img - cp img/* bootstrap/img/ +bootstrap/fonts/*: fonts/* + mkdir -p bootstrap/fonts + cp fonts/* bootstrap/fonts/ -# -# MAKE FOR GH-PAGES 4 FAT & MDO ONLY (O_O ) -# - -gh-pages: bootstrap docs - rm -f docs/assets/bootstrap.zip - zip -r docs/assets/bootstrap.zip bootstrap - rm -r bootstrap - rm -f ../bootstrap-gh-pages/assets/bootstrap.zip - node docs/build production - cp -r docs/* ../bootstrap-gh-pages - # # WATCH LESS FILES # @@ -122,5 +107,11 @@ 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-img bootstrap-css bootstrap-js \ No newline at end of file +.PHONY: docs watch gh-pages bootstrap-img bootstrap-css bootstrap-js diff --git a/README.md b/README.md index 45b151e15fd4fd644aa9d829bb9c3fed7c807470..3d9dc7f60cade219df6c0c7ec5c7bb639c6fce4b 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,8 @@ -<a href="http://getbootstrap.com"> - <img src="http://twitter.github.com/bootstrap/assets/img/bootstrap-docs-readme.png" width="100px"> -</a> - -# [Bootstrap v2.3.1](http://twitter.github.com/bootstrap) [](http://travis-ci.org/twitter/bootstrap) +# [Bootstrap v3.0.0](http://getbootstrap.com) [](http://travis-ci.org/twitter/bootstrap) Bootstrap is a sleek, intuitive, and powerful front-end framework for faster and easier web development, created and maintained by [Mark Otto](http://twitter.com/mdo) and [Jacob Thornton](http://twitter.com/fat). -To get started, checkout [http://getbootstrap.com](http://getbootstrap.com)! +To get started, check out [http://getbootstrap.com](http://getbootstrap.com)! @@ -16,73 +12,105 @@ 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 Twitter's [Bower](http://twitter.github.com/bower): `bower install bootstrap`. +* Install with [Bower](http://bower.io): `bower install bootstrap`. +Read the [Getting Started page](http://getbootstrap.com/getting-started/) for information on the framework contents, templates and examples, and more. -## Versioning -For transparency and insight into our release cycle, and for striving to maintain backward compatibility, Bootstrap will be maintained under the Semantic Versioning guidelines as much as possible. +## Bugs and feature requests -Releases will be numbered with the following format: +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/). -`<major>.<minor>.<patch>` -And constructed with the following guidelines: -* Breaking backward compatibility bumps the major (and resets the minor and patch) -* New additions without breaking backward compatibility bumps the minor (and resets the patch) -* Bug fixes and misc changes bumps the patch +## Documentation -For more information on SemVer, please visit [http://semver.org/](http://semver.org/). +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. +### Running documentation locally +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à . -## Bug tracker +Learn more about using Jekyll by reading their [documentation](http://jekyllrb.com/docs/home/). -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/). +### Documentation for previous releases +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. - -## Community - -Keep track of development and community news. - -* Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). -* Read and subscribe to the [The Official Twitter Bootstrap Blog](http://blog.getbootstrap.com). -* Have a question that's not a feature request or bug report? [Ask on the mailing list.](http://groups.google.com/group/twitter-bootstrap) -* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. +For previous releases, documentation is available for [download via Git tags](https://github.com/twitter/bootstrap/tags). ## Compiling CSS and JavaScript -Bootstrap includes a [makefile](Makefile) with convenient methods for working with the framework. Before getting started, be sure to install [the necessary local dependencies](package.json): +Bootstrap includes a [makefile](Makefile) with convenient methods for working with the framework. Before getting started, install [the necessary local dependencies](package.json): ``` $ npm install ``` -When completed, you'll be able to run the various make commands provided: +When completed, you'll be able to run the various make commands provided. + +### Available makefile commands -#### build - `make` -Runs the recess compiler to rebuild the `/less` files and compiles the docs. Requires recess and uglify-js. +#### Build - `make` +`make` runs the Recess compiler to rebuild the `/less` files and compile the docs. **Requires recess and uglify-js.** -#### test - `make test` -Runs jshint and qunit tests headlessly in [phantomjs](http://code.google.com/p/phantomjs/) (used for ci). Depends on having phantomjs installed. +#### Compile CSS, JS, and fonts - `make bootstrap` +`make bootstrap` creates the `/bootstrap` directory with compiled files. **Requires recess and uglify-js.** -#### watch - `make watch` -This is a convenience method for watching just Less files and automatically building them whenever you save. Requires the Watchr gem. +#### Tests - `make test` +Runs jshint and qunit tests headlessly in [phantomjs](http://code.google.com/p/phantomjs/) (used for ci). **Requires phantomjs.** -Should you encounter problems with installing dependencies or running the makefile commands, be sure to first uninstall any previous versions (global and local) you may have installed, and then rerun `npm install`. +#### Watch - `make watch` +This is a convenience method for watching just Less files and automatically building them whenever you save. **Requires the watchr gem.** + +### 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`. ## Contributing -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). +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). + +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). + + + +## Community + +Keep track of development and community news. + +* Follow [@twbootstrap on Twitter](http://twitter.com/twbootstrap). +* Read and subscribe to the [The Official Twitter Bootstrap Blog](http://blog.getbootstrap.com). +* Have a question that's not a feature request or bug report? [Ask on the mailing list.](http://groups.google.com/group/twitter-bootstrap) +* Chat with fellow Bootstrappers in IRC. On the `irc.freenode.net` server, in the `##twitter-bootstrap` channel. -Thanks! + + + +## Versioning + +For transparency and insight into our release cycle, and for striving to maintain backward compatibility, Bootstrap will be maintained under the Semantic Versioning guidelines as much as possible. + +Releases will be numbered with the following format: + +`<major>.<minor>.<patch>` + +And constructed with the following guidelines: + +* Breaking backward compatibility bumps the major (and resets the minor and patch) +* New additions without breaking backward compatibility bumps the minor (and resets the patch) +* Bug fixes and misc changes bumps the patch + +For more information on SemVer, please visit [http://semver.org/](http://semver.org/). @@ -102,16 +130,4 @@ Thanks! ## Copyright and license -Copyright 2012 Twitter, Inc. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this work except in compliance with the License. -You may obtain a copy of the License in the LICENSE file, or at: - - [http://www.apache.org/licenses/LICENSE-2.0](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. +Copyright 2012 Twitter, Inc under [the Apache 2.0 license](LICENSE). diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000000000000000000000000000000000000..d999358724617da06f15cc12f19f146b6d246107 --- /dev/null +++ b/_config.yml @@ -0,0 +1,12 @@ +# Dependencies +markdown: rdiscount +pygments: true + +# Permalinks +permalink: pretty + +# Server +source: ./docs +destination: ./_gh_pages +port: 9001 +url: http://getbootstrap.dev:9001 diff --git a/component.json b/bower.json similarity index 86% rename from component.json rename to bower.json index 51940e4d02e1850e1bedca3e6f7e2f9033d4831b..f246145ee20b533ebf6f2cae235c68c13456adea 100644 --- a/component.json +++ b/bower.json @@ -1,8 +1,8 @@ { "name": "bootstrap", - "version": "2.3.1", + "version": "3.0.0", "main": ["./docs/assets/js/bootstrap.js", "./docs/assets/css/bootstrap.css"], "dependencies": { "jquery": "~1.8.0" } -} \ No newline at end of file +} diff --git a/composer.json b/composer.json index abde63128e6f09103539a591d4a6c4d625e75b3a..aa96a05fd6a3daefeef8745c4877d1f1e559e2a8 100644 --- a/composer.json +++ b/composer.json @@ -2,8 +2,19 @@ "name": "twitter/bootstrap" , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." , "keywords": ["bootstrap", "css"] - , "homepage": "http://twitter.github.com/bootstrap/" - , "author": "Twitter Inc." + , "homepage": "http://getbootstrap.com" + , "authors": [ + { + "name": "Mark Otto", + "email": "markdotto@gmail.com" + }, + { + "name": "Jacob Thornton", + "email": "jacobthornton@gmail.com" + } + ] + , "support": { + "issues": "https://github.com/twitter/bootstrap/issues" + } , "license": "Apache-2.0" - } diff --git a/docs/_includes/colophon.html b/docs/_includes/colophon.html new file mode 100644 index 0000000000000000000000000000000000000000..fa7958ef8fd9031b2d13c1380743a235d688e205 --- /dev/null +++ b/docs/_includes/colophon.html @@ -0,0 +1,16 @@ +<!-- 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> + <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html new file mode 100644 index 0000000000000000000000000000000000000000..19a9af636207d91adaaa9906481ef979c4aab4e3 --- /dev/null +++ b/docs/_includes/footer.html @@ -0,0 +1,30 @@ +<!-- Bootstrap core JavaScript +================================================== --> +<!-- 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> + +<!-- Offcanvas example +================================================== --> +<script src="/assets/js/examples/bootstrap-offcanvas.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/application.js"></script> + +<!-- Analytics +================================================== --> +<script> + var _gauges = _gauges || []; + (function() { + var t = document.createElement('script'); + t.type = 'text/javascript'; + t.async = true; + t.id = 'gauges-tracker'; + t.setAttribute('data-site-id', '4f0dc9fef5a1f55508000013'); + t.src = '//secure.gaug.es/track.js'; + var s = document.getElementsByTagName('script')[0]; + s.parentNode.insertBefore(t, s); + })(); +</script> diff --git a/docs/_includes/header.html b/docs/_includes/header.html new file mode 100644 index 0000000000000000000000000000000000000000..af2104ebb8a88fb627a355778960ac939e0ceb4b --- /dev/null +++ b/docs/_includes/header.html @@ -0,0 +1,45 @@ +<meta charset="utf-8"> +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +<meta name="description" content=""> +<meta name="author" content=""> + +<title> + {% if page.title == "Bootstrap" %} + {{ page.title }} + {% else if %} + {{ page.title }} · Bootstrap + {% endif %} +</title> + +<!-- Bootstrap core CSS --> +<link href="/assets/css/bootstrap.css" rel="stylesheet"> + +{% if page.layout != "example" %} +<!-- Documentation extras --> +<link href="/assets/css/docs.css" rel="stylesheet"> +<link href="/assets/css/pygments-manni.css" rel="stylesheet"> +{% endif %} + +<!-- 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> +<![endif]--> + +<!-- Favicons --> +<link rel="apple-touch-icon-precomposed" sizes="144x144" href="/assets/ico/apple-touch-icon-144-precomposed.png"> +<link rel="apple-touch-icon-precomposed" sizes="114x114" href="/assets/ico/apple-touch-icon-114-precomposed.png"> + <link rel="apple-touch-icon-precomposed" sizes="72x72" href="/assets/ico/apple-touch-icon-72-precomposed.png"> + <link rel="apple-touch-icon-precomposed" href="/assets/ico/apple-touch-icon-57-precomposed.png"> + <link rel="shortcut icon" href="/assets/ico/favicon.png"> + +<script type="text/javascript"> + var _gaq = _gaq || []; + _gaq.push(['_setAccount', 'UA-146052-10']); + _gaq.push(['_trackPageview']); + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); +</script> diff --git a/docs/_includes/nav-components.html b/docs/_includes/nav-components.html new file mode 100644 index 0000000000000000000000000000000000000000..4f49d68b26e6087b362292314c2785c1dd335598 --- /dev/null +++ b/docs/_includes/nav-components.html @@ -0,0 +1,122 @@ +<li> + <a href="#icons">Glyphicons</a> + <ul class="nav"> + <li><a href="#icons-list">Icon list</a></li> + <li><a href="#icons-how-to">How to use</a></li> + <li><a href="#icons-examples">Examples</a></li> + </ul> +</li> +<li> + <a href="#dropdowns">Dropdowns</a> + <ul class="nav"> + <li><a href="#dropdowns-example">Example</a></li> + <li><a href="#dropdowns-alignment">Alignment options</a></li> + <li><a href="#dropdowns-disabled">Disabled menu items</a></li> + <li><a href="#dropdowns-submenus">Submenus</a></li> + </ul> +</li> +<li> + <a href="#btn-groups">Button groups</a> + <ul class="nav"> + <li><a href="#btn-groups-single">Basic button group</a></li> + <li><a href="#btn-groups-toolbar">Button toolbar</a></li> + <li><a href="#btn-groups-vertical">Vertical variation</a></li> + <li><a href="#btn-groups-justified">Justified link buttons</a></li> + </ul> +</li> +<li> + <a href="#btn-dropdowns">Button dropdowns</a> + <ul class="nav"> + <li><a href="#btn-dropdowns-single">Single button dropdown</a></li> + <li><a href="#btn-dropdowns-split">Split button dropdown</a></li> + <li><a href="#btn-dropdowns-sizes">Button sizes</a></li> + <li><a href="#btn-dropdowns-dropup">Dropup variation</a></li> + </ul> +</li> +<li> + <a href="#nav">Navs</a> + <ul class="nav"> + <li><a href="#nav-tabs">Tabs nav</a></li> + <li><a href="#nav-pills">Pills nav</a></li> + <li><a href="#nav-justified">Justified nav</a></li> + <li><a href="#nav-disabled-links">Disabled links</a></li> + <li><a href="#nav-alignment">Alignment options</a></li> + <li><a href="#nav-dropdowns">Using dropdowns</a></li> + </ul> +</li> +<li> + <a href="#navbar">Navbar</a> + <ul class="nav"> + <li><a href="#navbar-basic">Basic navbar</a></li> + <li><a href="#navbar-nav">Nav links</a></li> + <li><a href="#navbar-forms">Forms in navbars</a></li> + <li><a href="#navbar-buttons">Buttons in navbars</a></li> + <li><a href="#navbar-text">Text in navbars</a></li> + <li><a href="#navbar-links">Links in navbars</a></li> + <li><a href="#navbar-component-alignment">Component alignment</a></li> + <li><a href="#navbar-fixed-top">Fixed top navbar</a></li> + <li><a href="#navbar-fixed-bottom">Fixed bottom navbar</a></li> + <li><a href="#navbar-static-top">Static top navbar</a></li> + <li><a href="#navbar-responsive">Responsive navbar</a></li> + </ul> +</li> +<li><a href="#breadcrumbs">Breadcrumbs</a></li> +<li> + <a href="#pagination">Pagination</a> + <ul class="nav"> + <li><a href="#pagination-default">Default pagination</a></li> + <li><a href="#pagination-pager">Pager</a></li> + </ul> +</li> +<li><a href="#labels">Labels</a></li> +<li><a href="#badges">Badges</a></li> +<li> + <a href="#type-components">Typography</a> + <ul class="nav"> + <li><a href="#type-components-jumbotron">Jumbotron</a></li> + <li><a href="#type-components-page-header">Page header</a></li> + </ul> +</li> +<li><a href="#thumbnails">Thumbnails</a></li> +<li> + <a href="#alerts">Alerts</a> + <ul class="nav"> + <li><a href="#alerts-default">Default alert</a></li> + <li><a href="#alerts-block">Block alerts</a></li> + <li><a href="#alerts-alternatives">Contextual alternatives</a></li> + <li><a href="#alerts-links">Links in alerts</a></li> + </ul> +</li> +<li> + <a href="#progress">Progress bars</a> + <ul class="nav"> + <li><a href="#progress-basic">Basic progress bar</a></li> + <li><a href="#progress-alternatives">Contextual alternatives</a></li> + <li><a href="#progress-striped">Striped</a></li> + <li><a href="#progress-animated">Animated</a></li> + <li><a href="#progress-stacked">Stacked</a></li> + </ul> +</li> +<li><a href="#media">Media object</a></li> +<li> + <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> --> + </ul> +</li> +<li> + <a href="#panels">Panels</a> + <ul class="nav"> + <li><a href="#panels-basic">Basic panel</a></li> + <li><a href="#panels-heading">Panel with heading</a></li> + <li><a href="#panels-alternatives">Contextual alternatives</a></li> + <li><a href="#panels-list-group">With list groups</a> + </ul> +</li> +<li><a href="#wells">Wells</a></li> diff --git a/docs/_includes/nav-css.html b/docs/_includes/nav-css.html new file mode 100644 index 0000000000000000000000000000000000000000..534c9c2edd6f07442c9229317487b463a0e822d9 --- /dev/null +++ b/docs/_includes/nav-css.html @@ -0,0 +1,74 @@ +<li> + <a href="#overview">Overview</a> + <ul class="nav"> + <li><a href="#overview-doctype">HTML5 doctype</a></li> + <li><a href="#overview-mobile">Mobile first</a></li> + <li><a href="#overview-responsive-images">Responsive images</a></li> + <li><a href="#overview-type-links">Type and links</a></li> + <li><a href="#overview-normalize">Normalize</a></li> + <li><a href="#overview-container">Container</a></li> + </ul> +</li> +<li> + <a href="#grid">Grid system</a> + <ul class="nav"> + <li><a href="#grid-options">Available options</a></li> + <li><a href="#grid-example-basic">Ex: Stacked-to-horizonal</a></li> + <li><a href="#grid-example-mixed">Ex: Mobile-desktop</a></li> + <li><a href="#grid-example-mixed-complete">Ex: Mobile, tablet, desktop</a></li> + <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> +<li> + <a href="#type">Typography</a> + <ul class="nav"> + <li><a href="#type-headings">Headings</a></li> + <li><a href="#type-body-copy">Body copy</a></li> + <li><a href="#type-emphasis">Emphasis</a></li> + <li><a href="#type-abbreviations">Abbreviations</a></li> + <li><a href="#type-addresses">Addresses</a></li> + <li><a href="#type-blockquotes">Blockquotes</a></li> + <li><a href="#type-lists">Lists</a></li> + </ul> +</li> +<li><a href="#code">Code</a></li> +<li> + <a href="#tables">Tables</a> + <ul class="nav"> + <li><a href="#tables-example">Basic example</a></li> + <li><a href="#tables-striped">Zebra striping</a></li> + <li><a href="#tables-bordered">Bordered tables</a></li> + <li><a href="#tables-hover-rows">Hover rows</a></li> + <li><a href="#tables-condensed">Condensed tables</a></li> + <li><a href="#tables-row-classes">Contextual row classes</a></li> + </ul> +</li> +<li> + <a href="#forms">Forms</a> + <ul class="nav"> + <li><a href="#forms-example">Basic example</a></li> + <li><a href="#forms-inline">Inline variation</a></li> + <li><a href="#forms-horizontal">Horizontal variation</a></li> + <li><a href="#forms-controls">Supported controls</a></li> + <li><a href="#forms-control-states">Control states</a></li> + <li><a href="#forms-input-groups">Input groups</a></li> + <li><a href="#forms-control-sizes">Control sizing</a></li> + <li><a href="#forms-help-text">Help text</a></li> + </ul> +</li> +<li> + <a href="#buttons">Buttons</a> + <ul class="nav"> + <li><a href="#buttons-options">Button options</a></li> + <li><a href="#buttons-sizes">Sizes</a></li> + <li><a href="#buttons-disabled">Disabled</a></li> + <li><a href="#buttons-tags">Button tags</a></li> + </ul> +</li> +<li><a href="#images">Images</a></li> +<li><a href="#helper-classes">Helper classes</a></li> +<li><a href="#responsive-utilities">Responsive utilities</a></li> diff --git a/docs/_includes/nav-customize.html b/docs/_includes/nav-customize.html new file mode 100644 index 0000000000000000000000000000000000000000..38c96d5439c08079cd925a255abdaf2a14d7f374 --- /dev/null +++ b/docs/_includes/nav-customize.html @@ -0,0 +1,32 @@ +<li> + <a href="#less">LESS components</a> +</li> +<li> + <a href="#plugins">jQuery plugins</a> +</li> +<li> + <a href="#variables">LESS variables</a> + <ul class="nav"> + <li><a href="#variables-basics">Basics</a></li> + <li><a href="#variables-buttons">Buttons</a></li> + <li><a href="#variables-form-states">Form states</a></li> + <li><a href="#variables-alerts">Alerts</a></li> + <li><a href="#variables-navbar">Navbar</a></li> + <li><a href="#variables-tables">Tables</a></li> + <li><a href="#variables-forms">Forms</a></li> + <li><a href="#variables-dropdowns">Dropdowns</a></li> + <li><a href="#variables-panels-wells">Panels and wells</a></li> + <li><a href="#variables-jumbotron">Jumbotron</a></li> + <li><a href="#variables-modals">Modals</a></li> + <li><a href="#variables-list-group">List group</a></li> + <li><a href="#variables-thumbnails">Thumbnails</a></li> + <li><a href="#variables-progress">Progress bars</a></li> + <li><a href="#variables-pagination">Pagination</a></li> + <li><a href="#variables-labels">Labels</a></li> + <li><a href="#variables-tooltips-popovers">Tooltips and popovers</a></li> + <li><a href="#variables-other">Other</a></li> + </ul> +</li> +<li> + <a href="#download">Download</a> +</li> \ No newline at end of file diff --git a/docs/_includes/nav-getting-started.html b/docs/_includes/nav-getting-started.html new file mode 100644 index 0000000000000000000000000000000000000000..fd6f8c98b0d59fba2c244a5cdf3ac4b20e44de3f --- /dev/null +++ b/docs/_includes/nav-getting-started.html @@ -0,0 +1,20 @@ +<li> + <a href="#download">Download Bootstrap</a> + <ul class="nav"> + <li><a href="#download-options">Download options</a></li> + <li><a href="#download-cdn">Bootstrap CDN</a></li> + </ul> +</li> +<li> + <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> +</li> +<li> + <a href="#customizing">Customizing Bootstrap</a> +</li> \ No newline at end of file diff --git a/docs/_includes/nav-javascript.html b/docs/_includes/nav-javascript.html new file mode 100644 index 0000000000000000000000000000000000000000..9422b27fb5063f28b3a61444347c9fe19479be2a --- /dev/null +++ b/docs/_includes/nav-javascript.html @@ -0,0 +1,28 @@ +<li> + <a href="#js-overview">Overview</a> + <ul class="nav"> + <li><a href="#js-individual-compiled">Individual or compiled</a></li> + <li><a href="#js-data-attributes">Data attributes</a></li> + <li><a href="#js-programmatic-api">Programmatic API</a></li> + <li><a href="#js-noconflict">No Conflict</a></li> + <li><a href="#js-events">Events</a></li> + </ul> +</li> +<li><a href="#transitions">Transitions</a></li> +<li> + <a href="#modals">Modal</a> + <ul class="nav"> + <li><a href="#modals-examples">Examples</a></li> + <li><a href="#modals-usage">Usage</a></li> + </ul> +</li> +<li><a href="#dropdowns">Dropdown</a></li> +<li><a href="#scrollspy">Scrollspy</a></li> +<li><a href="#tabs">Tab</a></li> +<li><a href="#tooltips">Tooltip</a></li> +<li><a href="#popovers">Popover</a></li> +<li><a href="#js-alerts">Alert</a></li> +<li><a href="#js-buttons">Button</a></li> +<li><a href="#collapse">Collapse</a></li> +<li><a href="#carousel">Carousel</a></li> +<li><a href="#affix">Affix</a></li> diff --git a/docs/_includes/nav-main.html b/docs/_includes/nav-main.html new file mode 100644 index 0000000000000000000000000000000000000000..fceeb7a869bd96173777aa76b6f0dbb4ecd6049b --- /dev/null +++ b/docs/_includes/nav-main.html @@ -0,0 +1,29 @@ +<div class="navbar navbar-inverse navbar-fixed-top bs-docs-nav"> + <div class="container"> + <a href="/" class="navbar-brand">Bootstrap</a> + <button class="navbar-toggle" type="button" data-toggle="collapse" data-target=".bs-navbar-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <div class="nav-collapse collapse bs-navbar-collapse"> + <ul class="nav navbar-nav"> + <li{% if page.slug == "getting-started" %} class="active"{% endif %}> + <a href="/getting-started">Getting started</a> + </li> + <li{% if page.slug == "css" %} class="active"{% endif %}> + <a href="/css">CSS</a> + </li> + <li{% if page.slug == "components" %} class="active"{% endif %}> + <a href="/components">Components</a> + </li> + <li{% if page.slug == "js" %} class="active"{% endif %}> + <a href="/javascript">JavaScript</a> + </li> + <li{% if page.slug == "customize" %} class="active"{% endif %}> + <a href="/customize">Customize</a> + </li> + </ul> + </div> + </div> +</div> diff --git a/docs/_includes/social-buttons.html b/docs/_includes/social-buttons.html new file mode 100644 index 0000000000000000000000000000000000000000..5cef71a19dadaffaea005b906340304b2923a385 --- /dev/null +++ b/docs/_includes/social-buttons.html @@ -0,0 +1,16 @@ +<div class="bs-social"> + <ul class="bs-social-buttons"> + <li> + <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> + </li> + <li> + <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="102px" height="20px"></iframe> + </li> + <li class="follow-btn"> + <a href="https://twitter.com/twbootstrap" class="twitter-follow-button" data-link-color="#0069D6" data-show-count="true">Follow @twbootstrap</a> + </li> + <li class="tweet-btn"> + <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://twitter.github.com/bootstrap/" data-count="horizontal" data-via="twbootstrap" data-related="mdo:Creator of Twitter Bootstrap">Tweet</a> + </li> + </ul> +</div> diff --git a/docs/_layouts/default.html b/docs/_layouts/default.html new file mode 100644 index 0000000000000000000000000000000000000000..68bcbf8d23ae1cb138736d1f3ee5d9610de9d5b1 --- /dev/null +++ b/docs/_layouts/default.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <!-- Meta, title, CSS, favicons, etc. --> + {% include header.html %} + <!-- Place anything custom after this. --> + </head> + <body data-spy="scroll" data-target=".bs-sidebar"> + + <!-- Docs master nav --> + {% include nav-main.html %} + + <!-- Docs page layout --> + <div class="bs-header"> + <div class="container"> + <h1>{{ page.title }}</h1> + <p>{{ page.lead }}</p> + </div> + </div> + + <div class="container bs-docs-container"> + <div class="row"> + <div class="col-lg-3"> + <div class="bs-sidebar"> + <ul class="nav bs-sidenav"> + {% if page.slug == "getting-started" %} + {% include nav-getting-started.html %} + {% elsif page.slug == "css" %} + {% include nav-css.html %} + {% elsif page.slug == "components" %} + {% include nav-components.html %} + {% elsif page.slug == "js" %} + {% include nav-javascript.html %} + {% elsif page.slug == "customize" %} + {% include nav-customize.html %} + {% endif %} + </ul> + </div> + </div> + <div class="col-lg-9"> + {{ content }} + </div> + </div> + + <!-- Quick back to top --> + <a href="#" class="bs-top"> + Back to top + </a> + + </div> + + <!-- Main docs footer (social buttons, copyright, etc). --> + {% include colophon.html %} + + <!-- JS and analytics only. --> + {% include footer.html %} + + </body> +</html> diff --git a/docs/_layouts/example.html b/docs/_layouts/example.html new file mode 100644 index 0000000000000000000000000000000000000000..617fc8ab253efa35ab5f80f0265172a75c9d1079 --- /dev/null +++ b/docs/_layouts/example.html @@ -0,0 +1,17 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <!-- Meta, title, CSS, favicons, etc. --> + {% include header.html %} + <!-- Place anything custom after this. --> + </head> + <body> + + <!-- Page content of course! --> + {{ content }} + + <!-- JS and analytics only. --> + {% include footer.html %} + + </body> +</html> diff --git a/docs/_layouts/home.html b/docs/_layouts/home.html new file mode 100644 index 0000000000000000000000000000000000000000..9230184dc7d47c673fc945a24eb1c655087c562f --- /dev/null +++ b/docs/_layouts/home.html @@ -0,0 +1,20 @@ +<!DOCTYPE html> +<html lang="en"> + <head> + <!-- Meta, title, CSS, favicons, etc. --> + {% include header.html %} + <!-- Place anything custom after this. --> + </head> + <body class="bs-docs-home"> + + <!-- Docs master nav --> + {% include nav-main.html %} + + <!-- Page content of course! --> + {{ content }} + + <!-- JS and analytics only. --> + {% include footer.html %} + + </body> +</html> diff --git a/docs/assets/css/bootstrap-responsive.css b/docs/assets/css/bootstrap-responsive.css deleted file mode 100644 index fcd72f7a779800671685d177154265b30217219a..0000000000000000000000000000000000000000 --- a/docs/assets/css/bootstrap-responsive.css +++ /dev/null @@ -1,1109 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.1 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */ - -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} - -@-ms-viewport { - width: device-width; -} - -.hidden { - display: none; - visibility: hidden; -} - -.visible-phone { - display: none !important; -} - -.visible-tablet { - display: none !important; -} - -.hidden-desktop { - display: none !important; -} - -.visible-desktop { - display: inherit !important; -} - -@media (min-width: 768px) and (max-width: 979px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important ; - } - .visible-tablet { - display: inherit !important; - } - .hidden-tablet { - display: none !important; - } -} - -@media (max-width: 767px) { - .hidden-desktop { - display: inherit !important; - } - .visible-desktop { - display: none !important; - } - .visible-phone { - display: inherit !important; - } - .hidden-phone { - display: none !important; - } -} - -.visible-print { - display: none !important; -} - -@media print { - .visible-print { - display: inherit !important; - } - .hidden-print { - display: none !important; - } -} - -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 30px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 1170px; - } - .span12 { - width: 1170px; - } - .span11 { - width: 1070px; - } - .span10 { - width: 970px; - } - .span9 { - width: 870px; - } - .span8 { - width: 770px; - } - .span7 { - width: 670px; - } - .span6 { - width: 570px; - } - .span5 { - width: 470px; - } - .span4 { - width: 370px; - } - .span3 { - width: 270px; - } - .span2 { - width: 170px; - } - .span1 { - width: 70px; - } - .offset12 { - margin-left: 1230px; - } - .offset11 { - margin-left: 1130px; - } - .offset10 { - margin-left: 1030px; - } - .offset9 { - margin-left: 930px; - } - .offset8 { - margin-left: 830px; - } - .offset7 { - margin-left: 730px; - } - .offset6 { - margin-left: 630px; - } - .offset5 { - margin-left: 530px; - } - .offset4 { - margin-left: 430px; - } - .offset3 { - margin-left: 330px; - } - .offset2 { - margin-left: 230px; - } - .offset1 { - margin-left: 130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.564102564102564%; - *margin-left: 2.5109110747408616%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.564102564102564%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.45299145299145%; - *width: 91.39979996362975%; - } - .row-fluid .span10 { - width: 82.90598290598291%; - *width: 82.8527914166212%; - } - .row-fluid .span9 { - width: 74.35897435897436%; - *width: 74.30578286961266%; - } - .row-fluid .span8 { - width: 65.81196581196582%; - *width: 65.75877432260411%; - } - .row-fluid .span7 { - width: 57.26495726495726%; - *width: 57.21176577559556%; - } - .row-fluid .span6 { - width: 48.717948717948715%; - *width: 48.664757228587014%; - } - .row-fluid .span5 { - width: 40.17094017094017%; - *width: 40.11774868157847%; - } - .row-fluid .span4 { - width: 31.623931623931625%; - *width: 31.570740134569924%; - } - .row-fluid .span3 { - width: 23.076923076923077%; - *width: 23.023731587561375%; - } - .row-fluid .span2 { - width: 14.52991452991453%; - *width: 14.476723040552828%; - } - .row-fluid .span1 { - width: 5.982905982905983%; - *width: 5.929714493544281%; - } - .row-fluid .offset12 { - margin-left: 105.12820512820512%; - *margin-left: 105.02182214948171%; - } - .row-fluid .offset12:first-child { - margin-left: 102.56410256410257%; - *margin-left: 102.45771958537915%; - } - .row-fluid .offset11 { - margin-left: 96.58119658119658%; - *margin-left: 96.47481360247316%; - } - .row-fluid .offset11:first-child { - margin-left: 94.01709401709402%; - *margin-left: 93.91071103837061%; - } - .row-fluid .offset10 { - margin-left: 88.03418803418803%; - *margin-left: 87.92780505546462%; - } - .row-fluid .offset10:first-child { - margin-left: 85.47008547008548%; - *margin-left: 85.36370249136206%; - } - .row-fluid .offset9 { - margin-left: 79.48717948717949%; - *margin-left: 79.38079650845607%; - } - .row-fluid .offset9:first-child { - margin-left: 76.92307692307693%; - *margin-left: 76.81669394435352%; - } - .row-fluid .offset8 { - margin-left: 70.94017094017094%; - *margin-left: 70.83378796144753%; - } - .row-fluid .offset8:first-child { - margin-left: 68.37606837606839%; - *margin-left: 68.26968539734497%; - } - .row-fluid .offset7 { - margin-left: 62.393162393162385%; - *margin-left: 62.28677941443899%; - } - .row-fluid .offset7:first-child { - margin-left: 59.82905982905982%; - *margin-left: 59.72267685033642%; - } - .row-fluid .offset6 { - margin-left: 53.84615384615384%; - *margin-left: 53.739770867430444%; - } - .row-fluid .offset6:first-child { - margin-left: 51.28205128205128%; - *margin-left: 51.175668303327875%; - } - .row-fluid .offset5 { - margin-left: 45.299145299145295%; - *margin-left: 45.1927623204219%; - } - .row-fluid .offset5:first-child { - margin-left: 42.73504273504273%; - *margin-left: 42.62865975631933%; - } - .row-fluid .offset4 { - margin-left: 36.75213675213675%; - *margin-left: 36.645753773413354%; - } - .row-fluid .offset4:first-child { - margin-left: 34.18803418803419%; - *margin-left: 34.081651209310785%; - } - .row-fluid .offset3 { - margin-left: 28.205128205128204%; - *margin-left: 28.0987452264048%; - } - .row-fluid .offset3:first-child { - margin-left: 25.641025641025642%; - *margin-left: 25.53464266230224%; - } - .row-fluid .offset2 { - margin-left: 19.65811965811966%; - *margin-left: 19.551736679396257%; - } - .row-fluid .offset2:first-child { - margin-left: 17.094017094017094%; - *margin-left: 16.98763411529369%; - } - .row-fluid .offset1 { - margin-left: 11.11111111111111%; - *margin-left: 11.004728132387708%; - } - .row-fluid .offset1:first-child { - margin-left: 8.547008547008547%; - *margin-left: 8.440625568285142%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 30px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 1156px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 1056px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 956px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 856px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 756px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 656px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 556px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 456px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 356px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 256px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 156px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 56px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } - .row-fluid .thumbnails { - margin-left: 0; - } -} - -@media (min-width: 768px) and (max-width: 979px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, - .row:after { - display: table; - line-height: 0; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; - } - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { - width: 724px; - } - .span12 { - width: 724px; - } - .span11 { - width: 662px; - } - .span10 { - width: 600px; - } - .span9 { - width: 538px; - } - .span8 { - width: 476px; - } - .span7 { - width: 414px; - } - .span6 { - width: 352px; - } - .span5 { - width: 290px; - } - .span4 { - width: 228px; - } - .span3 { - width: 166px; - } - .span2 { - width: 104px; - } - .span1 { - width: 42px; - } - .offset12 { - margin-left: 764px; - } - .offset11 { - margin-left: 702px; - } - .offset10 { - margin-left: 640px; - } - .offset9 { - margin-left: 578px; - } - .offset8 { - margin-left: 516px; - } - .offset7 { - margin-left: 454px; - } - .offset6 { - margin-left: 392px; - } - .offset5 { - margin-left: 330px; - } - .offset4 { - margin-left: 268px; - } - .offset3 { - margin-left: 206px; - } - .offset2 { - margin-left: 144px; - } - .offset1 { - margin-left: 82px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, - .row-fluid:after { - display: table; - line-height: 0; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.7624309392265194%; - *margin-left: 2.709239449864817%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.7624309392265194%; - } - .row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; - } - .row-fluid .span11 { - width: 91.43646408839778%; - *width: 91.38327259903608%; - } - .row-fluid .span10 { - width: 82.87292817679558%; - *width: 82.81973668743387%; - } - .row-fluid .span9 { - width: 74.30939226519337%; - *width: 74.25620077583166%; - } - .row-fluid .span8 { - width: 65.74585635359117%; - *width: 65.69266486422946%; - } - .row-fluid .span7 { - width: 57.18232044198895%; - *width: 57.12912895262725%; - } - .row-fluid .span6 { - width: 48.61878453038674%; - *width: 48.56559304102504%; - } - .row-fluid .span5 { - width: 40.05524861878453%; - *width: 40.00205712942283%; - } - .row-fluid .span4 { - width: 31.491712707182323%; - *width: 31.43852121782062%; - } - .row-fluid .span3 { - width: 22.92817679558011%; - *width: 22.87498530621841%; - } - .row-fluid .span2 { - width: 14.3646408839779%; - *width: 14.311449394616199%; - } - .row-fluid .span1 { - width: 5.801104972375691%; - *width: 5.747913483013988%; - } - .row-fluid .offset12 { - margin-left: 105.52486187845304%; - *margin-left: 105.41847889972962%; - } - .row-fluid .offset12:first-child { - margin-left: 102.76243093922652%; - *margin-left: 102.6560479605031%; - } - .row-fluid .offset11 { - margin-left: 96.96132596685082%; - *margin-left: 96.8549429881274%; - } - .row-fluid .offset11:first-child { - margin-left: 94.1988950276243%; - *margin-left: 94.09251204890089%; - } - .row-fluid .offset10 { - margin-left: 88.39779005524862%; - *margin-left: 88.2914070765252%; - } - .row-fluid .offset10:first-child { - margin-left: 85.6353591160221%; - *margin-left: 85.52897613729868%; - } - .row-fluid .offset9 { - margin-left: 79.8342541436464%; - *margin-left: 79.72787116492299%; - } - .row-fluid .offset9:first-child { - margin-left: 77.07182320441989%; - *margin-left: 76.96544022569647%; - } - .row-fluid .offset8 { - margin-left: 71.2707182320442%; - *margin-left: 71.16433525332079%; - } - .row-fluid .offset8:first-child { - margin-left: 68.50828729281768%; - *margin-left: 68.40190431409427%; - } - .row-fluid .offset7 { - margin-left: 62.70718232044199%; - *margin-left: 62.600799341718584%; - } - .row-fluid .offset7:first-child { - margin-left: 59.94475138121547%; - *margin-left: 59.838368402492065%; - } - .row-fluid .offset6 { - margin-left: 54.14364640883978%; - *margin-left: 54.037263430116376%; - } - .row-fluid .offset6:first-child { - margin-left: 51.38121546961326%; - *margin-left: 51.27483249088986%; - } - .row-fluid .offset5 { - margin-left: 45.58011049723757%; - *margin-left: 45.47372751851417%; - } - .row-fluid .offset5:first-child { - margin-left: 42.81767955801105%; - *margin-left: 42.71129657928765%; - } - .row-fluid .offset4 { - margin-left: 37.01657458563536%; - *margin-left: 36.91019160691196%; - } - .row-fluid .offset4:first-child { - margin-left: 34.25414364640884%; - *margin-left: 34.14776066768544%; - } - .row-fluid .offset3 { - margin-left: 28.45303867403315%; - *margin-left: 28.346655695309746%; - } - .row-fluid .offset3:first-child { - margin-left: 25.69060773480663%; - *margin-left: 25.584224756083227%; - } - .row-fluid .offset2 { - margin-left: 19.88950276243094%; - *margin-left: 19.783119783707537%; - } - .row-fluid .offset2:first-child { - margin-left: 17.12707182320442%; - *margin-left: 17.02068884448102%; - } - .row-fluid .offset1 { - margin-left: 11.32596685082873%; - *margin-left: 11.219583872105325%; - } - .row-fluid .offset1:first-child { - margin-left: 8.56353591160221%; - *margin-left: 8.457152932878806%; - } - input, - textarea, - .uneditable-input { - margin-left: 0; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; - } - input.span12, - textarea.span12, - .uneditable-input.span12 { - width: 710px; - } - input.span11, - textarea.span11, - .uneditable-input.span11 { - width: 648px; - } - input.span10, - textarea.span10, - .uneditable-input.span10 { - width: 586px; - } - input.span9, - textarea.span9, - .uneditable-input.span9 { - width: 524px; - } - input.span8, - textarea.span8, - .uneditable-input.span8 { - width: 462px; - } - input.span7, - textarea.span7, - .uneditable-input.span7 { - width: 400px; - } - input.span6, - textarea.span6, - .uneditable-input.span6 { - width: 338px; - } - input.span5, - textarea.span5, - .uneditable-input.span5 { - width: 276px; - } - input.span4, - textarea.span4, - .uneditable-input.span4 { - width: 214px; - } - input.span3, - textarea.span3, - .uneditable-input.span3 { - width: 152px; - } - input.span2, - textarea.span2, - .uneditable-input.span2 { - width: 90px; - } - input.span1, - textarea.span1, - .uneditable-input.span1 { - width: 28px; - } -} - -@media (max-width: 767px) { - body { - padding-right: 20px; - padding-left: 20px; - } - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-right: -20px; - margin-left: -20px; - } - .container-fluid { - padding: 0; - } - .dl-horizontal dt { - float: none; - width: auto; - clear: none; - text-align: left; - } - .dl-horizontal dd { - margin-left: 0; - } - .container { - width: auto; - } - .row-fluid { - width: 100%; - } - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; - } - [class*="span"], - .uneditable-input[class*="span"], - .row-fluid [class*="span"] { - display: block; - float: none; - width: 100%; - margin-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .span12, - .row-fluid .span12 { - width: 100%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - } - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - .modal { - position: fixed; - top: 20px; - right: 20px; - left: 20px; - width: auto; - margin: 0; - } - .modal.fade { - top: -100px; - } - .modal.fade.in { - top: 20px; - } -} - -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 20px; - } - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-right: 10px; - padding-left: 10px; - } - .media .pull-left, - .media .pull-right { - display: block; - float: none; - margin-bottom: 10px; - } - .media-object { - margin-right: 0; - margin-left: 0; - } - .modal { - top: 10px; - right: 10px; - left: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} - -@media (max-width: 979px) { - body { - padding-top: 0; - } - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: 20px; - } - .navbar-fixed-bottom { - margin-top: 20px; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-right: 10px; - padding-left: 10px; - margin: 0 0 0 -5px; - } - .nav-collapse { - clear: both; - } - .nav-collapse .nav { - float: none; - margin: 0 0 10px; - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: #777777; - text-shadow: none; - } - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: #777777; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: #f2f2f2; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: #999999; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: #111111; - } - .nav-collapse.in .btn-group { - padding: 0; - margin-top: 5px; - } - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - display: none; - float: none; - max-width: none; - padding: 0; - margin: 0 15px; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu:before, - .nav-collapse .nav > li > .dropdown-menu:after { - display: none; - } - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: 10px 15px; - margin: 10px 0; - border-top: 1px solid #f2f2f2; - border-bottom: 1px solid #f2f2f2; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: #111111; - border-bottom-color: #111111; - } - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - .nav-collapse, - .nav-collapse.collapse { - height: 0; - overflow: hidden; - } - .navbar .btn-navbar { - display: block; - } - .navbar-static .navbar-inner { - padding-right: 10px; - padding-left: 10px; - } -} - -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } -} diff --git a/docs/assets/css/bootstrap.css b/docs/assets/css/bootstrap.css index 2f56af33f3b1322162ec85cb929348d14729f5de..685e2e98441bd15fc5d49fba01df5fe0e14c6306 100644 --- a/docs/assets/css/bootstrap.css +++ b/docs/assets/css/bootstrap.css @@ -1,44 +1,14 @@ /*! - * Bootstrap v2.3.1 + * Bootstrap v3.0.0 * - * Copyright 2012 Twitter, Inc + * 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 @twitter by @mdo and @fat. + * Designed and built with all the love in the world by @mdo and @fat. */ -.clearfix { - *zoom: 1; -} - -.clearfix:before, -.clearfix:after { - display: table; - line-height: 0; - content: ""; -} - -.clearfix:after { - clear: both; -} - -.hide-text { - font: 0/0 a; - color: transparent; - text-shadow: none; - background-color: transparent; - border: 0; -} - -.input-block-level { - display: block; - width: 100%; - min-height: 30px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -} +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ article, aside, @@ -48,8 +18,10 @@ figure, footer, header, hgroup, +main, nav, -section { +section, +summary { display: block; } @@ -57,31 +29,85 @@ audio, canvas, video { display: inline-block; - *display: inline; - *zoom: 1; } audio:not([controls]) { display: none; + height: 0; +} + +[hidden] { + display: none; } html { - font-size: 100%; + font-family: sans-serif; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; } +body { + margin: 0; +} + a:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; + outline: thin dotted; } -a:hover, -a:active { +a:active, +a:hover { outline: 0; } +h1 { + margin: 0.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; @@ -99,17 +125,26 @@ sub { } img { - width: auto\9; - height: auto; - max-width: 100%; - vertical-align: middle; border: 0; - -ms-interpolation-mode: bicubic; } -#map_canvas img, -.google-maps img { - max-width: none; +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; } button, @@ -117,20 +152,18 @@ input, select, textarea { margin: 0; + font-family: inherit; font-size: 100%; - vertical-align: middle; } button, input { - *overflow: visible; line-height: normal; } -button::-moz-focus-inner, -input::-moz-focus-inner { - padding: 0; - border: 0; +button, +select { + text-transform: none; } button, @@ -141,15 +174,15 @@ input[type="submit"] { -webkit-appearance: button; } -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; } input[type="search"] { @@ -159,16 +192,27 @@ input[type="search"] { -webkit-appearance: textfield; } -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { +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; @@ -207,7 +251,7 @@ textarea { max-width: 100% !important; } @page { - margin: 0.5cm; + margin: 2cm .5cm; } p, h2, @@ -219,813 +263,999 @@ textarea { 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 { - margin: 0; font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; - line-height: 20px; + line-height: 1.428571429; color: #333333; background-color: #ffffff; } +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + a { - color: #0088cc; + color: #428bca; text-decoration: none; } a:hover, a:focus { - color: #005580; + color: #2a6496; text-decoration: underline; } -.img-rounded { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); +img { + height: auto; + max-width: 100%; + vertical-align: middle; } -.img-circle { - -webkit-border-radius: 500px; - -moz-border-radius: 500px; - border-radius: 500px; +.img-rounded { + border-radius: 6px; } -.row { - margin-left: -20px; - *zoom: 1; +.img-circle { + border-radius: 500px; } -.row:before, -.row:after { - display: table; - line-height: 0; - content: ""; +p { + margin: 0 0 10px; } -.row:after { - clear: both; +.lead { + margin-bottom: 20px; + font-size: 21px; + font-weight: 200; + line-height: 1.4; } -[class*="span"] { - float: left; - min-height: 1px; - margin-left: 20px; +small { + font-size: 85%; } -.container, -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; +strong { + font-weight: bold; } -.span12 { - width: 940px; +em { + font-style: italic; } -.span11 { - width: 860px; +cite { + font-style: normal; } -.span10 { - width: 780px; +.text-muted { + color: #999999; } -.span9 { - width: 700px; +a.text-muted:hover, +a.text-muted:focus { + color: #808080; } -.span8 { - width: 620px; +.text-warning { + color: #c09853; } -.span7 { - width: 540px; +a.text-warning:hover, +a.text-warning:focus { + color: #a47e3c; } -.span6 { - width: 460px; +.text-danger { + color: #b94a48; } -.span5 { - width: 380px; +a.text-danger:hover, +a.text-danger:focus { + color: #953b39; } -.span4 { - width: 300px; +.text-success { + color: #468847; } -.span3 { - width: 220px; +a.text-success:hover, +a.text-success:focus { + color: #356635; } -.span2 { - width: 140px; +.text-left { + text-align: left; } -.span1 { - width: 60px; +.text-right { + text-align: right; } -.offset12 { - margin-left: 980px; +.text-center { + text-align: center; } -.offset11 { - margin-left: 900px; +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; } -.offset10 { - margin-left: 820px; +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: #999999; } -.offset9 { - margin-left: 740px; +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; } -.offset8 { - margin-left: 660px; +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; } -.offset7 { - margin-left: 580px; +h1, +.h1 { + font-size: 38px; } -.offset6 { - margin-left: 500px; +h2, +.h2 { + font-size: 32px; } -.offset5 { - margin-left: 420px; +h3, +.h3 { + font-size: 24px; } -.offset4 { - margin-left: 340px; +h4, +.h4 { + font-size: 18px; } -.offset3 { - margin-left: 260px; +h5, +.h5 { + font-size: 14px; } -.offset2 { - margin-left: 180px; +h6, +.h6 { + font-size: 12px; } -.offset1 { - margin-left: 100px; +h1 small, +.h1 small { + font-size: 24px; } -.row-fluid { - width: 100%; - *zoom: 1; +h2 small, +.h2 small { + font-size: 18px; } -.row-fluid:before, -.row-fluid:after { - display: table; - line-height: 0; - content: ""; +h3 small, +.h3 small, +h4 small, +.h4 small { + font-size: 14px; } -.row-fluid:after { - clear: both; +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eeeeee; } -.row-fluid [class*="span"] { - display: block; - float: left; - width: 100%; - min-height: 30px; - margin-left: 2.127659574468085%; - *margin-left: 2.074468085106383%; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; +ul, +ol { + margin-top: 0; + margin-bottom: 10px; } -.row-fluid [class*="span"]:first-child { - margin-left: 0; -} - -.row-fluid .controls-row [class*="span"] + [class*="span"] { - margin-left: 2.127659574468085%; -} - -.row-fluid .span12 { - width: 100%; - *width: 99.94680851063829%; -} - -.row-fluid .span11 { - width: 91.48936170212765%; - *width: 91.43617021276594%; -} - -.row-fluid .span10 { - width: 82.97872340425532%; - *width: 82.92553191489361%; -} - -.row-fluid .span9 { - width: 74.46808510638297%; - *width: 74.41489361702126%; -} - -.row-fluid .span8 { - width: 65.95744680851064%; - *width: 65.90425531914893%; +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; } -.row-fluid .span7 { - width: 57.44680851063829%; - *width: 57.39361702127659%; +.list-unstyled { + padding-left: 0; + list-style: none; } -.row-fluid .span6 { - width: 48.93617021276595%; - *width: 48.88297872340425%; +.list-inline { + padding-left: 0; + list-style: none; } -.row-fluid .span5 { - width: 40.42553191489362%; - *width: 40.37234042553192%; +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; } -.row-fluid .span4 { - width: 31.914893617021278%; - *width: 31.861702127659576%; +dl { + margin-bottom: 20px; } -.row-fluid .span3 { - width: 23.404255319148934%; - *width: 23.351063829787233%; +dt, +dd { + line-height: 1.428571429; } -.row-fluid .span2 { - width: 14.893617021276595%; - *width: 14.840425531914894%; +dt { + font-weight: bold; } -.row-fluid .span1 { - width: 6.382978723404255%; - *width: 6.329787234042553%; +dd { + margin-left: 10px; } -.row-fluid .offset12 { - margin-left: 104.25531914893617%; - *margin-left: 104.14893617021275%; +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; } -.row-fluid .offset12:first-child { - margin-left: 102.12765957446808%; - *margin-left: 102.02127659574467%; +.dl-horizontal dd { + margin-left: 180px; } -.row-fluid .offset11 { - margin-left: 95.74468085106382%; - *margin-left: 95.6382978723404%; +.dl-horizontal dd:before, +.dl-horizontal dd:after { + display: table; + content: " "; } -.row-fluid .offset11:first-child { - margin-left: 93.61702127659574%; - *margin-left: 93.51063829787232%; +.dl-horizontal dd:after { + clear: both; } -.row-fluid .offset10 { - margin-left: 87.23404255319149%; - *margin-left: 87.12765957446807%; +.dl-horizontal dd:before, +.dl-horizontal dd:after { + display: table; + content: " "; } -.row-fluid .offset10:first-child { - margin-left: 85.1063829787234%; - *margin-left: 84.99999999999999%; +.dl-horizontal dd:after { + clear: both; } -.row-fluid .offset9 { - margin-left: 78.72340425531914%; - *margin-left: 78.61702127659572%; +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); } -.row-fluid .offset9:first-child { - margin-left: 76.59574468085106%; - *margin-left: 76.48936170212764%; +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; } -.row-fluid .offset8 { - margin-left: 70.2127659574468%; - *margin-left: 70.10638297872339%; +abbr.initialism { + font-size: 90%; + text-transform: uppercase; } -.row-fluid .offset8:first-child { - margin-left: 68.08510638297872%; - *margin-left: 67.9787234042553%; +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; } -.row-fluid .offset7 { - margin-left: 61.70212765957446%; - *margin-left: 61.59574468085106%; +blockquote p { + font-size: 17.5px; + font-weight: 300; + line-height: 1.25; } -.row-fluid .offset7:first-child { - margin-left: 59.574468085106375%; - *margin-left: 59.46808510638297%; +blockquote p:last-child { + margin-bottom: 0; } -.row-fluid .offset6 { - margin-left: 53.191489361702125%; - *margin-left: 53.085106382978715%; +blockquote small { + display: block; + line-height: 1.428571429; + color: #999999; } -.row-fluid .offset6:first-child { - margin-left: 51.063829787234035%; - *margin-left: 50.95744680851063%; +blockquote small:before { + content: '\2014 \00A0'; } -.row-fluid .offset5 { - margin-left: 44.68085106382979%; - *margin-left: 44.57446808510638%; +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; } -.row-fluid .offset5:first-child { - margin-left: 42.5531914893617%; - *margin-left: 42.4468085106383%; +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; } -.row-fluid .offset4 { - margin-left: 36.170212765957444%; - *margin-left: 36.06382978723405%; +blockquote.pull-right small:before { + content: ''; } -.row-fluid .offset4:first-child { - margin-left: 34.04255319148936%; - *margin-left: 33.93617021276596%; +blockquote.pull-right small:after { + content: '\00A0 \2014'; } -.row-fluid .offset3 { - margin-left: 27.659574468085104%; - *margin-left: 27.5531914893617%; +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; } -.row-fluid .offset3:first-child { - margin-left: 25.53191489361702%; - *margin-left: 25.425531914893618%; +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 1.428571429; } -.row-fluid .offset2 { - margin-left: 19.148936170212764%; - *margin-left: 19.04255319148936%; +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12px; + color: #333333; + border-radius: 4px; } -.row-fluid .offset2:first-child { - margin-left: 17.02127659574468%; - *margin-left: 16.914893617021278%; +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; } -.row-fluid .offset1 { - margin-left: 10.638297872340425%; - *margin-left: 10.53191489361702%; +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.428571429; + word-break: break-all; + word-wrap: break-word; + white-space: pre; + white-space: pre-wrap; + background-color: #f5f5f5; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + border-radius: 4px; } -.row-fluid .offset1:first-child { - margin-left: 8.51063829787234%; - *margin-left: 8.404255319148938%; +pre.prettyprint { + margin-bottom: 20px; } -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; } -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; } .container { margin-right: auto; margin-left: auto; - *zoom: 1; } .container:before, .container:after { display: table; - line-height: 0; - content: ""; + content: " "; } .container:after { clear: both; } -.container-fluid { - padding-right: 20px; - padding-left: 20px; - *zoom: 1; -} - -.container-fluid:before, -.container-fluid:after { +.container:before, +.container:after { display: table; - line-height: 0; - content: ""; + content: " "; } -.container-fluid:after { +.container:after { clear: both; } -p { - margin: 0 0 10px; -} - -.lead { - margin-bottom: 20px; - font-size: 21px; - font-weight: 200; - line-height: 30px; -} - -small { - font-size: 85%; -} - -strong { - font-weight: bold; -} - -em { - font-style: italic; -} - -cite { - font-style: normal; -} - -.muted { - color: #999999; -} - -a.muted:hover, -a.muted:focus { - color: #808080; -} - -.text-warning { - color: #c09853; -} - -a.text-warning:hover, -a.text-warning:focus { - color: #a47e3c; -} - -.text-error { - color: #b94a48; -} - -a.text-error:hover, -a.text-error:focus { - color: #953b39; -} - -.text-info { - color: #3a87ad; +.row:before, +.row:after { + display: table; + content: " "; } -a.text-info:hover, -a.text-info:focus { - color: #2d6987; +.row:after { + clear: both; } -.text-success { - color: #468847; +.row:before, +.row:after { + display: table; + content: " "; } -a.text-success:hover, -a.text-success:focus { - color: #356635; +.row:after { + clear: both; } -.text-left { - text-align: left; +@media (min-width: 768px) { + .row { + margin-right: -15px; + margin-left: -15px; + } } -.text-right { - text-align: right; +.row .row { + margin-right: -15px; + margin-left: -15px; } -.text-center { - text-align: center; +.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; + float: left; + width: 100%; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; } -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 10px 0; - font-family: inherit; - font-weight: bold; - line-height: 20px; - color: inherit; - text-rendering: optimizelegibility; +.col-1 { + width: 8.333333333333332%; } -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - line-height: 1; - color: #999999; +.col-2 { + width: 16.666666666666664%; } -h1, -h2, -h3 { - line-height: 40px; +.col-3 { + width: 25%; } -h1 { - font-size: 38.5px; +.col-4 { + width: 33.33333333333333%; } -h2 { - font-size: 31.5px; +.col-5 { + width: 41.66666666666667%; } -h3 { - font-size: 24.5px; +.col-6 { + width: 50%; } -h4 { - font-size: 17.5px; +.col-7 { + width: 58.333333333333336%; } -h5 { - font-size: 14px; +.col-8 { + width: 66.66666666666666%; } -h6 { - font-size: 11.9px; +.col-9 { + width: 75%; } -h1 small { - font-size: 24.5px; +.col-10 { + width: 83.33333333333334%; } -h2 small { - font-size: 17.5px; +.col-11 { + width: 91.66666666666666%; } -h3 small { - font-size: 14px; +.col-12 { + width: 100%; } -h4 small { - font-size: 14px; -} - -.page-header { - padding-bottom: 9px; - margin: 20px 0 30px; - border-bottom: 1px solid #eeeeee; -} - -ul, -ol { - padding: 0; - margin: 0 0 10px 25px; -} - -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; +@media (min-width: 768px) { + .container { + max-width: 728px; + } + .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-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%; + } + .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%; + } } -li { - line-height: 20px; +@media (min-width: 992px) { + .container { + max-width: 940px; + } + .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%; + } } -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; +@media (min-width: 1200px) { + .container { + max-width: 1170px; + } } -ul.inline, -ol.inline { - margin-left: 0; - list-style: none; +table { + max-width: 100%; + background-color: transparent; } -ul.inline > li, -ol.inline > li { - display: inline-block; - *display: inline; - padding-right: 5px; - padding-left: 5px; - *zoom: 1; +th { + text-align: left; } -dl { +.table { + width: 100%; margin-bottom: 20px; } -dt, -dd { - line-height: 20px; +.table thead > tr > th, +.table tbody > tr > th, +.table thead > tr > td, +.table tbody > tr > td { + padding: 8px; + line-height: 1.428571429; + vertical-align: top; + border-top: 1px solid #dddddd; } -dt { - font-weight: bold; +.table thead > tr > th { + vertical-align: bottom; } -dd { - margin-left: 10px; +.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 thead:first-child tr:first-child td { + border-top: 0; } -.dl-horizontal { - *zoom: 1; +.table tbody + tbody { + border-top: 2px solid #dddddd; } -.dl-horizontal:before, -.dl-horizontal:after { - display: table; - line-height: 0; - content: ""; +.table .table { + background-color: #ffffff; } -.dl-horizontal:after { - clear: both; +.table-condensed thead > tr > th, +.table-condensed tbody > tr > th, +.table-condensed thead > tr > td, +.table-condensed tbody > tr > td { + padding: 4px 5px; } -.dl-horizontal dt { - float: left; - width: 160px; - overflow: hidden; - clear: left; - text-align: right; - text-overflow: ellipsis; - white-space: nowrap; +.table-bordered { + border: 1px solid #dddddd; + border-collapse: separate; + border-left: 0; + border-radius: 4px; } -.dl-horizontal dd { - margin-left: 180px; +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td { + border-left: 1px solid #dddddd; } -hr { - margin: 20px 0; - border: 0; - border-top: 1px solid #eeeeee; - border-bottom: 1px solid #ffffff; +.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; } -abbr[title], -abbr[data-original-title] { - cursor: help; - border-bottom: 1px dotted #999999; +.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; } -abbr.initialism { - font-size: 90%; - text-transform: uppercase; +.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; } -blockquote { - padding: 0 0 0 15px; - margin: 0 0 20px; - border-left: 5px solid #eeeeee; +.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; } -blockquote p { - margin-bottom: 0; - font-size: 17.5px; - font-weight: 300; - line-height: 1.25; +.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; } -blockquote small { - display: block; - line-height: 20px; - color: #999999; +.table-bordered > tfoot + tbody:last-child > tr:last-child > td:first-child { + border-bottom-left-radius: 0; } -blockquote small:before { - content: '\2014 \00A0'; +.table-bordered > tfoot + tbody:last-child > tr:last-child > td:last-child { + border-bottom-right-radius: 0; } -blockquote.pull-right { - float: right; - padding-right: 15px; - padding-left: 0; - border-right: 5px solid #eeeeee; - border-left: 0; +.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 > colgroup + tbody > tr:first-child > td:first-child { + border-top-left-radius: 4px; } -blockquote.pull-right p, -blockquote.pull-right small { - text-align: right; +.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 > colgroup + tbody > tr:first-child > td:last-child { + border-top-right-radius: 4px; } -blockquote.pull-right small:before { - content: ''; +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; } -blockquote.pull-right small:after { - content: '\00A0 \2014'; +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; } -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; +table col[class*="col-span-"] { + display: table-column; + float: none; } -address { - display: block; - margin-bottom: 20px; - font-style: normal; - line-height: 20px; +table td[class*="col-span-"], +table th[class*="col-span-"] { + display: table-cell; + float: none; } -code, -pre { - padding: 0 3px 2px; - font-family: Monaco, Menlo, Consolas, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; +.table > tbody > tr > td.success, +.table > tbody > tr > th.success, +.table > tbody > tr.success > td { + background-color: #dff0d8; + border-color: #d6e9c6; } -code { - padding: 2px 4px; - color: #d14; - white-space: nowrap; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; +.table > tbody > tr > td.danger, +.table > tbody > tr > th.danger, +.table > tbody > tr.danger > td { + background-color: #f2dede; + border-color: #eed3d7; } -pre { - display: block; - padding: 9.5px; - margin: 0 0 10px; - font-size: 13px; - line-height: 20px; - word-break: break-all; - word-wrap: break-word; - white-space: pre; - white-space: pre-wrap; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; +.table > tbody > tr > td.warning, +.table > tbody > tr > th.warning, +.table > tbody > tr.warning > td { + background-color: #fcf8e3; + border-color: #fbeed5; } -pre.prettyprint { - margin-bottom: 20px; +.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; } -pre code { - padding: 0; - color: inherit; - white-space: pre; - white-space: pre-wrap; - background-color: transparent; - border: 0; +.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; } -.pre-scrollable { - max-height: 340px; - overflow-y: scroll; +.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 0 20px; + margin: 0; } fieldset { @@ -1040,37 +1270,16 @@ legend { padding: 0; margin-bottom: 20px; font-size: 21px; - line-height: 40px; + line-height: inherit; color: #333333; border: 0; border-bottom: 1px solid #e5e5e5; } -legend small { - font-size: 15px; - color: #999999; -} - -label, -input, -button, -select, -textarea { - font-size: 14px; - font-weight: normal; - line-height: 20px; -} - -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -} - label { - display: block; + display: inline-block; margin-bottom: 5px; + font-weight: bold; } select, @@ -1088,58 +1297,26 @@ input[type="email"], input[type="url"], input[type="search"], input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: 20px; - padding: 4px 6px; - margin-bottom: 10px; +input[type="color"] { + display: block; + min-height: 38px; + padding: 8px 12px; font-size: 14px; - line-height: 20px; + line-height: 1.428571429; color: #555555; vertical-align: middle; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -input, -textarea, -.uneditable-input { - width: 206px; -} - -textarea { - height: auto; -} - -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"], -.uneditable-input { background-color: #ffffff; border: 1px solid #cccccc; + border-radius: 4px; -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-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 linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; + -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; } +select:focus, textarea:focus, input[type="text"]:focus, input[type="password"]:focus, @@ -1154,24 +1331,69 @@ input[type="email"]:focus, input[type="url"]:focus, input[type="search"]:focus, input[type="tel"]:focus, -input[type="color"]:focus, -.uneditable-input:focus { +input[type="color"]:focus { border-color: rgba(82, 168, 236, 0.8); outline: 0; - outline: thin dotted \9; - /* IE6-9 */ - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-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); } -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - margin-top: 1px \9; - *margin-top: 0; - line-height: normal; +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: #eeeeee; +} + +input, +select, +textarea { + width: 100%; } input[type="file"], @@ -1184,2868 +1406,1864 @@ input[type="checkbox"] { width: auto; } -select, -input[type="file"] { - height: 30px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 30px; -} - -select { - width: 220px; - background-color: #ffffff; - border: 1px solid #cccccc; -} - -select[multiple], -select[size] { - height: auto; -} - -select:focus, -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; -} - -.uneditable-input, -.uneditable-textarea { - color: #999999; - cursor: not-allowed; - background-color: #fcfcfc; - border-color: #cccccc; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); -} - -.uneditable-input { - overflow: hidden; - white-space: nowrap; +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } -.uneditable-textarea { - width: auto; +textarea { height: auto; } -input:-moz-placeholder, -textarea:-moz-placeholder { - color: #999999; -} - -input:-ms-input-placeholder, -textarea:-ms-input-placeholder { - color: #999999; -} - -input::-webkit-input-placeholder, -textarea::-webkit-input-placeholder { - color: #999999; -} - -.radio, -.checkbox { - min-height: 20px; - padding-left: 20px; -} - -.radio input[type="radio"], -.checkbox input[type="checkbox"] { - float: left; - margin-left: -20px; -} - -.controls > .radio:first-child, -.controls > .checkbox:first-child { - padding-top: 5px; -} - -.radio.inline, -.checkbox.inline { - display: inline-block; - padding-top: 5px; - margin-bottom: 0; - vertical-align: middle; -} - -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { - margin-left: 10px; -} - -.input-mini { - width: 60px; -} - -.input-small { - width: 90px; -} - -.input-medium { - width: 150px; -} - -.input-large { - width: 210px; -} - -.input-xlarge { - width: 270px; -} - -.input-xxlarge { - width: 530px; -} - -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} - -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - -input, -textarea, -.uneditable-input { - margin-left: 0; -} - -.controls-row [class*="span"] + [class*="span"] { - margin-left: 20px; -} - -input.span12, -textarea.span12, -.uneditable-input.span12 { - width: 926px; -} - -input.span11, -textarea.span11, -.uneditable-input.span11 { - width: 846px; -} - -input.span10, -textarea.span10, -.uneditable-input.span10 { - width: 766px; -} - -input.span9, -textarea.span9, -.uneditable-input.span9 { - width: 686px; -} - -input.span8, -textarea.span8, -.uneditable-input.span8 { - width: 606px; -} - -input.span7, -textarea.span7, -.uneditable-input.span7 { - width: 526px; -} - -input.span6, -textarea.span6, -.uneditable-input.span6 { - width: 446px; -} - -input.span5, -textarea.span5, -.uneditable-input.span5 { - width: 366px; -} - -input.span4, -textarea.span4, -.uneditable-input.span4 { - width: 286px; -} - -input.span3, -textarea.span3, -.uneditable-input.span3 { - width: 206px; -} - -input.span2, -textarea.span2, -.uneditable-input.span2 { - width: 126px; -} - -input.span1, -textarea.span1, -.uneditable-input.span1 { - width: 46px; -} - -.controls-row { - *zoom: 1; -} - -.controls-row:before, -.controls-row:after { - display: table; - line-height: 0; - content: ""; -} - -.controls-row:after { - clear: both; -} - -.controls-row [class*="span"], -.row-fluid .controls-row [class*="span"] { - float: left; -} - -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: #eeeeee; -} - -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; -} - -.control-group.warning .control-label, -.control-group.warning .help-block, -.control-group.warning .help-inline { - color: #c09853; -} - -.control-group.warning .checkbox, -.control-group.warning .radio, -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - color: #c09853; -} - -.control-group.warning input, -.control-group.warning select, -.control-group.warning textarea { - border-color: #c09853; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.warning input:focus, -.control-group.warning select:focus, -.control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; - -moz-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; -} - -.control-group.warning .input-prepend .add-on, -.control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} - -.control-group.error .control-label, -.control-group.error .help-block, -.control-group.error .help-inline { - color: #b94a48; -} - -.control-group.error .checkbox, -.control-group.error .radio, -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - color: #b94a48; -} - -.control-group.error input, -.control-group.error select, -.control-group.error textarea { - border-color: #b94a48; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.error input:focus, -.control-group.error select:focus, -.control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; - -moz-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; -} - -.control-group.error .input-prepend .add-on, -.control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} - -.control-group.success .control-label, -.control-group.success .help-block, -.control-group.success .help-inline { - color: #468847; -} - -.control-group.success .checkbox, -.control-group.success .radio, -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - color: #468847; -} - -.control-group.success input, -.control-group.success select, -.control-group.success textarea { - border-color: #468847; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.success input:focus, -.control-group.success select:focus, -.control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; - -moz-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; -} - -.control-group.success .input-prepend .add-on, -.control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} - -.control-group.info .control-label, -.control-group.info .help-block, -.control-group.info .help-inline { - color: #3a87ad; -} - -.control-group.info .checkbox, -.control-group.info .radio, -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - color: #3a87ad; -} - -.control-group.info input, -.control-group.info select, -.control-group.info textarea { - border-color: #3a87ad; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); -} - -.control-group.info input:focus, -.control-group.info select:focus, -.control-group.info textarea:focus { - border-color: #2d6987; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7ab5d3; -} - -.control-group.info .input-prepend .add-on, -.control-group.info .input-append .add-on { - color: #3a87ad; - background-color: #d9edf7; - border-color: #3a87ad; -} - -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; -} - -input:focus:invalid:focus, -textarea:focus:invalid:focus, -select:focus:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} - -.form-actions { - padding: 19px 20px 20px; - margin-top: 20px; - margin-bottom: 20px; - background-color: #f5f5f5; - border-top: 1px solid #e5e5e5; - *zoom: 1; -} - -.form-actions:before, -.form-actions:after { - display: table; - line-height: 0; - content: ""; -} - -.form-actions:after { - clear: both; -} - -.help-block, -.help-inline { - color: #595959; -} - -.help-block { - display: block; - margin-bottom: 10px; -} - -.help-inline { - display: inline-block; - *display: inline; - padding-left: 5px; - vertical-align: middle; - *zoom: 1; -} - -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: 10px; - font-size: 0; - white-space: nowrap; - vertical-align: middle; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input, -.input-append .dropdown-menu, -.input-prepend .dropdown-menu, -.input-append .popover, -.input-prepend .popover { - font-size: 14px; -} - -.input-append input, -.input-prepend input, -.input-append select, -.input-prepend select, -.input-append .uneditable-input, -.input-prepend .uneditable-input { - position: relative; - margin-bottom: 0; - *margin-left: 0; - vertical-align: top; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append input:focus, -.input-prepend input:focus, -.input-append select:focus, -.input-prepend select:focus, -.input-append .uneditable-input:focus, -.input-prepend .uneditable-input:focus { - z-index: 2; -} - -.input-append .add-on, -.input-prepend .add-on { - display: inline-block; - width: auto; - height: 20px; - min-width: 16px; - padding: 4px 5px; - font-size: 14px; - font-weight: normal; - line-height: 20px; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #eeeeee; - border: 1px solid #ccc; -} - -.input-append .add-on, -.input-prepend .add-on, -.input-append .btn, -.input-prepend .btn, -.input-append .btn-group > .dropdown-toggle, -.input-prepend .btn-group > .dropdown-toggle { - vertical-align: top; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-append .active, -.input-prepend .active { - background-color: #a9dba9; - border-color: #46a546; -} - -.input-prepend .add-on, -.input-prepend .btn { - margin-right: -1px; -} - -.input-prepend .add-on:first-child, -.input-prepend .btn:first-child { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input, -.input-append select, -.input-append .uneditable-input { - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-append input + .btn-group .btn:last-child, -.input-append select + .btn-group .btn:last-child, -.input-append .uneditable-input + .btn-group .btn:last-child { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-append .add-on, -.input-append .btn, -.input-append .btn-group { - margin-left: -1px; -} - -.input-append .add-on:last-child, -.input-append .btn:last-child, -.input-append .btn-group:last-child > .dropdown-toggle { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append input, -.input-prepend.input-append select, -.input-prepend.input-append .uneditable-input { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.input-prepend.input-append input + .btn-group .btn, -.input-prepend.input-append select + .btn-group .btn, -.input-prepend.input-append .uneditable-input + .btn-group .btn { - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .add-on:first-child, -.input-prepend.input-append .btn:first-child { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} - -.input-prepend.input-append .add-on:last-child, -.input-prepend.input-append .btn:last-child { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} - -.input-prepend.input-append .btn-group:first-child { - margin-left: 0; -} - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; - /* IE7-8 doesn't have border-radius, so don't indent the padding */ - - margin-bottom: 0; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} - -/* Allow for input prepend/append in search forms */ - -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.form-search .input-append .search-query { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search .input-append .btn { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .search-query { - -webkit-border-radius: 0 14px 14px 0; - -moz-border-radius: 0 14px 14px 0; - border-radius: 0 14px 14px 0; -} - -.form-search .input-prepend .btn { - -webkit-border-radius: 14px 0 0 14px; - -moz-border-radius: 14px 0 0 14px; - border-radius: 14px 0 0 14px; -} - -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input, -.form-search .input-prepend, -.form-inline .input-prepend, -.form-horizontal .input-prepend, -.form-search .input-append, -.form-inline .input-append, -.form-horizontal .input-append { - display: inline-block; - *display: inline; - margin-bottom: 0; - vertical-align: middle; - *zoom: 1; -} - -.form-search .hide, -.form-inline .hide, -.form-horizontal .hide { - display: none; -} - -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} - -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} - -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} - -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -.control-group { - margin-bottom: 10px; -} - -legend + .control-group { - margin-top: 20px; - -webkit-margin-top-collapse: separate; -} - -.form-horizontal .control-group { - margin-bottom: 20px; - *zoom: 1; -} - -.form-horizontal .control-group:before, -.form-horizontal .control-group:after { - display: table; - line-height: 0; - content: ""; -} - -.form-horizontal .control-group:after { - clear: both; -} - -.form-horizontal .control-label { - float: left; - width: 160px; - padding-top: 5px; - text-align: right; -} - -.form-horizontal .controls { - *display: inline-block; - *padding-left: 20px; - margin-left: 180px; - *margin-left: 0; -} - -.form-horizontal .controls:first-child { - *padding-left: 180px; -} - -.form-horizontal .help-block { - margin-bottom: 0; -} - -.form-horizontal input + .help-block, -.form-horizontal select + .help-block, -.form-horizontal textarea + .help-block, -.form-horizontal .uneditable-input + .help-block, -.form-horizontal .input-prepend + .help-block, -.form-horizontal .input-append + .help-block { - margin-top: 10px; -} - -.form-horizontal .form-actions { - padding-left: 180px; -} - -table { - max-width: 100%; - background-color: transparent; - border-collapse: collapse; - border-spacing: 0; -} - -.table { - width: 100%; - margin-bottom: 20px; -} - -.table th, -.table td { - padding: 8px; - line-height: 20px; - text-align: left; - vertical-align: top; - border-top: 1px solid #dddddd; -} - -.table th { - font-weight: bold; -} - -.table thead th { - vertical-align: bottom; -} - -.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 thead:first-child tr:first-child td { - border-top: 0; -} - -.table tbody + tbody { - border-top: 2px solid #dddddd; -} - -.table .table { - background-color: #ffffff; -} - -.table-condensed th, -.table-condensed td { - padding: 4px 5px; -} - -.table-bordered { - border: 1px solid #dddddd; - border-collapse: separate; - *border-collapse: collapse; - border-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} - -.table-bordered th, -.table-bordered td { - border-left: 1px solid #dddddd; -} - -.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 { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 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 { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 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 { - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 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 { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:first-child { - -webkit-border-bottom-left-radius: 0; - border-bottom-left-radius: 0; - -moz-border-radius-bottomleft: 0; -} - -.table-bordered tfoot + tbody:last-child tr:last-child td:last-child { - -webkit-border-bottom-right-radius: 0; - border-bottom-right-radius: 0; - -moz-border-radius-bottomright: 0; -} - -.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 colgroup + tbody tr:first-child td:first-child { - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topleft: 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 colgroup + tbody tr:first-child td:last-child { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -moz-border-radius-topright: 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 td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; - margin-left: 0; -} - -.table td.span1, -.table th.span1 { - float: none; - width: 44px; - margin-left: 0; -} - -.table td.span2, -.table th.span2 { - float: none; - width: 124px; - margin-left: 0; -} - -.table td.span3, -.table th.span3 { - float: none; - width: 204px; - margin-left: 0; -} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ -.table td.span4, -.table th.span4 { - float: none; - width: 284px; - margin-left: 0; + line-height: normal; } -.table td.span5, -.table th.span5 { - float: none; - width: 364px; - margin-left: 0; +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 */ + + line-height: 38px; } -.table td.span6, -.table th.span6 { - float: none; - width: 444px; - margin-left: 0; +select[multiple], +select[size] { + height: auto; } -.table td.span7, -.table th.span7 { - float: none; - width: 524px; - margin-left: 0; +select optgroup { + font-family: inherit; + font-size: inherit; + font-style: inherit; } -.table td.span8, -.table th.span8 { - float: none; - width: 604px; - margin-left: 0; +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; } -.table td.span9, -.table th.span9 { - float: none; - width: 684px; - margin-left: 0; +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; } -.table td.span10, -.table th.span10 { - float: none; - width: 764px; - margin-left: 0; +input::-moz-placeholder, +textarea::-moz-placeholder { + color: #999999; } -.table td.span11, -.table th.span11 { - float: none; - width: 844px; - margin-left: 0; +input:-ms-input-placeholder, +textarea:-ms-input-placeholder { + color: #999999; } -.table td.span12, -.table th.span12 { - float: none; - width: 924px; - margin-left: 0; +input::-webkit-input-placeholder, +textarea::-webkit-input-placeholder { + color: #999999; } -.table tbody tr.success > td { - background-color: #dff0d8; +.radio, +.checkbox { + display: block; + min-height: 20px; + padding-left: 20px; + margin-top: 10px; + margin-bottom: 10px; + vertical-align: middle; } -.table tbody tr.error > td { - background-color: #f2dede; +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; } -.table tbody tr.warning > td { - background-color: #fcf8e3; +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; } -.table tbody tr.info > td { - background-color: #d9edf7; +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; } -.table-hover tbody tr.success:hover > td { - background-color: #d0e9c6; +/* +// 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 collaspes } +*/ -.table-hover tbody tr.error:hover > td { - background-color: #ebcccc; +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; } -.table-hover tbody tr.warning:hover > td { - background-color: #faf2cc; +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; } -.table-hover tbody tr.info:hover > td { - background-color: #c4e3f3; +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 { + min-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 { + min-height: 30px; + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; } -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - margin-top: 1px; - *margin-right: .3em; - line-height: 14px; - vertical-align: text-top; - background-image: url("../img/glyphicons-halflings.png"); - background-position: 14px 14px; - background-repeat: no-repeat; +.has-warning .control-label { + color: #c09853; } -/* White icons with optional class, or on hover/focus/active states of certain elements */ +.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); +} -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("../img/glyphicons-halflings-white.png"); +.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; } -.icon-glass { - background-position: 0 0; +.has-warning .input-group-addon { + color: #c09853; + background-color: #fcf8e3; + border-color: #c09853; } -.icon-music { - background-position: -24px 0; +.has-error .control-label { + color: #b94a48; } -.icon-search { - background-position: -48px 0; +.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); } -.icon-envelope { - background-position: -72px 0; +.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; } -.icon-heart { - background-position: -96px 0; +.has-error .input-group-addon { + color: #b94a48; + background-color: #f2dede; + border-color: #b94a48; } -.icon-star { - background-position: -120px 0; +.has-success .control-label { + color: #468847; } -.icon-star-empty { - background-position: -144px 0; +.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); } -.icon-user { - background-position: -168px 0; +.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; } -.icon-film { - background-position: -192px 0; +.has-success .input-group-addon { + color: #468847; + background-color: #dff0d8; + border-color: #468847; } -.icon-th-large { - background-position: -216px 0; +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; } -.icon-th { - background-position: -240px 0; +.input-group { + display: table; } -.icon-th-list { - background-position: -264px 0; +.input-group.col { + float: none; + padding-right: 0; + padding-left: 0; } -.icon-ok { - background-position: -288px 0; +.input-group input, +.input-group select { + width: 100%; + margin-bottom: 0; } -.icon-remove { - background-position: -312px 0; +.input-group-addon, +.input-group-btn, +.input-group input { + display: table-cell; } -.icon-zoom-in { - background-position: -336px 0; +.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; } -.icon-zoom-out { - background-position: -360px 0; +.input-group-addon, +.input-group-btn { + width: 1%; + vertical-align: middle; } -.icon-off { - background-position: -384px 0; +.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: #eeeeee; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } -.icon-signal { - background-position: -408px 0; +.input-group-addon.input-small { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; } -.icon-cog { - background-position: -432px 0; +.input-group-addon.input-large { + padding: 14px 16px; + font-size: 18px; + border-radius: 6px; } -.icon-trash { - background-position: -456px 0; +.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; } -.icon-home { - background-position: 0 -24px; +.input-group-addon:first-child { + border-right: 0; } -.icon-file { - background-position: -24px -24px; +.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; } -.icon-time { - background-position: -48px -24px; +.input-group-addon:last-child { + border-left: 0; } -.icon-road { - background-position: -72px -24px; +.input-group-btn { + position: relative; + white-space: nowrap; } -.icon-download-alt { - background-position: -96px -24px; +.input-group-btn > .btn { + position: relative; + float: left; } -.icon-download { - background-position: -120px -24px; +.input-group-btn > .btn + .btn { + margin-left: -1px; } -.icon-upload { - background-position: -144px -24px; +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; } -.icon-inbox { - background-position: -168px -24px; +.form-inline input, +.form-inline select, +.form-inline textarea, +.form-inline .radio, +.form-inline .checkbox { + display: inline-block; } -.icon-play-circle { - background-position: -192px -24px; +.form-inline .radio, +.form-inline .checkbox { + margin-top: 0; + margin-bottom: 0; } -.icon-repeat { - background-position: -216px -24px; +.form-horizontal .row + .row { + margin-top: 15px; } -.icon-refresh { - background-position: -240px -24px; +.form-horizontal .control-label { + padding-top: 6px; } -.icon-list-alt { - background-position: -264px -24px; +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; + } } -.icon-lock { - background-position: -287px -24px; +.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; } -.icon-flag { - background-position: -312px -24px; +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; } -.icon-headphones { - background-position: -336px -24px; +.btn:hover, +.btn:focus { + color: #fff; + text-decoration: none; } -.icon-volume-off { - background-position: -360px -24px; +.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); } -.icon-volume-down { - background-position: -384px -24px; +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: default; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; } -.icon-volume-up { - background-position: -408px -24px; +.btn-default { + color: #ffffff; + 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: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; } -.icon-qrcode { - background-position: -432px -24px; +.btn-primary { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; } -.icon-barcode { - background-position: -456px -24px; +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active { + background-color: #357ebd; + border-color: #3071a9; +} + +.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; } -.icon-tag { - background-position: 0 -48px; +.btn-warning { + color: #ffffff; + background-color: #f0ad4e; + border-color: #f0ad4e; } -.icon-tags { - background-position: -25px -48px; +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active { + background-color: #eea236; + border-color: #ec971f; +} + +.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; } -.icon-book { - background-position: -48px -48px; +.btn-danger { + color: #ffffff; + background-color: #d9534f; + border-color: #d9534f; } -.icon-bookmark { - background-position: -72px -48px; +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active { + background-color: #d43f3a; + border-color: #c9302c; +} + +.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; } -.icon-print { - background-position: -96px -48px; +.btn-success { + color: #ffffff; + background-color: #5cb85c; + border-color: #5cb85c; } -.icon-camera { - background-position: -120px -48px; +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active { + background-color: #4cae4c; + border-color: #449d44; +} + +.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; } -.icon-font { - background-position: -144px -48px; +.btn-info { + color: #ffffff; + background-color: #5bc0de; + border-color: #5bc0de; } -.icon-bold { - background-position: -167px -48px; +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active { + background-color: #46b8da; + border-color: #31b0d5; +} + +.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; } -.icon-italic { - background-position: -192px -48px; +.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; } -.icon-text-height { - background-position: -216px -48px; +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; } -.icon-text-width { - background-position: -240px -48px; +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; } -.icon-align-left { - background-position: -264px -48px; +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; } -.icon-align-center { - background-position: -288px -48px; +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #333333; + text-decoration: none; } -.icon-align-right { - background-position: -312px -48px; +.btn-large { + padding: 14px 16px; + font-size: 18px; + border-radius: 6px; } -.icon-align-justify { - background-position: -336px -48px; +.btn-small { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; } -.icon-list { - background-position: -360px -48px; +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; } -.icon-indent-left { - background-position: -384px -48px; +.btn-block + .btn-block { + margin-top: 5px; } -.icon-indent-right { - background-position: -408px -48px; +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; } -.icon-facetime-video { - background-position: -432px -48px; +.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; } -.icon-picture { - background-position: -456px -48px; +.fade.in { + opacity: 1; } -.icon-pencil { - background-position: 0 -72px; +.collapse { + position: relative; + 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; } -.icon-map-marker { - background-position: -24px -72px; +.collapse.in { + height: auto; } -.icon-adjust { - background-position: -48px -72px; +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('../fonts/glyphiconshalflings-regular.eot'); + src: url('../fonts/glyphiconshalflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphiconshalflings-regular.woff') format('woff'), url('../fonts/glyphiconshalflings-regular.ttf') format('truetype'), url('../fonts/glyphiconshalflings-regular.svg#glyphicons_halflingsregular') format('svg'); } -.icon-tint { - background-position: -72px -72px; +.glyphicon:before { + font-family: 'Glyphicons Halflings'; + -webkit-font-smoothing: antialiased; + font-style: normal; + font-weight: normal; + line-height: 1; } -.icon-edit { - background-position: -96px -72px; +.glyphicon-glass:before { + content: "\e001"; } -.icon-share { - background-position: -120px -72px; +.glyphicon-music:before { + content: "\e002"; } -.icon-check { - background-position: -144px -72px; +.glyphicon-search:before { + content: "\e003"; } -.icon-move { - background-position: -168px -72px; +.glyphicon-envelope:before { + content: "\2709"; } -.icon-step-backward { - background-position: -192px -72px; +.glyphicon-heart:before { + content: "\e005"; } -.icon-fast-backward { - background-position: -216px -72px; +.glyphicon-star:before { + content: "\e006"; } -.icon-backward { - background-position: -240px -72px; +.glyphicon-star-empty:before { + content: "\e007"; } -.icon-play { - background-position: -264px -72px; +.glyphicon-user:before { + content: "\e008"; } -.icon-pause { - background-position: -288px -72px; +.glyphicon-film:before { + content: "\e009"; } -.icon-stop { - background-position: -312px -72px; +.glyphicon-th-large:before { + content: "\e010"; } -.icon-forward { - background-position: -336px -72px; +.glyphicon-th:before { + content: "\e011"; } -.icon-fast-forward { - background-position: -360px -72px; +.glyphicon-th-list:before { + content: "\e012"; } -.icon-step-forward { - background-position: -384px -72px; +.glyphicon-ok:before { + content: "\e013"; } -.icon-eject { - background-position: -408px -72px; +.glyphicon-remove:before { + content: "\e014"; } -.icon-chevron-left { - background-position: -432px -72px; +.glyphicon-zoom-in:before { + content: "\e015"; } -.icon-chevron-right { - background-position: -456px -72px; +.glyphicon-zoom-out:before { + content: "\e016"; } -.icon-plus-sign { - background-position: 0 -96px; +.glyphicon-off:before { + content: "\e017"; } -.icon-minus-sign { - background-position: -24px -96px; +.glyphicon-signal:before { + content: "\e018"; } -.icon-remove-sign { - background-position: -48px -96px; +.glyphicon-cog:before { + content: "\e019"; } -.icon-ok-sign { - background-position: -72px -96px; +.glyphicon-trash:before { + content: "\e020"; } -.icon-question-sign { - background-position: -96px -96px; +.glyphicon-home:before { + content: "\e021"; } -.icon-info-sign { - background-position: -120px -96px; +.glyphicon-file:before { + content: "\e022"; } -.icon-screenshot { - background-position: -144px -96px; +.glyphicon-time:before { + content: "\e023"; } -.icon-remove-circle { - background-position: -168px -96px; +.glyphicon-road:before { + content: "\e024"; } -.icon-ok-circle { - background-position: -192px -96px; +.glyphicon-download-alt:before { + content: "\e025"; } -.icon-ban-circle { - background-position: -216px -96px; +.glyphicon-download:before { + content: "\e026"; } -.icon-arrow-left { - background-position: -240px -96px; +.glyphicon-upload:before { + content: "\e027"; } -.icon-arrow-right { - background-position: -264px -96px; +.glyphicon-inbox:before { + content: "\e028"; } -.icon-arrow-up { - background-position: -289px -96px; +.glyphicon-play-circle:before { + content: "\e029"; } -.icon-arrow-down { - background-position: -312px -96px; +.glyphicon-repeat:before { + content: "\e030"; } -.icon-share-alt { - background-position: -336px -96px; +.glyphicon-refresh:before { + content: "\e031"; } -.icon-resize-full { - background-position: -360px -96px; +.glyphicon-list-alt:before { + content: "\e032"; } -.icon-resize-small { - background-position: -384px -96px; +.glyphicon-lock:before { + content: "\e033"; } -.icon-plus { - background-position: -408px -96px; +.glyphicon-flag:before { + content: "\e034"; } -.icon-minus { - background-position: -433px -96px; +.glyphicon-headphones:before { + content: "\e035"; } -.icon-asterisk { - background-position: -456px -96px; +.glyphicon-volume-off:before { + content: "\e036"; } -.icon-exclamation-sign { - background-position: 0 -120px; +.glyphicon-volume-down:before { + content: "\e037"; } -.icon-gift { - background-position: -24px -120px; +.glyphicon-volume-up:before { + content: "\e038"; } -.icon-leaf { - background-position: -48px -120px; +.glyphicon-qrcode:before { + content: "\e039"; } -.icon-fire { - background-position: -72px -120px; +.glyphicon-barcode:before { + content: "\e040"; } -.icon-eye-open { - background-position: -96px -120px; +.glyphicon-tag:before { + content: "\e041"; } -.icon-eye-close { - background-position: -120px -120px; +.glyphicon-tags:before { + content: "\e042"; } -.icon-warning-sign { - background-position: -144px -120px; +.glyphicon-book:before { + content: "\e043"; } -.icon-plane { - background-position: -168px -120px; +.glyphicon-bookmark:before { + content: "\e044"; } -.icon-calendar { - background-position: -192px -120px; +.glyphicon-print:before { + content: "\e045"; } -.icon-random { - width: 16px; - background-position: -216px -120px; +.glyphicon-camera:before { + content: "\e046"; } -.icon-comment { - background-position: -240px -120px; +.glyphicon-font:before { + content: "\e047"; } -.icon-magnet { - background-position: -264px -120px; +.glyphicon-bold:before { + content: "\e048"; } -.icon-chevron-up { - background-position: -288px -120px; +.glyphicon-italic:before { + content: "\e049"; } -.icon-chevron-down { - background-position: -313px -119px; +.glyphicon-text-height:before { + content: "\e050"; } -.icon-retweet { - background-position: -336px -120px; +.glyphicon-text-width:before { + content: "\e051"; } -.icon-shopping-cart { - background-position: -360px -120px; +.glyphicon-align-left:before { + content: "\e052"; } -.icon-folder-close { - width: 16px; - background-position: -384px -120px; +.glyphicon-align-center:before { + content: "\e053"; } -.icon-folder-open { - width: 16px; - background-position: -408px -120px; +.glyphicon-align-right:before { + content: "\e054"; } -.icon-resize-vertical { - background-position: -432px -119px; +.glyphicon-align-justify:before { + content: "\e055"; } -.icon-resize-horizontal { - background-position: -456px -118px; +.glyphicon-list:before { + content: "\e056"; } -.icon-hdd { - background-position: 0 -144px; +.glyphicon-indent-left:before { + content: "\e057"; } -.icon-bullhorn { - background-position: -24px -144px; +.glyphicon-indent-right:before { + content: "\e058"; } -.icon-bell { - background-position: -48px -144px; +.glyphicon-facetime-video:before { + content: "\e059"; } -.icon-certificate { - background-position: -72px -144px; +.glyphicon-picture:before { + content: "\e060"; } -.icon-thumbs-up { - background-position: -96px -144px; +.glyphicon-pencil:before { + content: "\270f"; } -.icon-thumbs-down { - background-position: -120px -144px; +.glyphicon-map-marker:before { + content: "\e062"; } -.icon-hand-right { - background-position: -144px -144px; +.glyphicon-adjust:before { + content: "\e063"; } -.icon-hand-left { - background-position: -168px -144px; +.glyphicon-tint:before { + content: "\e064"; } -.icon-hand-up { - background-position: -192px -144px; +.glyphicon-edit:before { + content: "\e065"; } -.icon-hand-down { - background-position: -216px -144px; +.glyphicon-share:before { + content: "\e066"; } -.icon-circle-arrow-right { - background-position: -240px -144px; +.glyphicon-check:before { + content: "\e067"; } -.icon-circle-arrow-left { - background-position: -264px -144px; +.glyphicon-move:before { + content: "\e068"; } -.icon-circle-arrow-up { - background-position: -288px -144px; +.glyphicon-step-backward:before { + content: "\e069"; } -.icon-circle-arrow-down { - background-position: -312px -144px; +.glyphicon-fast-backward:before { + content: "\e070"; } -.icon-globe { - background-position: -336px -144px; +.glyphicon-backward:before { + content: "\e071"; } -.icon-wrench { - background-position: -360px -144px; +.glyphicon-play:before { + content: "\e072"; } -.icon-tasks { - background-position: -384px -144px; +.glyphicon-pause:before { + content: "\e073"; } -.icon-filter { - background-position: -408px -144px; +.glyphicon-stop:before { + content: "\e074"; } -.icon-briefcase { - background-position: -432px -144px; +.glyphicon-forward:before { + content: "\e075"; } -.icon-fullscreen { - background-position: -456px -144px; +.glyphicon-fast-forward:before { + content: "\e076"; } -.dropup, -.dropdown { - position: relative; +.glyphicon-step-forward:before { + content: "\e077"; } -.dropdown-toggle { - *margin-bottom: -3px; +.glyphicon-eject:before { + content: "\e078"; } -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; +.glyphicon-chevron-left:before { + content: "\e079"; } -.caret { - display: inline-block; - width: 0; - height: 0; - vertical-align: top; - border-top: 4px solid #000000; - border-right: 4px solid transparent; - border-left: 4px solid transparent; - content: ""; +.glyphicon-chevron-right:before { + content: "\e080"; } -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; +.glyphicon-plus-sign:before { + content: "\e081"; } -.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: #ffffff; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.2); - *border-right-width: 2px; - *border-bottom-width: 2px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; +.glyphicon-minus-sign:before { + content: "\e082"; } -.dropdown-menu.pull-right { - right: 0; - left: auto; +.glyphicon-remove-sign:before { + content: "\e083"; } -.dropdown-menu .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; +.glyphicon-ok-sign:before { + content: "\e084"; } -.dropdown-menu > li > a { - display: block; - padding: 3px 20px; - clear: both; - font-weight: normal; - line-height: 20px; - color: #333333; - white-space: nowrap; +.glyphicon-question-sign:before { + content: "\e085"; } -.dropdown-menu > li > a:hover, -.dropdown-menu > li > a:focus, -.dropdown-submenu:hover > a, -.dropdown-submenu:focus > a { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +.glyphicon-info-sign:before { + content: "\e086"; } -.dropdown-menu > .active > a, -.dropdown-menu > .active > a:hover, -.dropdown-menu > .active > a:focus { - color: #ffffff; - text-decoration: none; - background-color: #0081c2; - background-image: -moz-linear-gradient(top, #0088cc, #0077b3); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0077b3)); - background-image: -webkit-linear-gradient(top, #0088cc, #0077b3); - background-image: -o-linear-gradient(top, #0088cc, #0077b3); - background-image: linear-gradient(to bottom, #0088cc, #0077b3); - background-repeat: repeat-x; - outline: 0; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0077b3', GradientType=0); +.glyphicon-screenshot:before { + content: "\e087"; } -.dropdown-menu > .disabled > a, -.dropdown-menu > .disabled > a:hover, -.dropdown-menu > .disabled > a:focus { - color: #999999; +.glyphicon-remove-circle:before { + content: "\e088"; } -.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); +.glyphicon-ok-circle:before { + content: "\e089"; } -.open { - *z-index: 1000; +.glyphicon-ban-circle:before { + content: "\e090"; } -.open > .dropdown-menu { - display: block; +.glyphicon-arrow-left:before { + content: "\e091"; } -.pull-right > .dropdown-menu { - right: 0; - left: auto; +.glyphicon-arrow-right:before { + content: "\e092"; } -.dropup .caret, -.navbar-fixed-bottom .dropdown .caret { - border-top: 0; - border-bottom: 4px solid #000000; - content: ""; +.glyphicon-arrow-up:before { + content: "\e093"; } -.dropup .dropdown-menu, -.navbar-fixed-bottom .dropdown .dropdown-menu { - top: auto; - bottom: 100%; - margin-bottom: 1px; +.glyphicon-arrow-down:before { + content: "\e094"; } -.dropdown-submenu { - position: relative; +.glyphicon-share-alt:before { + content: "\e095"; } -.dropdown-submenu > .dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - -webkit-border-radius: 0 6px 6px 6px; - -moz-border-radius: 0 6px 6px 6px; - border-radius: 0 6px 6px 6px; +.glyphicon-resize-full:before { + content: "\e096"; } -.dropdown-submenu:hover > .dropdown-menu { - display: block; +.glyphicon-resize-small:before { + content: "\e097"; } -.dropup .dropdown-submenu > .dropdown-menu { - top: auto; - bottom: 0; - margin-top: 0; - margin-bottom: -2px; - -webkit-border-radius: 5px 5px 5px 0; - -moz-border-radius: 5px 5px 5px 0; - border-radius: 5px 5px 5px 0; +.glyphicon-plus:before { + content: "\002b"; } -.dropdown-submenu > a:after { - display: block; - float: right; - width: 0; - height: 0; - margin-top: 5px; - margin-right: -10px; - border-color: transparent; - border-left-color: #cccccc; - border-style: solid; - border-width: 5px 0 5px 5px; - content: " "; +.glyphicon-minus:before { + content: "\2212"; } -.dropdown-submenu:hover > a:after { - border-left-color: #ffffff; +.glyphicon-asterisk:before { + content: "\002a"; } -.dropdown-submenu.pull-left { - float: none; +.glyphicon-exclamation-sign:before { + content: "\e101"; } -.dropdown-submenu.pull-left > .dropdown-menu { - left: -100%; - margin-left: 10px; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; +.glyphicon-gift:before { + content: "\e102"; } -.dropdown .dropdown-menu .nav-header { - padding-right: 20px; - padding-left: 20px; +.glyphicon-leaf:before { + content: "\e103"; } -.typeahead { - z-index: 1051; - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; +.glyphicon-fire:before { + content: "\e104"; } -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #e3e3e3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +.glyphicon-eye-open:before { + content: "\e105"; } -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); +.glyphicon-eye-close:before { + content: "\e106"; } -.well-large { - padding: 24px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; +.glyphicon-warning-sign:before { + content: "\e107"; } -.well-small { - padding: 9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; +.glyphicon-plane:before { + content: "\e108"; } -.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; +.glyphicon-calendar:before { + content: "\e109"; } -.fade.in { - opacity: 1; +.glyphicon-random:before { + content: "\e110"; } -.collapse { - position: relative; - 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; +.glyphicon-comment:before { + content: "\e111"; } -.collapse.in { - height: auto; +.glyphicon-magnet:before { + content: "\e112"; } -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 20px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); +.glyphicon-chevron-up:before { + content: "\e113"; } -.close:hover, -.close:focus { - color: #000000; - text-decoration: none; - cursor: pointer; - opacity: 0.4; - filter: alpha(opacity=40); +.glyphicon-chevron-down:before { + content: "\e114"; } -button.close { - padding: 0; - cursor: pointer; - background: transparent; - border: 0; - -webkit-appearance: none; +.glyphicon-retweet:before { + content: "\e115"; } -.btn { - display: inline-block; - *display: inline; - padding: 4px 12px; - margin-bottom: 0; - *margin-left: .3em; - font-size: 14px; - line-height: 20px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - vertical-align: middle; - cursor: pointer; - background-color: #f5f5f5; - *background-color: #e6e6e6; - background-image: -moz-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6); - background-image: -o-linear-gradient(top, #ffffff, #e6e6e6); - background-image: linear-gradient(to bottom, #ffffff, #e6e6e6); - background-repeat: repeat-x; - border: 1px solid #cccccc; - *border: 0; - border-color: #e6e6e6 #e6e6e6 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - border-bottom-color: #b3b3b3; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe6e6e6', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +.glyphicon-shopping-cart:before { + content: "\e116"; } -.btn:hover, -.btn:focus, -.btn:active, -.btn.active, -.btn.disabled, -.btn[disabled] { - color: #333333; - background-color: #e6e6e6; - *background-color: #d9d9d9; +.glyphicon-folder-close:before { + content: "\e117"; } -.btn:active, -.btn.active { - background-color: #cccccc \9; +.glyphicon-folder-open:before { + content: "\e118"; } -.btn:first-child { - *margin-left: 0; +.glyphicon-resize-vertical:before { + content: "\e119"; } -.btn:hover, -.btn:focus { - color: #333333; - text-decoration: none; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; +.glyphicon-resize-horizontal:before { + content: "\e120"; } -.btn:focus { - outline: thin dotted #333; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; +.glyphicon-hdd:before { + content: "\e121"; } -.btn.active, -.btn:active { - background-image: none; - outline: 0; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +.glyphicon-bullhorn:before { + content: "\e122"; } -.btn.disabled, -.btn[disabled] { - cursor: default; - background-image: none; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; +.glyphicon-bell:before { + content: "\e123"; } -.btn-large { - padding: 11px 19px; - font-size: 17.5px; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; +.glyphicon-certificate:before { + content: "\e124"; } -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; +.glyphicon-thumbs-up:before { + content: "\e125"; } -.btn-small { - padding: 2px 10px; - font-size: 11.9px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; +.glyphicon-thumbs-down:before { + content: "\e126"; } -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; +.glyphicon-hand-right:before { + content: "\e127"; } -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; +.glyphicon-hand-left:before { + content: "\e128"; } -.btn-mini { - padding: 0 6px; - font-size: 10.5px; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; +.glyphicon-hand-up:before { + content: "\e129"; } -.btn-block { - display: block; - width: 100%; - padding-right: 0; - padding-left: 0; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; +.glyphicon-hand-down:before { + content: "\e130"; } -.btn-block + .btn-block { - margin-top: 5px; +.glyphicon-circle-arrow-right:before { + content: "\e131"; } -input[type="submit"].btn-block, -input[type="reset"].btn-block, -input[type="button"].btn-block { - width: 100%; +.glyphicon-circle-arrow-left:before { + content: "\e132"; } -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255, 255, 255, 0.75); +.glyphicon-circle-arrow-up:before { + content: "\e133"; } -.btn-primary { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #006dcc; - *background-color: #0044cc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(to bottom, #0088cc, #0044cc); - background-repeat: repeat-x; - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc', endColorstr='#ff0044cc', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.glyphicon-circle-arrow-down:before { + content: "\e134"; } -.btn-primary:hover, -.btn-primary:focus, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - color: #ffffff; - background-color: #0044cc; - *background-color: #003bb3; +.glyphicon-globe:before { + content: "\e135"; } -.btn-primary:active, -.btn-primary.active { - background-color: #003399 \9; +.glyphicon-wrench:before { + content: "\e136"; } -.btn-warning { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #faa732; - *background-color: #f89406; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.glyphicon-tasks:before { + content: "\e137"; } -.btn-warning:hover, -.btn-warning:focus, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - color: #ffffff; - background-color: #f89406; - *background-color: #df8505; +.glyphicon-filter:before { + content: "\e138"; } -.btn-warning:active, -.btn-warning.active { - background-color: #c67605 \9; +.glyphicon-briefcase:before { + content: "\e139"; } -.btn-danger { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #da4f49; - *background-color: #bd362f; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(to bottom, #ee5f5b, #bd362f); - background-repeat: repeat-x; - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffbd362f', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.glyphicon-fullscreen:before { + content: "\e140"; } -.btn-danger:hover, -.btn-danger:focus, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - color: #ffffff; - background-color: #bd362f; - *background-color: #a9302a; +.glyphicon-dashboard:before { + content: "\e141"; } -.btn-danger:active, -.btn-danger.active { - background-color: #942a25 \9; +.glyphicon-paperclip:before { + content: "\e142"; } -.btn-success { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #5bb75b; - *background-color: #51a351; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(to bottom, #62c462, #51a351); - background-repeat: repeat-x; - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff51a351', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.glyphicon-heart-empty:before { + content: "\e143"; } -.btn-success:hover, -.btn-success:focus, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - color: #ffffff; - background-color: #51a351; - *background-color: #499249; +.glyphicon-link:before { + content: "\e144"; } -.btn-success:active, -.btn-success.active { - background-color: #408140 \9; +.glyphicon-phone:before { + content: "\e145"; } -.btn-info { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #49afcd; - *background-color: #2f96b4; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(to bottom, #5bc0de, #2f96b4); - background-repeat: repeat-x; - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2f96b4', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.glyphicon-pushpin:before { + content: "\e146"; } -.btn-info:hover, -.btn-info:focus, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - color: #ffffff; - background-color: #2f96b4; - *background-color: #2a85a0; +.glyphicon-euro:before { + content: "\20ac"; } -.btn-info:active, -.btn-info.active { - background-color: #24748c \9; +.glyphicon-usd:before { + content: "\e148"; } -.btn-inverse { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #363636; - *background-color: #222222; - background-image: -moz-linear-gradient(top, #444444, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#444444), to(#222222)); - background-image: -webkit-linear-gradient(top, #444444, #222222); - background-image: -o-linear-gradient(top, #444444, #222222); - background-image: linear-gradient(to bottom, #444444, #222222); - background-repeat: repeat-x; - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444', endColorstr='#ff222222', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.glyphicon-gbp:before { + content: "\e149"; } -.btn-inverse:hover, -.btn-inverse:focus, -.btn-inverse:active, -.btn-inverse.active, -.btn-inverse.disabled, -.btn-inverse[disabled] { - color: #ffffff; - background-color: #222222; - *background-color: #151515; +.glyphicon-sort:before { + content: "\e150"; } -.btn-inverse:active, -.btn-inverse.active { - background-color: #080808 \9; +.glyphicon-sort-by-alphabet:before { + content: "\e151"; } -button.btn, -input[type="submit"].btn { - *padding-top: 3px; - *padding-bottom: 3px; +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; } -button.btn::-moz-focus-inner, -input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; +.glyphicon-sort-by-order:before { + content: "\e153"; } -button.btn.btn-large, -input[type="submit"].btn.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; +.glyphicon-sort-by-order-alt:before { + content: "\e154"; } -button.btn.btn-small, -input[type="submit"].btn.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; +.glyphicon-sort-by-attributes:before { + content: "\e155"; } -button.btn.btn-mini, -input[type="submit"].btn.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; } -.btn-link, -.btn-link:active, -.btn-link[disabled] { - background-color: transparent; - background-image: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; +.glyphicon-unchecked:before { + content: "\e157"; } -.btn-link { - color: #0088cc; - cursor: pointer; - border-color: transparent; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; +.glyphicon-expand:before { + content: "\e158"; } -.btn-link:hover, -.btn-link:focus { - color: #005580; - text-decoration: underline; - background-color: transparent; +.glyphicon-collapse:before { + content: "\e159"; } -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: #333333; - text-decoration: none; +.glyphicon-collapse-top:before { + content: "\e160"; } -.btn-group { - position: relative; +.caret { display: inline-block; - *display: inline; - *margin-left: .3em; - font-size: 0; - white-space: nowrap; + width: 0; + height: 0; + margin-left: 2px; vertical-align: middle; - *zoom: 1; -} - -.btn-group:first-child { - *margin-left: 0; + border-top: 4px solid #000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; } -.btn-group + .btn-group { - margin-left: 5px; +.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: #ffffff; + 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); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; } -.btn-toolbar { - margin-top: 10px; - margin-bottom: 10px; - font-size: 0; +.dropdown-menu.pull-right { + right: 0; + left: auto; } -.btn-toolbar > .btn + .btn, -.btn-toolbar > .btn-group + .btn, -.btn-toolbar > .btn + .btn-group { - margin-left: 5px; +.dropdown-menu .divider { + height: 2px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; } -.btn-group > .btn { - position: relative; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.428571429; + color: #333333; + white-space: nowrap; } -.btn-group > .btn + .btn { - margin-left: -1px; +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #ffffff; + 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); } -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: 14px; +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + 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); } -.btn-group > .btn-mini { - font-size: 10.5px; +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; } -.btn-group > .btn-small { - font-size: 11.9px; +.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); } -.btn-group > .btn-large { - font-size: 17.5px; +.open > .dropdown-menu { + display: block; } -.btn-group > .btn:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; +.open > a { + outline: 0; } -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; } -.btn-group > .btn.large:first-child { - margin-left: 0; - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; +.pull-right > .dropdown-menu { + right: 0; + left: auto; } -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000; + content: ""; } -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; } -.btn-group .dropdown-toggle:active, -.btn-group.open .dropdown-toggle { - outline: 0; +.dropdown-submenu { + position: relative; } -.btn-group > .btn + .dropdown-toggle { - *padding-top: 5px; - padding-right: 8px; - *padding-bottom: 5px; - padding-left: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + border-top-left-radius: 0; } -.btn-group > .btn-mini + .dropdown-toggle { - *padding-top: 2px; - padding-right: 5px; - *padding-bottom: 2px; - padding-left: 5px; +.dropdown-submenu:hover > .dropdown-menu { + display: block; } -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + border-bottom-left-radius: 0; } -.btn-group > .btn-large + .dropdown-toggle { - *padding-top: 7px; - padding-right: 12px; - *padding-bottom: 7px; - padding-left: 12px; +.dropdown-submenu > a:after { + display: block; + float: right; + width: 0; + height: 0; + margin-top: 5px; + margin-right: -10px; + border-color: transparent; + border-left-color: #cccccc; + border-style: solid; + border-width: 5px 0 5px 5px; + content: " "; } -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; } -.btn-group.open .btn.dropdown-toggle { - background-color: #e6e6e6; +.dropdown-submenu.pull-left { + float: none; } -.btn-group.open .btn-primary.dropdown-toggle { - background-color: #0044cc; +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + border-top-right-radius: 0; } -.btn-group.open .btn-warning.dropdown-toggle { - background-color: #f89406; +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; } -.btn-group.open .btn-danger.dropdown-toggle { - background-color: #bd362f; +.typeahead { + z-index: 1051; } -.btn-group.open .btn-success.dropdown-toggle { - background-color: #51a351; +.list-group { + margin: 0 0 20px; + background-color: #ffffff; } -.btn-group.open .btn-info.dropdown-toggle { - background-color: #2f96b4; +.list-group-item { + position: relative; + display: block; + padding: 10px 30px 10px 15px; + margin-bottom: -1px; + border: 1px solid #dddddd; } -.btn-group.open .btn-inverse.dropdown-toggle { - background-color: #222222; +.list-group-item:first-child { + border-top-right-radius: 4px; + border-top-left-radius: 4px; } -.btn .caret { - margin-top: 8px; - margin-left: 0; +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; } -.btn-large .caret { - margin-top: 6px; +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; } -.btn-large .caret { - border-top-width: 5px; - border-right-width: 5px; - border-left-width: 5px; +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; } -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; +a.list-group-item .list-group-item-heading { + color: #333; } -.dropup .btn-large .caret { - border-bottom-width: 5px; +a.list-group-item .list-group-item-text { + color: #555; } -.btn-primary .caret, -.btn-warning .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret, -.btn-inverse .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +a.list-group-item:hover, +a.list-group-item:focus { + text-decoration: none; + background-color: #f5f5f5; } -.btn-group-vertical { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; +a.list-group-item.active { + z-index: 2; + color: #ffffff; + background-color: #428bca; + border-color: #428bca; } -.btn-group-vertical > .btn { - display: block; - float: none; - max-width: 100%; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; +a.list-group-item.active .list-group-item-heading { + color: inherit; } -.btn-group-vertical > .btn + .btn { - margin-top: -1px; - margin-left: 0; +a.list-group-item.active .list-group-item-text { + color: #e1edf7; } -.btn-group-vertical > .btn:first-child { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; +.list-group-item > .badge, +.list-group-item > .glyphicon-chevron-right { + float: right; + margin-right: -15px; } -.btn-group-vertical > .btn:last-child { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; +.list-group-item > .glyphicon + .badge { + margin-right: 5px; } -.btn-group-vertical > .btn-large:first-child { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; +.panel { + padding: 15px; + margin-bottom: 20px; + background-color: #ffffff; + border: 1px solid #dddddd; + 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); } -.btn-group-vertical > .btn-large:last-child { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; +.panel-heading { + padding: 10px 15px; + margin: -15px -15px 15px; + font-size: 17.5px; + font-weight: 500; + background-color: #f5f5f5; + border-bottom: 1px solid #dddddd; + border-top-right-radius: 3px; + border-top-left-radius: 3px; } -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 20px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; +.panel-footer { + padding: 10px 15px; + margin: 15px -15px -15px; + background-color: #f5f5f5; + border-top: 1px solid #dddddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; } -.alert, -.alert h4 { - color: #c09853; +.panel-primary { + border-color: #428bca; } -.alert h4 { - margin: 0; +.panel-primary .panel-heading { + color: #ffffff; + background-color: #428bca; + border-color: #428bca; } -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 20px; +.panel-success { + border-color: #d6e9c6; } -.alert-success { +.panel-success .panel-heading { color: #468847; background-color: #dff0d8; border-color: #d6e9c6; } -.alert-success h4 { - color: #468847; +.panel-warning { + border-color: #fbeed5; +} + +.panel-warning .panel-heading { + color: #c09853; + background-color: #fcf8e3; + border-color: #fbeed5; } -.alert-danger, -.alert-error { +.panel-danger { + border-color: #eed3d7; +} + +.panel-danger .panel-heading { color: #b94a48; background-color: #f2dede; border-color: #eed3d7; } -.alert-danger h4, -.alert-error h4 { - color: #b94a48; +.panel-info { + border-color: #bce8f1; } -.alert-info { +.panel-info .panel-heading { color: #3a87ad; background-color: #d9edf7; border-color: #bce8f1; } -.alert-info h4 { - color: #3a87ad; +.list-group-flush { + margin: 15px -15px -15px; } -.alert-block { - padding-top: 14px; - padding-bottom: 14px; +.list-group-flush .list-group-item { + border-width: 1px 0; } -.alert-block > p, -.alert-block > ul { - margin-bottom: 0; +.list-group-flush .list-group-item:first-child { + border-top-right-radius: 0; + border-top-left-radius: 0; } -.alert-block p + p { - margin-top: 5px; +.list-group-flush .list-group-item:last-child { + border-bottom: 0; } -.nav { +.well { + min-height: 20px; + padding: 19px; margin-bottom: 20px; - margin-left: 0; - list-style: none; + 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); } -.nav > li > a { - display: block; +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); } -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: #eeeeee; +.well-large { + padding: 24px; + border-radius: 6px; } -.nav > li > a > img { - max-width: none; +.well-small { + padding: 9px; + border-radius: 3px; } -.nav > .pull-right { +.close { float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); } -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: 20px; - color: #999999; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - text-transform: uppercase; +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); } -.nav li + .nav-header { - margin-top: 9px; +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; } -.nav-list { - padding-right: 15px; - padding-left: 15px; +.nav { + padding-left: 0; margin-bottom: 0; + margin-left: 0; + list-style: none; } -.nav-list > li > a, -.nav-list .nav-header { - margin-right: -15px; - margin-left: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +.nav:before, +.nav:after { + display: table; + content: " "; } -.nav-list > li > a { - padding: 3px 15px; +.nav:after { + clear: both; } -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; +.nav:before, +.nav:after { + display: table; + content: " "; } -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; +.nav:after { + clear: both; } -.nav-list .divider { - *width: 100%; - height: 1px; - margin: 9px 1px; - *margin: -5px 0 5px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; +.nav > li { + position: relative; + display: block; } -.nav-tabs, -.nav-pills { - *zoom: 1; +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; } -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - line-height: 0; - content: ""; +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; } -.nav-tabs:after, -.nav-pills:after { - clear: both; +.nav > li.disabled > a { + color: #999999; } -.nav-tabs > li, -.nav-pills > li { - float: left; +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: default; + background-color: transparent; } -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; +.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 #ffffff; } .nav-tabs { @@ -4053,27 +3271,24 @@ input[type="submit"].btn.btn-mini { } .nav-tabs > li { + float: left; margin-bottom: -1px; } .nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: 20px; + margin-right: 2px; + line-height: 1.428571429; border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; } -.nav-tabs > li > a:hover, -.nav-tabs > li > a:focus { +.nav-tabs > li > a:hover { border-color: #eeeeee #eeeeee #dddddd; } -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { color: #555555; cursor: default; background-color: #ffffff; @@ -4081,166 +3296,101 @@ input[type="submit"].btn.btn-mini { border-bottom-color: transparent; } -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: #ffffff; - background-color: #0088cc; -} - -.nav-stacked > li { - float: none; -} - -.nav-stacked > li > a { - margin-right: 0; -} - -.nav-tabs.nav-stacked { +.nav-tabs.nav-justified { + width: 100%; border-bottom: 0; } -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} - -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-topleft: 4px; -} - -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -moz-border-radius-bottomleft: 4px; -} - -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - z-index: 2; - border-color: #ddd; -} - -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; +.nav-tabs.nav-justified > li { + display: table-cell; + float: none; + width: 1%; } -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; +.nav-tabs.nav-justified > li > a { + text-align: center; } -.nav-tabs .dropdown-menu { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-bottom: 1px solid #ddd; } -.nav-pills .dropdown-menu { - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; +.nav-tabs.nav-justified > .active > a { + border-bottom-color: #ffffff; } -.nav .dropdown-toggle .caret { - margin-top: 6px; - border-top-color: #0088cc; - border-bottom-color: #0088cc; +.nav-pills > li { + float: left; } -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: #005580; - border-bottom-color: #005580; +.nav-pills > li > a { + border-radius: 5px; } -/* move down carets for tabs */ - -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; +.nav-pills > li + li > a { + margin-left: 2px; } -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #428bca; } -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; +.nav-stacked > li { + float: none; } -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; +.nav-stacked > li + li > a { + margin-top: 2px; + margin-left: 0; } -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: #ffffff; - background-color: #999999; - border-color: #999999; +.nav-justified { + width: 100%; } -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); +.nav-justified > li { + display: table-cell; + float: none; + width: 1%; } -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: #999999; +.nav-justified > li > a { + text-align: center; } -.tabbable { - *zoom: 1; +.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; - line-height: 0; - content: ""; + content: " "; } .tabbable:after { clear: both; } -.tab-content { - overflow: auto; +.tabbable:before, +.tabbable:after { + display: table; + content: " "; } -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; +.tabbable:after { + clear: both; } .tab-content > .tab-pane, @@ -4250,691 +3400,535 @@ input[type="submit"].btn.btn-mini { .tab-content > .active, .pill-content > .active { - display: block; -} - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} - -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} - -.tabs-below > .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} - -.tabs-below > .nav-tabs > li > a:hover, -.tabs-below > .nav-tabs > li > a:focus { - border-top-color: #ddd; - border-bottom-color: transparent; + display: block; } -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; +.nav .caret { + border-top-color: #428bca; + border-bottom-color: #428bca; } -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; +.nav a:hover .caret { + border-top-color: #2a6496; + border-bottom-color: #2a6496; } -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-right-radius: 0; + border-top-left-radius: 0; } -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; +.navbar { + position: relative; + padding-right: 15px; + padding-left: 15px; + margin-bottom: 20px; + background-color: #eeeeee; + border-radius: 4px; } -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; +.navbar:before, +.navbar:after { + display: table; + content: " "; } -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; +.navbar:after { + clear: both; } -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; +.navbar:before, +.navbar:after { + display: table; + content: " "; } -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; +.navbar:after { + clear: both; } -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; +.navbar-nav { + margin-top: 10px; + margin-bottom: 15px; } -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; +.navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + color: #777777; + border-radius: 4px; } -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; +.navbar-nav > li > a:hover, +.navbar-nav > li > a:focus { + color: #333333; + background-color: transparent; } -.nav > .disabled > a { - color: #999999; +.navbar-nav > .active > a, +.navbar-nav > .active > a:hover, +.navbar-nav > .active > a:focus { + color: #555555; + background-color: #d5d5d5; } -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - cursor: default; +.navbar-nav > .disabled > a, +.navbar-nav > .disabled > a:hover, +.navbar-nav > .disabled > a:focus { + color: #cccccc; background-color: transparent; } -.navbar { - *position: relative; - *z-index: 2; - margin-bottom: 20px; - overflow: visible; +.navbar-nav.pull-right { + width: 100%; } -.navbar-inner { - min-height: 40px; - padding-right: 20px; - padding-left: 20px; - background-color: #fafafa; - background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2)); - background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2); - background-image: -o-linear-gradient(top, #ffffff, #f2f2f2); - background-image: linear-gradient(to bottom, #ffffff, #f2f2f2); - background-repeat: repeat-x; - border: 1px solid #d4d4d4; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0); - *zoom: 1; - -webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - -moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); - box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065); -} - -.navbar-inner:before, -.navbar-inner:after { - display: table; - line-height: 0; - content: ""; +.navbar-static-top { + border-radius: 0; } -.navbar-inner:after { - clear: both; +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + border-radius: 0; } -.navbar .container { - width: auto; +.navbar-fixed-top { + top: 0; } -.nav-collapse.collapse { - height: auto; - overflow: visible; +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; } -.navbar .brand { +.navbar-brand { display: block; - float: left; - padding: 10px 20px 10px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; + max-width: 200px; + padding: 15px; + margin-right: auto; + margin-left: auto; + font-size: 18px; + font-weight: 500; + line-height: 20px; color: #777777; - text-shadow: 0 1px 0 #ffffff; + text-align: center; } -.navbar .brand:hover, -.navbar .brand:focus { +.navbar-brand:hover, +.navbar-brand:focus { + color: #5e5e5e; text-decoration: none; + background-color: transparent; } -.navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #777777; +.navbar-toggle { + position: absolute; + top: 10px; + right: 10px; + padding: 8px 12px; + background-color: transparent; + border: 1px solid #ddd; + border-radius: 4px; } -.navbar-link { - color: #777777; +.navbar-toggle:hover, +.navbar-toggle:focus { + background-color: #ddd; } -.navbar-link:hover, -.navbar-link:focus { - color: #333333; +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + background-color: #ccc; + border-radius: 1px; } -.navbar .divider-vertical { - height: 40px; - margin: 0 9px; - border-right: 1px solid #ffffff; - border-left: 1px solid #f2f2f2; +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; } -.navbar .btn, -.navbar .btn-group { - margin-top: 5px; +.navbar-form { + margin-top: 6px; + margin-bottom: 6px; } -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; +.navbar-form input, +.navbar-form select, +.navbar-form textarea, +.navbar-form .radio, +.navbar-form .checkbox { + display: inline-block; } -.navbar-form { +.navbar-form .radio, +.navbar-form .checkbox { + margin-top: 0; margin-bottom: 0; - *zoom: 1; } -.navbar-form:before, -.navbar-form:after { - display: table; - line-height: 0; - content: ""; +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; } -.navbar-form:after { - clear: both; +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } -.navbar-form input, -.navbar-form select, -.navbar-form .radio, -.navbar-form .checkbox { - margin-top: 5px; +.navbar-nav > .dropdown > a:hover .caret, +.navbar-nav > .dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; } -.navbar-form input, -.navbar-form select, -.navbar-form .btn { - display: inline-block; - margin-bottom: 0; +.navbar-nav > .open > a, +.navbar-nav > .open > a:hover, +.navbar-nav > .open > a:focus { + color: #555555; + background-color: #d5d5d5; } -.navbar-form input[type="image"], -.navbar-form input[type="checkbox"], -.navbar-form input[type="radio"] { - margin-top: 3px; +.navbar-nav > .dropdown > a .caret { + border-top-color: #777777; + border-bottom-color: #777777; } -.navbar-form .input-append, -.navbar-form .input-prepend { - margin-top: 5px; - white-space: nowrap; +.navbar-nav > .open > a .caret, +.navbar-nav > .open > a:hover .caret, +.navbar-nav > .open > a:focus .caret { + border-top-color: #555555; + border-bottom-color: #555555; } -.navbar-form .input-append input, -.navbar-form .input-prepend input { - margin-top: 0; +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; } -.navbar-search { - position: relative; - float: left; - margin-top: 5px; - margin-bottom: 0; +.navbar-inverse { + background-color: #222222; } -.navbar-search .search-query { - padding: 4px 14px; - margin-bottom: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; +.navbar-inverse .navbar-brand { + color: #999999; } -.navbar-static-top { - position: static; - margin-bottom: 0; +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; } -.navbar-static-top .navbar-inner { - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; +.navbar-inverse .navbar-text { + color: #999999; } -.navbar-fixed-top, -.navbar-fixed-bottom { - position: fixed; - right: 0; - left: 0; - z-index: 1030; - margin-bottom: 0; +.navbar-inverse .navbar-nav > li > a { + color: #999999; } -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #ffffff; + background-color: transparent; } -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #ffffff; + background-color: #080808; } -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-right: 0; - padding-left: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444444; + background-color: transparent; } -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - width: 940px; +.navbar-inverse .navbar-toggle { + border-color: #333; } -.navbar-fixed-top { - top: 0; +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; } -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - -webkit-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 10px rgba(0, 0, 0, 0.1); +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; } -.navbar-fixed-bottom { - bottom: 0; +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #ffffff; + background-color: #080808; } -.navbar-fixed-bottom .navbar-inner { - -webkit-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); - box-shadow: 0 -1px 10px rgba(0, 0, 0, 0.1); +.navbar-inverse .navbar-nav > .dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; } -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; +.navbar-inverse .navbar-nav > .dropdown > a .caret { + border-top-color: #999999; + border-bottom-color: #999999; } -.navbar .nav.pull-right { - float: right; - margin-right: 0; +.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: #ffffff; + border-bottom-color: #ffffff; } -.navbar .nav > li { - float: left; +@media screen and (min-width: 768px) { + .navbar-brand { + float: left; + margin-right: 5px; + margin-left: -5px; + } + .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 .nav > li > a { - float: none; - padding: 10px 15px 10px; - color: #777777; - text-decoration: none; - text-shadow: 0 1px 0 #ffffff; +.navbar-btn { + margin-top: 6px; +} + +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; } -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; +.navbar-link { + color: #777777; } -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { +.navbar-link:hover { color: #333333; - text-decoration: none; - background-color: transparent; } -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: #555555; - text-decoration: none; - background-color: #e5e5e5; - -webkit-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - -moz-box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 8px rgba(0, 0, 0, 0.125); +.navbar-inverse .navbar-link { + color: #999999; } -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-right: 5px; - margin-left: 5px; +.navbar-inverse .navbar-link:hover { color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #ededed; - *background-color: #e5e5e5; - background-image: -moz-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f2f2f2), to(#e5e5e5)); - background-image: -webkit-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: -o-linear-gradient(top, #f2f2f2, #e5e5e5); - background-image: linear-gradient(to bottom, #f2f2f2, #e5e5e5); - background-repeat: repeat-x; - border-color: #e5e5e5 #e5e5e5 #bfbfbf; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2f2f2', endColorstr='#ffe5e5e5', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); } -.navbar .btn-navbar:hover, -.navbar .btn-navbar:focus, -.navbar .btn-navbar:active, -.navbar .btn-navbar.active, -.navbar .btn-navbar.disabled, -.navbar .btn-navbar[disabled] { - color: #ffffff; - background-color: #e5e5e5; - *background-color: #d9d9d9; +.btn .caret { + border-top-color: #ffffff; } -.navbar .btn-navbar:active, -.navbar .btn-navbar.active { - background-color: #cccccc \9; +.dropup .btn .caret { + border-bottom-color: #ffffff; } -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; } -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; } -.navbar .nav > li > .dropdown-menu:before { - position: absolute; - top: -7px; - left: 9px; - display: inline-block; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-left: 7px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - content: ''; +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active { + z-index: 2; } -.navbar .nav > li > .dropdown-menu:after { - position: absolute; - top: -6px; - left: 10px; - display: inline-block; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - border-left: 6px solid transparent; - content: ''; +.btn-group .btn + .btn { + margin-left: -1px; } -.navbar-fixed-bottom .nav > li > .dropdown-menu:before { - top: auto; - bottom: -7px; - border-top: 7px solid #ccc; - border-bottom: 0; - border-top-color: rgba(0, 0, 0, 0.2); +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; } -.navbar-fixed-bottom .nav > li > .dropdown-menu:after { - top: auto; - bottom: -6px; - border-top: 6px solid #ffffff; - border-bottom: 0; +.btn-toolbar:after { + clear: both; } -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: #333333; - border-bottom-color: #333333; +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; } -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - color: #555555; - background-color: #e5e5e5; +.btn-toolbar:after { + clear: both; } -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #777777; - border-bottom-color: #777777; +.btn-toolbar .btn-group { + float: left; } -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #555555; - border-bottom-color: #555555; +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; } -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { - right: 0; - left: auto; +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; } -.navbar .pull-right > li > .dropdown-menu:before, -.navbar .nav > li > .dropdown-menu.pull-right:before { - right: 12px; - left: auto; +.btn-group > .btn:first-child { + margin-left: 0; } -.navbar .pull-right > li > .dropdown-menu:after, -.navbar .nav > li > .dropdown-menu.pull-right:after { - right: 13px; - left: auto; +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; } -.navbar .pull-right > li > .dropdown-menu .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { - right: 100%; - left: auto; - margin-right: -1px; - margin-left: 0; - -webkit-border-radius: 6px 0 6px 6px; - -moz-border-radius: 6px 0 6px 6px; - border-radius: 6px 0 6px 6px; -} - -.navbar-inverse .navbar-inner { - background-color: #1b1b1b; - background-image: -moz-linear-gradient(top, #222222, #111111); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#222222), to(#111111)); - background-image: -webkit-linear-gradient(top, #222222, #111111); - background-image: -o-linear-gradient(top, #222222, #111111); - background-image: linear-gradient(to bottom, #222222, #111111); - background-repeat: repeat-x; - border-color: #252525; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff222222', endColorstr='#ff111111', GradientType=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; } -.navbar-inverse .brand, -.navbar-inverse .nav > li > a { - color: #999999; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +.btn-group > .btn-group { + float: left; } -.navbar-inverse .brand:hover, -.navbar-inverse .nav > li > a:hover, -.navbar-inverse .brand:focus, -.navbar-inverse .nav > li > a:focus { - color: #ffffff; +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; } -.navbar-inverse .brand { - color: #999999; +.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; } -.navbar-inverse .navbar-text { - color: #999999; +.btn-group > .btn-group:last-child > .btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; } -.navbar-inverse .nav > li > a:focus, -.navbar-inverse .nav > li > a:hover { - color: #ffffff; - background-color: transparent; +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; } -.navbar-inverse .nav .active > a, -.navbar-inverse .nav .active > a:hover, -.navbar-inverse .nav .active > a:focus { - color: #ffffff; - background-color: #111111; +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; } -.navbar-inverse .navbar-link { - color: #999999; +.btn-group > .btn-mini + .dropdown-toggle { + padding-right: 5px; + padding-left: 5px; } -.navbar-inverse .navbar-link:hover, -.navbar-inverse .navbar-link:focus { - color: #ffffff; +.btn-group > .btn-large + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; } -.navbar-inverse .divider-vertical { - border-right-color: #222222; - border-left-color: #111111; +.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); } -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { - color: #ffffff; - background-color: #111111; +.btn .caret { + margin-left: 0; } -.navbar-inverse .nav li.dropdown > a:hover .caret, -.navbar-inverse .nav li.dropdown > a:focus .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +.btn-large .caret { + border-width: 5px; } -.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: #999999; - border-bottom-color: #999999; +.dropup .btn-large .caret { + border-bottom-width: 5px; } -.navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: #ffffff; - border-bottom-color: #ffffff; +.btn-group-vertical > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; } -.navbar-inverse .navbar-search .search-query { - color: #ffffff; - background-color: #515151; - border-color: #111111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0 rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; -} - -.navbar-inverse .navbar-search .search-query:-moz-placeholder { - color: #cccccc; +.btn-group-vertical > .btn + .btn { + margin-top: -1px; } -.navbar-inverse .navbar-search .search-query:-ms-input-placeholder { - color: #cccccc; +.btn-group-vertical .btn:not(:first-child):not(:last-child) { + border-radius: 0; } -.navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { - color: #cccccc; +.btn-group-vertical .btn:first-child { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; } -.navbar-inverse .navbar-search .search-query:focus, -.navbar-inverse .navbar-search .search-query.focused { - padding: 5px 15px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - outline: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +.btn-group-vertical .btn:last-child { + border-top-right-radius: 0; + border-top-left-radius: 0; } -.navbar-inverse .btn-navbar { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e0e0e; - *background-color: #040404; - background-image: -moz-linear-gradient(top, #151515, #040404); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#151515), to(#040404)); - background-image: -webkit-linear-gradient(top, #151515, #040404); - background-image: -o-linear-gradient(top, #151515, #040404); - background-image: linear-gradient(to bottom, #151515, #040404); - background-repeat: repeat-x; - border-color: #040404 #040404 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff151515', endColorstr='#ff040404', GradientType=0); - filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +.btn-group-justified { + display: table; + width: 100%; } -.navbar-inverse .btn-navbar:hover, -.navbar-inverse .btn-navbar:focus, -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active, -.navbar-inverse .btn-navbar.disabled, -.navbar-inverse .btn-navbar[disabled] { - color: #ffffff; - background-color: #040404; - *background-color: #000000; +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; } -.navbar-inverse .btn-navbar:active, -.navbar-inverse .btn-navbar.active { - background-color: #000000 \9; +.btn-group[data-toggle="buttons-radio"] > .btn > input[type="radio"], +.btn-group[data-toggle="buttons-checkbox"] > .btn > input[type="checkbox"] { + display: none; } .breadcrumb { @@ -4942,21 +3936,23 @@ input[type="submit"].btn.btn-mini { margin: 0 0 20px; list-style: none; background-color: #f5f5f5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + border-radius: 4px; } .breadcrumb > li { display: inline-block; - *display: inline; - text-shadow: 0 1px 0 #ffffff; - *zoom: 1; + text-shadow: 0 1px 0 #fff; } -.breadcrumb > li > .divider { +.breadcrumb > li:after { + display: inline-block; padding: 0 5px; color: #ccc; + content: "\00a0 /"; +} + +.breadcrumb > li:last-child:after { + display: none; } .breadcrumb > .active { @@ -4964,163 +3960,117 @@ input[type="submit"].btn.btn-mini { } .pagination { - margin: 20px 0; -} - -.pagination ul { display: inline-block; - *display: inline; - margin-bottom: 0; - margin-left: 0; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - *zoom: 1; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + margin: 20px 0; + border-radius: 4px; } -.pagination ul > li { +.pagination > li { display: inline; } -.pagination ul > li > a, -.pagination ul > li > span { +.pagination > li > a, +.pagination > li > span { float: left; padding: 4px 12px; - line-height: 20px; + line-height: 1.428571429; text-decoration: none; background-color: #ffffff; border: 1px solid #dddddd; border-left-width: 0; } -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { +.pagination > li > a:hover, +.pagination > li > a:focus, +.pagination > .active > a, +.pagination > .active > span { background-color: #f5f5f5; } -.pagination ul > .active > a, -.pagination ul > .active > span { +.pagination > .active > a, +.pagination > .active > span { color: #999999; cursor: default; } -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { color: #999999; cursor: default; - background-color: transparent; + background-color: #ffffff; } -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { +.pagination > li:first-child > a, +.pagination > li:first-child > span { border-left-width: 1px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -webkit-border-top-left-radius: 4px; - border-top-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - -moz-border-radius-topleft: 4px; -} - -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - -webkit-border-top-right-radius: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; - -moz-border-radius-topright: 4px; - -moz-border-radius-bottomright: 4px; -} - -.pagination-centered { - text-align: center; -} - -.pagination-right { - text-align: right; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; } -.pagination-large ul > li > a, -.pagination-large ul > li > span { - padding: 11px 19px; - font-size: 17.5px; +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; } -.pagination-large ul > li:first-child > a, -.pagination-large ul > li:first-child > span { - -webkit-border-bottom-left-radius: 6px; - border-bottom-left-radius: 6px; - -webkit-border-top-left-radius: 6px; - border-top-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - -moz-border-radius-topleft: 6px; +.pagination-large > li > a, +.pagination-large > li > span { + padding: 14px 16px; + font-size: 18px; } -.pagination-large ul > li:last-child > a, -.pagination-large ul > li:last-child > span { - -webkit-border-top-right-radius: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - border-bottom-right-radius: 6px; - -moz-border-radius-topright: 6px; - -moz-border-radius-bottomright: 6px; +.pagination-large > li:first-child > a, +.pagination-large > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; } -.pagination-mini ul > li:first-child > a, -.pagination-small ul > li:first-child > a, -.pagination-mini ul > li:first-child > span, -.pagination-small ul > li:first-child > span { - -webkit-border-bottom-left-radius: 3px; - border-bottom-left-radius: 3px; - -webkit-border-top-left-radius: 3px; - border-top-left-radius: 3px; - -moz-border-radius-bottomleft: 3px; - -moz-border-radius-topleft: 3px; +.pagination-large > li:last-child > a, +.pagination-large > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; } -.pagination-mini ul > li:last-child > a, -.pagination-small ul > li:last-child > a, -.pagination-mini ul > li:last-child > span, -.pagination-small ul > li:last-child > span { - -webkit-border-top-right-radius: 3px; - border-top-right-radius: 3px; - -webkit-border-bottom-right-radius: 3px; - border-bottom-right-radius: 3px; - -moz-border-radius-topright: 3px; - -moz-border-radius-bottomright: 3px; +.pagination-small > li > a, +.pagination-small > li > span { + padding: 5px 10px; + font-size: 12px; } -.pagination-small ul > li > a, -.pagination-small ul > li > span { - padding: 2px 10px; - font-size: 11.9px; +.pagination-small > li:first-child > a, +.pagination-small > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; } -.pagination-mini ul > li > a, -.pagination-mini ul > li > span { - padding: 0 6px; - font-size: 10.5px; +.pagination-small > li:last-child > a, +.pagination-small > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; } .pager { margin: 20px 0; text-align: center; list-style: none; - *zoom: 1; } .pager:before, .pager:after { display: table; - line-height: 0; - content: ""; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager:before, +.pager:after { + display: table; + content: " "; } .pager:after { @@ -5135,11 +4085,9 @@ input[type="submit"].btn.btn-mini { .pager li > span { display: inline-block; padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; + background-color: #ffffff; + border: 1px solid #dddddd; + border-radius: 15px; } .pager li > a:hover, @@ -5164,109 +4112,123 @@ input[type="submit"].btn.btn-mini { .pager .disabled > span { color: #999999; cursor: default; - background-color: #fff; + background-color: #ffffff; } -.modal-backdrop { +.modal-open { + overflow: hidden; +} + +.modal { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; - background-color: #000000; + display: none; + overflow: auto; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; } -.modal-backdrop.fade { - opacity: 0; +.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; } -.modal-backdrop, -.modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); +.modal.fade.in { + top: 0; } -.modal { - position: fixed; - top: 10%; - left: 50%; +.modal-dialog { + position: relative; + top: 0; + right: 0; + left: 0; z-index: 1050; - width: 560px; - margin-left: -280px; - background-color: #ffffff; + width: auto; + padding: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; outline: none; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -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; } -.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; +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000; } -.modal.fade.in { - top: 10%; +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.fade.in { + opacity: 0.5; + filter: alpha(opacity=50); } .modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; + min-height: 16.428571429px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; } .modal-header .close { - margin-top: 2px; + margin-top: -2px; } -.modal-header h3 { +.modal-title { margin: 0; - line-height: 30px; + line-height: 1.428571429; } .modal-body { position: relative; - max-height: 400px; - padding: 15px; - overflow-y: auto; -} - -.modal-form { - margin-bottom: 0; + padding: 20px; } .modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; + padding: 19px 20px 20px; + margin-top: 15px; text-align: right; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - *zoom: 1; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; + border-top: 1px solid #e5e5e5; } .modal-footer:before, .modal-footer:after { display: table; - line-height: 0; - content: ""; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; } .modal-footer:after { @@ -5286,6 +4248,21 @@ input[type="submit"].btn.btn-mini { 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; @@ -5298,8 +4275,8 @@ input[type="submit"].btn.btn-mini { } .tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); + opacity: 1; + filter: alpha(opacity=100); } .tooltip.top { @@ -5324,14 +4301,12 @@ input[type="submit"].btn.btn-mini { .tooltip-inner { max-width: 200px; - padding: 8px; + padding: 3px 8px; color: #ffffff; text-align: center; text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + background-color: rgba(0, 0, 0, 0.9); + border-radius: 4px; } .tooltip-arrow { @@ -5346,7 +4321,7 @@ input[type="submit"].btn.btn-mini { bottom: 0; left: 50%; margin-left: -5px; - border-top-color: #000000; + border-top-color: rgba(0, 0, 0, 0.9); border-width: 5px 5px 0; } @@ -5354,7 +4329,7 @@ input[type="submit"].btn.btn-mini { top: 50%; left: 0; margin-top: -5px; - border-right-color: #000000; + border-right-color: rgba(0, 0, 0, 0.9); border-width: 5px 5px 5px 0; } @@ -5362,7 +4337,7 @@ input[type="submit"].btn.btn-mini { top: 50%; right: 0; margin-top: -5px; - border-left-color: #000000; + border-left-color: rgba(0, 0, 0, 0.9); border-width: 5px 0 5px 5px; } @@ -5370,7 +4345,7 @@ input[type="submit"].btn.btn-mini { top: 0; left: 50%; margin-left: -5px; - border-bottom-color: #000000; + border-bottom-color: rgba(0, 0, 0, 0.9); border-width: 0 5px 5px; } @@ -5387,15 +4362,12 @@ input[type="submit"].btn.btn-mini { background-color: #ffffff; border: 1px solid #ccc; border: 1px solid rgba(0, 0, 0, 0.2); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; + border-radius: 6px; -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; + background-clip: padding-box; + -webkit-bg-clip: padding-box; + -moz-bg-clip: padding; } .popover.top { @@ -5422,13 +4394,7 @@ input[type="submit"].btn.btn-mini { line-height: 18px; background-color: #f7f7f7; border-bottom: 1px solid #ebebeb; - -webkit-border-radius: 5px 5px 0 0; - -moz-border-radius: 5px 5px 0 0; - border-radius: 5px 5px 0 0; -} - -.popover-title:empty { - display: none; + border-radius: 5px 5px 0 0; } .popover-content { @@ -5511,63 +4477,123 @@ input[type="submit"].btn.btn-mini { border-right-width: 0; } -.popover.left .arrow:after { - right: 1px; - bottom: -10px; - border-left-color: #ffffff; - border-right-width: 0; +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.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; } -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; +.alert-info hr { + border-top-color: #a6e1ec; } -.thumbnails:before, -.thumbnails:after { - display: table; - line-height: 0; - content: ""; +.alert-info .alert-link { + color: #2d6987; } -.thumbnails:after { - clear: both; +.alert-block { + padding-top: 15px; + padding-bottom: 15px; } -.row-fluid .thumbnails { - margin-left: 0; +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; } -.thumbnails > li { - float: left; - margin-bottom: 20px; - margin-left: 20px; +.alert-block p + p { + margin-top: 5px; } -.thumbnail { - display: block; +.thumbnail, +.img-thumbnail { padding: 4px; - line-height: 20px; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.055); + line-height: 1.428571429; + background-color: #ffffff; + 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 { + display: block; +} + +.img-thumbnail { + display: inline-block; +} + a.thumbnail:hover, a.thumbnail:focus { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + border-color: #428bca; } .thumbnail > img { @@ -5579,13 +4605,12 @@ a.thumbnail:focus { .thumbnail .caption { padding: 9px; - color: #555555; + color: #333333; } .media, .media-body { overflow: hidden; - *overflow: visible; zoom: 1; } @@ -5619,109 +4644,109 @@ a.thumbnail:focus { list-style: none; } -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: 11.844px; - font-weight: bold; - line-height: 14px; - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +.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: baseline; + vertical-align: middle; background-color: #999999; + border-radius: .25em; } -.label { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} - -.badge { - padding-right: 9px; - padding-left: 9px; - -webkit-border-radius: 9px; - -moz-border-radius: 9px; - border-radius: 9px; -} - -.label:empty, -.badge:empty { - display: none; -} - -a.label:hover, -a.label:focus, -a.badge:hover, -a.badge:focus { - color: #ffffff; +.label[href]:hover, +.label[href]:focus { + color: #fff; text-decoration: none; cursor: pointer; + background-color: #808080; +} + +.label-danger { + background-color: #d9534f; } -.label-important, -.badge-important { - background-color: #b94a48; +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; } -.label-important[href], -.badge-important[href] { - background-color: #953b39; +.label-success { + background-color: #5cb85c; } -.label-warning, -.badge-warning { - background-color: #f89406; +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; } -.label-warning[href], -.badge-warning[href] { - background-color: #c67605; +.label-warning { + background-color: #f0ad4e; } -.label-success, -.badge-success { - background-color: #468847; +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; } -.label-success[href], -.badge-success[href] { - background-color: #356635; +.label-info { + background-color: #5bc0de; } -.label-info, -.badge-info { - background-color: #3a87ad; +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; } -.label-info[href], -.badge-info[href] { - background-color: #2d6987; +.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: #999999; + border-radius: 10px; } -.label-inverse, -.badge-inverse { - background-color: #333333; +.badge:empty { + display: none; } -.label-inverse[href], -.badge-inverse[href] { - background-color: #1a1a1a; +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; } -.btn .label, .btn .badge { position: relative; top: -1px; } -.btn-mini .label, .btn-mini .badge { top: 0; } +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; @@ -5771,62 +4796,34 @@ a.badge:focus { height: 20px; margin-bottom: 20px; overflow: hidden; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(to bottom, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#fff9f9f9', GradientType=0); + background-color: #f5f5f5; + border-radius: 4px; -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-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 { +.progress-bar { float: left; width: 0; height: 100%; font-size: 12px; - color: #ffffff; + color: #fff; text-align: center; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(to bottom, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff149bdf', endColorstr='#ff0480be', GradientType=0); + background-color: #428bca; -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-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-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; -webkit-transition: width 0.6s ease; -moz-transition: width 0.6s ease; -o-transition: width 0.6s ease; transition: width 0.6s ease; } -.progress .bar + .bar { - -webkit-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 1px 0 0 rgba(0, 0, 0, 0.15), inset 0 -1px 0 rgba(0, 0, 0, 0.15); -} - -.progress-striped .bar { - background-color: #149bdf; +.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: -o-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; @@ -5834,7 +4831,7 @@ a.badge:focus { background-size: 40px 40px; } -.progress.active .bar { +.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; @@ -5842,91 +4839,51 @@ a.badge:focus { animation: progress-bar-stripes 2s linear infinite; } -.progress-danger .bar, -.progress .bar-danger { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(to bottom, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b', endColorstr='#ffc43c35', GradientType=0); +.progress-bar-danger { + background-color: #d9534f; } -.progress-danger.progress-striped .bar, -.progress-striped .bar-danger { - background-color: #ee5f5b; +.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: -o-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-success .bar, -.progress .bar-success { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(to bottom, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462', endColorstr='#ff57a957', GradientType=0); +.progress-bar-success { + background-color: #5cb85c; } -.progress-success.progress-striped .bar, -.progress-striped .bar-success { - background-color: #62c462; +.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: -o-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-info .bar, -.progress .bar-info { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(to bottom, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff339bb9', GradientType=0); +.progress-bar-warning { + background-color: #f0ad4e; } -.progress-info.progress-striped .bar, -.progress-striped .bar-info { - background-color: #5bc0de; +.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: -o-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-warning .bar, -.progress .bar-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(to bottom, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450', endColorstr='#fff89406', GradientType=0); +.progress-bar-info { + background-color: #5bc0de; } -.progress-warning.progress-striped .bar, -.progress-striped .bar-warning { - background-color: #fbb450; +.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: -o-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); } @@ -5937,9 +4894,7 @@ a.badge:focus { .accordion-group { margin-bottom: 2px; border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + border-radius: 4px; } .accordion-heading { @@ -5962,8 +4917,6 @@ a.badge:focus { .carousel { position: relative; - margin-bottom: 20px; - line-height: 1; } .carousel-inner { @@ -6027,56 +4980,82 @@ a.badge:focus { .carousel-control { position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); opacity: 0.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: 15px; + 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: #ffffff; + color: #fff; text-decoration: none; opacity: 0.9; filter: alpha(opacity=90); } -.carousel-indicators { +.carousel-control .glyphicon { position: absolute; - top: 15px; - right: 15px; + top: 50%; + left: 50%; z-index: 5; - margin: 0; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; +} + +.carousel-indicators { + position: absolute; + bottom: 20px; + left: 50%; + z-index: 15; + width: 100px; + margin: 0 0 0 -50px; + text-align: center; list-style: none; } .carousel-indicators li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; + display: inline-block; + width: 8px; + height: 8px; + margin-right: 0; + margin-left: 0; text-indent: -999px; - background-color: #ccc; - background-color: rgba(255, 255, 255, 0.25); + cursor: pointer; + border: 1px solid #fff; border-radius: 5px; } @@ -6086,51 +5065,73 @@ a.badge:focus { .carousel-caption { position: absolute; - right: 0; - bottom: 0; - left: 0; - padding: 15px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} - -.carousel-caption h4, -.carousel-caption p { - line-height: 20px; - color: #ffffff; + 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 h4 { - margin: 0 0 5px; +.carousel-caption .btn { + text-shadow: none; } -.carousel-caption p { - margin-bottom: 0; +@media screen and (min-width: 768px) { + .carousel-control .glyphicon { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } } -.hero-unit { - padding: 60px; +.jumbotron { + padding: 30px; margin-bottom: 30px; - font-size: 18px; + font-size: 21px; font-weight: 200; - line-height: 30px; + line-height: 2.1428571435; color: inherit; background-color: #eeeeee; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; } -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; +.jumbotron h1 { line-height: 1; - letter-spacing: -1px; color: inherit; } -.hero-unit li { - line-height: 30px; +.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 { @@ -6142,17 +5143,195 @@ a.badge:focus { } .hide { - display: none; + display: none !important; } .show { - display: block; + 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; + visibility: hidden; +} + +.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; +} + +.visible-lg { + display: none !important; +} + +.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; + } + .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; + } + .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; + } + .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; + } + .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; + } +} + +.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; + } +} diff --git a/docs/assets/css/docs.css b/docs/assets/css/docs.css index af655409285a541cdfc707bada541bd114fed119..533d5938da066d79545d7710772ed4b3a6fc8c3f 100644 --- a/docs/assets/css/docs.css +++ b/docs/assets/css/docs.css @@ -1,567 +1,269 @@ -/* Add additional stylesheets below --------------------------------------------------- */ /* - Bootstrap's documentation styles - Special styles for presenting Bootstrap's documentation and examples -*/ + * Bootstrap Documentation + * Special styles for presenting Bootstrap's documentation and code examples. + */ -/* Body and structure +/* Key scaffolding -------------------------------------------------- */ body { - position: relative; - padding-top: 40px; -} - -/* Code in headings */ -h3 code { - font-size: 14px; - font-weight: normal; + position: relative; /* For scrollyspy */ + padding-top: 50px; /* Account for fixed navbar */ } -/* Tweak navbar brand link to be super sleek +/* Top nav and header -------------------------------------------------- */ -body > .navbar { - font-size: 13px; -} - -/* Change the docs' brand */ -body > .navbar .brand { - padding-right: 0; - padding-left: 0; - margin-left: 20px; - float: right; - font-weight: bold; - color: #000; - text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.125); - -webkit-transition: all .2s linear; - -moz-transition: all .2s linear; - transition: all .2s linear; +.bs-docs-nav { + background-color: #b94a48; } -body > .navbar .brand:hover { - text-decoration: none; - text-shadow: 0 1px 0 rgba(255,255,255,.1), 0 0 30px rgba(255,255,255,.4); +.bs-docs-nav .navbar-brand { + color: #fff; } - - -/* Sections --------------------------------------------------- */ - -/* padding for in-page bookmarks and fixed navbar */ -section { - padding-top: 30px; +.bs-docs-nav .navbar-nav > li > a { + color: #e6cac8; } -section > .page-header, -section > .lead { - color: #5a5a5a; +.bs-docs-nav .navbar-nav > li > a:hover { + color: #fff; } -section > ul li { - margin-bottom: 5px; +.bs-docs-nav .navbar-nav > .active > a, +.bs-docs-nav .navbar-nav > .active > a:hover { + color: #fff; + background-color: #993c3a; } - -/* Separators (hr) */ -.bs-docs-separator { - margin: 40px 0 39px; +.bs-docs-nav .navbar-toggle { + border-color: #b94a48; } - -/* Faded out hr */ -hr.soften { - height: 1px; - margin: 70px 0; - background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,.1), rgba(0,0,0,0)); - border: 0; +.bs-docs-nav .navbar-toggle:hover { + background-color: #993c3a; + border-color: #993c3a; } -/* Jumbotrons +/* Homepage masthead -------------------------------------------------- */ -/* Base class -------------------------- */ -.jumbotron { +.bs-masthead { position: relative; - padding: 40px 0; - color: #fff; + margin-bottom: 20px; + padding: 30px 15px; text-align: center; - text-shadow: 0 1px 3px rgba(0,0,0,.4), 0 0 30px rgba(0,0,0,.075); - background: #020031; /* Old browsers */ - background: -moz-linear-gradient(45deg, #020031 0%, #6d3353 100%); /* FF3.6+ */ - background: -webkit-gradient(linear, left bottom, right top, color-stop(0%,#020031), color-stop(100%,#6d3353)); /* Chrome,Safari4+ */ - background: -webkit-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* Chrome10+,Safari5.1+ */ - background: -o-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* Opera 11.10+ */ - background: -ms-linear-gradient(45deg, #020031 0%,#6d3353 100%); /* IE10+ */ - background: linear-gradient(45deg, #020031 0%,#6d3353 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020031', endColorstr='#6d3353',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ - -webkit-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); - -moz-box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); - box-shadow: inset 0 3px 7px rgba(0,0,0,.2), inset 0 -3px 7px rgba(0,0,0,.2); -} -.jumbotron h1 { - font-size: 80px; - font-weight: bold; - letter-spacing: -1px; - line-height: 1; -} -.jumbotron p { - font-size: 24px; - font-weight: 300; - line-height: 1.25; - margin-bottom: 30px; } - -/* Link styles (used on .masthead-links as well) */ -.jumbotron a { - color: #fff; - color: rgba(255,255,255,.5); - -webkit-transition: all .2s ease-in-out; - -moz-transition: all .2s ease-in-out; - transition: all .2s ease-in-out; +.bs-masthead h1 { + font-size: 50px; + line-height: 1; } -.jumbotron a:hover { - color: #fff; - text-shadow: 0 0 10px rgba(255,255,255,.25); +.bs-masthead .bs-social { + margin-top: 80px; } /* Download button */ -.masthead .btn { - padding: 19px 24px; - font-size: 24px; - font-weight: 200; - color: #fff; /* redeclare to override the `.jumbotron a` */ - border: 0; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -webkit-transition: none; - -moz-transition: none; - transition: none; -} -.masthead .btn:hover { - -webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - -moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); - box-shadow: inset 0 1px 0 rgba(255,255,255,.1), 0 1px 5px rgba(0,0,0,.25); -} -.masthead .btn:active { - -webkit-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); - -moz-box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); - box-shadow: inset 0 2px 4px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.1); -} - - -/* Pattern overlay -------------------------- */ -.jumbotron .container { - position: relative; - z-index: 2; -} -.jumbotron:after { - content: ''; - display: block; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - background: url(../img/bs-docs-masthead-pattern.png) repeat center center; - opacity: .4; -} -@media -only screen and (-webkit-min-device-pixel-ratio: 2), -only screen and ( min--moz-device-pixel-ratio: 2), -only screen and ( -o-min-device-pixel-ratio: 2/1) { - - .jumbotron:after { - background-size: 150px 150px; - } - -} - -/* Masthead (docs home) -------------------------- */ -.masthead { - padding: 70px 0 80px; - margin-bottom: 0; - color: #fff; -} -.masthead h1 { - font-size: 120px; - line-height: 1; - letter-spacing: -2px; +.bs-masthead .btn { + 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; } -.masthead p { - font-size: 40px; - font-weight: 200; - line-height: 1.25; +.bs-masthead .btn:hover, +.bs-masthead .btn:active { + color: #fff; /* redeclare to override the `.jumbotron a` */ + background-color: #b94a48; + border-color: #b94a48; } -/* Textual links in masthead */ -.masthead-links { - margin: 0; +/* Textual links */ +.bs-masthead-links { + margin: 20px 0; list-style: none; } -.masthead-links li { +.bs-masthead-links li { display: inline; - padding: 0 10px; - color: rgba(255,255,255,.25); -} - -/* Social proof buttons from GitHub & Twitter */ -.bs-docs-social { - padding: 15px 0; - text-align: center; - background-color: #f5f5f5; - border-top: 1px solid #fff; - border-bottom: 1px solid #ddd; -} - -/* Quick links on Home */ -.bs-docs-social-buttons { - margin-left: 0; - margin-bottom: 0; - padding-left: 0; - list-style: none; -} -.bs-docs-social-buttons li { - display: inline-block; - padding: 5px 8px; - line-height: 1; - *display: inline; - *zoom: 1; -} - -/* Subhead (other pages) -------------------------- */ -.subhead { - text-align: left; - border-bottom: 1px solid #ddd; -} -.subhead h1 { - font-size: 60px; -} -.subhead p { - margin-bottom: 20px; + color: #999; } -.subhead .navbar { - display: none; +.bs-masthead-links li + li { + margin-left: 20px; } -/* Marketing section of Overview +/* Customize and Download button -------------------------------------------------- */ -.marketing { - text-align: center; - color: #5a5a5a; +.bs-customizer { + } -.marketing h1 { - margin: 60px 0 10px; - font-size: 60px; - font-weight: 200; - line-height: 1; - letter-spacing: -1px; +.bs-customizer .toggle { + float: right; } -.marketing h2 { - font-weight: 200; - margin-bottom: 5px; +.bs-customizer label { + margin-top: 10px; + font-weight: 500; + color: #555; } -.marketing p { - font-size: 16px; - line-height: 1.5; +.bs-customizer h4 { + margin-top: 15px; } -.marketing .marketing-byline { - margin-bottom: 40px; - font-size: 20px; - font-weight: 300; - line-height: 1.25; - color: #999; -} -.marketing-img { - display: block; - margin: 0 auto 30px; - max-height: 145px; +.bs-customizer input[type="text"] { + background-color: #fafafa; } - -/* Footer --------------------------------------------------- */ - -.footer { - text-align: center; - padding: 30px 0; - margin-top: 70px; - border-top: 1px solid #e5e5e5; - background-color: #f5f5f5; +.bs-customize-download { + text-align:center; } -.footer p { - margin-bottom: 0; - color: #777; -} -.footer-links { - margin: 10px 0; -} -.footer-links li { - display: inline; - padding: 0 2px; +.bs-customize-download .btn { + margin-top: 5px; + margin-bottom: 5px; + padding: 18px 24px; + font-size: 21px; + color: #b94a48; + background-color: #fff; + border-color: #b94a48; } -.footer-links li:first-child { - padding-left: 0; +.bs-customize-download .btn:hover, +.bs-customize-download .btn:active { + color: #fff; + background-color: #b94a48; } +.swatch { padding: 0 } +.swatch div { + margin-top: 35px; + width: 38px; + display: block; + height: 38px; + border: 1px solid #ccc; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} - -/* Special grid styles +/* Docs pages and sections -------------------------------------------------- */ -.show-grid { - margin-top: 10px; - margin-bottom: 20px; -} -.show-grid [class*="span"] { - background-color: #eee; +/* Page headers */ +.bs-header { + padding: 30px 30px 40px; + font-size: 16px; + color: #5a5a5a; text-align: center; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - min-height: 40px; - line-height: 40px; -} -.show-grid [class*="span"]:hover { - background-color: #ddd; -} -.show-grid .show-grid { - margin-top: 0; - margin-bottom: 0; -} -.show-grid .show-grid [class*="span"] { - margin-top: 5px; + border-bottom: 1px solid #ddd; } -.show-grid [class*="span"] [class*="span"] { - background-color: #ccc; +.bs-header h1 { + color: #b94a48; } -.show-grid [class*="span"] [class*="span"] [class*="span"] { - background-color: #999; +.bs-header p { + font-weight: 300; + line-height: 1.5; } - - -/* Mini layout previews --------------------------------------------------- */ -.mini-layout { - border: 1px solid #ddd; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075); - box-shadow: 0 1px 2px rgba(0,0,0,.075); -} -.mini-layout, -.mini-layout .mini-layout-body, -.mini-layout.fluid .mini-layout-sidebar { - height: 300px; -} -.mini-layout { - margin-bottom: 20px; - padding: 9px; -} -.mini-layout div { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.mini-layout .mini-layout-body { - background-color: #dceaf4; - margin: 0 auto; - width: 70%; -} -.mini-layout.fluid .mini-layout-sidebar, -.mini-layout.fluid .mini-layout-header, -.mini-layout.fluid .mini-layout-body { - float: left; -} -.mini-layout.fluid .mini-layout-sidebar { - background-color: #bbd8e9; - width: 20%; -} -.mini-layout.fluid .mini-layout-body { - width: 77.5%; - margin-left: 2.5%; +/* Padding for in-page bookmarks */ +.bs-docs-section { + padding-top: 30px; } -/* Download page +/* Docs sidebar -------------------------------------------------- */ -.download .page-header { - margin-top: 36px; -} -.page-header .toggle-all { - margin-top: 5px; -} - -/* Space out h3s when following a section */ -.download h3 { - margin-bottom: 5px; -} -.download-builder input + h3, -.download-builder .checkbox + h3 { - margin-top: 9px; -} - -/* Fields for variables */ -.download-builder input[type=text] { - margin-bottom: 9px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #d14; -} -.download-builder input[type=text]:focus { - background-color: #fff; +/* By default it's not affixed in mobile views, so undo that */ +.bs-sidebar.affix { + position: static; } -/* Custom, larger checkbox labels */ -.download .checkbox { - padding: 6px 10px 6px 25px; - font-size: 13px; - line-height: 18px; - color: #555; - background-color: #f9f9f9; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - cursor: pointer; -} -.download .checkbox:hover { - color: #333; +/* First level of nav */ +.bs-sidenav { + margin-top: 30px; + margin-bottom: 30px; + padding-top: 15px; + padding-bottom: 15px; + text-shadow: 0 1px 0 #fff; background-color: #f5f5f5; -} -.download .checkbox small { - font-size: 12px; - color: #777; -} - -/* Variables section */ -#variables label { - margin-bottom: 0; + border-radius: 5px; } -/* Giant download button */ -.download-btn { - margin: 36px 0 108px; +/* All levels of nav */ +.bs-sidebar .nav > li > a { + display: block; + color: #666; + padding: 4px 20px; } -#download p, -#download h4 { - max-width: 50%; - margin: 0 auto; - color: #999; - text-align: center; +.bs-sidebar .nav > li > a:hover, +.bs-sidebar .nav > li > a:focus { + text-decoration: none; + border-right: 1px solid #d5d5d5; } -#download h4 { - margin-bottom: 0; +.bs-sidebar .nav > .active > a, +.bs-sidebar .nav > .active:hover > a, +.bs-sidebar .nav > .active:focus > a { + font-weight: 500; + color: #b94a48; + background-color: transparent; + border-right: 1px solid #b94a48; } -#download p { - margin-bottom: 18px; + +/* Nav: second level (shown on .active) */ +.bs-sidebar .nav .nav { + display: none; + margin-bottom: 5px; } -.download-btn .btn { +.bs-sidebar .nav > .active > ul { display: block; - width: auto; - padding: 19px 24px; - margin-bottom: 27px; - font-size: 30px; - line-height: 1; - text-align: center; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; +} +.bs-sidebar .nav .nav > li > a { + padding-top: 2px; + padding-bottom: 2px; + padding-left: 30px; + font-size: 90%; } -/* Misc +/* Side notes for calling out things -------------------------------------------------- */ -/* Make tables spaced out a bit more */ -h2 + table, -h3 + table, -h4 + table, -h2 + .row { - margin-top: 5px; +.bs-callout { + margin: 20px 0; + padding: 15px 30px 15px 15px; + background-color: #fcf2f2; + border-left: 5px solid #df7c7b; } - -/* Example sites showcase */ -.example-sites { - xmargin-left: 20px; +.bs-callout h4 { + margin-top: 0; } -.example-sites img { - max-width: 100%; - margin: 0 auto; +.bs-callout p:last-child { + margin-bottom: 0; } - -.scrollspy-example { - height: 200px; - overflow: auto; - position: relative; +.bs-callout code, +.bs-callout .highlight { + background-color: #fff; } -/* Fake the :focus state to demo it */ -.focused { - border-color: rgba(82,168,236,.8); - -webkit-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - -moz-box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - box-shadow: inset 0 1px 3px rgba(0,0,0,.1), 0 0 8px rgba(82,168,236,.6); - outline: 0; -} - -/* For input sizes, make them display block */ -.docs-input-sizes select, -.docs-input-sizes input[type=text] { - display: block; - margin-bottom: 9px; -} -/* Icons -------------------------- */ -.the-icons { - margin-left: 0; - list-style: none; -} -.the-icons li { - float: left; - width: 25%; - line-height: 25px; -} -.the-icons i:hover { - background-color: rgba(255,0,0,.25); -} +/* Special grid styles +-------------------------------------------------- */ -/* Example page -------------------------- */ -.bootstrap-examples h4 { - margin: 10px 0 5px; -} -.bootstrap-examples p { - font-size: 13px; - line-height: 18px; +.show-grid { + margin-bottom: 15px; } -.bootstrap-examples .thumbnail { - margin-bottom: 9px; - background-color: #fff; +.show-grid [class^="col-"] { + padding-top: 10px; + padding-bottom: 10px; + background-color: #eee; + border: 1px solid #ddd; + /* Todo: reconcile these */ + background-color: rgba(185,74,72,.15); + border: 1px solid rgba(185,74,72,.2); } @@ -570,20 +272,16 @@ h2 + .row { -------------------------------------------------- */ /* Base class */ -.bs-docs-example { +.bs-example { position: relative; - margin: 15px 0; - padding: 39px 19px 14px; - *padding-top: 19px; - background-color: #fff; + padding: 39px 14px 14px; + margin-bottom: -1px; border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; } - /* Echo out a label for the example */ -.bs-docs-example:after { +.bs-example:after { content: "Example"; position: absolute; top: -1px; @@ -591,51 +289,107 @@ h2 + .row { padding: 3px 7px; font-size: 12px; font-weight: bold; + color: #9da0a4; background-color: #f5f5f5; border: 1px solid #ddd; - color: #9da0a4; - -webkit-border-radius: 4px 0 4px 0; - -moz-border-radius: 4px 0 4px 0; - border-radius: 4px 0 4px 0; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; } -/* Remove spacing between an example and it's code */ -.bs-docs-example + .prettyprint { - margin-top: -20px; - padding-top: 15px; +/* Tweak display of the examples */ +.bs-example + .prettyprint, +.bs-example + .highlight { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +/* Tweak content of examples for optimum awesome */ +.bs-example > p:last-child, +.bs-example > ul:last-child, +.bs-example > ol:last-child, +.bs-example > blockquote:last-child, +.bs-example > input:last-child, +.bs-example > select:last-child, +.bs-example > textarea:last-child, +.bs-example > .table:last-child, +.bs-example > .navbar:last-child +.bs-example > .jumbotron:last-child, +.bs-example > .alert:last-child, +.bs-example > .panel:last-child, +.bs-example > .list-group:last-child, +.bs-example > .well:last-child { + margin-bottom: 0; +} +.bs-example > .close { + float: none; } -/* Tweak examples -------------------------- */ -.bs-docs-example > p:last-child { - margin-bottom: 0; +/* Typography */ +.bs-example-type .table td { + color: #999; + vertical-align: middle; + border-color: ; } -.bs-docs-example .table, -.bs-docs-example .progress, -.bs-docs-example .well, -.bs-docs-example .alert, -.bs-docs-example .hero-unit, -.bs-docs-example .pagination, -.bs-docs-example .navbar, -.bs-docs-example > .nav, -.bs-docs-example blockquote { - margin-bottom: 5px; +.bs-example-type .table td, +.bs-example-type .table th { + padding: 15px 0; + border-color: #eee; +} +.bs-example-type .table tr:first-child td, +.bs-example-type .table tr:first-child th { + border-top: 0; +} +.bs-example-type h1, +.bs-example-type h2, +.bs-example-type h3, +.bs-example-type h4, +.bs-example-type h5, +.bs-example-type h6 { + margin: 0; } -.bs-docs-example .pagination { - margin-top: 0; + +/* Forms */ +.bs-example.form-inline select, +.bs-example.form-inline input[type="text"], +.bs-example.form-inline input[type="password"] { + width: 180px; +} +.bs-example-control-sizing input[type="text"] + input[type="text"] { + margin-top: 10px; +} +.bs-example-form { + overflow: hidden; +} +.bs-example-form .input-group { + margin-bottom: 10px; } + +/* List groups */ +.bs-example > .list-group { + max-width: 400px; +} + +/* Navbar examples */ .bs-navbar-top-example, .bs-navbar-bottom-example { z-index: 1; padding: 0; - height: 90px; + min-height: 110px; overflow: hidden; /* cut the drop shadows off */ } .bs-navbar-top-example .navbar-fixed-top, .bs-navbar-bottom-example .navbar-fixed-bottom { + position: relative; margin-left: 0; margin-right: 0; } +.bs-navbar-top-example .navbar-fixed-top { + top: -1px; +} +.bs-navbar-bottom-example .navbar-fixed-bottom { + bottom: -1px; +} .bs-navbar-top-example { -webkit-border-radius: 0 0 4px 4px; -moz-border-radius: 0 0 4px 4px; @@ -656,33 +410,63 @@ h2 + .row { .bs-navbar-bottom-example .navbar { margin-bottom: 0; } -form.bs-docs-example { - padding-bottom: 19px; + +/* Example modals */ +.bs-example-modal { + background-color: #f5f5f5; +} +.bs-example-modal .modal { + position: relative; + top: auto; + right: auto; + left: auto; + bottom: auto; + z-index: 1; + display: block; +} +.bs-example-modal .modal-dialog { + left: auto; + margin-left: auto; + margin-right: auto; } -/* Images */ -.bs-docs-example-images img { - margin: 10px; - display: inline-block; +/* Example dropdowns */ +.bs-example > .dropdown > .dropdown-menu, +.bs-example-submenu > .pull-left > .dropup > .dropdown-menu, +.bs-example-submenu > .pull-left > .dropdown > .dropdown-menu { + position: static; + display: block; + margin-bottom: 5px; +} +.bs-example-submenu { + min-height: 230px; +} +.bs-example-submenu > .pull-left + .pull-left { + margin-left: 20px; +} + +/* Example tabbable tabs */ +.bs-example-tabs .nav-tabs { + margin-bottom: 15px; } /* Tooltips */ -.bs-docs-tooltip-examples { +.bs-example-tooltips { text-align: center; margin: 0 0 10px; list-style: none; } -.bs-docs-tooltip-examples li { +.bs-example-tooltips li { display: inline; padding: 0 10px; } /* Popovers */ -.bs-docs-example-popover { +.bs-example-popover { padding-bottom: 24px; background-color: #f9f9f9; } -.bs-docs-example-popover .popover { +.bs-example-popover .popover { position: relative; display: block; float: left; @@ -690,19 +474,53 @@ form.bs-docs-example { margin: 20px; } -/* Dropdowns */ -.bs-docs-example-submenus { - min-height: 180px; + + +/* Example templates +-------------------------------------------------- */ + +.bs-examples h4 { + margin-bottom: 5px; } -.bs-docs-example-submenus > .pull-left + .pull-left { - margin-left: 20px; +.bs-examples p { + margin-bottom: 20px; +} + + + +/* 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; } -.bs-docs-example-submenus .dropup > .dropdown-menu, -.bs-docs-example-submenus .dropdown > .dropdown-menu { +.the-icons .glyphicon { display: block; - position: static; - margin-bottom: 5px; - *width: 180px; + margin: 5px auto; + vertical-align: middle; + margin-right: 3px; + font-size: 24px; +} +.the-icons li:hover { + background-color: rgba(255,0,0,.1); } @@ -710,8 +528,15 @@ form.bs-docs-example { /* Responsive docs -------------------------------------------------- */ +/* Related: responsive utilities tables */ +.table code { + font-size: 13px; + font-weight: normal; +} + /* Utility classes table ------------------------- */ +.bs-table th small, .responsive-utilities th small { display: block; font-weight: normal; @@ -744,31 +569,25 @@ form.bs-docs-example { position: relative; float: left; width: 25%; - height: 43px; - font-size: 14px; - font-weight: bold; - line-height: 43px; - color: #999; - text-align: center; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; } .responsive-utilities-test li + li { margin-left: 10px; } .responsive-utilities-test span { - position: absolute; - top: -1px; - left: -1px; - right: -1px; - bottom: -1px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; + padding: 15px 10px; + font-size: 14px; + font-weight: bold; + line-height: 1.1; + text-align: center; + border-radius: 4px; } -.responsive-utilities-test span { +.responsive-utilities-test.visible-on [class*="hidden"], +.responsive-utilities-test.hidden-on [class*="visible"] { + color: #999; + border: 1px solid #ddd; +} +.responsive-utilities-test.visible-on [class*="visible"], +.responsive-utilities-test.hidden-on [class*="hidden"] { color: #468847; background-color: #dff0d8; border: 1px solid #d6e9c6; @@ -776,292 +595,216 @@ form.bs-docs-example { -/* Sidenav for Docs +/* Footer -------------------------------------------------- */ -.bs-docs-sidenav { - width: 228px; - margin: 30px 0 0; - padding: 0; - background-color: #fff; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); - -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); - box-shadow: 0 1px 4px rgba(0,0,0,.065); -} -.bs-docs-sidenav > li > a { - display: block; - width: 190px \9; - margin: 0 0 -1px; - padding: 8px 14px; - border: 1px solid #e5e5e5; -} -.bs-docs-sidenav > li:first-child > a { - -webkit-border-radius: 6px 6px 0 0; - -moz-border-radius: 6px 6px 0 0; - border-radius: 6px 6px 0 0; -} -.bs-docs-sidenav > li:last-child > a { - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; -} -.bs-docs-sidenav > .active > a { - position: relative; - z-index: 2; - padding: 9px 15px; - border: 0; - text-shadow: 0 1px 0 rgba(0,0,0,.15); - -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); - -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); - box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); +.bs-footer { + padding-top: 40px; + padding-bottom: 30px; + margin-top: 100px; + text-align: center; + border-top: 1px solid #e5e5e5; } -/* Chevrons */ -.bs-docs-sidenav .icon-chevron-right { - float: right; - margin-top: 2px; - margin-right: -6px; - opacity: .25; +.bs-footer p { + margin-bottom: 0; + color: #777; } -.bs-docs-sidenav > li > a:hover { - background-color: #f5f5f5; +.footer-links { + margin: 10px 0; +} +.footer-links li { + display: inline; + padding: 0 2px; } -.bs-docs-sidenav a:hover .icon-chevron-right { - opacity: .5; +.footer-links li:first-child { + padding-left: 0; } -.bs-docs-sidenav .active .icon-chevron-right, -.bs-docs-sidenav .active a:hover .icon-chevron-right { - background-image: url(../img/glyphicons-halflings-white.png); - opacity: 1; + +/* Social proof buttons from GitHub & Twitter */ +.bs-social { + margin-bottom: 20px; +} +.bs-social-buttons { + display: inline-block; + margin: 0; + list-style: none; } -.bs-docs-sidenav.affix { - top: 40px; +.bs-social-buttons li { + display: inline-block; + line-height: 1; } -.bs-docs-sidenav.affix-bottom { - position: absolute; - top: auto; - bottom: 270px; +.bs-social-buttons li + li { + margin-left: 15px; +} +.bs-social-buttons .twitter-follow-button { + width: 225px !important; +} +.bs-social-buttons .twitter-share-button { + width: 98px !important; } - -/* Responsive +/* Misc docs stuff -------------------------------------------------- */ -/* Desktop large -------------------------- */ -@media (min-width: 1200px) { - .bs-docs-container { - max-width: 970px; - } - .bs-docs-sidenav { - width: 258px; - } - .bs-docs-sidenav > li > a { - width: 230px \9; /* Override the previous IE8-9 hack */ - } +/* Pseudo :focus state for showing how it looks in the docs */ +input.focused { + border-color: rgba(82,168,236,.8); + outline: 0; + outline: thin dotted \9; /* IE6-9 */ + -moz-box-shadow: 0 0 8px rgba(82,168,236,.6); + box-shadow: 0 0 8px rgba(82,168,236,.6); } -/* Desktop -------------------------- */ -@media (max-width: 980px) { - /* Unfloat brand */ - body > .navbar-fixed-top .brand { - float: left; - margin-left: 0; - padding-left: 10px; - padding-right: 10px; - } +/* Scrollspy demo on fixed height div */ +.scrollspy-example { + position: relative; + height: 200px; + margin-top: 10px; + overflow: auto; +} - /* Inline-block quick links for more spacing */ - .quick-links li { - display: inline-block; - margin: 5px; - } +.highlight { + padding: 9px 14px; + margin-bottom: 14px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 4px; +} +.highlight pre { + padding: 0; + margin-top: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; + white-space: nowrap; +} +.highlight pre code { + font-size: inherit; + color: #333; /* Effectively the base text color */ +} +.highlight pre .lineno { + display: inline-block; + width: 22px; + padding-right: 5px; + margin-right: 10px; + text-align: right; + color: #bebec5; +} - /* When affixed, space properly */ - .bs-docs-sidenav { - top: 0; - width: 218px; - margin-top: 30px; - margin-right: 0; - } +/* Better spacing on download options in getting started */ +.bs-docs-dl-options h4 { + margin-top: 15px; + margin-bottom: 5px; } -/* Tablet to desktop -------------------------- */ -@media (min-width: 768px) and (max-width: 979px) { - /* Remove any padding from the body */ - body { - padding-top: 0; - } - /* Widen masthead and social buttons to fill body padding */ - .jumbotron { - margin-top: -20px; /* Offset bottom margin on .navbar */ - } - /* Adjust sidenav width */ - .bs-docs-sidenav { - width: 166px; - margin-top: 20px; - } - .bs-docs-sidenav.affix { - top: 0; - } +/* Hide the top link initially */ +.bs-top { + display: none; } -/* Tablet -------------------------- */ -@media (max-width: 767px) { - /* Remove any padding from the body */ - body { - padding-top: 0; - } - /* Widen masthead and social buttons to fill body padding */ - .jumbotron { - padding: 40px 20px; - margin-top: -20px; /* Offset bottom margin on .navbar */ - margin-right: -20px; - margin-left: -20px; - } - .masthead h1 { - font-size: 90px; - } - .masthead p, - .masthead .btn { - font-size: 24px; - } - .marketing .span4 { - margin-bottom: 40px; +/* Responsive variations +-------------------------------------------------- */ + +/* Hide code snippets on mobile devices */ +@media screen and (max-width: 480px) { + .bs-example { + border-radius: 4px; } - .bs-docs-social { - margin: 0 -20px; + .highlight { + display: none; } +} - /* Space out the show-grid examples */ - .show-grid [class*="span"] { - margin-bottom: 5px; - } +/* Tablets and up */ +@media screen and (min-width: 768px) { - /* Sidenav */ - .bs-docs-sidenav { - width: auto; - margin-bottom: 20px; - } - .bs-docs-sidenav.affix { - position: static; - width: auto; - top: 0; + /* Reaffix the fixed sidebar */ + .bs-sidebar.affix { + position: fixed; /* Undo the static from mobile-first approach */ + top: 50px; + width: 160px; } - /* Unfloat the back to top link in footer */ - .footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; + /* Back to top link */ + .bs-top { + display: block; /* Unhide */ + float: left; + padding: 7px 15px; + font-weight: 500; + color: #999; + background-color: #eee; + border-radius: 4px; } - .footer p { - margin-bottom: 9px; + .bs-top:hover { + color: #fff; + text-decoration: none; + background-color: #999; + } + .bs-top.affix { + position: fixed; + right: 15px; + bottom: 15px; } -} -/* Landscape phones -------------------------- */ -@media (max-width: 480px) { - /* Remove padding above jumbotron */ - body { - padding-top: 0; + .bs-header { + font-size: 21px; + text-align: left; + } + .bs-header h1 { + font-size: 60px; + line-height: 1; } - /* Change up some type stuff */ - h2 small { + /* Show the docs nav */ + .bs-sidebar { display: block; } - /* Downsize the jumbotrons */ - .jumbotron h1 { - font-size: 45px; + /* Tweak display of docs jumbotrons */ + .bs-masthead { + padding-top: 100px; + padding-bottom: 100px; } - .jumbotron p, - .jumbotron .btn { - font-size: 18px; + .bs-masthead h1 { + font-size: 100px; } - .jumbotron .btn { - display: block; - margin: 0 auto; + .bs-masthead p { + margin-left: 15%; + margin-right: 15%; + font-size: 30px; } - /* center align subhead text like the masthead */ - .subhead h1, - .subhead p { - text-align: center; + .bs-navbar-top-example .navbar-fixed-top, + .bs-navbar-bottom-example .navbar-fixed-bottom { + position: absolute; } - /* Marketing on home */ - .marketing h1 { - font-size: 30px; - } - .marketing-byline { - font-size: 18px; - } +} - /* center example sites */ - .example-sites { - margin-left: 0; - } - .example-sites > li { - float: none; - display: block; - max-width: 280px; - margin: 0 auto 18px; - text-align: center; - } - .example-sites .thumbnail > img { - max-width: 270px; - } +/* Tablets/desktops and up */ +@media screen and (min-width: 992px) { - /* Do our best to make tables work in narrow viewports */ - table code { - white-space: normal; - word-wrap: break-word; - word-break: break-all; + /* Widen the fixed sidebar */ + .bs-sidebar.affix { + width: 213px; } - /* Examples: dropdowns */ - .bs-docs-example-submenus > .pull-left { - float: none; - clear: both; - } - .bs-docs-example-submenus > .pull-left, - .bs-docs-example-submenus > .pull-left + .pull-left { - margin-left: 0; - } - .bs-docs-example-submenus p { - margin-bottom: 0; - } - .bs-docs-example-submenus .dropup > .dropdown-menu, - .bs-docs-example-submenus .dropdown > .dropdown-menu { - margin-bottom: 10px; - float: none; - max-width: 180px; + /* Icons */ + .the-icons li { + width: 12.5%; } - /* Examples: modal */ - .modal-example .modal { - position: relative; - top: auto; - right: auto; - bottom: auto; - left: auto; - } +} + +/* Large desktops and up */ +@media screen and (min-width: 1200px) { - /* Tighten up footer */ - .footer { - padding-top: 20px; - padding-bottom: 20px; + /* Widen the fixed sidebar again */ + .bs-sidebar.affix { + width: 270px; } + } diff --git a/docs/assets/css/pygments-manni.css b/docs/assets/css/pygments-manni.css new file mode 100644 index 0000000000000000000000000000000000000000..1264b87f14e7e81c18ea1d53837fbe2683d33df7 --- /dev/null +++ b/docs/assets/css/pygments-manni.css @@ -0,0 +1,66 @@ +.hll { background-color: #ffffcc } + /*{ background: #f0f3f3; }*/ +.c { color: #999; } /* Comment */ +.err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.k { color: #006699; } /* Keyword */ +.o { color: #555555 } /* Operator */ +.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.cp { color: #009999 } /* Comment.Preproc */ +.c1 { color: #999; } /* Comment.Single */ +.cs { color: #999; } /* Comment.Special */ +.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #003300; } /* Generic.Heading */ +.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.go { color: #AAAAAA } /* Generic.Output */ +.gp { color: #000099; } /* Generic.Prompt */ +.gs { } /* Generic.Strong */ +.gu { color: #003300; } /* Generic.Subheading */ +.gt { color: #99CC66 } /* Generic.Traceback */ +.kc { color: #006699; } /* Keyword.Constant */ +.kd { color: #006699; } /* Keyword.Declaration */ +.kn { color: #006699; } /* Keyword.Namespace */ +.kp { color: #006699 } /* Keyword.Pseudo */ +.kr { color: #006699; } /* Keyword.Reserved */ +.kt { color: #007788; } /* Keyword.Type */ +.m { color: #FF6600 } /* Literal.Number */ +.s { color: #d44950 } /* Literal.String */ +.na { color: #4f9fcf } /* Name.Attribute */ +.nb { color: #336666 } /* Name.Builtin */ +.nc { color: #00AA88; } /* Name.Class */ +.no { color: #336600 } /* Name.Constant */ +.nd { color: #9999FF } /* Name.Decorator */ +.ni { color: #999999; } /* Name.Entity */ +.ne { color: #CC0000; } /* Name.Exception */ +.nf { color: #CC00FF } /* Name.Function */ +.nl { color: #9999FF } /* Name.Label */ +.nn { color: #00CCFF; } /* Name.Namespace */ +.nt { color: #2f6f9f; } /* Name.Tag */ +.nv { color: #003333 } /* Name.Variable */ +.ow { color: #000000; } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #FF6600 } /* Literal.Number.Float */ +.mh { color: #FF6600 } /* Literal.Number.Hex */ +.mi { color: #FF6600 } /* Literal.Number.Integer */ +.mo { color: #FF6600 } /* Literal.Number.Oct */ +.sb { color: #CC3300 } /* Literal.String.Backtick */ +.sc { color: #CC3300 } /* Literal.String.Char */ +.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #CC3300 } /* Literal.String.Double */ +.se { color: #CC3300; } /* Literal.String.Escape */ +.sh { color: #CC3300 } /* Literal.String.Heredoc */ +.si { color: #AA0000 } /* Literal.String.Interpol */ +.sx { color: #CC3300 } /* Literal.String.Other */ +.sr { color: #33AAAA } /* Literal.String.Regex */ +.s1 { color: #CC3300 } /* Literal.String.Single */ +.ss { color: #FFCC33 } /* Literal.String.Symbol */ +.bp { color: #336666 } /* Name.Builtin.Pseudo */ +.vc { color: #003333 } /* Name.Variable.Class */ +.vg { color: #003333 } /* Name.Variable.Global */ +.vi { color: #003333 } /* Name.Variable.Instance */ +.il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.css .o, +.css .o + .nt, +.css .nt + .nt { color: #999; } diff --git a/docs/assets/fonts/glyphiconshalflings-regular.eot b/docs/assets/fonts/glyphiconshalflings-regular.eot new file mode 100755 index 0000000000000000000000000000000000000000..bd59ccd2d679a6fa594560d56120e5e6e98b2c3e Binary files /dev/null and b/docs/assets/fonts/glyphiconshalflings-regular.eot differ diff --git a/docs/assets/fonts/glyphiconshalflings-regular.otf b/docs/assets/fonts/glyphiconshalflings-regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..b058f1cd1b998892d9d6e69c2a3bfcd4b04b42ca Binary files /dev/null and b/docs/assets/fonts/glyphiconshalflings-regular.otf differ diff --git a/docs/assets/fonts/glyphiconshalflings-regular.svg b/docs/assets/fonts/glyphiconshalflings-regular.svg new file mode 100755 index 0000000000000000000000000000000000000000..0fb4587352382d0ee1f09d5951a15926e5a4ccfd --- /dev/null +++ b/docs/assets/fonts/glyphiconshalflings-regular.svg @@ -0,0 +1,175 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode="
" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" /> +<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" /> +<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-63 -32t-65.5 -67t-50 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-207 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" /> +<glyph unicode="−" d="M200 400h900v300h-900v-300z" /> +<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> +<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" /> +<glyph unicode="" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> +<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" /> +<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" /> +<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" /> +<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> +<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" /> +<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" /> +<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" /> +<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> +<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" /> +<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" /> +<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM500 500v400h100v-300h200v-100h-300z" /> +<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" /> +<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM350 600h150v300h200v-300h150l-250 -300z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM350 600h150v-300h200v300h150l-250 300z" /> +<glyph unicode="" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 601q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM500 397v401l297 -200z" /> +<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" /> +<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" /> +<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" /> +<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v275v25q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 108 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" /> +<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" /> +<glyph unicode="" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" /> +<glyph unicode="" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" /> +<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> +<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" /> +<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" /> +<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391q67 -181 82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140 l116 -317h-340z" /> +<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 13.5t-49 14v71h471q76 0 145.5 -37.5t115 -111.5t45.5 -167q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129 q0 -84 -59 -156.5t-142 -111t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" /> +<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" /> +<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " /> +<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" /> +<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" /> +<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " /> +<glyph unicode="" d="M219 725q0 -116 60 -249q65 -114 158.5 -231.5t154.5 -178.5l61 -61q22 25 59.5 69t132 167t163.5 231q70 142 70 258q0 117 -57.5 218.5t-156.5 161t-216 59.5q-116 0 -215 -61t-156.5 -163.5t-57.5 -219.5zM431 752q0 92 64.5 157t156.5 65t157 -65t65 -157t-65 -156.5 t-157 -64.5t-156.5 64.5t-64.5 156.5z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5v854q-177 0 -302 -125t-125 -302z " /> +<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM994 1015l114 -113l113 113l-21 85l-92 28z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" /> +<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> +<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" /> +<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" /> +<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" /> +<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" /> +<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" /> +<glyph unicode="" d="M136 550v1l551 550l198 -197l-352 -353l352 -353l-198 -198z" /> +<glyph unicode="" d="M315 198l198 -198l552 550l-1 1l-551 550l-198 -197l353 -353z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM300 500h600v200h-600v-200z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM247 459l212 -212l141 141l141 -141l213 212l-142 141l142 142l-213 212 l-141 -142l-141 142l-212 -212l141 -142z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM364 700h143q4 0 11.5 -1t11 -0.5t6.5 3t3 8.5t1 11t3.5 8.5t3.5 6t5.5 4 t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26q0 -21 -4.5 -27.5t-26.5 -21.5q-5 -1 -12.5 -3.5t-27 -13.5t-34 -27t-26.5 -46.5t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 46t31 69t14 93.5q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5 t-53.5 -74.5t-19 -114zM500 300h200v100h-200v-100z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200 v100h-200v-100z" /> +<glyph unicode="" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h6h165h32v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206 h200v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM384 465l135 135l-135 135l81 81l135 -135l135 135l81 -81l-135 -135l135 -135l-81 -81l-135 136l-135 -136z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM350 537l113 113l87 -87l204 204l113 -113l-317 -317z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -119 66 -225l586 587q-105 65 -225 65q-177 0 -302 -125 t-125 -302zM381 235q104 -62 219 -62q177 0 302 125.5t125 301.5q0 117 -62 219z" /> +<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" /> +<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" /> +<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" /> +<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" /> +<glyph unicode="" d="M0 200q5 105 27 193t68 167t113 135t166.5 91.5t225.5 42.5v271l600 -453l-600 -448v301q-94 -2 -182.5 -20t-170.5 -52.5t-147 -92.5t-100 -135z" /> +<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> +<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -142l-295 -294l129 -130h-400z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" /> +<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" /> +<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" /> +<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-4 -23 -14 -51.5t-20 -49t-24 -49.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5 t30.5 2.5t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5 t8 -43t6 -39.5t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM119 600q37 -48 65.5 -82.5t84 -93t118.5 -100t126 -60.5l37 141 q-107 18 -178.5 101.5t-71.5 193.5q0 85 46 158q-97 -83 -227 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59.5 69t-43.5 68l-15 26zM780 161l38 145q22 15 45 34t45.5 43.5t40.5 44.5t40.5 49.5t34 44.5t32 44t24.5 34q-83 113 -139 175l38 146 q68 -54 132.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" /> +<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" /> +<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" /> +<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" /> +<glyph unicode="" d="M100 600v200h300v-250v-26v-55.5t3.5 -50t11 -47.5t22 -37t35.5 -31.5t53.5 -18t74.5 -7.5t74.5 8t53.5 18.5t35.5 32t22 38t11 48t3.5 49.5v54v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5 t-89 96.5t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" /> +<glyph unicode="" d="M-1 410l198 -198l353 353l353 -353l198 198l-550 552z" /> +<glyph unicode="" d="M99 797l551 -551l550 551l-198 198l-353 -352l-352 352z" /> +<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-199l300 -283l299 283h-200v600h-796z" /> +<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50q0 -21 -14.5 -35.5 t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" /> +<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" /> +<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" /> +<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> +<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" /> +<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23 t-167.5 -37t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" /> +<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" /> +<glyph unicode="" d="M0 200v600h200v-600h-200zM300 275v400q0 37 20 63l145 196l96 198q14 28 38 48t51 20h50q39 0 69.5 -40.5t30.5 -84.5v-150l-28 -125h328q39 0 69.5 -40.5t30.5 -84.5v-100q0 -43 -29 -74l-238 -344q-37 -57 -83 -57h-250q-7 0 -41.5 25t-66.5 50l-31 25h-61 q-100 0 -100 75z" /> +<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63z" /> +<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275q0 -13 83 -94t90 -81h341q15 0 28.5 19.5t20.5 41.5l130 339h107q84 0 138.5 39t54.5 111t-53.5 110t-138.5 38h-302l85 121q11 15 10.5 34t-13.5 32l-110 112q-22 22 -53 6l-362 -230q-6 -4 -15.5 -10.5t-25 -26t-15.5 -36.5v-525z M408 289v503l339 236l86 -83l-147 -183q-17 -23 -5 -47q2 -3 4 -5.5t4 -4t5.5 -2.5t5 -1.5t6 -1t6.5 -0.5h7.5h6.5h457q22 0 30.5 -25t-0.5 -50t-30 -25h-203q-15 0 -28.5 -20t-19.5 -41l-131 -339h-293z" /> +<glyph unicode="" d="M-101 651q0 -72 55 -111t139 -39h107l130 -339q6 -21 19.5 -41t29.5 -20h341q8 0 94 80.5t86 93.5v526q0 17 -15 35.5t-30 27.5l-15 10l-365 230q-32 14 -54 -6l-109 -113q-13 -13 -13.5 -32t10.5 -34l85 -121q-101 1 -302 1q-85 0 -139 -38t-54 -110zM-1 601v100h476 h6.5h7.5t6.5 0.5t6.5 1t5.5 1.5t5 2.5l4 4t3.5 5.5q13 24 -5 46l-145 184l87 83l343 -237v-502l-107 -89h-293l-131 339q-6 20 -19.5 40.5t-28.5 20.5h-222zM1000 201v600h200v-600h-200z" /> +<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-203q0 -15 20 -28.5t41 -19.5l339 -131v-293l-89 -100h-503zM400 0v200h600v-200h-600z" /> +<glyph unicode="" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503 l89 -100v-294l-340 -130q-21 -7 -40.5 -20.5t-19.5 -28.5v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM298 500h300v-194l402 294l-402 299v-198h-300v-201z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM200 600l400 -294v194h300v201h-298v198z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM302 599h197v-300h201v300h194l-294 401z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM306 602l294 -402l298 402h-197v300h-201v-300h-194z" /> +<glyph unicode="" d="M24 600q0 154 78 287t211 211t287 78t287 -78t211 -211t78 -287t-78 -287t-211 -211t-287 -78t-287 78t-211 211t-78 287zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60q12 0 23 -5.5t23 -15t20 -13.5q16 -8 34 -15t40 -14.5t34 -12.5q22 -8 53 -31.5 t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49.5t20.5 62.5q-14 9 -37.5 9t-35.5 7q-14 8 -49 15.5t-52 18.5q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12 q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5 t34 22.5q-6 17 10 36q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23q-20 -3 -37 1q-16 -13 -37.5 -21.5t-34 -12t-44 -8.5t-38.5 -6 q-15 -3 -45.5 0.5t-45.5 -2.5q-22 -8 -52.5 -27t-33.5 -34q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -17 8 -41.5t16.5 -44.5t9.5 -24q-9 2 -39.5 6t-52 10t-37.5 16z" /> +<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" /> +<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" /> +<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125.5 -301.5t301.5 -125.5q177 0 302 125.5t125 301.5 q0 177 -125 302t-302 125q-176 0 -301.5 -125t-125.5 -302zM291 655q0 23 16 39t38 16q23 0 39 -16t16 -39t-16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5 t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-62 25.5t-26 61.5zM800 655q0 23 16 39t39 16q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16t-16 39z " /> +<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-39 -23 -111 -95l-512 -512q-68 -68 -81 -163z" /> +<glyph unicode="" d="M99 785q0 64 28 122.5t73 100t104.5 64t119 20.5t120 -38.5t105.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100t27 -122.5q0 -70 -55.5 -151.5t-129.5 -151t-182.5 -181t-182.5 -212.5q-62 85 -145.5 174t-150 152.5t-127 127t-94 124.5t-33.5 118z M229 785q0 -31 29.5 -75t64.5 -80.5t97 -97.5q17 -16 25 -24q101 -98 204 -217q85 97 209 219q127 125 163 171q48 62 48 104q0 78 -53.5 132.5t-120.5 54.5q-85 0 -147 -91l-102 -147l-97 150q-58 88 -141 88q-68 0 -123.5 -55.5t-55.5 -131.5z" /> +<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q66 -66 159 -66t159 66l283 283q66 66 66 159t-66 159l-141 141q-3 4 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q3 -3 9.5 -9t8.5 -8 l106 105l-212 212l389 389l247 -247l-95 -96l17 -17q47 -47 78 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" /> +<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" /> +<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" /> +<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -36 9 -60t31 -38t36 -19.5t47 -13.5q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" /> +<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/docs/assets/fonts/glyphiconshalflings-regular.ttf b/docs/assets/fonts/glyphiconshalflings-regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..c63c068feb1ac0de21fb7fe459fc8d0175028f2d Binary files /dev/null and b/docs/assets/fonts/glyphiconshalflings-regular.ttf differ diff --git a/docs/assets/fonts/glyphiconshalflings-regular.woff b/docs/assets/fonts/glyphiconshalflings-regular.woff new file mode 100755 index 0000000000000000000000000000000000000000..4c778ffdc5fa2837359e171f35c5b410674cd3c2 Binary files /dev/null and b/docs/assets/fonts/glyphiconshalflings-regular.woff differ diff --git a/docs/assets/img/bootstrap-docs-readme.png b/docs/assets/img/bootstrap-docs-readme.png deleted file mode 100644 index 36603bd3b44e65f713884bfb74741e554c71e238..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bootstrap-docs-readme.png and /dev/null differ diff --git a/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg b/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg deleted file mode 100644 index 2d398982b04d8706f44141bed3295f2bfc05c56e..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bootstrap-mdo-sfmoma-01.jpg and /dev/null differ diff --git a/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg b/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg deleted file mode 100644 index 7a89371a458712815feaf39847e8e5d57de64be1..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bootstrap-mdo-sfmoma-02.jpg and /dev/null differ diff --git a/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg b/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg deleted file mode 100644 index 3638f156463c9406b2351eeacafe48b0286df3cf..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bootstrap-mdo-sfmoma-03.jpg and /dev/null differ diff --git a/docs/assets/img/bs-docs-bootstrap-features.png b/docs/assets/img/bs-docs-bootstrap-features.png deleted file mode 100644 index 7cd8501ae192e5b43eefb5a1b69857a6c9b8278d..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bs-docs-bootstrap-features.png and /dev/null differ diff --git a/docs/assets/img/bs-docs-masthead-pattern.png b/docs/assets/img/bs-docs-masthead-pattern.png deleted file mode 100644 index 75c46a152dec0bd06b8fbda8b870949ca3ca11be..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bs-docs-masthead-pattern.png and /dev/null differ diff --git a/docs/assets/img/bs-docs-responsive-illustrations.png b/docs/assets/img/bs-docs-responsive-illustrations.png deleted file mode 100644 index 77c8f18f5ce7363cc4d83eced583e9981ddbe683..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bs-docs-responsive-illustrations.png and /dev/null differ diff --git a/docs/assets/img/bs-docs-twitter-github.png b/docs/assets/img/bs-docs-twitter-github.png deleted file mode 100644 index 06100f3989fd170b0a9294ac1c70ff460dba09c2..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/bs-docs-twitter-github.png and /dev/null differ diff --git a/docs/assets/img/example-sites/8020select.png b/docs/assets/img/example-sites/8020select.png deleted file mode 100644 index e8eeeb226bfd6c14965be7562e1ad45c09940a20..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/8020select.png and /dev/null differ diff --git a/docs/assets/img/example-sites/adoptahydrant.png b/docs/assets/img/example-sites/adoptahydrant.png deleted file mode 100644 index ec9188914c2f4e8e374eeb6b48790da65359344d..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/adoptahydrant.png and /dev/null differ diff --git a/docs/assets/img/example-sites/breakingnews.png b/docs/assets/img/example-sites/breakingnews.png deleted file mode 100644 index 5a077856cc7add93c9bb10f7eedbb33c489b831f..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/breakingnews.png and /dev/null differ diff --git a/docs/assets/img/example-sites/fleetio.png b/docs/assets/img/example-sites/fleetio.png deleted file mode 100644 index 9207b0cb805e3cf9f0edceb912fee623a1f9212d..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/fleetio.png and /dev/null differ diff --git a/docs/assets/img/example-sites/gathercontent.png b/docs/assets/img/example-sites/gathercontent.png deleted file mode 100644 index 92cd0ee2ae5a03504a6f81be285a0e1fe44cbbf6..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/gathercontent.png and /dev/null differ diff --git a/docs/assets/img/example-sites/jshint.png b/docs/assets/img/example-sites/jshint.png deleted file mode 100644 index ac7086de1d41dda2e67698aa300963b332a0f52c..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/jshint.png and /dev/null differ diff --git a/docs/assets/img/example-sites/kippt.png b/docs/assets/img/example-sites/kippt.png deleted file mode 100644 index 7ea1742f8092a97cc6db030bfe9fed35d59b9f71..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/kippt.png and /dev/null differ diff --git a/docs/assets/img/example-sites/soundready.png b/docs/assets/img/example-sites/soundready.png deleted file mode 100644 index 94e0e01b11080edc0e552177a9e352cca16f4f7f..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/example-sites/soundready.png and /dev/null differ diff --git a/docs/assets/img/examples/bootstrap-example-fluid.png b/docs/assets/img/examples/bootstrap-example-fluid.png deleted file mode 100644 index 5f49a332f332252ed8135536ccfe256d397d5fd3..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/bootstrap-example-fluid.png and /dev/null differ diff --git a/docs/assets/img/examples/bootstrap-example-grid.png b/docs/assets/img/examples/bootstrap-example-grid.png new file mode 100644 index 0000000000000000000000000000000000000000..cdc1c0726bb77736eeb5a2223e808056af265cd0 Binary files /dev/null and b/docs/assets/img/examples/bootstrap-example-grid.png differ diff --git a/docs/assets/img/examples/bootstrap-example-marketing-narrow.png b/docs/assets/img/examples/bootstrap-example-jumbotron-narrow.png similarity index 100% rename from docs/assets/img/examples/bootstrap-example-marketing-narrow.png rename to docs/assets/img/examples/bootstrap-example-jumbotron-narrow.png diff --git a/docs/assets/img/examples/bootstrap-example-navbar-fixed-top.png b/docs/assets/img/examples/bootstrap-example-navbar-fixed-top.png new file mode 100644 index 0000000000000000000000000000000000000000..30bfebfba25d6639ea95b8b2db46c0a86cc72aff Binary files /dev/null and b/docs/assets/img/examples/bootstrap-example-navbar-fixed-top.png differ diff --git a/docs/assets/img/examples/bootstrap-example-navbar-static-top.png b/docs/assets/img/examples/bootstrap-example-navbar-static-top.png new file mode 100644 index 0000000000000000000000000000000000000000..a965782d4470c71c80413c55a597149e88286510 Binary files /dev/null and b/docs/assets/img/examples/bootstrap-example-navbar-static-top.png differ diff --git a/docs/assets/img/examples/bootstrap-example-navbar.png b/docs/assets/img/examples/bootstrap-example-navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1f7df0d31e89929a9dcf9afe935992af684434 Binary files /dev/null and b/docs/assets/img/examples/bootstrap-example-navbar.png differ diff --git a/docs/assets/img/examples/bootstrap-example-offcanvas.png b/docs/assets/img/examples/bootstrap-example-offcanvas.png new file mode 100644 index 0000000000000000000000000000000000000000..7e213f2af80e1cda09dfda0520f7cc03a9a427ea Binary files /dev/null and b/docs/assets/img/examples/bootstrap-example-offcanvas.png differ diff --git a/docs/assets/img/examples/bootstrap-example-signin.png b/docs/assets/img/examples/bootstrap-example-signin.png index b649a985dcdc95fe1e98de0604e28461eb30067f..c55bbd59deff4715d56fa92596aec942d5392179 100644 Binary files a/docs/assets/img/examples/bootstrap-example-signin.png and b/docs/assets/img/examples/bootstrap-example-signin.png differ diff --git a/docs/assets/img/examples/bootstrap-example-sticky-footer-navbar.png b/docs/assets/img/examples/bootstrap-example-sticky-footer-navbar.png new file mode 100644 index 0000000000000000000000000000000000000000..4ad0e86819e27bbf4825554091e781a3baf83b34 Binary files /dev/null and b/docs/assets/img/examples/bootstrap-example-sticky-footer-navbar.png differ diff --git a/docs/assets/img/examples/browser-icon-chrome.png b/docs/assets/img/examples/browser-icon-chrome.png deleted file mode 100644 index 8c846c54e0d623fab50aac814ba547b5f621c9cc..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/browser-icon-chrome.png and /dev/null differ diff --git a/docs/assets/img/examples/browser-icon-firefox.png b/docs/assets/img/examples/browser-icon-firefox.png deleted file mode 100644 index 3dd68b11335ed2a0c5554335980a0ab4b51c8747..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/browser-icon-firefox.png and /dev/null differ diff --git a/docs/assets/img/examples/browser-icon-safari.png b/docs/assets/img/examples/browser-icon-safari.png deleted file mode 100644 index 7aaa29a7939374b03cdd94faf34f4bc361295d95..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/browser-icon-safari.png and /dev/null differ diff --git a/docs/assets/img/examples/slide-01.jpg b/docs/assets/img/examples/slide-01.jpg deleted file mode 100644 index bedab7d81cc8875f48c3fe7032228cea7ba87e10..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/slide-01.jpg and /dev/null differ diff --git a/docs/assets/img/examples/slide-02.jpg b/docs/assets/img/examples/slide-02.jpg deleted file mode 100644 index 4ed12cc07c4ac27227727a90895abee0e7755b10..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/slide-02.jpg and /dev/null differ diff --git a/docs/assets/img/examples/slide-03.jpg b/docs/assets/img/examples/slide-03.jpg deleted file mode 100644 index 37415da3ebfd5c143aa07e6a932ba32bbcab777e..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/examples/slide-03.jpg and /dev/null differ diff --git a/docs/assets/img/glyphicons-halflings-white.png b/docs/assets/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/docs/assets/img/glyphicons-halflings.png b/docs/assets/img/glyphicons-halflings.png deleted file mode 100644 index a9969993201f9cee63cf9f49217646347297b643..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/glyphicons-halflings.png and /dev/null differ diff --git a/docs/assets/img/grid-baseline-20px.png b/docs/assets/img/grid-baseline-20px.png deleted file mode 100644 index ce8c69ca2d7d42a7134fc1ed33699161fdcd93e3..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/grid-baseline-20px.png and /dev/null differ diff --git a/docs/assets/img/less-logo-large.png b/docs/assets/img/less-logo-large.png deleted file mode 100644 index 8f62ffbe0899b83e3b75a0e2d6b32cec3e253a8a..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/less-logo-large.png and /dev/null differ diff --git a/docs/assets/img/responsive-illustrations.png b/docs/assets/img/responsive-illustrations.png deleted file mode 100644 index a4bcbe302cc2605b63ab913d9adfc88f40b01383..0000000000000000000000000000000000000000 Binary files a/docs/assets/img/responsive-illustrations.png and /dev/null differ diff --git a/docs/assets/js/README.md b/docs/assets/js/README.md deleted file mode 100644 index 66903c71a637db76eeb9cf14f125b44b5102e654..0000000000000000000000000000000000000000 --- a/docs/assets/js/README.md +++ /dev/null @@ -1,106 +0,0 @@ -## 2.0 BOOTSTRAP JS PHILOSOPHY -These are the high-level design rules which guide the development of Bootstrap's plugin apis. - ---- - -### DATA-ATTRIBUTE API - -We believe you should be able to use all plugins provided by Bootstrap purely through the markup API without writing a single line of javascript. - -We acknowledge that this isn't always the most performant and sometimes it may be desirable to turn this functionality off altogether. Therefore, as of 2.0 we provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this: - - $('body').off('.data-api') - -To target a specific plugin, just include the plugins name as a namespace along with the data-api namespace like this: - - $('body').off('.alert.data-api') - ---- - -### PROGRAMMATIC API - -We also believe you should be able to use all plugins provided by Bootstrap purely through the JS API. - -All public APIs should be single, chainable methods, and return the collection acted upon. - - $(".btn.danger").button("toggle").addClass("fat") - -All methods should accept an optional options object, a string which targets a particular method, or null which initiates the default behavior: - - $("#myModal").modal() // initialized with defaults - $("#myModal").modal({ keyboard: false }) // initialized with now keyboard - $("#myModal").modal('show') // initializes and invokes show immediately afterqwe2 - ---- - -### OPTIONS - -Options should be sparse and add universal value. We should pick the right defaults. - -All plugins should have a default object which can be modified to effect all instance's default options. The defaults object should be available via `$.fn.plugin.defaults`. - - $.fn.modal.defaults = { … } - -An options definition should take the following form: - - *noun*: *adjective* - describes or modifies a quality of an instance - -examples: - - backdrop: true - keyboard: false - placement: 'top' - ---- - -### EVENTS - -All events should have an infinitive and past participle form. The infinitive is fired just before an action takes place, the past participle on completion of the action. - - show | shown - hide | hidden - ---- - -### CONSTRUCTORS - -Each plugin should expose it's raw constructor on a `Constructor` property -- accessed in the following way: - - - $.fn.popover.Constructor - ---- - -### DATA ACCESSOR - -Each plugin stores a copy of the invoked class on an object. This class instance can be accessed directly through jQuery's data API like this: - - $('[rel=popover]').data('popover') instanceof $.fn.popover.Constructor - ---- - -### DATA ATTRIBUTES - -Data attributes should take the following form: - -- data-{{verb}}={{plugin}} - defines main interaction -- data-target || href^=# - defined on "control" element (if element controls an element other than self) -- data-{{noun}} - defines class instance options - -examples: - - // control other targets - data-toggle="modal" data-target="#foo" - data-toggle="collapse" data-target="#foo" data-parent="#bar" - - // defined on element they control - data-spy="scroll" - - data-dismiss="modal" - data-dismiss="alert" - - data-toggle="dropdown" - - data-toggle="button" - data-toggle="buttons-checkbox" - data-toggle="buttons-radio" \ No newline at end of file diff --git a/docs/assets/js/application.js b/docs/assets/js/application.js index f880bc05d53f261e2838c0b4f1ef995f85753bd1..5dc31a6dc32f88a8d483fb1b315b14f4eb9de91b 100644 --- a/docs/assets/js/application.js +++ b/docs/assets/js/application.js @@ -9,13 +9,13 @@ var $window = $(window) // Disable certain links in docs - $('section [href^=#]').click(function (e) { + $('[href=#]').click(function (e) { e.preventDefault() }) - // side bar + // back to top setTimeout(function () { - $('.bs-docs-sidenav').affix({ + $('.bs-sidebar').affix({ offset: { top: function () { return $window.width() <= 980 ? 290 : 210 } , bottom: 270 @@ -23,23 +23,9 @@ }) }, 100) - // make code pretty - window.prettyPrint && prettyPrint() - - // add-ons - $('.add-on :checkbox').on('click', function () { - var $this = $(this) - , method = $this.attr('checked') ? 'addClass' : 'removeClass' - $(this).parents('.add-on')[method]('active') - }) - - // add tipsies to grid for scaffolding - if ($('#gridSystem').length) { - $('#gridSystem').tooltip({ - selector: '.show-grid > [class*="span"]' - , title: function () { return $(this).width() + 'px' } - }) - } + setTimeout(function () { + $('.bs-top').affix() + }, 100) // tooltip demo $('.tooltip-demo').tooltip({ @@ -49,6 +35,11 @@ $('.tooltip-test').tooltip() $('.popover-test').popover() + $('.bs-docs-navbar').tooltip({ + selector: "a[data-toggle=tooltip]", + container: ".bs-docs-navbar .nav" + }) + // popover demo $("a[data-toggle=popover]") .popover() @@ -67,49 +58,61 @@ }) // carousel demo - $('#myCarousel').carousel() + $('.bs-docs-carousel-example').carousel() // javascript build logic - var inputsComponent = $("#components.download input") - , inputsPlugin = $("#plugins.download input") - , inputsVariables = $("#variables.download input") + var inputsComponent = $("#less input") + , inputsPlugin = $("#plugins input") + , inputsVariables = $("#less-variables input") // toggle all plugin checkboxes - $('#components.download .toggle-all').on('click', function (e) { + $('#less .toggle').on('click', function (e) { e.preventDefault() - inputsComponent.attr('checked', !inputsComponent.is(':checked')) + inputsComponent.prop('checked', !inputsComponent.is(':checked')) }) - $('#plugins.download .toggle-all').on('click', function (e) { + $('#plugins .toggle').on('click', function (e) { e.preventDefault() - inputsPlugin.attr('checked', !inputsPlugin.is(':checked')) + inputsPlugin.prop('checked', !inputsPlugin.is(':checked')) }) - $('#variables.download .toggle-all').on('click', function (e) { + $('#less-variables .toggle').on('click', function (e) { e.preventDefault() inputsVariables.val('') }) + // color preview + $('.color-preview input').on('input', function (e) { + var color = $(e.target).val().replace('#', ''); + var $swatch = $(e.target).closest('.color-preview').find('.swatch div'); + if (color) { + $swatch.css('background-color', '#' + color); + } else { + $swatch.css('background-color', $swatch.data('default-color')); + } + }); + // request built javascript - $('.download-btn .btn').on('click', function () { + $('.bs-customize-download .btn').on('click', function (e) { + e.preventDefault() - var css = $("#components.download input:checked") + var css = $("#less input:checked") .map(function () { return this.value }) .toArray() - , js = $("#plugins.download input:checked") + , js = $("#plugins input:checked") .map(function () { return this.value }) .toArray() , vars = {} , img = ['glyphicons-halflings.png', 'glyphicons-halflings-white.png'] - $("#variables.download input") - .each(function () { - $(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) + $("#less-variables input") + .each(function () { + $(this).val() && (vars[ $(this).prev().text() ] = $(this).val()) }) $.ajax({ type: 'POST' - , url: /\?dev/.test(window.location) ? 'http://localhost:3000' : 'http://bootstrap.herokuapp.com' + , url: /localhost/.test(window.location) ? 'http://localhost:9001' : 'http://bootstrap.herokuapp.com' , dataType: 'jsonpi' , params: { js: js diff --git a/docs/assets/js/bootstrap-affix.js b/docs/assets/js/bootstrap-affix.js deleted file mode 100644 index 827ff458ede7bf0eed55ae05dec978829b572c5c..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-affix.js +++ /dev/null @@ -1,117 +0,0 @@ -/* ========================================================== - * bootstrap-affix.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - 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) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - $.fn.affix.defaults = { - offset: 0 - } - - - /* 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) - , data = $spy.data() - - data.offset = data.offset || {} - - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) - - $spy.affix(data) - }) - }) - - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-alert.js b/docs/assets/js/bootstrap-alert.js deleted file mode 100644 index 8917f9490a28d68d16bf53c8bd6df4fd88bff335..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-alert.js +++ /dev/null @@ -1,99 +0,0 @@ -/* ========================================================== - * bootstrap-alert.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.trigger(e = $.Event('close')) - - if (e.isDefaultPrevented()) return - - $parent.removeClass('in') - - function removeElement() { - $parent - .trigger('closed') - .remove() - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.alert - - $.fn.alert = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT NO CONFLICT - * ================= */ - - $.fn.alert.noConflict = function () { - $.fn.alert = old - return this - } - - - /* ALERT DATA-API - * ============== */ - - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-button.js b/docs/assets/js/bootstrap-button.js deleted file mode 100644 index 66df0a2967961f3776db9f569f2045b7306bcb6d..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-button.js +++ /dev/null @@ -1,105 +0,0 @@ -/* ============================================================ - * bootstrap-button.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * 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. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - Button.prototype.toggle = function () { - var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - var old = $.fn.button - - $.fn.button = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON NO CONFLICT - * ================== */ - - $.fn.button.noConflict = function () { - $.fn.button = old - return this - } - - - /* BUTTON DATA-API - * =============== */ - - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { - var $btn = $(e.target) - if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') - $btn.button('toggle') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-carousel.js b/docs/assets/js/bootstrap-carousel.js deleted file mode 100644 index b40edd7bffd2d1d9a18a7f30e41f37f9f6935ca7..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-carousel.js +++ /dev/null @@ -1,207 +0,0 @@ -/* ========================================================== - * bootstrap-carousel.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } - - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } - - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activeIndex == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL NO CONFLICT - * ==================== */ - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - /* CAROUSEL DATA-API - * ================= */ - - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() - } - - e.preventDefault() - }) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-collapse.js b/docs/assets/js/bootstrap-collapse.js deleted file mode 100644 index 2bede4a88c74f9dfad7d7309897b6f1f06e0f25d..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-collapse.js +++ /dev/null @@ -1,167 +0,0 @@ -/* ============================================================= - * bootstrap-collapse.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * 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. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning || this.$element.hasClass('in')) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSE NO CONFLICT - * ==================== */ - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - /* COLLAPSE DATA-API - * ================= */ - - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-dropdown.js b/docs/assets/js/bootstrap-dropdown.js deleted file mode 100644 index a1d51519fedbec3fdcb70f94a39dbdf9ccbb4e5e..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-dropdown.js +++ /dev/null @@ -1,165 +0,0 @@ -/* ============================================================ - * bootstrap-dropdown.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * 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. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - $parent.toggleClass('open') - } - - $this.focus() - - return false - } - - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index - - if (!/(38|40|27)/.test(e.keyCode)) return - - $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } - - $items = $('[role=menu] li:not(.divider):visible a', $parent) - - if (!$items.length) return - - index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items - .eq(index) - .focus() - } - - } - - function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = selector && $(selector) - - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.dropdown - - $.fn.dropdown = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* DROPDOWN NO CONFLICT - * ==================== */ - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - -}(window.jQuery); diff --git a/docs/assets/js/bootstrap-modal.js b/docs/assets/js/bootstrap-modal.js deleted file mode 100644 index 12abe06f17a0711201cf0090c0d8096fda9cd24c..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-modal.js +++ /dev/null @@ -1,247 +0,0 @@ -/* ========================================================= - * bootstrap-modal.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * 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. - * ========================================================= */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } - - that.$element.show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } - - , removeBackdrop: function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - 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) - ) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (callback) { - callback() - } - } - } - - - /* MODAL PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.modal - - $.fn.modal = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option]() - else if (options.show) data.show() - }) - } - - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - - $.fn.modal.Constructor = Modal - - - /* MODAL NO CONFLICT - * ================= */ - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - /* MODAL DATA-API - * ============== */ - - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) - - e.preventDefault() - - $target - .modal(option) - .one('hide', function () { - $this.focus() - }) - }) - -}(window.jQuery); diff --git a/docs/assets/js/bootstrap-popover.js b/docs/assets/js/bootstrap-popover.js deleted file mode 100644 index e6d897cd383cd6fe8a0d7405b854092d423364b3..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-popover.js +++ /dev/null @@ -1,114 +0,0 @@ -/* =========================================================== - * bootstrap-popover.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== - * 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. - * =========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js - ========================================== */ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { - - constructor: Popover - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - - $tip.removeClass('fade top bottom left right in') - } - - , hasContent: function () { - return this.getTitle() || this.getContent() - } - - , getContent: function () { - var content - , $e = this.$element - , o = this.options - - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') - - return content - } - - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - }) - - - /* POPOVER PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.popover - - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.popover.Constructor = Popover - - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.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>' - }) - - - /* POPOVER NO CONFLICT - * =================== */ - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(window.jQuery); diff --git a/docs/assets/js/bootstrap-scrollspy.js b/docs/assets/js/bootstrap-scrollspy.js deleted file mode 100644 index ac1402b4bcef8929638ddac319a1ccdf789e624d..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-scrollspy.js +++ /dev/null @@ -1,162 +0,0 @@ -/* ============================================================= - * bootstrap-scrollspy.js v2.3.1 - * 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. - * ============================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* SCROLLSPY CLASS DEFINITION - * ========================== */ - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.$body = $('body') - this.refresh() - this.process() - } - - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - 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]) - }) - } - - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } - - , activate: function (target) { - var active - , selector - - this.activeTarget = target - - $(this.selector) - .parent('.active') - .removeClass('active') - - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' - - active = $(selector) - .parent('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } - - active.trigger('activate') - } - - } - - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.scrollspy - - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.scrollspy.Constructor = ScrollSpy - - $.fn.scrollspy.defaults = { - offset: 10 - } - - - /* SCROLLSPY NO CONFLICT - * ===================== */ - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - /* SCROLLSPY DATA-API - * ================== */ - - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-tab.js b/docs/assets/js/bootstrap-tab.js deleted file mode 100644 index 1d23df6c641b276e06b4a57f33ff27e80a6e4a01..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-tab.js +++ /dev/null @@ -1,144 +0,0 @@ -/* ======================================================== - * bootstrap-tab.js v2.3.1 - * 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. - * ======================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TAB CLASS DEFINITION - * ==================== */ - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ( $this.parent('li').hasClass('active') ) return - - previous = $ul.find('.active:last a')[0] - - e = $.Event('show', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) - }) - } - - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active.one($.support.transition.end, next) : - next() - - $active.removeClass('in') - } - } - - - /* TAB PLUGIN DEFINITION - * ===================== */ - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - /* TAB NO CONFLICT - * =============== */ - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - /* TAB DATA-API - * ============ */ - - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-tooltip.js b/docs/assets/js/bootstrap-tooltip.js deleted file mode 100644 index 835abbe68c60e483cc13c764c422360ba5dadda2..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-tooltip.js +++ /dev/null @@ -1,361 +0,0 @@ -/* =========================================================== - * bootstrap-tooltip.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function (element, options) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - triggers = this.options.trigger.split(' ') - - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - 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)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function (e) { - var defaults = $.fn[this.type].defaults - , options = {} - , self - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }, this) - - self = $(e.currentTarget)[this.type](options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) return self.show() - - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - 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' }) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - pos = this.getPosition() - - actualWidth = $tip[0].offsetWidth - 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') - } - } - - , applyPlacement: function(offset, placement){ - var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - - $tip - .offset(offset) - .addClass(placement) - .addClass('in') - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } - - if (placement == 'bottom' || placement == 'top') { - delta = 0 - - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') - - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - $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() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() - - this.$element.trigger('hidden') - - return this - } - - , 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', '') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - var old = $.fn.tooltip - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.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 - } - - - /* TOOLTIP NO CONFLICT - * =================== */ - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); diff --git a/docs/assets/js/bootstrap-transition.js b/docs/assets/js/bootstrap-transition.js deleted file mode 100644 index 92719d37ed6befb753e31ddadaf9c3a9a9f43e4c..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-transition.js +++ /dev/null @@ -1,60 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery); \ No newline at end of file diff --git a/docs/assets/js/bootstrap-typeahead.js b/docs/assets/js/bootstrap-typeahead.js deleted file mode 100644 index 280cde8be67276148e3d76250f180ae3ab990b02..0000000000000000000000000000000000000000 --- a/docs/assets/js/bootstrap-typeahead.js +++ /dev/null @@ -1,335 +0,0 @@ -/* ============================================================= - * bootstrap-typeahead.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= - * 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. - * ============================================================ */ - - -!function($){ - - "use strict"; // jshint ;_; - - - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } - - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 - } - - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); diff --git a/docs/assets/js/bootstrap.js b/docs/assets/js/bootstrap.js index c298ee42e30383099fae3b4930e3ca6b0bf51384..2cbf1957c99687fa253c668f64777466d87ce19f 100644 --- a/docs/assets/js/bootstrap.js +++ b/docs/assets/js/bootstrap.js @@ -1,8 +1,8 @@ -/* =================================================== - * bootstrap-transition.js v2.3.1 +/* ======================================================================== + * 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. @@ -15,53 +15,41 @@ * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { + * ======================================================================== */ - $.support.transition = (function () { - var transitionEnd = (function () { ++function ($) { "use strict"; - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } + function transitionEnd() { + var el = document.createElement('bootstrap') - }()) + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } - return transitionEnd && { - end: transitionEnd + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } } + } + } - })() - + $(function () { + $.support.transition = transitionEnd() }) -}(window.jQuery);/* ========================================================== - * bootstrap-alert.js v2.3.1 +}(window.jQuery); +/* ======================================================================== + * Bootstrap: alert.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * 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. @@ -74,48 +62,44 @@ * 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. - * ========================================================== */ + * ======================================================================== */ -!function ($) { ++function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ + // ALERT CLASS DEFINITION + // ====================== var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent + var $this = $(this) + var selector = $this.attr('data-target') if (!selector) { selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } - $parent = $(selector) + var $parent = $(selector) - e && e.preventDefault() + if (e) e.preventDefault() - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } - $parent.trigger(e = $.Event('close')) + $parent.trigger(e = $.Event('close.bs.alert')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { - $parent - .trigger('closed') - .remove() + $parent.trigger('closed.bs.alert').remove() } $.support.transition && $parent.hasClass('fade') ? @@ -124,16 +108,17 @@ } - /* ALERT PLUGIN DEFINITION - * ======================= */ + // ALERT PLUGIN DEFINITION + // ======================= var old = $.fn.alert $.fn.alert = function (option) { return this.each(function () { var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) if (typeof option == 'string') data[option].call($this) }) } @@ -141,8 +126,8 @@ $.fn.alert.Constructor = Alert - /* ALERT NO CONFLICT - * ================= */ + // ALERT NO CONFLICT + // ================= $.fn.alert.noConflict = function () { $.fn.alert = old @@ -150,16 +135,17 @@ } - /* ALERT DATA-API - * ============== */ + // ALERT DATA-API + // ============== - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) -}(window.jQuery);/* ============================================================ - * bootstrap-button.js v2.3.1 +}(window.jQuery); +/* ======================================================================== + * Bootstrap: button.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * 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. @@ -172,30 +158,32 @@ * 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. - * ============================================================ */ + * ======================================================================== */ -!function ($) { ++function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ + // BUTTON PUBLIC CLASS DEFINITION + // ============================== var Button = function (element, options) { this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' } Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) + + if (!data.resetText) $el.data('resetText', $el[val]()) $el[val](data[state] || this.options[state]) @@ -203,46 +191,44 @@ setTimeout(function () { state == 'loadingText' ? $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) + $el.removeClass(d).removeAttr(d); }, 0) } Button.prototype.toggle = function () { var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - $parent && $parent - .find('.active') - .removeClass('active') + if ($parent) { + $parent.find('.active').removeClass('active') + } this.$element.toggleClass('active') } - /* BUTTON PLUGIN DEFINITION - * ======================== */ + // BUTTON PLUGIN DEFINITION + // ======================== var old = $.fn.button $.fn.button = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) + var $this = $(this) + var data = $this.data('button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() else if (option) data.setState(option) }) } - $.fn.button.defaults = { - loadingText: 'loading...' - } - $.fn.button.Constructor = Button - /* BUTTON NO CONFLICT - * ================== */ + // BUTTON NO CONFLICT + // ================== $.fn.button.noConflict = function () { $.fn.button = old @@ -250,19 +236,20 @@ } - /* BUTTON DATA-API - * =============== */ + // BUTTON DATA-API + // =============== - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') }) -}(window.jQuery);/* ========================================================== - * bootstrap-carousel.js v2.3.1 +}(window.jQuery); +/* ======================================================================== + * Bootstrap: carousel.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== + * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -276,199 +263,203 @@ * 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. - * ========================================================== */ - + * ======================================================================== */ -!function ($) { - "use strict"; // jshint ;_; ++function ($) { "use strict"; - - /* CAROUSEL CLASS DEFINITION - * ========================= */ + // CAROUSEL CLASS DEFINITION + // ========================= var Carousel = function (element, options) { - this.$element = $(element) + this.$element = $(element) this.$indicators = this.$element.find('.carousel-indicators') - this.options = options + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + this.options.pause == 'hover' && this.$element .on('mouseenter', $.proxy(this.pause, this)) .on('mouseleave', $.proxy(this.cycle, this)) } - Carousel.prototype = { + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } + this.interval && clearInterval(this.interval) - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this + return this + } - if (pos > (this.$items.length - 1) || pos < 0) return + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } + return this.$items.index(this.$active) + } - if (activeIndex == pos) { - return this.pause().cycle() - } + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } + if (pos > (this.$items.length - 1) || pos < 0) return - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - clearInterval(this.interval) - this.interval = null - return this - } + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() - , next: function () { - if (this.sliding) return - return this.slide('next') - } + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) - , prev: function () { - if (this.sliding) return - return this.slide('prev') + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) } - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e + this.interval = clearInterval(this.interval) - this.sliding = true + return this + } - isCycling && this.pause() + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } - $next = $next.length ? $next : this.$element.find('.item')[fallback]() + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this - if ($next.hasClass('active')) return + this.sliding = true - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } + isCycling && this.pause() - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } + $next = $next.length ? $next : this.$element.find('.item')[fallback]() - isCycling && this.cycle() + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) - return this + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') } + isCycling && this.cycle() + + return this } - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ + // CAROUSEL PLUGIN DEFINITION + // ========================== var old = $.fn.carousel $.fn.carousel = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) if (typeof option == 'number') data.to(option) else if (action) data[action]() else if (options.interval) data.pause().cycle() }) } - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - $.fn.carousel.Constructor = Carousel - /* CAROUSEL NO CONFLICT - * ==================== */ + // CAROUSEL NO CONFLICT + // ==================== $.fn.carousel.noConflict = function () { $.fn.carousel = old return this } - /* CAROUSEL DATA-API - * ================= */ - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + 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 $target.carousel(options) if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() + $target.data('bs.carousel').pause().to(slideIndex).cycle() } e.preventDefault() }) -}(window.jQuery);/* ============================================================= - * bootstrap-collapse.js v2.3.1 + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(window.jQuery); +/* ======================================================================== + * Bootstrap: collapse.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= + * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -482,135 +473,120 @@ * 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. - * ============================================================ */ - + * ======================================================================== */ -!function ($) { - "use strict"; // jshint ;_; ++function ($) { "use strict"; - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null - this.options.toggle && this.toggle() + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() } - Collapse.prototype = { + Collapse.DEFAULTS = { + toggle: true + } - constructor: Collapse + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return - , show: function () { - var dimension - , scroll - , actives - , hasData + var dimension = this.dimension() + var scroll = $.camelCase(['scroll', dimension].join('-')) + var actives = this.$parent && this.$parent.find('> .accordion-group > .in') - if (this.transitioning || this.$element.hasClass('in')) return + if (actives && actives.length) { + var hasData = actives.data('collapse') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') + this.$element[dimension](0) + this.transition('addClass', $.Event('show.bs.collapse'), 'shown.bs.collapse') - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } + if ($.support.transition) this.$element[dimension](this.$element[0][scroll]) + } - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + var dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide.bs.collapse'), 'hidden') + this.$element[dimension](0) + } - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } + Collapse.prototype.reset = function (size) { + var dimension = this.dimension() - , reset: function (size) { - var dimension = this.dimension() + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + return this + } - return this + Collapse.prototype.transition = function (method, startEvent, completeEvent) { + var that = this + var complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) } - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } + this.$element.trigger(startEvent) - this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return - if (startEvent.isDefaultPrevented()) return + this.transitioning = 1 - this.transitioning = 1 + this.$element[method]('in') - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() } - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ + // COLLAPSE PLUGIN DEFINITION + // ========================== var old = $.fn.collapse $.fn.collapse = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) + var $this = $(this) + var data = $this.data('collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + if (!data) $this.data('collapse', (data = new Collapse(this, options))) if (typeof option == 'string') data[option]() }) } - $.fn.collapse.defaults = { - toggle: true - } - $.fn.collapse.Constructor = Collapse - /* COLLAPSE NO CONFLICT - * ==================== */ + // COLLAPSE NO CONFLICT + // ==================== $.fn.collapse.noConflict = function () { $.fn.collapse = old @@ -618,23 +594,25 @@ } - /* COLLAPSE DATA-API - * ================= */ + // COLLAPSE DATA-API + // ================= - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + var $this = $(this), href + var target = $this.attr('data-target') || e.preventDefault() || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() + var option = $(target).data('collapse') ? 'toggle' : $this.data() + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') $(target).collapse(option) }) -}(window.jQuery);/* ============================================================ - * bootstrap-dropdown.js v2.3.1 +}(window.jQuery); +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ + * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -648,126 +626,116 @@ * 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. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - + * ======================================================================== */ - /* DROPDOWN CLASS DEFINITION - * ========================= */ - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { ++function ($) { "use strict"; - constructor: Dropdown + // DROPDOWN CLASS DEFINITION + // ========================= - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } - if ($this.is('.disabled, :disabled')) return + Dropdown.prototype.toggle = function (e) { + var $this = $(this) - $parent = getParent($this) + if ($this.is('.disabled, :disabled')) return - isActive = $parent.hasClass('open') + var $parent = getParent($this) + var isActive = $parent.hasClass('open') - clearMenus() + clearMenus() - if (!isActive) { - $parent.toggleClass('open') + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus) } - $this.focus() + $parent.trigger(e = $.Event('show.bs.dropdown')) - return false - } + if (e.isDefaultPrevented()) return - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown') + } - if (!/(38|40|27)/.test(e.keyCode)) return + $this.focus() - $this = $(this) + return false + } - e.preventDefault() - e.stopPropagation() + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27)/.test(e.keyCode)) return - if ($this.is('.disabled, :disabled')) return + var $this = $(this) - $parent = getParent($this) + e.preventDefault() + e.stopPropagation() - isActive = $parent.hasClass('open') + if ($this.is('.disabled, :disabled')) return - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } + var $parent = getParent($this) + var isActive = $parent.hasClass('open') - $items = $('[role=menu] li:not(.divider):visible a', $parent) + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } - if (!$items.length) return + var $items = $('[role=menu] li:not(.divider):visible a', $parent) - index = $items.index($items.filter(':focus')) + if (!$items.length) return - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 + var index = $items.index($items.filter(':focus')) - $items - .eq(index) - .focus() - } + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index=0 + $items.eq(index).focus() } function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') + $(backdrop).remove() + $(toggle).each(function (e) { + var $parent = getParent($(this)) + if (!$parent.hasClass('open')) return + $parent.trigger(e = $.Event('hide.bs.dropdown')) + if (e.isDefaultPrevented()) return + $parent.removeClass('open').trigger('hidden.bs.dropdown') }) } function getParent($this) { var selector = $this.attr('data-target') - , $parent if (!selector) { selector = $this.attr('href') selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 } - $parent = selector && $(selector) + var $parent = selector && $(selector) - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent + return $parent && $parent.length ? $parent : $this.parent() } - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ + // DROPDOWN PLUGIN DEFINITION + // ========================== var old = $.fn.dropdown $.fn.dropdown = function (option) { return this.each(function () { var $this = $(this) - , data = $this.data('dropdown') + var data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) if (typeof option == 'string') data[option].call($this) }) @@ -776,8 +744,8 @@ $.fn.dropdown.Constructor = Dropdown - /* DROPDOWN NO CONFLICT - * ==================== */ + // DROPDOWN NO CONFLICT + // ==================== $.fn.dropdown.noConflict = function () { $.fn.dropdown = old @@ -785,21 +753,21 @@ } - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) }(window.jQuery); -/* ========================================================= - * bootstrap-modal.js v2.3.1 +/* ======================================================================== + * Bootstrap: modal.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= + * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -813,210 +781,202 @@ * 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. - * ========================================================= */ - + * ======================================================================== */ -!function ($) { - "use strict"; // jshint ;_; ++function ($) { "use strict"; - - /* MODAL CLASS DEFINITION - * ====================== */ + // MODAL CLASS DEFINITION + // ====================== var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { + this.options = options + this.$element = $(element).delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.$backdrop = + this.isShown = null - constructor: Modal + if (this.options.remote) this.$element.find('.modal-body').load(this.options.remote) + } - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } + Modal.DEFAULTS = { + backdrop: true + , keyboard: true + , show: true + } - , show: function () { - var that = this - , e = $.Event('show') + Modal.prototype.toggle = function () { + return this[!this.isShown ? 'show' : 'hide']() + } - this.$element.trigger(e) + Modal.prototype.show = function () { + var that = this + var e = $.Event('show.bs.modal') - if (this.isShown || e.isDefaultPrevented()) return + this.$element.trigger(e) - this.isShown = true + if (this.isShown || e.isDefaultPrevented()) return - this.escape() + this.isShown = true - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') + this.escape() - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') - that.$element.show() + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) // don't move modals dom position + } - if (transition) { - that.$element[0].offsetWidth // force reflow - } + that.$element.show() - that.$element - .addClass('in') - .attr('aria-hidden', false) + if (transition) { + that.$element[0].offsetWidth // force reflow + } - that.enforceFocus() + that.$element + .addClass('in') + .attr('aria-hidden', false) - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') + that.enforceFocus() - }) - } + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown.bs.modal') }) : + that.$element.focus().trigger('shown.bs.modal') + }) + } - , hide: function (e) { - e && e.preventDefault() + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() - var that = this + e = $.Event('hide.bs.modal') - e = $.Event('hide') + this.$element.trigger(e) - this.$element.trigger(e) + if (!this.isShown || e.isDefaultPrevented()) return - if (!this.isShown || e.isDefaultPrevented()) return + this.isShown = false - this.isShown = false + this.escape() - this.escape() + $(document).off('focusin.bs.modal') - $(document).off('focusin.modal') + this.$element + .removeClass('in') + .attr('aria-hidden', true) - this.$element - .removeClass('in') - .attr('aria-hidden', true) + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.focus() + } + }, this)) + } - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.bs.modal') + } + } - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } + Modal.prototype.hideWithTransition = function () { + var that = this + var timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden.bs.modal') + }) + } - , removeBackdrop: function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate - this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />') - .appendTo(document.body) + 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.$backdrop.click( + this.options.backdrop == 'static' ? + $.proxy(this.$element[0].focus, this.$element[0]) + : $.proxy(this.hide, this) + ) - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - this.$backdrop.addClass('in') + this.$backdrop.addClass('in') - if (!callback) return + if (!callback) return - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() + doAnimate ? + this.$backdrop.one($.support.transition.end, callback) : + callback() - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one($.support.transition.end, callback) : + callback() - } else if (callback) { - callback() - } - } + } else if (callback) { + callback() + } } - /* MODAL PLUGIN DEFINITION - * ======================= */ + // MODAL PLUGIN DEFINITION + // ======================= var old = $.fn.modal $.fn.modal = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) if (typeof option == 'string') data[option]() else if (options.show) data.show() }) } - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - $.fn.modal.Constructor = Modal - /* MODAL NO CONFLICT - * ================= */ + // MODAL NO CONFLICT + // ================= $.fn.modal.noConflict = function () { $.fn.modal = old @@ -1024,14 +984,14 @@ } - /* MODAL DATA-API - * ============== */ + // MODAL DATA-API + // ============== - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 + var option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) e.preventDefault() @@ -1040,14 +1000,18 @@ .one('hide', function () { $this.focus() }) - }) + }) + + var $body = $(document.body) + .on('bs.modal.shown', '.modal', function () { $body.addClass('modal-open') }) + .on('bs.modal.hidden', '.modal', function () { $body.removeClass('modal-open') }) }(window.jQuery); -/* =========================================================== - * bootstrap-tooltip.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#tooltips +/* ======================================================================== + * 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. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -1061,342 +1025,337 @@ * 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. - * ========================================================== */ - - -!function ($) { + * ======================================================================== */ - "use strict"; // jshint ;_; ++function ($) { "use strict"; - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ + // TOOLTIP 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.prototype = { + 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 + } - constructor: Tooltip + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i + var triggers = this.options.trigger.split(' ') - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true + for (var i = triggers.length; i--;) { + var trigger = triggers[i] - triggers = this.options.trigger.split(' ') + 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' - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - 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)) - } + 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)) } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() } - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } - return options - } + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } - , enter: function (e) { - var defaults = $.fn[this.type].defaults - , options = {} - , self + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }, this) + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } - self = $(e.currentTarget)[this.type](options).data(this.type) + return options + } - if (!self.options.delay || !self.options.delay.show) return self.show() + Tooltip.prototype.enter = function (obj) { + var defaults = this.getDefaults() + var options = {} - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } + this._options && $.each(this._options, function (key, value) { + if (defaults[key] != value) options[key] = value + }) - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](options).data('bs.' + this.type) - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() + if (!self.options.delay || !self.options.delay.show) return self.show() - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } + clearTimeout(this.timeout) - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } + self.hoverState = 'in' + this.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } - placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement + Tooltip.prototype.leave = function (obj) { + var self = obj instanceof this.constructor ? + obj : $(obj.currentTarget)[this.type](this._options).data('bs.' + this.type) - $tip - .detach() - .css({ top: 0, left: 0, display: 'block' }) + clearTimeout(this.timeout) - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + if (!self.options.delay || !self.options.delay.hide) return self.hide() - pos = this.getPosition() + self.hoverState = 'out' + this.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.'+ this.type) - 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 - } + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) - this.applyPlacement(tp, placement) - this.$element.trigger('shown') - } - } + if (e.isDefaultPrevented()) return - , applyPlacement: function(offset, placement){ var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - $tip - .offset(offset) - .addClass(placement) - .addClass('in') + this.setContent() - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight + if (this.options.animation) $tip.addClass('fade') - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } + var placement = typeof this.options.placement == 'function' ? + this.options.placement.call(this, $tip[0], this.$element[0]) : + this.options.placement - if (placement == 'bottom' || placement == 'top') { - delta = 0 + $tip + .detach() + .css({ top: 0, left: 0, display: 'block' }) - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') + 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 } - if (replace) $tip.offset(offset) + this.applyPlacement(tp, placement) + this.$element.trigger('shown.bs.' + this.type) } + } - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } + Tooltip.prototype.applyPlacement = function(offset, placement) { + var replace + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() + $tip + .offset(offset) + .addClass(placement) + .addClass('in') - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') + if (placement == 'top' && actualHeight != height) { + replace = true + offset.top = offset.top + height - actualHeight + } - this.$element.trigger(e) - if (e.isDefaultPrevented()) return + if (placement == 'bottom' || placement == 'top') { + var delta = 0 - $tip.removeClass('in') + if (offset.left < 0){ + delta = offset.left * -2 + offset.left = 0 - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).detach() - }, 500) + $tip.offset(offset) - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.detach() - }) + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight } - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } - this.$element.trigger('hidden') + if (replace) $tip.offset(offset) + } - return this - } + Tooltip.prototype.replaceArrow = function(delta, dimension, position) { + this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } - , 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', '') - } - } + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() - , hasContent: function () { - return this.getTitle() - } + $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) + $tip.removeClass('fade in top bottom left right') + } - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } + Tooltip.prototype.hide = function () { + var that = this + var $tip = this.tip() + var e = $.Event('hide.bs.' + this.type) - , getTitle: function () { - var title - , $e = this.$element - , o = this.options + this.$element.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 - } + $tip.removeClass('in') - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } + function removeWithAnimation() { + var timeout = setTimeout(function () { + $tip.off($.support.transition.end).detach() + }, 500) - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + $tip.one($.support.transition.end, function () { + clearTimeout(timeout) + $tip.detach() + }) } - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } + $.support.transition && this.$tip.hasClass('fade') ? + removeWithAnimation() : + $tip.detach() - , enable: function () { - this.enabled = true - } + this.$element.trigger('hidden.bs.' + this.type) - , disable: function () { - this.enabled = false - } + return this + } - , toggleEnabled: function () { - this.enabled = !this.enabled + 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', '') } + } - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + 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()) + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.tip = function () { + return this.$tip = this.$tip || $(this.options.template) + } + + Tooltip.prototype.arrow =function(){ + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + } - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) + Tooltip.prototype.validate = function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null } + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + 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) + } + Tooltip.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) } - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ + // TOOLTIP PLUGIN DEFINITION + // ========================= var old = $.fn.tooltip - $.fn.tooltip = function ( option ) { + $.fn.tooltip = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) if (typeof option == 'string') data[option]() }) } $.fn.tooltip.Constructor = Tooltip - $.fn.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 - } - - /* TOOLTIP NO CONFLICT - * =================== */ + // TOOLTIP NO CONFLICT + // =================== $.fn.tooltip.noConflict = function () { $.fn.tooltip = old @@ -1404,10 +1363,10 @@ } }(window.jQuery); -/* =========================================================== - * bootstrap-popover.js v2.3.1 +/* ======================================================================== + * Bootstrap: popover.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== + * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -1421,96 +1380,93 @@ * 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. - * =========================================================== */ + * ======================================================================== */ -!function ($) { ++function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ + // POPOVER 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 BOOTSTRAP-TOOLTIP.js - ========================================== */ - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { + // NOTE: POPOVER EXTENDS tooltip.js + // ================================ - constructor: Popover + Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() + Popover.prototype.constructor = Popover - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } - $tip.removeClass('fade top bottom left right in') - } + Popover.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + var content = this.getContent() - , hasContent: function () { - return this.getTitle() || this.getContent() - } + $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) + $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - , getContent: function () { - var content - , $e = this.$element - , o = this.options + $tip.removeClass('fade top bottom left right in') - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') + $tip.find('.popover-title:empty').hide() + } - return content - } + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } + Popover.prototype.getContent = function () { + var content = typeof this.options.content == 'function' ? + this.options.content.call(this.$element[0]) : + this.options.content - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } + return content || this.$element.attr('data-content') + } - }) + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + Popover.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } - /* POPOVER PLUGIN DEFINITION - * ======================= */ + + // POPOVER PLUGIN DEFINITION + // ========================= var old = $.fn.popover $.fn.popover = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) + 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]() }) } $.fn.popover.Constructor = Popover - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.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>' - }) - - /* POPOVER NO CONFLICT - * =================== */ + // POPOVER NO CONFLICT + // =================== $.fn.popover.noConflict = function () { $.fn.popover = old @@ -1518,10 +1474,10 @@ } }(window.jQuery); -/* ============================================================= - * bootstrap-scrollspy.js v2.3.1 +/* ======================================================================== + * 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"); @@ -1535,133 +1491,127 @@ * 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. - * ============================================================== */ - - -!function ($) { + * ======================================================================== */ - "use strict"; // jshint ;_; ++function ($) { "use strict"; - /* SCROLLSPY CLASS DEFINITION - * ========================== */ + // SCROLLSPY CLASS DEFINITION + // ========================== function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target + var href + var process = $.proxy(this.process, this) + var $element = $(element).is('body') ? $(window) : $(element) + + 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.$body = $('body') + this.offsets = $([]) + this.targets = $([]) + this.activeTarget = null + this.refresh() this.process() } - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - 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.DEFAULTS = { + offset: 10 + } - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } + ScrollSpy.prototype.refresh = function () { + this.offsets = $([]) + this.targets = $([]) + + 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) + + 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]) + }) + } - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } + 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 - , activate: function (target) { - var active - , selector + if (scrollTop >= maxScroll) { + return activeTarget != (i = targets.last()[0]) && this.activate(i) + } - this.activeTarget = target + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } - $(this.selector) - .parent('.active') - .removeClass('active') + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' + $(this.selector) + .parents('.active') + .removeClass('active') - active = $(selector) - .parent('li') - .addClass('active') + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } + var active = $(selector) + .parents('li') + .addClass('active') - active.trigger('activate') - } + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + active.trigger('activate') } - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ + // SCROLLSPY PLUGIN DEFINITION + // =========================== var old = $.fn.scrollspy $.fn.scrollspy = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) + 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]() }) } $.fn.scrollspy.Constructor = ScrollSpy - $.fn.scrollspy.defaults = { - offset: 10 - } - - /* SCROLLSPY NO CONFLICT - * ===================== */ + // SCROLLSPY NO CONFLICT + // ===================== $.fn.scrollspy.noConflict = function () { $.fn.scrollspy = old @@ -1669,8 +1619,8 @@ } - /* SCROLLSPY DATA-API - * ================== */ + // SCROLLSPY DATA-API + // ================== $(window).on('load', function () { $('[data-spy="scroll"]').each(function () { @@ -1679,10 +1629,11 @@ }) }) -}(window.jQuery);/* ======================================================== - * bootstrap-tab.js v2.3.1 +}(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"); @@ -1696,108 +1647,97 @@ * 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. - * ======================================================== */ - - -!function ($) { + * ======================================================================== */ - "use strict"; // jshint ;_; ++function ($) { "use strict"; - /* TAB CLASS DEFINITION - * ==================== */ + // TAB CLASS DEFINITION + // ==================== var Tab = function (element) { this.element = $(element) } - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } + Tab.prototype.show = function () { + var $this = this.element + var $ul = $this.closest('ul:not(.dropdown-menu)') + var selector = $this.attr('data-target') - if ( $this.parent('li').hasClass('active') ) return + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } - previous = $ul.find('.active:last a')[0] + if ($this.parent('li').hasClass('active')) return - e = $.Event('show', { - relatedTarget: previous - }) + var previous = $ul.find('.active:last a')[0] + var e = $.Event('show.bs.tab', { + relatedTarget: previous + }) - $this.trigger(e) + $this.trigger(e) - if (e.isDefaultPrevented()) return + if (e.isDefaultPrevented()) return - $target = $(selector) + var $target = $(selector) - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown.bs.tab' + , relatedTarget: previous }) - } + }) + } - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && $active.hasClass('fade') - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') - callback && callback() + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') } - transition ? - $active.one($.support.transition.end, next) : - next() + if (element.parent('.dropdown-menu')) { + element.closest('li.dropdown').addClass('active') + } - $active.removeClass('in') + callback && callback() } + + transition ? + $active.one($.support.transition.end, next) : + next() + + $active.removeClass('in') } - /* TAB PLUGIN DEFINITION - * ===================== */ + // TAB PLUGIN DEFINITION + // ===================== var old = $.fn.tab $.fn.tab = function ( option ) { return this.each(function () { var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) if (typeof option == 'string') data[option]() }) } @@ -1805,8 +1745,8 @@ $.fn.tab.Constructor = Tab - /* TAB NO CONFLICT - * =============== */ + // TAB NO CONFLICT + // =============== $.fn.tab.noConflict = function () { $.fn.tab = old @@ -1814,18 +1754,19 @@ } - /* TAB DATA-API - * ============ */ + // TAB DATA-API + // ============ - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + $(document).on('click.bs.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { e.preventDefault() $(this).tab('show') }) -}(window.jQuery);/* ============================================================= - * bootstrap-typeahead.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= +}(window.jQuery); +/* ======================================================================== + * Bootstrap: affix.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#affix + * ======================================================================== * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -1839,415 +1780,84 @@ * 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. - * ============================================================ */ + * ======================================================================== */ -!function($){ ++function ($) { "use strict"; - "use strict"; // jshint ;_; + // 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)) - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } + this.affixed = + this.unpin = null - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) + this.checkPosition() } - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 + Affix.DEFAULTS = { + offset: 0 } - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); -/* ========================================================== - * bootstrap-affix.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() + Affix.prototype.checkPositionWithEventLoop = function () { + setTimeout($.proxy(this.checkPosition, this), 1) } Affix.prototype.checkPosition = function () { if (!this.$element.is(':visible')) return var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() + 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() - 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 + 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.unpin = affix == 'bottom' ? position.top - scrollTop : null this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : '')) } - /* AFFIX PLUGIN DEFINITION - * ======================= */ + // AFFIX PLUGIN DEFINITION + // ======================= var old = $.fn.affix $.fn.affix = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) + 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 - $.fn.affix.defaults = { - offset: 0 - } - - /* AFFIX NO CONFLICT - * ================= */ + // AFFIX NO CONFLICT + // ================= $.fn.affix.noConflict = function () { $.fn.affix = old @@ -2255,22 +1865,21 @@ } - /* AFFIX DATA-API - * ============== */ + // AFFIX DATA-API + // ============== $(window).on('load', function () { $('[data-spy="affix"]').each(function () { var $spy = $(this) - , data = $spy.data() + var data = $spy.data() data.offset = data.offset || {} - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) + if (data.offsetBottom) data.offset.bottom = data.offsetBottom + if (data.offsetTop) data.offset.top = data.offsetTop $spy.affix(data) }) }) - -}(window.jQuery); \ No newline at end of file +}(window.jQuery); diff --git a/docs/assets/js/bootstrap.min.js b/docs/assets/js/bootstrap.min.js index a5a55f7f9824be2165fc103e1356e0da17710716..3117a381a926edd57af4326ec721ecec6b97981d 100644 --- a/docs/assets/js/bootstrap.min.js +++ b/docs/assets/js/bootstrap.min.js @@ -1,6 +1,6 @@ /** -* Bootstrap.js v2.3.1 by @fat & @mdo +* Bootstrap.js v3.0.0 by @fat & @mdo * Copyright 2012 Twitter, Inc. * http://www.apache.org/licenses/LICENSE-2.0.txt */ -!function(e){"use strict";e(function(){e.support.transition=function(){var e=function(){var e=document.createElement("bootstrap"),t={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"},n;for(n in t)if(e.style[n]!==undefined)return t[n]}();return e&&{end:e}}()})}(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").remove()}var n=e(this),r=n.attr("data-target"),i;r||(r=n.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,"")),i=e(r),t&&t.preventDefault(),i.length||(i=n.hasClass("alert")?n:n.parent()),i.trigger(t=e.Event("close"));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("alert");i||r.data("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.alert.data-api",t,n.prototype.close)}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.button.defaults,n)};t.prototype.setState=function(e){var t="disabled",n=this.$element,r=n.data(),i=n.is("input")?"val":"html";e+="Text",r.resetText||n.data("resetText",n[i]()),n[i](r[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("button",i=new t(this,s)),n=="toggle"?i.toggle():n&&i.setState(n)})},e.fn.button.defaults={loadingText:"loading..."},e.fn.button.Constructor=t,e.fn.button.noConflict=function(){return e.fn.button=n,this},e(document).on("click.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.options.pause=="hover"&&this.$element.on("mouseenter",e.proxy(this.pause,this)).on("mouseleave",e.proxy(this.cycle,this))};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},getActiveIndex:function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},to:function(t){var n=this.getActiveIndex(),r=this;if(t>this.$items.length-1||t<0)return;return this.sliding?this.$element.one("slid",function(){r.to(t)}):n==t?this.pause().cycle():this.slide(t>n?"next":"prev",e(this.$items[t]))},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)),clearInterval(this.interval),this.interval=null,this},next:function(){if(this.sliding)return;return this.slide("next")},prev:function(){if(this.sliding)return;return this.slide("prev")},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,f;this.sliding=!0,s&&this.pause(),i=i.length?i:this.$element.find(".item")[u](),f=e.Event("slide",{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("carousel"),s=e.extend({},e.fn.carousel.defaults,typeof n=="object"&&n),o=typeof n=="string"?n:s.slide;i||r.data("carousel",i=new t(this,s)),typeof n=="number"?i.to(n):o?i[o]():s.interval&&i.pause().cycle()})},e.fn.carousel.defaults={interval:5e3,pause:"hover"},e.fn.carousel.Constructor=t,e.fn.carousel.noConflict=function(){return e.fn.carousel=n,this},e(document).on("click.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("carousel").pause().to(o).cycle(),t.preventDefault()})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.$element=e(t),this.options=e.extend({},e.fn.collapse.defaults,n),this.options.parent&&(this.$parent=e(this.options.parent)),this.options.toggle&&this.toggle()};t.prototype={constructor:t,dimension:function(){var e=this.$element.hasClass("width");return e?"width":"height"},show:function(){var t,n,r,i;if(this.transitioning||this.$element.hasClass("in"))return;t=this.dimension(),n=e.camelCase(["scroll",t].join("-")),r=this.$parent&&this.$parent.find("> .accordion-group > .in");if(r&&r.length){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"),"shown"),e.support.transition&&this.$element[t](this.$element[0][n])},hide:function(){var t;if(this.transitioning||!this.$element.hasClass("in"))return;t=this.dimension(),this.reset(this.$element[t]()),this.transition("removeClass",e.Event("hide"),"hidden"),this.$element[t](0)},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},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()},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({},e.fn.collapse.defaults,r.data(),typeof n=="object"&&n);i||r.data("collapse",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.collapse.defaults={toggle:!0},e.fn.collapse.Constructor=t,e.fn.collapse.noConflict=function(){return e.fn.collapse=n,this},e(document).on("click.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();n[e(i).hasClass("in")?"addClass":"removeClass"]("collapsed"),e(i).collapse(s)})}(window.jQuery),!function(e){"use strict";function r(){e(t).each(function(){i(e(this)).removeClass("open")})}function i(t){var n=t.attr("data-target"),r;n||(n=t.attr("href"),n=n&&/#/.test(n)&&n.replace(/.*(?=#[^\s]*$)/,"")),r=n&&e(n);if(!r||!r.length)r=t.parent();return r}var t="[data-toggle=dropdown]",n=function(t){var n=e(t).on("click.dropdown.data-api",this.toggle);e("html").on("click.dropdown.data-api",function(){n.parent().removeClass("open")})};n.prototype={constructor:n,toggle:function(t){var n=e(this),s,o;if(n.is(".disabled, :disabled"))return;return s=i(n),o=s.hasClass("open"),r(),o||s.toggleClass("open"),n.focus(),!1},keydown:function(n){var r,s,o,u,a,f;if(!/(38|40|27)/.test(n.keyCode))return;r=e(this),n.preventDefault(),n.stopPropagation();if(r.is(".disabled, :disabled"))return;u=i(r),a=u.hasClass("open");if(!a||a&&n.keyCode==27)return n.which==27&&u.find(t).focus(),r.click();s=e("[role=menu] li:not(.divider):visible a",u);if(!s.length)return;f=s.index(s.filter(":focus")),n.keyCode==38&&f>0&&f--,n.keyCode==40&&f<s.length-1&&f++,~f||(f=0),s.eq(f).focus()}};var s=e.fn.dropdown;e.fn.dropdown=function(t){return this.each(function(){var r=e(this),i=r.data("dropdown");i||r.data("dropdown",i=new n(this)),typeof t=="string"&&i[t].call(r)})},e.fn.dropdown.Constructor=n,e.fn.dropdown.noConflict=function(){return e.fn.dropdown=s,this},e(document).on("click.dropdown.data-api",r).on("click.dropdown.data-api",".dropdown form",function(e){e.stopPropagation()}).on("click.dropdown-menu",function(e){e.stopPropagation()}).on("click.dropdown.data-api",t,n.prototype.toggle).on("keydown.dropdown.data-api",t+", [role=menu]",n.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.options.remote&&this.$element.find(".modal-body").load(this.options.remote)};t.prototype={constructor:t,toggle:function(){return this[this.isShown?"hide":"show"]()},show:function(){var t=this,n=e.Event("show");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")}):t.$element.focus().trigger("shown")})},hide:function(t){t&&t.preventDefault();var n=this;t=e.Event("hide"),this.$element.trigger(t);if(!this.isShown||t.isDefaultPrevented())return;this.isShown=!1,this.escape(),e(document).off("focusin.modal"),this.$element.removeClass("in").attr("aria-hidden",!0),e.support.transition&&this.$element.hasClass("fade")?this.hideWithTransition():this.hideModal()},enforceFocus:function(){var t=this;e(document).on("focusin.modal",function(e){t.$element[0]!==e.target&&!t.$element.has(e.target).length&&t.$element.focus()})},escape:function(){var e=this;this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.modal",function(t){t.which==27&&e.hide()}):this.isShown||this.$element.off("keyup.dismiss.modal")},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()})},hideModal:function(){var e=this;this.$element.hide(),this.backdrop(function(){e.removeBackdrop(),e.$element.trigger("hidden")})},removeBackdrop:function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},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("modal"),s=e.extend({},e.fn.modal.defaults,r.data(),typeof n=="object"&&n);i||r.data("modal",i=new t(this,s)),typeof n=="string"?i[n]():s.show&&i.show()})},e.fn.modal.defaults={backdrop:!0,keyboard:!0,show:!0},e.fn.modal.Constructor=t,e.fn.modal.noConflict=function(){return e.fn.modal=n,this},e(document).on("click.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()})})}(window.jQuery),!function(e){"use strict";var t=function(e,t){this.init("tooltip",e,t)};t.prototype={constructor:t,init:function(t,n,r){var i,s,o,u,a;this.type=t,this.$element=e(n),this.options=this.getOptions(r),this.enabled=!0,o=this.options.trigger.split(" ");for(a=o.length;a--;)u=o[a],u=="click"?this.$element.on("click."+this.type,this.options.selector,e.proxy(this.toggle,this)):u!="manual"&&(i=u=="hover"?"mouseenter":"focus",s=u=="hover"?"mouseleave":"blur",this.$element.on(i+"."+this.type,this.options.selector,e.proxy(this.enter,this)),this.$element.on(s+"."+this.type,this.options.selector,e.proxy(this.leave,this)));this.options.selector?this._options=e.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},getOptions:function(t){return t=e.extend({},e.fn[this.type].defaults,this.$element.data(),t),t.delay&&typeof t.delay=="number"&&(t.delay={show:t.delay,hide:t.delay}),t},enter:function(t){var n=e.fn[this.type].defaults,r={},i;this._options&&e.each(this._options,function(e,t){n[e]!=t&&(r[e]=t)},this),i=e(t.currentTarget)[this.type](r).data(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)},leave:function(t){var n=e(t.currentTarget)[this.type](this._options).data(this.type);this.timeout&&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)},show:function(){var t,n,r,i,s,o,u=e.Event("show");if(this.hasContent()&&this.enabled){this.$element.trigger(u);if(u.isDefaultPrevented())return;t=this.tip(),this.setContent(),this.options.animation&&t.addClass("fade"),s=typeof this.options.placement=="function"?this.options.placement.call(this,t[0],this.$element[0]):this.options.placement,t.detach().css({top:0,left:0,display:"block"}),this.options.container?t.appendTo(this.options.container):t.insertAfter(this.$element),n=this.getPosition(),r=t[0].offsetWidth,i=t[0].offsetHeight;switch(s){case"bottom":o={top:n.top+n.height,left:n.left+n.width/2-r/2};break;case"top":o={top:n.top-i,left:n.left+n.width/2-r/2};break;case"left":o={top:n.top+n.height/2-i/2,left:n.left-r};break;case"right":o={top:n.top+n.height/2-i/2,left:n.left+n.width}}this.applyPlacement(o,s),this.$element.trigger("shown")}},applyPlacement:function(e,t){var n=this.tip(),r=n[0].offsetWidth,i=n[0].offsetHeight,s,o,u,a;n.offset(e).addClass(t).addClass("in"),s=n[0].offsetWidth,o=n[0].offsetHeight,t=="top"&&o!=i&&(e.top=e.top+i-o,a=!0),t=="bottom"||t=="top"?(u=0,e.left<0&&(u=e.left*-2,e.left=0,n.offset(e),s=n[0].offsetWidth,o=n[0].offsetHeight),this.replaceArrow(u-r+s,s,"left")):this.replaceArrow(o-i,o,"top"),a&&n.offset(e)},replaceArrow:function(e,t,n){this.arrow().css(n,e?50*(1-e/t)+"%":"")},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")},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");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"),this},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","")},hasContent:function(){return this.getTitle()},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())},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},tip:function(){return this.$tip=this.$tip||e(this.options.template)},arrow:function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},validate:function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},enable:function(){this.enabled=!0},disable:function(){this.enabled=!1},toggleEnabled:function(){this.enabled=!this.enabled},toggle:function(t){var n=t?e(t.currentTarget)[this.type](this._options).data(this.type):this;n.tip().hasClass("in")?n.hide():n.show()},destroy:function(){this.hide().$element.off("."+this.type).removeData(this.type)}};var n=e.fn.tooltip;e.fn.tooltip=function(n){return this.each(function(){var r=e(this),i=r.data("tooltip"),s=typeof n=="object"&&n;i||r.data("tooltip",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.tooltip.Constructor=t,e.fn.tooltip.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.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.prototype=e.extend({},e.fn.tooltip.Constructor.prototype,{constructor:t,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")},hasContent:function(){return this.getTitle()||this.getContent()},getContent:function(){var e,t=this.$element,n=this.options;return e=(typeof n.content=="function"?n.content.call(t[0]):n.content)||t.attr("data-content"),e},tip:function(){return this.$tip||(this.$tip=e(this.options.template)),this.$tip},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("popover"),s=typeof n=="object"&&n;i||r.data("popover",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.popover.Constructor=t,e.fn.popover.defaults=e.extend({},e.fn.tooltip.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.fn.popover.noConflict=function(){return e.fn.popover=n,this}}(window.jQuery),!function(e){"use strict";function t(t,n){var r=e.proxy(this.process,this),i=e(t).is("body")?e(window):e(t),s;this.options=e.extend({},e.fn.scrollspy.defaults,n),this.$scrollElement=i.on("scroll.scroll-spy.data-api",r),this.selector=(this.options.target||(s=e(t).attr("href"))&&s.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.$body=e("body"),this.refresh(),this.process()}t.prototype={constructor:t,refresh:function(){var t=this,n;this.offsets=e([]),this.targets=e([]),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])})},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])},activate:function(t){var n,r;this.activeTarget=t,e(this.selector).parent(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parent("li").addClass("active"),n.parent(".dropdown-menu").length&&(n=n.closest("li.dropdown").addClass("active")),n.trigger("activate")}};var n=e.fn.scrollspy;e.fn.scrollspy=function(n){return this.each(function(){var r=e(this),i=r.data("scrollspy"),s=typeof n=="object"&&n;i||r.data("scrollspy",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.scrollspy.Constructor=t,e.fn.scrollspy.defaults={offset:10},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={constructor:t,show:function(){var t=this.element,n=t.closest("ul:not(.dropdown-menu)"),r=t.attr("data-target"),i,s,o;r||(r=t.attr("href"),r=r&&r.replace(/.*(?=#[^\s]*$)/,""));if(t.parent("li").hasClass("active"))return;i=n.find(".active:last a")[0],o=e.Event("show",{relatedTarget:i}),t.trigger(o);if(o.isDefaultPrevented())return;s=e(r),this.activate(t.parent("li"),n),this.activate(s,s.parent(),function(){t.trigger({type:"shown",relatedTarget:i})})},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("tab");i||r.data("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.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(t,n){this.$element=e(t),this.options=e.extend({},e.fn.typeahead.defaults,n),this.matcher=this.options.matcher||this.matcher,this.sorter=this.options.sorter||this.sorter,this.highlighter=this.options.highlighter||this.highlighter,this.updater=this.options.updater||this.updater,this.source=this.options.source,this.$menu=e(this.options.menu),this.shown=!1,this.listen()};t.prototype={constructor:t,select:function(){var e=this.$menu.find(".active").attr("data-value");return this.$element.val(this.updater(e)).change(),this.hide()},updater:function(e){return e},show:function(){var t=e.extend({},this.$element.position(),{height:this.$element[0].offsetHeight});return this.$menu.insertAfter(this.$element).css({top:t.top+t.height,left:t.left}).show(),this.shown=!0,this},hide:function(){return this.$menu.hide(),this.shown=!1,this},lookup:function(t){var n;return this.query=this.$element.val(),!this.query||this.query.length<this.options.minLength?this.shown?this.hide():this:(n=e.isFunction(this.source)?this.source(this.query,e.proxy(this.process,this)):this.source,n?this.process(n):this)},process:function(t){var n=this;return t=e.grep(t,function(e){return n.matcher(e)}),t=this.sorter(t),t.length?this.render(t.slice(0,this.options.items)).show():this.shown?this.hide():this},matcher:function(e){return~e.toLowerCase().indexOf(this.query.toLowerCase())},sorter:function(e){var t=[],n=[],r=[],i;while(i=e.shift())i.toLowerCase().indexOf(this.query.toLowerCase())?~i.indexOf(this.query)?n.push(i):r.push(i):t.push(i);return t.concat(n,r)},highlighter:function(e){var t=this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&");return e.replace(new RegExp("("+t+")","ig"),function(e,t){return"<strong>"+t+"</strong>"})},render:function(t){var n=this;return t=e(t).map(function(t,r){return t=e(n.options.item).attr("data-value",r),t.find("a").html(n.highlighter(r)),t[0]}),t.first().addClass("active"),this.$menu.html(t),this},next:function(t){var n=this.$menu.find(".active").removeClass("active"),r=n.next();r.length||(r=e(this.$menu.find("li")[0])),r.addClass("active")},prev:function(e){var t=this.$menu.find(".active").removeClass("active"),n=t.prev();n.length||(n=this.$menu.find("li").last()),n.addClass("active")},listen:function(){this.$element.on("focus",e.proxy(this.focus,this)).on("blur",e.proxy(this.blur,this)).on("keypress",e.proxy(this.keypress,this)).on("keyup",e.proxy(this.keyup,this)),this.eventSupported("keydown")&&this.$element.on("keydown",e.proxy(this.keydown,this)),this.$menu.on("click",e.proxy(this.click,this)).on("mouseenter","li",e.proxy(this.mouseenter,this)).on("mouseleave","li",e.proxy(this.mouseleave,this))},eventSupported:function(e){var t=e in this.$element;return t||(this.$element.setAttribute(e,"return;"),t=typeof this.$element[e]=="function"),t},move:function(e){if(!this.shown)return;switch(e.keyCode){case 9:case 13:case 27:e.preventDefault();break;case 38:e.preventDefault(),this.prev();break;case 40:e.preventDefault(),this.next()}e.stopPropagation()},keydown:function(t){this.suppressKeyPressRepeat=~e.inArray(t.keyCode,[40,38,9,13,27]),this.move(t)},keypress:function(e){if(this.suppressKeyPressRepeat)return;this.move(e)},keyup:function(e){switch(e.keyCode){case 40:case 38:case 16:case 17:case 18:break;case 9:case 13:if(!this.shown)return;this.select();break;case 27:if(!this.shown)return;this.hide();break;default:this.lookup()}e.stopPropagation(),e.preventDefault()},focus:function(e){this.focused=!0},blur:function(e){this.focused=!1,!this.mousedover&&this.shown&&this.hide()},click:function(e){e.stopPropagation(),e.preventDefault(),this.select(),this.$element.focus()},mouseenter:function(t){this.mousedover=!0,this.$menu.find(".active").removeClass("active"),e(t.currentTarget).addClass("active")},mouseleave:function(e){this.mousedover=!1,!this.focused&&this.shown&&this.hide()}};var n=e.fn.typeahead;e.fn.typeahead=function(n){return this.each(function(){var r=e(this),i=r.data("typeahead"),s=typeof n=="object"&&n;i||r.data("typeahead",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.typeahead.defaults={source:[],items:8,menu:'<ul class="typeahead dropdown-menu"></ul>',item:'<li><a href="#"></a></li>',minLength:1},e.fn.typeahead.Constructor=t,e.fn.typeahead.noConflict=function(){return e.fn.typeahead=n,this},e(document).on("focus.typeahead.data-api",'[data-provide="typeahead"]',function(t){var n=e(this);if(n.data("typeahead"))return;n.typeahead(n.data())})}(window.jQuery),!function(e){"use strict";var t=function(t,n){this.options=e.extend({},e.fn.affix.defaults,n),this.$window=e(window).on("scroll.affix.data-api",e.proxy(this.checkPosition,this)).on("click.affix.data-api",e.proxy(function(){setTimeout(e.proxy(this.checkPosition,this),1)},this)),this.$element=e(t),this.checkPosition()};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.bottom,o=i.top,u="affix affix-top affix-bottom",a;typeof i!="object"&&(s=o=i),typeof o=="function"&&(o=i.top()),typeof s=="function"&&(s=i.bottom()),a=this.unpin!=null&&n+this.unpin<=r.top?!1:s!=null&&r.top+this.$element.height()>=t-s?"bottom":o!=null&&n<=o?"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("affix"),s=typeof n=="object"&&n;i||r.data("affix",i=new t(this,s)),typeof n=="string"&&i[n]()})},e.fn.affix.Constructor=t,e.fn.affix.defaults={offset:0},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(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();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 diff --git a/docs/assets/js/google-code-prettify/prettify.css b/docs/assets/js/google-code-prettify/prettify.css deleted file mode 100644 index d437aff62bbbaabb783fa7acd89c9850287f1f6a..0000000000000000000000000000000000000000 --- a/docs/assets/js/google-code-prettify/prettify.css +++ /dev/null @@ -1,30 +0,0 @@ -.com { color: #93a1a1; } -.lit { color: #195f91; } -.pun, .opn, .clo { color: #93a1a1; } -.fun { color: #dc322f; } -.str, .atv { color: #D14; } -.kwd, .prettyprint .tag { color: #1e347b; } -.typ, .atn, .dec, .var { color: teal; } -.pln { color: #48484c; } - -.prettyprint { - padding: 8px; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} -.prettyprint.linenums { - -webkit-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; - -moz-box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; - box-shadow: inset 40px 0 0 #fbfbfc, inset 41px 0 0 #ececf0; -} - -/* Specify class=linenums on a pre to get line numbering */ -ol.linenums { - margin: 0 0 0 33px; /* IE indents via margin-left */ -} -ol.linenums li { - padding-left: 12px; - color: #bebec5; - line-height: 20px; - text-shadow: 0 1px 0 #fff; -} \ No newline at end of file diff --git a/docs/assets/js/google-code-prettify/prettify.js b/docs/assets/js/google-code-prettify/prettify.js deleted file mode 100644 index eef5ad7e6a07676b3919146d583d1c190bf1e163..0000000000000000000000000000000000000000 --- a/docs/assets/js/google-code-prettify/prettify.js +++ /dev/null @@ -1,28 +0,0 @@ -var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; -(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= -[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c<i;++c){var j=f[c];if(/\\[bdsw]/i.test(j))a.push(j);else{var j=m(j),d;c+2<i&&"-"===f[c+1]?(d=m(f[c+2]),c+=2):d=j;b.push([j,d]);d<65||j>122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;c<b.length;++c)i=b[c],i[0]<=j[1]+1?j[1]=Math.max(j[1],i[1]):f.push(j=i);b=["["];o&&b.push("^");b.push.apply(b,a);for(c=0;c< -f.length;++c)i=f[c],b.push(e(i[0])),i[1]>i[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c<b;++c){var j=f[c];j==="("?++i:"\\"===j.charAt(0)&&(j=+j.substring(1))&&j<=i&&(d[j]=-1)}for(c=1;c<d.length;++c)-1===d[c]&&(d[c]=++t);for(i=c=0;c<b;++c)j=f[c],j==="("?(++i,d[i]===void 0&&(f[c]="(?:")):"\\"===j.charAt(0)&& -(j=+j.substring(1))&&j<=i&&(f[c]="\\"+d[i]);for(i=c=0;c<b;++c)"^"===f[c]&&"^"!==f[c+1]&&(f[c]="");if(a.ignoreCase&&s)for(c=0;c<b;++c)j=f[c],a=j.charAt(0),j.length>=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p<d;++p){var g=a[p];if(g.ignoreCase)l=!0;else if(/[a-z]/i.test(g.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){s=!0;l=!1;break}}for(var r= -{b:8,t:9,n:10,v:11,f:12,r:13},n=[],p=0,d=a.length;p<d;++p){g=a[p];if(g.global||g.multiline)throw Error(""+g);n.push("(?:"+y(g)+")")}return RegExp(n.join("|"),l?"gi":"g")}function M(a){function m(a){switch(a.nodeType){case 1:if(e.test(a.className))break;for(var g=a.firstChild;g;g=g.nextSibling)m(g);g=a.nodeName;if("BR"===g||"LI"===g)h[s]="\n",t[s<<1]=y++,t[s++<<1|1]=a;break;case 3:case 4:g=a.nodeValue,g.length&&(g=p?g.replace(/\r\n?/g,"\n"):g.replace(/[\t\n\r ]+/g," "),h[s]=g,t[s<<1]=y,y+=g.length, -t[s++<<1|1]=a)}}var e=/(?:^|\s)nocode(?:\s|$)/,h=[],y=0,t=[],s=0,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=document.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);m(a);return{a:h.join("").replace(/\n$/,""),c:t}}function B(a,m,e,h){m&&(a={a:m,d:a},e(a),h.push.apply(h,a.e))}function x(a,m){function e(a){for(var l=a.d,p=[l,"pln"],d=0,g=a.a.match(y)||[],r={},n=0,z=g.length;n<z;++n){var f=g[n],b=r[f],o=void 0,c;if(typeof b=== -"string")c=!1;else{var i=h[f.charAt(0)];if(i)o=f.match(i[1]),b=i[0];else{for(c=0;c<t;++c)if(i=m[c],o=f.match(i[1])){b=i[0];break}o||(b="pln")}if((c=b.length>=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), -l=[],p={},d=0,g=e.length;d<g;++d){var r=e[d],n=r[3];if(n)for(var k=n.length;--k>=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, -q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, -q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, -"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), -a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} -for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g<d.length;++g)e(d[g]);m===(m|0)&&d[0].setAttribute("value", -m);var r=s.createElement("OL");r.className="linenums";for(var n=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}function k(a,m){for(var e=m.length;--e>=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";return A[a]}function E(a){var m= -a.g;try{var e=M(a.h),h=e.a;a.a=h;a.c=e.c;a.d=0;C(m,h)(a);var k=/\bMSIE\b/.test(navigator.userAgent),m=/\n/g,t=a.a,s=t.length,e=0,l=a.c,p=l.length,h=0,d=a.e,g=d.length,a=0;d[g]=s;var r,n;for(n=r=0;n<g;)d[n]!==d[n+2]?(d[r++]=d[n++],d[r++]=d[n++]):n+=2;g=r;for(n=r=0;n<g;){for(var z=d[n],f=d[n+1],b=n+2;b+2<=g&&d[b+1]===f;)b+=2;d[r++]=z;d[r++]=f;n=b}for(d.length=r;h<p;){var o=l[h+2]||s,c=d[a+2]||s,b=Math.min(o,c),i=l[h+1],j;if(i.nodeType!==1&&(j=t.substring(e,b))){k&&(j=j.replace(m,"\r"));i.nodeValue= -j;var u=i.ownerDocument,v=u.createElement("SPAN");v.className=d[a+1];var x=i.parentNode;x.replaceChild(v,i);v.appendChild(i);e<o&&(l[h+1]=i=u.createTextNode(t.substring(b,o)),x.insertBefore(i,v.nextSibling))}e=b;e>=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], -"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], -H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], -J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ -I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), -["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", -/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), -["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", -hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p<h.length&&l.now()<e;p++){var n=h[p],k=n.className;if(k.indexOf("prettyprint")>=0){var k=k.match(g),f,b;if(b= -!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p<h.length?setTimeout(m, -250):a&&a()}for(var e=[document.getElementsByTagName("pre"),document.getElementsByTagName("code"),document.getElementsByTagName("xmp")],h=[],k=0;k<e.length;++k)for(var t=0,s=e[k].length;t<s;++t)h.push(e[k][t]);var e=q,l=Date;l.now||(l={now:function(){return+new Date}});var p=0,d,g=/\blang(?:uage)?-([\w.]+)(?!\S)/;m()};window.PR={createSimpleLexer:x,registerLangHandler:k,sourceDecorator:u,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit", -PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ"}})(); diff --git a/docs/assets/js/holder/holder.js b/docs/assets/js/holder/holder.js index 9c36d4281d2fcec5527c7f2bf3a61aeb6512a1b5..f717054c3d18028c8a8be8bfa56241dc8c18adad 100755 --- a/docs/assets/js/holder/holder.js +++ b/docs/assets/js/holder/holder.js @@ -1,6 +1,6 @@ /* -Holder - 1.9 - client side image placeholders +Holder - 2.0 - client side image placeholders (c) 2012-2013 Ivan Malopinsky / http://imsky.co Provided under the Apache 2.0 License: http://www.apache.org/licenses/LICENSE-2.0 @@ -41,19 +41,22 @@ if (!Object.prototype.hasOwnProperty) } function text_size(width, height, template) { - var dimension_arr = [height, width].sort(); - var maxFactor = Math.round(dimension_arr[1] / 16), - minFactor = Math.round(dimension_arr[0] / 16); - var text_height = Math.max(template.size, maxFactor); + height = parseInt(height,10); + width = parseInt(width,10); + var bigSide = Math.max(height, width) + var smallSide = Math.min(height, width) + var scale = 1 / 12; + var newHeight = Math.min(smallSide * 0.75, 0.75 * bigSide * scale); return { - height: text_height + height: Math.round(Math.max(template.size, newHeight)) } } function draw(ctx, dimensions, template, ratio) { var ts = text_size(dimensions.width, dimensions.height, template); var text_height = ts.height; - var width = dimensions.width * ratio, height = dimensions.height * ratio; + var width = dimensions.width * ratio, + height = dimensions.height * ratio; var font = template.font ? template.font : "sans-serif"; canvas.width = width; canvas.height = height; @@ -62,13 +65,14 @@ function draw(ctx, dimensions, template, ratio) { ctx.fillStyle = template.background; ctx.fillRect(0, 0, width, height); ctx.fillStyle = template.foreground; - ctx.font = "bold " + text_height + "px "+font; - var text = template.text ? template.text : (dimensions.width + "x" + dimensions.height); - if (ctx.measureText(text).width / width > 1) { - text_height = template.size / (ctx.measureText(text).width / width); + ctx.font = "bold " + text_height + "px " + font; + var text = template.text ? template.text : (Math.floor(dimensions.width) + "x" + Math.floor(dimensions.height)); + var text_width = ctx.measureText(text).width; + if (text_width / width >= 0.75) { + text_height = Math.floor(text_height * 0.75 * (width/text_width)); } //Resetting font size if necessary - ctx.font = "bold " + (text_height * ratio) + "px "+font; + ctx.font = "bold " + (text_height * ratio) + "px " + font; ctx.fillText(text, (width / 2), (height / 2), width); return canvas.toDataURL("image/png"); } @@ -78,89 +82,71 @@ function render(mode, el, holder, src) { theme = holder.theme, text = holder.text ? decodeURIComponent(holder.text) : holder.text; var dimensions_caption = dimensions.width + "x" + dimensions.height; - theme = (text ? extend(theme, { text: text }) : theme); - theme = (holder.font ? extend(theme, {font: holder.font}) : theme); - - var ratio = 1; - if(window.devicePixelRatio && window.devicePixelRatio > 1){ - ratio = window.devicePixelRatio; - } - + theme = (text ? extend(theme, { + text: text + }) : theme); + theme = (holder.font ? extend(theme, { + font: holder.font + }) : theme); if (mode == "image") { el.setAttribute("data-src", src); el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); - - if(fallback || !holder.auto){ - el.style.width = dimensions.width + "px"; - el.style.height = dimensions.height + "px"; + if (fallback || !holder.auto) { + el.style.width = dimensions.width + "px"; + el.style.height = dimensions.height + "px"; } - if (fallback) { el.style.backgroundColor = theme.background; - - } - else{ + } else { el.setAttribute("src", draw(ctx, dimensions, theme, ratio)); } - } else { + } else if (mode == "background") { if (!fallback) { el.style.backgroundImage = "url(" + draw(ctx, dimensions, theme, ratio) + ")"; - el.style.backgroundSize = dimensions.width+"px "+dimensions.height+"px"; + el.style.backgroundSize = dimensions.width + "px " + dimensions.height + "px"; + } + } else if (mode == "fluid") { + el.setAttribute("data-src", src); + el.setAttribute("alt", text ? text : theme.text ? theme.text + " [" + dimensions_caption + "]" : dimensions_caption); + if (dimensions.height.substr(-1) == "%") { + el.style.height = dimensions.height + } else { + el.style.height = dimensions.height + "px" + } + if (dimensions.width.substr(-1) == "%") { + el.style.width = dimensions.width + } else { + el.style.width = dimensions.width + "px" + } + if (el.style.display == "inline" || el.style.display == "") { + el.style.display = "block"; + } + if (fallback) { + el.style.backgroundColor = theme.background; + } else { + el.holderData = holder; + fluid_images.push(el); + fluid_update(el); } } }; -function fluid(el, holder, src) { - var dimensions = holder.dimensions, - theme = holder.theme, - text = holder.text; - var dimensions_caption = dimensions.width + "x" + dimensions.height; - theme = (text ? extend(theme, { - text: text - }) : theme); - - var fluid = document.createElement("div"); - - fluid.style.backgroundColor = theme.background; - fluid.style.color = theme.foreground; - fluid.className = el.className + " holderjs-fluid"; - fluid.style.width = holder.dimensions.width + (holder.dimensions.width.indexOf("%")>0?"":"px"); - fluid.style.height = holder.dimensions.height + (holder.dimensions.height.indexOf("%")>0?"":"px"); - fluid.id = el.id; - - el.style.width=0; - el.style.height=0; - - if (theme.text) { - fluid.appendChild(document.createTextNode(theme.text)) +function fluid_update(element) { + var images; + if (element.nodeType == null) { + images = fluid_images; } else { - fluid.appendChild(document.createTextNode(dimensions_caption)) - fluid_images.push(fluid); - setTimeout(fluid_update, 0); + images = [element] } - - el.parentNode.insertBefore(fluid, el.nextSibling) - - if(window.jQuery){ - jQuery(function($){ - $(el).on("load", function(){ - el.style.width = fluid.style.width; - el.style.height = fluid.style.height; - $(el).show(); - $(fluid).remove(); - }); - }) - } -} - -function fluid_update() { - for (i in fluid_images) { - if(!fluid_images.hasOwnProperty(i)) continue; - var el = fluid_images[i], - label = el.firstChild; - - el.style.lineHeight = el.offsetHeight+"px"; - label.data = el.offsetWidth + "x" + el.offsetHeight; + for (i in images) { + var el = images[i] + if (el.holderData) { + var holder = el.holderData; + el.setAttribute("src", draw(ctx, { + height: el.clientHeight, + width: el.clientWidth + }, holder.theme, ratio)); + } } } @@ -186,10 +172,9 @@ function parse_flags(flags, options) { ret.theme = options.themes[flag]; } else if (app.flags.text.match(flag)) { ret.text = app.flags.text.output(flag); - } else if(app.flags.font.match(flag)){ + } else if (app.flags.font.match(flag)) { ret.font = app.flags.font.output(flag); - } - else if(app.flags.auto.match(flag)){ + } else if (app.flags.auto.match(flag)) { ret.auto = true; } } @@ -198,6 +183,8 @@ function parse_flags(flags, options) { }; + + if (!canvas.getContext) { fallback = true; } else { @@ -210,6 +197,15 @@ if (!canvas.getContext) { } } +var dpr = 1, bsr = 1; + +if(!fallback){ + dpr = window.devicePixelRatio || 1, + bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; +} + +var ratio = dpr / bsr; + var fluid_images = []; var settings = { @@ -222,12 +218,12 @@ var settings = { foreground: "#aaa", size: 12 }, - "social": { + "social": { background: "#3a5a97", foreground: "#fff", size: 12 }, - "industrial": { + "industrial": { background: "#434A52", foreground: "#C2F200", size: 12 @@ -276,18 +272,18 @@ app.flags = { } }, font: { - regex: /font\:(.*)/, - output: function(val){ - return this.regex.exec(val)[1]; - } + regex: /font\:(.*)/, + output: function (val) { + return this.regex.exec(val)[1]; + } }, auto: { - regex: /^auto$/ + regex: /^auto$/ } } for (var flag in app.flags) { - if(!app.flags.hasOwnProperty(flag)) continue; + if (!app.flags.hasOwnProperty(flag)) continue; app.flags[flag].match = function (val) { return val.match(this.regex) } @@ -311,26 +307,24 @@ app.add_image = function (src, el) { }; app.run = function (o) { - var options = extend(settings, o), images = []; - - if(options.images instanceof window.NodeList){ - imageNodes = options.images; - } - else if(options.images instanceof window.Node){ - imageNodes = [options.images]; - } - else{ + var options = extend(settings, o), + images = [], imageNodes = [], bgnodes = []; + + if(typeof(options.images) == "string"){ imageNodes = selector(options.images); } - - if(options.elements instanceof window.NodeList){ - bgnodes = options.bgnodes; - } - else if(options.bgnodes instanceof window.Node){ - bgnodes = [options.bgnodes]; + else if (window.NodeList && options.images instanceof window.NodeList) { + imageNodes = options.images; + } else if (window.Node && options.images instanceof window.Node) { + imageNodes = [options.images]; } - else{ + + if(typeof(options.bgnodes) == "string"){ bgnodes = selector(options.bgnodes); + } else if (window.NodeList && options.elements instanceof window.NodeList) { + bgnodes = options.bgnodes; + } else if (window.Node && options.bgnodes instanceof window.Node) { + bgnodes = [options.bgnodes]; } preempted = true; @@ -338,19 +332,19 @@ app.run = function (o) { for (i = 0, l = imageNodes.length; i < l; i++) images.push(imageNodes[i]); var holdercss = document.getElementById("holderjs-style"); - - if(!holdercss){ - holdercss = document.createElement("style"); - holdercss.setAttribute("id", "holderjs-style"); - holdercss.type = "text/css"; - document.getElementsByTagName("head")[0].appendChild(holdercss); + if (!holdercss) { + holdercss = document.createElement("style"); + holdercss.setAttribute("id", "holderjs-style"); + holdercss.type = "text/css"; + document.getElementsByTagName("head")[0].appendChild(holdercss); } - - if(holdercss.styleSheet){ - holdercss.styleSheet += options.stylesheet; - } - else{ - holdercss.textContent+= options.stylesheet; + + if (!options.nocss) { + if (holdercss.styleSheet) { + holdercss.styleSheet.cssText += options.stylesheet; + } else { + holdercss.appendChild(document.createTextNode(options.stylesheet)); + } } var cssregex = new RegExp(options.domain + "\/(.*?)\"?\\)"); @@ -359,22 +353,44 @@ app.run = function (o) { var src = window.getComputedStyle(bgnodes[i], null) .getPropertyValue("background-image"); var flags = src.match(cssregex); + var bgsrc = bgnodes[i].getAttribute("data-background-src"); + if (flags) { var holder = parse_flags(flags[1].split("/"), options); if (holder) { render("background", bgnodes[i], holder, src); } } + else if(bgsrc != null){ + var holder = parse_flags(bgsrc.substr(bgsrc.lastIndexOf(options.domain) + options.domain.length + 1) + .split("/"), options); + if(holder){ + render("background", bgnodes[i], holder, src); + } + } } - for (var l = images.length, i = 0; i < l; i++) { - var src = images[i].getAttribute("src") || images[i].getAttribute("data-src"); - if (src != null && src.indexOf(options.domain) >= 0) { + for (l = images.length, i = 0; i < l; i++) { + + var attr_src = attr_data_src = src = null; + + try{ + attr_src = images[i].getAttribute("src"); + attr_datasrc = images[i].getAttribute("data-src"); + }catch(e){} + + if (attr_datasrc == null && !! attr_src && attr_src.indexOf(options.domain) >= 0) { + src = attr_src; + } else if ( !! attr_datasrc && attr_datasrc.indexOf(options.domain) >= 0) { + src = attr_datasrc; + } + + if (src) { var holder = parse_flags(src.substr(src.lastIndexOf(options.domain) + options.domain.length + 1) .split("/"), options); if (holder) { if (holder.fluid) { - fluid(images[i], holder, src); + render("fluid", images[i], holder, src) } else { render("image", images[i], holder, src); } @@ -394,8 +410,10 @@ contentLoaded(win, function () { preempted || app.run(); }); -if ( typeof define === "function" && define.amd ) { - define( "Holder", [], function () { return app; } ); +if (typeof define === "function" && define.amd) { + define("Holder", [], function () { + return app; + }); } -})(Holder, window); \ No newline at end of file +})(Holder, window); diff --git a/docs/assets/js/jquery.js b/docs/assets/js/jquery.js index 006e953102ded2db8e217e4507de3baa8bcc976d..32d50cb0ee999dca34fb7ffd99fee78432717b09 100644 --- a/docs/assets/js/jquery.js +++ b/docs/assets/js/jquery.js @@ -2,4 +2,4 @@ //@ sourceMappingURL=jquery.min.map */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) -}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); \ No newline at end of file +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); diff --git a/docs/assets/js/respond/respond.min.js b/docs/assets/js/respond/respond.min.js new file mode 100644 index 0000000000000000000000000000000000000000..56418a24584288246f0ce46d6e4d1df325da409b --- /dev/null +++ b/docs/assets/js/respond/respond.min.js @@ -0,0 +1,6 @@ +/*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */ +/*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */ +window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document); + +/*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */ +(function(a){"use strict";function x(){u(!0)}var b={};a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,b.mediaQueriesSupported;var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var a=m.shift();v(a.href,function(b){p(b,a.href,a.media),h[a.href]=!0,setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(min\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(max\-width:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(a){var b="clientWidth",h=d[b],k="CSS1Compat"===c.compatMode&&h||c.body[b]||h,m={},n=l[l.length-1],o=(new Date).getTime();if(a&&q&&i>o-q)return clearTimeout(r),r=setTimeout(u,i),void 0;q=o;for(var p in e)if(e.hasOwnProperty(p)){var v=e[p],w=v.minw,x=v.maxw,y=null===w,z=null===x,A="em";w&&(w=parseFloat(w)*(w.indexOf(A)>-1?t||s():1)),x&&(x=parseFloat(x)*(x.indexOf(A)>-1?t||s():1)),v.hasquery&&(y&&z||!(y||k>=w)||!(z||x>=k))||(m[v.media]||(m[v.media]=[]),m[v.media].push(f[v.rules]))}for(var B in g)g.hasOwnProperty(B)&&g[B]&&g[B].parentNode===j&&j.removeChild(g[B]);for(var C in m)if(m.hasOwnProperty(C)){var D=c.createElement("style"),E=m[C].join("\n");D.type="text/css",D.media=C,j.insertBefore(D,n.nextSibling),D.styleSheet?D.styleSheet.cssText=E:D.appendChild(c.createTextNode(E)),g.push(D)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)})(this); diff --git a/docs/base-css.html b/docs/base-css.html deleted file mode 100644 index d1ca3fb8b13a2cf9a90988bbb91039e06c937e47..0000000000000000000000000000000000000000 --- a/docs/base-css.html +++ /dev/null @@ -1,2215 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Base · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class="active"> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Base CSS</h1> - <p class="lead">Fundamental HTML elements styled and enhanced with extensible classes.</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#typography"><i class="icon-chevron-right"></i> Typography</a></li> - <li><a href="#code"><i class="icon-chevron-right"></i> Code</a></li> - <li><a href="#tables"><i class="icon-chevron-right"></i> Tables</a></li> - <li><a href="#forms"><i class="icon-chevron-right"></i> Forms</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> Buttons</a></li> - <li><a href="#images"><i class="icon-chevron-right"></i> Images</a></li> - <li><a href="#icons"><i class="icon-chevron-right"></i> Icons by Glyphicons</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Typography - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>Typography</h1> - </div> - - <h2 id="headings">Headings</h2> - <p>All HTML headings, <code><h1></code> through <code><h6></code> are available.</p> - <div class="bs-docs-example"> - <h1>h1. Heading 1</h1> - <h2>h2. Heading 2</h2> - <h3>h3. Heading 3</h3> - <h4>h4. Heading 4</h4> - <h5>h5. Heading 5</h5> - <h6>h6. Heading 6</h6> - </div> - - <h2 id="body-copy">Body copy</h2> - <p>Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>20px</strong>. This is applied to the <code><body></code> and all paragraphs. In addition, <code><p></code> (paragraphs) receive a bottom margin of half their line-height (10px by default).</p> - <div class="bs-docs-example"> - <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p> - <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p> - </div> - <pre class="prettyprint"><p>...</p></pre> - - <h3>Lead body copy</h3> - <p>Make a paragraph stand out by adding <code>.lead</code>.</p> - <div class="bs-docs-example"> - <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p> - </div> - <pre class="prettyprint"><p class="lead">...</p></pre> - - <h3>Built with Less</h3> - <p>The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@baseFontSize</code> and <code>@baseLineHeight</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.</p> - - - <hr class="bs-docs-separator"> - - - <h2 id="emphasis">Emphasis</h2> - <p>Make use of HTML's default emphasis tags with lightweight styles.</p> - - <h3><code><small></code></h3> - <p>For de-emphasizing inline or blocks of text, <small>use the small tag.</small></p> - <div class="bs-docs-example"> - <p><small>This line of text is meant to be treated as fine print.</small></p> - </div> -<pre class="prettyprint"> -<p> - <small>This line of text is meant to be treated as fine print.</small> -</p> -</pre> - - <h3>Bold</h3> - <p>For emphasizing a snippet of text with a heavier font-weight.</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <strong>rendered as bold text</strong>.</p> - </div> - <pre class="prettyprint"><strong>rendered as bold text</strong></pre> - - <h3>Italics</h3> - <p>For emphasizing a snippet of text with italics.</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <em>rendered as italicized text</em>.</p> - </div> - <pre class="prettyprint"><em>rendered as italicized text</em></pre> - - <p><span class="label label-info">Heads up!</span> 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> - - <h3>Alignment classes</h3> - <p>Easily realign text to components with text alignment classes.</p> - <div class="bs-docs-example"> - <p class="text-left">Left aligned text.</p> - <p class="text-center">Center aligned text.</p> - <p class="text-right">Right aligned text.</p> - </div> -<pre class="prettyprint linenums"> -<p class="text-left">Left aligned text.</p> -<p class="text-center">Center aligned text.</p> -<p class="text-right">Right aligned text.</p> -</pre> - - <h3>Emphasis classes</h3> - <p>Convey meaning through color with a handful of emphasis utility classes.</p> - <div class="bs-docs-example"> - <p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> - <p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> - <p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> - <p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> - <p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> - </div> -<pre class="prettyprint linenums"> -<p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> -<p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> -<p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> -<p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> -<p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2 id="abbreviations">Abbreviations</h2> - <p>Stylized implementation of HTML's <code><abbr></code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.</p> - - <h3><code><abbr></code></h3> - <p>For expanded text on long hover of an abbreviation, include the <code>title</code> attribute.</p> - <div class="bs-docs-example"> - <p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p> - </div> - <pre class="prettyprint"><abbr title="attribute">attr</abbr></pre> - - <h3><code><abbr class="initialism"></code></h3> - <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p> - <div class="bs-docs-example"> - <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.</p> - </div> - <pre class="prettyprint"><abbr title="HyperText Markup Language" class="initialism">HTML</abbr></pre> - - - <hr class="bs-docs-separator"> - - - <h2 id="addresses">Addresses</h2> - <p>Present contact information for the nearest ancestor or the entire body of work.</p> - - <h3><code><address></code></h3> - <p>Preserve formatting by ending all lines with <code><br></code>.</p> - <div class="bs-docs-example"> - <address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 - </address> - <address> - <strong>Full Name</strong><br> - <a href="mailto:#">first.last@example.com</a> - </address> - </div> -<pre class="prettyprint linenums"> -<address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 -</address> - -<address> - <strong>Full Name</strong><br> - <a href="mailto:#">first.last@example.com</a> -</address> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2 id="blockquotes">Blockquotes</h2> - <p>For quoting blocks of content from another source within your document.</p> - - <h3>Default blockquote</h3> - <p>Wrap <code><blockquote></code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code><p></code>.</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> -</blockquote> -</pre> - - <h3>Blockquote options</h3> - <p>Style and content changes for simple variations on a standard blockquote.</p> - - <h4>Naming a source</h4> - <p>Add <code><small></code> tag for identifying the source. Wrap the name of the source work in <code><cite></code>.</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>Someone famous in <cite title="Source Title">Source Title</cite></small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>Someone famous <cite title="Source Title">Source Title</cite></small> -</blockquote> -</pre> - - <h4>Alternate displays</h4> - <p>Use <code>.pull-right</code> for a floated, right-aligned blockquote.</p> - <div class="bs-docs-example" style="overflow: hidden;"> - <blockquote class="pull-right"> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>Someone famous in <cite title="Source Title">Source Title</cite></small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote class="pull-right"> - ... -</blockquote> -</pre> - - - <hr class="bs-docs-separator"> - - - <!-- Lists --> - <h2 id="lists">Lists</h2> - - <h3>Unordered</h3> - <p>A list of items in which the order does <em>not</em> explicitly matter.</p> - <div class="bs-docs-example"> - <ul> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul> - <li>...</li> -</ul> -</pre> - - <h3>Ordered</h3> - <p>A list of items in which the order <em>does</em> explicitly matter.</p> - <div class="bs-docs-example"> - <ol> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit</li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ol> - </div> -<pre class="prettyprint linenums"> -<ol> - <li>...</li> -</ol> -</pre> - - <h3>Unstyled</h3> - <p>Remove the default <code>list-style</code> and left padding on list items (immediate children only).</p> - <div class="bs-docs-example"> - <ul class="unstyled"> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="unstyled"> - <li>...</li> -</ul> -</pre> - - <h3>Inline</h3> - <p>Place all list items on a single line with <code>inline-block</code> and some light padding.</p> - <div class="bs-docs-example"> - <ul class="inline"> - <li>Lorem ipsum</li> - <li>Phasellus iaculis</li> - <li>Nulla volutpat</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="inline"> - <li>...</li> -</ul> -</pre> - - <h3>Description</h3> - <p>A list of terms with their associated descriptions.</p> - <div class="bs-docs-example"> - <dl> - <dt>Description lists</dt> - <dd>A description list is perfect for defining terms.</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - - <h4>Horizontal description</h4> - <p>Make terms and descriptions in <code><dl></code> line up side-by-side.</p> - <div class="bs-docs-example"> - <dl class="dl-horizontal"> - <dt>Description lists</dt> - <dd>A description list is perfect for defining terms.</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - <dt>Felis euismod semper eget lacinia</dt> - <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl class="dl-horizontal"> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - <p> - <span class="label label-info">Heads up!</span> - 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> - </section> - - - - <!-- Code - ================================================== --> - <section id="code"> - <div class="page-header"> - <h1>Code</h1> - </div> - - <h2>Inline</h2> - <p>Wrap inline snippets of code with <code><code></code>.</p> -<div class="bs-docs-example"> - For example, <code><section></code> should be wrapped as inline. -</div> -<pre class="prettyprint linenums"> -For example, <code>&lt;section&gt;</code> should be wrapped as inline. -</pre> - - <h2>Basic block</h2> - <p>Use <code><pre></code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p> -<div class="bs-docs-example"> - <pre><p>Sample text here...</p></pre> -</div> -<pre class="prettyprint linenums" style="margin-bottom: 9px;"> -<pre> - &lt;p&gt;Sample text here...&lt;/p&gt; -</pre> -</pre> - <p><span class="label label-info">Heads up!</span> Be sure to keep code within <code><pre></code> tags as close to the left as possible; it will render all tabs.</p> - <p>You may optionally add the <code>.pre-scrollable</code> class which will set a max-height of 350px and provide a y-axis scrollbar.</p> - </section> - - - - <!-- Tables - ================================================== --> - <section id="tables"> - <div class="page-header"> - <h1>Tables</h1> - </div> - - <h2>Default styles</h2> - <p>For basic styling—light padding and only horizontal dividers—add the base class <code>.table</code> to any <code><table></code>.</p> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums"> -<table class="table"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Optional classes</h2> - <p>Add any of the following classes to the <code>.table</code> base class.</p> - - <h3><code>.table-striped</code></h3> - <p>Adds zebra-striping to any table row within the <code><tbody></code> via the <code>:nth-child</code> CSS selector (not available in IE7-8).</p> - <div class="bs-docs-example"> - <table class="table table-striped"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-striped"> - … -</table> -</pre> - - <h3><code>.table-bordered</code></h3> - <p>Add borders and rounded corners to the table.</p> - <div class="bs-docs-example"> - <table class="table table-bordered"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td rowspan="2">1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>Mark</td> - <td>Otto</td> - <td>@TwBootstrap</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums"> -<table class="table table-bordered"> - … -</table> -</pre> - - <h3><code>.table-hover</code></h3> - <p>Enable a hover state on table rows within a <code><tbody></code>.</p> - <div class="bs-docs-example"> - <table class="table table-hover"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-hover"> - … -</table> -</pre> - - <h3><code>.table-condensed</code></h3> - <p>Makes tables more compact by cutting cell padding in half.</p> - <div class="bs-docs-example"> - <table class="table table-condensed"> - <thead> - <tr> - <th>#</th> - <th>First Name</th> - <th>Last Name</th> - <th>Username</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-condensed"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Optional row classes</h2> - <p>Use contextual classes to color table rows.</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>Class</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code>.success</code> - </td> - <td>Indicates a successful or positive action.</td> - </tr> - <tr> - <td> - <code>.error</code> - </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> - </tr> - <tr> - <td> - <code>.info</code> - </td> - <td>Used as an alternative to the default styles.</td> - </tr> - </tbody> - </table> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>Product</th> - <th>Payment Taken</th> - <th>Status</th> - </tr> - </thead> - <tbody> - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> - <tr class="error"> - <td>2</td> - <td>TB - Monthly</td> - <td>02/04/2012</td> - <td>Declined</td> - </tr> - <tr class="warning"> - <td>3</td> - <td>TB - Monthly</td> - <td>03/04/2012</td> - <td>Pending</td> - </tr> - <tr class="info"> - <td>4</td> - <td>TB - Monthly</td> - <td>04/04/2012</td> - <td>Call in to confirm</td> - </tr> - </tbody> - </table> - </div> -<pre class="prettyprint linenums"> -... - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> -... -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Supported table markup</h2> - <p>List of supported table HTML elements and how they should be used.</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>Tag</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code><table></code> - </td> - <td> - Wrapping element for displaying data in a tabular format - </td> - </tr> - <tr> - <td> - <code><thead></code> - </td> - <td> - Container element for table header rows (<code><tr></code>) to label table columns - </td> - </tr> - <tr> - <td> - <code><tbody></code> - </td> - <td> - Container element for table rows (<code><tr></code>) in the body of the table - </td> - </tr> - <tr> - <td> - <code><tr></code> - </td> - <td> - Container element for a set of table cells (<code><td></code> or <code><th></code>) that appears on a single row - </td> - </tr> - <tr> - <td> - <code><td></code> - </td> - <td> - Default table cell - </td> - </tr> - <tr> - <td> - <code><th></code> - </td> - <td> - Special table cell for column (or row, depending on scope and placement) labels - </td> - </tr> - <tr> - <td> - <code><caption></code> - </td> - <td> - Description or summary of what the table holds, especially useful for screen readers - </td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -<table> - <caption>...</caption> - <thead> - <tr> - <th>...</th> - <th>...</th> - </tr> - </thead> - <tbody> - <tr> - <td>...</td> - <td>...</td> - </tr> - </tbody> -</table> -</pre> - - </section> - - - - <!-- Forms - ================================================== --> - <section id="forms"> - <div class="page-header"> - <h1>Forms</h1> - </div> - - <h2>Default styles</h2> - <p>Individual form controls receive styling, but without any required base class on the <code><form></code> or large changes in markup. Results in stacked, left-aligned labels on top of form controls.</p> - <form class="bs-docs-example"> - <fieldset> - <legend>Legend</legend> - <label>Label name</label> - <input type="text" placeholder="Type something…"> - <span class="help-block">Example block-level help text here.</span> - <label class="checkbox"> - <input type="checkbox"> Check me out - </label> - <button type="submit" class="btn">Submit</button> - </fieldset> - </form> -<pre class="prettyprint linenums"> -<form> - <fieldset> - <legend>Legend</legend> - <label>Label name</label> - <input type="text" placeholder="Type something…"> - <span class="help-block">Example block-level help text here.</span> - <label class="checkbox"> - <input type="checkbox"> Check me out - </label> - <button type="submit" class="btn">Submit</button> - </fieldset> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Optional layouts</h2> - <p>Included with Bootstrap are three optional form layouts for common use cases.</p> - - <h3>Search form</h3> - <p>Add <code>.form-search</code> to the form and <code>.search-query</code> to the <code><input></code> for an extra-rounded text input.</p> - <form class="bs-docs-example form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">Search</button> - </form> -<pre class="prettyprint linenums"> -<form class="form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">Search</button> -</form> -</pre> - - <h3>Inline form</h3> - <p>Add <code>.form-inline</code> for left-aligned labels and inline-block controls for a compact layout.</p> - <form class="bs-docs-example form-inline"> - <input type="text" class="input-small" placeholder="Email"> - <input type="password" class="input-small" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </form> -<pre class="prettyprint linenums"> -<form class="form-inline"> - <input type="text" class="input-small" placeholder="Email"> - <input type="password" class="input-small" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> -</form> -</pre> - - <h3>Horizontal form</h3> - <p>Right align labels and float them to the left to make them appear on the same line as controls. Requires the most markup changes from a default form:</p> - <ul> - <li>Add <code>.form-horizontal</code> to the form</li> - <li>Wrap labels and controls in <code>.control-group</code></li> - <li>Add <code>.control-label</code> to the label</li> - <li>Wrap any associated controls in <code>.controls</code> for proper alignment</li> - </ul> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">Email</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="Email"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">Password</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="Password"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form class="form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">Email</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="Email"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">Password</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="Password"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </div> - </div> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Supported form controls</h2> - <p>Examples of standard form controls supported in an example form layout.</p> - - <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> - <p>Requires the use of a specified <code>type</code> at all times.</p> - <form class="bs-docs-example form-inline"> - <input type="text" placeholder="Text input"> - </form> -<pre class="prettyprint linenums"> -<input type="text" placeholder="Text input"> -</pre> - - <h3>Textarea</h3> - <p>Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.</p> - <form class="bs-docs-example form-inline"> - <textarea rows="3"></textarea> - </form> -<pre class="prettyprint linenums"> -<textarea rows="3"></textarea> -</pre> - - <h3>Checkboxes and radios</h3> - <p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p> - <h4>Default (stacked)</h4> - <form class="bs-docs-example"> - <label class="checkbox"> - <input type="checkbox" value=""> - Option one is this and that—be sure to include why it's great - </label> - <br> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - Option one is this and that—be sure to include why it's great - </label> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - Option two can be something else and selecting it will deselect option one - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox"> - <input type="checkbox" value=""> - Option one is this and that—be sure to include why it's great -</label> - -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - Option one is this and that—be sure to include why it's great -</label> -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - Option two can be something else and selecting it will deselect option one -</label> -</pre> - - <h4>Inline checkboxes</h4> - <p>Add the <code>.inline</code> class to a series of checkboxes or radios for controls appear on the same line.</p> - <form class="bs-docs-example"> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 -</label> -</pre> - - <h3>Selects</h3> - <p>Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.</p> - <form class="bs-docs-example"> - <select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <br> - <select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </form> -<pre class="prettyprint linenums"> -<select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> - -<select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Extending form controls</h2> - <p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p> - - <h3>Prepended and appended inputs</h3> - <p>Add text or buttons before or after any text-based input. Do note that <code>select</code> elements are not supported here.</p> - - <h4>Default options</h4> - <p>Wrap an <code>.add-on</code> and an <code>input</code> with one of two classes to prepend or append text to an input.</p> - <form class="bs-docs-example"> - <div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="Username"> - </div> - <br> - <div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="Username"> -</div> -<div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>Combined</h4> - <p>Use both classes and two instances of <code>.add-on</code> to prepend and append an input.</p> - <form class="bs-docs-example form-inline"> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>Buttons instead of text</h4> - <p>Instead of a <code><span></code> with text, use a <code>.btn</code> to attach a button (or two) to an input.</p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> -</div> -</pre> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> -</div> -</pre> - - <h4>Button dropdowns</h4> - <p></p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="prependedDropdownButton" type="text"> - </div><!-- /input-prepend --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="prependedDropdownButton" type="text"> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-prepend input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - Action - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <h4>Segmented dropdown groups</h4> - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form> - <div class="input-prepend"> - <div class="btn-group">...</div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group">...</div> - </div> -</form> -</pre> - - <h4>Search form</h4> - <form class="bs-docs-example form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">Search</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">Search</button> - <input type="text" class="span2 search-query"> - </div> - </form> -<pre class="prettyprint linenums"> -<form class="form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">Search</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">Search</button> - <input type="text" class="span2 search-query"> - </div> -</form> -</pre> - - <h3>Control sizing</h3> - <p>Use relative sizing classes like <code>.input-large</code> or match your inputs to the grid column sizes using <code>.span*</code> classes.</p> - - <h4>Block level inputs</h4> - <p>Make any <code><input></code> or <code><textarea></code> element behave like a block level element.</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="input-block-level" type="text" placeholder=".input-block-level"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-block-level" type="text" placeholder=".input-block-level"> -</pre> - - <h4>Relative sizing</h4> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="input-mini" type="text" placeholder=".input-mini"> - <input class="input-small" type="text" placeholder=".input-small"> - <input class="input-medium" type="text" placeholder=".input-medium"> - <input class="input-large" type="text" placeholder=".input-large"> - <input class="input-xlarge" type="text" placeholder=".input-xlarge"> - <input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-mini" type="text" placeholder=".input-mini"> -<input class="input-small" type="text" placeholder=".input-small"> -<input class="input-medium" type="text" placeholder=".input-medium"> -<input class="input-large" type="text" placeholder=".input-large"> -<input class="input-xlarge" type="text" placeholder=".input-xlarge"> -<input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> -</pre> - <p> - <span class="label label-info">Heads up!</span> In future versions, we'll be altering the use of these relative input classes to match our button sizes. For example, <code>.input-large</code> will increase the padding and font-size of an input. - </p> - - <h4>Grid sizing</h4> - <p>Use <code>.span1</code> to <code>.span12</code> for inputs that match the same sizes of the grid columns.</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - <select class="span1"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span2"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span3"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="span1" type="text" placeholder=".span1"> -<input class="span2" type="text" placeholder=".span2"> -<input class="span3" type="text" placeholder=".span3"> -<select class="span1"> - ... -</select> -<select class="span2"> - ... -</select> -<select class="span3"> - ... -</select> -</pre> - - <p>For multiple grid inputs per line, <strong>use the <code>.controls-row</code> modifier class for proper spacing</strong>. It floats the inputs to collapse white-space, sets the proper margins, and clears the float.</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="span5" type="text" placeholder=".span5"> - </div> - <div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> - </div> - <div class="controls controls-row"> - <input class="span3" type="text" placeholder=".span3"> - <input class="span2" type="text" placeholder=".span2"> - </div> - <div class="controls controls-row"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - </div> - <div class="controls controls-row"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span4" type="text" placeholder=".span4"> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="controls"> - <input class="span5" type="text" placeholder=".span5"> -</div> -<div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> -</div> -... -</pre> - - <h3>Uneditable inputs</h3> - <p>Present data in a form that's not editable without using actual form markup.</p> - <form class="bs-docs-example"> - <span class="input-xlarge uneditable-input">Some value here</span> - </form> -<pre class="prettyprint linenums"> -<span class="input-xlarge uneditable-input">Some value here</span> -</pre> - - <h3>Form actions</h3> - <p>End a form with a group of actions (buttons). When placed within a <code>.form-actions</code>, the buttons will automatically indent to line up with the form controls.</p> - <form class="bs-docs-example"> - <div class="form-actions"> - <button type="submit" class="btn btn-primary">Save changes</button> - <button type="button" class="btn">Cancel</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="form-actions"> - <button type="submit" class="btn btn-primary">Save changes</button> - <button type="button" class="btn">Cancel</button> -</div> -</pre> - - <h3>Help text</h3> - <p>Inline and block level support for help text that appears around form controls.</p> - <h4>Inline help</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> <span class="help-inline">Inline help text</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-inline">Inline help text</span> -</pre> - - <h4>Block help</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> - <span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Form control states</h2> - <p>Provide feedback to users or visitors with basic feedback states on form controls and labels.</p> - - <h3>Input focus</h3> - <p>We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge focused" id="focusedInput" type="text" value="This is focused..."> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="focusedInput" type="text" value="This is focused..."> -</pre> - - <h3>Invalid inputs</h3> - <p>Style inputs via default browser functionality with <code>:invalid</code>. Specify a <code>type</code>, add the <code>required</code> attribute if the field is not optional, and (if applicable) specify a <code>pattern</code>.</p> - <p>This is not available in versions of Internet Explorer 7-9 due to lack of support for CSS pseudo selectors.</p> - <form class="bs-docs-example form-inline"> - <input class="span3" type="email" placeholder="test@example.com" required> - </form> -<pre class="prettyprint linenums"> -<input class="span3" type="email" required> -</pre> - - <h3>Disabled inputs</h3> - <p>Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge" id="disabledInput" type="text" placeholder="Disabled input here…" disabled> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="disabledInput" type="text" placeholder="Disabled input here..." disabled> -</pre> - - <h3>Validation states</h3> - <p>Bootstrap includes validation styles for error, warning, info, and success messages. To use, add the appropriate class to the surrounding <code>.control-group</code>.</p> - - <form class="bs-docs-example form-horizontal"> - <div class="control-group warning"> - <label class="control-label" for="inputWarning">Input with warning</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">Something may have gone wrong</span> - </div> - </div> - <div class="control-group error"> - <label class="control-label" for="inputError">Input with error</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">Please correct the error</span> - </div> - </div> - <div class="control-group info"> - <label class="control-label" for="inputInfo">Input with info</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">Username is taken</span> - </div> - </div> - <div class="control-group success"> - <label class="control-label" for="inputSuccess">Input with success</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">Woohoo!</span> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group warning"> - <label class="control-label" for="inputWarning">Input with warning</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">Something may have gone wrong</span> - </div> -</div> - -<div class="control-group error"> - <label class="control-label" for="inputError">Input with error</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">Please correct the error</span> - </div> -</div> - -<div class="control-group info"> - <label class="control-label" for="inputInfo">Input with info</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">Username is already taken</span> - </div> -</div> - -<div class="control-group success"> - <label class="control-label" for="inputSuccess">Input with success</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">Woohoo!</span> - </div> -</div> -</pre> - - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>Buttons</h1> - </div> - - <h2>Default buttons</h2> - <p>Button styles can be applied to anything with the <code>.btn</code> class applied. However, typically you'll want to apply these to only <code><a></code> and <code><button></code> elements for the best rendering.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Button</th> - <th>class=""</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td><button type="button" class="btn">Default</button></td> - <td><code>btn</code></td> - <td>Standard gray button with gradient</td> - </tr> - <tr> - <td><button type="button" class="btn btn-primary">Primary</button></td> - <td><code>btn btn-primary</code></td> - <td>Provides extra visual weight and identifies the primary action in a set of buttons</td> - </tr> - <tr> - <td><button type="button" class="btn btn-info">Info</button></td> - <td><code>btn btn-info</code></td> - <td>Used as an alternative to the default styles</td> - </tr> - <tr> - <td><button type="button" class="btn btn-success">Success</button></td> - <td><code>btn btn-success</code></td> - <td>Indicates a successful or positive action</td> - </tr> - <tr> - <td><button type="button" class="btn btn-warning">Warning</button></td> - <td><code>btn btn-warning</code></td> - <td>Indicates caution should be taken with this action</td> - </tr> - <tr> - <td><button type="button" class="btn btn-danger">Danger</button></td> - <td><code>btn btn-danger</code></td> - <td>Indicates a dangerous or potentially negative action</td> - </tr> - <tr> - <td><button type="button" class="btn btn-inverse">Inverse</button></td> - <td><code>btn btn-inverse</code></td> - <td>Alternate dark gray button, not tied to a semantic action or use</td> - </tr> - <tr> - <td><button type="button" class="btn btn-link">Link</button></td> - <td><code>btn btn-link</code></td> - <td>Deemphasize a button by making it look like a link while maintaining button behavior</td> - </tr> - </tbody> - </table> - - <h4>Cross browser compatibility</h4> - <p>IE9 doesn't crop background gradients on rounded corners, so we remove it. Related, IE9 jankifies disabled <code>button</code> elements, rendering text gray with a nasty text-shadow that we cannot fix.</p> - - - <h2>Button sizes</h2> - <p>Fancy larger or smaller buttons? Add <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code> for additional sizes.</p> - <div class="bs-docs-example"> - <p> - <button type="button" class="btn btn-large btn-primary">Large button</button> - <button type="button" class="btn btn-large">Large button</button> - </p> - <p> - <button type="button" class="btn btn-primary">Default button</button> - <button type="button" class="btn">Default button</button> - </p> - <p> - <button type="button" class="btn btn-small btn-primary">Small button</button> - <button type="button" class="btn btn-small">Small button</button> - </p> - <p> - <button type="button" class="btn btn-mini btn-primary">Mini button</button> - <button type="button" class="btn btn-mini">Mini button</button> - </p> - </div> -<pre class="prettyprint linenums"> -<p> - <button class="btn btn-large btn-primary" type="button">Large button</button> - <button class="btn btn-large" type="button">Large button</button> -</p> -<p> - <button class="btn btn-primary" type="button">Default button</button> - <button class="btn" type="button">Default button</button> -</p> -<p> - <button class="btn btn-small btn-primary" type="button">Small button</button> - <button class="btn btn-small" type="button">Small button</button> -</p> -<p> - <button class="btn btn-mini btn-primary" type="button">Mini button</button> - <button class="btn btn-mini" type="button">Mini button</button> -</p> -</pre> - <p>Create block level buttons—those that span the full width of a parent— by adding <code>.btn-block</code>.</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 400px; margin: 0 auto 10px;"> - <button type="button" class="btn btn-large btn-block btn-primary">Block level button</button> - <button type="button" class="btn btn-large btn-block">Block level button</button> - </div> - </div> -<pre class="prettyprint linenums"> -<button class="btn btn-large btn-block btn-primary" type="button">Block level button</button> -<button class="btn btn-large btn-block" type="button">Block level button</button> -</pre> - - - <h2>Disabled state</h2> - <p>Make buttons look unclickable by fading them back 50%.</p> - - <h3>Anchor element</h3> - <p>Add the <code>.disabled</code> class to <code><a></code> buttons.</p> - <p class="bs-docs-example"> - <a href="#" class="btn btn-large btn-primary disabled">Primary link</a> - <a href="#" class="btn btn-large disabled">Link</a> - </p> -<pre class="prettyprint linenums"> -<a href="#" class="btn btn-large btn-primary disabled">Primary link</a> -<a href="#" class="btn btn-large disabled">Link</a> -</pre> - <p> - <span class="label label-info">Heads up!</span> - We use <code>.disabled</code> as a utility class here, similar to the common <code>.active</code> class, so no prefix is required. Also, this class is only for aesthetic; you must use custom JavaScript to disable links here. - </p> - - <h3>Button element</h3> - <p>Add the <code>disabled</code> attribute to <code><button></code> buttons.</p> - <p class="bs-docs-example"> - <button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">Primary button</button> - <button type="button" class="btn btn-large" disabled>Button</button> - </p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">Primary button</button> -<button type="button" class="btn btn-large" disabled>Button</button> -</pre> - - - <h2>One class, multiple tags</h2> - <p>Use the <code>.btn</code> class on an <code><a></code>, <code><button></code>, or <code><input></code> element.</p> - <form class="bs-docs-example"> - <a class="btn" href="">Link</a> - <button class="btn" type="submit">Button</button> - <input class="btn" type="button" value="Input"> - <input class="btn" type="submit" value="Submit"> - </form> -<pre class="prettyprint linenums"> -<a class="btn" href="">Link</a> -<button class="btn" type="submit">Button</button> -<input class="btn" type="button" value="Input"> -<input class="btn" type="submit" value="Submit"> -</pre> - <p>As a best practice, try to match the element for your context to ensure matching cross-browser rendering. If you have an <code>input</code>, use an <code><input type="submit"></code> for your button.</p> - - </section> - - - - <!-- Images - ================================================== --> - <section id="images"> - <div class="page-header"> - <h1>Images</h1> - </div> - - <p>Add classes to an <code><img></code> element to easily style images in any project.</p> - <div class="bs-docs-example bs-docs-example-images"> - <img data-src="holder.js/140x140" class="img-rounded"> - <img data-src="holder.js/140x140" class="img-circle"> - <img data-src="holder.js/140x140" class="img-polaroid"> - </div> -<pre class="prettyprint linenums"> -<img src="..." class="img-rounded"> -<img src="..." class="img-circle"> -<img src="..." class="img-polaroid"> -</pre> - <p><span class="label label-info">Heads up!</span> <code>.img-rounded</code> and <code>.img-circle</code> do not work in IE7-8 due to lack of <code>border-radius</code> support.</p> - - - </section> - - - - <!-- Icons - ================================================== --> - <section id="icons"> - <div class="page-header"> - <h1>Icons <small>by <a href="http://glyphicons.com" target="_blank">Glyphicons</a></small></h1> - </div> - - <h2>Icon glyphs</h2> - <p>140 icons in sprite form, available in dark gray (default) and white, provided by <a href="http://glyphicons.com" target="_blank">Glyphicons</a>.</p> - <ul class="the-icons clearfix"> - <li><i class="icon-glass"></i> icon-glass</li> - <li><i class="icon-music"></i> icon-music</li> - <li><i class="icon-search"></i> icon-search</li> - <li><i class="icon-envelope"></i> icon-envelope</li> - <li><i class="icon-heart"></i> icon-heart</li> - <li><i class="icon-star"></i> icon-star</li> - <li><i class="icon-star-empty"></i> icon-star-empty</li> - <li><i class="icon-user"></i> icon-user</li> - <li><i class="icon-film"></i> icon-film</li> - <li><i class="icon-th-large"></i> icon-th-large</li> - <li><i class="icon-th"></i> icon-th</li> - <li><i class="icon-th-list"></i> icon-th-list</li> - <li><i class="icon-ok"></i> icon-ok</li> - <li><i class="icon-remove"></i> icon-remove</li> - <li><i class="icon-zoom-in"></i> icon-zoom-in</li> - <li><i class="icon-zoom-out"></i> icon-zoom-out</li> - <li><i class="icon-off"></i> icon-off</li> - <li><i class="icon-signal"></i> icon-signal</li> - <li><i class="icon-cog"></i> icon-cog</li> - <li><i class="icon-trash"></i> icon-trash</li> - <li><i class="icon-home"></i> icon-home</li> - <li><i class="icon-file"></i> icon-file</li> - <li><i class="icon-time"></i> icon-time</li> - <li><i class="icon-road"></i> icon-road</li> - <li><i class="icon-download-alt"></i> icon-download-alt</li> - <li><i class="icon-download"></i> icon-download</li> - <li><i class="icon-upload"></i> icon-upload</li> - <li><i class="icon-inbox"></i> icon-inbox</li> - - <li><i class="icon-play-circle"></i> icon-play-circle</li> - <li><i class="icon-repeat"></i> icon-repeat</li> - <li><i class="icon-refresh"></i> icon-refresh</li> - <li><i class="icon-list-alt"></i> icon-list-alt</li> - <li><i class="icon-lock"></i> icon-lock</li> - <li><i class="icon-flag"></i> icon-flag</li> - <li><i class="icon-headphones"></i> icon-headphones</li> - <li><i class="icon-volume-off"></i> icon-volume-off</li> - <li><i class="icon-volume-down"></i> icon-volume-down</li> - <li><i class="icon-volume-up"></i> icon-volume-up</li> - <li><i class="icon-qrcode"></i> icon-qrcode</li> - <li><i class="icon-barcode"></i> icon-barcode</li> - <li><i class="icon-tag"></i> icon-tag</li> - <li><i class="icon-tags"></i> icon-tags</li> - <li><i class="icon-book"></i> icon-book</li> - <li><i class="icon-bookmark"></i> icon-bookmark</li> - <li><i class="icon-print"></i> icon-print</li> - <li><i class="icon-camera"></i> icon-camera</li> - <li><i class="icon-font"></i> icon-font</li> - <li><i class="icon-bold"></i> icon-bold</li> - <li><i class="icon-italic"></i> icon-italic</li> - <li><i class="icon-text-height"></i> icon-text-height</li> - <li><i class="icon-text-width"></i> icon-text-width</li> - <li><i class="icon-align-left"></i> icon-align-left</li> - <li><i class="icon-align-center"></i> icon-align-center</li> - <li><i class="icon-align-right"></i> icon-align-right</li> - <li><i class="icon-align-justify"></i> icon-align-justify</li> - <li><i class="icon-list"></i> icon-list</li> - - <li><i class="icon-indent-left"></i> icon-indent-left</li> - <li><i class="icon-indent-right"></i> icon-indent-right</li> - <li><i class="icon-facetime-video"></i> icon-facetime-video</li> - <li><i class="icon-picture"></i> icon-picture</li> - <li><i class="icon-pencil"></i> icon-pencil</li> - <li><i class="icon-map-marker"></i> icon-map-marker</li> - <li><i class="icon-adjust"></i> icon-adjust</li> - <li><i class="icon-tint"></i> icon-tint</li> - <li><i class="icon-edit"></i> icon-edit</li> - <li><i class="icon-share"></i> icon-share</li> - <li><i class="icon-check"></i> icon-check</li> - <li><i class="icon-move"></i> icon-move</li> - <li><i class="icon-step-backward"></i> icon-step-backward</li> - <li><i class="icon-fast-backward"></i> icon-fast-backward</li> - <li><i class="icon-backward"></i> icon-backward</li> - <li><i class="icon-play"></i> icon-play</li> - <li><i class="icon-pause"></i> icon-pause</li> - <li><i class="icon-stop"></i> icon-stop</li> - <li><i class="icon-forward"></i> icon-forward</li> - <li><i class="icon-fast-forward"></i> icon-fast-forward</li> - <li><i class="icon-step-forward"></i> icon-step-forward</li> - <li><i class="icon-eject"></i> icon-eject</li> - <li><i class="icon-chevron-left"></i> icon-chevron-left</li> - <li><i class="icon-chevron-right"></i> icon-chevron-right</li> - <li><i class="icon-plus-sign"></i> icon-plus-sign</li> - <li><i class="icon-minus-sign"></i> icon-minus-sign</li> - <li><i class="icon-remove-sign"></i> icon-remove-sign</li> - <li><i class="icon-ok-sign"></i> icon-ok-sign</li> - - <li><i class="icon-question-sign"></i> icon-question-sign</li> - <li><i class="icon-info-sign"></i> icon-info-sign</li> - <li><i class="icon-screenshot"></i> icon-screenshot</li> - <li><i class="icon-remove-circle"></i> icon-remove-circle</li> - <li><i class="icon-ok-circle"></i> icon-ok-circle</li> - <li><i class="icon-ban-circle"></i> icon-ban-circle</li> - <li><i class="icon-arrow-left"></i> icon-arrow-left</li> - <li><i class="icon-arrow-right"></i> icon-arrow-right</li> - <li><i class="icon-arrow-up"></i> icon-arrow-up</li> - <li><i class="icon-arrow-down"></i> icon-arrow-down</li> - <li><i class="icon-share-alt"></i> icon-share-alt</li> - <li><i class="icon-resize-full"></i> icon-resize-full</li> - <li><i class="icon-resize-small"></i> icon-resize-small</li> - <li><i class="icon-plus"></i> icon-plus</li> - <li><i class="icon-minus"></i> icon-minus</li> - <li><i class="icon-asterisk"></i> icon-asterisk</li> - <li><i class="icon-exclamation-sign"></i> icon-exclamation-sign</li> - <li><i class="icon-gift"></i> icon-gift</li> - <li><i class="icon-leaf"></i> icon-leaf</li> - <li><i class="icon-fire"></i> icon-fire</li> - <li><i class="icon-eye-open"></i> icon-eye-open</li> - <li><i class="icon-eye-close"></i> icon-eye-close</li> - <li><i class="icon-warning-sign"></i> icon-warning-sign</li> - <li><i class="icon-plane"></i> icon-plane</li> - <li><i class="icon-calendar"></i> icon-calendar</li> - <li><i class="icon-random"></i> icon-random</li> - <li><i class="icon-comment"></i> icon-comment</li> - <li><i class="icon-magnet"></i> icon-magnet</li> - - <li><i class="icon-chevron-up"></i> icon-chevron-up</li> - <li><i class="icon-chevron-down"></i> icon-chevron-down</li> - <li><i class="icon-retweet"></i> icon-retweet</li> - <li><i class="icon-shopping-cart"></i> icon-shopping-cart</li> - <li><i class="icon-folder-close"></i> icon-folder-close</li> - <li><i class="icon-folder-open"></i> icon-folder-open</li> - <li><i class="icon-resize-vertical"></i> icon-resize-vertical</li> - <li><i class="icon-resize-horizontal"></i> icon-resize-horizontal</li> - <li><i class="icon-hdd"></i> icon-hdd</li> - <li><i class="icon-bullhorn"></i> icon-bullhorn</li> - <li><i class="icon-bell"></i> icon-bell</li> - <li><i class="icon-certificate"></i> icon-certificate</li> - <li><i class="icon-thumbs-up"></i> icon-thumbs-up</li> - <li><i class="icon-thumbs-down"></i> icon-thumbs-down</li> - <li><i class="icon-hand-right"></i> icon-hand-right</li> - <li><i class="icon-hand-left"></i> icon-hand-left</li> - <li><i class="icon-hand-up"></i> icon-hand-up</li> - <li><i class="icon-hand-down"></i> icon-hand-down</li> - <li><i class="icon-circle-arrow-right"></i> icon-circle-arrow-right</li> - <li><i class="icon-circle-arrow-left"></i> icon-circle-arrow-left</li> - <li><i class="icon-circle-arrow-up"></i> icon-circle-arrow-up</li> - <li><i class="icon-circle-arrow-down"></i> icon-circle-arrow-down</li> - <li><i class="icon-globe"></i> icon-globe</li> - <li><i class="icon-wrench"></i> icon-wrench</li> - <li><i class="icon-tasks"></i> icon-tasks</li> - <li><i class="icon-filter"></i> icon-filter</li> - <li><i class="icon-briefcase"></i> icon-briefcase</li> - <li><i class="icon-fullscreen"></i> icon-fullscreen</li> - </ul> - - <h3>Glyphicons attribution</h3> - <p><a href="http://glyphicons.com/">Glyphicons</a> Halflings are normally not available for free, but an arrangement between Bootstrap and the Glyphicons creators have made this possible at no cost to you as developers. As a thank you, we ask you to include an optional link back to <a href="http://glyphicons.com/">Glyphicons</a> whenever practical.</p> - - - <hr class="bs-docs-separator"> - - - <h2>How to use</h2> - <p>All icons require an <code><i></code> tag with a unique class, prefixed with <code>icon-</code>. To use, place the following code just about anywhere:</p> -<pre class="prettyprint linenums"> -<i class="icon-search"></i> -</pre> - <p>There are also styles available for inverted (white) icons, made ready with one extra class. We will specifically enforce this class on hover and active states for nav and dropdown links.</p> -<pre class="prettyprint linenums"> -<i class="icon-search icon-white"></i> -</pre> - <p> - <span class="label label-info">Heads up!</span> - When using beside strings of text, as in buttons or nav links, be sure to leave a space after the <code><i></code> tag for proper spacing. - </p> - - - <hr class="bs-docs-separator"> - - - <h2>Icon examples</h2> - <p>Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.</p> - - <h4>Buttons</h4> - - <h5>Button group in a button toolbar</h5> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> -</div> -</pre> - - <h5>Dropdown in a button group</h5> - <div class="bs-docs-example"> - <div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> User</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> Edit</a></li> - <li><a href="#"><i class="icon-trash"></i> Delete</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> Ban</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> Make admin</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> User</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> Edit</a></li> - <li><a href="#"><i class="icon-trash"></i> Delete</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> Ban</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> Make admin</a></li> - </ul> -</div> -</pre> - - <h5>Button sizes</h5> - <div class="bs-docs-example"> - <a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> - </div> -<pre class="prettyprint linenums"> -<a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> -</pre> - - <h4>Navigation</h4> - <div class="bs-docs-example"> - <div class="well" style="padding: 8px 0; margin-bottom: 0;"> - <ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> Home</a></li> - <li><a href="#"><i class="icon-book"></i> Library</a></li> - <li><a href="#"><i class="icon-pencil"></i> Applications</a></li> - <li><a href="#"><i class="i"></i> Misc</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> Home</a></li> - <li><a href="#"><i class="icon-book"></i> Library</a></li> - <li><a href="#"><i class="icon-pencil"></i> Applications</a></li> - <li><a href="#"><i class="i"></i> Misc</a></li> -</ul> -</pre> - - <h4>Form fields</h4> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputIcon">Email address</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span><input class="span2" id="inputIcon" type="text"> - </div> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group"> - <label class="control-label" for="inputIcon">Email address</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span> - <input class="span2" id="inputIcon" type="text"> - </div> - </div> -</div> -</pre> - - </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/docs/build/index.js b/docs/build/index.js deleted file mode 100644 index 1a9cb387c77e76655f7df4707cc2c352e3b1421c..0000000000000000000000000000000000000000 --- a/docs/build/index.js +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env node -var hogan = require('hogan.js') - , fs = require('fs') - , prod = process.argv[2] == 'production' - , title = 'Bootstrap' - -var layout, pages - -// compile layout template -layout = fs.readFileSync(__dirname + '/../templates/layout.mustache', 'utf-8') -layout = hogan.compile(layout, { sectionTags: [{o:'_i', c:'i'}] }) - -// retrieve pages -pages = fs.readdirSync(__dirname + '/../templates/pages') - -// iterate over pages -pages.forEach(function (name) { - - if (!name.match(/\.mustache$/)) return - - var page = fs.readFileSync(__dirname + '/../templates/pages/' + name, 'utf-8') - , context = {} - - context[name.replace(/\.mustache$/, '')] = 'active' - context._i = true - context.production = prod - context.title = name - .replace(/\.mustache/, '') - .replace(/\-.*/, '') - .replace(/(.)/, function ($1) { return $1.toUpperCase() }) - - if (context.title == 'Index') { - context.title = title - } else { - context.title += ' · ' + title - } - - page = hogan.compile(page, { sectionTags: [{o:'_i', c:'i'}] }) - page = layout.render(context, { - body: page - }) - - fs.writeFileSync(__dirname + '/../' + name.replace(/mustache$/, 'html'), page, 'utf-8') -}) \ No newline at end of file diff --git a/docs/build/node_modules/.bin/hulk b/docs/build/node_modules/.bin/hulk deleted file mode 100755 index dd5c4a60d0a2f39c110ba8a3a76de6aca1e962e0..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/.bin/hulk +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env node - -/* - * Copyright 2011 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 hogan = require('../lib/hogan.js'), - path = require('path'), - fs = require('fs'); - -var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'], - specialsRegExp = new RegExp('(\\' + specials.join('|\\') + ')', 'g'), - templates; - - -// Escape special regexp characters -function esc(text) { - return text.replace(specialsRegExp, '\\$1'); -} - - -// Check for dirs and correct ext (<3 for windows) -function extractFiles(args) { - var usage = 'USAGE: hulk ./templates/*.mustaches\n' + - 'NOTE: hulk supports the "*" wildcard and allows you to target specific extensions too', - files = []; - - if (!args.length) { - console.log(usage); - process.exit(-1); - } - - args.forEach(function (arg) { - - if (/\*/.test(arg)) { - arg = arg.split('*'); - return files = files.concat( - fs.readdirSync(arg[0] || '.') - .map(function (f) { - return new RegExp(esc(arg[1]) + '$').test(f) && path.join(arg[0], f); - }) - .filter(function (f) { - return f; - }) - ); - } - - files.push(arg); - - }) - - return files; -} - - -// Remove utf-8 byte order mark, http://en.wikipedia.org/wiki/Byte_order_mark -function removeByteOrderMark(text) { - if (text.charCodeAt(0) === 0xfeff) { - return text.substring(1); - } - return text; -} - - -// Write a template foreach file that matches template extension -templates = extractFiles(process.argv.slice(2)) - .map(function (file) { - var openedFile = fs.readFileSync(file, 'utf-8'), name; - if (!openedFile) return; - name = file.replace(/\..*$/, ''); - openedFile = removeByteOrderMark(openedFile.trim()); - return 'templates.' + name + ' = new Hogan.Template(' + hogan.compile(openedFile, { asString: 1 }) + ');'; - }) - .filter(function (t) { - return t; - }); - - -// Output templates -if (!templates.length) return; -console.log('var templates = {};'); -console.log(templates.join('\n')); \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/.git_ignore b/docs/build/node_modules/hogan.js/.git_ignore deleted file mode 100644 index 3c3629e647f5ddf82548912e337bea9826b434af..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/.git_ignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/docs/build/node_modules/hogan.js/.gitmodules b/docs/build/node_modules/hogan.js/.gitmodules deleted file mode 100644 index 6bfdc18eb1850e7963b5816bbafdd57681fb24b4..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "test/spec"] - path = test/spec - url = https://github.com/mustache/spec.git diff --git a/docs/build/node_modules/hogan.js/LICENSE b/docs/build/node_modules/hogan.js/LICENSE deleted file mode 100644 index 4947287f7b5ccb5d1e8b7b2d3aa5d89f322c160d..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/LICENSE +++ /dev/null @@ -1,177 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/Makefile b/docs/build/node_modules/hogan.js/Makefile deleted file mode 100644 index 922fdead1d5be2809f8aab4ac5d9c3d8fbdc00f9..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/Makefile +++ /dev/null @@ -1,62 +0,0 @@ -REPO = git@github.com:twitter/hogan.js.git -BUILD := build -VERSION = ${shell node -e 'var s = JSON.parse(require("fs").readFileSync("package.json").toString()).version; console.log(s.substring(0, s.indexOf("-")));'} - -# -# Run command line tests -# -test: - @ node test/index.js - -# -# Run Mustache spec tests -# -spec: - @ node test/spec.js - -# -# Run benchmark -# -benchmark: - @ node benchmark/console/index.js - -clean: - @ rm -rf dist/* -# -# Make a new version of Hogan from the current dev version. -# -release: clean - @ echo "Creating a new version of Hogan." - @ mkdir -p dist/nodejs - @ cp -R lib dist/nodejs/lib - @ node tools/release.js - @ mkdir -p web/builds/$(VERSION) - @ cp dist/*.* web/builds/$(VERSION)/. -# -# Make the gh-pages website -# -# This target builds the hogan.js github website using hogan.js. -# -# cd into build/gh-pages to check in the new site. -# -GH_PAGES = $(BUILD)/gh-pages -web: | pages - @cp -R web/* $(GH_PAGES) - @@ node tools/web_templates.js - @echo - @echo "Website built in $(GH_PAGES)." - -# -# Checkout the gh-pages branch. -# -pages: | $(BUILD) - @if [ ! -d "$(GH_PAGES)" ]; then \ - git clone -b gh-pages $(REPO) $(GH_PAGES); \ - rm -rf $(GH_PAGES)/*; \ - fi; - @mkdir -p $(GH_PAGES)/images - -$(BUILD): - mkdir -p $(BUILD) - -.PHONY: test spec benchmark web release diff --git a/docs/build/node_modules/hogan.js/README.md b/docs/build/node_modules/hogan.js/README.md deleted file mode 100644 index e879894b692bfe9014b77e35742e2ce90ddd18e9..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/README.md +++ /dev/null @@ -1,93 +0,0 @@ -## Hogan.js - A mustache compiler. - -[Hogan.js](http://twitter.github.com/hogan.js/) is a compiler for the -[Mustache](http://mustache.github.com/) templating language. For information -on Mustache, see the [manpage](http://mustache.github.com/mustache.5.html) and -the [spec](https://github.com/mustache/spec). - -## Basics - -Hogan compiles templates to HoganTemplate objects, which have a render method. - -```js -var data = { - screenName: "dhg", -}; - -var template = Hogan.compile("Follow @{{screenName}}."); -var output = template.render(data); - -// prints "Follow @dhg." -console.log(output); -``` - -## Features - -Hogan is fast--try it on your workload. - -Hogan has separate scanning, parsing and code generation phases. This way it's -possible to add new features without touching the scanner at all, and many -different code generation techniques can be tried without changing the parser. - -Hogan exposes scan and parse methods. These can be useful for -pre-processing templates on the server. - -```js -var text = "{{^check}}{{i18n}}No{{/i18n}}{{/check}}"; -text += "{{#check}}{{i18n}}Yes{{/i18n}}{{/check}}"; -var tree = Hogan.parse(Hogan.scan(text)); - -// outputs "# check" -console.log(tree[0].tag + " " + tree[0].name); - -// outputs "Yes" -console.log(tree[1].nodes[0].nodes[0]); -``` - -It's also possible to use HoganTemplate objects without the Hogan compiler -present. That means you can pre-compile your templates on the server, and -avoid shipping the compiler. However, the optional lambda features from the -Mustache spec do require the compiler to be present. - -## Why Hogan.js? - -Why another templating library? - -Hogan.js was written to meet three templating library requirements: good -performance, standalone template objects, and a parser API. - -## Issues - -Have a bug? Please create an issue here on GitHub! - -https://github.com/twitter/hogan.js/issues - -## Versioning - -For transparency and insight into our release cycle, releases will be numbered with the follow format: - -`<major>.<minor>.<patch>` - -And constructed with the following guidelines: - -* Breaking backwards compatibility bumps the major -* New additions without breaking backwards compatibility bumps the minor -* Bug fixes and misc changes bump the patch - -For more information on semantic versioning, please visit http://semver.org/. - -## Authors - -**Robert Sayre** - -+ http://github.com/sayrer - -**Jacob Thornton** - -+ http://github.com/fat - -## License - -Copyright 2011 Twitter, Inc. - -Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/bin/hulk b/docs/build/node_modules/hogan.js/bin/hulk deleted file mode 100755 index dd5c4a60d0a2f39c110ba8a3a76de6aca1e962e0..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/bin/hulk +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/env node - -/* - * Copyright 2011 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 hogan = require('../lib/hogan.js'), - path = require('path'), - fs = require('fs'); - -var specials = ['/', '.', '*', '+', '?', '|','(', ')', '[', ']', '{', '}', '\\'], - specialsRegExp = new RegExp('(\\' + specials.join('|\\') + ')', 'g'), - templates; - - -// Escape special regexp characters -function esc(text) { - return text.replace(specialsRegExp, '\\$1'); -} - - -// Check for dirs and correct ext (<3 for windows) -function extractFiles(args) { - var usage = 'USAGE: hulk ./templates/*.mustaches\n' + - 'NOTE: hulk supports the "*" wildcard and allows you to target specific extensions too', - files = []; - - if (!args.length) { - console.log(usage); - process.exit(-1); - } - - args.forEach(function (arg) { - - if (/\*/.test(arg)) { - arg = arg.split('*'); - return files = files.concat( - fs.readdirSync(arg[0] || '.') - .map(function (f) { - return new RegExp(esc(arg[1]) + '$').test(f) && path.join(arg[0], f); - }) - .filter(function (f) { - return f; - }) - ); - } - - files.push(arg); - - }) - - return files; -} - - -// Remove utf-8 byte order mark, http://en.wikipedia.org/wiki/Byte_order_mark -function removeByteOrderMark(text) { - if (text.charCodeAt(0) === 0xfeff) { - return text.substring(1); - } - return text; -} - - -// Write a template foreach file that matches template extension -templates = extractFiles(process.argv.slice(2)) - .map(function (file) { - var openedFile = fs.readFileSync(file, 'utf-8'), name; - if (!openedFile) return; - name = file.replace(/\..*$/, ''); - openedFile = removeByteOrderMark(openedFile.trim()); - return 'templates.' + name + ' = new Hogan.Template(' + hogan.compile(openedFile, { asString: 1 }) + ');'; - }) - .filter(function (t) { - return t; - }); - - -// Output templates -if (!templates.length) return; -console.log('var templates = {};'); -console.log(templates.join('\n')); \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/lib/compiler.js b/docs/build/node_modules/hogan.js/lib/compiler.js deleted file mode 100644 index 2cd65f6fdff92a48df66933293740003f20d58bc..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/lib/compiler.js +++ /dev/null @@ -1,348 +0,0 @@ -/* - * Copyright 2011 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. - */ - -(function (Hogan) { - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - Hogan.scan = function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - if (ctag == '}}') { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === '}') { - token.n = token.n.substring(0, token.n.length - 1); - } - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function writeCode(tree) { - return 'i = i || "";var b = i + "";var _ = this;' + walk(tree) + 'return b;'; - } - - Hogan.generate = function (code, text, options) { - if (options.asString) { - return 'function(c,p,i){' + code + ';}'; - } - - return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan); - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' + - 'b += _.rs(c,p,' + - 'function(c,p){ var b = "";' + - walk(nodes) + - 'return b;});c.pop();}' + - 'else{b += _.b; _.b = ""};'; - } - - function invertedSection(nodes, id, method) { - return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return 'b += _.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '");'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += ' + id + ';'; - } - - Hogan.parse = function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - Hogan.cache = {}; - - Hogan.compile = function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var key = text + '||' + !!options.asString; - - var t = this.cache[key]; - - if (t) { - return t; - } - - t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), options)), text, options); - return this.cache[key] = t; - }; -})(typeof exports !== 'undefined' ? exports : Hogan); diff --git a/docs/build/node_modules/hogan.js/lib/hogan.js b/docs/build/node_modules/hogan.js/lib/hogan.js deleted file mode 100644 index f0119b5291db4c551bc92b858d4a379a1611aa01..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/lib/hogan.js +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2011 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. - */ - -// This file is for use with Node.js. See dist/ for browser files. - -var Hogan = require('./compiler'); -Hogan.Template = require('./template').Template; -module.exports = Hogan; \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/lib/template.js b/docs/build/node_modules/hogan.js/lib/template.js deleted file mode 100644 index 8958a70a163a950fae6641353e25e333f6d125bd..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/lib/template.js +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2011 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 Hogan = {}; - -(function (Hogan) { - Hogan.Template = function constructor(renderFunc, text, compiler) { - if (renderFunc) { - this.r = renderFunc; - } - this.c = compiler; - this.text = text || ''; - } - - Hogan.Template.prototype = { - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.ri([context], partials || {}, indent); - }, - - // render internal -- a hook for overrides that catches partials too - ri: function (context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - if (this.c && typeof partial == 'string') { - partial = this.c.compile(partial); - } - - return partial.ri(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (typeof val == 'function') { - val = this.ls(val, ctx, partials, inverted, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var t = val.call(cx, text, function(t) { - return compiler.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - if (typeof result == 'function') { - result = result.call(cx); - } - result = result.toString(); - - if (this.c && ~result.indexOf("{{")) { - return this.c.compile(result).render(cx, partials); - } - - return result; - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String((str === null || str === undefined) ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - diff --git a/docs/build/node_modules/hogan.js/package.json b/docs/build/node_modules/hogan.js/package.json deleted file mode 100644 index a09dede094337a8b7d20cb494179ed817e47a980..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "hogan.js" - , "description": "A mustache compiler." - , "version": "1.0.5-dev" - , "keywords": ["mustache", "template"] - , "main": "./lib/hogan.js" - , "homepage": "http://twitter.github.com/hogan.js/" - , "author": "Twitter Inc." - , "repository": { - "type": "git" - , "url": "https://github.com/twitter/hogan.js.git" - } - , "licenses": [ - { "type": "Apache-2.0" - , "url": "http://www.apache.org/licenses/LICENSE-2.0" - } - ] - , "devDependencies": { "uglify-js": "*" } - , "bin" : { "hulk" : "./bin/hulk" } -} diff --git a/docs/build/node_modules/hogan.js/test/html/list.html b/docs/build/node_modules/hogan.js/test/html/list.html deleted file mode 100644 index 9bb653a3be736b8393efa0d5d4abab6a0a122b2d..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/html/list.html +++ /dev/null @@ -1,8 +0,0 @@ -<ul> -<li></li> -<li></li> -<li></li> -<li></li> -<li></li> -<li></li> -</ul> \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/index.html b/docs/build/node_modules/hogan.js/test/index.html deleted file mode 100644 index 6f0e7438b7e21ad9c25187ec72759fd99e6b9ad6..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/index.html +++ /dev/null @@ -1,13 +0,0 @@ -<html> -<head> - <title>test</title> - <script src="https://raw.github.com/douglascrockford/JSON-js/master/json2.js"></script> -</head> -<body> - <code id="console"></code> - <script>var Hogan = {};</script> - <script src="../lib/template.js"></script> - <script src="../lib/compiler.js"></script> - <script src="./index.js"></script> -</body> -</html> \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/index.js b/docs/build/node_modules/hogan.js/test/index.js deleted file mode 100644 index 9b235ebe7eb960aed25e5864e17c55e721be52c7..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/index.js +++ /dev/null @@ -1,848 +0,0 @@ -/* - * Copyright 2011 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 Hogan = Hogan || require('../lib/hogan') - , doc = this["document"] - -function testScanTextNoTags() { - var text = "<h2>hi</h2>"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0]+'', text, "text is equal to first token"); -} - -function testScanOneTag() { - var text = "{{hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); -} - -function testScanMultipleTags() { - var text = "asdf{{hmm}}asdf2{{hmm2}}asdf3"; - var tokens = Hogan.scan(text); - is(tokens.length, 5, "3 text tokens, 2 tag tokens."); - is(tokens[0]+'', "asdf", "first token is text"); - is(tokens[1].n, "hmm", "second token is tag"); - is(tokens[1].tag, "_v", "second token is a variable"); - is(tokens[2]+'', "asdf2", "third token is text"); - is(tokens[3].n, "hmm2", "fourth token is tag"); - is(tokens[3].tag, "_v", "fourth token is a variable"); - is(tokens[4]+'', "asdf3", "Fifth token is text"); -} - -function testScanSectionOpen() { - var text = "{{#hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "#", "First token is a section."); -} - -function testScanSectionClose() { - var text = "{{/hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "/", "First token is a section."); -} - -function testScanSection() { - var text = "{{#hmm}}{{/hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 2, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "#", "First token is a section."); - is(tokens[1].n, "hmm", "Second token content is variable name."); - is(tokens[1].tag, "/", "Second token is a section."); -} - -function testScanSectionInContent() { - var text = "abc{{#hmm}}def{{/hmm}}ghi"; - var tokens = Hogan.scan(text); - is(tokens.length, 5, "3 text tokens, 2 tag tokens."); - is(tokens[0]+'', "abc", "first token is text"); - is(tokens[1].n, "hmm", "second token is tag"); - is(tokens[1].tag, "#", "second token is a variable"); - is(tokens[2]+'', "def", "third token is text"); - is(tokens[3].n, "hmm", "fourth token is tag"); - is(tokens[3].tag, "/", "fourth token is a variable"); - is(tokens[4]+'', "ghi", "Fifth token is text"); -} - -function testScanNegativeSection() { - var text = "{{^hmm}}{{/hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 2, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "^", "First token is a negative section."); - is(tokens[1].n, "hmm", "First token content is variable name."); - is(tokens[1].tag, "/", "Second token is a section."); -} - -function testScanPartial() { - var text = "{{>hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, ">", "First token is a partial."); -} - - -function testScanBackwardPartial() { - var text = "{{<hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "<", "First token is a backward partial."); -} - -function testScanAmpersandNoEscapeTag() { - var text = "{{&hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "&", "First token is an ampersand no-escape."); -} - -function testScanTripleStache() { - var text = "{{{hmm}}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 1, "One token"); - is(tokens[0].n, "hmm", "First token content is variable name."); - is(tokens[0].tag, "{", "First token is a triple-stache."); -} - -function testScanSectionWithTripleStacheInside() { - var text = "a{{#yo}}b{{{hmm}}}c{{/yo}}d"; - var tokens = Hogan.scan(text); - is(tokens.length, 7, "One token"); - is(tokens[0]+'', "a", "First token content is correct text."); - is(tokens[1].n, "yo", "Second token content is correct text."); - is(tokens[1].tag, "#", "Second token is a section."); - is(tokens[2]+'', "b", "Third token content is correct text."); - is(tokens[3].n, "hmm", "Fourth token content is correct text."); - is(tokens[3].tag, "{", "Fourth token is a triple stache."); - is(tokens[4]+'', "c", "Fifth token content is correct text."); - is(tokens[5].n, "yo", "Sixth token content is correct text."); - is(tokens[5].tag, "/", "Sixth token is a close."); - is(tokens[6]+'', "d", "Seventh token content is correct text."); -} - -function testScanSetDelimiter() { - var text = "a{{=<% %>=}}b"; - var tokens = Hogan.scan(text); - is(tokens.length, 2, "change delimiter doesn't appear as token."); - is(tokens[0]+'', "a", "text before change delimiter is processed."); - is(tokens[1]+'', "b", "text after change delimiter is processed."); -} - -function testScanResetDelimiter() { - var text = "a{{=<% %>=}}b<%hmm%>c<%={{ }}=%>d{{hmm}}"; - var tokens = Hogan.scan(text); - is(tokens.length, 6, "8 tokens, delimiter changes don't count."); - is(tokens[0]+'', "a", "first token is correct."); - is(tokens[1]+'', "b", "third token is correct."); - is(tokens[2].tag, "_v", "third token is correct tag."); - is(tokens[2].n, "hmm", "third token is correct name."); - is(tokens[3]+'', "c", "fifth token is correct."); - is(tokens[4]+'', "d", "seventh token is correct."); - is(tokens[5].tag, "_v", "eighth token is correct tag."); - is(tokens[5].n, "hmm", "eighth token is correct name."); -} - -function testSingleCharDelimiter() { - var text = '({{foo}} {{=[ ]=}}[text])'; - var tokens = Hogan.scan(text); - - var t = Hogan.compile(text); - s = t.render({foo: "bar", text: 'It worked!'}); - is(s, '(bar It worked!)', "Hogan substitution worked after custom delimiters."); -} - -function testSetDelimiterWithWhitespace() { - var text = "{{= | | =}}|foo|"; - var t = Hogan.compile(text); - s = t.render({foo: "bar"}); - is(s, 'bar', "custom delimiters with whitespace works.") -} - -function testParseBasic() { - var text = "test"; - var tree = Hogan.parse(Hogan.scan(text)); - is(tree.length, 1, "one parse node"); - is(tree[0]+'', "test", "text is correct"); -} - -function testParseVariables() { - var text = "test{{foo}}test!{{bar}}test!!{{baz}}test!!!"; - var tree = Hogan.parse(Hogan.scan(text)); - is(tree.length, 7, "one parse node"); - is(tree[0]+'', "test", "first text is correct"); - is(tree[2]+'', "test!", "second text is correct") - is(tree[4]+'', "test!!", "third text is correct") - is(tree[6]+'', "test!!!", "last text is correct") - is(tree[1].n, "foo", "first var is correct"); - is(tree[3].n, "bar", "second var is correct"); - is(tree[5].n, "baz", "third var is correct"); -} - -function testParseSection() { - var text = "a{{#foo}}b{{/foo}}c"; - var tree = Hogan.parse(Hogan.scan(text)); - is(tree.length, 3, "three nodes at base"); - is(tree[0]+'', "a", "correct text in first node"); - is(tree[1].hasOwnProperty('nodes'), true, "second node is a section"); - is(tree[1].tag, '#', "second node is a section"); - is(tree[1].n, "foo", "correct name for section"); - is(tree[1].nodes[0]+'', "b", "correct text in section"); - is(tree[2]+'', "c", "correct text in last node"); -} - -function testParseIndexes() { - var text = "abc{{#foo}}asdf{{bar}}asdf{{/foo}}def"; - var tree = Hogan.parse(Hogan.scan(text)); - is(text.substring(tree[1].i, tree[1].end), "asdf{{bar}}asdf", "section text indexes are correct"); -} - -function testParseNegativeSection() { - var text = "a{{^foo}}b{{/foo}}c"; - var tree = Hogan.parse(Hogan.scan(text)); - - is(tree.length, 3, "three nodes at base"); - is(tree[0]+'', "a", "correct text in first node"); - is(tree[1].hasOwnProperty('nodes'), true, "second node is a section"); - is(tree[1].tag, '^', "second node is a negative section"); - is(tree[1].n, "foo", "correct name for section"); - is(tree[1].nodes[0]+'', "b", "correct text in section"); - is(tree[2]+'', "c", "correct text in last node"); -} - -function testParseNestedSections() { - var text = "{{#bar}}{{#foo}}c{{/foo}}{{/bar}}" - var tree = Hogan.parse(Hogan.scan(text)); - - is(tree.length, 1, "one node at base"); - is(tree[0].tag, "#", "open section is first node"); - is(tree[0].n, "bar", "first section name is 'bar'"); - is(tree[0].nodes.length, 1, "first section contains one node."); - is(tree[0].nodes[0].n, "foo", "correct name for nested section"); - is(tree[0].nodes[0].nodes[0]+'', "c", "correct text in nested section"); -} - -function testMissingClosingTag() { - var text = "a{{#foo}}bc"; - var msg = ''; - try { - var tree = Hogan.parse(Hogan.scan(text)); - } catch (e) { - msg = e.message; - } - is(msg, "missing closing tag: foo", "Error is generated"); -} - -function testBadNesting() { - var text = "a{{#foo}}{{#bar}}b{{/foo}}{{/bar}}c"; - var msg = ''; - try { - var tree = Hogan.parse(Hogan.scan(text)); - } catch (e) { - msg = e.message; - } - is(msg, "Nesting error: bar vs. foo", "Error is generated"); -} - -function testBasicOutput() { - var text = "test"; - var t = Hogan.compile(text); - is(t.render(), text, "template renders one text node"); -} - -function testBasicOutputAsString() { - var text = "test"; - var textFunc = Hogan.compile(text, true); - is(textFunc, "function(context, partials){this.buffer.push('test');};", "template renders correct text function."); -} - -function testOneVariable() { - var text = "test {{foo}} test"; - var t = Hogan.compile(text); - var s = t.render({foo:'bar'}); - is(s, "test bar test", "basic variable substitution works."); -} - -function testOneVariableAsString() { - var text = "test {{foo}} test"; - var funcText = Hogan.compile(text, true); - is(funcText, "function(context, partials){this.buffer.push('test ');\nthis.buffer.push(this.find('foo', context));\nthis.buffer.push(' test');};", - "Function text is correct with variable substitution."); -} - -function testRenderWithWhitespace() { - var text = "{{ string }}"; - var t = Hogan.compile(text); - is(t.render({string: "---" }), "---", "tags with whitespace render correctly."); -} - -function testRenderWithWhitespaceAroundTripleStache() { - var text = " {{{string}}}\n"; - var t = Hogan.compile(text); - is(t.render({string: "---" }), " ---\n", "triple stache surrounded by whitespace render correctly."); -} - -function testRenderWithWhitespaceAroundAmpersand() { - var text = " {{& string }}\n"; - var t = Hogan.compile(text); - is(t.render({string: "---" }), " ---\n", "ampersand surrounded by whitespace render correctly."); -} - -function testMultipleVariables() { - var text = "test {{foo}} test {{bar}} test {{baz}} test {{foo}} test"; - var t = Hogan.compile(text); - var s = t.render({foo:'42', bar: '43', baz: '44'}); - is(s, "test 42 test 43 test 44 test 42 test", "all variables render correctly."); -} - -function testNumberValues() { - var text = "integer: {{foo}} float: {{bar}} negative: {{baz}}"; - var t = Hogan.compile(text); - var s = t.render({foo: 42, bar: 42.42, baz: -42}); - is(s, "integer: 42 float: 42.42 negative: -42", "numbers render correctly"); -} - -function testObjectRender() { - var text = "object: {{foo}}"; - var t = Hogan.compile(text); - var s = t.render({foo: {}}); - is(s, "object: [object Object]", "objects render default toString."); -} - -function testObjectToStringRender() { - var text = "object: {{foo}}"; - var t = Hogan.compile(text); - var s = t.render({foo: {toString: function(){ return "yo!"}}}); - is(s, "object: yo!", "objects render supplied toString."); -} - -function testArrayRender() { - var text = "array: {{foo}}"; - var t = Hogan.compile(text); - var s = t.render({foo: ["a","b","c"]}); - is(s, "array: a,b,c", "arrays render default toString."); -} - -function testEscaping() { - var text = "{{foo}}"; - var t = Hogan.compile(text); - var s = t.render(); - var s = t.render({foo: "< > <div> \' \" &"}); - is(s, "< > <div> ' " &", "input correctly escaped."); - - var ec ={ "'": "'", '"': """, "<": "<", ">": ">", "&": "&"} - for (var char in ec) { - var s = t.render({foo: char + " just me"}); - is(s, ec[char] + " just me", "input correctly escaped."); - } - -} - -function testMustacheInjection() { - var text = "{{foo}}"; - var t = Hogan.compile(text); - s = t.render({foo:"{{{<42}}}"}) - is(s, "{{{<42}}}", "Can't inject mustache"); -} - -function testTripleStache() { - var text = "{{{foo}}}"; - var t = Hogan.compile(text); - var s = t.render({foo: "< > <div> \' \" &"}); - is(s, "< > <div> \' \" &", "input correctly not-escaped."); -} - -function testAmpNoEscaping() { - var text = "{{&foo}}"; - var t = Hogan.compile(text); - var s = t.render({foo: "< > <div> \' \" &"}); - is(s, "< > <div> \' \" &", "input correctly not-escaped."); -} - -function testPartial() { - var partialText = "this is text from the partial--the magic number {{foo}} is from a variable"; - var p = Hogan.compile(partialText); - - var text = "This template contains a partial ({{>testPartial}})." - var t = Hogan.compile(text); - - var s = t.render({foo: 42}, {testPartial: p}); - is(s, "This template contains a partial (this is text from the partial--the magic number 42 is from a variable).", "partials work"); -} - -function testNestedPartials() { - var partialText = "this is text from the partial--the magic number {{foo}} is from a variable"; - var p = Hogan.compile(partialText); - - var partialText2 = "This template contains a partial ({{>testPartial}})." - var p2 = Hogan.compile(partialText2); - - var text = "This template contains a partial that contains a partial [{{>testPartial2}}]." - var t = Hogan.compile(text); - - var s = t.render({foo: 42}, {testPartial: p, testPartial2: p2}); - is(s, "This template contains a partial that contains a partial [This template contains a partial (this is text from the partial--the magic number 42 is from a variable).].", "nested partials work"); -} - -function testNegativeSection() { - var text = "This template {{^foo}}BOO {{/foo}}contains an inverted section." - var t = Hogan.compile(text); - var s = t.render(); - is(s, "This template BOO contains an inverted section.", "inverted sections with no context work"); - - s = t.render({foo:[]}); - is(s, "This template BOO contains an inverted section.", "inverted sections with empty list context work"); - - s = t.render({ foo:false }); - is(s, "This template BOO contains an inverted section.", "inverted sections with false context work"); - - s = t.render({foo:''}); - is(s, "This template contains an inverted section.", "inverted sections with empty string context work"); - - s = t.render({foo:true}); - is(s, "This template contains an inverted section.", "inverted sections with true context work"); - - s = t.render({foo: function() { return false; }}); - is(s, "This template BOO contains an inverted section.", "inverted sections with false returning method in context work"); -} - -function testSectionElision() { - var text = "This template {{#foo}}BOO {{/foo}}contains a section." - var t = Hogan.compile(text); - var s = t.render(); - is(s, "This template contains a section.", "sections with no context work"); - - s = t.render({foo:[]}); - is(s, "This template contains a section.", "sections with empty list context work"); - - s = t.render({foo:false}); - is(s, "This template contains a section.", "sections with false context work"); -} - -function testSectionObjectContext() { - var text = "This template {{#foo}}{{bar}} {{/foo}}contains a section." - var t = Hogan.compile(text); - var s = t.render({foo:{bar:42}}); - is(s, "This template 42 contains a section.", "sections with object context work"); -} - -function testSectionArrayContext() { - var text = "This template {{#foo}}{{bar}} {{/foo}}contains a section." - var t = Hogan.compile(text); - var s = t.render({foo:[{bar:42}, {bar:43}, {bar:44}]}); - is(s, "This template 42 43 44 contains a section.", "sections with object ctx and array values work"); -} - -function testFalsyVariableNoRender() { - var text = "I ({{cannot}}) be seen!"; - var t = Hogan.compile(text); - var s = t.render(); - is(s, "I () be seen!", "missing value doesn't render."); -} - -function testSectionExtensions() { - var text = "Test {{_//|__foo}}bar{{/foo}}"; - var options = {sectionTags:[{o:'_//|__foo', c:'foo'}]}; - var tree = Hogan.parse(Hogan.scan(text), options); - is(tree[1].tag, "#", "_//|__foo node transformed to section"); - is(tree[1].n, "_//|__foo", "_//|__foo node transformed to section"); - - var t = Hogan.compile(text, options ); - var s = t.render({'_//|__foo':true}); - is(s, "Test bar", "Custom sections work"); -} - -function testMisnestedSectionExtensions() { - var text = "Test {{__foo}}bar{{/bar}}"; - var options = {sectionTags:[{o:'__foo', c:'foo'}, {o:'__bar', c:'bar'}]}; - var msg = ''; - try { - var tree = Hogan.parse(Hogan.scan(text), options); - } catch (e) { - msg = e.message; - } - is(msg, "Nesting error: __foo vs. bar", "Error is generated"); -} - -function testNestedSection() { - var text = "{{#foo}}{{#bar}}{{baz}}{{/bar}}{{/foo}}"; - var t = Hogan.compile(text); - var s = t.render({foo: 42, bar: 42, baz:42}); - is(s, "42", "can reach up context stack"); -} - -function testDottedNames() { - var text = '"{{person.name}}" == "{{#person}}{{name}}{{/person}}"'; - var t = Hogan.compile(text); - var s = t.render({person:{name:'Joe'}}); - is(s, '"Joe" == "Joe"', "dotted names work"); -} - -function testImplicitIterator() { - var text = '{{#stuff}} {{.}} {{/stuff}}'; - var t = Hogan.compile(text); - var s = t.render({stuff:[42,43,44]}); - is(s, " 42 43 44 ", "implicit iterators work"); -} - -function testPartialsAndDelimiters() { - var text = '{{>include}}*\n{{= | | =}}\n*|>include|'; - var partialText = ' .{{value}}. '; - var partial = Hogan.compile(partialText); - var t = Hogan.compile(text); - var s = t.render({value:"yes"}, {'include':partial}); - is(s, " .yes. *\n* .yes. ", "partials work around delimiters"); -} - -function testStringPartials() { - var text = "foo{{>mypartial}}baz"; - var partialText = " bar "; - var t = Hogan.compile(text); - var s = t.render({}, {'mypartial': partialText}); - is(s, "foo bar baz", "string partial works."); -} - -function testMissingPartials() { - var text = "foo{{>mypartial}} bar"; - var t = Hogan.compile(text); - var s = t.render({}); - is(s, "foo bar", "missing partial works."); -} - -function testIndentedStandaloneComment() { - var text = 'Begin.\n {{! Indented Comment Block! }}\nEnd.'; - var t = Hogan.compile(text); - var s = t.render(); - is(s, 'Begin.\nEnd.', "Standalone comment blocks are removed."); -} - -function testNewLineBetweenDelimiterChanges() { - var data = { section: true, data: 'I got interpolated.' }; - var text = '\n{{#section}}\n {{data}}\n |data|\n{{/section}}x\n\n{{= | | =}}\n|#section|\n {{data}}\n |data|\n|/section|'; - var t = Hogan.compile(text); - var s = t.render(data); - is(s, '\n I got interpolated.\n |data|\nx\n\n {{data}}\n I got interpolated.\n', 'render correct') -} - -function testMustacheJSApostrophe() { - var text = '{{apos}}{{control}}'; - var t = Hogan.compile(text); - var s = t.render({'apos':"'", 'control':"X"}); - is(s, ''X', 'Apostrophe is escaped.'); -} - -function testMustacheJSArrayOfImplicitPartials() { - var text = 'Here is some stuff!\n{{#numbers}}\n{{>partial}}\n{{/numbers}}\n'; - var partialText = '{{.}}\n'; - var t = Hogan.compile(text); - var s = t.render({numbers:[1,2,3,4]}, {partial: partialText}); - is(s, 'Here is some stuff!\n1\n2\n3\n4\n', 'Partials with implicit iterators work.'); -} - -function testMustacheJSArrayOfPartials() { - var text = 'Here is some stuff!\n{{#numbers}}\n{{>partial}}\n{{/numbers}}\n'; - var partialText = '{{i}}\n'; - var t = Hogan.compile(text); - var s = t.render({numbers:[{i:1},{i:2},{i:3},{i:4}]}, {partial: partialText}); - is(s, 'Here is some stuff!\n1\n2\n3\n4\n', 'Partials with arrays work.'); -} - -function testMustacheJSArrayOfStrings() { - var text = '{{#strings}}{{.}} {{/strings}}'; - var t = Hogan.compile(text); - var s = t.render({strings:['foo', 'bar', 'baz']}); - is(s, 'foo bar baz ', 'array of strings works with implicit iterators.'); -} - -function testMustacheJSUndefinedString() { - var text = 'foo{{bar}}baz'; - var t = Hogan.compile(text); - var s = t.render({bar:undefined}); - is(s, 'foobaz', 'undefined value does not render.'); -} - -function testMustacheJSTripleStacheAltDelimiter() { - var text = '{{=<% %>=}}<% foo %> {{foo}} <%{bar}%> {{{bar}}}'; - var t = Hogan.compile(text); - var s = t.render({foo:'yeah', bar:'hmm'}); - is(s, 'yeah {{foo}} hmm {{{bar}}}', 'triple stache inside alternate delimiter works.'); -} - -/* shootout benchmark tests */ - -function testShootOutString() { - var text = "Hello World!"; - var expected = "Hello World!" - var t = Hogan.compile(text) - var s = t.render({}) - is(s, expected, "Shootout String compiled correctly"); -} - -function testShootOutReplace() { - var text = "Hello {{name}}! You have {{count}} new messages."; - var expected = "Hello Mick! You have 30 new messages."; - var t = Hogan.compile(text) - var s = t.render({ name: "Mick", count: 30 }) - is(s, expected, "Shootout Replace compiled correctly"); -} - -function testShootOutArray() { - var text = "{{#names}}{{name}}{{/names}}"; - var expected = "MoeLarryCurlyShemp"; - var t = Hogan.compile(text); - var s = t.render({ names: [{name: "Moe"}, {name: "Larry"}, {name: "Curly"}, {name: "Shemp"}] }) - is(s, expected, "Shootout Array compiled correctly"); -} - -function testShootOutObject() { - var text = "{{#person}}{{name}}{{age}}{{/person}}"; - var expected = "Larry45"; - var t = Hogan.compile(text) - var s = t.render({ person: { name: "Larry", age: 45 } }) - is(s, expected, "Shootout Object compiled correctly"); -} - -function testShootOutPartial() { - var text = "{{#peeps}}{{>replace}}{{/peeps}}"; - var t = Hogan.compile(text); - var partial = Hogan.compile(" Hello {{name}}! You have {{count}} new messages."); - var s = t.render({ peeps: [{name: "Moe", count: 15}, {name: "Larry", count: 5}, {name: "Curly", count: 2}] }, { replace: partial }); - var expected = " Hello Moe! You have 15 new messages. Hello Larry! You have 5 new messages. Hello Curly! You have 2 new messages."; - is(s, expected, "Shootout Partial compiled correctly"); -} - -function testShootOutRecurse() { - var text = "{{name}}{{#kids}}{{>recursion}}{{/kids}}"; - var t = Hogan.compile(text); - var partial = Hogan.compile("{{name}}{{#kids}}{{>recursion}}{{/kids}}"); - var s = t.render({ - name: '1', - kids: [ - { - name: '1.1', - kids: [ - { name: '1.1.1', kids: [] } - ] - } - ] - }, { recursion: partial }); - var expected = "11.11.1.1"; - is(s, expected, "Shootout Recurse compiled correctly"); -} - -function testShootOutFilter() { - var text = "{{#filter}}foo {{bar}}{{/filter}}"; - var t = Hogan.compile(text); - var s = t.render({ - filter: function() { - return function(text, render) { - return render(text).toUpperCase(); - } - }, - bar: "bar" - }); - var expected = "FOO BAR" - is(s, expected, "Shootout Filter compiled correctly"); -} - -function testShootOutComplex() { - var text = - "<h1>{{header}}</h1>" + - "{{#hasItems}}" + - "<ul>" + - "{{#items}}" + - "{{#current}}" + - "<li><strong>{{name}}</strong></li>" + - "{{/current}}" + - "{{^current}}" + - "<li><a href=\"{{url}}\">{{name}}</a></li>" + - "{{/current}}" + - "{{/items}}" + - "</ul>" + - "{{/hasItems}}" + - "{{^hasItems}}" + - "<p>The list is empty.</p>" + - "{{/hasItems}}"; - - var expected = "<h1>Colors</h1><ul><li><strong>red</strong></li><li><a href=\"#Green\">green</a></li><li><a href=\"#Blue\">blue</a></li></ul>"; - var t = Hogan.compile(text) - var s = t.render({ - header: function() { - return "Colors"; - }, - items: [ - {name: "red", current: true, url: "#Red"}, - {name: "green", current: false, url: "#Green"}, - {name: "blue", current: false, url: "#Blue"} - ], - hasItems: function() { - return this.items.length !== 0; - }, - empty: function() { - return this.items.length === 0; - } - }) - - is(s, expected, "Shootout Complex compiled correctly"); -} - -function testRenderOutput() { - if (doc) return - var fs = require('fs'); - var inPath = 'test/templates'; - var outPath = 'test/html'; - - fs.readdirSync(inPath).forEach(function (file) { - var i = fs.readFileSync([inPath, file].join('/'), 'utf-8'); - var t = Hogan.compile(i); - var r = t.render({}); - var o = fs.readFileSync([outPath, file].join('/').replace(/mustache$/, 'html')).toString(); - is(r === o, true, file + ' should correctly render html') - }) -} - -function testDefaultRenderImpl() { - var ht = new Hogan.Template(); - is(ht.render() === '', true, 'default renderImpl returns an array.'); -} - - -function appendText(el, text) { - var textNode = document.createTextNode(text); - el.appendChild(textNode); - el.appendChild(document.createElement('br')); -} - -if (!this["output"]) { - var output = function (s) { - return doc ? appendText(doc.getElementById('console'), s) : console.log(s); - }; -} -var passed = 0; -var failed = 0; - -function is(got, expected, msg) { - if (got === expected) { - output("OK: " + msg); - ++passed; - } else { - output("FAIL: " + msg); - output("Expected |" + expected + "|"); - output(" Got |" + got + "|"); - ++failed; - } -} - -function complete() { - output("\nTests Complete"); - output("--------------"); - output("Passed: " + passed); - output("Failed: " + failed); - output("\n"); -} - -function runTests() { - output("Tests Starting"); - output("--------------"); - testScanTextNoTags(); - testScanOneTag(); - testScanMultipleTags(); - testScanSectionOpen(); - testScanSectionClose(); - testScanSection(); - testScanSectionInContent(); - testScanNegativeSection(); - testScanPartial(); - testScanBackwardPartial(); - testScanAmpersandNoEscapeTag(); - testScanTripleStache(); - testScanSectionWithTripleStacheInside(); - testScanSetDelimiter(); - testScanResetDelimiter(); - testSetDelimiterWithWhitespace(); - testSingleCharDelimiter(); - testParseBasic(); - testParseVariables(); - testParseSection(); - testParseIndexes(); - testParseNegativeSection(); - testParseNestedSections(); - testMissingClosingTag(); - testBadNesting(); - testBasicOutput(); - //testBasicOutputAsString(); - testOneVariable(); - //testOneVariableAsString(); - testMultipleVariables(); - testNumberValues(); - testObjectRender(); - testObjectToStringRender(); - testArrayRender(); - testEscaping(); - testMustacheInjection(); - testTripleStache(); - testAmpNoEscaping(); - testPartial(); - testNestedPartials(); - testNegativeSection(); - testSectionElision(); - testSectionObjectContext(); - testSectionArrayContext(); - testRenderWithWhitespace(); - testRenderWithWhitespaceAroundTripleStache(); - testRenderWithWhitespaceAroundAmpersand(); - testFalsyVariableNoRender(); - testRenderOutput(); - testDefaultRenderImpl(); - testSectionExtensions(); - testMisnestedSectionExtensions(); - testNestedSection(); - testShootOutString(); - testShootOutReplace(); - testShootOutArray(); - testShootOutObject(); - testShootOutPartial(); - testShootOutRecurse(); - testShootOutFilter(); - testShootOutComplex(); - testDottedNames(); - testImplicitIterator(); - testPartialsAndDelimiters(); - testStringPartials(); - testMissingPartials(); - testIndentedStandaloneComment(); - testNewLineBetweenDelimiterChanges(); - testMustacheJSApostrophe(); - testMustacheJSArrayOfImplicitPartials(); - testMustacheJSArrayOfPartials(); - testMustacheJSArrayOfStrings(); - testMustacheJSUndefinedString(); - testMustacheJSTripleStacheAltDelimiter(); - complete(); -} - -if (doc) { - window.onload = runTests; -} else { - runTests(); -} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/mustache.js b/docs/build/node_modules/hogan.js/test/mustache.js deleted file mode 100644 index b2d8ebc51aa9763d8b99f7fc85628105a9e41a65..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/mustache.js +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2011 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 doc = this['document']; -var fs = require('fs'); - -var passed = 0; -var failed = 0; - -if (!this['output']) { - var output = function (string) { - return doc ? doc.write(string + '<br/>') : console.log(string); - }; -} - -var Hogan = require(__dirname + '/../lib/hogan'); -var template = fs.readFileSync(__dirname + '/../lib/template.js').toString(); -var compiler = fs.readFileSync(__dirname + '/../lib/compiler.js').toString(); -var mustache_wrapper = fs.readFileSync(__dirname + '/../wrappers/mustache.js.mustache').toString(); - -// Create a Mustache.js emulator from the distribution template -var engines = (new Function(Hogan.compile(mustache_wrapper).render({template: template, compiler: compiler}) + - '; return {Hogan: Hogan, Mustache: Mustache};'))(); - -var Mustache = engines.Mustache; -var Hogan2 = engines.Hogan; - - -// sanity check -is(Mustache.hasOwnProperty('to_html'), true, 'Mustache has to_html method.'); - -// Check for Mustache.js partial resolution behavior. -var context = { - foo: 'bar', - mypartial: { - baz: 'qux' - } -} -var text = 'abc {{foo}} def {{>mypartial}} ghi'; -var partialText = '{{baz}}'; -var s = Mustache.to_html(text, context, {'mypartial': partialText}); -is(s, 'abc bar def qux ghi', 'Correct emulation of Mustache.js partial-name-in-context resolution.'); - -// Now check to see that the Hogan resolution is unaffected. -var t = Hogan2.compile(text); -s = t.render(context, {'mypartial': partialText}); -is(s, 'abc bar def ghi', 'Hogan behavior not changed by Mustache.js emulation.'); - -// Check for sendFun behavior -var buf = ""; -function send(s) { - buf += "-FOO " + s + " FOO-"; -} -var s = Mustache.to_html(text, context, {'mypartial': partialText}, send); -is(buf, '-FOO abc bar def qux ghi FOO-', 'Correct emulation of Mustache.js sendFun.'); - - -function is(got, expected, msg) { - if (got === expected) { - output("OK: " + msg); - ++passed; - } else { - output("FAIL: " + msg); - output("Expected |" + expected + "|"); - output(" Got |" + got + "|"); - ++failed; - } -} - -function complete() { - output("\nTests Complete"); - output("--------------"); - output("Passed: " + passed); - output("Failed: " + failed); - output("\n"); -} - -complete(); \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec.js b/docs/build/node_modules/hogan.js/test/spec.js deleted file mode 100644 index 15b4d8e19aa341fd0bf8e670f0f208a949e89235..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec.js +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright 2011 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 Hogan = Hogan || require('../lib/hogan'); -var doc = this["document"]; -var fs = require('fs'); - -var passed = 0; -var failed = 0; - -if (!this["output"]) { - var output = function (string) { - return doc ? doc.write(string + '<br/>') : console.log(string); - }; -} - -function runTest(tests) { - tests.forEach(function(test) { - var partials = {}; - for (var i in test.partials) { - partials[i] = Hogan.compile(test.partials[i]); - } - var t = Hogan.compile(test.template); - - if (test.data.lambda) { - var func = (new Function ('return ' + test.data.lambda.js)()); - test.data.lambda = function() { return func; }; - } - - var s = t.render(test.data, partials); - is(s, test.expected, test.name + ': ' + test.desc); - }); -} - -var testDir = './test/spec/specs'; -var files = fs.readdirSync(testDir) - .filter(function(f) { return f.indexOf('.json') > 0; }) - .map(function(f) { return testDir + '/' + f}); - -for (var i = 0; i < files.length; i++) { - var test = JSON.parse(fs.readFileSync(files[i]).toString()); - runTest(test.tests); -} - -function is(got, expected, msg) { - if (got === expected) { - output("OK: " + msg); - ++passed; - } else { - output("FAIL: " + msg); - output("Expected |" + expected + "|"); - output(" Got |" + got + "|"); - ++failed; - } -} - -function complete() { - output("\nTests Complete"); - output("--------------"); - output("Passed: " + passed); - output("Failed: " + failed); - output("\n"); -} - -complete(); diff --git a/docs/build/node_modules/hogan.js/test/spec/Changes b/docs/build/node_modules/hogan.js/test/spec/Changes deleted file mode 100644 index bb39b9823ed846bc3d5c17ce3cb71c17b2a47a30..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/Changes +++ /dev/null @@ -1,31 +0,0 @@ -2011-03-20: v1.1.2 - Added tests for standalone tags at string boundaries. - Added tests for rendering lambda returns after delimiter changes. - -2011-03-20: v1.0.3 - Added tests for standalone tags at string boundaries. - Added tests for rendering lambda returns after delimiter changes. - -2011-03-05: v1.1.1 - Added tests for indented inline sections. - Added tests for Windows-style newlines. - -2011-03-05: v1.0.2 - Added tests for indented inline sections. - Added tests for Windows-style newlines. - -2011-03-04: v1.1.0 - Implicit iterators. - A single period (`.`) may now be used as a name in Interpolation tags, - which represents the top of stack (cast as a String). - Dotted names. - Names containing one or more periods should be resolved as chained - properties; naïvely, this is like nesting section tags, but with some - built-in scoping protections. - -2011-03-02: v1.0.1 - Clarifying a point in the README about version compliance. - Adding high-level documentation to each spec file. - -2011-02-28: v1.0.0 - Initial Release diff --git a/docs/build/node_modules/hogan.js/test/spec/README.md b/docs/build/node_modules/hogan.js/test/spec/README.md deleted file mode 100644 index b01b1bbdb7bb84b6ca1755b1ac57cc90610bb736..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/README.md +++ /dev/null @@ -1,65 +0,0 @@ -The repository at https://github.com/mustache/spec is the formal standard for -Mustache. It defines both normal usage and edge-case behavior for libraries -parsing the Mustache templating language (or a superset thereof). - -The specification is developed as a series of YAML files, under the `specs` -directory. - -Versioning ----------- -This specification is being [semantically versioned](http://semver.org). -Roughly described, major version changes will always represent backwards -incompatible changes, minor version changes will always represent new language -features and will be backwards compatible, and patch ('tiny') version changes -will always be bug fixes. For the purposes of semantic versioning, the public -API is the contents of the `specs` directory and the algorithm for testing -against it. - -Mustache implementations SHOULD report the most recent version of the spec -(major and minor version numbers). If an implementation has support for any -optional modules, they SHOULD indicate so with a remark attached to the -version number (e.g. "vX.Y, including lambdas" or "v.X.Y+λ"). It is -RECOMMENDED that implementations not supporting at least v1.0.0 of this spec -refer to themselves as "Mustache-like", or "Mustache-inspired". - -Alternate Formats ------------------ - -Since YAML is a reasonably complex format that not every language has good -tools for working with, we also provide JSON versions of the specs on a -best-effort basis. - -These should be identical to the YAML specifications, but if you find the need -to regenerate them, they can be trivially rebuilt by invoking `rake build`. - -It is also worth noting that some specifications (notably, the lambda module) -rely on YAML "tags" to denote special types of data (e.g. source code). Since -JSON offers no way to denote this, a special key ("`__tag__`") is injected -with the name of the tag as its value. See `TESTING.md` for more information -about handling tagged data. - -Optional Modules ----------------- - -Specification files beginning with a tilde (`~`) describe optional modules. -At present, the only module being described as optional is regarding support -for lambdas. As a guideline, a module may be a candidate for optionality -when: - - * It does not affect the core syntax of the language. - * It does not significantly affect the output of rendered templates. - * It concerns implementation language features or data types that are not - common to or core in every targeted language. - * The lack of support by an implementation does not diminish the usage of - Mustache in the target language. - -As an example, the lambda module is primarily concerned with the handling of a -particular data type (code). This is a type of data that may be difficult to -support in some languages, and users of those languages will not see the lack -as an 'inconsistency' between implementations. - -Support for specific pragmas or syntax extensions, however, are best managed -outside this core specification, as adjunct specifications. - -Implementors are strongly encouraged to support any and all modules they are -reasonably capable of supporting. diff --git a/docs/build/node_modules/hogan.js/test/spec/Rakefile b/docs/build/node_modules/hogan.js/test/spec/Rakefile deleted file mode 100644 index 5254ce65adaf4e62605657432aaa80de0d02f553..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/Rakefile +++ /dev/null @@ -1,27 +0,0 @@ -require 'json' -require 'yaml' - -# Our custom YAML tags must retain their magic. -%w[ code ].each do |tag| - YAML::add_builtin_type(tag) { |_,val| val.merge(:__tag__ => tag) } -end - -desc 'Build all alternate versions of the specs.' -multitask :build => [ 'build:json' ] - -namespace :build do - note = 'Do not edit this file; changes belong in the appropriate YAML file.' - - desc 'Build JSON versions of the specs.' - task :json do - rm(Dir['specs/*.json'], :verbose => false) - Dir.glob('specs/*.yml').each do |filename| - json_file = filename.gsub('.yml', '.json') - - File.open(json_file, 'w') do |file| - doc = YAML.load_file(filename) - file << doc.merge(:__ATTN__ => note).to_json() - end - end - end -end diff --git a/docs/build/node_modules/hogan.js/test/spec/TESTING.md b/docs/build/node_modules/hogan.js/test/spec/TESTING.md deleted file mode 100644 index d2ca374953ddf1fd737b033c772e86c1fa9909dd..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/TESTING.md +++ /dev/null @@ -1,46 +0,0 @@ -Testing your Mustache implementation against this specification should be -relatively simple. If you have a readily available testing framework on your -platform, your task may be even simpler. - -In general, the process for each `.yml` file is as follows: - -1. Use a YAML parser to load the file. - -2. For each test in the 'tests' array: - - 1. Ensure that each element of the 'partials' hash (if it exists) is - stored in a place where the interpreter will look for it. - - 2. If your implementation will not support lambdas, feel free to skip over - the optional '~lambdas.yml' file. - - 2.1. If your implementation will support lambdas, ensure that each member of - 'data' tagged with '!code' is properly processed into a language- - specific lambda reference. - - * e.g. Given this YAML data hash: - - `{ x: !code { ruby: 'proc { "x" }', perl: 'sub { "x" }' } }` - - a Ruby-based Mustache implementation would process it such that it - was equivalent to this Ruby hash: - - `{ 'x' => proc { "x" } }` - - * If your implementation language does not currently have lambda - examples in the spec, feel free to implement them and send a pull - request. - - * The JSON version of the spec represents these tagged values as a hash - with a '`__tag__`' key of 'code'. - - 3. Render the template (stored in the 'template' key) with the given 'data' - hash. - - 4. Compare the results of your rendering against the 'expected' value; any - differences should be reported, along with any useful debugging - information. - - * Of note, the 'desc' key contains a rough one-line description of the - behavior being tested -- this is most useful in conjunction with the - file name and test 'name'. diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/comments.json b/docs/build/node_modules/hogan.js/test/spec/specs/comments.json deleted file mode 100644 index 30cb927e6262de2a5474cd9bce2f21301770f43d..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/comments.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Comment tags represent content that should never appear in the resulting\noutput.\n\nThe tag's content may contain any substring (including newlines) EXCEPT the\nclosing delimiter.\n\nComment tags SHOULD be treated as standalone when appropriate.\n","tests":[{"name":"Inline","data":{},"expected":"1234567890","template":"12345{{! Comment Block! }}67890","desc":"Comment blocks should be removed from the template."},{"name":"Multiline","data":{},"expected":"1234567890\n","template":"12345{{!\n This is a\n multi-line comment...\n}}67890\n","desc":"Multiline comments should be permitted."},{"name":"Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n{{! Comment Block! }}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Indented Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n {{! Indented Comment Block! }}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Standalone Line Endings","data":{},"expected":"|\r\n|","template":"|\r\n{{! Standalone Comment }}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags."},{"name":"Standalone Without Previous Line","data":{},"expected":"!","template":" {{! I'm Still Standalone }}\n!","desc":"Standalone tags should not require a newline to precede them."},{"name":"Standalone Without Newline","data":{},"expected":"!\n","template":"!\n {{! I'm Still Standalone }}","desc":"Standalone tags should not require a newline to follow them."},{"name":"Multiline Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n{{!\nSomething's going on here...\n}}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Indented Multiline Standalone","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n {{!\n Something's going on here...\n }}\nEnd.\n","desc":"All standalone comment lines should be removed."},{"name":"Indented Inline","data":{},"expected":" 12 \n","template":" 12 {{! 34 }}\n","desc":"Inline comments should not strip whitespace"},{"name":"Surrounding Whitespace","data":{},"expected":"12345 67890","template":"12345 {{! Comment Block! }} 67890","desc":"Comment removal should preserve surrounding whitespace."}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/comments.yml b/docs/build/node_modules/hogan.js/test/spec/specs/comments.yml deleted file mode 100644 index 7b14c7f3278d7a306b94117a8bcabcc780f1cd58..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/comments.yml +++ /dev/null @@ -1,103 +0,0 @@ -overview: | - Comment tags represent content that should never appear in the resulting - output. - - The tag's content may contain any substring (including newlines) EXCEPT the - closing delimiter. - - Comment tags SHOULD be treated as standalone when appropriate. -tests: - - name: Inline - desc: Comment blocks should be removed from the template. - data: { } - template: '12345{{! Comment Block! }}67890' - expected: '1234567890' - - - name: Multiline - desc: Multiline comments should be permitted. - data: { } - template: | - 12345{{! - This is a - multi-line comment... - }}67890 - expected: | - 1234567890 - - - name: Standalone - desc: All standalone comment lines should be removed. - data: { } - template: | - Begin. - {{! Comment Block! }} - End. - expected: | - Begin. - End. - - - name: Indented Standalone - desc: All standalone comment lines should be removed. - data: { } - template: | - Begin. - {{! Indented Comment Block! }} - End. - expected: | - Begin. - End. - - - name: Standalone Line Endings - desc: '"\r\n" should be considered a newline for standalone tags.' - data: { } - template: "|\r\n{{! Standalone Comment }}\r\n|" - expected: "|\r\n|" - - - name: Standalone Without Previous Line - desc: Standalone tags should not require a newline to precede them. - data: { } - template: " {{! I'm Still Standalone }}\n!" - expected: "!" - - - name: Standalone Without Newline - desc: Standalone tags should not require a newline to follow them. - data: { } - template: "!\n {{! I'm Still Standalone }}" - expected: "!\n" - - - name: Multiline Standalone - desc: All standalone comment lines should be removed. - data: { } - template: | - Begin. - {{! - Something's going on here... - }} - End. - expected: | - Begin. - End. - - - name: Indented Multiline Standalone - desc: All standalone comment lines should be removed. - data: { } - template: | - Begin. - {{! - Something's going on here... - }} - End. - expected: | - Begin. - End. - - - name: Indented Inline - desc: Inline comments should not strip whitespace - data: { } - template: " 12 {{! 34 }}\n" - expected: " 12 \n" - - - name: Surrounding Whitespace - desc: Comment removal should preserve surrounding whitespace. - data: { } - template: '12345 {{! Comment Block! }} 67890' - expected: '12345 67890' diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.json b/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.json deleted file mode 100644 index fcf95888db309163d34dbc523d11a2138bcbefd2..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Set Delimiter tags are used to change the tag delimiters for all content\nfollowing the tag in the current compilation unit.\n\nThe tag's content MUST be any two non-whitespace sequences (separated by\nwhitespace) EXCEPT an equals sign ('=') followed by the current closing\ndelimiter.\n\nSet Delimiter tags SHOULD be treated as standalone when appropriate.\n","tests":[{"name":"Pair Behavior","data":{"text":"Hey!"},"expected":"(Hey!)","template":"{{=<% %>=}}(<%text%>)","desc":"The equals sign (used on both sides) should permit delimiter changes."},{"name":"Special Characters","data":{"text":"It worked!"},"expected":"(It worked!)","template":"({{=[ ]=}}[text])","desc":"Characters with special meaning regexen should be valid delimiters."},{"name":"Sections","data":{"section":true,"data":"I got interpolated."},"expected":"[\n I got interpolated.\n |data|\n\n {{data}}\n I got interpolated.\n]\n","template":"[\n{{#section}}\n {{data}}\n |data|\n{{/section}}\n\n{{= | | =}}\n|#section|\n {{data}}\n |data|\n|/section|\n]\n","desc":"Delimiters set outside sections should persist."},{"name":"Inverted Sections","data":{"section":false,"data":"I got interpolated."},"expected":"[\n I got interpolated.\n |data|\n\n {{data}}\n I got interpolated.\n]\n","template":"[\n{{^section}}\n {{data}}\n |data|\n{{/section}}\n\n{{= | | =}}\n|^section|\n {{data}}\n |data|\n|/section|\n]\n","desc":"Delimiters set outside inverted sections should persist."},{"name":"Partial Inheritence","data":{"value":"yes"},"expected":"[ .yes. ]\n[ .yes. ]\n","template":"[ {{>include}} ]\n{{= | | =}}\n[ |>include| ]\n","desc":"Delimiters set in a parent template should not affect a partial.","partials":{"include":".{{value}}."}},{"name":"Post-Partial Behavior","data":{"value":"yes"},"expected":"[ .yes. .yes. ]\n[ .yes. .|value|. ]\n","template":"[ {{>include}} ]\n[ .{{value}}. .|value|. ]\n","desc":"Delimiters set in a partial should not affect the parent template.","partials":{"include":".{{value}}. {{= | | =}} .|value|."}},{"name":"Surrounding Whitespace","data":{},"expected":"| |","template":"| {{=@ @=}} |","desc":"Surrounding whitespace should be left untouched."},{"name":"Outlying Whitespace (Inline)","data":{},"expected":" | \n","template":" | {{=@ @=}}\n","desc":"Whitespace should be left untouched."},{"name":"Standalone Tag","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n{{=@ @=}}\nEnd.\n","desc":"Standalone lines should be removed from the template."},{"name":"Indented Standalone Tag","data":{},"expected":"Begin.\nEnd.\n","template":"Begin.\n {{=@ @=}}\nEnd.\n","desc":"Indented standalone lines should be removed from the template."},{"name":"Standalone Line Endings","data":{},"expected":"|\r\n|","template":"|\r\n{{= @ @ =}}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags."},{"name":"Standalone Without Previous Line","data":{},"expected":"=","template":" {{=@ @=}}\n=","desc":"Standalone tags should not require a newline to precede them."},{"name":"Standalone Without Newline","data":{},"expected":"=\n","template":"=\n {{=@ @=}}","desc":"Standalone tags should not require a newline to follow them."},{"name":"Pair with Padding","data":{},"expected":"||","template":"|{{= @ @ =}}|","desc":"Superfluous in-tag whitespace should be ignored."}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.yml b/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.yml deleted file mode 100644 index ce80b17cd183d0b8e6c4934944adcb331ee7980f..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/delimiters.yml +++ /dev/null @@ -1,158 +0,0 @@ -overview: | - Set Delimiter tags are used to change the tag delimiters for all content - following the tag in the current compilation unit. - - The tag's content MUST be any two non-whitespace sequences (separated by - whitespace) EXCEPT an equals sign ('=') followed by the current closing - delimiter. - - Set Delimiter tags SHOULD be treated as standalone when appropriate. -tests: - - name: Pair Behavior - desc: The equals sign (used on both sides) should permit delimiter changes. - data: { text: 'Hey!' } - template: '{{=<% %>=}}(<%text%>)' - expected: '(Hey!)' - - - name: Special Characters - desc: Characters with special meaning regexen should be valid delimiters. - data: { text: 'It worked!' } - template: '({{=[ ]=}}[text])' - expected: '(It worked!)' - - - name: Sections - desc: Delimiters set outside sections should persist. - data: { section: true, data: 'I got interpolated.' } - template: | - [ - {{#section}} - {{data}} - |data| - {{/section}} - - {{= | | =}} - |#section| - {{data}} - |data| - |/section| - ] - expected: | - [ - I got interpolated. - |data| - - {{data}} - I got interpolated. - ] - - - name: Inverted Sections - desc: Delimiters set outside inverted sections should persist. - data: { section: false, data: 'I got interpolated.' } - template: | - [ - {{^section}} - {{data}} - |data| - {{/section}} - - {{= | | =}} - |^section| - {{data}} - |data| - |/section| - ] - expected: | - [ - I got interpolated. - |data| - - {{data}} - I got interpolated. - ] - - - name: Partial Inheritence - desc: Delimiters set in a parent template should not affect a partial. - data: { value: 'yes' } - partials: - include: '.{{value}}.' - template: | - [ {{>include}} ] - {{= | | =}} - [ |>include| ] - expected: | - [ .yes. ] - [ .yes. ] - - - name: Post-Partial Behavior - desc: Delimiters set in a partial should not affect the parent template. - data: { value: 'yes' } - partials: - include: '.{{value}}. {{= | | =}} .|value|.' - template: | - [ {{>include}} ] - [ .{{value}}. .|value|. ] - expected: | - [ .yes. .yes. ] - [ .yes. .|value|. ] - - # Whitespace Sensitivity - - - name: Surrounding Whitespace - desc: Surrounding whitespace should be left untouched. - data: { } - template: '| {{=@ @=}} |' - expected: '| |' - - - name: Outlying Whitespace (Inline) - desc: Whitespace should be left untouched. - data: { } - template: " | {{=@ @=}}\n" - expected: " | \n" - - - name: Standalone Tag - desc: Standalone lines should be removed from the template. - data: { } - template: | - Begin. - {{=@ @=}} - End. - expected: | - Begin. - End. - - - name: Indented Standalone Tag - desc: Indented standalone lines should be removed from the template. - data: { } - template: | - Begin. - {{=@ @=}} - End. - expected: | - Begin. - End. - - - name: Standalone Line Endings - desc: '"\r\n" should be considered a newline for standalone tags.' - data: { } - template: "|\r\n{{= @ @ =}}\r\n|" - expected: "|\r\n|" - - - name: Standalone Without Previous Line - desc: Standalone tags should not require a newline to precede them. - data: { } - template: " {{=@ @=}}\n=" - expected: "=" - - - name: Standalone Without Newline - desc: Standalone tags should not require a newline to follow them. - data: { } - template: "=\n {{=@ @=}}" - expected: "=\n" - - # Whitespace Insensitivity - - - name: Pair with Padding - desc: Superfluous in-tag whitespace should be ignored. - data: { } - template: '|{{= @ @ =}}|' - expected: '||' diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.json b/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.json deleted file mode 100644 index d1a1a328971b0bfd5e9dca9461015ad1ae9565ff..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Interpolation tags are used to integrate dynamic content into the template.\n\nThe tag's content MUST be a non-whitespace character sequence NOT containing\nthe current closing delimiter.\n\nThis tag's content names the data to replace the tag. A single period (`.`)\nindicates that the item currently sitting atop the context stack should be\nused; otherwise, name resolution is as follows:\n 1) Split the name on periods; the first part is the name to resolve, any\n remaining parts should be retained.\n 2) Walk the context stack from top to bottom, finding the first context\n that is a) a hash containing the name as a key OR b) an object responding\n to a method with the given name.\n 3) If the context is a hash, the data is the value associated with the\n name.\n 4) If the context is an object, the data is the value returned by the\n method with the given name.\n 5) If any name parts were retained in step 1, each should be resolved\n against a context stack containing only the result from the former\n resolution. If any part fails resolution, the result should be considered\n falsey, and should interpolate as the empty string.\nData should be coerced into a string (and escaped, if appropriate) before\ninterpolation.\n\nThe Interpolation tags MUST NOT be treated as standalone.\n","tests":[{"name":"No Interpolation","data":{},"expected":"Hello from {Mustache}!\n","template":"Hello from {Mustache}!\n","desc":"Mustache-free templates should render as-is."},{"name":"Basic Interpolation","data":{"subject":"world"},"expected":"Hello, world!\n","template":"Hello, {{subject}}!\n","desc":"Unadorned tags should interpolate content into the template."},{"name":"HTML Escaping","data":{"forbidden":"& \" < >"},"expected":"These characters should be HTML escaped: & " < >\n","template":"These characters should be HTML escaped: {{forbidden}}\n","desc":"Basic interpolation should be HTML escaped."},{"name":"Triple Mustache","data":{"forbidden":"& \" < >"},"expected":"These characters should not be HTML escaped: & \" < >\n","template":"These characters should not be HTML escaped: {{{forbidden}}}\n","desc":"Triple mustaches should interpolate without HTML escaping."},{"name":"Ampersand","data":{"forbidden":"& \" < >"},"expected":"These characters should not be HTML escaped: & \" < >\n","template":"These characters should not be HTML escaped: {{&forbidden}}\n","desc":"Ampersand should interpolate without HTML escaping."},{"name":"Basic Integer Interpolation","data":{"mph":85},"expected":"\"85 miles an hour!\"","template":"\"{{mph}} miles an hour!\"","desc":"Integers should interpolate seamlessly."},{"name":"Triple Mustache Integer Interpolation","data":{"mph":85},"expected":"\"85 miles an hour!\"","template":"\"{{{mph}}} miles an hour!\"","desc":"Integers should interpolate seamlessly."},{"name":"Ampersand Integer Interpolation","data":{"mph":85},"expected":"\"85 miles an hour!\"","template":"\"{{&mph}} miles an hour!\"","desc":"Integers should interpolate seamlessly."},{"name":"Basic Decimal Interpolation","data":{"power":1.21},"expected":"\"1.21 jiggawatts!\"","template":"\"{{power}} jiggawatts!\"","desc":"Decimals should interpolate seamlessly with proper significance."},{"name":"Triple Mustache Decimal Interpolation","data":{"power":1.21},"expected":"\"1.21 jiggawatts!\"","template":"\"{{{power}}} jiggawatts!\"","desc":"Decimals should interpolate seamlessly with proper significance."},{"name":"Ampersand Decimal Interpolation","data":{"power":1.21},"expected":"\"1.21 jiggawatts!\"","template":"\"{{&power}} jiggawatts!\"","desc":"Decimals should interpolate seamlessly with proper significance."},{"name":"Basic Context Miss Interpolation","data":{},"expected":"I () be seen!","template":"I ({{cannot}}) be seen!","desc":"Failed context lookups should default to empty strings."},{"name":"Triple Mustache Context Miss Interpolation","data":{},"expected":"I () be seen!","template":"I ({{{cannot}}}) be seen!","desc":"Failed context lookups should default to empty strings."},{"name":"Ampersand Context Miss Interpolation","data":{},"expected":"I () be seen!","template":"I ({{&cannot}}) be seen!","desc":"Failed context lookups should default to empty strings."},{"name":"Dotted Names - Basic Interpolation","data":{"person":{"name":"Joe"}},"expected":"\"Joe\" == \"Joe\"","template":"\"{{person.name}}\" == \"{{#person}}{{name}}{{/person}}\"","desc":"Dotted names should be considered a form of shorthand for sections."},{"name":"Dotted Names - Triple Mustache Interpolation","data":{"person":{"name":"Joe"}},"expected":"\"Joe\" == \"Joe\"","template":"\"{{{person.name}}}\" == \"{{#person}}{{{name}}}{{/person}}\"","desc":"Dotted names should be considered a form of shorthand for sections."},{"name":"Dotted Names - Ampersand Interpolation","data":{"person":{"name":"Joe"}},"expected":"\"Joe\" == \"Joe\"","template":"\"{{&person.name}}\" == \"{{#person}}{{&name}}{{/person}}\"","desc":"Dotted names should be considered a form of shorthand for sections."},{"name":"Dotted Names - Arbitrary Depth","data":{"a":{"b":{"c":{"d":{"e":{"name":"Phil"}}}}}},"expected":"\"Phil\" == \"Phil\"","template":"\"{{a.b.c.d.e.name}}\" == \"Phil\"","desc":"Dotted names should be functional to any level of nesting."},{"name":"Dotted Names - Broken Chains","data":{"a":{}},"expected":"\"\" == \"\"","template":"\"{{a.b.c}}\" == \"\"","desc":"Any falsey value prior to the last part of the name should yield ''."},{"name":"Dotted Names - Broken Chain Resolution","data":{"a":{"b":{}},"c":{"name":"Jim"}},"expected":"\"\" == \"\"","template":"\"{{a.b.c.name}}\" == \"\"","desc":"Each part of a dotted name should resolve only against its parent."},{"name":"Dotted Names - Initial Resolution","data":{"a":{"b":{"c":{"d":{"e":{"name":"Phil"}}}}},"b":{"c":{"d":{"e":{"name":"Wrong"}}}}},"expected":"\"Phil\" == \"Phil\"","template":"\"{{#a}}{{b.c.d.e.name}}{{/a}}\" == \"Phil\"","desc":"The first part of a dotted name should resolve as any other name."},{"name":"Interpolation - Surrounding Whitespace","data":{"string":"---"},"expected":"| --- |","template":"| {{string}} |","desc":"Interpolation should not alter surrounding whitespace."},{"name":"Triple Mustache - Surrounding Whitespace","data":{"string":"---"},"expected":"| --- |","template":"| {{{string}}} |","desc":"Interpolation should not alter surrounding whitespace."},{"name":"Ampersand - Surrounding Whitespace","data":{"string":"---"},"expected":"| --- |","template":"| {{&string}} |","desc":"Interpolation should not alter surrounding whitespace."},{"name":"Interpolation - Standalone","data":{"string":"---"},"expected":" ---\n","template":" {{string}}\n","desc":"Standalone interpolation should not alter surrounding whitespace."},{"name":"Triple Mustache - Standalone","data":{"string":"---"},"expected":" ---\n","template":" {{{string}}}\n","desc":"Standalone interpolation should not alter surrounding whitespace."},{"name":"Ampersand - Standalone","data":{"string":"---"},"expected":" ---\n","template":" {{&string}}\n","desc":"Standalone interpolation should not alter surrounding whitespace."},{"name":"Interpolation With Padding","data":{"string":"---"},"expected":"|---|","template":"|{{ string }}|","desc":"Superfluous in-tag whitespace should be ignored."},{"name":"Triple Mustache With Padding","data":{"string":"---"},"expected":"|---|","template":"|{{{ string }}}|","desc":"Superfluous in-tag whitespace should be ignored."},{"name":"Ampersand With Padding","data":{"string":"---"},"expected":"|---|","template":"|{{& string }}|","desc":"Superfluous in-tag whitespace should be ignored."}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.yml b/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.yml deleted file mode 100644 index 2237b55f8dcff288222100a2821516dddd38d360..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/interpolation.yml +++ /dev/null @@ -1,230 +0,0 @@ -overview: | - Interpolation tags are used to integrate dynamic content into the template. - - The tag's content MUST be a non-whitespace character sequence NOT containing - the current closing delimiter. - - This tag's content names the data to replace the tag. A single period (`.`) - indicates that the item currently sitting atop the context stack should be - used; otherwise, name resolution is as follows: - 1) Split the name on periods; the first part is the name to resolve, any - remaining parts should be retained. - 2) Walk the context stack from top to bottom, finding the first context - that is a) a hash containing the name as a key OR b) an object responding - to a method with the given name. - 3) If the context is a hash, the data is the value associated with the - name. - 4) If the context is an object, the data is the value returned by the - method with the given name. - 5) If any name parts were retained in step 1, each should be resolved - against a context stack containing only the result from the former - resolution. If any part fails resolution, the result should be considered - falsey, and should interpolate as the empty string. - Data should be coerced into a string (and escaped, if appropriate) before - interpolation. - - The Interpolation tags MUST NOT be treated as standalone. -tests: - - name: No Interpolation - desc: Mustache-free templates should render as-is. - data: { } - template: | - Hello from {Mustache}! - expected: | - Hello from {Mustache}! - - - name: Basic Interpolation - desc: Unadorned tags should interpolate content into the template. - data: { subject: "world" } - template: | - Hello, {{subject}}! - expected: | - Hello, world! - - - name: HTML Escaping - desc: Basic interpolation should be HTML escaped. - data: { forbidden: '& " < >' } - template: | - These characters should be HTML escaped: {{forbidden}} - expected: | - These characters should be HTML escaped: & " < > - - - name: Triple Mustache - desc: Triple mustaches should interpolate without HTML escaping. - data: { forbidden: '& " < >' } - template: | - These characters should not be HTML escaped: {{{forbidden}}} - expected: | - These characters should not be HTML escaped: & " < > - - - name: Ampersand - desc: Ampersand should interpolate without HTML escaping. - data: { forbidden: '& " < >' } - template: | - These characters should not be HTML escaped: {{&forbidden}} - expected: | - These characters should not be HTML escaped: & " < > - - - name: Basic Integer Interpolation - desc: Integers should interpolate seamlessly. - data: { mph: 85 } - template: '"{{mph}} miles an hour!"' - expected: '"85 miles an hour!"' - - - name: Triple Mustache Integer Interpolation - desc: Integers should interpolate seamlessly. - data: { mph: 85 } - template: '"{{{mph}}} miles an hour!"' - expected: '"85 miles an hour!"' - - - name: Ampersand Integer Interpolation - desc: Integers should interpolate seamlessly. - data: { mph: 85 } - template: '"{{&mph}} miles an hour!"' - expected: '"85 miles an hour!"' - - - name: Basic Decimal Interpolation - desc: Decimals should interpolate seamlessly with proper significance. - data: { power: 1.210 } - template: '"{{power}} jiggawatts!"' - expected: '"1.21 jiggawatts!"' - - - name: Triple Mustache Decimal Interpolation - desc: Decimals should interpolate seamlessly with proper significance. - data: { power: 1.210 } - template: '"{{{power}}} jiggawatts!"' - expected: '"1.21 jiggawatts!"' - - - name: Ampersand Decimal Interpolation - desc: Decimals should interpolate seamlessly with proper significance. - data: { power: 1.210 } - template: '"{{&power}} jiggawatts!"' - expected: '"1.21 jiggawatts!"' - - # Context Misses - - - name: Basic Context Miss Interpolation - desc: Failed context lookups should default to empty strings. - data: { } - template: "I ({{cannot}}) be seen!" - expected: "I () be seen!" - - - name: Triple Mustache Context Miss Interpolation - desc: Failed context lookups should default to empty strings. - data: { } - template: "I ({{{cannot}}}) be seen!" - expected: "I () be seen!" - - - name: Ampersand Context Miss Interpolation - desc: Failed context lookups should default to empty strings. - data: { } - template: "I ({{&cannot}}) be seen!" - expected: "I () be seen!" - - # Dotted Names - - - name: Dotted Names - Basic Interpolation - desc: Dotted names should be considered a form of shorthand for sections. - data: { person: { name: 'Joe' } } - template: '"{{person.name}}" == "{{#person}}{{name}}{{/person}}"' - expected: '"Joe" == "Joe"' - - - name: Dotted Names - Triple Mustache Interpolation - desc: Dotted names should be considered a form of shorthand for sections. - data: { person: { name: 'Joe' } } - template: '"{{{person.name}}}" == "{{#person}}{{{name}}}{{/person}}"' - expected: '"Joe" == "Joe"' - - - name: Dotted Names - Ampersand Interpolation - desc: Dotted names should be considered a form of shorthand for sections. - data: { person: { name: 'Joe' } } - template: '"{{&person.name}}" == "{{#person}}{{&name}}{{/person}}"' - expected: '"Joe" == "Joe"' - - - name: Dotted Names - Arbitrary Depth - desc: Dotted names should be functional to any level of nesting. - data: - a: { b: { c: { d: { e: { name: 'Phil' } } } } } - template: '"{{a.b.c.d.e.name}}" == "Phil"' - expected: '"Phil" == "Phil"' - - - name: Dotted Names - Broken Chains - desc: Any falsey value prior to the last part of the name should yield ''. - data: - a: { } - template: '"{{a.b.c}}" == ""' - expected: '"" == ""' - - - name: Dotted Names - Broken Chain Resolution - desc: Each part of a dotted name should resolve only against its parent. - data: - a: { b: { } } - c: { name: 'Jim' } - template: '"{{a.b.c.name}}" == ""' - expected: '"" == ""' - - - name: Dotted Names - Initial Resolution - desc: The first part of a dotted name should resolve as any other name. - data: - a: { b: { c: { d: { e: { name: 'Phil' } } } } } - b: { c: { d: { e: { name: 'Wrong' } } } } - template: '"{{#a}}{{b.c.d.e.name}}{{/a}}" == "Phil"' - expected: '"Phil" == "Phil"' - - # Whitespace Sensitivity - - - name: Interpolation - Surrounding Whitespace - desc: Interpolation should not alter surrounding whitespace. - data: { string: '---' } - template: '| {{string}} |' - expected: '| --- |' - - - name: Triple Mustache - Surrounding Whitespace - desc: Interpolation should not alter surrounding whitespace. - data: { string: '---' } - template: '| {{{string}}} |' - expected: '| --- |' - - - name: Ampersand - Surrounding Whitespace - desc: Interpolation should not alter surrounding whitespace. - data: { string: '---' } - template: '| {{&string}} |' - expected: '| --- |' - - - name: Interpolation - Standalone - desc: Standalone interpolation should not alter surrounding whitespace. - data: { string: '---' } - template: " {{string}}\n" - expected: " ---\n" - - - name: Triple Mustache - Standalone - desc: Standalone interpolation should not alter surrounding whitespace. - data: { string: '---' } - template: " {{{string}}}\n" - expected: " ---\n" - - - name: Ampersand - Standalone - desc: Standalone interpolation should not alter surrounding whitespace. - data: { string: '---' } - template: " {{&string}}\n" - expected: " ---\n" - - # Whitespace Insensitivity - - - name: Interpolation With Padding - desc: Superfluous in-tag whitespace should be ignored. - data: { string: "---" } - template: '|{{ string }}|' - expected: '|---|' - - - name: Triple Mustache With Padding - desc: Superfluous in-tag whitespace should be ignored. - data: { string: "---" } - template: '|{{{ string }}}|' - expected: '|---|' - - - name: Ampersand With Padding - desc: Superfluous in-tag whitespace should be ignored. - data: { string: "---" } - template: '|{{& string }}|' - expected: '|---|' diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/inverted.json b/docs/build/node_modules/hogan.js/test/spec/specs/inverted.json deleted file mode 100644 index c9b550b96428e5cc277aaacf3d46291ac3b726b8..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/inverted.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Inverted Section tags and End Section tags are used in combination to wrap a\nsection of the template.\n\nThese tags' content MUST be a non-whitespace character sequence NOT\ncontaining the current closing delimiter; each Inverted Section tag MUST be\nfollowed by an End Section tag with the same content within the same\nsection.\n\nThis tag's content names the data to replace the tag. Name resolution is as\nfollows:\n 1) Split the name on periods; the first part is the name to resolve, any\n remaining parts should be retained.\n 2) Walk the context stack from top to bottom, finding the first context\n that is a) a hash containing the name as a key OR b) an object responding\n to a method with the given name.\n 3) If the context is a hash, the data is the value associated with the\n name.\n 4) If the context is an object and the method with the given name has an\n arity of 1, the method SHOULD be called with a String containing the\n unprocessed contents of the sections; the data is the value returned.\n 5) Otherwise, the data is the value returned by calling the method with\n the given name.\n 6) If any name parts were retained in step 1, each should be resolved\n against a context stack containing only the result from the former\n resolution. If any part fails resolution, the result should be considered\n falsey, and should interpolate as the empty string.\nIf the data is not of a list type, it is coerced into a list as follows: if\nthe data is truthy (e.g. `!!data == true`), use a single-element list\ncontaining the data, otherwise use an empty list.\n\nThis section MUST NOT be rendered unless the data list is empty.\n\nInverted Section and End Section tags SHOULD be treated as standalone when\nappropriate.\n","tests":[{"name":"Falsey","data":{"boolean":false},"expected":"\"This should be rendered.\"","template":"\"{{^boolean}}This should be rendered.{{/boolean}}\"","desc":"Falsey sections should have their contents rendered."},{"name":"Truthy","data":{"boolean":true},"expected":"\"\"","template":"\"{{^boolean}}This should not be rendered.{{/boolean}}\"","desc":"Truthy sections should have their contents omitted."},{"name":"Context","data":{"context":{"name":"Joe"}},"expected":"\"\"","template":"\"{{^context}}Hi {{name}}.{{/context}}\"","desc":"Objects and hashes should behave like truthy values."},{"name":"List","data":{"list":[{"n":1},{"n":2},{"n":3}]},"expected":"\"\"","template":"\"{{^list}}{{n}}{{/list}}\"","desc":"Lists should behave like truthy values."},{"name":"Empty List","data":{"list":[]},"expected":"\"Yay lists!\"","template":"\"{{^list}}Yay lists!{{/list}}\"","desc":"Empty lists should behave like falsey values."},{"name":"Doubled","data":{"two":"second","bool":false},"expected":"* first\n* second\n* third\n","template":"{{^bool}}\n* first\n{{/bool}}\n* {{two}}\n{{^bool}}\n* third\n{{/bool}}\n","desc":"Multiple inverted sections per template should be permitted."},{"name":"Nested (Falsey)","data":{"bool":false},"expected":"| A B C D E |","template":"| A {{^bool}}B {{^bool}}C{{/bool}} D{{/bool}} E |","desc":"Nested falsey sections should have their contents rendered."},{"name":"Nested (Truthy)","data":{"bool":true},"expected":"| A E |","template":"| A {{^bool}}B {{^bool}}C{{/bool}} D{{/bool}} E |","desc":"Nested truthy sections should be omitted."},{"name":"Context Misses","data":{},"expected":"[Cannot find key 'missing'!]","template":"[{{^missing}}Cannot find key 'missing'!{{/missing}}]","desc":"Failed context lookups should be considered falsey."},{"name":"Dotted Names - Truthy","data":{"a":{"b":{"c":true}}},"expected":"\"\" == \"\"","template":"\"{{^a.b.c}}Not Here{{/a.b.c}}\" == \"\"","desc":"Dotted names should be valid for Inverted Section tags."},{"name":"Dotted Names - Falsey","data":{"a":{"b":{"c":false}}},"expected":"\"Not Here\" == \"Not Here\"","template":"\"{{^a.b.c}}Not Here{{/a.b.c}}\" == \"Not Here\"","desc":"Dotted names should be valid for Inverted Section tags."},{"name":"Dotted Names - Broken Chains","data":{"a":{}},"expected":"\"Not Here\" == \"Not Here\"","template":"\"{{^a.b.c}}Not Here{{/a.b.c}}\" == \"Not Here\"","desc":"Dotted names that cannot be resolved should be considered falsey."},{"name":"Surrounding Whitespace","data":{"boolean":false},"expected":" | \t|\t | \n","template":" | {{^boolean}}\t|\t{{/boolean}} | \n","desc":"Inverted sections should not alter surrounding whitespace."},{"name":"Internal Whitespace","data":{"boolean":false},"expected":" | \n | \n","template":" | {{^boolean}} {{! Important Whitespace }}\n {{/boolean}} | \n","desc":"Inverted should not alter internal whitespace."},{"name":"Indented Inline Sections","data":{"boolean":false},"expected":" NO\n WAY\n","template":" {{^boolean}}NO{{/boolean}}\n {{^boolean}}WAY{{/boolean}}\n","desc":"Single-line sections should not alter surrounding whitespace."},{"name":"Standalone Lines","data":{"boolean":false},"expected":"| This Is\n|\n| A Line\n","template":"| This Is\n{{^boolean}}\n|\n{{/boolean}}\n| A Line\n","desc":"Standalone lines should be removed from the template."},{"name":"Standalone Indented Lines","data":{"boolean":false},"expected":"| This Is\n|\n| A Line\n","template":"| This Is\n {{^boolean}}\n|\n {{/boolean}}\n| A Line\n","desc":"Standalone indented lines should be removed from the template."},{"name":"Standalone Line Endings","data":{"boolean":false},"expected":"|\r\n|","template":"|\r\n{{^boolean}}\r\n{{/boolean}}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags."},{"name":"Standalone Without Previous Line","data":{"boolean":false},"expected":"^\n/","template":" {{^boolean}}\n^{{/boolean}}\n/","desc":"Standalone tags should not require a newline to precede them."},{"name":"Standalone Without Newline","data":{"boolean":false},"expected":"^\n/\n","template":"^{{^boolean}}\n/\n {{/boolean}}","desc":"Standalone tags should not require a newline to follow them."},{"name":"Padding","data":{"boolean":false},"expected":"|=|","template":"|{{^ boolean }}={{/ boolean }}|","desc":"Superfluous in-tag whitespace should be ignored."}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/inverted.yml b/docs/build/node_modules/hogan.js/test/spec/specs/inverted.yml deleted file mode 100644 index 5f8e2b2f3c00d78106857d927908dcfdbb34fca5..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/inverted.yml +++ /dev/null @@ -1,193 +0,0 @@ -overview: | - Inverted Section tags and End Section tags are used in combination to wrap a - section of the template. - - These tags' content MUST be a non-whitespace character sequence NOT - containing the current closing delimiter; each Inverted Section tag MUST be - followed by an End Section tag with the same content within the same - section. - - This tag's content names the data to replace the tag. Name resolution is as - follows: - 1) Split the name on periods; the first part is the name to resolve, any - remaining parts should be retained. - 2) Walk the context stack from top to bottom, finding the first context - that is a) a hash containing the name as a key OR b) an object responding - to a method with the given name. - 3) If the context is a hash, the data is the value associated with the - name. - 4) If the context is an object and the method with the given name has an - arity of 1, the method SHOULD be called with a String containing the - unprocessed contents of the sections; the data is the value returned. - 5) Otherwise, the data is the value returned by calling the method with - the given name. - 6) If any name parts were retained in step 1, each should be resolved - against a context stack containing only the result from the former - resolution. If any part fails resolution, the result should be considered - falsey, and should interpolate as the empty string. - If the data is not of a list type, it is coerced into a list as follows: if - the data is truthy (e.g. `!!data == true`), use a single-element list - containing the data, otherwise use an empty list. - - This section MUST NOT be rendered unless the data list is empty. - - Inverted Section and End Section tags SHOULD be treated as standalone when - appropriate. -tests: - - name: Falsey - desc: Falsey sections should have their contents rendered. - data: { boolean: false } - template: '"{{^boolean}}This should be rendered.{{/boolean}}"' - expected: '"This should be rendered."' - - - name: Truthy - desc: Truthy sections should have their contents omitted. - data: { boolean: true } - template: '"{{^boolean}}This should not be rendered.{{/boolean}}"' - expected: '""' - - - name: Context - desc: Objects and hashes should behave like truthy values. - data: { context: { name: 'Joe' } } - template: '"{{^context}}Hi {{name}}.{{/context}}"' - expected: '""' - - - name: List - desc: Lists should behave like truthy values. - data: { list: [ { n: 1 }, { n: 2 }, { n: 3 } ] } - template: '"{{^list}}{{n}}{{/list}}"' - expected: '""' - - - name: Empty List - desc: Empty lists should behave like falsey values. - data: { list: [ ] } - template: '"{{^list}}Yay lists!{{/list}}"' - expected: '"Yay lists!"' - - - name: Doubled - desc: Multiple inverted sections per template should be permitted. - data: { bool: false, two: 'second' } - template: | - {{^bool}} - * first - {{/bool}} - * {{two}} - {{^bool}} - * third - {{/bool}} - expected: | - * first - * second - * third - - - name: Nested (Falsey) - desc: Nested falsey sections should have their contents rendered. - data: { bool: false } - template: "| A {{^bool}}B {{^bool}}C{{/bool}} D{{/bool}} E |" - expected: "| A B C D E |" - - - name: Nested (Truthy) - desc: Nested truthy sections should be omitted. - data: { bool: true } - template: "| A {{^bool}}B {{^bool}}C{{/bool}} D{{/bool}} E |" - expected: "| A E |" - - - name: Context Misses - desc: Failed context lookups should be considered falsey. - data: { } - template: "[{{^missing}}Cannot find key 'missing'!{{/missing}}]" - expected: "[Cannot find key 'missing'!]" - - # Dotted Names - - - name: Dotted Names - Truthy - desc: Dotted names should be valid for Inverted Section tags. - data: { a: { b: { c: true } } } - template: '"{{^a.b.c}}Not Here{{/a.b.c}}" == ""' - expected: '"" == ""' - - - name: Dotted Names - Falsey - desc: Dotted names should be valid for Inverted Section tags. - data: { a: { b: { c: false } } } - template: '"{{^a.b.c}}Not Here{{/a.b.c}}" == "Not Here"' - expected: '"Not Here" == "Not Here"' - - - name: Dotted Names - Broken Chains - desc: Dotted names that cannot be resolved should be considered falsey. - data: { a: { } } - template: '"{{^a.b.c}}Not Here{{/a.b.c}}" == "Not Here"' - expected: '"Not Here" == "Not Here"' - - # Whitespace Sensitivity - - - name: Surrounding Whitespace - desc: Inverted sections should not alter surrounding whitespace. - data: { boolean: false } - template: " | {{^boolean}}\t|\t{{/boolean}} | \n" - expected: " | \t|\t | \n" - - - name: Internal Whitespace - desc: Inverted should not alter internal whitespace. - data: { boolean: false } - template: " | {{^boolean}} {{! Important Whitespace }}\n {{/boolean}} | \n" - expected: " | \n | \n" - - - name: Indented Inline Sections - desc: Single-line sections should not alter surrounding whitespace. - data: { boolean: false } - template: " {{^boolean}}NO{{/boolean}}\n {{^boolean}}WAY{{/boolean}}\n" - expected: " NO\n WAY\n" - - - name: Standalone Lines - desc: Standalone lines should be removed from the template. - data: { boolean: false } - template: | - | This Is - {{^boolean}} - | - {{/boolean}} - | A Line - expected: | - | This Is - | - | A Line - - - name: Standalone Indented Lines - desc: Standalone indented lines should be removed from the template. - data: { boolean: false } - template: | - | This Is - {{^boolean}} - | - {{/boolean}} - | A Line - expected: | - | This Is - | - | A Line - - - name: Standalone Line Endings - desc: '"\r\n" should be considered a newline for standalone tags.' - data: { boolean: false } - template: "|\r\n{{^boolean}}\r\n{{/boolean}}\r\n|" - expected: "|\r\n|" - - - name: Standalone Without Previous Line - desc: Standalone tags should not require a newline to precede them. - data: { boolean: false } - template: " {{^boolean}}\n^{{/boolean}}\n/" - expected: "^\n/" - - - name: Standalone Without Newline - desc: Standalone tags should not require a newline to follow them. - data: { boolean: false } - template: "^{{^boolean}}\n/\n {{/boolean}}" - expected: "^\n/\n" - - # Whitespace Insensitivity - - - name: Padding - desc: Superfluous in-tag whitespace should be ignored. - data: { boolean: false } - template: '|{{^ boolean }}={{/ boolean }}|' - expected: '|=|' diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/partials.json b/docs/build/node_modules/hogan.js/test/spec/specs/partials.json deleted file mode 100644 index e5f21a2a48daa961c6cb0f98eb993ba848b923cb..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/partials.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Partial tags are used to expand an external template into the current\ntemplate.\n\nThe tag's content MUST be a non-whitespace character sequence NOT containing\nthe current closing delimiter.\n\nThis tag's content names the partial to inject. Set Delimiter tags MUST NOT\naffect the parsing of a partial. The partial MUST be rendered against the\ncontext stack local to the tag. If the named partial cannot be found, the\nempty string SHOULD be used instead, as in interpolations.\n\nPartial tags SHOULD be treated as standalone when appropriate. If this tag\nis used standalone, any whitespace preceding the tag should treated as\nindentation, and prepended to each line of the partial before rendering.\n","tests":[{"name":"Basic Behavior","data":{},"expected":"\"from partial\"","template":"\"{{>text}}\"","desc":"The greater-than operator should expand to the named partial.","partials":{"text":"from partial"}},{"name":"Failed Lookup","data":{},"expected":"\"\"","template":"\"{{>text}}\"","desc":"The empty string should be used when the named partial is not found.","partials":{}},{"name":"Context","data":{"text":"content"},"expected":"\"*content*\"","template":"\"{{>partial}}\"","desc":"The greater-than operator should operate within the current context.","partials":{"partial":"*{{text}}*"}},{"name":"Recursion","data":{"content":"X","nodes":[{"content":"Y","nodes":[]}]},"expected":"X<Y<>>","template":"{{>node}}","desc":"The greater-than operator should properly recurse.","partials":{"node":"{{content}}<{{#nodes}}{{>node}}{{/nodes}}>"}},{"name":"Surrounding Whitespace","data":{},"expected":"| \t|\t |","template":"| {{>partial}} |","desc":"The greater-than operator should not alter surrounding whitespace.","partials":{"partial":"\t|\t"}},{"name":"Inline Indentation","data":{"data":"|"},"expected":" | >\n>\n","template":" {{data}} {{> partial}}\n","desc":"Whitespace should be left untouched.","partials":{"partial":">\n>"}},{"name":"Standalone Line Endings","data":{},"expected":"|\r\n>|","template":"|\r\n{{>partial}}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags.","partials":{"partial":">"}},{"name":"Standalone Without Previous Line","data":{},"expected":" >\n >>","template":" {{>partial}}\n>","desc":"Standalone tags should not require a newline to precede them.","partials":{"partial":">\n>"}},{"name":"Standalone Without Newline","data":{},"expected":">\n >\n >","template":">\n {{>partial}}","desc":"Standalone tags should not require a newline to follow them.","partials":{"partial":">\n>"}},{"name":"Standalone Indentation","data":{"content":"<\n->"},"expected":"\\\n |\n <\n->\n |\n/\n","template":"\\\n {{>partial}}\n/\n","desc":"Each line of the partial should be indented before rendering.","partials":{"partial":"|\n{{{content}}}\n|\n"}},{"name":"Padding Whitespace","data":{"boolean":true},"expected":"|[]|","template":"|{{> partial }}|","desc":"Superfluous in-tag whitespace should be ignored.","partials":{"partial":"[]"}}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/partials.yml b/docs/build/node_modules/hogan.js/test/spec/specs/partials.yml deleted file mode 100644 index 8c415439f252ce21b7a07a915982df096255118d..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/partials.yml +++ /dev/null @@ -1,109 +0,0 @@ -overview: | - Partial tags are used to expand an external template into the current - template. - - The tag's content MUST be a non-whitespace character sequence NOT containing - the current closing delimiter. - - This tag's content names the partial to inject. Set Delimiter tags MUST NOT - affect the parsing of a partial. The partial MUST be rendered against the - context stack local to the tag. If the named partial cannot be found, the - empty string SHOULD be used instead, as in interpolations. - - Partial tags SHOULD be treated as standalone when appropriate. If this tag - is used standalone, any whitespace preceding the tag should treated as - indentation, and prepended to each line of the partial before rendering. -tests: - - name: Basic Behavior - desc: The greater-than operator should expand to the named partial. - data: { } - template: '"{{>text}}"' - partials: { text: 'from partial' } - expected: '"from partial"' - - - name: Failed Lookup - desc: The empty string should be used when the named partial is not found. - data: { } - template: '"{{>text}}"' - partials: { } - expected: '""' - - - name: Context - desc: The greater-than operator should operate within the current context. - data: { text: 'content' } - template: '"{{>partial}}"' - partials: { partial: '*{{text}}*' } - expected: '"*content*"' - - - name: Recursion - desc: The greater-than operator should properly recurse. - data: { content: "X", nodes: [ { content: "Y", nodes: [] } ] } - template: '{{>node}}' - partials: { node: '{{content}}<{{#nodes}}{{>node}}{{/nodes}}>' } - expected: 'X<Y<>>' - - # Whitespace Sensitivity - - - name: Surrounding Whitespace - desc: The greater-than operator should not alter surrounding whitespace. - data: { } - template: '| {{>partial}} |' - partials: { partial: "\t|\t" } - expected: "| \t|\t |" - - - name: Inline Indentation - desc: Whitespace should be left untouched. - data: { data: '|' } - template: " {{data}} {{> partial}}\n" - partials: { partial: ">\n>" } - expected: " | >\n>\n" - - - name: Standalone Line Endings - desc: '"\r\n" should be considered a newline for standalone tags.' - data: { } - template: "|\r\n{{>partial}}\r\n|" - partials: { partial: ">" } - expected: "|\r\n>|" - - - name: Standalone Without Previous Line - desc: Standalone tags should not require a newline to precede them. - data: { } - template: " {{>partial}}\n>" - partials: { partial: ">\n>"} - expected: " >\n >>" - - - name: Standalone Without Newline - desc: Standalone tags should not require a newline to follow them. - data: { } - template: ">\n {{>partial}}" - partials: { partial: ">\n>" } - expected: ">\n >\n >" - - - name: Standalone Indentation - desc: Each line of the partial should be indented before rendering. - data: { content: "<\n->" } - template: | - \ - {{>partial}} - / - partials: - partial: | - | - {{{content}}} - | - expected: | - \ - | - < - -> - | - / - - # Whitespace Insensitivity - - - name: Padding Whitespace - desc: Superfluous in-tag whitespace should be ignored. - data: { boolean: true } - template: "|{{> partial }}|" - partials: { partial: "[]" } - expected: '|[]|' diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/sections.json b/docs/build/node_modules/hogan.js/test/spec/specs/sections.json deleted file mode 100644 index b0aa352e10770b523b6ad1c09f97f6d8a2c7bf92..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/sections.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Section tags and End Section tags are used in combination to wrap a section\nof the template for iteration\n\nThese tags' content MUST be a non-whitespace character sequence NOT\ncontaining the current closing delimiter; each Section tag MUST be followed\nby an End Section tag with the same content within the same section.\n\nThis tag's content names the data to replace the tag. Name resolution is as\nfollows:\n 1) Split the name on periods; the first part is the name to resolve, any\n remaining parts should be retained.\n 2) Walk the context stack from top to bottom, finding the first context\n that is a) a hash containing the name as a key OR b) an object responding\n to a method with the given name.\n 3) If the context is a hash, the data is the value associated with the\n name.\n 4) If the context is an object and the method with the given name has an\n arity of 1, the method SHOULD be called with a String containing the\n unprocessed contents of the sections; the data is the value returned.\n 5) Otherwise, the data is the value returned by calling the method with\n the given name.\n 6) If any name parts were retained in step 1, each should be resolved\n against a context stack containing only the result from the former\n resolution. If any part fails resolution, the result should be considered\n falsey, and should interpolate as the empty string.\nIf the data is not of a list type, it is coerced into a list as follows: if\nthe data is truthy (e.g. `!!data == true`), use a single-element list\ncontaining the data, otherwise use an empty list.\n\nFor each element in the data list, the element MUST be pushed onto the\ncontext stack, the section MUST be rendered, and the element MUST be popped\noff the context stack.\n\nSection and End Section tags SHOULD be treated as standalone when\nappropriate.\n","tests":[{"name":"Truthy","data":{"boolean":true},"expected":"\"This should be rendered.\"","template":"\"{{#boolean}}This should be rendered.{{/boolean}}\"","desc":"Truthy sections should have their contents rendered."},{"name":"Falsey","data":{"boolean":false},"expected":"\"\"","template":"\"{{#boolean}}This should not be rendered.{{/boolean}}\"","desc":"Falsey sections should have their contents omitted."},{"name":"Context","data":{"context":{"name":"Joe"}},"expected":"\"Hi Joe.\"","template":"\"{{#context}}Hi {{name}}.{{/context}}\"","desc":"Objects and hashes should be pushed onto the context stack."},{"name":"Deeply Nested Contexts","data":{"a":{"one":1},"b":{"two":2},"c":{"three":3},"d":{"four":4},"e":{"five":5}},"expected":"1\n121\n12321\n1234321\n123454321\n1234321\n12321\n121\n1\n","template":"{{#a}}\n{{one}}\n{{#b}}\n{{one}}{{two}}{{one}}\n{{#c}}\n{{one}}{{two}}{{three}}{{two}}{{one}}\n{{#d}}\n{{one}}{{two}}{{three}}{{four}}{{three}}{{two}}{{one}}\n{{#e}}\n{{one}}{{two}}{{three}}{{four}}{{five}}{{four}}{{three}}{{two}}{{one}}\n{{/e}}\n{{one}}{{two}}{{three}}{{four}}{{three}}{{two}}{{one}}\n{{/d}}\n{{one}}{{two}}{{three}}{{two}}{{one}}\n{{/c}}\n{{one}}{{two}}{{one}}\n{{/b}}\n{{one}}\n{{/a}}\n","desc":"All elements on the context stack should be accessible."},{"name":"List","data":{"list":[{"item":1},{"item":2},{"item":3}]},"expected":"\"123\"","template":"\"{{#list}}{{item}}{{/list}}\"","desc":"Lists should be iterated; list items should visit the context stack."},{"name":"Empty List","data":{"list":[]},"expected":"\"\"","template":"\"{{#list}}Yay lists!{{/list}}\"","desc":"Empty lists should behave like falsey values."},{"name":"Doubled","data":{"two":"second","bool":true},"expected":"* first\n* second\n* third\n","template":"{{#bool}}\n* first\n{{/bool}}\n* {{two}}\n{{#bool}}\n* third\n{{/bool}}\n","desc":"Multiple sections per template should be permitted."},{"name":"Nested (Truthy)","data":{"bool":true},"expected":"| A B C D E |","template":"| A {{#bool}}B {{#bool}}C{{/bool}} D{{/bool}} E |","desc":"Nested truthy sections should have their contents rendered."},{"name":"Nested (Falsey)","data":{"bool":false},"expected":"| A E |","template":"| A {{#bool}}B {{#bool}}C{{/bool}} D{{/bool}} E |","desc":"Nested falsey sections should be omitted."},{"name":"Context Misses","data":{},"expected":"[]","template":"[{{#missing}}Found key 'missing'!{{/missing}}]","desc":"Failed context lookups should be considered falsey."},{"name":"Implicit Iterator - String","data":{"list":["a","b","c","d","e"]},"expected":"\"(a)(b)(c)(d)(e)\"","template":"\"{{#list}}({{.}}){{/list}}\"","desc":"Implicit iterators should directly interpolate strings."},{"name":"Implicit Iterator - Integer","data":{"list":[1,2,3,4,5]},"expected":"\"(1)(2)(3)(4)(5)\"","template":"\"{{#list}}({{.}}){{/list}}\"","desc":"Implicit iterators should cast integers to strings and interpolate."},{"name":"Implicit Iterator - Decimal","data":{"list":[1.1,2.2,3.3,4.4,5.5]},"expected":"\"(1.1)(2.2)(3.3)(4.4)(5.5)\"","template":"\"{{#list}}({{.}}){{/list}}\"","desc":"Implicit iterators should cast decimals to strings and interpolate."},{"name":"Dotted Names - Truthy","data":{"a":{"b":{"c":true}}},"expected":"\"Here\" == \"Here\"","template":"\"{{#a.b.c}}Here{{/a.b.c}}\" == \"Here\"","desc":"Dotted names should be valid for Section tags."},{"name":"Dotted Names - Falsey","data":{"a":{"b":{"c":false}}},"expected":"\"\" == \"\"","template":"\"{{#a.b.c}}Here{{/a.b.c}}\" == \"\"","desc":"Dotted names should be valid for Section tags."},{"name":"Dotted Names - Broken Chains","data":{"a":{}},"expected":"\"\" == \"\"","template":"\"{{#a.b.c}}Here{{/a.b.c}}\" == \"\"","desc":"Dotted names that cannot be resolved should be considered falsey."},{"name":"Surrounding Whitespace","data":{"boolean":true},"expected":" | \t|\t | \n","template":" | {{#boolean}}\t|\t{{/boolean}} | \n","desc":"Sections should not alter surrounding whitespace."},{"name":"Internal Whitespace","data":{"boolean":true},"expected":" | \n | \n","template":" | {{#boolean}} {{! Important Whitespace }}\n {{/boolean}} | \n","desc":"Sections should not alter internal whitespace."},{"name":"Indented Inline Sections","data":{"boolean":true},"expected":" YES\n GOOD\n","template":" {{#boolean}}YES{{/boolean}}\n {{#boolean}}GOOD{{/boolean}}\n","desc":"Single-line sections should not alter surrounding whitespace."},{"name":"Standalone Lines","data":{"boolean":true},"expected":"| This Is\n|\n| A Line\n","template":"| This Is\n{{#boolean}}\n|\n{{/boolean}}\n| A Line\n","desc":"Standalone lines should be removed from the template."},{"name":"Indented Standalone Lines","data":{"boolean":true},"expected":"| This Is\n|\n| A Line\n","template":"| This Is\n {{#boolean}}\n|\n {{/boolean}}\n| A Line\n","desc":"Indented standalone lines should be removed from the template."},{"name":"Standalone Line Endings","data":{"boolean":true},"expected":"|\r\n|","template":"|\r\n{{#boolean}}\r\n{{/boolean}}\r\n|","desc":"\"\\r\\n\" should be considered a newline for standalone tags."},{"name":"Standalone Without Previous Line","data":{"boolean":true},"expected":"#\n/","template":" {{#boolean}}\n#{{/boolean}}\n/","desc":"Standalone tags should not require a newline to precede them."},{"name":"Standalone Without Newline","data":{"boolean":true},"expected":"#\n/\n","template":"#{{#boolean}}\n/\n {{/boolean}}","desc":"Standalone tags should not require a newline to follow them."},{"name":"Padding","data":{"boolean":true},"expected":"|=|","template":"|{{# boolean }}={{/ boolean }}|","desc":"Superfluous in-tag whitespace should be ignored."}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/sections.yml b/docs/build/node_modules/hogan.js/test/spec/specs/sections.yml deleted file mode 100644 index f62d9cb30a989b4632c1b20bb30b2dc2b8c9742c..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/sections.yml +++ /dev/null @@ -1,256 +0,0 @@ -overview: | - Section tags and End Section tags are used in combination to wrap a section - of the template for iteration - - These tags' content MUST be a non-whitespace character sequence NOT - containing the current closing delimiter; each Section tag MUST be followed - by an End Section tag with the same content within the same section. - - This tag's content names the data to replace the tag. Name resolution is as - follows: - 1) Split the name on periods; the first part is the name to resolve, any - remaining parts should be retained. - 2) Walk the context stack from top to bottom, finding the first context - that is a) a hash containing the name as a key OR b) an object responding - to a method with the given name. - 3) If the context is a hash, the data is the value associated with the - name. - 4) If the context is an object and the method with the given name has an - arity of 1, the method SHOULD be called with a String containing the - unprocessed contents of the sections; the data is the value returned. - 5) Otherwise, the data is the value returned by calling the method with - the given name. - 6) If any name parts were retained in step 1, each should be resolved - against a context stack containing only the result from the former - resolution. If any part fails resolution, the result should be considered - falsey, and should interpolate as the empty string. - If the data is not of a list type, it is coerced into a list as follows: if - the data is truthy (e.g. `!!data == true`), use a single-element list - containing the data, otherwise use an empty list. - - For each element in the data list, the element MUST be pushed onto the - context stack, the section MUST be rendered, and the element MUST be popped - off the context stack. - - Section and End Section tags SHOULD be treated as standalone when - appropriate. -tests: - - name: Truthy - desc: Truthy sections should have their contents rendered. - data: { boolean: true } - template: '"{{#boolean}}This should be rendered.{{/boolean}}"' - expected: '"This should be rendered."' - - - name: Falsey - desc: Falsey sections should have their contents omitted. - data: { boolean: false } - template: '"{{#boolean}}This should not be rendered.{{/boolean}}"' - expected: '""' - - - name: Context - desc: Objects and hashes should be pushed onto the context stack. - data: { context: { name: 'Joe' } } - template: '"{{#context}}Hi {{name}}.{{/context}}"' - expected: '"Hi Joe."' - - - name: Deeply Nested Contexts - desc: All elements on the context stack should be accessible. - data: - a: { one: 1 } - b: { two: 2 } - c: { three: 3 } - d: { four: 4 } - e: { five: 5 } - template: | - {{#a}} - {{one}} - {{#b}} - {{one}}{{two}}{{one}} - {{#c}} - {{one}}{{two}}{{three}}{{two}}{{one}} - {{#d}} - {{one}}{{two}}{{three}}{{four}}{{three}}{{two}}{{one}} - {{#e}} - {{one}}{{two}}{{three}}{{four}}{{five}}{{four}}{{three}}{{two}}{{one}} - {{/e}} - {{one}}{{two}}{{three}}{{four}}{{three}}{{two}}{{one}} - {{/d}} - {{one}}{{two}}{{three}}{{two}}{{one}} - {{/c}} - {{one}}{{two}}{{one}} - {{/b}} - {{one}} - {{/a}} - expected: | - 1 - 121 - 12321 - 1234321 - 123454321 - 1234321 - 12321 - 121 - 1 - - - name: List - desc: Lists should be iterated; list items should visit the context stack. - data: { list: [ { item: 1 }, { item: 2 }, { item: 3 } ] } - template: '"{{#list}}{{item}}{{/list}}"' - expected: '"123"' - - - name: Empty List - desc: Empty lists should behave like falsey values. - data: { list: [ ] } - template: '"{{#list}}Yay lists!{{/list}}"' - expected: '""' - - - name: Doubled - desc: Multiple sections per template should be permitted. - data: { bool: true, two: 'second' } - template: | - {{#bool}} - * first - {{/bool}} - * {{two}} - {{#bool}} - * third - {{/bool}} - expected: | - * first - * second - * third - - - name: Nested (Truthy) - desc: Nested truthy sections should have their contents rendered. - data: { bool: true } - template: "| A {{#bool}}B {{#bool}}C{{/bool}} D{{/bool}} E |" - expected: "| A B C D E |" - - - name: Nested (Falsey) - desc: Nested falsey sections should be omitted. - data: { bool: false } - template: "| A {{#bool}}B {{#bool}}C{{/bool}} D{{/bool}} E |" - expected: "| A E |" - - - name: Context Misses - desc: Failed context lookups should be considered falsey. - data: { } - template: "[{{#missing}}Found key 'missing'!{{/missing}}]" - expected: "[]" - - # Implicit Iterators - - - name: Implicit Iterator - String - desc: Implicit iterators should directly interpolate strings. - data: - list: [ 'a', 'b', 'c', 'd', 'e' ] - template: '"{{#list}}({{.}}){{/list}}"' - expected: '"(a)(b)(c)(d)(e)"' - - - name: Implicit Iterator - Integer - desc: Implicit iterators should cast integers to strings and interpolate. - data: - list: [ 1, 2, 3, 4, 5 ] - template: '"{{#list}}({{.}}){{/list}}"' - expected: '"(1)(2)(3)(4)(5)"' - - - name: Implicit Iterator - Decimal - desc: Implicit iterators should cast decimals to strings and interpolate. - data: - list: [ 1.10, 2.20, 3.30, 4.40, 5.50 ] - template: '"{{#list}}({{.}}){{/list}}"' - expected: '"(1.1)(2.2)(3.3)(4.4)(5.5)"' - - # Dotted Names - - - name: Dotted Names - Truthy - desc: Dotted names should be valid for Section tags. - data: { a: { b: { c: true } } } - template: '"{{#a.b.c}}Here{{/a.b.c}}" == "Here"' - expected: '"Here" == "Here"' - - - name: Dotted Names - Falsey - desc: Dotted names should be valid for Section tags. - data: { a: { b: { c: false } } } - template: '"{{#a.b.c}}Here{{/a.b.c}}" == ""' - expected: '"" == ""' - - - name: Dotted Names - Broken Chains - desc: Dotted names that cannot be resolved should be considered falsey. - data: { a: { } } - template: '"{{#a.b.c}}Here{{/a.b.c}}" == ""' - expected: '"" == ""' - - # Whitespace Sensitivity - - - name: Surrounding Whitespace - desc: Sections should not alter surrounding whitespace. - data: { boolean: true } - template: " | {{#boolean}}\t|\t{{/boolean}} | \n" - expected: " | \t|\t | \n" - - - name: Internal Whitespace - desc: Sections should not alter internal whitespace. - data: { boolean: true } - template: " | {{#boolean}} {{! Important Whitespace }}\n {{/boolean}} | \n" - expected: " | \n | \n" - - - name: Indented Inline Sections - desc: Single-line sections should not alter surrounding whitespace. - data: { boolean: true } - template: " {{#boolean}}YES{{/boolean}}\n {{#boolean}}GOOD{{/boolean}}\n" - expected: " YES\n GOOD\n" - - - name: Standalone Lines - desc: Standalone lines should be removed from the template. - data: { boolean: true } - template: | - | This Is - {{#boolean}} - | - {{/boolean}} - | A Line - expected: | - | This Is - | - | A Line - - - name: Indented Standalone Lines - desc: Indented standalone lines should be removed from the template. - data: { boolean: true } - template: | - | This Is - {{#boolean}} - | - {{/boolean}} - | A Line - expected: | - | This Is - | - | A Line - - - name: Standalone Line Endings - desc: '"\r\n" should be considered a newline for standalone tags.' - data: { boolean: true } - template: "|\r\n{{#boolean}}\r\n{{/boolean}}\r\n|" - expected: "|\r\n|" - - - name: Standalone Without Previous Line - desc: Standalone tags should not require a newline to precede them. - data: { boolean: true } - template: " {{#boolean}}\n#{{/boolean}}\n/" - expected: "#\n/" - - - name: Standalone Without Newline - desc: Standalone tags should not require a newline to follow them. - data: { boolean: true } - template: "#{{#boolean}}\n/\n {{/boolean}}" - expected: "#\n/\n" - - # Whitespace Insensitivity - - - name: Padding - desc: Superfluous in-tag whitespace should be ignored. - data: { boolean: true } - template: '|{{# boolean }}={{/ boolean }}|' - expected: '|=|' diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.json b/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.json deleted file mode 100644 index 3c58bf851efbde1da525d78efad1198836fb6390..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.json +++ /dev/null @@ -1 +0,0 @@ -{"__ATTN__":"Do not edit this file; changes belong in the appropriate YAML file.","overview":"Lambdas are a special-cased data type for use in interpolations and\nsections.\n\nWhen used as the data value for an Interpolation tag, the lambda MUST be\ntreatable as an arity 0 function, and invoked as such. The returned value\nMUST be rendered against the default delimiters, then interpolated in place\nof the lambda.\n\nWhen used as the data value for a Section tag, the lambda MUST be treatable\nas an arity 1 function, and invoked as such (passing a String containing the\nunprocessed section contents). The returned value MUST be rendered against\nthe current delimiters, then interpolated in place of the section.\n","tests":[{"name":"Interpolation","data":{"lambda":{"php":"return \"world\";","clojure":"(fn [] \"world\")","__tag__":"code","perl":"sub { \"world\" }","python":"lambda: \"world\"","ruby":"proc { \"world\" }","js":"function() { return \"world\" }"}},"expected":"Hello, world!","template":"Hello, {{lambda}}!","desc":"A lambda's return value should be interpolated."},{"name":"Interpolation - Expansion","data":{"planet":"world","lambda":{"php":"return \"{{planet}}\";","clojure":"(fn [] \"{{planet}}\")","__tag__":"code","perl":"sub { \"{{planet}}\" }","python":"lambda: \"{{planet}}\"","ruby":"proc { \"{{planet}}\" }","js":"function() { return \"{{planet}}\" }"}},"expected":"Hello, world!","template":"Hello, {{lambda}}!","desc":"A lambda's return value should be parsed."},{"name":"Interpolation - Alternate Delimiters","data":{"planet":"world","lambda":{"php":"return \"|planet| => {{planet}}\";","clojure":"(fn [] \"|planet| => {{planet}}\")","__tag__":"code","perl":"sub { \"|planet| => {{planet}}\" }","python":"lambda: \"|planet| => {{planet}}\"","ruby":"proc { \"|planet| => {{planet}}\" }","js":"function() { return \"|planet| => {{planet}}\" }"}},"expected":"Hello, (|planet| => world)!","template":"{{= | | =}}\nHello, (|&lambda|)!","desc":"A lambda's return value should parse with the default delimiters."},{"name":"Interpolation - Multiple Calls","data":{"lambda":{"php":"global $calls; return ++$calls;","clojure":"(def g (atom 0)) (fn [] (swap! g inc))","__tag__":"code","perl":"sub { no strict; $calls += 1 }","python":"lambda: globals().update(calls=globals().get(\"calls\",0)+1) or calls","ruby":"proc { $calls ||= 0; $calls += 1 }","js":"function() { return (g=(function(){return this})()).calls=(g.calls||0)+1 }"}},"expected":"1 == 2 == 3","template":"{{lambda}} == {{{lambda}}} == {{lambda}}","desc":"Interpolated lambdas should not be cached."},{"name":"Escaping","data":{"lambda":{"php":"return \">\";","clojure":"(fn [] \">\")","__tag__":"code","perl":"sub { \">\" }","python":"lambda: \">\"","ruby":"proc { \">\" }","js":"function() { return \">\" }"}},"expected":"<>>","template":"<{{lambda}}{{{lambda}}}","desc":"Lambda results should be appropriately escaped."},{"name":"Section","data":{"x":"Error!","lambda":{"php":"return ($text == \"{{x}}\") ? \"yes\" : \"no\";","clojure":"(fn [text] (if (= text \"{{x}}\") \"yes\" \"no\"))","__tag__":"code","perl":"sub { $_[0] eq \"{{x}}\" ? \"yes\" : \"no\" }","python":"lambda text: text == \"{{x}}\" and \"yes\" or \"no\"","ruby":"proc { |text| text == \"{{x}}\" ? \"yes\" : \"no\" }","js":"function(txt) { return (txt == \"{{x}}\" ? \"yes\" : \"no\") }"}},"expected":"<yes>","template":"<{{#lambda}}{{x}}{{/lambda}}>","desc":"Lambdas used for sections should receive the raw section string."},{"name":"Section - Expansion","data":{"planet":"Earth","lambda":{"php":"return $text . \"{{planet}}\" . $text;","clojure":"(fn [text] (str text \"{{planet}}\" text))","__tag__":"code","perl":"sub { $_[0] . \"{{planet}}\" . $_[0] }","python":"lambda text: \"%s{{planet}}%s\" % (text, text)","ruby":"proc { |text| \"#{text}{{planet}}#{text}\" }","js":"function(txt) { return txt + \"{{planet}}\" + txt }"}},"expected":"<-Earth->","template":"<{{#lambda}}-{{/lambda}}>","desc":"Lambdas used for sections should have their results parsed."},{"name":"Section - Alternate Delimiters","data":{"planet":"Earth","lambda":{"php":"return $text . \"{{planet}} => |planet|\" . $text;","clojure":"(fn [text] (str text \"{{planet}} => |planet|\" text))","__tag__":"code","perl":"sub { $_[0] . \"{{planet}} => |planet|\" . $_[0] }","python":"lambda text: \"%s{{planet}} => |planet|%s\" % (text, text)","ruby":"proc { |text| \"#{text}{{planet}} => |planet|#{text}\" }","js":"function(txt) { return txt + \"{{planet}} => |planet|\" + txt }"}},"expected":"<-{{planet}} => Earth->","template":"{{= | | =}}<|#lambda|-|/lambda|>","desc":"Lambdas used for sections should parse with the current delimiters."},{"name":"Section - Multiple Calls","data":{"lambda":{"php":"return \"__\" . $text . \"__\";","clojure":"(fn [text] (str \"__\" text \"__\"))","__tag__":"code","perl":"sub { \"__\" . $_[0] . \"__\" }","python":"lambda text: \"__%s__\" % (text)","ruby":"proc { |text| \"__#{text}__\" }","js":"function(txt) { return \"__\" + txt + \"__\" }"}},"expected":"__FILE__ != __LINE__","template":"{{#lambda}}FILE{{/lambda}} != {{#lambda}}LINE{{/lambda}}","desc":"Lambdas used for sections should not be cached."},{"name":"Inverted Section","data":{"static":"static","lambda":{"php":"return false;","clojure":"(fn [text] false)","__tag__":"code","perl":"sub { 0 }","python":"lambda text: 0","ruby":"proc { |text| false }","js":"function(txt) { return false }"}},"expected":"<>","template":"<{{^lambda}}{{static}}{{/lambda}}>","desc":"Lambdas used for inverted sections should be considered truthy."}]} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.yml b/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.yml deleted file mode 100644 index b9fb4d0f859aa50a8a8aa55957caee91c1c7ae06..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/spec/specs/~lambdas.yml +++ /dev/null @@ -1,149 +0,0 @@ -overview: | - Lambdas are a special-cased data type for use in interpolations and - sections. - - When used as the data value for an Interpolation tag, the lambda MUST be - treatable as an arity 0 function, and invoked as such. The returned value - MUST be rendered against the default delimiters, then interpolated in place - of the lambda. - - When used as the data value for a Section tag, the lambda MUST be treatable - as an arity 1 function, and invoked as such (passing a String containing the - unprocessed section contents). The returned value MUST be rendered against - the current delimiters, then interpolated in place of the section. -tests: - - name: Interpolation - desc: A lambda's return value should be interpolated. - data: - lambda: !code - ruby: 'proc { "world" }' - perl: 'sub { "world" }' - js: 'function() { return "world" }' - php: 'return "world";' - python: 'lambda: "world"' - clojure: '(fn [] "world")' - template: "Hello, {{lambda}}!" - expected: "Hello, world!" - - - name: Interpolation - Expansion - desc: A lambda's return value should be parsed. - data: - planet: "world" - lambda: !code - ruby: 'proc { "{{planet}}" }' - perl: 'sub { "{{planet}}" }' - js: 'function() { return "{{planet}}" }' - php: 'return "{{planet}}";' - python: 'lambda: "{{planet}}"' - clojure: '(fn [] "{{planet}}")' - template: "Hello, {{lambda}}!" - expected: "Hello, world!" - - - name: Interpolation - Alternate Delimiters - desc: A lambda's return value should parse with the default delimiters. - data: - planet: "world" - lambda: !code - ruby: 'proc { "|planet| => {{planet}}" }' - perl: 'sub { "|planet| => {{planet}}" }' - js: 'function() { return "|planet| => {{planet}}" }' - php: 'return "|planet| => {{planet}}";' - python: 'lambda: "|planet| => {{planet}}"' - clojure: '(fn [] "|planet| => {{planet}}")' - template: "{{= | | =}}\nHello, (|&lambda|)!" - expected: "Hello, (|planet| => world)!" - - - name: Interpolation - Multiple Calls - desc: Interpolated lambdas should not be cached. - data: - lambda: !code - ruby: 'proc { $calls ||= 0; $calls += 1 }' - perl: 'sub { no strict; $calls += 1 }' - js: 'function() { return (g=(function(){return this})()).calls=(g.calls||0)+1 }' - php: 'global $calls; return ++$calls;' - python: 'lambda: globals().update(calls=globals().get("calls",0)+1) or calls' - clojure: '(def g (atom 0)) (fn [] (swap! g inc))' - template: '{{lambda}} == {{{lambda}}} == {{lambda}}' - expected: '1 == 2 == 3' - - - name: Escaping - desc: Lambda results should be appropriately escaped. - data: - lambda: !code - ruby: 'proc { ">" }' - perl: 'sub { ">" }' - js: 'function() { return ">" }' - php: 'return ">";' - python: 'lambda: ">"' - clojure: '(fn [] ">")' - template: "<{{lambda}}{{{lambda}}}" - expected: "<>>" - - - name: Section - desc: Lambdas used for sections should receive the raw section string. - data: - x: 'Error!' - lambda: !code - ruby: 'proc { |text| text == "{{x}}" ? "yes" : "no" }' - perl: 'sub { $_[0] eq "{{x}}" ? "yes" : "no" }' - js: 'function(txt) { return (txt == "{{x}}" ? "yes" : "no") }' - php: 'return ($text == "{{x}}") ? "yes" : "no";' - python: 'lambda text: text == "{{x}}" and "yes" or "no"' - clojure: '(fn [text] (if (= text "{{x}}") "yes" "no"))' - template: "<{{#lambda}}{{x}}{{/lambda}}>" - expected: "<yes>" - - - name: Section - Expansion - desc: Lambdas used for sections should have their results parsed. - data: - planet: "Earth" - lambda: !code - ruby: 'proc { |text| "#{text}{{planet}}#{text}" }' - perl: 'sub { $_[0] . "{{planet}}" . $_[0] }' - js: 'function(txt) { return txt + "{{planet}}" + txt }' - php: 'return $text . "{{planet}}" . $text;' - python: 'lambda text: "%s{{planet}}%s" % (text, text)' - clojure: '(fn [text] (str text "{{planet}}" text))' - template: "<{{#lambda}}-{{/lambda}}>" - expected: "<-Earth->" - - - name: Section - Alternate Delimiters - desc: Lambdas used for sections should parse with the current delimiters. - data: - planet: "Earth" - lambda: !code - ruby: 'proc { |text| "#{text}{{planet}} => |planet|#{text}" }' - perl: 'sub { $_[0] . "{{planet}} => |planet|" . $_[0] }' - js: 'function(txt) { return txt + "{{planet}} => |planet|" + txt }' - php: 'return $text . "{{planet}} => |planet|" . $text;' - python: 'lambda text: "%s{{planet}} => |planet|%s" % (text, text)' - clojure: '(fn [text] (str text "{{planet}} => |planet|" text))' - template: "{{= | | =}}<|#lambda|-|/lambda|>" - expected: "<-{{planet}} => Earth->" - - - name: Section - Multiple Calls - desc: Lambdas used for sections should not be cached. - data: - lambda: !code - ruby: 'proc { |text| "__#{text}__" }' - perl: 'sub { "__" . $_[0] . "__" }' - js: 'function(txt) { return "__" + txt + "__" }' - php: 'return "__" . $text . "__";' - python: 'lambda text: "__%s__" % (text)' - clojure: '(fn [text] (str "__" text "__"))' - template: '{{#lambda}}FILE{{/lambda}} != {{#lambda}}LINE{{/lambda}}' - expected: '__FILE__ != __LINE__' - - - name: Inverted Section - desc: Lambdas used for inverted sections should be considered truthy. - data: - static: 'static' - lambda: !code - ruby: 'proc { |text| false }' - perl: 'sub { 0 }' - js: 'function(txt) { return false }' - php: 'return false;' - python: 'lambda text: 0' - clojure: '(fn [text] false)' - template: "<{{^lambda}}{{static}}{{/lambda}}>" - expected: "<>" diff --git a/docs/build/node_modules/hogan.js/test/templates/list.mustache b/docs/build/node_modules/hogan.js/test/templates/list.mustache deleted file mode 100644 index 9bb653a3be736b8393efa0d5d4abab6a0a122b2d..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/test/templates/list.mustache +++ /dev/null @@ -1,8 +0,0 @@ -<ul> -<li></li> -<li></li> -<li></li> -<li></li> -<li></li> -<li></li> -</ul> \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/tools/release.js b/docs/build/node_modules/hogan.js/tools/release.js deleted file mode 100644 index dda0d3f87144e3ad453af0105245b6f49efae4bd..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/tools/release.js +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2011 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 fs = require('fs'); -var path = require('path'); -var Hogan = require(__dirname + '/../lib/hogan'); -var minlicense = '/**\n* @preserve Copyright 2012 Twitter, Inc.\n* @license http://www.apache.org/licenses/LICENSE-2.0.txt\n*/\n'; - -function read(path) { - return fs.readFileSync(path).toString() -} - -// Good enough for little js files -function copy(src, dst) { - return fs.writeFileSync(dst, read(src)); -} - -function uglify(src, dst) { - var jsp = require("uglify-js").parser; - var pro = require("uglify-js").uglify; - var orig_code = read(src); - var ast = jsp.parse(orig_code); // parse code and get the initial AST - ast = pro.ast_mangle(ast); // get a new AST with mangled names - ast = pro.ast_squeeze(ast); // get an AST with compression optimizations - fs.writeFileSync(dst, minlicense + pro.gen_code(ast)); -} - -var packageJSON = JSON.parse(read('package.json')); -var version = packageJSON.version.substring(0, packageJSON.version.indexOf('-')); - -function removeFirstComment(text) { - return text.substring(text.indexOf('*/') + 2); -} - -var context = { - template: removeFirstComment(read(__dirname + '/../lib/template.js')), - compiler: removeFirstComment(read(__dirname + '/../lib/compiler.js')) -}; - -var wrapperPath = '/../wrappers/'; -var wrappers = fs.readdirSync(__dirname + wrapperPath).map(function(f) { - return __dirname + wrapperPath + f; -}); - -var distPath = __dirname + '/../dist/'; -wrappers.forEach(function(wrapper) { - var tail = path.basename(wrapper, '.mustache'); - var target = distPath + 'hogan-' + version + '.' + tail; - var uglified = distPath + 'hogan-' + version + '.min.' + tail; - fs.writeFileSync(target, Hogan.compile(read(wrapper)).render(context)); - uglify(target, uglified); -}); - -// Also release Hogan.Template on its own. -var templateTarget = distPath + 'template-' + version + '.js'; -fs.writeFileSync(templateTarget, read(__dirname + '/../lib/template.js')); -uglify(templateTarget, distPath + 'template-' + version + '.min.js'); - -// Add packageJSON to node distribution -packageJSON.version = version; -fs.writeFileSync(__dirname + '/../dist/nodejs/package.json', - JSON.stringify(packageJSON, null, " ")); diff --git a/docs/build/node_modules/hogan.js/tools/web_templates.js b/docs/build/node_modules/hogan.js/tools/web_templates.js deleted file mode 100644 index f00acd3c3ee9a7d11f2bd04777e6d23c22598715..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/tools/web_templates.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2011 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 Hogan = require(__dirname + '/../lib/hogan.js'); -var fs = require('fs'); -var path = require('path'); - -// Substitute variables in the homepage with values from package.json -var homeTemplatePath = __dirname + '/../build/gh-pages/index.html.mustache'; -var contextPath = __dirname + '/../dist/nodejs/package.json'; - -var homepage = fs.readFileSync(homeTemplatePath).toString(); -var context = JSON.parse(fs.readFileSync(contextPath).toString()); - -var template = Hogan.compile(homepage); - -fs.writeFileSync(path.dirname(homeTemplatePath) + '/index.html', - template.render(context)); - -fs.unlinkSync(homeTemplatePath); \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/1.0.0/hogan.js b/docs/build/node_modules/hogan.js/web/1.0.0/hogan.js deleted file mode 100644 index 09170d635f7adffe817c7ca9a921d2e5d55992fa..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/1.0.0/hogan.js +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Copyright 2011 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 HoganTemplate = (function () { - - function constructor(text) { - this.text = text; - }; - - constructor.prototype = { - // render: replaced by generated code. - r: function (context, partials) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials) { - return this.r(context, partials); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - return partial.render(context, partials); - }, - - // render a section - rs: function(context, partials, section) { - var buf = ''; - var tail = context[context.length - 1]; - if (!isArray(tail)) { - buf = section(context, partials); - return buf; - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end) { - if (isArray(val) && val.length === 0) { - return false; - } - - if (!inverted && typeof val == 'function') { - val = this.ls(val, ctx, partials, start, end); - } - - var pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - var names = key.split('.'); - var val = this.f(names[0], ctx, partials, returnFound); - var cx = null; - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false; - var v = null; - var found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text) { - var t = val.call(cx, text, function(t) { - return Hogan.compile(t).render(cx); - }); - var s = Hogan.compile(t.toString()).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, start, end) { - var cx = ctx[ctx.length - 1]; - if (val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end)); - } - var t = val.call(cx); - if (typeof t == 'function') { - return this.ho(t, cx, partials, this.text.substring(start, end)); - } - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - return Hogan.compile(val.call(cx).toString()).render(cx, partials); - } - }; - - var rAmp = /&/g, rLt = /</g, rGt = />/g, rApos =/\'/g, - rQuot = /\"/g, hChars =/[&<>\"\']/; - function hoganEscape(str) { - var s = String(str === null ? '' : str); - return hChars.test(s) ? s.replace(rAmp,'&') - .replace(rLt,'<').replace(rGt,'>') - .replace(rApos,''').replace(rQuot, '"') : s; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - } - - return constructor; -})(); - -var Hogan = (function () { - - function scan(text) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) == null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart; j < tokens.length; j++) { - if (!tokens[j].tag) { - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}) - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag; - var closeIndex = text.indexOf(close, index); - var delimiters = trim(text.substring(text.indexOf('=', index) + 1, - closeIndex)).split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - return closeIndex + close.length - 1; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text[i] == '\n') { - filterLine(seenTag); - } else { - buf += text[i]; - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - var tag = tagTypes[text[i + 1]]; - tagType = tag ? text[i + 1] : '_v'; - seenTag = i; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - } else { - if (tagChange(ctag, text, i)) { - i += ctag.length - 1; - tokens.push({tag: tagType, n: trim(buf), - i: (tagType == '/') ? seenTag - 1 : i + 1}); - buf = ''; - state = IN_TEXT; - if (tagType == '{') { - i++; - } - } else { - buf += text[i]; - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/; - - var tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - function tagChange(tag, text, index) { - if (text[index] != tag[0]) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text[index + i] != tag[i]) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || - isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length == 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function generate(tree, text, options) { - var code = 'var c = [cx];var b = "";var _ = this;' + - walk(tree) + 'return b;'; - if (options.asString) { - return 'function(cx,p){' + code + ';};'; - } - - var template = new HoganTemplate(text); - template.r = new Function('cx', 'p', code); - return template; - } - - var rQuot = /\"/g, rNewline = /\n/g, rCr = /\r/g, rSlash = /\\/g; - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r') - }; - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i].n); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('\n'); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text(tree[i]); - } - } - return code; - } - - function section(nodes, id, method, start, end) { - var code = 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),'; - code += 'c,p,0,' + start + ',' + end + ')){'; - code += 'b += _.rs(c,p,'; - code += 'function(c,p){ var b = "";'; - code += walk(nodes); - code += 'return b;});c.pop();}'; - code += 'else{b += _.b; _.b = ""};'; - return code; - } - - function invertedSection(nodes, id, method) { - var code = 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0)){'; - code += walk(nodes); - code += '};'; - return code; - } - - function partial(id) { - return 'b += _.rp("' + esc(id) + '",c[c.length - 1],p);'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += "' + esc(id) + '";'; - } - - return ({ - scan: scan, - - parse: function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - cache: {}, - - compile: function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - options = options || {}; - - var t = this.cache[text]; - if (t) { - return t; - } - t = generate(this.parse(scan(text), options), text, options); - return this.cache[text] = t; - } - }); -})(); - -// Export the hogan constructor for Node.js and CommonJS. -if (typeof module !== 'undefined' && module.exports) { - module.exports = Hogan; - module.exports.Template = HoganTemplate; -} else if (typeof exports !== 'undefined') { - exports.Hogan = Hogan; - exports.HoganTemplate = HoganTemplate; -} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/1.0.0/hogan.min.js b/docs/build/node_modules/hogan.js/web/1.0.0/hogan.min.js deleted file mode 100644 index 13ec535aae04c3c4a7ac8f16f1c15101f8d8a91e..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/1.0.0/hogan.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2011 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 HoganTemplate=function(){function a(a){this.text=a}function h(a){var h=String(a===null?"":a);return g.test(h)?h.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):h}a.prototype={r:function(a,b){return""},v:h,render:function(a,b){return this.r(a,b)},rp:function(a,b,c,d){var e=c[a];return e?e.render(b,c):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b),d;for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f){if(i(a)&&a.length===0)return!1;!d&&typeof a=="function"&&(a=this.ls(a,b,c,e,f));var g=a===""||!!a;return!d&&g&&b&&b.push(typeof a=="object"?a:b[b.length-1]),g},d:function(a,b,c,d){if(a==="."&&i(b[b.length-2]))return b[b.length-1];var e=a.split("."),f=this.f(e[0],b,c,d),g=null;for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d){var e=a.call(b,d,function(a){return Hogan.compile(a).render(b)}),f=Hogan.compile(e.toString()).render(b,c);return this.b=f,!1},b:"",ls:function(a,b,c,d,e){var f=b[b.length-1];if(a.length>0)return this.ho(a,f,c,this.text.substring(d,e));var g=a.call(f);return typeof g=="function"?this.ho(g,f,c,this.text.substring(d,e)):g},lv:function(a,b,c){var d=b[b.length-1];return Hogan.compile(a.call(d).toString()).render(d,c)}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"};return a}(),Hogan=function(){function a(a){function s(){l.length>0&&(m.push(new String(l)),l="")}function t(){var a=!0;for(var b=p;b<m.length;b++){a=m[b].tag&&d[m[b].tag]<d._v||!m[b].tag&&m[b].match(c)==null;if(!a)return!1}return a}function u(a,b){s();if(a&&t())for(var c=p;c<m.length;c++)m[c].tag||m.splice(c,1);else b||m.push({tag:"\n"});n=!1,p=m.length}function v(a,c){var d="="+r,e=a.indexOf(d,c),f=b(a.substring(a.indexOf("=",c)+1,e)).split(" ");return q=f[0],r=f[1],e+d.length-1}var f=a.length,g=0,h=1,i=2,j=g,k=null,l="",m=[],n=!1,o=0,p=0,q="{{",r="}}";for(o=0;o<f;o++)if(j==g)e(q,a,o)?(--o,s(),j=h):a[o]=="\n"?u(n):l+=a[o];else if(j==h){o+=q.length-1;var w=d[a[o+1]];k=w?a[o+1]:"_v",n=o,k=="="?(o=v(a,o),j=g):(w&&o++,j=i)}else e(r,a,o)?(o+=r.length-1,m.push({tag:k,n:b(l),i:k=="/"?n-1:o+1}),l="",j=g,k=="{"&&o++):l+=a[o];return u(n,!0),m}function b(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function e(a,b,c){if(b[c]!=a[0])return!1;for(var d=1,e=a.length;d<e;d++)if(b[c+d]!=a[d])return!1;return!0}function f(a,b,c,d){var e=[],i=null,j=null;while(a.length>0){j=a.shift();if(j.tag=="#"||j.tag=="^"||g(j,d))c.push(j),j.nodes=f(a,j.tag,c,d),e.push(j);else{if(j.tag=="/"){if(c.length==0)throw new Error("Closing tag without opener: /"+j.n);i=c.pop();if(j.n!=i.n&&!h(j.n,i.n,d))throw new Error("Nesting error: "+i.n+" vs. "+j.n);return i.end=j.i,e}e.push(j)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function g(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function h(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function i(a,b,c){var d='var c = [cx];var b = "";var _ = this;'+p(a)+"return b;";if(c.asString)return"function(cx,p){"+d+";};";var e=new HoganTemplate(b);return e.r=new Function("cx","p",d),e}function n(a){return a.replace(m,"\\\\").replace(j,'\\"').replace(k,"\\n").replace(l,"\\r")}function o(a){return~a.indexOf(".")?"d":"f"}function p(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=q(a[c].nodes,a[c].n,o(a[c].n),a[c].i,a[c].end):e=="^"?b+=r(a[c].nodes,a[c].n,o(a[c].n)):e=="<"||e==">"?b+=s(a[c].n):e=="{"||e=="&"?b+=t(a[c].n,o(a[c].n)):e=="\n"?b+=v("\n"):e=="_v"?b+=u(a[c].n,o(a[c].n)):e===undefined&&(b+=v(a[c]))}return b}function q(a,b,c,d,e){var f="if(_.s(_."+c+'("'+n(b)+'",c,p,1),';return f+="c,p,0,"+d+","+e+")){",f+="b += _.rs(c,p,",f+='function(c,p){ var b = "";',f+=p(a),f+="return b;});c.pop();}",f+='else{b += _.b; _.b = ""};',f}function r(a,b,c){var d="if (!_.s(_."+c+'("'+n(b)+'",c,p,1),c,p,1,0,0)){';return d+=p(a),d+="};",d}function s(a){return'b += _.rp("'+n(a)+'",c[c.length - 1],p);'}function t(a,b){return"b += (_."+b+'("'+n(a)+'",c,p,0));'}function u(a,b){return"b += (_.v(_."+b+'("'+n(a)+'",c,p,0)));'}function v(a){return'b += "'+n(a)+'";'}var c=/\S/,d={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10},j=/\"/g,k=/\n/g,l=/\r/g,m=/\\/g;return{scan:a,parse:function(a,b){return b=b||{},f(a,"",[],b.sectionTags||[])},cache:{},compile:function(b,c){c=c||{};var d=this.cache[b];return d?d:(d=i(this.parse(a(b),c),b,c),this.cache[b]=d)}}}();typeof module!="undefined"&&module.exports?(module.exports=Hogan,module.exports.Template=HoganTemplate):typeof exports!="undefined"&&(exports.Hogan=Hogan,exports.HoganTemplate=HoganTemplate); \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.js b/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.js deleted file mode 100644 index 09170d635f7adffe817c7ca9a921d2e5d55992fa..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.js +++ /dev/null @@ -1,500 +0,0 @@ -/* - * Copyright 2011 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 HoganTemplate = (function () { - - function constructor(text) { - this.text = text; - }; - - constructor.prototype = { - // render: replaced by generated code. - r: function (context, partials) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials) { - return this.r(context, partials); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - return partial.render(context, partials); - }, - - // render a section - rs: function(context, partials, section) { - var buf = ''; - var tail = context[context.length - 1]; - if (!isArray(tail)) { - buf = section(context, partials); - return buf; - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end) { - if (isArray(val) && val.length === 0) { - return false; - } - - if (!inverted && typeof val == 'function') { - val = this.ls(val, ctx, partials, start, end); - } - - var pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - var names = key.split('.'); - var val = this.f(names[0], ctx, partials, returnFound); - var cx = null; - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false; - var v = null; - var found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text) { - var t = val.call(cx, text, function(t) { - return Hogan.compile(t).render(cx); - }); - var s = Hogan.compile(t.toString()).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, start, end) { - var cx = ctx[ctx.length - 1]; - if (val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end)); - } - var t = val.call(cx); - if (typeof t == 'function') { - return this.ho(t, cx, partials, this.text.substring(start, end)); - } - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - return Hogan.compile(val.call(cx).toString()).render(cx, partials); - } - }; - - var rAmp = /&/g, rLt = /</g, rGt = />/g, rApos =/\'/g, - rQuot = /\"/g, hChars =/[&<>\"\']/; - function hoganEscape(str) { - var s = String(str === null ? '' : str); - return hChars.test(s) ? s.replace(rAmp,'&') - .replace(rLt,'<').replace(rGt,'>') - .replace(rApos,''').replace(rQuot, '"') : s; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - } - - return constructor; -})(); - -var Hogan = (function () { - - function scan(text) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) == null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart; j < tokens.length; j++) { - if (!tokens[j].tag) { - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}) - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag; - var closeIndex = text.indexOf(close, index); - var delimiters = trim(text.substring(text.indexOf('=', index) + 1, - closeIndex)).split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - return closeIndex + close.length - 1; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text[i] == '\n') { - filterLine(seenTag); - } else { - buf += text[i]; - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - var tag = tagTypes[text[i + 1]]; - tagType = tag ? text[i + 1] : '_v'; - seenTag = i; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - } else { - if (tagChange(ctag, text, i)) { - i += ctag.length - 1; - tokens.push({tag: tagType, n: trim(buf), - i: (tagType == '/') ? seenTag - 1 : i + 1}); - buf = ''; - state = IN_TEXT; - if (tagType == '{') { - i++; - } - } else { - buf += text[i]; - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/; - - var tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - function tagChange(tag, text, index) { - if (text[index] != tag[0]) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text[index + i] != tag[i]) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || - isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length == 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function generate(tree, text, options) { - var code = 'var c = [cx];var b = "";var _ = this;' + - walk(tree) + 'return b;'; - if (options.asString) { - return 'function(cx,p){' + code + ';};'; - } - - var template = new HoganTemplate(text); - template.r = new Function('cx', 'p', code); - return template; - } - - var rQuot = /\"/g, rNewline = /\n/g, rCr = /\r/g, rSlash = /\\/g; - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r') - }; - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i].n); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('\n'); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text(tree[i]); - } - } - return code; - } - - function section(nodes, id, method, start, end) { - var code = 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),'; - code += 'c,p,0,' + start + ',' + end + ')){'; - code += 'b += _.rs(c,p,'; - code += 'function(c,p){ var b = "";'; - code += walk(nodes); - code += 'return b;});c.pop();}'; - code += 'else{b += _.b; _.b = ""};'; - return code; - } - - function invertedSection(nodes, id, method) { - var code = 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0)){'; - code += walk(nodes); - code += '};'; - return code; - } - - function partial(id) { - return 'b += _.rp("' + esc(id) + '",c[c.length - 1],p);'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += "' + esc(id) + '";'; - } - - return ({ - scan: scan, - - parse: function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - cache: {}, - - compile: function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - options = options || {}; - - var t = this.cache[text]; - if (t) { - return t; - } - t = generate(this.parse(scan(text), options), text, options); - return this.cache[text] = t; - } - }); -})(); - -// Export the hogan constructor for Node.js and CommonJS. -if (typeof module !== 'undefined' && module.exports) { - module.exports = Hogan; - module.exports.Template = HoganTemplate; -} else if (typeof exports !== 'undefined') { - exports.Hogan = Hogan; - exports.HoganTemplate = HoganTemplate; -} \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.min.js b/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.min.js deleted file mode 100644 index 13ec535aae04c3c4a7ac8f16f1c15101f8d8a91e..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.0/hogan.min.js +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Copyright 2011 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 HoganTemplate=function(){function a(a){this.text=a}function h(a){var h=String(a===null?"":a);return g.test(h)?h.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):h}a.prototype={r:function(a,b){return""},v:h,render:function(a,b){return this.r(a,b)},rp:function(a,b,c,d){var e=c[a];return e?e.render(b,c):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b),d;for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f){if(i(a)&&a.length===0)return!1;!d&&typeof a=="function"&&(a=this.ls(a,b,c,e,f));var g=a===""||!!a;return!d&&g&&b&&b.push(typeof a=="object"?a:b[b.length-1]),g},d:function(a,b,c,d){if(a==="."&&i(b[b.length-2]))return b[b.length-1];var e=a.split("."),f=this.f(e[0],b,c,d),g=null;for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d){var e=a.call(b,d,function(a){return Hogan.compile(a).render(b)}),f=Hogan.compile(e.toString()).render(b,c);return this.b=f,!1},b:"",ls:function(a,b,c,d,e){var f=b[b.length-1];if(a.length>0)return this.ho(a,f,c,this.text.substring(d,e));var g=a.call(f);return typeof g=="function"?this.ho(g,f,c,this.text.substring(d,e)):g},lv:function(a,b,c){var d=b[b.length-1];return Hogan.compile(a.call(d).toString()).render(d,c)}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"};return a}(),Hogan=function(){function a(a){function s(){l.length>0&&(m.push(new String(l)),l="")}function t(){var a=!0;for(var b=p;b<m.length;b++){a=m[b].tag&&d[m[b].tag]<d._v||!m[b].tag&&m[b].match(c)==null;if(!a)return!1}return a}function u(a,b){s();if(a&&t())for(var c=p;c<m.length;c++)m[c].tag||m.splice(c,1);else b||m.push({tag:"\n"});n=!1,p=m.length}function v(a,c){var d="="+r,e=a.indexOf(d,c),f=b(a.substring(a.indexOf("=",c)+1,e)).split(" ");return q=f[0],r=f[1],e+d.length-1}var f=a.length,g=0,h=1,i=2,j=g,k=null,l="",m=[],n=!1,o=0,p=0,q="{{",r="}}";for(o=0;o<f;o++)if(j==g)e(q,a,o)?(--o,s(),j=h):a[o]=="\n"?u(n):l+=a[o];else if(j==h){o+=q.length-1;var w=d[a[o+1]];k=w?a[o+1]:"_v",n=o,k=="="?(o=v(a,o),j=g):(w&&o++,j=i)}else e(r,a,o)?(o+=r.length-1,m.push({tag:k,n:b(l),i:k=="/"?n-1:o+1}),l="",j=g,k=="{"&&o++):l+=a[o];return u(n,!0),m}function b(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function e(a,b,c){if(b[c]!=a[0])return!1;for(var d=1,e=a.length;d<e;d++)if(b[c+d]!=a[d])return!1;return!0}function f(a,b,c,d){var e=[],i=null,j=null;while(a.length>0){j=a.shift();if(j.tag=="#"||j.tag=="^"||g(j,d))c.push(j),j.nodes=f(a,j.tag,c,d),e.push(j);else{if(j.tag=="/"){if(c.length==0)throw new Error("Closing tag without opener: /"+j.n);i=c.pop();if(j.n!=i.n&&!h(j.n,i.n,d))throw new Error("Nesting error: "+i.n+" vs. "+j.n);return i.end=j.i,e}e.push(j)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function g(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function h(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function i(a,b,c){var d='var c = [cx];var b = "";var _ = this;'+p(a)+"return b;";if(c.asString)return"function(cx,p){"+d+";};";var e=new HoganTemplate(b);return e.r=new Function("cx","p",d),e}function n(a){return a.replace(m,"\\\\").replace(j,'\\"').replace(k,"\\n").replace(l,"\\r")}function o(a){return~a.indexOf(".")?"d":"f"}function p(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=q(a[c].nodes,a[c].n,o(a[c].n),a[c].i,a[c].end):e=="^"?b+=r(a[c].nodes,a[c].n,o(a[c].n)):e=="<"||e==">"?b+=s(a[c].n):e=="{"||e=="&"?b+=t(a[c].n,o(a[c].n)):e=="\n"?b+=v("\n"):e=="_v"?b+=u(a[c].n,o(a[c].n)):e===undefined&&(b+=v(a[c]))}return b}function q(a,b,c,d,e){var f="if(_.s(_."+c+'("'+n(b)+'",c,p,1),';return f+="c,p,0,"+d+","+e+")){",f+="b += _.rs(c,p,",f+='function(c,p){ var b = "";',f+=p(a),f+="return b;});c.pop();}",f+='else{b += _.b; _.b = ""};',f}function r(a,b,c){var d="if (!_.s(_."+c+'("'+n(b)+'",c,p,1),c,p,1,0,0)){';return d+=p(a),d+="};",d}function s(a){return'b += _.rp("'+n(a)+'",c[c.length - 1],p);'}function t(a,b){return"b += (_."+b+'("'+n(a)+'",c,p,0));'}function u(a,b){return"b += (_.v(_."+b+'("'+n(a)+'",c,p,0)));'}function v(a){return'b += "'+n(a)+'";'}var c=/\S/,d={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10},j=/\"/g,k=/\n/g,l=/\r/g,m=/\\/g;return{scan:a,parse:function(a,b){return b=b||{},f(a,"",[],b.sectionTags||[])},cache:{},compile:function(b,c){c=c||{};var d=this.cache[b];return d?d:(d=i(this.parse(a(b),c),b,c),this.cache[b]=d)}}}();typeof module!="undefined"&&module.exports?(module.exports=Hogan,module.exports.Template=HoganTemplate):typeof exports!="undefined"&&(exports.Hogan=Hogan,exports.HoganTemplate=HoganTemplate); \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.js b/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.js deleted file mode 100644 index 4f6f6d22f10072909a9010a6121dfc732baac988..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.js +++ /dev/null @@ -1,545 +0,0 @@ -/* - * Copyright 2011 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 HoganTemplate = (function () { - - function constructor(text) { - this.text = text; - } - - constructor.prototype = { - - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - return partial.r(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (!inverted && typeof val == 'function') { - val = this.ls(val, ctx, partials, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var t = val.call(cx, text, function(t) { - return Hogan.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = Hogan.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = val.call(cx); - - if (val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - if (typeof t == 'function') { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - return Hogan.compile(val.call(cx).toString()).render(cx, partials); - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String(str === null ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - - return constructor; - -})(); - -var Hogan = (function () { - - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - i++; - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function generate(tree, text, options) { - var code = 'i = i || "";var c = [cx];var b = i + "";var _ = this;' - + walk(tree) - + 'return b;'; - - if (options.asString) { - return 'function(cx,p,i){' + code + ';}'; - } - - var template = new HoganTemplate(text); - template.r = new Function('cx', 'p', 'i', code); - return template; - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' + - 'b += _.rs(c,p,' + - 'function(c,p){ var b = "";' + - walk(nodes) + - 'return b;});c.pop();}' + - 'else{b += _.b; _.b = ""};'; - } - - function invertedSection(nodes, id, method) { - return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return 'b += _.rp("' + esc(tok.n) + '",c[c.length - 1],p,"' + (tok.indent || '') + '");'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += ' + id + ';'; - } - - return ({ - scan: scan, - - parse: function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - cache: {}, - - compile: function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var t = this.cache[text]; - - if (t) { - return t; - } - - t = generate(this.parse(scan(text, options.delimiters), options), text, options); - return this.cache[text] = t; - } - }); -})(); - -// Export the hogan constructor for Node.js and CommonJS. -if (typeof module !== 'undefined' && module.exports) { - module.exports = Hogan; - module.exports.Template = HoganTemplate; -} else if (typeof define === 'function' && define.amd) { - define(function () { return Hogan; }); -} else if (typeof exports !== 'undefined') { - exports.Hogan = Hogan; - exports.HoganTemplate = HoganTemplate; -} diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.min.js b/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.min.js deleted file mode 100644 index 0af8a36fddd2b9abc3b20c73504ed4c10d3aa3df..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.3/hogan.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* @preserve Copyright 2012 Twitter, Inc. -* @license http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -var HoganTemplate=function(){function a(a){this.text=a}function h(a){return a=String(a===null?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.r(b,c,d)},rp:function(a,b,c,d){var e=c[a];return e?e.r(b,c,d):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f,g){var h;return i(a)&&a.length===0?!1:(!d&&typeof a=="function"&&(a=this.ls(a,b,c,e,f,g)),h=a===""||!!a,!d&&h&&b&&b.push(typeof a=="object"?a:b[b.length-1]),h)},d:function(a,b,c,d){var e=a.split("."),f=this.f(e[0],b,c,d),g=null;if(a==="."&&i(b[b.length-2]))return b[b.length-1];for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=a.call(b,d,function(a){return Hogan.compile(a,{delimiters:e}).render(b,c)}),g=Hogan.compile(f.toString(),{delimiters:e}).render(b,c);return this.b=g,!1},b:"",ls:function(a,b,c,d,e,f){var g=b[b.length-1],h=a.call(g);return a.length>0?this.ho(a,g,c,this.text.substring(d,e),f):typeof h=="function"?this.ho(h,g,c,this.text.substring(d,e),f):h},lv:function(a,b,c){var d=b[b.length-1];return Hogan.compile(a.call(d).toString()).render(d,c)}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"};return a}(),Hogan=function(){function g(b,c){function u(){n.length>0&&(o.push(new String(n)),n="")}function v(){var b=!0;for(var c=r;c<o.length;c++){b=o[c].tag&&f[o[c].tag]<f._v||!o[c].tag&&o[c].match(a)===null;if(!b)return!1}return b}function w(a,b){u();if(a&&v())for(var c=r,d;c<o.length;c++)o[c].tag||((d=o[c+1])&&d.tag==">"&&(d.indent=o[c].toString()),o.splice(c,1));else b||o.push({tag:"\n"});p=!1,r=o.length}function x(a,b){var c="="+t,d=a.indexOf(c,b),e=h(a.substring(a.indexOf("=",b)+1,d)).split(" ");return s=e[0],t=e[1],d+c.length-1}var d=b.length,e=0,g=1,j=2,k=e,l=null,m=null,n="",o=[],p=!1,q=0,r=0,s="{{",t="}}";c&&(c=c.split(" "),s=c[0],t=c[1]);for(q=0;q<d;q++)k==e?i(s,b,q)?(--q,u(),k=g):b.charAt(q)=="\n"?w(p):n+=b.charAt(q):k==g?(q+=s.length-1,m=f[b.charAt(q+1)],l=m?b.charAt(q+1):"_v",l=="="?(q=x(b,q),k=e):(m&&q++,k=j),p=q):i(t,b,q)?(o.push({tag:l,n:h(n),otag:s,ctag:t,i:l=="/"?p-t.length:q+s.length}),n="",q+=t.length-1,k=e,l=="{"&&q++):n+=b.charAt(q);return w(p,!0),o}function h(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function i(a,b,c){if(b.charAt(c)!=a.charAt(0))return!1;for(var d=1,e=a.length;d<e;d++)if(b.charAt(c+d)!=a.charAt(d))return!1;return!0}function j(a,b,c,d){var e=[],f=null,g=null;while(a.length>0){g=a.shift();if(g.tag=="#"||g.tag=="^"||k(g,d))c.push(g),g.nodes=j(a,g.tag,c,d),e.push(g);else{if(g.tag=="/"){if(c.length===0)throw new Error("Closing tag without opener: /"+g.n);f=c.pop();if(g.n!=f.n&&!l(g.n,f.n,d))throw new Error("Nesting error: "+f.n+" vs. "+g.n);return f.end=g.i,e}e.push(g)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function k(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function l(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function m(a,b,c){var d='i = i || "";var c = [cx];var b = i + "";var _ = this;'+p(a)+"return b;";if(c.asString)return"function(cx,p,i){"+d+";}";var e=new HoganTemplate(b);return e.r=new Function("cx","p","i",d),e}function n(a){return a.replace(e,"\\\\").replace(b,'\\"').replace(c,"\\n").replace(d,"\\r")}function o(a){return~a.indexOf(".")?"d":"f"}function p(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=q(a[c].nodes,a[c].n,o(a[c].n),a[c].i,a[c].end,a[c].otag+" "+a[c].ctag):e=="^"?b+=r(a[c].nodes,a[c].n,o(a[c].n)):e=="<"||e==">"?b+=s(a[c]):e=="{"||e=="&"?b+=t(a[c].n,o(a[c].n)):e=="\n"?b+=v('"\\n"'+(a.length-1==c?"":" + i")):e=="_v"?b+=u(a[c].n,o(a[c].n)):e===undefined&&(b+=v('"'+n(a[c])+'"'))}return b}function q(a,b,c,d,e,f){return"if(_.s(_."+c+'("'+n(b)+'",c,p,1),'+"c,p,0,"+d+","+e+', "'+f+'")){'+"b += _.rs(c,p,"+'function(c,p){ var b = "";'+p(a)+"return b;});c.pop();}"+'else{b += _.b; _.b = ""};'}function r(a,b,c){return"if (!_.s(_."+c+'("'+n(b)+'",c,p,1),c,p,1,0,0,"")){'+p(a)+"};"}function s(a){return'b += _.rp("'+n(a.n)+'",c[c.length - 1],p,"'+(a.indent||"")+'");'}function t(a,b){return"b += (_."+b+'("'+n(a)+'",c,p,0));'}function u(a,b){return"b += (_.v(_."+b+'("'+n(a)+'",c,p,0)));'}function v(a){return"b += "+a+";"}var a=/\S/,b=/\"/g,c=/\n/g,d=/\r/g,e=/\\/g,f={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10};return{scan:g,parse:function(a,b){return b=b||{},j(a,"",[],b.sectionTags||[])},cache:{},compile:function(a,b){b=b||{};var c=this.cache[a];return c?c:(c=m(this.parse(g(a,b.delimiters),b),a,b),this.cache[a]=c)}}}();typeof module!="undefined"&&module.exports?(module.exports=Hogan,module.exports.Template=HoganTemplate):typeof define=="function"&&define.amd?define(function(){return Hogan}):typeof exports!="undefined"&&(exports.Hogan=Hogan,exports.HoganTemplate=HoganTemplate) \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.amd.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.amd.js deleted file mode 100644 index ec55a5d3aba68ebea0370836e9c1ead4ec6eae99..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.amd.js +++ /dev/null @@ -1,576 +0,0 @@ -/* - * Copyright 2011 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 Hogan = {}; - -(function (Hogan) { - Hogan.Template = function constructor(renderFunc, text, compiler) { - if (renderFunc) { - this.r = renderFunc; - } - this.c = compiler; - this.text = text || ''; - } - - Hogan.Template.prototype = { - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.ri([context], partials || {}, indent); - }, - - // render internal -- a hook for overrides that catches partials too - ri: function (context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - if (this.c && typeof partial == 'string') { - partial = this.c.compile(partial); - } - - return partial.ri(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (typeof val == 'function') { - val = this.ls(val, ctx, partials, inverted, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var t = val.call(cx, text, function(t) { - return compiler.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - if (typeof result == 'function') { - result = result.call(cx); - } - result = result.toString(); - - if (this.c && ~result.indexOf("{{")) { - return this.c.compile(result).render(cx, partials); - } - - return result; - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String((str === null || str === undefined) ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - - - - -(function (Hogan) { - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - Hogan.scan = function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - if (ctag == '}}') { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === '}') { - token.n = token.n.substring(0, token.n.length - 1); - } - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function writeCode(tree) { - return 'i = i || "";var b = i + "";var _ = this;' + walk(tree) + 'return b;'; - } - - Hogan.generate = function (code, text, options) { - if (options.asString) { - return 'function(c,p,i){' + code + ';}'; - } - - return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan); - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' + - 'b += _.rs(c,p,' + - 'function(c,p){ var b = "";' + - walk(nodes) + - 'return b;});c.pop();}' + - 'else{b += _.b; _.b = ""};'; - } - - function invertedSection(nodes, id, method) { - return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return 'b += _.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '");'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += ' + id + ';'; - } - - Hogan.parse = function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - Hogan.cache = {}; - - Hogan.compile = function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var key = text + '||' + !!options.asString; - - var t = this.cache[key]; - - if (t) { - return t; - } - - t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), options)), text, options); - return this.cache[key] = t; - }; -})(typeof exports !== 'undefined' ? exports : Hogan); - - -if (typeof define === 'function' && define.amd) { - define(Hogan); -} diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.common.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.common.js deleted file mode 100644 index 7520652356ac0cd4e39183f7eac173afb299d246..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.common.js +++ /dev/null @@ -1,576 +0,0 @@ -/* - * Copyright 2011 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 Hogan = {}; - -(function (Hogan) { - Hogan.Template = function constructor(renderFunc, text, compiler) { - if (renderFunc) { - this.r = renderFunc; - } - this.c = compiler; - this.text = text || ''; - } - - Hogan.Template.prototype = { - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.ri([context], partials || {}, indent); - }, - - // render internal -- a hook for overrides that catches partials too - ri: function (context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - if (this.c && typeof partial == 'string') { - partial = this.c.compile(partial); - } - - return partial.ri(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (typeof val == 'function') { - val = this.ls(val, ctx, partials, inverted, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var t = val.call(cx, text, function(t) { - return compiler.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - if (typeof result == 'function') { - result = result.call(cx); - } - result = result.toString(); - - if (this.c && ~result.indexOf("{{")) { - return this.c.compile(result).render(cx, partials); - } - - return result; - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String((str === null || str === undefined) ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - - - - -(function (Hogan) { - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - Hogan.scan = function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - if (ctag == '}}') { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === '}') { - token.n = token.n.substring(0, token.n.length - 1); - } - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function writeCode(tree) { - return 'i = i || "";var b = i + "";var _ = this;' + walk(tree) + 'return b;'; - } - - Hogan.generate = function (code, text, options) { - if (options.asString) { - return 'function(c,p,i){' + code + ';}'; - } - - return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan); - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' + - 'b += _.rs(c,p,' + - 'function(c,p){ var b = "";' + - walk(nodes) + - 'return b;});c.pop();}' + - 'else{b += _.b; _.b = ""};'; - } - - function invertedSection(nodes, id, method) { - return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return 'b += _.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '");'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += ' + id + ';'; - } - - Hogan.parse = function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - Hogan.cache = {}; - - Hogan.compile = function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var key = text + '||' + !!options.asString; - - var t = this.cache[key]; - - if (t) { - return t; - } - - t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), options)), text, options); - return this.cache[key] = t; - }; -})(typeof exports !== 'undefined' ? exports : Hogan); - - -if (typeof module !== 'undefined' && module.exports) { - module.exports = Hogan; -} diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.js deleted file mode 100644 index 18075626081265df863ca5808d27dfa5c592179e..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.js +++ /dev/null @@ -1,572 +0,0 @@ -/* - * Copyright 2011 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 Hogan = {}; - -(function (Hogan) { - Hogan.Template = function constructor(renderFunc, text, compiler) { - if (renderFunc) { - this.r = renderFunc; - } - this.c = compiler; - this.text = text || ''; - } - - Hogan.Template.prototype = { - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.ri([context], partials || {}, indent); - }, - - // render internal -- a hook for overrides that catches partials too - ri: function (context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - if (this.c && typeof partial == 'string') { - partial = this.c.compile(partial); - } - - return partial.ri(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (typeof val == 'function') { - val = this.ls(val, ctx, partials, inverted, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var t = val.call(cx, text, function(t) { - return compiler.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - if (typeof result == 'function') { - result = result.call(cx); - } - result = result.toString(); - - if (this.c && ~result.indexOf("{{")) { - return this.c.compile(result).render(cx, partials); - } - - return result; - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String((str === null || str === undefined) ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - - - - -(function (Hogan) { - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - Hogan.scan = function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - if (ctag == '}}') { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === '}') { - token.n = token.n.substring(0, token.n.length - 1); - } - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function writeCode(tree) { - return 'i = i || "";var b = i + "";var _ = this;' + walk(tree) + 'return b;'; - } - - Hogan.generate = function (code, text, options) { - if (options.asString) { - return 'function(c,p,i){' + code + ';}'; - } - - return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan); - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' + - 'b += _.rs(c,p,' + - 'function(c,p){ var b = "";' + - walk(nodes) + - 'return b;});c.pop();}' + - 'else{b += _.b; _.b = ""};'; - } - - function invertedSection(nodes, id, method) { - return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return 'b += _.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '");'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += ' + id + ';'; - } - - Hogan.parse = function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - Hogan.cache = {}; - - Hogan.compile = function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var key = text + '||' + !!options.asString; - - var t = this.cache[key]; - - if (t) { - return t; - } - - t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), options)), text, options); - return this.cache[key] = t; - }; -})(typeof exports !== 'undefined' ? exports : Hogan); - diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.amd.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.amd.js deleted file mode 100644 index aee5922bc2f0b919f93ef871b4a63df471f20932..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.amd.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* @preserve Copyright 2012 Twitter, Inc. -* @license http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -var Hogan={};(function(a){function h(a){return a=String(a===null||a===undefined?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.Template=function j(a,b,c){a&&(this.r=a),this.c=c,this.text=b||""},a.Template.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.ri([b],c||{},d)},ri:function(a,b,c){return this.r(a,b,c)},rp:function(a,b,c,d){var e=c[a];return e?(this.c&&typeof e=="string"&&(e=this.c.compile(e)),e.ri(b,c,d)):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f,g){var h;return i(a)&&a.length===0?!1:(typeof a=="function"&&(a=this.ls(a,b,c,d,e,f,g)),h=a===""||!!a,!d&&h&&b&&b.push(typeof a=="object"?a:b[b.length-1]),h)},d:function(a,b,c,d){var e=a.split("."),f=this.f(e[0],b,c,d),g=null;if(a==="."&&i(b[b.length-2]))return b[b.length-1];for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=this.c,g=a.call(b,d,function(a){return f.compile(a,{delimiters:e}).render(b,c)}),h=f.compile(g.toString(),{delimiters:e}).render(b,c);return this.b=h,!1},b:"",ls:function(a,b,c,d,e,f,g){var h=b[b.length-1],i=null;if(!d&&this.c&&a.length>0)return this.ho(a,h,c,this.text.substring(e,f),g);i=a.call(h);if(typeof i=="function"){if(d)return!0;if(this.c)return this.ho(i,h,c,this.text.substring(e,f),g)}return i},lv:function(a,b,c){var d=b[b.length-1],e=a.call(d);return typeof e=="function"&&(e=e.call(d)),e=e.toString(),this.c&&~e.indexOf("{{")?this.c.compile(e).render(d,c):e}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"}})(typeof exports!="undefined"?exports:Hogan),function(a){function h(a){a.n.substr(a.n.length-1)==="}"&&(a.n=a.n.substring(0,a.n.length-1))}function i(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function j(a,b,c){if(b.charAt(c)!=a.charAt(0))return!1;for(var d=1,e=a.length;d<e;d++)if(b.charAt(c+d)!=a.charAt(d))return!1;return!0}function k(a,b,c,d){var e=[],f=null,g=null;while(a.length>0){g=a.shift();if(g.tag=="#"||g.tag=="^"||l(g,d))c.push(g),g.nodes=k(a,g.tag,c,d),e.push(g);else{if(g.tag=="/"){if(c.length===0)throw new Error("Closing tag without opener: /"+g.n);f=c.pop();if(g.n!=f.n&&!m(g.n,f.n,d))throw new Error("Nesting error: "+f.n+" vs. "+g.n);return f.end=g.i,e}e.push(g)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function l(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function m(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function n(a){return'i = i || "";var b = i + "";var _ = this;'+q(a)+"return b;"}function o(a){return a.replace(f,"\\\\").replace(c,'\\"').replace(d,"\\n").replace(e,"\\r")}function p(a){return~a.indexOf(".")?"d":"f"}function q(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=r(a[c].nodes,a[c].n,p(a[c].n),a[c].i,a[c].end,a[c].otag+" "+a[c].ctag):e=="^"?b+=s(a[c].nodes,a[c].n,p(a[c].n)):e=="<"||e==">"?b+=t(a[c]):e=="{"||e=="&"?b+=u(a[c].n,p(a[c].n)):e=="\n"?b+=w('"\\n"'+(a.length-1==c?"":" + i")):e=="_v"?b+=v(a[c].n,p(a[c].n)):e===undefined&&(b+=w('"'+o(a[c])+'"'))}return b}function r(a,b,c,d,e,f){return"if(_.s(_."+c+'("'+o(b)+'",c,p,1),'+"c,p,0,"+d+","+e+', "'+f+'")){'+"b += _.rs(c,p,"+'function(c,p){ var b = "";'+q(a)+"return b;});c.pop();}"+'else{b += _.b; _.b = ""};'}function s(a,b,c){return"if (!_.s(_."+c+'("'+o(b)+'",c,p,1),c,p,1,0,0,"")){'+q(a)+"};"}function t(a){return'b += _.rp("'+o(a.n)+'",c,p,"'+(a.indent||"")+'");'}function u(a,b){return"b += (_."+b+'("'+o(a)+'",c,p,0));'}function v(a,b){return"b += (_.v(_."+b+'("'+o(a)+'",c,p,0)));'}function w(a){return"b += "+a+";"}var b=/\S/,c=/\"/g,d=/\n/g,e=/\r/g,f=/\\/g,g={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10};a.scan=function(c,d){function w(){p.length>0&&(q.push(new String(p)),p="")}function x(){var a=!0;for(var c=t;c<q.length;c++){a=q[c].tag&&g[q[c].tag]<g._v||!q[c].tag&&q[c].match(b)===null;if(!a)return!1}return a}function y(a,b){w();if(a&&x())for(var c=t,d;c<q.length;c++)q[c].tag||((d=q[c+1])&&d.tag==">"&&(d.indent=q[c].toString()),q.splice(c,1));else b||q.push({tag:"\n"});r=!1,t=q.length}function z(a,b){var c="="+v,d=a.indexOf(c,b),e=i(a.substring(a.indexOf("=",b)+1,d)).split(" ");return u=e[0],v=e[1],d+c.length-1}var e=c.length,f=0,k=1,l=2,m=f,n=null,o=null,p="",q=[],r=!1,s=0,t=0,u="{{",v="}}";d&&(d=d.split(" "),u=d[0],v=d[1]);for(s=0;s<e;s++)m==f?j(u,c,s)?(--s,w(),m=k):c.charAt(s)=="\n"?y(r):p+=c.charAt(s):m==k?(s+=u.length-1,o=g[c.charAt(s+1)],n=o?c.charAt(s+1):"_v",n=="="?(s=z(c,s),m=f):(o&&s++,m=l),r=s):j(v,c,s)?(q.push({tag:n,n:i(p),otag:u,ctag:v,i:n=="/"?r-v.length:s+u.length}),p="",s+=v.length-1,m=f,n=="{"&&(v=="}}"?s++:h(q[q.length-1]))):p+=c.charAt(s);return y(r,!0),q},a.generate=function(b,c,d){return d.asString?"function(c,p,i){"+b+";}":new a.Template(new Function("c","p","i",b),c,a)},a.parse=function(a,b){return b=b||{},k(a,"",[],b.sectionTags||[])},a.cache={},a.compile=function(a,b){b=b||{};var c=a+"||"+!!b.asString,d=this.cache[c];return d?d:(d=this.generate(n(this.parse(this.scan(a,b.delimiters),b)),a,b),this.cache[c]=d)}}(typeof exports!="undefined"?exports:Hogan),typeof define=="function"&&define.amd&&define(Hogan) \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.common.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.common.js deleted file mode 100644 index ae547d06b93647db134d79d74ae90243c068aa17..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.common.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* @preserve Copyright 2012 Twitter, Inc. -* @license http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -var Hogan={};(function(a){function h(a){return a=String(a===null||a===undefined?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.Template=function j(a,b,c){a&&(this.r=a),this.c=c,this.text=b||""},a.Template.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.ri([b],c||{},d)},ri:function(a,b,c){return this.r(a,b,c)},rp:function(a,b,c,d){var e=c[a];return e?(this.c&&typeof e=="string"&&(e=this.c.compile(e)),e.ri(b,c,d)):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f,g){var h;return i(a)&&a.length===0?!1:(typeof a=="function"&&(a=this.ls(a,b,c,d,e,f,g)),h=a===""||!!a,!d&&h&&b&&b.push(typeof a=="object"?a:b[b.length-1]),h)},d:function(a,b,c,d){var e=a.split("."),f=this.f(e[0],b,c,d),g=null;if(a==="."&&i(b[b.length-2]))return b[b.length-1];for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=this.c,g=a.call(b,d,function(a){return f.compile(a,{delimiters:e}).render(b,c)}),h=f.compile(g.toString(),{delimiters:e}).render(b,c);return this.b=h,!1},b:"",ls:function(a,b,c,d,e,f,g){var h=b[b.length-1],i=null;if(!d&&this.c&&a.length>0)return this.ho(a,h,c,this.text.substring(e,f),g);i=a.call(h);if(typeof i=="function"){if(d)return!0;if(this.c)return this.ho(i,h,c,this.text.substring(e,f),g)}return i},lv:function(a,b,c){var d=b[b.length-1],e=a.call(d);return typeof e=="function"&&(e=e.call(d)),e=e.toString(),this.c&&~e.indexOf("{{")?this.c.compile(e).render(d,c):e}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"}})(typeof exports!="undefined"?exports:Hogan),function(a){function h(a){a.n.substr(a.n.length-1)==="}"&&(a.n=a.n.substring(0,a.n.length-1))}function i(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function j(a,b,c){if(b.charAt(c)!=a.charAt(0))return!1;for(var d=1,e=a.length;d<e;d++)if(b.charAt(c+d)!=a.charAt(d))return!1;return!0}function k(a,b,c,d){var e=[],f=null,g=null;while(a.length>0){g=a.shift();if(g.tag=="#"||g.tag=="^"||l(g,d))c.push(g),g.nodes=k(a,g.tag,c,d),e.push(g);else{if(g.tag=="/"){if(c.length===0)throw new Error("Closing tag without opener: /"+g.n);f=c.pop();if(g.n!=f.n&&!m(g.n,f.n,d))throw new Error("Nesting error: "+f.n+" vs. "+g.n);return f.end=g.i,e}e.push(g)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function l(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function m(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function n(a){return'i = i || "";var b = i + "";var _ = this;'+q(a)+"return b;"}function o(a){return a.replace(f,"\\\\").replace(c,'\\"').replace(d,"\\n").replace(e,"\\r")}function p(a){return~a.indexOf(".")?"d":"f"}function q(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=r(a[c].nodes,a[c].n,p(a[c].n),a[c].i,a[c].end,a[c].otag+" "+a[c].ctag):e=="^"?b+=s(a[c].nodes,a[c].n,p(a[c].n)):e=="<"||e==">"?b+=t(a[c]):e=="{"||e=="&"?b+=u(a[c].n,p(a[c].n)):e=="\n"?b+=w('"\\n"'+(a.length-1==c?"":" + i")):e=="_v"?b+=v(a[c].n,p(a[c].n)):e===undefined&&(b+=w('"'+o(a[c])+'"'))}return b}function r(a,b,c,d,e,f){return"if(_.s(_."+c+'("'+o(b)+'",c,p,1),'+"c,p,0,"+d+","+e+', "'+f+'")){'+"b += _.rs(c,p,"+'function(c,p){ var b = "";'+q(a)+"return b;});c.pop();}"+'else{b += _.b; _.b = ""};'}function s(a,b,c){return"if (!_.s(_."+c+'("'+o(b)+'",c,p,1),c,p,1,0,0,"")){'+q(a)+"};"}function t(a){return'b += _.rp("'+o(a.n)+'",c,p,"'+(a.indent||"")+'");'}function u(a,b){return"b += (_."+b+'("'+o(a)+'",c,p,0));'}function v(a,b){return"b += (_.v(_."+b+'("'+o(a)+'",c,p,0)));'}function w(a){return"b += "+a+";"}var b=/\S/,c=/\"/g,d=/\n/g,e=/\r/g,f=/\\/g,g={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10};a.scan=function(c,d){function w(){p.length>0&&(q.push(new String(p)),p="")}function x(){var a=!0;for(var c=t;c<q.length;c++){a=q[c].tag&&g[q[c].tag]<g._v||!q[c].tag&&q[c].match(b)===null;if(!a)return!1}return a}function y(a,b){w();if(a&&x())for(var c=t,d;c<q.length;c++)q[c].tag||((d=q[c+1])&&d.tag==">"&&(d.indent=q[c].toString()),q.splice(c,1));else b||q.push({tag:"\n"});r=!1,t=q.length}function z(a,b){var c="="+v,d=a.indexOf(c,b),e=i(a.substring(a.indexOf("=",b)+1,d)).split(" ");return u=e[0],v=e[1],d+c.length-1}var e=c.length,f=0,k=1,l=2,m=f,n=null,o=null,p="",q=[],r=!1,s=0,t=0,u="{{",v="}}";d&&(d=d.split(" "),u=d[0],v=d[1]);for(s=0;s<e;s++)m==f?j(u,c,s)?(--s,w(),m=k):c.charAt(s)=="\n"?y(r):p+=c.charAt(s):m==k?(s+=u.length-1,o=g[c.charAt(s+1)],n=o?c.charAt(s+1):"_v",n=="="?(s=z(c,s),m=f):(o&&s++,m=l),r=s):j(v,c,s)?(q.push({tag:n,n:i(p),otag:u,ctag:v,i:n=="/"?r-v.length:s+u.length}),p="",s+=v.length-1,m=f,n=="{"&&(v=="}}"?s++:h(q[q.length-1]))):p+=c.charAt(s);return y(r,!0),q},a.generate=function(b,c,d){return d.asString?"function(c,p,i){"+b+";}":new a.Template(new Function("c","p","i",b),c,a)},a.parse=function(a,b){return b=b||{},k(a,"",[],b.sectionTags||[])},a.cache={},a.compile=function(a,b){b=b||{};var c=a+"||"+!!b.asString,d=this.cache[c];return d?d:(d=this.generate(n(this.parse(this.scan(a,b.delimiters),b)),a,b),this.cache[c]=d)}}(typeof exports!="undefined"?exports:Hogan),typeof module!="undefined"&&module.exports&&(module.exports=Hogan) \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.js deleted file mode 100644 index bbdfa0f78084cd8dd289b6068a3ee3f6bc0ef6f4..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* @preserve Copyright 2012 Twitter, Inc. -* @license http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -var Hogan={};(function(a){function h(a){return a=String(a===null||a===undefined?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.Template=function j(a,b,c){a&&(this.r=a),this.c=c,this.text=b||""},a.Template.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.ri([b],c||{},d)},ri:function(a,b,c){return this.r(a,b,c)},rp:function(a,b,c,d){var e=c[a];return e?(this.c&&typeof e=="string"&&(e=this.c.compile(e)),e.ri(b,c,d)):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f,g){var h;return i(a)&&a.length===0?!1:(typeof a=="function"&&(a=this.ls(a,b,c,d,e,f,g)),h=a===""||!!a,!d&&h&&b&&b.push(typeof a=="object"?a:b[b.length-1]),h)},d:function(a,b,c,d){var e=a.split("."),f=this.f(e[0],b,c,d),g=null;if(a==="."&&i(b[b.length-2]))return b[b.length-1];for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=this.c,g=a.call(b,d,function(a){return f.compile(a,{delimiters:e}).render(b,c)}),h=f.compile(g.toString(),{delimiters:e}).render(b,c);return this.b=h,!1},b:"",ls:function(a,b,c,d,e,f,g){var h=b[b.length-1],i=null;if(!d&&this.c&&a.length>0)return this.ho(a,h,c,this.text.substring(e,f),g);i=a.call(h);if(typeof i=="function"){if(d)return!0;if(this.c)return this.ho(i,h,c,this.text.substring(e,f),g)}return i},lv:function(a,b,c){var d=b[b.length-1],e=a.call(d);return typeof e=="function"&&(e=e.call(d)),e=e.toString(),this.c&&~e.indexOf("{{")?this.c.compile(e).render(d,c):e}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"}})(typeof exports!="undefined"?exports:Hogan),function(a){function h(a){a.n.substr(a.n.length-1)==="}"&&(a.n=a.n.substring(0,a.n.length-1))}function i(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function j(a,b,c){if(b.charAt(c)!=a.charAt(0))return!1;for(var d=1,e=a.length;d<e;d++)if(b.charAt(c+d)!=a.charAt(d))return!1;return!0}function k(a,b,c,d){var e=[],f=null,g=null;while(a.length>0){g=a.shift();if(g.tag=="#"||g.tag=="^"||l(g,d))c.push(g),g.nodes=k(a,g.tag,c,d),e.push(g);else{if(g.tag=="/"){if(c.length===0)throw new Error("Closing tag without opener: /"+g.n);f=c.pop();if(g.n!=f.n&&!m(g.n,f.n,d))throw new Error("Nesting error: "+f.n+" vs. "+g.n);return f.end=g.i,e}e.push(g)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function l(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function m(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function n(a){return'i = i || "";var b = i + "";var _ = this;'+q(a)+"return b;"}function o(a){return a.replace(f,"\\\\").replace(c,'\\"').replace(d,"\\n").replace(e,"\\r")}function p(a){return~a.indexOf(".")?"d":"f"}function q(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=r(a[c].nodes,a[c].n,p(a[c].n),a[c].i,a[c].end,a[c].otag+" "+a[c].ctag):e=="^"?b+=s(a[c].nodes,a[c].n,p(a[c].n)):e=="<"||e==">"?b+=t(a[c]):e=="{"||e=="&"?b+=u(a[c].n,p(a[c].n)):e=="\n"?b+=w('"\\n"'+(a.length-1==c?"":" + i")):e=="_v"?b+=v(a[c].n,p(a[c].n)):e===undefined&&(b+=w('"'+o(a[c])+'"'))}return b}function r(a,b,c,d,e,f){return"if(_.s(_."+c+'("'+o(b)+'",c,p,1),'+"c,p,0,"+d+","+e+', "'+f+'")){'+"b += _.rs(c,p,"+'function(c,p){ var b = "";'+q(a)+"return b;});c.pop();}"+'else{b += _.b; _.b = ""};'}function s(a,b,c){return"if (!_.s(_."+c+'("'+o(b)+'",c,p,1),c,p,1,0,0,"")){'+q(a)+"};"}function t(a){return'b += _.rp("'+o(a.n)+'",c,p,"'+(a.indent||"")+'");'}function u(a,b){return"b += (_."+b+'("'+o(a)+'",c,p,0));'}function v(a,b){return"b += (_.v(_."+b+'("'+o(a)+'",c,p,0)));'}function w(a){return"b += "+a+";"}var b=/\S/,c=/\"/g,d=/\n/g,e=/\r/g,f=/\\/g,g={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10};a.scan=function(c,d){function w(){p.length>0&&(q.push(new String(p)),p="")}function x(){var a=!0;for(var c=t;c<q.length;c++){a=q[c].tag&&g[q[c].tag]<g._v||!q[c].tag&&q[c].match(b)===null;if(!a)return!1}return a}function y(a,b){w();if(a&&x())for(var c=t,d;c<q.length;c++)q[c].tag||((d=q[c+1])&&d.tag==">"&&(d.indent=q[c].toString()),q.splice(c,1));else b||q.push({tag:"\n"});r=!1,t=q.length}function z(a,b){var c="="+v,d=a.indexOf(c,b),e=i(a.substring(a.indexOf("=",b)+1,d)).split(" ");return u=e[0],v=e[1],d+c.length-1}var e=c.length,f=0,k=1,l=2,m=f,n=null,o=null,p="",q=[],r=!1,s=0,t=0,u="{{",v="}}";d&&(d=d.split(" "),u=d[0],v=d[1]);for(s=0;s<e;s++)m==f?j(u,c,s)?(--s,w(),m=k):c.charAt(s)=="\n"?y(r):p+=c.charAt(s):m==k?(s+=u.length-1,o=g[c.charAt(s+1)],n=o?c.charAt(s+1):"_v",n=="="?(s=z(c,s),m=f):(o&&s++,m=l),r=s):j(v,c,s)?(q.push({tag:n,n:i(p),otag:u,ctag:v,i:n=="/"?r-v.length:s+u.length}),p="",s+=v.length-1,m=f,n=="{"&&(v=="}}"?s++:h(q[q.length-1]))):p+=c.charAt(s);return y(r,!0),q},a.generate=function(b,c,d){return d.asString?"function(c,p,i){"+b+";}":new a.Template(new Function("c","p","i",b),c,a)},a.parse=function(a,b){return b=b||{},k(a,"",[],b.sectionTags||[])},a.cache={},a.compile=function(a,b){b=b||{};var c=a+"||"+!!b.asString,d=this.cache[c];return d?d:(d=this.generate(n(this.parse(this.scan(a,b.delimiters),b)),a,b),this.cache[c]=d)}}(typeof exports!="undefined"?exports:Hogan) \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.mustache.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.mustache.js deleted file mode 100644 index 84b849a4057abc0c4b0d3624f81305e3db62f307..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.min.mustache.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* @preserve Copyright 2012 Twitter, Inc. -* @license http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -var Hogan={};(function(a){function h(a){return a=String(a===null||a===undefined?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.Template=function j(a,b,c){a&&(this.r=a),this.c=c,this.text=b||""},a.Template.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.ri([b],c||{},d)},ri:function(a,b,c){return this.r(a,b,c)},rp:function(a,b,c,d){var e=c[a];return e?(this.c&&typeof e=="string"&&(e=this.c.compile(e)),e.ri(b,c,d)):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f,g){var h;return i(a)&&a.length===0?!1:(typeof a=="function"&&(a=this.ls(a,b,c,d,e,f,g)),h=a===""||!!a,!d&&h&&b&&b.push(typeof a=="object"?a:b[b.length-1]),h)},d:function(a,b,c,d){var e=a.split("."),f=this.f(e[0],b,c,d),g=null;if(a==="."&&i(b[b.length-2]))return b[b.length-1];for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=this.c,g=a.call(b,d,function(a){return f.compile(a,{delimiters:e}).render(b,c)}),h=f.compile(g.toString(),{delimiters:e}).render(b,c);return this.b=h,!1},b:"",ls:function(a,b,c,d,e,f,g){var h=b[b.length-1],i=null;if(!d&&this.c&&a.length>0)return this.ho(a,h,c,this.text.substring(e,f),g);i=a.call(h);if(typeof i=="function"){if(d)return!0;if(this.c)return this.ho(i,h,c,this.text.substring(e,f),g)}return i},lv:function(a,b,c){var d=b[b.length-1],e=a.call(d);return typeof e=="function"&&(e=e.call(d)),e=e.toString(),this.c&&~e.indexOf("{{")?this.c.compile(e).render(d,c):e}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"}})(typeof exports!="undefined"?exports:Hogan),function(a){function h(a){a.n.substr(a.n.length-1)==="}"&&(a.n=a.n.substring(0,a.n.length-1))}function i(a){return a.trim?a.trim():a.replace(/^\s*|\s*$/g,"")}function j(a,b,c){if(b.charAt(c)!=a.charAt(0))return!1;for(var d=1,e=a.length;d<e;d++)if(b.charAt(c+d)!=a.charAt(d))return!1;return!0}function k(a,b,c,d){var e=[],f=null,g=null;while(a.length>0){g=a.shift();if(g.tag=="#"||g.tag=="^"||l(g,d))c.push(g),g.nodes=k(a,g.tag,c,d),e.push(g);else{if(g.tag=="/"){if(c.length===0)throw new Error("Closing tag without opener: /"+g.n);f=c.pop();if(g.n!=f.n&&!m(g.n,f.n,d))throw new Error("Nesting error: "+f.n+" vs. "+g.n);return f.end=g.i,e}e.push(g)}}if(c.length>0)throw new Error("missing closing tag: "+c.pop().n);return e}function l(a,b){for(var c=0,d=b.length;c<d;c++)if(b[c].o==a.n)return a.tag="#",!0}function m(a,b,c){for(var d=0,e=c.length;d<e;d++)if(c[d].c==a&&c[d].o==b)return!0}function n(a){return'i = i || "";var b = i + "";var _ = this;'+q(a)+"return b;"}function o(a){return a.replace(f,"\\\\").replace(c,'\\"').replace(d,"\\n").replace(e,"\\r")}function p(a){return~a.indexOf(".")?"d":"f"}function q(a){var b="";for(var c=0,d=a.length;c<d;c++){var e=a[c].tag;e=="#"?b+=r(a[c].nodes,a[c].n,p(a[c].n),a[c].i,a[c].end,a[c].otag+" "+a[c].ctag):e=="^"?b+=s(a[c].nodes,a[c].n,p(a[c].n)):e=="<"||e==">"?b+=t(a[c]):e=="{"||e=="&"?b+=u(a[c].n,p(a[c].n)):e=="\n"?b+=w('"\\n"'+(a.length-1==c?"":" + i")):e=="_v"?b+=v(a[c].n,p(a[c].n)):e===undefined&&(b+=w('"'+o(a[c])+'"'))}return b}function r(a,b,c,d,e,f){return"if(_.s(_."+c+'("'+o(b)+'",c,p,1),'+"c,p,0,"+d+","+e+', "'+f+'")){'+"b += _.rs(c,p,"+'function(c,p){ var b = "";'+q(a)+"return b;});c.pop();}"+'else{b += _.b; _.b = ""};'}function s(a,b,c){return"if (!_.s(_."+c+'("'+o(b)+'",c,p,1),c,p,1,0,0,"")){'+q(a)+"};"}function t(a){return'b += _.rp("'+o(a.n)+'",c,p,"'+(a.indent||"")+'");'}function u(a,b){return"b += (_."+b+'("'+o(a)+'",c,p,0));'}function v(a,b){return"b += (_.v(_."+b+'("'+o(a)+'",c,p,0)));'}function w(a){return"b += "+a+";"}var b=/\S/,c=/\"/g,d=/\n/g,e=/\r/g,f=/\\/g,g={"#":1,"^":2,"/":3,"!":4,">":5,"<":6,"=":7,_v:8,"{":9,"&":10};a.scan=function(c,d){function w(){p.length>0&&(q.push(new String(p)),p="")}function x(){var a=!0;for(var c=t;c<q.length;c++){a=q[c].tag&&g[q[c].tag]<g._v||!q[c].tag&&q[c].match(b)===null;if(!a)return!1}return a}function y(a,b){w();if(a&&x())for(var c=t,d;c<q.length;c++)q[c].tag||((d=q[c+1])&&d.tag==">"&&(d.indent=q[c].toString()),q.splice(c,1));else b||q.push({tag:"\n"});r=!1,t=q.length}function z(a,b){var c="="+v,d=a.indexOf(c,b),e=i(a.substring(a.indexOf("=",b)+1,d)).split(" ");return u=e[0],v=e[1],d+c.length-1}var e=c.length,f=0,k=1,l=2,m=f,n=null,o=null,p="",q=[],r=!1,s=0,t=0,u="{{",v="}}";d&&(d=d.split(" "),u=d[0],v=d[1]);for(s=0;s<e;s++)m==f?j(u,c,s)?(--s,w(),m=k):c.charAt(s)=="\n"?y(r):p+=c.charAt(s):m==k?(s+=u.length-1,o=g[c.charAt(s+1)],n=o?c.charAt(s+1):"_v",n=="="?(s=z(c,s),m=f):(o&&s++,m=l),r=s):j(v,c,s)?(q.push({tag:n,n:i(p),otag:u,ctag:v,i:n=="/"?r-v.length:s+u.length}),p="",s+=v.length-1,m=f,n=="{"&&(v=="}}"?s++:h(q[q.length-1]))):p+=c.charAt(s);return y(r,!0),q},a.generate=function(b,c,d){return d.asString?"function(c,p,i){"+b+";}":new a.Template(new Function("c","p","i",b),c,a)},a.parse=function(a,b){return b=b||{},k(a,"",[],b.sectionTags||[])},a.cache={},a.compile=function(a,b){b=b||{};var c=a+"||"+!!b.asString,d=this.cache[c];return d?d:(d=this.generate(n(this.parse(this.scan(a,b.delimiters),b)),a,b),this.cache[c]=d)}}(typeof exports!="undefined"?exports:Hogan);var Mustache=function(a){function b(b,c,d,e){var f=this.f(b,c,d,0),g=c;return f&&(g=g.concat(f)),a.Template.prototype.rp.call(this,b,g,d,e)}var c=function(c,d,e){this.rp=b,a.Template.call(this,c,d,e)};c.prototype=a.Template.prototype;var d,e=function(){this.cache={},this.generate=function(a,b,e){return new c(new Function("c","p","i",a),b,d)}};return e.prototype=a,d=new e,{to_html:function(a,b,c,e){var f=d.compile(a),g=f.render(b,c);if(!e)return g;e(g)}}}(Hogan) \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.mustache.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.mustache.js deleted file mode 100644 index 85022371e39350f7c3d97db8d5d6617a740e3f5a..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/hogan-1.0.5.mustache.js +++ /dev/null @@ -1,619 +0,0 @@ -/* - * Copyright 2011 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. - */ - -// A wrapper for compatibility with Mustache.js, quirks and all - - - -var Hogan = {}; - -(function (Hogan) { - Hogan.Template = function constructor(renderFunc, text, compiler) { - if (renderFunc) { - this.r = renderFunc; - } - this.c = compiler; - this.text = text || ''; - } - - Hogan.Template.prototype = { - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.ri([context], partials || {}, indent); - }, - - // render internal -- a hook for overrides that catches partials too - ri: function (context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - if (this.c && typeof partial == 'string') { - partial = this.c.compile(partial); - } - - return partial.ri(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (typeof val == 'function') { - val = this.ls(val, ctx, partials, inverted, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var t = val.call(cx, text, function(t) { - return compiler.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - if (typeof result == 'function') { - result = result.call(cx); - } - result = result.toString(); - - if (this.c && ~result.indexOf("{{")) { - return this.c.compile(result).render(cx, partials); - } - - return result; - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String((str === null || str === undefined) ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - - - - -(function (Hogan) { - // Setup regex assignments - // remove whitespace according to Mustache spec - var rIsWhitespace = /\S/, - rQuot = /\"/g, - rNewline = /\n/g, - rCr = /\r/g, - rSlash = /\\/g, - tagTypes = { - '#': 1, '^': 2, '/': 3, '!': 4, '>': 5, - '<': 6, '=': 7, '_v': 8, '{': 9, '&': 10 - }; - - Hogan.scan = function scan(text, delimiters) { - var len = text.length, - IN_TEXT = 0, - IN_TAG_TYPE = 1, - IN_TAG = 2, - state = IN_TEXT, - tagType = null, - tag = null, - buf = '', - tokens = [], - seenTag = false, - i = 0, - lineStart = 0, - otag = '{{', - ctag = '}}'; - - function addBuf() { - if (buf.length > 0) { - tokens.push(new String(buf)); - buf = ''; - } - } - - function lineIsWhitespace() { - var isAllWhitespace = true; - for (var j = lineStart; j < tokens.length; j++) { - isAllWhitespace = - (tokens[j].tag && tagTypes[tokens[j].tag] < tagTypes['_v']) || - (!tokens[j].tag && tokens[j].match(rIsWhitespace) === null); - if (!isAllWhitespace) { - return false; - } - } - - return isAllWhitespace; - } - - function filterLine(haveSeenTag, noNewLine) { - addBuf(); - - if (haveSeenTag && lineIsWhitespace()) { - for (var j = lineStart, next; j < tokens.length; j++) { - if (!tokens[j].tag) { - if ((next = tokens[j+1]) && next.tag == '>') { - // set indent to token value - next.indent = tokens[j].toString() - } - tokens.splice(j, 1); - } - } - } else if (!noNewLine) { - tokens.push({tag:'\n'}); - } - - seenTag = false; - lineStart = tokens.length; - } - - function changeDelimiters(text, index) { - var close = '=' + ctag, - closeIndex = text.indexOf(close, index), - delimiters = trim( - text.substring(text.indexOf('=', index) + 1, closeIndex) - ).split(' '); - - otag = delimiters[0]; - ctag = delimiters[1]; - - return closeIndex + close.length - 1; - } - - if (delimiters) { - delimiters = delimiters.split(' '); - otag = delimiters[0]; - ctag = delimiters[1]; - } - - for (i = 0; i < len; i++) { - if (state == IN_TEXT) { - if (tagChange(otag, text, i)) { - --i; - addBuf(); - state = IN_TAG_TYPE; - } else { - if (text.charAt(i) == '\n') { - filterLine(seenTag); - } else { - buf += text.charAt(i); - } - } - } else if (state == IN_TAG_TYPE) { - i += otag.length - 1; - tag = tagTypes[text.charAt(i + 1)]; - tagType = tag ? text.charAt(i + 1) : '_v'; - if (tagType == '=') { - i = changeDelimiters(text, i); - state = IN_TEXT; - } else { - if (tag) { - i++; - } - state = IN_TAG; - } - seenTag = i; - } else { - if (tagChange(ctag, text, i)) { - tokens.push({tag: tagType, n: trim(buf), otag: otag, ctag: ctag, - i: (tagType == '/') ? seenTag - ctag.length : i + otag.length}); - buf = ''; - i += ctag.length - 1; - state = IN_TEXT; - if (tagType == '{') { - if (ctag == '}}') { - i++; - } else { - cleanTripleStache(tokens[tokens.length - 1]); - } - } - } else { - buf += text.charAt(i); - } - } - } - - filterLine(seenTag, true); - - return tokens; - } - - function cleanTripleStache(token) { - if (token.n.substr(token.n.length - 1) === '}') { - token.n = token.n.substring(0, token.n.length - 1); - } - } - - function trim(s) { - if (s.trim) { - return s.trim(); - } - - return s.replace(/^\s*|\s*$/g, ''); - } - - function tagChange(tag, text, index) { - if (text.charAt(index) != tag.charAt(0)) { - return false; - } - - for (var i = 1, l = tag.length; i < l; i++) { - if (text.charAt(index + i) != tag.charAt(i)) { - return false; - } - } - - return true; - } - - function buildTree(tokens, kind, stack, customTags) { - var instructions = [], - opener = null, - token = null; - - while (tokens.length > 0) { - token = tokens.shift(); - if (token.tag == '#' || token.tag == '^' || isOpener(token, customTags)) { - stack.push(token); - token.nodes = buildTree(tokens, token.tag, stack, customTags); - instructions.push(token); - } else if (token.tag == '/') { - if (stack.length === 0) { - throw new Error('Closing tag without opener: /' + token.n); - } - opener = stack.pop(); - if (token.n != opener.n && !isCloser(token.n, opener.n, customTags)) { - throw new Error('Nesting error: ' + opener.n + ' vs. ' + token.n); - } - opener.end = token.i; - return instructions; - } else { - instructions.push(token); - } - } - - if (stack.length > 0) { - throw new Error('missing closing tag: ' + stack.pop().n); - } - - return instructions; - } - - function isOpener(token, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].o == token.n) { - token.tag = '#'; - return true; - } - } - } - - function isCloser(close, open, tags) { - for (var i = 0, l = tags.length; i < l; i++) { - if (tags[i].c == close && tags[i].o == open) { - return true; - } - } - } - - function writeCode(tree) { - return 'i = i || "";var b = i + "";var _ = this;' + walk(tree) + 'return b;'; - } - - Hogan.generate = function (code, text, options) { - if (options.asString) { - return 'function(c,p,i){' + code + ';}'; - } - - return new Hogan.Template(new Function('c', 'p', 'i', code), text, Hogan); - } - - function esc(s) { - return s.replace(rSlash, '\\\\') - .replace(rQuot, '\\\"') - .replace(rNewline, '\\n') - .replace(rCr, '\\r'); - } - - function chooseMethod(s) { - return (~s.indexOf('.')) ? 'd' : 'f'; - } - - function walk(tree) { - var code = ''; - for (var i = 0, l = tree.length; i < l; i++) { - var tag = tree[i].tag; - if (tag == '#') { - code += section(tree[i].nodes, tree[i].n, chooseMethod(tree[i].n), - tree[i].i, tree[i].end, tree[i].otag + " " + tree[i].ctag); - } else if (tag == '^') { - code += invertedSection(tree[i].nodes, tree[i].n, - chooseMethod(tree[i].n)); - } else if (tag == '<' || tag == '>') { - code += partial(tree[i]); - } else if (tag == '{' || tag == '&') { - code += tripleStache(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag == '\n') { - code += text('"\\n"' + (tree.length-1 == i ? '' : ' + i')); - } else if (tag == '_v') { - code += variable(tree[i].n, chooseMethod(tree[i].n)); - } else if (tag === undefined) { - code += text('"' + esc(tree[i]) + '"'); - } - } - return code; - } - - function section(nodes, id, method, start, end, tags) { - return 'if(_.s(_.' + method + '("' + esc(id) + '",c,p,1),' + - 'c,p,0,' + start + ',' + end + ', "' + tags + '")){' + - 'b += _.rs(c,p,' + - 'function(c,p){ var b = "";' + - walk(nodes) + - 'return b;});c.pop();}' + - 'else{b += _.b; _.b = ""};'; - } - - function invertedSection(nodes, id, method) { - return 'if (!_.s(_.' + method + '("' + esc(id) + '",c,p,1),c,p,1,0,0,"")){' + - walk(nodes) + - '};'; - } - - function partial(tok) { - return 'b += _.rp("' + esc(tok.n) + '",c,p,"' + (tok.indent || '') + '");'; - } - - function tripleStache(id, method) { - return 'b += (_.' + method + '("' + esc(id) + '",c,p,0));'; - } - - function variable(id, method) { - return 'b += (_.v(_.' + method + '("' + esc(id) + '",c,p,0)));'; - } - - function text(id) { - return 'b += ' + id + ';'; - } - - Hogan.parse = function(tokens, options) { - options = options || {}; - return buildTree(tokens, '', [], options.sectionTags || []); - }, - - Hogan.cache = {}; - - Hogan.compile = function(text, options) { - // options - // - // asString: false (default) - // - // sectionTags: [{o: '_foo', c: 'foo'}] - // An array of object with o and c fields that indicate names for custom - // section tags. The example above allows parsing of {{_foo}}{{/foo}}. - // - // delimiters: A string that overrides the default delimiters. - // Example: "<% %>" - // - options = options || {}; - - var key = text + '||' + !!options.asString; - - var t = this.cache[key]; - - if (t) { - return t; - } - - t = this.generate(writeCode(this.parse(this.scan(text, options.delimiters), options)), text, options); - return this.cache[key] = t; - }; -})(typeof exports !== 'undefined' ? exports : Hogan); - - -var Mustache = (function (Hogan) { - - // Mustache.js has non-spec partial context behavior - function mustachePartial(name, context, partials, indent) { - var partialScope = this.f(name, context, partials, 0); - var cx = context; - if (partialScope) { - cx = cx.concat(partialScope); - } - - return Hogan.Template.prototype.rp.call(this, name, cx, partials, indent); - } - - var HoganTemplateWrapper = function(renderFunc, text, compiler){ - this.rp = mustachePartial; - Hogan.Template.call(this, renderFunc, text, compiler); - }; - HoganTemplateWrapper.prototype = Hogan.Template.prototype; - - // Add a wrapper for Hogan's generate method. Mustache and Hogan keep - // separate caches, and Mustache returns wrapped templates. - var wrapper; - var HoganWrapper = function(){ - this.cache = {}; - this.generate = function(code, text, options) { - return new HoganTemplateWrapper(new Function('c', 'p', 'i', code), text, wrapper); - } - }; - HoganWrapper.prototype = Hogan; - wrapper = new HoganWrapper(); - - return { - to_html: function(text, data, partials, sendFun) { - var template = wrapper.compile(text); - var result = template.render(data, partials); - if (!sendFun) { - return result; - } - - sendFun(result); - } - } - -})(Hogan); diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.js deleted file mode 100644 index 8958a70a163a950fae6641353e25e333f6d125bd..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.js +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright 2011 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 Hogan = {}; - -(function (Hogan) { - Hogan.Template = function constructor(renderFunc, text, compiler) { - if (renderFunc) { - this.r = renderFunc; - } - this.c = compiler; - this.text = text || ''; - } - - Hogan.Template.prototype = { - // render: replaced by generated code. - r: function (context, partials, indent) { return ''; }, - - // variable escaping - v: hoganEscape, - - render: function render(context, partials, indent) { - return this.ri([context], partials || {}, indent); - }, - - // render internal -- a hook for overrides that catches partials too - ri: function (context, partials, indent) { - return this.r(context, partials, indent); - }, - - // tries to find a partial in the curent scope and render it - rp: function(name, context, partials, indent) { - var partial = partials[name]; - - if (!partial) { - return ''; - } - - if (this.c && typeof partial == 'string') { - partial = this.c.compile(partial); - } - - return partial.ri(context, partials, indent); - }, - - // render a section - rs: function(context, partials, section) { - var buf = '', - tail = context[context.length - 1]; - - if (!isArray(tail)) { - return buf = section(context, partials); - } - - for (var i = 0; i < tail.length; i++) { - context.push(tail[i]); - buf += section(context, partials); - context.pop(); - } - - return buf; - }, - - // maybe start a section - s: function(val, ctx, partials, inverted, start, end, tags) { - var pass; - - if (isArray(val) && val.length === 0) { - return false; - } - - if (typeof val == 'function') { - val = this.ls(val, ctx, partials, inverted, start, end, tags); - } - - pass = (val === '') || !!val; - - if (!inverted && pass && ctx) { - ctx.push((typeof val == 'object') ? val : ctx[ctx.length - 1]); - } - - return pass; - }, - - // find values with dotted names - d: function(key, ctx, partials, returnFound) { - var names = key.split('.'), - val = this.f(names[0], ctx, partials, returnFound), - cx = null; - - if (key === '.' && isArray(ctx[ctx.length - 2])) { - return ctx[ctx.length - 1]; - } - - for (var i = 1; i < names.length; i++) { - if (val && typeof val == 'object' && names[i] in val) { - cx = val; - val = val[names[i]]; - } else { - val = ''; - } - } - - if (returnFound && !val) { - return false; - } - - if (!returnFound && typeof val == 'function') { - ctx.push(cx); - val = this.lv(val, ctx, partials); - ctx.pop(); - } - - return val; - }, - - // find values with normal names - f: function(key, ctx, partials, returnFound) { - var val = false, - v = null, - found = false; - - for (var i = ctx.length - 1; i >= 0; i--) { - v = ctx[i]; - if (v && typeof v == 'object' && key in v) { - val = v[key]; - found = true; - break; - } - } - - if (!found) { - return (returnFound) ? false : ""; - } - - if (!returnFound && typeof val == 'function') { - val = this.lv(val, ctx, partials); - } - - return val; - }, - - // higher order templates - ho: function(val, cx, partials, text, tags) { - var compiler = this.c; - var t = val.call(cx, text, function(t) { - return compiler.compile(t, {delimiters: tags}).render(cx, partials); - }); - var s = compiler.compile(t.toString(), {delimiters: tags}).render(cx, partials); - this.b = s; - return false; - }, - - // higher order template result buffer - b: '', - - // lambda replace section - ls: function(val, ctx, partials, inverted, start, end, tags) { - var cx = ctx[ctx.length - 1], - t = null; - - if (!inverted && this.c && val.length > 0) { - return this.ho(val, cx, partials, this.text.substring(start, end), tags); - } - - t = val.call(cx); - - if (typeof t == 'function') { - if (inverted) { - return true; - } else if (this.c) { - return this.ho(t, cx, partials, this.text.substring(start, end), tags); - } - } - - return t; - }, - - // lambda replace variable - lv: function(val, ctx, partials) { - var cx = ctx[ctx.length - 1]; - var result = val.call(cx); - if (typeof result == 'function') { - result = result.call(cx); - } - result = result.toString(); - - if (this.c && ~result.indexOf("{{")) { - return this.c.compile(result).render(cx, partials); - } - - return result; - } - - }; - - var rAmp = /&/g, - rLt = /</g, - rGt = />/g, - rApos =/\'/g, - rQuot = /\"/g, - hChars =/[&<>\"\']/; - - function hoganEscape(str) { - str = String((str === null || str === undefined) ? '' : str); - return hChars.test(str) ? - str - .replace(rAmp,'&') - .replace(rLt,'<') - .replace(rGt,'>') - .replace(rApos,''') - .replace(rQuot, '"') : - str; - } - - var isArray = Array.isArray || function(a) { - return Object.prototype.toString.call(a) === '[object Array]'; - }; - -})(typeof exports !== 'undefined' ? exports : Hogan); - diff --git a/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.min.js b/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.min.js deleted file mode 100644 index 4ec5796047edbc851d2c05d3f222cd51f11ec1dc..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/builds/1.0.5/template-1.0.5.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** -* @preserve Copyright 2012 Twitter, Inc. -* @license http://www.apache.org/licenses/LICENSE-2.0.txt -*/ -var Hogan={};(function(a){function h(a){return a=String(a===null||a===undefined?"":a),g.test(a)?a.replace(b,"&").replace(c,"<").replace(d,">").replace(e,"'").replace(f,"""):a}a.Template=function j(a,b,c){a&&(this.r=a),this.c=c,this.text=b||""},a.Template.prototype={r:function(a,b,c){return""},v:h,render:function(b,c,d){return this.ri([b],c||{},d)},ri:function(a,b,c){return this.r(a,b,c)},rp:function(a,b,c,d){var e=c[a];return e?(this.c&&typeof e=="string"&&(e=this.c.compile(e)),e.ri(b,c,d)):""},rs:function(a,b,c){var d="",e=a[a.length-1];if(!i(e))return d=c(a,b);for(var f=0;f<e.length;f++)a.push(e[f]),d+=c(a,b),a.pop();return d},s:function(a,b,c,d,e,f,g){var h;return i(a)&&a.length===0?!1:(typeof a=="function"&&(a=this.ls(a,b,c,d,e,f,g)),h=a===""||!!a,!d&&h&&b&&b.push(typeof a=="object"?a:b[b.length-1]),h)},d:function(a,b,c,d){var e=a.split("."),f=this.f(e[0],b,c,d),g=null;if(a==="."&&i(b[b.length-2]))return b[b.length-1];for(var h=1;h<e.length;h++)f&&typeof f=="object"&&e[h]in f?(g=f,f=f[e[h]]):f="";return d&&!f?!1:(!d&&typeof f=="function"&&(b.push(g),f=this.lv(f,b,c),b.pop()),f)},f:function(a,b,c,d){var e=!1,f=null,g=!1;for(var h=b.length-1;h>=0;h--){f=b[h];if(f&&typeof f=="object"&&a in f){e=f[a],g=!0;break}}return g?(!d&&typeof e=="function"&&(e=this.lv(e,b,c)),e):d?!1:""},ho:function(a,b,c,d,e){var f=this.c,g=a.call(b,d,function(a){return f.compile(a,{delimiters:e}).render(b,c)}),h=f.compile(g.toString(),{delimiters:e}).render(b,c);return this.b=h,!1},b:"",ls:function(a,b,c,d,e,f,g){var h=b[b.length-1],i=null;if(!d&&this.c&&a.length>0)return this.ho(a,h,c,this.text.substring(e,f),g);i=a.call(h);if(typeof i=="function"){if(d)return!0;if(this.c)return this.ho(i,h,c,this.text.substring(e,f),g)}return i},lv:function(a,b,c){var d=b[b.length-1],e=a.call(d);return typeof e=="function"&&(e=e.call(d)),e=e.toString(),this.c&&~e.indexOf("{{")?this.c.compile(e).render(d,c):e}};var b=/&/g,c=/</g,d=/>/g,e=/\'/g,f=/\"/g,g=/[&<>\"\']/,i=Array.isArray||function(a){return Object.prototype.toString.call(a)==="[object Array]"}})(typeof exports!="undefined"?exports:Hogan) \ No newline at end of file diff --git a/docs/build/node_modules/hogan.js/web/favicon.ico b/docs/build/node_modules/hogan.js/web/favicon.ico deleted file mode 100644 index 627ee837aaaadef98491f3fd9fd66009a087c83c..0000000000000000000000000000000000000000 Binary files a/docs/build/node_modules/hogan.js/web/favicon.ico and /dev/null differ diff --git a/docs/build/node_modules/hogan.js/web/images/logo.png b/docs/build/node_modules/hogan.js/web/images/logo.png deleted file mode 100644 index b6c3e02f35d884e7724e12becb3007404ddcef30..0000000000000000000000000000000000000000 Binary files a/docs/build/node_modules/hogan.js/web/images/logo.png and /dev/null differ diff --git a/docs/build/node_modules/hogan.js/web/images/noise.png b/docs/build/node_modules/hogan.js/web/images/noise.png deleted file mode 100644 index dca6fce43b9bc375bb3768603b97f9a257f1b84c..0000000000000000000000000000000000000000 Binary files a/docs/build/node_modules/hogan.js/web/images/noise.png and /dev/null differ diff --git a/docs/build/node_modules/hogan.js/web/images/small-hogan-icon.png b/docs/build/node_modules/hogan.js/web/images/small-hogan-icon.png deleted file mode 100644 index 01ec4ad4cda75f7ac26a5e420b8f73baaa9255ce..0000000000000000000000000000000000000000 Binary files a/docs/build/node_modules/hogan.js/web/images/small-hogan-icon.png and /dev/null differ diff --git a/docs/build/node_modules/hogan.js/web/images/stripes.png b/docs/build/node_modules/hogan.js/web/images/stripes.png deleted file mode 100644 index 8618ee91a4f4cb848a8d72f8f57ab5d271fde828..0000000000000000000000000000000000000000 Binary files a/docs/build/node_modules/hogan.js/web/images/stripes.png and /dev/null differ diff --git a/docs/build/node_modules/hogan.js/web/index.html.mustache b/docs/build/node_modules/hogan.js/web/index.html.mustache deleted file mode 100755 index 75fcbfb6c12f370c5e23c201806b5a5fbe596194..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/index.html.mustache +++ /dev/null @@ -1,139 +0,0 @@ -<!DOCTYPE html> -<!--[if lt IE 7 ]><html class="ie ie6" lang="en"> <![endif]--> -<!--[if IE 7 ]><html class="ie ie7" lang="en"> <![endif]--> -<!--[if IE 8 ]><html class="ie ie8" lang="en"> <![endif]--> -<!--[if (gte IE 9)|!(IE)]><!--><html lang="en"> <!--<![endif]--> -<head> - - <!-- Basic Page Needs - ================================================== --> - <meta charset="utf-8"> - <title>Hogan.js</title> - <meta name="description" content=""> - <meta name="author" content=""> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Mobile Specific Metas - ================================================== --> - <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> - <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> - - <!-- CSS - ================================================== --> - <link rel="stylesheet" href="stylesheets/skeleton.css"> - <link rel="stylesheet" href="stylesheets/layout.css"> - -</head> -<body> - - - - <!-- Primary Page Layout - ================================================== --> - - <header class="hogan-hero"> - <div class="stripes"></div> - <div class="noise"></div> - <div class="container"> - <h1>Hogan.js</h1> - <h3>JavaScript templating from Twitter.</h3> - <a href="https://github.com/twitter/hogan.js" class="download button">View on Github</a> - </div> - </header> - <div class="primary container"> - - <!-- Layout 1 --> - <div class="five columns"> - <h4>Getting started</h4> - <p> - Hogan.js is a 2.5k JS templating engine developed at Twitter. Use it as a part of your asset packager to compile templates ahead of time or include it in your browser to handle dynamic templates. - </p> - <p> - If you're developing with Node.js, just use NPM to add the Hogan package. - </p> - <pre><code>$ npm install hogan.js</code></pre> - <p> - Alternatively, drop hogan.js in your browser by adding the following script. - </p> - <pre><code><script src="http://twitter.github.com/hogan.js/builds/{{version}}/hogan.js"></script></code></pre> - - </div> - <div class="ten columns offset-by-one"> - <script src="https://gist.github.com/1484613.js"> </script> - </div> - <div class="hogan-divider"> - <div class="hogan-icon"></div> - </div> - - <!-- Layout 2 --> - <div class="five columns"> - <h4>Templates</h4> - <p> - Hogan.js was developed against the mustache test suite, so everything that holds true for templates as specified <a href="//mustache.github.com/mustache.5.html">here</a>, is also the case for hogan.js. - </p> - <p> - That means you get variables, sections, lambdas, partials, filters, and everything else you've come to expect from mustache templating - only much, much faster. - </p> - </div> - <div class="ten columns offset-by-one"> - <script src="https://gist.github.com/1484342.js"></script> - </div> - <div class="hogan-divider"> - <div class="hogan-icon"></div> - </div> - - <!-- Layout 3 --> - <div class="five columns"> - <h4>Compiling</h4> - <p> - Use <code>hogan.compile()</code> to precompile your templates into vanilla JS. - </p> - <p> - It's best to serve your templates precompiled whenever you can (rather than the raw templates), as parsing is the most time consuming operation. - </p> - <p> - </p> - </div> - <div class="ten columns offset-by-one"> - <script src="https://gist.github.com/1484513.js"> </script> - </div> - <div class="hogan-divider"> - <div class="hogan-icon"></div> - </div> - - <!-- Layout 4 --> - <div class="five columns"> - <h4 id='rendering'>Rendering</h4> - <p> - Once compiled, call the <code>render()</code> method with a context and optional partials object. - </p> - <p> - If supplying partials, you can compile them ahead of time, or pass string templates.</p> - <p> - </p> - </div> - <div class="ten columns offset-by-one"> - <script src="https://gist.github.com/1575714.js"> </script> - </div> - - <div class="sixteen columns hogan-footer"> - <span class="copyright"> - Designed and built with all the love in the world <a href="http://twitter.com/twitter" target="_blank">@twitter</a> by <a href="http://twitter.com/sayrer" target="_blank">@sayrer</a> and <a href="http://twitter.com/fat" target="_blank">@fat</a>.<br /> - Code licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>. Documentation licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>. - </span> - <span class="colophon"> - <a href="#">Back to top</a> - </span> - </div> - - - - </div><!-- container --> - - -<!-- End Document -================================================== --> -</body> -</html> diff --git a/docs/build/node_modules/hogan.js/web/stylesheets/layout.css b/docs/build/node_modules/hogan.js/web/stylesheets/layout.css deleted file mode 100755 index c9e3e350d247bdc33e3efbcda8b14f798cb80436..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/stylesheets/layout.css +++ /dev/null @@ -1,206 +0,0 @@ - - -/* #Reset & Basics (Inspired by E. Meyers) -================================================== */ - html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { - margin: 0; - padding: 0; - border: 0; - font-size: 100%; - font: inherit; - vertical-align: baseline; } - article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { - display: block; } - body { - line-height: 1; } - ol, ul { - list-style: none; } - blockquote, q { - quotes: none; } - blockquote:before, blockquote:after, - q:before, q:after { - content: ''; - content: none; } - table { - border-collapse: collapse; - border-spacing: 0; } - - -/* #Basic Styles -================================================== */ - body { - background: #fff; - font: 14px/24px "HelveticaNeue", "Helvetica Neue", Helvetica, Arial, sans-serif; - color: #000; - -webkit-font-smoothing: antialiased; /* Fix for webkit rendering */ - -webkit-text-size-adjust: 100%; - } - a { - color: #999113; - text-decoration: none; - } - a:hover { - color: #7b750e; - text-decoration: underline; - } - - -/* #Typography -================================================== */ - h1, h2, h3, h4, h5, h6 { - font-weight: bold; } - h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; } - h1 { font-size: 75px; line-height: 80px; margin-bottom: 14px;} - h2 { font-size: 35px; line-height: 40px; margin-bottom: 10px; } - h3 { font-size: 28px; line-height: 34px; margin-bottom: 8px; } - h4 { font-size: 21px; line-height: 30px; margin-bottom: 4px; } - h5 { font-size: 17px; line-height: 24px; } - h6 { font-size: 14px; line-height: 21px; } - p { margin-bottom: 22px; } - - -/* #Main styles -================================================== */ - -/* Hogan Hero */ -.hogan-hero { - position: relative; - background: #333; /* Old browsers */ - background: -moz-radial-gradient(center, ellipse cover, #333 0%, #000 100%); /* FF3.6+ */ - background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#333), color-stop(100%,#000)); /* Chrome,Safari4+ */ - background: -webkit-radial-gradient(center, ellipse cover, #333 0%,#000 100%); /* Chrome10+,Safari5.1+ */ - background: -o-radial-gradient(center, ellipse cover, #333 0%,#000 100%); /* Opera 12+ */ - background: -ms-radial-gradient(center, ellipse cover, #333 0%,#000 100%); /* IE10+ */ - background: radial-gradient(center, ellipse cover, #333 0%,#000 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#333', endColorstr='#000',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ -} -.hogan-hero .container { - padding: 180px 0; -} -.hogan-hero h1 { - letter-spacing: -3px; - color: #fff; - position: relative; - margin-bottom: 5px; -} -.hogan-hero h3 { - max-width: 650px; - margin-bottom: 20px; - color: #fff; -} -.hogan-hero .noise, -.hogan-hero .stripes { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} -.hogan-hero .noise { - background: url(../images/noise.png) repeat; -} -.hogan-hero .stripes { - background: url(../images/stripes.png) repeat; -} - -/* Primary content container */ -.primary.container { - padding-top: 100px; -} - -/*Hogan divider */ -.hogan-divider { - padding-top: 60px; - border-bottom: 1px solid #ddd; - margin-bottom: 60px; - clear: both; - position: relative; -} -.hogan-icon { - width: 40px; - height: 30px; - position: absolute; - left: 50%; - top: 46px; - margin-left: -20px; - background: url('../images/small-hogan-icon.png') white no-repeat center center; -} - -/* Button style */ -.button { - display: inline-block; - cursor: pointer; - background: #dfd52e; - border-radius: 3px; - margin-bottom: 20px; - color: #000; - text-transform: uppercase; - text-decoration: none; - font-size: 15px; - padding: 0 34px; - line-height: 46px; - font-weight: bold; - -webkit-transition: background-color .3s ease-in-out; - -moz-transition: background-color .3s ease-in-out; - transition: background-color .3s ease-in-out; - -} -.button:hover { - text-decoration: inherit; - color: inherit; - background-color: #f5e810; -} - -/* Hogan footer */ -.hogan-footer { - border-top: 1px solid #ddd; - margin-top: 60px; - padding: 20px 0 40px; - color: #999; - font-size: 12px; -} -.hogan-footer .copyright { - float: left; -} -.hogan-footer .colophon { - float: right; -} - -pre, code { - background: #F8F8FF; - border: 1px solid #DDD; - padding: 5px 10px; - margin-bottom: 20px; - font-family: courier; - overflow: hidden; -} - -pre code { - border: 0; - padding: 0; - margin-bottom: 0; -} - - -/* #Media Queries -================================================== */ - - /* Smaller than standard 960 (devices and browsers) */ - @media only screen and (max-width: 959px) {} - - /* Tablet Portrait size to standard 960 (devices and browsers) */ - @media only screen and (min-width: 768px) and (max-width: 959px) {} - - /* All Mobile Sizes (devices and browser) */ - @media only screen and (max-width: 767px) { - .hogan-hero .container { - padding: 100px 0; - } - } - - /* Mobile Landscape Size to Tablet Portrait (devices and browsers) */ - @media only screen and (min-width: 480px) and (max-width: 767px) {} - - /* Mobile Portrait Size to Mobile Landscape Size (devices and browsers) */ - @media only screen and (max-width: 479px) {} - diff --git a/docs/build/node_modules/hogan.js/web/stylesheets/skeleton.css b/docs/build/node_modules/hogan.js/web/stylesheets/skeleton.css deleted file mode 100755 index d0264a40b3f9c87cff833382abac5a510b4cea7e..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/web/stylesheets/skeleton.css +++ /dev/null @@ -1,236 +0,0 @@ -/* -* Skeleton V1.1 -* Copyright 2011, Dave Gamache -* www.getskeleton.com -* Free to use under the MIT license. -* http://www.opensource.org/licenses/mit-license.php -* 8/17/2011 -*/ - - -/* Table of Contents -================================================== - #Base 960 Grid - #Tablet (Portrait) - #Mobile (Portrait) - #Mobile (Landscape) - #Clearing */ - - - -/* #Base 960 Grid -================================================== */ - - .container { position: relative; width: 960px; margin: 0 auto; padding: 0; } - .column, .columns { float: left; display: inline; margin-left: 10px; margin-right: 10px; } - .row { margin-bottom: 20px; } - - /* Nested Column Classes */ - .column.alpha, .columns.alpha { margin-left: 0; } - .column.omega, .columns.omega { margin-right: 0; } - - /* Base Grid */ - .container .one.column { width: 40px; } - .container .two.columns { width: 100px; } - .container .three.columns { width: 160px; } - .container .four.columns { width: 220px; } - .container .five.columns { width: 280px; } - .container .six.columns { width: 340px; } - .container .seven.columns { width: 400px; } - .container .eight.columns { width: 460px; } - .container .nine.columns { width: 520px; } - .container .ten.columns { width: 580px; } - .container .eleven.columns { width: 640px; } - .container .twelve.columns { width: 700px; } - .container .thirteen.columns { width: 760px; } - .container .fourteen.columns { width: 820px; } - .container .fifteen.columns { width: 880px; } - .container .sixteen.columns { width: 940px; } - - .container .one-third.column { width: 300px; } - .container .two-thirds.column { width: 620px; } - - /* Offsets */ - .container .offset-by-one { padding-left: 60px; } - .container .offset-by-two { padding-left: 120px; } - .container .offset-by-three { padding-left: 180px; } - .container .offset-by-four { padding-left: 240px; } - .container .offset-by-five { padding-left: 300px; } - .container .offset-by-six { padding-left: 360px; } - .container .offset-by-seven { padding-left: 420px; } - .container .offset-by-eight { padding-left: 480px; } - .container .offset-by-nine { padding-left: 540px; } - .container .offset-by-ten { padding-left: 600px; } - .container .offset-by-eleven { padding-left: 660px; } - .container .offset-by-twelve { padding-left: 720px; } - .container .offset-by-thirteen { padding-left: 780px; } - .container .offset-by-fourteen { padding-left: 840px; } - .container .offset-by-fifteen { padding-left: 900px; } - - - -/* #Tablet (Portrait) -================================================== */ - - /* Note: Design for a width of 768px */ - - @media only screen and (min-width: 768px) and (max-width: 959px) { - .container { width: 768px; } - .container .column, - .container .columns { margin-left: 10px; margin-right: 10px; } - .column.alpha, .columns.alpha { margin-left: 0; margin-right: 10px; } - .column.omega, .columns.omega { margin-right: 0; margin-left: 10px; } - - .container .one.column { width: 28px; } - .container .two.columns { width: 76px; } - .container .three.columns { width: 124px; } - .container .four.columns { width: 172px; } - .container .five.columns { width: 220px; } - .container .six.columns { width: 268px; } - .container .seven.columns { width: 316px; } - .container .eight.columns { width: 364px; } - .container .nine.columns { width: 412px; } - .container .ten.columns { width: 460px; } - .container .eleven.columns { width: 508px; } - .container .twelve.columns { width: 556px; } - .container .thirteen.columns { width: 604px; } - .container .fourteen.columns { width: 652px; } - .container .fifteen.columns { width: 700px; } - .container .sixteen.columns { width: 748px; } - - .container .one-third.column { width: 236px; } - .container .two-thirds.column { width: 492px; } - - /* Offsets */ - .container .offset-by-one { padding-left: 48px; } - .container .offset-by-two { padding-left: 96px; } - .container .offset-by-three { padding-left: 144px; } - .container .offset-by-four { padding-left: 192px; } - .container .offset-by-five { padding-left: 240px; } - .container .offset-by-six { padding-left: 288px; } - .container .offset-by-seven { padding-left: 336px; } - .container .offset-by-eight { padding-left: 348px; } - .container .offset-by-nine { padding-left: 432px; } - .container .offset-by-ten { padding-left: 480px; } - .container .offset-by-eleven { padding-left: 528px; } - .container .offset-by-twelve { padding-left: 576px; } - .container .offset-by-thirteen { padding-left: 624px; } - .container .offset-by-fourteen { padding-left: 672px; } - .container .offset-by-fifteen { padding-left: 720px; } - } - - -/* #Mobile (Portrait) -================================================== */ - - /* Note: Design for a width of 320px */ - - @media only screen and (max-width: 767px) { - .container { width: 300px; } - .columns, .column { margin: 0; } - - .container .one.column, - .container .two.columns, - .container .three.columns, - .container .four.columns, - .container .five.columns, - .container .six.columns, - .container .seven.columns, - .container .eight.columns, - .container .nine.columns, - .container .ten.columns, - .container .eleven.columns, - .container .twelve.columns, - .container .thirteen.columns, - .container .fourteen.columns, - .container .fifteen.columns, - .container .sixteen.columns, - .container .one-third.column, - .container .two-thirds.column { width: 300px; } - - /* Offsets */ - .container .offset-by-one, - .container .offset-by-two, - .container .offset-by-three, - .container .offset-by-four, - .container .offset-by-five, - .container .offset-by-six, - .container .offset-by-seven, - .container .offset-by-eight, - .container .offset-by-nine, - .container .offset-by-ten, - .container .offset-by-eleven, - .container .offset-by-twelve, - .container .offset-by-thirteen, - .container .offset-by-fourteen, - .container .offset-by-fifteen { padding-left: 0; } - - } - - -/* #Mobile (Landscape) -================================================== */ - - /* Note: Design for a width of 480px */ - - @media only screen and (min-width: 480px) and (max-width: 767px) { - .container { width: 420px; } - .columns, .column { margin: 0; } - - .container .one.column, - .container .two.columns, - .container .three.columns, - .container .four.columns, - .container .five.columns, - .container .six.columns, - .container .seven.columns, - .container .eight.columns, - .container .nine.columns, - .container .ten.columns, - .container .eleven.columns, - .container .twelve.columns, - .container .thirteen.columns, - .container .fourteen.columns, - .container .fifteen.columns, - .container .sixteen.columns, - .container .one-third.column, - .container .two-thirds.column { width: 420px; } - } - - -/* #Clearing -================================================== */ - - /* Self Clearing Goodness */ - .container:after { content: "\0020"; display: block; height: 0; clear: both; visibility: hidden; } - - /* Use clearfix class on parent to clear nested columns, - or wrap each row of columns in a <div class="row"> */ - .clearfix:before, - .clearfix:after, - .row:before, - .row:after { - content: '\0020'; - display: block; - overflow: hidden; - visibility: hidden; - width: 0; - height: 0; } - .row:after, - .clearfix:after { - clear: both; } - .row, - .clearfix { - zoom: 1; } - - /* You can also use a <br class="clear" /> to clear columns */ - .clear { - clear: both; - display: block; - overflow: hidden; - visibility: hidden; - width: 0; - height: 0; - } - - diff --git a/docs/build/node_modules/hogan.js/wrappers/amd.js.mustache b/docs/build/node_modules/hogan.js/wrappers/amd.js.mustache deleted file mode 100644 index d91ef77ca290dc3aa43e73be497b24025354dca8..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/wrappers/amd.js.mustache +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2011 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. - */ - -{{{template}}} -{{{compiler}}} - -if (typeof define === 'function' && define.amd) { - define(Hogan); -} diff --git a/docs/build/node_modules/hogan.js/wrappers/common.js.mustache b/docs/build/node_modules/hogan.js/wrappers/common.js.mustache deleted file mode 100644 index e823e83a0851ff8259369d70995dfaceff73437a..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/wrappers/common.js.mustache +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright 2011 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. - */ - -{{{template}}} -{{{compiler}}} - -if (typeof module !== 'undefined' && module.exports) { - module.exports = Hogan; -} diff --git a/docs/build/node_modules/hogan.js/wrappers/js.mustache b/docs/build/node_modules/hogan.js/wrappers/js.mustache deleted file mode 100644 index 9f311f08d4013f22c1b3943354c586e6e35598bd..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/wrappers/js.mustache +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright 2011 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. - */ - -{{{template}}} -{{{compiler}}} diff --git a/docs/build/node_modules/hogan.js/wrappers/mustache.js.mustache b/docs/build/node_modules/hogan.js/wrappers/mustache.js.mustache deleted file mode 100644 index d3a3d70df925bbb4d4d18cb2498b2b1819a2f500..0000000000000000000000000000000000000000 --- a/docs/build/node_modules/hogan.js/wrappers/mustache.js.mustache +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2011 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. - */ - -// A wrapper for compatibility with Mustache.js, quirks and all - -{{{template}}} -{{{compiler}}} - -var Mustache = (function (Hogan) { - - // Mustache.js has non-spec partial context behavior - function mustachePartial(name, context, partials, indent) { - var partialScope = this.f(name, context, partials, 0); - var cx = context; - if (partialScope) { - cx = cx.concat(partialScope); - } - - return Hogan.Template.prototype.rp.call(this, name, cx, partials, indent); - } - - var HoganTemplateWrapper = function(renderFunc, text, compiler){ - this.rp = mustachePartial; - Hogan.Template.call(this, renderFunc, text, compiler); - }; - HoganTemplateWrapper.prototype = Hogan.Template.prototype; - - // Add a wrapper for Hogan's generate method. Mustache and Hogan keep - // separate caches, and Mustache returns wrapped templates. - var wrapper; - var HoganWrapper = function(){ - this.cache = {}; - this.generate = function(code, text, options) { - return new HoganTemplateWrapper(new Function('c', 'p', 'i', code), text, wrapper); - } - }; - HoganWrapper.prototype = Hogan; - wrapper = new HoganWrapper(); - - return { - to_html: function(text, data, partials, sendFun) { - var template = wrapper.compile(text); - var result = template.render(data, partials); - if (!sendFun) { - return result; - } - - sendFun(result); - } - } - -})(Hogan); diff --git a/docs/build/package.json b/docs/build/package.json deleted file mode 100644 index 97ab25909b73162e601832a7e45da7de2c44441c..0000000000000000000000000000000000000000 --- a/docs/build/package.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "bootstrap-doc-builder" -, "version": "0.0.1" -, "description": "build bootstrap docs" -, "dependencies": { "hogan.js": "1.0.5-dev" } -} diff --git a/docs/components.html b/docs/components.html index 7b960543b428708c9c2a32daf0bf82593a971bcc..b18fd2b64bb4aab925ed84d3d8511b83112bd79a 100644 --- a/docs/components.html +++ b/docs/components.html @@ -1,2626 +1,2536 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Components · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class="active"> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> +--- +layout: default +title: Components +slug: components +lead: "Dozens of reusable components built to provide iconography, dropdowns, navigation, alerts, popovers, and much more." +--- + + + <!-- Icons + ================================================== --> + <div class="bs-docs-section" id="icons"> + <div class="page-header"> + <h1>Icons font <small>by <a href="http://glyphicons.com" target="_blank">Glyphicons</a></small></h1> + </div> + + <h2 id="icons-list">Included glyphs</h2> + <p>Bootstrap comes with all 160 of <a href="http://glyphicons.com" target="_blank">Glyphicons</a> Halflings set, all available in font formats for easy coloring, sizing, and placement.</p> + + <ul class="the-icons clearfix"> + <li><i class="glyphicon glyphicon-glass"></i> glyphicon-glass</li> + <li><i class="glyphicon glyphicon-music"></i> glyphicon-music</li> + <li><i class="glyphicon glyphicon-search"></i> glyphicon-search</li> + <li><i class="glyphicon glyphicon-envelope"></i> glyphicon-envelope</li> + <li><i class="glyphicon glyphicon-heart"></i> glyphicon-heart</li> + <li><i class="glyphicon glyphicon-star"></i> glyphicon-star</li> + <li><i class="glyphicon glyphicon-star-empty"></i> glyphicon-star-empty</li> + <li><i class="glyphicon glyphicon-user"></i> glyphicon-user</li> + <li><i class="glyphicon glyphicon-film"></i> glyphicon-film</li> + <li><i class="glyphicon glyphicon-th-large"></i> glyphicon-th-large</li> + <li><i class="glyphicon glyphicon-th"></i> glyphicon-th</li> + <li><i class="glyphicon glyphicon-th-list"></i> glyphicon-th-list</li> + <li><i class="glyphicon glyphicon-ok"></i> glyphicon-ok</li> + <li><i class="glyphicon glyphicon-remove"></i> glyphicon-remove</li> + <li><i class="glyphicon glyphicon-zoom-in"></i> glyphicon-zoom-in</li> + <li><i class="glyphicon glyphicon-zoom-out"></i> glyphicon-zoom-out</li> + <li><i class="glyphicon glyphicon-off"></i> glyphicon-off</li> + <li><i class="glyphicon glyphicon-signal"></i> glyphicon-signal</li> + <li><i class="glyphicon glyphicon-cog"></i> glyphicon-cog</li> + <li><i class="glyphicon glyphicon-trash"></i> glyphicon-trash</li> + <li><i class="glyphicon glyphicon-home"></i> glyphicon-home</li> + <li><i class="glyphicon glyphicon-file"></i> glyphicon-file</li> + <li><i class="glyphicon glyphicon-time"></i> glyphicon-time</li> + <li><i class="glyphicon glyphicon-road"></i> glyphicon-road</li> + <li><i class="glyphicon glyphicon-download-alt"></i> glyphicon-download-alt</li> + <li><i class="glyphicon glyphicon-download"></i> glyphicon-download</li> + <li><i class="glyphicon glyphicon-upload"></i> glyphicon-upload</li> + <li><i class="glyphicon glyphicon-inbox"></i> glyphicon-inbox</li> + + <li><i class="glyphicon glyphicon-play-circle"></i> glyphicon-play-circle</li> + <li><i class="glyphicon glyphicon-repeat"></i> glyphicon-repeat</li> + <li><i class="glyphicon glyphicon-refresh"></i> glyphicon-refresh</li> + <li><i class="glyphicon glyphicon-list-alt"></i> glyphicon-list-alt</li> + <li><i class="glyphicon glyphicon-lock"></i> glyphicon-lock</li> + <li><i class="glyphicon glyphicon-flag"></i> glyphicon-flag</li> + <li><i class="glyphicon glyphicon-headphones"></i> glyphicon-headphones</li> + <li><i class="glyphicon glyphicon-volume-off"></i> glyphicon-volume-off</li> + <li><i class="glyphicon glyphicon-volume-down"></i> glyphicon-volume-down</li> + <li><i class="glyphicon glyphicon-volume-up"></i> glyphicon-volume-up</li> + <li><i class="glyphicon glyphicon-qrcode"></i> glyphicon-qrcode</li> + <li><i class="glyphicon glyphicon-barcode"></i> glyphicon-barcode</li> + <li><i class="glyphicon glyphicon-tag"></i> glyphicon-tag</li> + <li><i class="glyphicon glyphicon-tags"></i> glyphicon-tags</li> + <li><i class="glyphicon glyphicon-book"></i> glyphicon-book</li> + <li><i class="glyphicon glyphicon-bookmark"></i> glyphicon-bookmark</li> + <li><i class="glyphicon glyphicon-print"></i> glyphicon-print</li> + <li><i class="glyphicon glyphicon-camera"></i> glyphicon-camera</li> + <li><i class="glyphicon glyphicon-font"></i> glyphicon-font</li> + <li><i class="glyphicon glyphicon-bold"></i> glyphicon-bold</li> + <li><i class="glyphicon glyphicon-italic"></i> glyphicon-italic</li> + <li><i class="glyphicon glyphicon-text-height"></i> glyphicon-text-height</li> + <li><i class="glyphicon glyphicon-text-width"></i> glyphicon-text-width</li> + <li><i class="glyphicon glyphicon-align-left"></i> glyphicon-align-left</li> + <li><i class="glyphicon glyphicon-align-center"></i> glyphicon-align-center</li> + <li><i class="glyphicon glyphicon-align-right"></i> glyphicon-align-right</li> + <li><i class="glyphicon glyphicon-align-justify"></i> glyphicon-align-justify</li> + <li><i class="glyphicon glyphicon-list"></i> glyphicon-list</li> + + <li><i class="glyphicon glyphicon-indent-left"></i> glyphicon-indent-left</li> + <li><i class="glyphicon glyphicon-indent-right"></i> glyphicon-indent-right</li> + <li><i class="glyphicon glyphicon-facetime-video"></i> glyphicon-facetime-video</li> + <li><i class="glyphicon glyphicon-picture"></i> glyphicon-picture</li> + <li><i class="glyphicon glyphicon-pencil"></i> glyphicon-pencil</li> + <li><i class="glyphicon glyphicon-map-marker"></i> glyphicon-map-marker</li> + <li><i class="glyphicon glyphicon-adjust"></i> glyphicon-adjust</li> + <li><i class="glyphicon glyphicon-tint"></i> glyphicon-tint</li> + <li><i class="glyphicon glyphicon-edit"></i> glyphicon-edit</li> + <li><i class="glyphicon glyphicon-share"></i> glyphicon-share</li> + <li><i class="glyphicon glyphicon-check"></i> glyphicon-check</li> + <li><i class="glyphicon glyphicon-move"></i> glyphicon-move</li> + <li><i class="glyphicon glyphicon-step-backward"></i> glyphicon-step-backward</li> + <li><i class="glyphicon glyphicon-fast-backward"></i> glyphicon-fast-backward</li> + <li><i class="glyphicon glyphicon-backward"></i> glyphicon-backward</li> + <li><i class="glyphicon glyphicon-play"></i> glyphicon-play</li> + <li><i class="glyphicon glyphicon-pause"></i> glyphicon-pause</li> + <li><i class="glyphicon glyphicon-stop"></i> glyphicon-stop</li> + <li><i class="glyphicon glyphicon-forward"></i> glyphicon-forward</li> + <li><i class="glyphicon glyphicon-fast-forward"></i> glyphicon-fast-forward</li> + <li><i class="glyphicon glyphicon-step-forward"></i> glyphicon-step-forward</li> + <li><i class="glyphicon glyphicon-eject"></i> glyphicon-eject</li> + <li><i class="glyphicon glyphicon-chevron-left"></i> glyphicon-chevron-left</li> + <li><i class="glyphicon glyphicon-chevron-right"></i> glyphicon-chevron-right</li> + <li><i class="glyphicon glyphicon-plus-sign"></i> glyphicon-plus-sign</li> + <li><i class="glyphicon glyphicon-minus-sign"></i> glyphicon-minus-sign</li> + <li><i class="glyphicon glyphicon-remove-sign"></i> glyphicon-remove-sign</li> + <li><i class="glyphicon glyphicon-ok-sign"></i> glyphicon-ok-sign</li> + + <li><i class="glyphicon glyphicon-question-sign"></i> glyphicon-question-sign</li> + <li><i class="glyphicon glyphicon-info-sign"></i> glyphicon-info-sign</li> + <li><i class="glyphicon glyphicon-screenshot"></i> glyphicon-screenshot</li> + <li><i class="glyphicon glyphicon-remove-circle"></i> glyphicon-remove-circle</li> + <li><i class="glyphicon glyphicon-ok-circle"></i> glyphicon-ok-circle</li> + <li><i class="glyphicon glyphicon-ban-circle"></i> glyphicon-ban-circle</li> + <li><i class="glyphicon glyphicon-arrow-left"></i> glyphicon-arrow-left</li> + <li><i class="glyphicon glyphicon-arrow-right"></i> glyphicon-arrow-right</li> + <li><i class="glyphicon glyphicon-arrow-up"></i> glyphicon-arrow-up</li> + <li><i class="glyphicon glyphicon-arrow-down"></i> glyphicon-arrow-down</li> + <li><i class="glyphicon glyphicon-share-alt"></i> glyphicon-share-alt</li> + <li><i class="glyphicon glyphicon-resize-full"></i> glyphicon-resize-full</li> + <li><i class="glyphicon glyphicon-resize-small"></i> glyphicon-resize-small</li> + <li><i class="glyphicon glyphicon-plus"></i> glyphicon-plus</li> + <li><i class="glyphicon glyphicon-minus"></i> glyphicon-minus</li> + <li><i class="glyphicon glyphicon-asterisk"></i> glyphicon-asterisk</li> + <li><i class="glyphicon glyphicon-exclamation-sign"></i> glyphicon-exclamation-sign</li> + <li><i class="glyphicon glyphicon-gift"></i> glyphicon-gift</li> + <li><i class="glyphicon glyphicon-leaf"></i> glyphicon-leaf</li> + <li><i class="glyphicon glyphicon-fire"></i> glyphicon-fire</li> + <li><i class="glyphicon glyphicon-eye-open"></i> glyphicon-eye-open</li> + <li><i class="glyphicon glyphicon-eye-close"></i> glyphicon-eye-close</li> + <li><i class="glyphicon glyphicon-warning-sign"></i> glyphicon-warning-sign</li> + <li><i class="glyphicon glyphicon-plane"></i> glyphicon-plane</li> + <li><i class="glyphicon glyphicon-calendar"></i> glyphicon-calendar</li> + <li><i class="glyphicon glyphicon-random"></i> glyphicon-random</li> + <li><i class="glyphicon glyphicon-comment"></i> glyphicon-comment</li> + <li><i class="glyphicon glyphicon-magnet"></i> glyphicon-magnet</li> + + <li><i class="glyphicon glyphicon-chevron-up"></i> glyphicon-chevron-up</li> + <li><i class="glyphicon glyphicon-chevron-down"></i> glyphicon-chevron-down</li> + <li><i class="glyphicon glyphicon-retweet"></i> glyphicon-retweet</li> + <li><i class="glyphicon glyphicon-shopping-cart"></i> glyphicon-shopping-cart</li> + <li><i class="glyphicon glyphicon-folder-close"></i> glyphicon-folder-close</li> + <li><i class="glyphicon glyphicon-folder-open"></i> glyphicon-folder-open</li> + <li><i class="glyphicon glyphicon-resize-vertical"></i> glyphicon-resize-vertical</li> + <li><i class="glyphicon glyphicon-resize-horizontal"></i> glyphicon-resize-horizontal</li> + <li><i class="glyphicon glyphicon-hdd"></i> glyphicon-hdd</li> + <li><i class="glyphicon glyphicon-bullhorn"></i> glyphicon-bullhorn</li> + <li><i class="glyphicon glyphicon-bell"></i> glyphicon-bell</li> + <li><i class="glyphicon glyphicon-certificate"></i> glyphicon-certificate</li> + <li><i class="glyphicon glyphicon-thumbs-up"></i> glyphicon-thumbs-up</li> + <li><i class="glyphicon glyphicon-thumbs-down"></i> glyphicon-thumbs-down</li> + <li><i class="glyphicon glyphicon-hand-right"></i> glyphicon-hand-right</li> + <li><i class="glyphicon glyphicon-hand-left"></i> glyphicon-hand-left</li> + <li><i class="glyphicon glyphicon-hand-up"></i> glyphicon-hand-up</li> + <li><i class="glyphicon glyphicon-hand-down"></i> glyphicon-hand-down</li> + <li><i class="glyphicon glyphicon-circle-arrow-right"></i> glyphicon-circle-arrow-right</li> + <li><i class="glyphicon glyphicon-circle-arrow-left"></i> glyphicon-circle-arrow-left</li> + <li><i class="glyphicon glyphicon-circle-arrow-up"></i> glyphicon-circle-arrow-up</li> + <li><i class="glyphicon glyphicon-circle-arrow-down"></i> glyphicon-circle-arrow-down</li> + <li><i class="glyphicon glyphicon-globe"></i> glyphicon-globe</li> + <li><i class="glyphicon glyphicon-wrench"></i> glyphicon-wrench</li> + <li><i class="glyphicon glyphicon-tasks"></i> glyphicon-tasks</li> + <li><i class="glyphicon glyphicon-filter"></i> glyphicon-filter</li> + <li><i class="glyphicon glyphicon-briefcase"></i> glyphicon-briefcase</li> + <li><i class="glyphicon glyphicon-fullscreen"></i> glyphicon-fullscreen</li> + + <li><i class="glyphicon glyphicon-dashboard"></i> glyphicon-dashboard</li> + <li><i class="glyphicon glyphicon-paperclip"></i> glyphicon-paperclip</li> + <li><i class="glyphicon glyphicon-heart-empty"></i> glyphicon-heart-empty</li> + <li><i class="glyphicon glyphicon-link"></i> glyphicon-link</li> + <li><i class="glyphicon glyphicon-phone"></i> glyphicon-phone</li> + <li><i class="glyphicon glyphicon-pushpin"></i> glyphicon-pushpin</li> + <li><i class="glyphicon glyphicon-euro"></i> glyphicon-euro</li> + <li><i class="glyphicon glyphicon-usd"></i> glyphicon-usd</li> + <li><i class="glyphicon glyphicon-gbp"></i> glyphicon-gbp</li> + <li><i class="glyphicon glyphicon-sort"></i> glyphicon-sort</li> + <li><i class="glyphicon glyphicon-sort-by-alphabet"></i> glyphicon-sort-by-alphabet</li> + <li><i class="glyphicon glyphicon-sort-by-alphabet-alt"></i> glyphicon-sort-by-alphabet-alt</li> + <li><i class="glyphicon glyphicon-sort-by-order"></i> glyphicon-sort-by-order</li> + <li><i class="glyphicon glyphicon-sort-by-order-alt"></i> glyphicon-sort-by-order-alt</li> + <li><i class="glyphicon glyphicon-sort-by-attributes"></i> glyphicon-sort-by-attributes</li> + <li><i class="glyphicon glyphicon-sort-by-attributes-alt"></i> glyphicon-sort-by-attributes-alt</li> + <li><i class="glyphicon glyphicon-unchecked"></i> glyphicon-unchecked</li> + <li><i class="glyphicon glyphicon-expand"></i> glyphicon-expand</li> + <li><i class="glyphicon glyphicon-collapse"></i> glyphicon-collapse</li> + <li><i class="glyphicon glyphicon-collapse-top"></i> glyphicon-collapse-top</li> + + </ul> + + <h3>Glyphicons attribution</h3> + <p><a href="http://glyphicons.com/">Glyphicons</a> Halflings are normally not available for free, but an arrangement between Bootstrap and the Glyphicons creator have made this possible at no cost to you as developers. As a thank you, we ask you to include an optional link back to <a href="http://glyphicons.com/">Glyphicons</a> whenever practical.</p> + + + <h2 id="icons-how-to">How to use</h2> + <p>Add the appropriate class to any inline element. All icon classes are prefixed with <code>glyphicon-</code> for easy styling. To use, place the following code just about anywhere:</p> +{% highlight html %} +<span class="glyphicon glyphicon-search"></span> +{% endhighlight %} + <p>Want to change the icon color? Just change the <code>color</code> of the parent element.</p> + <p>When using beside strings of text, as in buttons or nav links, be sure to leave a space after the icon for proper spacing.</p> + + + <h2 id="icons-examples">Icon examples</h2> + <p>Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.</p> + + <h4>Buttons</h4> + + <h5>Button group in a button toolbar</h5> + <div class="bs-example"> + <div class="btn-toolbar"> + <div class="btn-group"> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-left"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-center"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-right"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-justify"></span></a> + </div> + </div> + </div><!-- /bs-example --> +{% highlight html %} +<div class="btn-toolbar"> + <div class="btn-group"> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-left"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-center"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-right"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-justify"></span></a> + </div> +</div> +{% endhighlight %} + + <div class="bs-callout"> + <h4>Accessibility</h4> + <p>Keep in mind that using icons without any additional content means the icons are not represented to screen reader users.</p> + </div> + + <h5>Dropdown in a button group</h5> + <div class="bs-example"> + <div class="btn-group"> + <a class="btn btn-primary" href="#"><span class="glyphicon glyphicon-user"></span> User</a> + <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> + <ul class="dropdown-menu"> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Edit</a></li> + <li><a href="#"><span class="glyphicon glyphicon-trash"></span> Delete</a></li> + <li><a href="#"><span class="glyphicon glyphicon-ban-circle"></span> Ban</a></li> + <li class="divider"></li> + <li><a href="#">Make admin</a></li> + </ul> + </div> + </div><!-- /bs-example --> +{% highlight html %} +<div class="btn-group"> + <a class="btn btn-default btn-primary" href="#"><span class="glyphicon glyphicon-user"></span> User</a> + <a class="btn btn-default btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> + <ul class="dropdown-menu"> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Edit</a></li> + <li><a href="#"><span class="glyphicon glyphicon-trash"></span> Delete</a></li> + <li><a href="#"><span class="glyphicon glyphicon-ban-circle"></span> Ban</a></li> + <li class="divider"></li> + <li><a href="#"><span class="glyphicon glyphicon-"></span> Make admin</a></li> + </ul> +</div> +{% endhighlight %} + + <h5>Large button</h5> + <div class="bs-example"> + <a class="btn btn-default btn-large" href="#"><span class="glyphicon glyphicon-star"></span> Star</a> + </div><!-- /bs-example --> +{% highlight html %} +<a class="btn btn-default btn-large" href="#"><span class="glyphicon glyphicon-star"></span> Star</a> +{% endhighlight %} + + <h5>Small button</h5> + <div class="bs-example"> + <a class="btn btn-default btn-small" href="#"><span class="glyphicon glyphicon-star"></span></a> + </div><!-- /bs-example --> +{% highlight html %} +<a class="btn btn-default btn-small" href="#"><span class="glyphicon glyphicon-star"></span></a> +{% endhighlight %} + + + <h4>Navigation</h4> + <div class="bs-example"> + <ul class="nav nav-pills nav-stacked"> + <li class="active"><a href="#"><span class="glyphicon glyphicon-home"></span> Home</a></li> + <li><a href="#"><span class="glyphicon glyphicon-book"></span> Library</a></li> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Applications</a></li> + <li><a href="#"><span class="glyphicon glyphicon-"></span> Misc</a></li> + </ul> + </div><!-- /bs-example --> +{% highlight html %} +<ul class="nav nav-pills nav-stacked"> + <li class="active"><a href="#"><span class="glyphicon glyphicon-home"></span> Home</a></li> + <li><a href="#"><span class="glyphicon glyphicon-book"></span> Library</a></li> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Applications</a></li> + <li><a href="#"><span class="glyphicon glyphicon-"></span> Misc</a></li> +</ul> +{% endhighlight %} + + <h4>Form fields</h4> + <form class="bs-example form-horizontal"> + <div class="control-group"> + <label class="control-label" for="inputIcon">Email address</label> + <div class="controls"> + <div class="input-group"> + <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span> + <input class="col-lg-2" id="inputIcon" type="text"> </div> </div> </div> + </form> +{% highlight html %} +<div class="control-group"> + <label class="control-label" for="inputIcon">Email address</label> + <div class="controls"> + <div class="input-group"> + <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span> + <input class="col-lg-2" id="inputIcon" type="text"> </div> + </div> +</div> +{% endhighlight %} -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Components</h1> - <p class="lead">Dozens of reusable components built to provide navigation, alerts, popovers, and more.</p> </div> -</header> - <div class="container"> - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> Dropdowns</a></li> - <li><a href="#buttonGroups"><i class="icon-chevron-right"></i> Button groups</a></li> - <li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> Button dropdowns</a></li> - <li><a href="#navs"><i class="icon-chevron-right"></i> Navs</a></li> - <li><a href="#navbar"><i class="icon-chevron-right"></i> Navbar</a></li> - <li><a href="#breadcrumbs"><i class="icon-chevron-right"></i> Breadcrumbs</a></li> - <li><a href="#pagination"><i class="icon-chevron-right"></i> Pagination</a></li> - <li><a href="#labels-badges"><i class="icon-chevron-right"></i> Labels and badges</a></li> - <li><a href="#typography"><i class="icon-chevron-right"></i> Typography</a></li> - <li><a href="#thumbnails"><i class="icon-chevron-right"></i> Thumbnails</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> Alerts</a></li> - <li><a href="#progress"><i class="icon-chevron-right"></i> Progress bars</a></li> - <li><a href="#media"><i class="icon-chevron-right"></i> Media object</a></li> - <li><a href="#misc"><i class="icon-chevron-right"></i> Misc</a></li> + <!-- Dropdowns + ================================================== --> + <div class="bs-docs-section" id="dropdowns"> + <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> + + <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> + <div class="bs-example"> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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><a tabindex="-1" href="#">Separated link</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="dropdown"> + <!-- Link or button to toggle dropdown --> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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><a tabindex="-1" href="#">Separated link</a></li> + </ul> +</div> +{% endhighlight %} + + <h3 id="dropdowns-alignment">Aligning the menus</h3> + <p>Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.</p> +{% highlight html %} +<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> + ... +</ul> +{% endhighlight %} + + <h3 id="dropdowns-disabled">Disabled menu options</h3> + <p>Add <code>.disabled</code> to a <code><li></code> in the dropdown to disable the link.</p> + <div class="bs-example"> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <li><a tabindex="-1" href="#">Regular link</a></li> + <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> + <li><a tabindex="-1" href="#">Another link</a></li> </ul> </div> - <div class="span9"> + </div><!-- /example --> +{% highlight html %} +<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <li><a tabindex="-1" href="#">Regular link</a></li> + <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> + <li><a tabindex="-1" href="#">Another link</a></li> +</ul> +{% endhighlight %} + + <h3 id="dropdowns-submenus">Sub menus on dropdowns</h3> + <p>Add an extra level of dropdown menus, appearing on hover like those of OS X, with some simple markup additions. Add <code>.dropdown-submenu</code> to any <code>li</code> in an existing dropdown menu for automatic styling.</p> + <div class="bs-example bs-example-submenu"> + + <div class="pull-left"> + <p class="text-muted">Default</p> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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-submenu"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + </ul> + </div> + </div> + <div class="pull-left"> + <p class="text-muted">Dropup</p> + <div class="dropup"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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-submenu"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + </ul> + </div> + </div> + <div class="pull-left"> + <p class="text-muted">Left submenu</p> + <div class="dropdown"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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-submenu pull-left"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + </ul> + </div> + </div> - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>Dropdown menus</h1> - </div> + </div> +{% highlight html %} +<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + ... + <li class="dropdown-submenu pull-left"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + ... +</ul> +{% endhighlight %} - <h2>Example</h2> - <p>Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href="./javascript.html#dropdowns">dropdown JavaScript plugin</a>.</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <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><a tabindex="-1" href="#">Separated link</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <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><a tabindex="-1" href="#">Separated link</a></li> -</ul> -</pre> - - <h2>Markup</h2> - <p>Looking at just the dropdown menu, here's the required HTML. You need to wrap the dropdown's trigger and the dropdown menu within <code>.dropdown</code>, or another element that declares <code>position: relative;</code>. Then just create the menu.</p> - -<pre class="prettyprint linenums"> -<div class="dropdown"> - <!-- Link or button to toggle dropdown --> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - <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><a tabindex="-1" href="#">Separated link</a></li> - </ul> -</div> -</pre> - - <h2>Options</h2> - <p>Align menus to the right and add include additional levels of dropdowns.</p> - - <h3>Aligning the menus</h3> - <p>Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.</p> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> + </div> + + + + <!-- Button Groups + ================================================== --> + <div class="bs-docs-section" id="btn-groups"> + <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> + + <h3 id="btn-groups-single">Basic button group</h3> + <p>Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.</p> + <div class="bs-example"> + <div class="btn-group" style="margin: 9px 0 5px;"> + <button type="button" class="btn btn-default">Left</button> + <button type="button" class="btn btn-default">Middle</button> + <button type="button" class="btn btn-default">Right</button> + </div> + </div> +{% highlight html %} +<div class="btn-group"> + <button type="button" class="btn btn-default">Left</button> + <button type="button" class="btn btn-default">Middle</button> + <button type="button" class="btn btn-default">Right</button> +</div> +{% endhighlight %} + + <h3 id="btn-groups-toolbar">Multiple button groups</h3> + <p>Combine sets of <code><div class="btn-group"></code> into a <code><div class="btn-toolbar"></code> for more complex components.</p> + <div class="bs-example"> + <div class="btn-toolbar" style="margin: 0;"> + <div class="btn-group"> + <button type="button" class="btn btn-default">1</button> + <button type="button" class="btn btn-default">2</button> + <button type="button" class="btn btn-default">3</button> + <button type="button" class="btn btn-default">4</button> + </div> + <div class="btn-group"> + <button type="button" class="btn btn-default">5</button> + <button type="button" class="btn btn-default">6</button> + <button type="button" class="btn btn-default">7</button> + </div> + <div class="btn-group"> + <button type="button" class="btn btn-default">8</button> + </div> + </div> + </div> +{% highlight html %} +<div class="btn-toolbar"> + <div class="btn-group">...</div> + <div class="btn-group">...</div> + <div class="btn-group">...</div> +</div> +{% endhighlight %} + + <h3 id="btn-groups-nested">Nested button groups</h3> + <p>Place buttons groups within button groups when you want dropdown menus mixed with a series of buttons.</p> + <div class="bs-example"> + <div class="btn-group"> + <button type="button" class="btn btn-default">1</button> + <button type="button" class="btn btn-default">2</button> + <button type="button" class="btn btn-default">3</button> + + <div class="btn-group"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + Dropdown + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Dropdown link</a></li> + <li><a href="#">Dropdown link</a></li> + <li><a href="#">Dropdown link</a></li> + </ul> + </div> + </div> + </div> + + <h3 id="btn-groups-vertical">Vertical button groups</h3> + <p>Make a set of buttons appear vertically stacked rather than horizontally.</p> + <div class="bs-example"> + <div class="btn-group-vertical"> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-left"></i></button> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-center"></i></button> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-right"></i></button> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-justify"></i></button> + </div> + </div> +{% highlight html %} +<div class="btn-group-vertical"> ... -</ul> -</pre> - - <h3>Disabled menu options</h3> - <p>Add <code>.disabled</code> to a <code><li></code> in the dropdown to disable the link.</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">Regular link</a></li> - <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> - <li><a tabindex="-1" href="#">Another link</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">Regular link</a></li> - <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> - <li><a tabindex="-1" href="#">Another link</a></li> -</ul> -</pre> - - <h3>Sub menus on dropdowns</h3> - <p>Add an extra level of dropdown menus, appearing on hover like those of OS X, with some simple markup additions. Add <code>.dropdown-submenu</code> to any <code>li</code> in an existing dropdown menu for automatic styling.</p> - <div class="bs-docs-example bs-docs-example-submenus"> - - <div class="pull-left"> - <p class="muted">Default</p> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <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-submenu"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - </ul> - </li> - </ul> - </div> - </div> +</div> +{% 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> + <div class="bs-example"> + <div class="btn-group btn-group-justified"> + <a href="#" class="btn btn-default">Left</a> + <a href="#" class="btn btn-default">Right</a> + <a href="#" class="btn btn-default">Middle</a> + </div> + </div> +{% highlight html %} +<div class="btn-group btn-group-justified"> + ... +</div> +{% endhighlight %} - <div class="pull-left"> - <p class="muted">Dropup</p> - <div class="dropup"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <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-submenu"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - </ul> - </li> - </ul> - </div> - </div> + </div> - <div class="pull-left"> - <p class="muted">Left submenu</p> - <div class="dropdown"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <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-submenu pull-left"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - <li><a tabindex="-1" href="#">Second level link</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> + + <!-- Split button dropdowns + ================================================== --> + <div class="bs-docs-section" id="btn-dropdowns"> + <div class="page-header"> + <h1>Button dropdown menus</h1> + </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"> + <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> + </div> + + <h3 id="btn-dropdowns-single">Single button dropdowns</h3> + <p>Turn a button into dropdown toggle with some basic markup changes.</p> + <div class="bs-example"> + <div class="btn-toolbar" style="margin-bottom: 10px;"> + <div class="btn-group"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown">Danger <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-warning dropdown-toggle" data-toggle="dropdown">Warning <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown">Success <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div> + </div> +{% highlight html %} +<!-- Single button --> +<div class="btn-group"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + Action <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> +</div> +{% endhighlight %} + + <h3 id="btn-dropdowns-split">Split button dropdowns</h3> + <p>Similarly, create split button dropdowns with the same markup changes, only with a separate button.</p> + <div class="bs-example"> + <div class="btn-toolbar" style="margin: 0;"> + <div class="btn-group"> + <button type="button" class="btn btn-default">Action</button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-primary">Action</button> + <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-danger">Danger</button> + <button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-warning">Warning</button> + <button type="button" class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button type="button" class="btn btn-success">Success</button> + <button type="button" class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div><!-- /btn-toolbar --> + </div> +{% highlight html %} +<!-- Split button --> +<div class="btn-group"> + <button type="button" class="btn btn-default">Action</button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> +</div> +{% endhighlight %} + + <h3 id="btn-dropdowns-sizes">Works with all button sizes</h3> + <p>Button dropdowns work with buttons of all sizes.</p> + <div class="bs-example"> + <div class="btn-toolbar" style="margin: 0;"> + <div class="btn-group"> + <button class="btn btn-default btn-large dropdown-toggle" type="button" data-toggle="dropdown"> + Large button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-default btn-small dropdown-toggle" type="button" data-toggle="dropdown"> + Small button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div><!-- /btn-toolbar --> + </div><!-- /example --> +{% highlight html %} +<!-- Large button group --> +<div class="btn-group"> + <button class="btn btn-default btn-large dropdown-toggle" type="button" data-toggle="dropdown"> + Large button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + ... + </ul> +</div> + +<!-- Small button group --> +<div class="btn-group"> + <button class="btn btn-default btn-small dropdown-toggle" type="button" data-toggle="dropdown"> + Small button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + ... + </ul> +</div> +</div> +{% endhighlight %} + + <h3 id="btn-dropdowns-dropup">Dropup buttons</h3> + <p>Trigger dropdown menus above elements by adding <code>.dropup</code> to the parent.</p> + <div class="bs-example"> + <div class="btn-toolbar"> + <div class="btn-group dropup"> + <button type="button" class="btn btn-default">Dropup</button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group dropup"> + <button type="button" class="btn btn-primary">Right dropup</button> + <button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu pull-right"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="btn-group dropup"> + <button type="button" class="btn btn-default">Dropup</button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <!-- Dropdown menu links --> + </ul> +</div> +{% endhighlight %} + + </div> + + + + <!-- Navs + ================================================== --> + <div class="bs-docs-section" id="nav"> + <div class="page-header"> + <h1>Navs</h1> + </div> + + <p class="lead">Navs available in Bootstrap have shared markup, starting with the base <code>.nav</code> class, as well as shared states. Swap modifier classes to switch between each style.</p> + + <h2 id="nav-tabs">Tabs</h2> + <p>Note the <code>.nav-tabs</code> class requires the <code>.nav</code> base class.</p> + <div class="bs-example"> + <ul class="nav nav-tabs"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> +</ul> +{% endhighlight %} + + <h2 id="nav-pills">Pills</h2> + <p>Take that same HTML, but use <code>.nav-pills</code> instead:</p> + <div class="bs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-pills"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> +</ul> +{% endhighlight %} + <p>Pills are also vertically stackable. Just add <code>.nav-stacked</code>.</p> + <div class="bs-example"> + <ul class="nav nav-pills nav-stacked" style="max-width: 300px;"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-pills nav-stacked"> ... - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">More options</a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> +</ul> +{% endhighlight %} + + <h2>Options</h2> + + <h3 id="nav-justified">Justified links</h3> + <p>Easily make tabs or pills equal widths of their parent with <code>.nav-justified</code>.</p> + <div class="bs-example"> + <ul class="nav nav-tabs nav-justified"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + <br> + <ul class="nav nav-pills nav-justified"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs nav-justified"> + ... +</ul> +<ul class="nav nav-pills nav-justified"> + ... +</ul> +{% endhighlight %} - </section> + <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"> + <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> + <div class="bs-example"> + <ul class="nav nav-pills"> + <li><a href="#">Clickable link</a></li> + <li><a href="#">Clickable link</a></li> + <li class="disabled"><a href="#">Disabled link</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs"> + ... + <li class="disabled"><a href="#">Disabled link</a></li> + ... +</ul> +{% endhighlight %} - <!-- Button Groups - ================================================== --> - <section id="buttonGroups"> - <div class="page-header"> - <h1>Button groups</h1> - </div> + <h3 id="nav-alignment">Component alignment</h3> + <p>To align nav links, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> - <h2>Examples</h2> - <p>Two basic options, along with two more specific variations.</p> - <h3>Single button group</h3> - <p>Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.</p> - <div class="bs-docs-example"> - <div class="btn-group" style="margin: 9px 0 5px;"> - <button class="btn">Left</button> - <button class="btn">Middle</button> - <button class="btn">Right</button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">Left</button> - <button class="btn">Middle</button> - <button class="btn">Right</button> -</div> -</pre> - - <h3>Multiple button groups</h3> - <p>Combine sets of <code><div class="btn-group"></code> into a <code><div class="btn-toolbar"></code> for more complex components.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">1</button> - <button class="btn">2</button> - <button class="btn">3</button> - <button class="btn">4</button> - </div> - <div class="btn-group"> - <button class="btn">5</button> - <button class="btn">6</button> - <button class="btn">7</button> - </div> - <div class="btn-group"> - <button class="btn">8</button> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - ... - </div> -</div> -</pre> - - <h3>Vertical button groups</h3> - <p>Make a set of buttons appear vertically stacked rather than horizontally.</p> - <div class="bs-docs-example"> - <div class="btn-group btn-group-vertical"> - <button type="button" class="btn"><i class="icon-align-left"></i></button> - <button type="button" class="btn"><i class="icon-align-center"></i></button> - <button type="button" class="btn"><i class="icon-align-right"></i></button> - <button type="button" class="btn"><i class="icon-align-justify"></i></button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group btn-group-vertical"> + <hr class="bs-docs-separator"> + + + <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> + + <h3>Tabs with dropdowns</h3> + <div class="bs-example"> + <ul class="nav nav-tabs"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Help</a></li> + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs"> + ... + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + ... + </ul> + </li> + ... +</ul> +{% endhighlight %} + + <h3>Pills with dropdowns</h3> + <div class="bs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Help</a></li> + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div><!-- /example --> +{% highlight html %} +<ul class="nav nav-pills"> + ... + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + ... + </ul> + </li> ... -</div> -</pre> +</ul> +{% endhighlight %} + </div> - <hr class="bs-docs-separator"> - <h4>Checkbox and radio flavors</h4> - <p>Button groups can also function as radios, where only one button may be active, or checkboxes, where any number of buttons may be active. View <a href="./javascript.html#buttons">the JavaScript docs</a> for that.</p> + <!-- Navbar + ================================================== --> + <div class="bs-docs-section" id="navbar"> + <div class="page-header"> + <h1>Navbar</h1> + </div> - <h4>Dropdowns in button groups</h4> - <p><span class="label label-info">Heads up!</span> Buttons with dropdowns must be individually wrapped in their own <code>.btn-group</code> within a <code>.btn-toolbar</code> for proper rendering.</p> - </section> + <h2 id="navbar-basic">Basic navbar</h2> + <p>To start, navbars are static (not fixed to the top) and include support for a project name and basic navigation. Place one anywhere within a <code>.container</code>, which sets the width of your site and content.</p> + <div class="bs-example"> + <div class="navbar"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> +</div> +{% endhighlight %} + + <h2>Navbar components</h2> + + <h3 id="navbar-brand">Brand</h3> + <p>A simple link to show your brand or project name only requires an anchor tag.</p> + <div class="bs-example"> + <div class="navbar"> + <a class="navbar-brand" href="#">Title</a> + </div> + </div><!-- /example --> +{% highlight html %} +<a class="navbar-brand" href="#">Title</a> +{% endhighlight %} + + <h3 id="navbar-nav">Nav links</h3> + <p>Nav items are simple to add via unordered lists.</p> + <div class="bs-example"> + <div class="navbar"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li class="disabled"><a href="#">Disabled</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li class="disabled"><a href="#">Disabled</a></li> +</ul> +{% endhighlight %} + + <h3 id="navbar-forms">Forms</h3> + <p>To properly style and position a form within the navbar, add the appropriate classes as shown below. For a default form, include <code>.navbar-form</code> and either <code>.pull-left</code> or <code>.pull-right</code> to properly align it.</p> + <div class="bs-example"> + + <div class="navbar"> + <form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <button type="submit" class="btn btn-default">Submit</button> + </form> + </div> + <div class="navbar"> + <form class="navbar-form pull-left"> + <select name="" id="" style="width: 200px;"> + <option value="1">1</option> + <option value="2">2</option> + <option value="3">3</option> + <option value="4">4</option> + </select> + <button type="submit" class="btn btn-default">Submit</button> + </form> + </div> - <!-- Split button dropdowns - ================================================== --> - <section id="buttonDropdowns"> - <div class="page-header"> - <h1>Button dropdown menus</h1> - </div> + <div class="navbar"> + <form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <input type="checkbox"> + <button type="submit" class="btn btn-default">Submit</button> + </form> + </div> + <div class="navbar"> + <form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <label class="checkbox-inline"> + <input type="checkbox"> Remember me + </label> + <button type="submit" class="btn btn-default">Submit</button> + </form> + </div> - <h2>Overview and examples</h2> - <p>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-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown">Danger <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown">Warning <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown">Success <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown">Info <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown">Inverse <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> - Action - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - <h3>Works with all button sizes</h3> - <p>Button dropdowns work at any size: <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code>.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown">Large button <span class="caret"></span></button> + </div><!-- /example --> +{% highlight html %} +<form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <button type="submit" class="btn btn-default">Submit</button> +</form> +{% endhighlight %} + + <h3 id="navbar-buttons">Buttons</h3> + <p>For buttons not residing in a <code><form></code>, add this class to vertically center buttons within a navbar.</p> + <div class="bs-example"> + <div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <button type="button" class="btn btn-default navbar-btn">Sign in</button> + </div> + </div> +{% highlight html %} +<button type="button" class="btn btn-default navbar-btn">Sign in</button> +{% endhighlight %} + + <h3 id="navbar-text">Text</h3> + <p>Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code><p></code> tag for proper leading and color.</p> + <div class="bs-example"> + <div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="navbar-text">Signed in as Mark Otto</p> + </div> + </div> +{% highlight html %} +<div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="navbar-text">Signed in as Mark Otto</p> +</div> +{% endhighlight %} + + <h3 id="navbar-links">Links</h3> + <p>For folks using standard links that are not within the regular navbar navigation component, use the <code>.navbar-link</code> class to add the proper colors for the default and inverse navbar options.</p> + <div class="bs-example"> + <div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="navbar-text pull-right">Signed in as <a href="#" class="navbar-link">Mark Otto</a></p> + </div> + </div> +{% highlight html %} +<div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="navbar-text pull-right">Signed in as <a href="#" class="navbar-link">Mark Otto</a></p> +</div> +{% endhighlight %} + + <h3 id="navbar-component-alignment">Component alignment</h3> + <p>Align nav links, forms, buttons, or text, using the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction. To align nav links, put them in a separate <code><ul></code> with the respective utility class applied.</p> + + + <h2>Optional display variations</h2> + <p>Fix the navbar to the top or bottom of the viewport with an additional class on the outermost div, <code>.navbar</code>. These will also remove rounded corners.</p> + + <h3 id="navbar-fixed-top">Fixed to top</h3> + <p>Add <code>.navbar-fixed-top</code>.</p> + <div class="bs-example bs-navbar-top-example"> + <div class="navbar navbar-fixed-top"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-fixed-top"> + ... +</div> +{% endhighlight %} + + <div class="bs-callout"> + <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 %} +body { padding-top: 70px; } +{% endhighlight %} + <p>Make sure to include this <strong>after</strong> the core Bootstrap CSS.</p> + </div> + + <h3 id="navbar-fixed-bottom">Fixed to bottom</h3> + <p>Add <code>.navbar-fixed-bottom</code> instead.</p> + <div class="bs-example bs-navbar-bottom-example"> + <div class="navbar navbar-fixed-bottom"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-fixed-bottom"> + ... +</div> +{% endhighlight %} + + <div class="bs-callout"> + <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 %} +body { padding-bottom: 70px; } +{% endhighlight %} + <p>Make sure to include this <strong>after</strong> the core Bootstrap CSS.</p> + </div> + + <h3 id="navbar-static-top">Static top navbar</h3> + <p>Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-*</code> classes, you do not need to change any padding on the <code>body</code>.</p> + <div class="bs-example bs-navbar-top-example"> + <div class="navbar navbar-static-top" style="margin: -1px -1px 0;"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-static-top"> + ... +</div> +{% endhighlight %} + + + <h2 id="navbar-responsive">Responsive navbar</h2> + <p>To implement a collapsing responsive navbar, wrap your navbar content in a containing div, <code>.nav-collapse.collapse</code>, and add the navbar toggle button, <code>.navbar-toggle</code>.</p> + <div class="bs-example"> + <div class="navbar"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Title</a> + <div class="nav-collapse collapse navbar-responsive-collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> <ul class="dropdown-menu"> <li><a href="#">Action</a></li> <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown">Small button <span class="caret"></span></button> + </li> + </ul> + <form class="navbar-form pull-left" action=""> + <input type="text" class="col-lg-8" placeholder="Search"> + </form> + <ul class="nav navbar-nav pull-right"> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> <ul class="dropdown-menu"> <li><a href="#">Action</a></li> <li><a href="#">Another action</a></li> <li><a href="#">Something else here</a></li> <li class="divider"></li> <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown">Mini button <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> - - <h3>Requires JavaScript</h3> - <p>Button dropdowns require the <a href="./javascript.html#dropdowns">Bootstrap dropdown plugin</a> to function.</p> - <p>In some cases—like mobile—dropdown menus will extend outside the viewport. You need to resolve the alignment manually or with custom JavaScript.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Split button dropdowns</h2> - <p>Building on the button group styles and markup, we can easily create a split button. Split buttons feature a standard action on the left and a dropdown toggle on the right with contextual links.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary">Action</button> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger">Danger</button> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning">Warning</button> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success">Success</button> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info">Info</button> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse">Inverse</button> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - <h3>Sizes</h3> - <p>Utilize the extra button classes <code>.btn-mini</code>, <code>.btn-small</code>, or <code>.btn-large</code> for sizing.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-large">Large action</button> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-small">Small action</button> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-mini">Mini action</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn btn-mini">Action</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - <h3>Dropup menus</h3> - <p>Dropdown menus can also be toggled from the bottom up by adding a single class to the immediate parent of <code>.dropdown-menu</code>. It will flip the direction of the <code>.caret</code> and reposition the menu itself to move from the bottom up instead of top down.</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group dropup"> - <button class="btn">Dropup</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn primary">Right dropup</button> - <button class="btn primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu pull-right"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group dropup"> - <button class="btn">Dropup</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- dropdown menu links --> - </ul> -</div> -</pre> - - </section> - - - - <!-- Nav, Tabs, & Pills - ================================================== --> - <section id="navs"> - <div class="page-header"> - <h1>Nav: tabs, pills, and lists</small></h1> - </div> - - <h2>Lightweight defaults <small>Same markup, different classes</small></h2> - <p>All nav components here—tabs, pills, and lists—<strong>share the same base markup and styles</strong> through the <code>.nav</code> class.</p> - - <h3>Basic tabs</h3> - <p>Take a regular <code><ul></code> of links and add <code>.nav-tabs</code>:</p> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="active"> - <a href="#">Home</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>Basic pills</h3> - <p>Take that same HTML, but use <code>.nav-pills</code> instead:</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="active"> - <a href="#">Home</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>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>. Links will remain clickable, however, unless you remove the <code>href</code> attribute. Alternatively, you could implement custom JavaScript to prevent those clicks.</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li><a href="#">Clickable link</a></li> - <li><a href="#">Clickable link</a></li> - <li class="disabled"><a href="#">Disabled link</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - ... - <li class="disabled"><a href="#">Home</a></li> - ... -</ul> -</pre> - - <h3>Component alignment</h3> - <p>To align nav links, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Stackable</h2> - <p>As tabs and pills are horizontal by default, just add a second class, <code>.nav-stacked</code>, to make them appear vertically stacked.</p> - - <h3>Stacked tabs</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs nav-stacked"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs nav-stacked"> - ... -</ul> -</pre> - - <h3>Stacked pills</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills nav-stacked"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Profile</a></li> - <li><a href="#">Messages</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills nav-stacked"> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Dropdowns</h2> - <p>Add dropdown menus with a little extra HTML and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.</p> - - <h3>Tabs with dropdowns</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Help</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - Dropdown - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- links --> - </ul> - </li> -</ul> -</pre> - - <h3>Pills with dropdowns</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Help</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - Dropdown - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- links --> - </ul> - </li> -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Nav lists</h2> - <p>A simple and easy way to build groups of nav links with optional headers. They're best used in sidebars like the Finder in OS X.</p> - - <h3>Example nav list</h3> - <p>Take a list of links and add <code>class="nav nav-list"</code>:</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 340px; padding: 8px 0;"> - <ul class="nav nav-list"> - <li class="nav-header">List header</li> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Library</a></li> - <li><a href="#">Applications</a></li> - <li class="nav-header">Another list header</li> - <li><a href="#">Profile</a></li> - <li><a href="#">Settings</a></li> - <li class="divider"></li> - <li><a href="#">Help</a></li> - </ul> - </div> <!-- /well --> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="nav-header">List header</li> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Library</a></li> - ... -</ul> -</pre> - <p> - <span class="label label-info">Note</span> - For nesting within a nav list, include <code>class="nav nav-list"</code> on any nested <code><ul></code>. - </p> - - <h3>Horizontal dividers</h3> - <p>Add a horizontal divider by creating an empty list item with the class <code>.divider</code>, like so:</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - ... - <li class="divider"></li> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Tabbable nav</h2> - <p>Bring your tabs to life with a simple plugin to toggle between content via tabs. Bootstrap integrates tabbable tabs in four styles: top (default), right, bottom, and left.</p> - - <h3>Tabbable example</h3> - <p>To make tabs tabbable, create a <code>.tab-pane</code> with unique ID for every tab and wrap them in <code>.tab-content</code>.</p> - <div class="bs-docs-example"> - <div class="tabbable" style="margin-bottom: 18px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li> - <li><a href="#tab2" data-toggle="tab">Section 2</a></li> - <li><a href="#tab3" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1"> - <p>I'm in Section 1.</p> - </div> - <div class="tab-pane" id="tab2"> - <p>Howdy, I'm in Section 2.</p> - </div> - <div class="tab-pane" id="tab3"> - <p>What up girl, this is Section 3.</p> - </div> - </div> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable"> <!-- Only required for left/right tabs --> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li> - <li><a href="#tab2" data-toggle="tab">Section 2</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="tab1"> - <p>I'm in Section 1.</p> - </div> - <div class="tab-pane" id="tab2"> - <p>Howdy, I'm in Section 2.</p> - </div> - </div> -</div> -</pre> - - <h4>Fade in tabs</h4> - <p>To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>.</p> - - <h4>Requires jQuery plugin</h4> - <p>All tabbable tabs are powered by our lightweight jQuery plugin. Read more about how to bring tabbable tabs to life <a href="./javascript.html#tabs">on the JavaScript docs page</a>.</p> - - <h3>Tabbable in any direction</h3> - - <h4>Tabs on the bottom</h4> - <p>Flip the order of the HTML and add a class to put tabs on the bottom.</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-below"> - <div class="tab-content"> - <div class="tab-pane active" id="A"> - <p>I'm in Section A.</p> - </div> - <div class="tab-pane" id="B"> - <p>Howdy, I'm in Section B.</p> - </div> - <div class="tab-pane" id="C"> - <p>What up girl, this is Section C.</p> - </div> - </div> - <ul class="nav nav-tabs"> - <li class="active"><a href="#A" data-toggle="tab">Section 1</a></li> - <li><a href="#B" data-toggle="tab">Section 2</a></li> - <li><a href="#C" data-toggle="tab">Section 3</a></li> - </ul> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable tabs-below"> - <div class="tab-content"> - ... - </div> - <ul class="nav nav-tabs"> - ... - </ul> -</div> -</pre> - - <h4>Tabs on the left</h4> - <p>Swap the class to put tabs on the left.</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#lA" data-toggle="tab">Section 1</a></li> - <li><a href="#lB" data-toggle="tab">Section 2</a></li> - <li><a href="#lC" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="lA"> - <p>I'm in Section A.</p> - </div> - <div class="tab-pane" id="lB"> - <p>Howdy, I'm in Section B.</p> - </div> - <div class="tab-pane" id="lC"> - <p>What up girl, this is Section C.</p> - </div> - </div> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - <h4>Tabs on the right</h4> - <p>Swap the class to put tabs on the right.</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#rA" data-toggle="tab">Section 1</a></li> - <li><a href="#rB" data-toggle="tab">Section 2</a></li> - <li><a href="#rC" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="rA"> - <p>I'm in Section A.</p> - </div> - <div class="tab-pane" id="rB"> - <p>Howdy, I'm in Section B.</p> - </div> - <div class="tab-pane" id="rC"> - <p>What up girl, this is Section C.</p> - </div> - </div> - </div> <!-- /tabbable --> - </div> -<pre class="prettyprint linenums"> -<div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - </section> - - - - <!-- Navbar - ================================================== --> - <section id="navbar"> - <div class="page-header"> - <h1>Navbar</h1> - </div> - - - <h2>Basic navbar</h2> - <p>To start, navbars are static (not fixed to the top) and include support for a project name and basic navigation. Place one anywhere within a <code>.container</code>, which sets the width of your site and content.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Navbar components</h2> - - <h3>Brand</h3> - <p>A simple link to show your brand or project name only requires an anchor tag.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">Title</a> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<a class="brand" href="#">Project name</a> -</pre> - - <h3>Nav links</h3> - <p>Nav items are simple to add via unordered lists.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="active"> - <a href="#">Home</a> - </li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> -</ul> -</pre> - <p>You can easily add dividers to your nav links with an empty list item and a simple class. Just add this between links:</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li class="divider-vertical"></li> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - </ul> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<ul class="nav"> - ... - <li class="divider-vertical"></li> - ... -</ul> -</pre> - - <h3>Forms</h3> - <p>To properly style and position a form within the navbar, add the appropriate classes as shown below. For a default form, include <code>.navbar-form</code> and either <code>.pull-left</code> or <code>.pull-right</code> to properly align it.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">Submit</button> - </form> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">Submit</button> -</form> -</pre> - - <h3>Search form</h3> - <p>For a more customized search form, add <code>.navbar-search</code> to the <code>form</code> and <code>.search-query</code> to the input for specialized styles in the navbar.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="Search"> - </form> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="Search"> -</form> -</pre> - - <h3>Component alignment</h3> - <p>Align nav links, search form, or text, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> - - <h3>Using dropdowns</h3> - <p>Add dropdowns and dropups to the nav with a bit of markup and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.</p> -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - Account - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - <p>Visit the <a href="./javascript.html#dropdowns">JavaScript dropdowns documentation</a> for more markup and information on calling dropdowns.</p> - - <h3>Text</h3> - <p>Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code><p></code> tag for proper leading and color.</p> - - - <hr class="bs-docs-separator"> - - - <h2>Optional display variations</h2> - <p>Fix the navbar to the top or bottom of the viewport with an additional class on the outermost div, <code>.navbar</code>.</p> - - <h3>Fixed to top</h3> - <p>Add <code>.navbar-fixed-top</code> and remember to account for the hidden area underneath it by adding at least 40px <code>padding</code> to the <code><body></code>. Be sure to add this after the core Bootstrap CSS and before the optional responsive CSS.</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-fixed-top" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-top"> - ... -</div> -</pre> - - <h3>Fixed to bottom</h3> - <p>Add <code>.navbar-fixed-bottom</code> instead.</p> - <div class="bs-docs-example bs-navbar-bottom-example"> - <div class="navbar navbar-fixed-bottom" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-bottom"> - ... -</div> -</pre> - - <h3>Static top navbar</h3> - <p>Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-top</code> class, you do not need to change any padding on the <code>body</code>.</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-static-top" style="margin: -1px -1px 0;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">Title</a> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-static-top"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Responsive navbar</h2> - <p>To implement a collapsing responsive navbar, wrap your navbar content in a containing div, <code>.nav-collapse.collapse</code>, and add the navbar toggle button, <code>.btn-navbar</code>.</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-responsive-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Title</a> - <div class="nav-collapse collapse navbar-responsive-collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div> -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - - <!-- .btn-navbar is used as the toggle for collapsed navbar content --> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - - <!-- Be sure to leave the brand out there if you want it shown --> - <a class="brand" href="#">Project name</a> - - <!-- Everything you want hidden at 940px or less, place within here --> - <div class="nav-collapse collapse"> - <!-- .nav, .navbar-search, .navbar-form, etc --> - </div> - - </div> - </div> -</div> -</pre> - <div class="alert alert-info"> - <strong>Heads up!</strong> The responsive navbar requires the <a href="./javascript.html#collapse">collapse plugin</a> and <a href="./scaffolding.html#responsive">responsive Bootstrap CSS file</a>. - </div> - - - <hr class="bs-docs-separator"> - - - <h2>Inverted variation</h2> - <p>Modify the look of the navbar by adding <code>.navbar-inverse</code>.</p> - <div class="bs-docs-example"> - <div class="navbar navbar-inverse" style="position: static;"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-inverse-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Title</a> - <div class="nav-collapse collapse navbar-inverse-collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">Link</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div> -<pre class="prettyprint linenums"> -<div class="navbar navbar-inverse"> - ... -</div> -</pre> - - </section> - - - - <!-- Breadcrumbs - ================================================== --> - <section id="breadcrumbs"> - <div class="page-header"> - <h1>Breadcrumbs <small></small></h1> - </div> - - <h2>Examples</h2> - <p>A single example shown as it might be displayed across multiple pages.</p> - <div class="bs-docs-example"> - <ul class="breadcrumb"> - <li class="active">Home</li> - </ul> - <ul class="breadcrumb"> - <li><a href="#">Home</a> <span class="divider">/</span></li> - <li class="active">Library</li> - </ul> - <ul class="breadcrumb" style="margin-bottom: 5px;"> - <li><a href="#">Home</a> <span class="divider">/</span></li> - <li><a href="#">Library</a> <span class="divider">/</span></li> - <li class="active">Data</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="breadcrumb"> - <li><a href="#">Home</a> <span class="divider">/</span></li> - <li><a href="#">Library</a> <span class="divider">/</span></li> - <li class="active">Data</li> -</ul> -</pre> - - </section> - - - - <!-- Pagination - ================================================== --> - <section id="pagination"> - <div class="page-header"> - <h1>Pagination <small>Two options for paging through content</small></h1> - </div> - - <h2>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> - <div class="bs-docs-example"> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li><a href="#">Prev</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">Next</a></li> - </ul> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Options</h2> - - <h3>Disabled and active states</h3> - <p>Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li class="disabled"><a href="#">«</a></li> - <li class="active"><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><a href="#">&laquo;</a></li> - <li class="active"><a href="#">1</a></li> - ... - </ul> -</div> -</pre> - <p>You can optionally swap out active or disabled anchors for spans to remove click functionality while retaining intended styles.</p> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><span>&laquo;</span></li> - <li class="active"><span>1</span></li> - ... - </ul> -</div> -</pre> - - <h3>Sizes</h3> - <p>Fancy larger or smaller pagination? Add <code>.pagination-large</code>, <code>.pagination-small</code>, or <code>.pagination-mini</code> for additional sizes.</p> - <div class="bs-docs-example"> - <div class="pagination pagination-large"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-small"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-mini"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-large"> - <ul> - ... - </ul> -</div> -<div class="pagination"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-small"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-mini"> - <ul> - ... - </ul> -</div> -</pre> - - <h3>Alignment</h3> - <p>Add one of two optional classes to change the alignment of pagination links: <code>.pagination-centered</code> and <code>.pagination-right</code>.</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-centered"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="pagination pagination-right"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-right"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Pager</h2> - <p>Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.</p> - - <h3>Default example</h3> - <p>By default, the pager centers links.</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li><a href="#">Previous</a></li> - <li><a href="#">Next</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li><a href="#">Previous</a></li> - <li><a href="#">Next</a></li> -</ul> -</pre> - - <h3>Aligned links</h3> - <p>Alternatively, you can align each link to the sides:</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous"><a href="#">← Older</a></li> - <li class="next"><a href="#">Newer →</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous"> - <a href="#">&larr; Older</a> - </li> - <li class="next"> - <a href="#">Newer &rarr;</a> - </li> -</ul> -</pre> - - <h3>Optional disabled state</h3> - <p>Pager links also use the general <code>.disabled</code> utility class from the pagination.</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous disabled"><a href="#">← Older</a></li> - <li class="next"><a href="#">Newer →</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous disabled"> - <a href="#">&larr; Older</a> - </li> - ... -</ul> -</pre> - - </section> - - - - <!-- Labels and badges - ================================================== --> - <section id="labels-badges"> - <div class="page-header"> - <h1>Labels and badges</h1> - </div> - <h3>Labels</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Labels</th> - <th>Markup</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <span class="label">Default</span> - </td> - <td> - <code><span class="label">Default</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-success">Success</span> - </td> - <td> - <code><span class="label label-success">Success</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-warning">Warning</span> - </td> - <td> - <code><span class="label label-warning">Warning</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-important">Important</span> - </td> - <td> - <code><span class="label label-important">Important</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-info">Info</span> - </td> - <td> - <code><span class="label label-info">Info</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-inverse">Inverse</span> - </td> - <td> - <code><span class="label label-inverse">Inverse</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>Badges</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Name</th> - <th>Example</th> - <th>Markup</th> - </tr> - </thead> - <tbody> - <tr> - <td> - Default - </td> - <td> - <span class="badge">1</span> - </td> - <td> - <code><span class="badge">1</span></code> - </td> - </tr> - <tr> - <td> - Success - </td> - <td> - <span class="badge badge-success">2</span> - </td> - <td> - <code><span class="badge badge-success">2</span></code> - </td> - </tr> - <tr> - <td> - Warning - </td> - <td> - <span class="badge badge-warning">4</span> - </td> - <td> - <code><span class="badge badge-warning">4</span></code> - </td> - </tr> - <tr> - <td> - Important - </td> - <td> - <span class="badge badge-important">6</span> - </td> - <td> - <code><span class="badge badge-important">6</span></code> - </td> - </tr> - <tr> - <td> - Info - </td> - <td> - <span class="badge badge-info">8</span> - </td> - <td> - <code><span class="badge badge-info">8</span></code> - </td> - </tr> - <tr> - <td> - Inverse - </td> - <td> - <span class="badge badge-inverse">10</span> - </td> - <td> - <code><span class="badge badge-inverse">10</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>Easily collapsible</h3> - <p>For easy implementation, labels and badges will simply collapse (via CSS's <code>:empty</code> selector) when no content exists within.</p> - - </section> - - - - <!-- Typographic components - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>Typographic components</h1> - </div> - - <h2>Hero unit</h2> - <p>A lightweight, flexible component to showcase key content on your site. It works well on marketing and content-heavy sites.</p> - <div class="bs-docs-example"> - <div class="hero-unit"> - <h1>Hello, world!</h1> - <p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p> - <p><a class="btn btn-primary btn-large">Learn more</a></p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="hero-unit"> - <h1>Heading</h1> - <p>Tagline</p> - <p> - <a class="btn btn-primary btn-large"> - Learn more - </a> - </p> -</div> -</pre> - - <h2>Page header</h2> - <p>A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code>, element as well most other components (with additional styles).</p> - <div class="bs-docs-example"> - <div class="page-header"> - <h1>Example page header <small>Subtext for header</small></h1> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="page-header"> - <h1>Example page header <small>Subtext for header</small></h1> -</div> -</pre> + </ul> + </li> + </ul> + </div><!-- /.nav-collapse --> + </div><!-- /.container --> + </div><!-- /.navbar --> + </div><!-- /example --> +{% highlight html %} +<div class="navbar"> + <div class="container"> - </section> + <!-- .navbar-toggle is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <!-- Be sure to leave the brand out there if you want it shown --> + <a class="navbar-brand" href="#">Title</a> + <!-- Place everything within .navbar-collapse to hide it until above 768px --> + <div class="nav-collapse collapse navbar-responsive-collapse"> + ... + </div><!-- /.nav-collapse --> + </div><!-- /.container --> +</div><!-- /.navbar --> +{% endhighlight %} + + <div class="bs-callout"> + <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> + </div> - <!-- Thumbnails - ================================================== --> - <section id="thumbnails"> - <div class="page-header"> - <h1>Thumbnails <small>Grids of images, videos, text, and more</small></h1> - </div> - <h2>Default thumbnails</h2> - <p>By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> + <h2>Inverted variation</h2> + <p>Modify the look of the navbar by adding <code>.navbar-inverse</code>.</p> + <div class="bs-example"> + <div class="navbar navbar-inverse"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-inverse-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Title</a> + <div class="nav-collapse collapse navbar-inverse-collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> </li> </ul> - </div> - - <h2>Highly customizable</h2> - <p>With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>Thumbnail label</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>Thumbnail label</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>Thumbnail label</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> - </div> - </div> + <form class="navbar-form pull-left" action=""> + <input type="text" class="col-lg-8" placeholder="Search"> + </form> + <ul class="nav navbar-nav pull-right"> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> </li> </ul> - </div> - - <h3>Why use thumbnails</h3> - <p>Thumbnails (previously <code>.media-grid</code> up until v1.4) are great for grids of photos or videos, image search results, retail products, portfolios, and much more. They can be links or static content.</p> - - <h3>Simple, flexible markup</h3> - <p>Thumbnail markup is simple—a <code>ul</code> with any number of <code>li</code> elements is all that is required. It's also super flexible, allowing for any type of content with just a bit more markup to wrap your contents.</p> - - <h3>Uses grid column sizes</h3> - <p>Lastly, the thumbnails component uses existing grid system classes—like <code>.span2</code> or <code>.span3</code>—for control of thumbnail dimensions.</p> - - <h2>Markup</h2> - <p>As mentioned previously, the required markup for thumbnails is light and straightforward. Here's a look at the default setup <strong>for linked images</strong>:</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - </a> - </li> - ... -</ul> -</pre> - <p>For custom HTML content in thumbnails, the markup changes slightly. To allow block level content anywhere, we swap the <code><a></code> for a <code><div></code> like so:</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <h3>Thumbnail label</h3> - <p>Thumbnail caption...</p> - </div> - </li> + </div><!-- /.nav-collapse --> + </div><!-- /.container --> + </div><!-- /.navbar --> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-inverse"> ... -</ul> -</pre> - - <h2>More examples</h2> - <p>Explore all your options with the various grid classes available to you. You can also mix and match different sizes.</p> - <ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/360x270" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - </ul> +</div> +{% endhighlight %} - </section> + </div> + <!-- Breadcrumbs + ================================================== --> + <div class="bs-docs-section" id="breadcrumbs"> + <div class="page-header"> + <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> + <div class="bs-example"> + <ul class="breadcrumb"> + <li class="active">Home</li> + </ul> + <ul class="breadcrumb"> + <li><a href="#">Home</a></li> + <li class="active">Library</li> + </ul> + <ul class="breadcrumb" style="margin-bottom: 5px;"> + <li><a href="#">Home</a></li> + <li><a href="#">Library</a></li> + <li class="active">Data</li> + </ul> + </div> +{% highlight html %} +<ul class="breadcrumb"> + <li><a href="#">Home</a></li> + <li><a href="#">Library</a></li> + <li class="active">Data</li> +</ul> +{% endhighlight %} + </div> - <!-- Alerts - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>Alerts <small>Styles for success, warning, and error messages</small></h1> - </div> - <h2>Default alert</h2> - <p>Wrap any text and an optional dismiss button in <code>.alert</code> for a basic warning alert message.</p> - <div class="bs-docs-example"> - <div class="alert"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Warning!</strong> Best check yo self, you're not looking too good. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <strong>Warning!</strong> Best check yo self, you're not looking too good. -</div> -</pre> - <h3>Dismiss buttons</h3> - <p>Mobile Safari and Mobile Opera browsers, in addition to the <code>data-dismiss="alert"</code> attribute, require an <code>href="#"</code> for the dismissal of alerts when using an <code><a></code> tag.</p> - <pre class="prettyprint linenums"><a href="#" class="close" data-dismiss="alert">&times;</a></pre> - <p>Alternatively, you may use a <code><button></code> element with the data attribute, which we have opted to do for our docs. When using <code><button></code>, you must include <code>type="button"</code> or your forms may not submit.</p> - <pre class="prettyprint linenums"><button type="button" class="close" data-dismiss="alert">&times;</button></pre> + <!-- Pagination + ================================================== --> + <div class="bs-docs-section" id="pagination"> + <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> + + <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> + <div class="bs-example"> + <ul class="pagination"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pagination"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> +</ul> +{% endhighlight %} + + <h3>Disabled and active states</h3> + <p>Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.</p> + <div class="bs-example"> + <ul class="pagination"> + <li class="disabled"><a href="#">«</a></li> + <li class="active"><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pagination"> + <li class="disabled"><a href="#">«</a></li> + <li class="active"><a href="#">1</a></li> + ... +</ul> +{% endhighlight %} + <p>You can optionally swap out active or disabled anchors for <code><span></code> to remove click functionality while retaining intended styles.</p> +{% highlight html %} +<ul class="pagination"> + <li class="disabled"><span>«</span></li> + <li class="active"><span>1</span></li> + ... +</ul> +{% endhighlight %} + + + <h3>Sizes</h3> + <p>Fancy larger or smaller pagination? Add <code>.pagination-large</code> or <code>.pagination-small</code> for additional sizes.</p> + <div class="bs-example"> + <div> + <ul class="pagination pagination-large"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + <div> + <ul class="pagination"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + <div> + <ul class="pagination pagination-small"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + </div> +{% highlight html %} +<ul class="pagination pagination-large">...</ul> +<ul class="pagination pagination">...</ul> +<ul class="pagination pagination-small">...</ul> +{% endhighlight %} + + + <h2 id="pagination-pager">Pager</h2> + <p>Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.</p> + + <h3>Default example</h3> + <p>By default, the pager centers links.</p> + <div class="bs-example"> + <ul class="pager"> + <li><a href="#">Previous</a></li> + <li><a href="#">Next</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pager"> + <li><a href="#">Previous</a></li> + <li><a href="#">Next</a></li> +</ul> +{% endhighlight %} + + <h3>Aligned links</h3> + <p>Alternatively, you can align each link to the sides:</p> + <div class="bs-example"> + <ul class="pager"> + <li class="previous"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pager"> + <li class="previous"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> +</ul> +{% endhighlight %} + + + <h3>Optional disabled state</h3> + <p>Pager links also use the general <code>.disabled</code> utility class from the pagination.</p> + <div class="bs-example"> + <ul class="pager"> + <li class="previous disabled"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pager"> + <li class="previous disabled"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> +</ul> +{% endhighlight %} + </div> - <h3>Dismiss alerts via JavaScript</h3> - <p>Use the <a href="./javascript.html#alerts">alerts jQuery plugin</a> for quick and easy dismissal of alerts.</p> - <hr class="bs-docs-separator"> + <!-- Labels + ================================================== --> + <div class="bs-docs-section" id="labels"> + <div class="page-header"> + <h1>Labels</h1> + </div> + <p class="lead"></p> + + <h3>Example</h3> + <div class="bs-example"> + <h1>Example heading <span class="label">New</span></h1> + <h2>Example heading <span class="label">New</span></h2> + <h3>Example heading <span class="label">New</span></h3> + <h4>Example heading <span class="label">New</span></h4> + <h5>Example heading <span class="label">New</span></h5> + <h6>Example heading <span class="label">New</span></h6> + </div> +{% highlight html %} +<h3>Example heading <span class="label">New</span></h3> +{% endhighlight %} + + <h3>Available variations</h3> + <p>Add any of the below mentioned modifier classes to change the appearance of a label.</p> + <div class="bs-example"> + <span class="label">Default</span> + <span class="label label-success">Success</span> + <span class="label label-warning">Warning</span> + <span class="label label-danger">Danger</span> + <span class="label label-info">Info</span> + </div> +{% highlight html %} +<span class="label">Default</span> +<span class="label label-success">Success</span> +<span class="label label-warning">Warning</span> +<span class="label label-danger">Danger</span> +<span class="label label-info">Info</span> +{% endhighlight %} + </div> - <h2>Options</h2> - <p>For longer messages, increase the padding on the top and bottom of the alert wrapper by adding <code>.alert-block</code>.</p> - <div class="bs-docs-example"> - <div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4>Warning!</h4> - <p>Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <h4>Warning!</h4> - Best check yo self, you're not... -</div> -</pre> - <hr class="bs-docs-separator"> + <!-- Badges + ================================================== --> + <div class="bs-docs-section" id="badges"> + <div class="page-header"> + <h1>Badges</h1> + </div> + <p class="lead">Easily highlight new or unread items by adding a <code><span class="badge"></code> to links, Bootstrap navs, and more.</p> + <div class="bs-example"> + <a href="#">Inbox <span class="badge">42</span></a> + </div> +{% highlight html %} +<a href="#">Inbox <span class="badge">42</span></a> +{% endhighlight %} - <h2>Contextual alternatives</h2> - <p>Add optional classes to change an alert's connotation.</p> + <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> - <h3>Error or danger</h3> - <div class="bs-docs-example"> - <div class="alert alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Oh snap!</strong> Change a few things up and try submitting again. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-error"> - ... -</div> -</pre> - - <h3>Success</h3> - <div class="bs-docs-example"> - <div class="alert alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Well done!</strong> You successfully read this important alert message. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-success"> - ... -</div> -</pre> - - <h3>Information</h3> - <div class="bs-docs-example"> - <div class="alert alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Heads up!</strong> This alert needs your attention, but it's not super important. - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-info"> + <div class="bs-callout"> + <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> + + <h4>Adapts to active nav states</h4> + <p>Built-in styles are included for placing badges in active states in pill and list navigations.</p> + <div class="bs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Home <span class="badge">42</span></a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages <span class="badge">3</span></a></li> + </ul> + <br> + <ul class="nav nav-pills nav-stacked" style="max-width: 260px;"> + <li class="active"> + <a href="#"> + <span class="badge pull-right">42</span> + Home + </a> + </li> + <li><a href="#">Profile</a></li> + <li> + <a href="#"> + <span class="badge pull-right">3</span> + Messages + </a> + </li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-pills nav-stacked"> + <li class="active"> + <a href="#"> + <span class="badge pull-right">42</span> + Home + </a> + </li> ... -</div> -</pre> +</ul> +{% endhighlight %} + </div> - </section> + <!-- Typographic components + ================================================== --> + <div class="bs-docs-section" id="type-components"> + <div class="page-header"> + <h1>Typographic components</h1> + </div> + <h2 id="type-components-jumbotron">Jumbotron</h2> + <p>A lightweight, flexible component to showcase key content on your site. It works well on marketing and content-heavy sites.</p> + <div class="bs-example"> + <div class="jumbotron"> + <h1>Hello, world!</h1> + <p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p> + <p><a class="btn btn-primary btn-large">Learn more</a></p> + </div> + </div> +{% highlight html %} +<div class="jumbotron"> + <h1>Hello, world!</h1> + <p>...</p> + <p><a class="btn btn-primary btn-large">Learn more</a></p> +</div> +{% endhighlight %} + + <h2 id="type-components-page-header">Page header</h2> + <p>A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code> element, as well as most other components (with additional styles).</p> + <div class="bs-example"> + <div class="page-header"> + <h1>Example page header <small>Subtext for header</small></h1> + </div> + </div> +{% highlight html %} +<div class="page-header"> + <h1>Example page header <small>Subtext for header</small></h1> +</div> +{% endhighlight %} + </div> - <!-- Progress bars - ================================================== --> - <section id="progress"> - <div class="page-header"> - <h1>Progress bars <small>For loading, redirecting, or action status</small></h1> - </div> - <h2>Examples and markup</h2> - <h3>Basic</h3> - <p>Default progress bar with a vertical gradient.</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar" style="width: 60%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar" style="width: 60%;"></div> -</div> -</pre> - - <h3>Striped</h3> - <p>Uses a gradient to create a striped effect. Not available in IE7-8.</p> - <div class="bs-docs-example"> - <div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> + <!-- Thumbnails + ================================================== --> + <div class="bs-docs-section" id="thumbnails"> + <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> + + <h3>Default thumbnails</h3> + <p>By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.</p> + <div class="bs-example"> + <div class="row"> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/100%x180" alt=""> + </a> + </div> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/100%x180" alt=""> + </a> + </div> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/100%x180" alt=""> + </a> + </div> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/100%x180" alt=""> + </a> + </div> + </div> + </div><!-- /.bs-example --> +{% highlight html %} +<div class="row"> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/100%x180" alt=""> + </a> + </div> + ... +</div> +{% endhighlight %} + + <h3>Custom content thumbnails</h3> + <p>With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.</p> + <div class="bs-example"> + <div class="row"> + <div class="col-lg-4"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn btn-default">Action</a></p> </div> </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> -</div> -</pre> - - <h3>Animated</h3> - <p>Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.</p> - <div class="bs-docs-example"> - <div class="progress progress-striped active"> - <div class="bar" style="width: 45%"></div> + </div> + <div class="col-lg-4"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn btn-default">Action</a></p> </div> </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped active"> - <div class="bar" style="width: 40%;"></div> -</div> -</pre> - - <h3>Stacked</h3> - <p>Place multiple bars into the same <code>.progress</code> to stack them.</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar bar-success" style="width: 35%"></div> - <div class="bar bar-warning" style="width: 20%"></div> - <div class="bar bar-danger" style="width: 10%"></div> + </div> + <div class="col-lg-4"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn btn-default">Action</a></p> </div> </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar bar-success" style="width: 35%;"></div> - <div class="bar bar-warning" style="width: 20%;"></div> - <div class="bar bar-danger" style="width: 10%;"></div> -</div> -</pre> - + </div> + </div> + </div><!-- /.bs-example --> +{% highlight html %} +<div class="row"> + <div class="col-lg-3"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>...</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn btn-default">Action</a></p> + </div> + </div> + </div> +</div> +{% endhighlight %} + </div> - <hr class="bs-docs-separator"> - <h2>Options</h2> - <h3>Additional colors</h3> - <p>Progress bars use some of the same button and alert classes for consistent styles.</p> - <div class="bs-docs-example"> - <div class="progress progress-info" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - <h3>Striped bars</h3> - <p>Similar to the solid colors, we have varied striped progress bars.</p> - <div class="bs-docs-example"> - <div class="progress progress-info progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info progress-striped"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success progress-striped"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning progress-striped"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> + <!-- Alerts + ================================================== --> + <div class="bs-docs-section" id="alerts"> + <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> + + <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> + <div class="bs-example"> + <div class="alert"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Warning!</strong> Best check yo self, you're not looking too good. + </div> + </div> +{% highlight html %} +<div class="alert"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Warning!</strong> Best check yo self, you're not looking too good. +</div> +{% endhighlight %} + + <h3 id="alerts-block">Block alerts</h3> + <p>For longer messages, increase the padding on the top and bottom of the alert wrapper by adding <code>.alert-block</code>.</p> + <div class="bs-example"> + <div class="alert alert-block"> + <button type="button" class="close" data-dismiss="alert">×</button> + <h4>Warning!</h4> + <p>Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> + </div> + </div> +{% highlight html %} +<div class="alert alert-block"> + <button type="button" class="close" data-dismiss="alert">×</button> + <h4>Warning!</h4> + <p>...</p> +</div> +{% endhighlight %} + + <h3 id="alerts-alternatives">Contextual alternatives</h3> + <p>Add optional classes to change an alert's connotation.</p> + <div class="bs-example"> + <div class="alert alert-danger"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Oh snap!</strong> Change a few things up and try submitting again. + </div> + <div class="alert alert-success"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Well done!</strong> You successfully read this important alert message. + </div> + <div class="alert alert-info"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Heads up!</strong> This alert needs your attention, but it's not super important. + </div> + </div> +{% highlight html %} +<div class="alert alert-danger">...</div> +<div class="alert alert-success">...</div> +<div class="alert alert-info">...</div> +{% endhighlight %} + + <h3 id="alerts-links">Links in alerts</h3> + <p>Use the <code>.alert-link</code> utility class to quickly provide matching colored links within any alert.</p> + <div class="bs-example"> + <div class="alert alert-danger"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Oh snap!</strong> <a href="#" class="alert-link">Change a few things up</a> and try submitting again. + </div> + <div class="alert alert-success"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Well done!</strong> You successfully read <a href="#" class="alert-link">this important alert message</a>. + </div> + <div class="alert alert-info"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Heads up!</strong> This <a href="#" class="alert-link">alert needs your attention</a>, but it's not super important. + </div> + </div> +{% highlight html %} +<div class="alert alert-danger"> + <a href="#" class="alert-link">...</a> +</div> +<div class="alert alert-success"> + <a href="#" class="alert-link">...</a> +</div> +<div class="alert alert-info"> + <a href="#" class="alert-link">...</a> +</div> +{% endhighlight %} + </div> - <hr class="bs-docs-separator"> - <h2>Browser support</h2> - <p>Progress bars use CSS3 gradients, transitions, and animations to achieve all their effects. These features are not supported in IE7-9 or older versions of Firefox.</p> - <p>Versions earlier than Internet Explorer 10 and Opera 12 do not support animations.</p> + <!-- Progress bars + ================================================== --> + <div class="bs-docs-section" id="progress"> + <div class="page-header"> + <h1>Progress bars</h1> + </div> + <p class="lead">Provide up-to-date feedback on the progress of a workflow or action with simple yet flexible progress bars.</p> - </section> + <div class="bs-callout"> + <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> + <h3 id="progress-basic">Basic</h3> + <p>Default progress bar with a vertical gradient.</p> + <div class="bs-example"> + <div class="progress"> + <div class="progress-bar" style="width: 60%;"></div> + </div> + </div> +{% highlight html %} +<div class="progress"> + <div class="progress-bar" style="width: 60%;"></div> +</div> +{% endhighlight %} + + <h3 id="progress-alternatives">Contextual alternatives</h3> + <p>Progress bars use some of the same button and alert classes for consistent styles.</p> + <div class="bs-example"> + <div class="progress" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> + </div> + <div class="progress" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> + </div> + <div class="progress" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> + </div> + <div class="progress"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> + </div> + </div> +{% highlight html %} +<div class="progress"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> +</div> +<div class="progress"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> +</div> +<div class="progress"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> +</div> +<div class="progress"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> +</div> +{% endhighlight %} + + <h3 id="progress-striped">Striped</h3> + <p>Uses a gradient to create a striped effect. Not available in IE8.</p> + <div class="bs-example"> + <div class="progress progress-striped" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> + </div> + <div class="progress progress-striped" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> + </div> + <div class="progress progress-striped" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> + </div> + <div class="progress progress-striped"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> + </div> + </div> +{% highlight html %} +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> +</div> +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> +</div> +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> +</div> +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> +</div> +{% endhighlight %} + + <h3 id="progress-animated">Animated</h3> + <p>Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.</p> + <div class="bs-example"> + <div class="progress progress-striped active"> + <div class="progress-bar" style="width: 45%"></div> + </div> + </div> +{% highlight html %} +<div class="progress progress-striped active"> + <div class="progress-bar" style="width: 45%"></div> +</div> +{% endhighlight %} + + <h3 id="progress-stacked">Stacked</h3> + <p>Place multiple bars into the same <code>.progress</code> to stack them.</p> + <div class="bs-example"> + <div class="progress"> + <div class="progress-bar progress-bar-success" style="width: 35%"></div> + <div class="progress-bar progress-bar-warning" style="width: 20%"></div> + <div class="progress-bar progress-bar-danger" style="width: 10%"></div> + </div> + </div> +{% highlight html %} +<div class="progress"> + <div class="progress-bar progress-bar-success" style="width: 35%"></div> + <div class="progress-bar progress-bar-warning" style="width: 20%"></div> + <div class="progress-bar progress-bar-danger" style="width: 10%"></div> +</div> +{% endhighlight %} + </div> - <!-- Media object - ================================================== --> - <section id="media"> - <div class="page-header"> - <h1>Media object</h1> - </div> - <p class="lead">Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.</p> - <h2>Default example</h2> - <p>The default media allow to float a media object (images, video, audio) to the left or right of a content block.</p> - <div class="bs-docs-example"> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> + <!-- Media object + ================================================== --> + <div class="bs-docs-section" id="media"> + <div class="page-header"> + <h1>Media object</h1> + </div> + <p class="lead">Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.</p> + + <h3>Default example</h3> + <p>The default media allow to float a media object (images, video, audio) to the left or right of a content block.</p> + <div class="bs-example"> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + </div> + </div> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. </div> + </div> + </div> + </div> + </div><!-- /.bs-example --> +{% highlight html %} +<div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" src="..."> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + ... + </div> +</div> +{% endhighlight %} + + <h3>Media list</h3> + <p>With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).</p> + <div class="bs-example"> + <ul class="media-list"> + <li class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p> + <!-- Nested media object --> <div class="media"> <a class="pull-left" href="#"> <img class="media-object" data-src="holder.js/64x64"> </a> <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + <h4 class="media-heading">Nested media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + <!-- Nested media object --> <div class="media"> <a class="pull-left" href="#"> <img class="media-object" data-src="holder.js/64x64"> </a> <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + <h4 class="media-heading">Nested media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. </div> </div> </div> </div> + <!-- Nested media object --> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Nested media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + </div> + </div> </div> -<pre class="prettyprint linenums"> -<div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Media list</h2> - <p>With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).</p> - <div class="bs-docs-example"> - <ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Nested media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Nested media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </div> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Nested media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </li> - <li class="media"> - <a class="pull-right" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">Media heading</h4> + </li> + <li class="media"> + <a class="pull-right" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + </div> + </li> + </ul> + </div> +{% highlight html %} +<ul class="media-list"> + <li class="media"> + <a class="pull-left" href="#"> + <img class="media-object" src="..."> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> - </li> -</ul> -</pre> - -</section> + </div> + </li> +</ul> +{% endhighlight %} + </div> - <!-- Miscellaneous - ================================================== --> - <section id="misc"> - <div class="page-header"> - <h1>Miscellaneous <small>Lightweight utility components</small></h1> - </div> + <!-- List group + ================================================== --> + <div class="bs-docs-section" id="list-group"> + <div class="page-header"> + <h1>List group</h1> + </div> + <p class="lead">List groups are a flexible and powerful component for displaying not only simple lists of elements, but complex ones with custom content.</p> + + <h3 id="list-group-basic">Basic list group</h3> + <p>The most basic list group is simply an unordered list with list items, and the proper classes. Build upon it with the options that follow, or your own CSS as needed.</p> + <div class="bs-example"> + <ul class="list-group"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> + </ul> + </div> +{% highlight html %} +<ul class="list-group"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <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> + <p>Add the badges component to any list group item and it will automatically be positioned on the right.</p> + <div class="bs-example"> + <ul class="list-group"> + <li class="list-group-item"> + <span class="badge">14</span> + Cras justo odio + </li> + <li class="list-group-item"> + <span class="badge">2</span> + Dapibus ac facilisis in + </li> + <li class="list-group-item"> + <span class="badge">1</span> + Morbi leo risus + </li> + </ul> + </div> +{% highlight html %} +<ul class="list-group"> + <li class="list-group-item"> + <span class="badge">14</span> + 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> + <p>Linkify list group items by using anchor tags instead of list items (that also means a parent <code><div></code> instead of an <code><ul></code>). No need for individual parents around each element.</p> + <div class="bs-example"> + <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> +{% highlight html %} +<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 %} + + <h3 id="list-group-custom-content">Custom content</h3> + <p>Add nearly any HTML within, even for linked list groups like the one below.</p> + <div class="bs-example"> + <div class="list-group"> + <a href="#" class="list-group-item active"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + </a> + <a href="#" class="list-group-item"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + </a> + <a href="#" class="list-group-item"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + </a> + </div> + </div> +{% highlight html %} +<div class="list-group"> + <a href="#" class="list-group-item active"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">...</p> + </a> +</div> +{% endhighlight %} + </div> - <h2>Wells</h2> - <p>Use the well as a simple effect on an element to give it an inset effect.</p> - <div class="bs-docs-example"> - <div class="well"> - Look, I'm in a well! - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well"> - ... -</div> -</pre> - <h3>Optional classes</h3> - <p>Control padding and rounded corners with two optional modifier classes.</p> - <div class="bs-docs-example"> - <div class="well well-large"> - Look, I'm in a well! - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-large"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="well well-small"> - Look, I'm in a well! - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-small"> - ... -</div> -</pre> - <h2>Close icon</h2> - <p>Use the generic close icon for dismissing content like modals and alerts.</p> - <div class="bs-docs-example"> - <p><button class="close" style="float: none;">×</button></p> - </div> - <pre class="prettyprint linenums"><button class="close">&times;</button></pre> - <p>iOS devices require an <code>href="#"</code> for click events if you would rather use an anchor.</p> - <pre class="prettyprint linenums"><a class="close" href="#">&times;</a></pre> - - <h2>Helper classes</h2> - <p>Simple, focused classes for small display or behavior tweaks.</p> - - <h4>.pull-left</h4> - <p>Float an element left</p> -<pre class="prettyprint linenums"> -class="pull-left" -</pre> -<pre class="prettyprint linenums"> -.pull-left { - float: left; -} -</pre> - - <h4>.pull-right</h4> - <p>Float an element right</p> -<pre class="prettyprint linenums"> -class="pull-right" -</pre> -<pre class="prettyprint linenums"> -.pull-right { - float: right; -} -</pre> - - <h4>.muted</h4> - <p>Change an element's color to <code>#999</code></p> -<pre class="prettyprint linenums"> -class="muted" -</pre> -<pre class="prettyprint linenums"> -.muted { - color: #999; -} -</pre> - - <h4>.clearfix</h4> - <p>Clear the <code>float</code> on any element</p> -<pre class="prettyprint linenums"> -class="clearfix" -</pre> -<pre class="prettyprint linenums"> -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - } - &:after { - clear: both; - } -} -</pre> - - </section> + <!-- Panels + ================================================== --> + <div class="bs-docs-section" id="panels"> + <div class="page-header"> + <h1>Panels</h1> + </div> + <p class="lead">While not always necessary, sometimes you need to put your DOM in a box. For those situations, try the panel component.</p> + <h3 id="panels-basic">Basic panel</h3> + <p>By default, all the <code>.panel</code> does is apply some basic border and padding to contain some content.</p> + <div class="bs-example"> + <div class="panel"> + Basic panel example </div> </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> +{% highlight html %} +<div class="panel"> + Basic panel example +</div> +{% endhighlight %} + + <h3 id="panels-heading">Panel with heading</h3> + <p>Easily add a heading to your panel with <code>.panel-heading</code>. Use it on a <code><div></code> or any heading element (e.g., <code><h3></code>).</p> + <div class="bs-example"> + <div class="panel"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + </div> +{% highlight html %} +<div class="panel"> + <div class="panel-heading">Panel heading</div> + Panel content +</div> +{% endhighlight %} + + <h3 id="panels-footer">Panel with footer</h3> + <p>Wrap buttons or secondary text in <code>.panel-footer</code>.</p> + <div class="bs-example"> + <div class="panel"> + Panel content + <div class="panel-footer">Panel footer</div> + </div> + </div> +{% highlight html %} +<div class="panel"> + Panel content + <div class="panel-footer">Panel footer</div> +</div> +{% endhighlight %} + + <h3 id="panels-alternatives">Contextual alternatives</h3> + <p>Like other components, easily make a panel more meaningful to a particular context by adding any of the contextual state classes.</p> + <div class="bs-example"> + <div class="panel panel-primary"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-success"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-warning"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-danger"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-info"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + </div> +{% highlight html %} +<div class="panel panel-primary">...</div> +<div class="panel panel-success">...</div> +<div class="panel panel-warning">...</div> +<div class="panel panel-danger">...</div> +<div class="panel panel-info">...</div> +{% 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> + <div class="bs-example"> + <div class="panel"> + <!-- Default panel contents --> + <div class="panel-heading">Panel heading</div> + <p>Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + + <!-- List group --> + <ul class="list-group list-group-flush"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> </ul> </div> - </footer> + </div> +{% highlight html %} +<div class="panel"> + <!-- Default panel contents --> + <div class="panel-heading">Panel heading</div> + <p>...</p> + + <!-- List group --> + <ul class="list-group list-group-flush"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> + </ul> +</div> +{% endhighlight %} + </div> - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - <script src="assets/js/application.js"></script> + <!-- Wells + ================================================== --> + <div class="bs-docs-section" id="wells"> + <div class="page-header"> + <h1>Wells</h1> + </div> + <h3>Default well</h3> + <p>Use the well as a simple effect on an element to give it an inset effect.</p> + <div class="bs-example"> + <div class="well"> + Look, I'm in a well! + </div> + </div> +{% highlight html %} +<div class="well">...</div> +{% endhighlight %} + <h3>Optional classes</h3> + <p>Control padding and rounded corners with two optional modifier classes.</p> + <div class="bs-example"> + <div class="well well-large"> + Look, I'm in a well! + </div> + </div> +{% highlight html %} +<div class="well well-large">...</div> +{% endhighlight %} - </body> -</html> + <div class="bs-example"> + <div class="well well-small"> + Look, I'm in a well! + </div> + </div> +{% highlight html %} +<div class="well well-small">...</div> +{% endhighlight %} + </div> diff --git a/docs/css.html b/docs/css.html new file mode 100644 index 0000000000000000000000000000000000000000..d4e7f77d2f79c57fffb33d2a9f24bb4b7b117f33 --- /dev/null +++ b/docs/css.html @@ -0,0 +1,2155 @@ +--- +layout: default +title: CSS +slug: css +lead: "Fundamental HTML elements styled and enhanced with extensible classes." +--- + + + <!-- Global Bootstrap settings + ================================================== --> + <div class="bs-docs-section" id="overview"> + <div class="page-header"> + <h1>Overview</h1> + </div> + <p class="lead">Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.</p> + + <h3 id="overview-doctype">HTML5 doctype required</h3> + <p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p> +{% highlight html %} +<!DOCTYPE html> +<html lang="en"> + ... +</html> +{% endhighlight %} + + <h3 id="overview-mobile">Mobile first</h3> + <p>With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, <strong>Bootstrap is mobile first</strong>. Mobile first styles can be found throughout the entire library instead of in separate files.</p> + <p>To ensure proper rendering and touch zooming, <strong>add the viewport meta tag</strong> to your <code><head></code>.</p> +{% highlight html %} +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +{% endhighlight %} + + <h3 id="overview-responsive-images">Responsive images</h3> + <p>We automatically attempt to scale images to appropriate sizes with a global <code>max-width: 100%;</code> on all <code><img></code> elements. If you run into problems (e.g., with Google Maps), be sure to disable this property on a per-case basis.</p> + + <h3 id="overview-type-links">Typography and links</h3> + <p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p> + <ul> + <li>Remove <code>margin</code> on the body</li> + <li>Set <code>background-color: white;</code> on the <code>body</code></li> + <li>Use the <code>@font-family-base</code>, <code>@font-size-base</code>, and <code>@line-height-base</code> attributes as our typographic base</li> + <li>Set the global link color via <code>@link-color</code> and apply link underlines only on <code>:hover</code></li> + </ul> + <p>These styles can be found within <strong>scaffolding.less</strong>.</p> + + <h3 id="overview-reset">Normalize reset</h3> + <p>For improved cross-browser rendering, we use <a href="http://necolas.github.com/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p> + + <h3 id="overview-container">Centering with container</h3> + <p>Easily center a page's contents by wrapping its contents in a container. Containers set <code>max-width</code> at various media query breakpoints to match our grid system.</p> +{% highlight html %} +<div class="container"> + ... +</div> +{% endhighlight %} + </div> + + + + <!-- Grid system + ================================================== --> + <div class="bs-docs-section" id="grid"> + <div class="page-header"> + <h1>Grid system</h1> + </div> + <p class="lead">Bootstrap includes a responsive, mobile-first fluid grid system that appropriately scales up to 12 columns as the device or viewport size increases. It includes <a href="#grid-example-basic">predefined classes</a> for easy layout options, as well as powerful <a href="#grid-less">mixins for generating more semantic layouts</a>.</p> + + <h3 id="grid-options">Grid options</h3> + <p>See how aspects of the Bootstrap grid system work across multiple devices with a handy table.</p> + <table class="table table-bordered table-striped bs-table"> + <thead> + <tr> + <th></th> + <th> + Tiny grid + <small>Phones (<480px)</small> + </th> + <th> + Small grid + <small>Tablets (<768px)</small> + </th> + <th> + Medium-large grid + <small>Destkops (>768px)</small> + </th> + </tr> + </thead> + <tbody> + <tr> + <th>Grid behavior</th> + <td>Horizontal at all times</td> + <td colspan="2">Collapsed to start, horizontal above breakpoints</td> + </tr> + <tr> + <th>Class prefix</th> + <td><code>.col-</code></td> + <td><code>.col-sm-</code></td> + <td><code>.col-lg-</code></td> + </tr> + <tr> + <th># of columns</th> + <td colspan="3">12</td> + </tr> + <tr> + <th>Nestable</th> + <td colspan="3">Yes</td> + </tr> + <tr> + <th>Offsets</th> + <td class="text-muted">N/A</td> + <td colspan="2">Yes</td> + </tr> + <tr> + <th>Column ordering</th> + <td class="text-muted">N/A</td> + <td colspan="2">Yes</td> + </tr> + </tbody> + </table> + + <h3 id="grid-example-basic">Example: Stacked-to-horizontal</h3> + <p>Using a single set of grid classes, you can create a basic grid system that starts out stacked on mobile and tablet devices before becoming horizontal on desktop devices.</p> + <div class="bs-docs-grid"> + <div class="row show-grid"> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + </div> + <div class="row show-grid"> + <div class="col-lg-8">8</div> + <div class="col-lg-4">4</div> + </div> + <div class="row show-grid"> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> + </div> + <div class="row show-grid"> + <div class="col-lg-6">6</div> + <div class="col-lg-6">6</div> + </div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> +</div> +<div class="row show-grid"> + <div class="col-lg-8">8</div> + <div class="col-lg-4">4</div> +</div> +<div class="row"> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> +</div> +<div class="row"> + <div class="col-lg-6">6</div> + <div class="col-lg-6">6</div> +</div> +{% endhighlight %} + + <h3 id="grid-example-mixed">Example: Combining mobile with desktop</h3> + <p>Don't want your columns to simply stack in smaller devices? Use the small device grid system by adding <code>.col-*</code> classes to the existing <code>.col-lg-*</code> ones. See the example below for a better idea of how it all works.</p> + <div class="bs-docs-grid"> + <div class="row show-grid"> + <div class="col-12 col-lg-8">8</div> + <div class="col-6 col-lg-4">4</div> + </div> + <div class="row show-grid"> + <div class="col-6 col-lg-4">4</div> + <div class="col-6 col-lg-4">4</div> + <div class="col-6 col-lg-4">4</div> + </div> + <div class="row show-grid"> + <div class="col-6 col-lg-6">6</div> + <div class="col-6 col-lg-6">6</div> + </div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-12 col-lg-8">8</div> + <div class="col-6 col-lg-4">4</div> +</div> +<div class="row"> + <div class="col-6 col-lg-4">4</div> + <div class="col-6 col-lg-4">4</div> + <div class="col-6 col-lg-4">4</div> +</div> +<div class="row"> + <div class="col-6 col-lg-6">6</div> + <div class="col-6 col-lg-6">6</div> +</div> +{% endhighlight %} + + <h3 id="grid-example-mixed-complete">Example: Mobile, tablet, and desktop</h3> + <p>Build on the previous example by creating even more dynamic and powerful layouts with tablet <code>.col-sm-*</code> classes.</p> + <div class="bs-docs-grid"> + <div class="row show-grid"> + <div class="col-12 col-sm-8 col-lg-8">.col-12 .col-lg-8</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + </div> + <div class="row show-grid"> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + </div> + <div class="row show-grid"> + <div class="col-6 col-sm-6 col-lg-6">.col-6 .col-lg-6</div> + <div class="col-6 col-sm-6 col-lg-6">.col-6 .col-lg-6</div> + </div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-12 col-sm-8 col-lg-8">.col-12 .col-lg-8</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> +</div> +<div class="row"> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> +</div> +<div class="row"> + <div class="col-6 col-sm-6 col-lg-6">.col-6 .col-lg-6</div> + <div class="col-6 col-sm-6 col-lg-6">.col-6 .col-lg-6</div> +</div> +{% endhighlight %} + + <div class="bs-callout"> + <h4>Need more examples?</h4> + <p>We dive into more grid layouts in a separte 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> + </div> + + <h3 id="grid-offsetting">Offsetting columns</h3> + <p>Move columns to the right using <code>.col-offset-*</code> classes. These classes increase the left margin of a column by <code>*</code> columns. For example, <code>.col-offset-4</code> moves <code>.col-lg-4</code> over four columns.</p> + <div class="bs-docs-grid"> + <div class="row show-grid"> + <div class="col-lg-4">4</div> + <div class="col-lg-4 col-offset-4">4 offset 4</div> + </div><!-- /row --> + <div class="row show-grid"> + <div class="col-lg-3 col-offset-3">3 offset 3</div> + <div class="col-lg-3 col-offset-3">3 offset 3</div> + </div><!-- /row --> + <div class="row show-grid"> + <div class="col-lg-6 col-offset-3">6 offset 3</div> + </div><!-- /row --> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-4">...</div> + <div class="col-lg-4 col-offset-4">...</div> +</div> +<div class="row"> + <div class="col-lg-3 col-offset-3">3 offset 3</div> + <div class="col-lg-3 col-offset-3">3 offset 3</div> +</div> +<div class="row"> + <div class="col-lg-6 col-offset-3">...</div> +</div> +{% endhighlight %} + + + <h3 id="grid-nesting">Nesting columns</h3> + <p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.col-lg-*</code> columns within an existing <code>.col-lg-*</code> column. Nested rows should include a set of columns that add up to 12.</p> + <div class="row show-grid"> + <div class="col-lg-9"> + Level 1: 9 columns + <div class="row show-grid"> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + </div> + </div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-9"> + Level 1: 9 columns + <div class="row"> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + </div> + </div> +</div> +{% endhighlight %} + + <h3 id="grid-column-ordering">Column ordering</h3> + <p>Easily change the order of our built-in grid columns with <code>.col-push-*</code> and <code>.col-pull-*</code> modifier classes.</p> + <div class="row show-grid"> + <div class="col-lg-9 col-push-3">9</div> + <div class="col-lg-3 col-pull-9">3</div> + </div> + +{% highlight html %} +<div class="row show-grid"> + <div class="col-lg-9 col-push-3">9</div> + <div class="col-lg-3 col-pull-9">3</div> +</div> +{% 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> + + <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> +{% highlight css %} +@grid-columns: 12; +@grid-gutter-width: 30px; +@grid-float-breakpoint: 768px; +{% endhighlight %} + + <h4>Mixins</h4> + <p>Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.</p> +{% highlight css %} +// Creates a wrapper for a series of columns +.make-row() { + // Negative margin the row out to align the content of columns + margin-left: (@grid-gutter-width / -2); + margin-right: (@grid-gutter-width / -2); + // Then clear the floated columns + .clearfix(); +} + +// Generate the columns +.make-column(@columns) { + @media (min-width: @grid-float-breakpoint) { + float: left; + // Calculate width based on number of columns available + width: percentage(@columns / @grid-columns); + } + // Prevent columns from collapsing when empty + min-height: 1px; + // Set inner padding as gutters instead of margin + padding-left: (@grid-gutter-width / 2); + padding-right: (@grid-gutter-width / 2); +} + +// Generate the column offsets +.make-column-offset(@columns) { + @media (min-width: @grid-float-breakpoint) { + margin-left: percentage((@columns / @grid-columns)); + } +} +{% endhighlight %} + + <h4>Example usage</h4> + <p>You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.</p> +{% highlight css %} +.wrapper { + .make-row(); +} +.content-main { + .make-column(8); +} +.content-secondary { + .make-column(3); + .make-column-offset(1); +} +{% endhighlight %} +{% highlight html %} +<div class="wrapper"> + <div class="content-main">...</div> + <div class="content-secondary">...</div> +</div> +{% endhighlight %} + + </div> + + + + + <!-- Typography + ================================================== --> + <div class="bs-docs-section" id="type"> + <div class="page-header"> + <h1>Typography</h1> + </div> + + <!-- Headings --> + <h2 id="type-headings">Headings</h2> + <p>All HTML headings, <code><h1></code> through <code><h6></code> are available.</p> + + <div class="bs-example bs-example-type"> + <table class="table"> + <tbody> + <tr> + <th><h1>Bootstrap heading</h1></th> + <td>Semibold 38px</td> + </tr> + <tr> + <th><h2>Bootstrap heading</h2></th> + <td>Semibold 32px</td> + </tr> + <tr> + <th><h3>Bootstrap heading</h3></th> + <td>Semibold 24px</td> + </tr> + <tr> + <th><h4>Bootstrap heading</h4></th> + <td>Semibold 18px</td> + </tr> + <tr> + <th><h5>Bootstrap heading</h5></th> + <td>Semibold 16px</td> + </tr> + <tr> + <th><h6>Bootstrap heading</h6></th> + <td>Semibold 12px</td> + </tr> + </tbody> + </table> + </div> +{% highlight html %} +<h1>...</h1> +<h2>...</h2> +<h3>...</h3> +<h4>...</h4> +<h5>...</h5> +<h6>...</h6> +{% endhighlight %} + + <!-- Body copy --> + <h2 id="type-body-copy">Body copy</h2> + <p>Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>1.428</strong>. This is applied to the <code><body></code> and all paragraphs. In addition, <code><p></code> (paragraphs) receive a bottom margin of half their computed line-height (10px by default).</p> + <div class="bs-example"> + <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p> + <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p> + </div> +{% highlight html %} +<p>...</p> +{% endhighlight %} + + <!-- Body copy .lead --> + <h3>Lead body copy</h3> + <p>Make a paragraph stand out by adding <code>.lead</code>.</p> + <div class="bs-example"> + <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p> + </div> +{% highlight html %} +<p class="lead">...</p> +{% endhighlight %} + + <!-- Using LESS --> + <h3>Built with Less</h3> + <p>The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@font-size-base</code> and <code>@line-height-base</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.</p> + + + <!-- Emphasis --> + <h2 id="type-emphasis">Emphasis</h2> + <p>Make use of HTML's default emphasis tags with lightweight styles.</p> + + <h3>Small text</h3> + <p>For de-emphasizing inline or blocks of text, use the <code><small></code> tag to set text at 85% the size of the parent. Heading elements receive their own <code>font-size</code> for nested <code><small></code> elements.</p> + <div class="bs-example"> + <p><small>This line of text is meant to be treated as fine print.</small></p> + </div> +{% highlight html %} +<small>This line of text is meant to be treated as fine print.</small> +{% endhighlight %} + + + <h3>Bold</h3> + <p>For emphasizing a snippet of text with a heavier font-weight.</p> + <div class="bs-example"> + <p>The following snippet of text is <strong>rendered as bold text</strong>.</p> + </div> +{% highlight html %} +<strong>rendered as bold text</strong> +{% endhighlight %} + + <h3>Italics</h3> + <p>For emphasizing a snippet of text with italics.</p> + <div class="bs-example"> + <p>The following snippet of text is <em>rendered as italicized text</em>.</p> + </div> +{% highlight html %} +<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> + + <h3>Alignment classes</h3> + <p>Easily realign text to components with text alignment classes.</p> + <div class="bs-example"> + <p class="text-left">Left aligned text.</p> + <p class="text-center">Center aligned text.</p> + <p class="text-right">Right aligned text.</p> + </div> +{% highlight html %} +<p class="text-left">Left aligned text.</p> +<p class="text-center">Center aligned text.</p> +<p class="text-right">Right aligned text.</p> +{% endhighlight %} + + <h3>Emphasis classes</h3> + <p>Convey meaning through color with a handful of emphasis utility classes.</p> + <div class="bs-example"> + <p class="text-muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> + <p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> + <p class="text-danger">Donec ullamcorper nulla non metus auctor fringilla.</p> + <p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> + </div> +{% highlight html %} +<p class="text-muted">...</p> +<p class="text-warning">...</p> +<p class="text-danger">...</p> +<p class="text-success">...</p> +{% endhighlight %} + + + <!-- Abbreviations --> + <h2 id="type-abbreviations">Abbreviations</h2> + <p>Stylized implementation of HTML's <code><abbr></code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.</p> + + <h3>Basic abbreviation</h3> + <p>For expanded text on long hover of an abbreviation, include the <code>title</code> attribute with the <code><abbr></code> element.</p> + <div class="bs-example"> + <p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p> + </div> +{% highlight html %} +<abbr title="attribute">attr</abbr> +{% endhighlight %} + + <h3>Initialism</h3> + <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p> + <div class="bs-example"> + <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.</p> + </div> +{% highlight html %} +<abbr title="HyperText Markup Language" class="initialism">HTML</abbr> +{% endhighlight %} + + + <!-- Addresses --> + <h2 id="type-addresses">Addresses</h2> + <p>Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <code><br></code>.</p> + <div class="bs-example"> + <address> + <strong>Twitter, Inc.</strong><br> + 795 Folsom Ave, Suite 600<br> + San Francisco, CA 94107<br> + <abbr title="Phone">P:</abbr> (123) 456-7890 + </address> + <address> + <strong>Full Name</strong><br> + <a href="mailto:#">first.last@example.com</a> + </address> + </div> +{% highlight html %} +<address> + <strong>Twitter, Inc.</strong><br> + 795 Folsom Ave, Suite 600<br> + San Francisco, CA 94107<br> + <abbr title="Phone">P:</abbr> (123) 456-7890 +</address> + +<address> + <strong>Full Name</strong><br> + <a href="mailto:#">first.last@example.com</a> +</address> +{% endhighlight %} + + + <!-- Blockquotes --> + <h2 id="type-blockquotes">Blockquotes</h2> + <p>For quoting blocks of content from another source within your document.</p> + + <h3>Default blockquote</h3> + <p>Wrap <code><blockquote></code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code><p></code>.</p> + <div class="bs-example"> + <blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + </blockquote> + </div> +{% highlight html %} +<blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> +</blockquote> +{% endhighlight %} + + <h3>Blockquote options</h3> + <p>Style and content changes for simple variations on a standard blockquote.</p> + + <h4>Naming a source</h4> + <p>Add <code><small></code> tag for identifying the source. Wrap the name of the source work in <code><cite></code>.</p> + <div class="bs-example"> + <blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + <small>Someone famous in <cite title="Source Title">Source Title</cite></small> + </blockquote> + </div> +{% highlight html %} +<blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + <small>Someone famous in <cite title="Source Title">Source Title</cite></small> +</blockquote> +{% endhighlight %} + + <h4>Alternate displays</h4> + <p>Use <code>.pull-right</code> for a floated, right-aligned blockquote.</p> + <div class="bs-example" style="overflow: hidden;"> + <blockquote class="pull-right"> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + <small>Someone famous in <cite title="Source Title">Source Title</cite></small> + </blockquote> + </div> +{% highlight html %} +<blockquote class="pull-right"> + ... +</blockquote> +{% endhighlight %} + + + <!-- Lists --> + <h2 id="type-lists">Lists</h2> + + <h3>Unordered</h3> + <p>A list of items in which the order does <em>not</em> explicitly matter.</p> + <div class="bs-example"> + <ul> + <li>Lorem ipsum dolor sit amet</li> + <li>Consectetur adipiscing elit</li> + <li>Integer molestie lorem at massa</li> + <li>Facilisis in pretium nisl aliquet</li> + <li>Nulla volutpat aliquam velit + <ul> + <li>Phasellus iaculis neque</li> + <li>Purus sodales ultricies</li> + <li>Vestibulum laoreet porttitor sem</li> + <li>Ac tristique libero volutpat at</li> + </ul> + </li> + <li>Faucibus porta lacus fringilla vel</li> + <li>Aenean sit amet erat nunc</li> + <li>Eget porttitor lorem</li> + </ul> + </div> +{% highlight html %} +<ul> + <li>...</li> +</ul> +{% endhighlight %} + + <h3>Ordered</h3> + <p>A list of items in which the order <em>does</em> explicitly matter.</p> + <div class="bs-example"> + <ol> + <li>Lorem ipsum dolor sit amet</li> + <li>Consectetur adipiscing elit</li> + <li>Integer molestie lorem at massa</li> + <li>Facilisis in pretium nisl aliquet</li> + <li>Nulla volutpat aliquam velit</li> + <li>Faucibus porta lacus fringilla vel</li> + <li>Aenean sit amet erat nunc</li> + <li>Eget porttitor lorem</li> + </ol> + </div> +{% highlight html %} +<ol> + <li>...</li> +</ol> +{% endhighlight %} + + <h3>Unstyled</h3> + <p>Remove the default <code>list-style</code> and left margin on list items (immediate children only). <strong>This only applies to immediate children list items</strong>, meaning you will need to add the class for any nested lists as well.</p> + <div class="bs-example"> + <ul class="list-unstyled"> + <li>Lorem ipsum dolor sit amet</li> + <li>Consectetur adipiscing elit</li> + <li>Integer molestie lorem at massa</li> + <li>Facilisis in pretium nisl aliquet</li> + <li>Nulla volutpat aliquam velit + <ul> + <li>Phasellus iaculis neque</li> + <li>Purus sodales ultricies</li> + <li>Vestibulum laoreet porttitor sem</li> + <li>Ac tristique libero volutpat at</li> + </ul> + </li> + <li>Faucibus porta lacus fringilla vel</li> + <li>Aenean sit amet erat nunc</li> + <li>Eget porttitor lorem</li> + </ul> + </div> +{% highlight html %} +<ul class="list-unstyled"> + <li>...</li> +</ul> +{% endhighlight %} + + <h3>Inline</h3> + <p>Place all list items on a single line with <code>inline-block</code> and some light padding.</p> + <div class="bs-example"> + <ul class="list-inline"> + <li>Lorem ipsum</li> + <li>Phasellus iaculis</li> + <li>Nulla volutpat</li> + </ul> + </div> +{% highlight html %} +<ul class="list-inline"> + <li>...</li> +</ul> +{% endhighlight %} + + <h3>Description</h3> + <p>A list of terms with their associated descriptions.</p> + <div class="bs-example"> + <dl> + <dt>Description lists</dt> + <dd>A description list is perfect for defining terms.</dd> + <dt>Euismod</dt> + <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> + <dd>Donec id elit non mi porta gravida at eget metus.</dd> + <dt>Malesuada porta</dt> + <dd>Etiam porta sem malesuada magna mollis euismod.</dd> + </dl> + </div> +{% highlight html %} +<dl> + <dt>...</dt> + <dd>...</dd> +</dl> +{% endhighlight %} + + <h4>Horizontal description</h4> + <p>Make terms and descriptions in <code><dl></code> line up side-by-side.</p> + <div class="bs-example"> + <dl class="dl-horizontal"> + <dt>Description lists</dt> + <dd>A description list is perfect for defining terms.</dd> + <dt>Euismod</dt> + <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> + <dd>Donec id elit non mi porta gravida at eget metus.</dd> + <dt>Malesuada porta</dt> + <dd>Etiam porta sem malesuada magna mollis euismod.</dd> + <dt>Felis euismod semper eget lacinia</dt> + <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd> + </dl> + </div> +{% highlight html %} +<dl class="dl-horizontal"> + <dt>...</dt> + <dd>...</dd> +</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> + + + <!-- Code + ================================================== --> + <div class="bs-docs-section" id="code"> + <div class="page-header"> + <h1>Code</h1> + </div> + + <h2>Inline</h2> + <p>Wrap inline snippets of code with <code><code></code>.</p> +<div class="bs-example"> + For example, <code><section></code> should be wrapped as inline. +</div> +{% highlight html %} +For example, <code><section></code> should be wrapped as inline. +{% endhighlight %} + + <h2>Basic block</h2> + <p>Use <code><pre></code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p> +<div class="bs-example"> + <pre><p>Sample text here...</p></pre> +</div> +{% highlight html %} +<pre><p>Sample text here...</p></pre> +{% endhighlight %} + + <p>You may optionally add the <code>.pre-scrollable</code> class which will set a max-height of 350px and provide a y-axis scrollbar.</p> + </div> + + + + <!-- Tables + ================================================== --> + <div class="bs-docs-section" id="tables"> + <div class="page-header"> + <h1>Tables</h1> + </div> + + <h2 id="tables-example">Basic example</h2> + <p>For basic styling—light padding and only horizontal dividers—add the base class <code>.table</code> to any <code><table></code>. It may seem super redundant, but given the widespread use of tables for other plugins like calendars and date pickers, we've opted to isolate our custom table styles.</p> + <div class="bs-example"> + <table class="table"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td>Larry</td> + <td>the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table"> + ... +</table> +{% endhighlight %} + + + <h2>Optional classes</h2> + <p>Add any of the following classes to the <code>.table</code> base class.</p> + + <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"> + <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> + <div class="bs-example"> + <table class="table table-striped"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td>Larry</td> + <td>the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-striped"> + ... +</table> +{% endhighlight %} + + <h3 id="tables-bordered">Bordered</h3> + <p>Add <code>.table-bordered</code> for borders and rounded corners.</p> + <div class="bs-example"> + <table class="table table-bordered"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td rowspan="2">1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>Mark</td> + <td>Otto</td> + <td>@TwBootstrap</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td colspan="2">Larry the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-bordered"> + ... +</table> +{% endhighlight %} + + <h3 id="tables-hover-rows">Hover rows</h3> + <p>Add <code>.table-hover</code> to enable a hover state on table rows within a <code><tbody></code>.</p> + <div class="bs-example"> + <table class="table table-hover"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td colspan="2">Larry the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-hover"> + ... +</table> +{% endhighlight %} + + + <h3 id="tables-condensed">Condensed</h3> + <p>Add <code>.table-condensed</code> to make tables more compact by cutting cell padding in half.</p> + <div class="bs-example"> + <table class="table table-condensed"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td colspan="2">Larry the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-condensed"> + ... +</table> +{% endhighlight %} + + + + <h2 id="tables-row-classes">Optional row classes</h2> + <p>Use contextual classes to color table rows.</p> + <table class="table table-bordered table-striped"> + <colgroup> + <col class="col-lg-1"> + <col class="col-lg-7"> + </colgroup> + <thead> + <tr> + <th>Class</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td> + <code>.success</code> + </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> + </tr> + <tr> + <td> + <code>.warning</code> + </td> + <td>Indicates a warning that might need attention.</td> + </tr> + <tr> + <td> + <code>.info</code> + </td> + <td>Used as an alternative to the default styles.</td> + </tr> + </tbody> + </table> + <div class="bs-example"> + <table class="table"> + <thead> + <tr> + <th>#</th> + <th>Product</th> + <th>Payment Taken</th> + <th>Status</th> + </tr> + </thead> + <tbody> + <tr class="success"> + <td>1</td> + <td>TB - Monthly</td> + <td>01/04/2012</td> + <td>Approved</td> + </tr> + <tr class="danger"> + <td>2</td> + <td>TB - Monthly</td> + <td>02/04/2012</td> + <td>Declined</td> + </tr> + <tr class="warning"> + <td>3</td> + <td>TB - Monthly</td> + <td>03/04/2012</td> + <td>Pending</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> +</tr> +... +{% endhighlight %} + + </div> + + + + <!-- Forms + ================================================== --> + <div class="bs-docs-section" id="forms"> + <div class="page-header"> + <h1>Forms</h1> + </div> + + <h2 id="forms-example">Basic example</h2> + <p>Individual form controls automatically receive some global styling. All textual <code><input></code>, <code><textarea></code>, and <code><select></code> elements are set to <code>width: 100%;</code> by default.</p> + <form class="bs-example"> + <fieldset> + <legend>Legend</legend> + <label for="exampleInput">Label name</label> + <input type="text" id="exampleInput" placeholder="Type something…"> + <p class="help-block">Example block-level help text here.</p> + <div class="checkbox"> + <label> + <input type="checkbox"> Check me out + </label> + </div> + <button type="submit" class="btn btn-default">Submit</button> + </fieldset> + </form><!-- /example --> +{% highlight html %} +<form> + <fieldset> + <legend>Legend</legend> + <label for="exampleInput">Label name</label> + <input type="text" id="exampleInput" placeholder="Type something…"> + <p class="help-block">Example block-level help text here.</p> + <div class="checkbox"> + <label> + <input type="checkbox"> Check me out + </label> + </div> + <button type="submit" class="btn btn-default">Submit</button> + </fieldset> +</form> +{% endhighlight %} + + + <h2>Optional layouts</h2> + <p>Included with Bootstrap are optional form layouts for common use cases.</p> + + <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"> + <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> + <form class="bs-example form-inline"> + <input type="text" placeholder="Email"> + <input type="password" placeholder="Password"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + <button type="submit" class="btn btn-default">Sign in</button> + </form><!-- /example --> +{% highlight html %} +<form class="form-inline"> + <input type="text" placeholder="Email"> + <input type="password" placeholder="Password"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + <button type="submit" class="btn btn-default">Sign in</button> +</form> +{% endhighlight %} + + <h3 id="forms-horizontal">Horizontal form</h3> + <p>Use Bootstrap's predefined grid classes to align labels and groups of form controls in a horizontal layout.</p> + <form class="bs-example form-horizontal"> + <div class="row"> + <label for="inputEmail" class="col-lg-2 control-label">Email</label> + <div class="col-lg-10"> + <input type="text" id="inputEmail" placeholder="Email"> + </div> + </div> + <div class="row"> + <label for="inputPassword" class="col-lg-2 control-label">Password</label> + <div class="col-lg-10"> + <input type="password" id="inputPassword" placeholder="Password"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + </div> + <div class="col-lg-10 col-offset-2"> + <button type="submit" class="btn btn-default">Sign in</button> + </div> + </div> + </form> +{% highlight html %} +<form class="form-horizontal"> + <div class="row"> + <label for="inputEmail" class="col-lg-2 control-label">Email</label> + <div class="col-lg-10"> + <input type="text" id="inputEmail" placeholder="Email"> + </div> + </div> + <div class="row"> + <label for="inputPassword" class="col-lg-2 control-label">Password</label> + <div class="col-lg-10"> + <input type="password" id="inputPassword" placeholder="Password"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + </div> + <div class="col-lg-10 col-offset-2"> + <button type="submit" class="btn btn-default">Sign in</button> + </div> + </div> +</form> +{% endhighlight %} + + + <h2 id="forms-controls">Supported form controls</h2> + <p>Examples of standard form controls supported in an example form layout.</p> + + <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"> + <h4>Type declaration required</h4> + <p>Inputs will only be fully styled if their <code>type</code> is properly declared.</p> + </div> + <form class="bs-example"> + <input type="text" placeholder="Text input"> + </form> +{% highlight html %} +<input type="text" placeholder="Text input"> +{% endhighlight %} + + <h3>Textarea</h3> + <p>Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.</p> + <form class="bs-example"> + <textarea rows="3"></textarea> + </form> +{% highlight html %} +<textarea rows="3"></textarea> +{% endhighlight %} + + <h3>Checkboxes and radios</h3> + <p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p> + <h4>Default (stacked)</h4> + <form class="bs-example"> + <div class="checkbox"> + <label> + <input type="checkbox" value=""> + Option one is this and that—be sure to include why it's great + </label> + </div> + <br> + <div class="radio"> + <label> + <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> + Option one is this and that—be sure to include why it's great + </label> + </div> + <div class="radio"> + <label> + <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> + Option two can be something else and selecting it will deselect option one + </label> + </div> + </form> +{% highlight html %} +<div class="checkbox"> + <label> + <input type="checkbox" value=""> + Option one is this and that—be sure to include why it's great + </label> +</div> + +<div class="radio"> + <label> + <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> + Option one is this and that—be sure to include why it's great + </label> +</div> +{% endhighlight %} + + <h4>Inline checkboxes</h4> + <p>Use <code>.checkbox-inline</code> or <code>.radio-inline</code> class to a series of checkboxes or radios for controls appear on the same line.</p> + <form class="bs-example"> + <label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 + </label> + <label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 + </label> + <label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 + </label> + </form> +{% highlight html %} +<label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 +</label> +<label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 +</label> +<label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 +</label> +{% endhighlight %} + + <h3>Selects</h3> + <p>Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.</p> + <form class="bs-example"> + <select> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> + </select> + <br> + <select multiple="multiple"> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> + </select> + </form> +{% highlight html %} +<select> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> +</select> + +<select multiple="multiple"> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> +</select> +{% endhighlight %} + + + + <h2 id="forms-control-states">Form control states</h2> + <p>Provide feedback to users or visitors with basic feedback states on form controls and labels.</p> + + <h3 id="forms-input-focus">Input focus</h3> + <p>We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.</p> + <form class="bs-example"> + <input class="focused" id="focusedInput" type="text" value="This is focused..."> + </form> +{% highlight html %} +<input id="focusedInput" type="text" value="This is focused..."> +{% endhighlight %} + + <h3 id="forms-invalid-inputs">Invalid inputs</h3> + <p>Style inputs via default browser functionality. Specify a <code>type</code>, add the <code>required</code> attribute if the field is not optional, and (if applicable) specify a <code>pattern</code>.</p> + + <div class="bs-callout"> + <h4>Cross-browser compatibility</h4> + <p>Invalid inputs are styled via the <code>:invalid</code> CSS selector, which is not supported by Internet Explorer 9 and below.</p> + </div> + + <form class="bs-example"> + <input type="email" placeholder="test@example.com" required> + </form> +{% highlight html %} +<input type="email" placeholder="test@example.com" required> +{% endhighlight %} + + <h3 id="forms-disabled-inputs">Disabled inputs</h3> + <p>Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.</p> + <form class="bs-example"> + <input class="input-xlarge" id="disabledInput" type="text" placeholder="Disabled input here…" disabled> + </form> +{% highlight html %} +<input id="disabledInput" type="text" placeholder="Disabled input here..." disabled> +{% endhighlight %} + + <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"> + <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"> + <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> + + <form class="bs-example form-inline"> + <fieldset disabled> + <input type="text" placeholder="Disabled input"> + <select> + <option>Disabled select</option> + </select> + <div class="checkbox"> + <label> + <input type="checkbox"> Can't check this + </label> + </div> + <button type="submit" class="btn btn-primary">Submit</button> + </fieldset> + </form> +{% highlight html %} +<form class="form-inline"> + <fieldset disabled> + <div> + <input type="text" placeholder="Disabled input"> + </div> + <div> + <select> + <option>Disabled select</option> + </select> + </div> + <div class="checkbox"> + <label> + <input type="checkbox"> Can't check this + </label> + </div> + <button type="submit" class="btn btn-primary">Submit</button> + </fieldset> +</form> +{% endhighlight %} + + <h3 id="forms-validation">Validation states</h3> + <p>Bootstrap includes validation styles for error, warning, info, and success messages. To use:</p> + <ul> + <li>Add <code>.has-warning</code>, <code>.has-error</code>, or <code>.has-success</code> to the parent element</li> + <li>Add .input-with-feedback to the field(s) in question</li> + </ul> + <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"> + <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"> + <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"> + <label class="control-label" for="inputSuccess">Input with success</label> + <div class="controls"> + <input type="text" class="input-with-feedback" id="inputSuccess"> + </div> + </div> + </form> +{% highlight html %} +<div class="control-group 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"> + <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"> + <label class="control-label" for="inputSuccess">Input with success</label> + <div class="controls"> + <input type="text" class="input-with-feedback" id="inputSuccess"> + </div> +</div> +{% endhighlight %} + + + + <h2 id="forms-extending">Extending form controls</h2> + <p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p> + + <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 a <code>.add-on</code> to prepend or append elements to an <code><input></code>.</p> + + <div class="bs-callout"> + <h4>Cross-browser compatibility</h4> + <p>Avoid using <code><select></code> elements here as they cannot be fully styled in WebKit browsers.</p> + </div> + + <form class="bs-example bs-example-form"> + <div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> + </div> + <br> + <div class="input-group col-lg-6"> + <input type="text"> + <span class="input-group-addon">.00</span> + </div> + <br> + <div class="input-group col-lg-3"> + <span class="input-group-addon">$</span> + <input type="text"> + <span class="input-group-addon">.00</span> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> +</div> + +<div class="input-group col-lg-6"> + <input type="text"> + <span class="input-group-addon">.00</span> +</div> + +<div class="input-group col-lg-3"> + <span class="input-group-addon">$</span> + <input type="text"> + <span class="input-group-addon">.00</span> +</div> +{% endhighlight %} + + <h4>Optional sizes</h4> + <p>Add the relative form sizing classes to the <code>.input-group-addon</code>.</p> + <form class="bs-example bs-example-form"> + <div class="input-group col-lg-9"> + <span class="input-group-addon input-large">@</span> + <input type="text" class="input-large" placeholder="Username"> + </div> + <br> + <div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> + </div> + <br> + <div class="input-group col-lg-9"> + <span class="input-group-addon input-small">@</span> + <input type="text" class="input-small" placeholder="Username"> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-9"> + <span class="input-group-addon input-large">@</span> + <input type="text" class="input-large" placeholder="Username"> +</div> + +<div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> +</div> + +<div class="input-group col-lg-9"> + <span class="input-group-addon input-small">@</span> + <input type="text" class="input-small" placeholder="Username"> +</div> +{% endhighlight %} + + <h4>Buttons instead of text</h4> + <p>Buttons in input groups are a bit different and require one extra level of nesting. Instead of <code>.input-group-addon</code>, you'll need to use <code>.input-group-btn</code> to wrap the buttons. This is required due to default browser styles that cannot be overridden.</p> + <form class="bs-example bs-example-form"> + <div class="input-group col-lg-7"> + <span class="input-group-btn"> + <button class="btn btn-default" type="button">Go!</button> + </span> + <input type="text"> + </div> + <br> + <div class="input-group col-lg-7"> + <input type="text"> + <span class="input-group-btn"> + <button class="btn btn-default" type="button">Go!</button> + </span> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-7"> + <span class="input-group-btn"> + <button class="btn btn-default" type="button">Go!</button> + </span> + <input type="text"> +</div> + +<div class="input-group col-lg-7"> + <input type="text"> + <span class="input-group-btn"> + <button class="btn btn-default" type="button">Go!</button> + </span> +</div> +{% endhighlight %} + + <h4>Button dropdowns</h4> + <p></p> + <form class="bs-example bs-example-form"> + <div class="input-group col-lg-7"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <input type="text"> + </div><!-- /input-group --> + <br> + <div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div><!-- /input-group --> + </form> +{% highlight html %} +<div class="input-group col-lg-7"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <input type="text"> +</div><!-- /input-group --> + +<div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> +</div><!-- /input-group --> +{% endhighlight %} + + <h4>Segmented dropdown groups</h4> + <form class="bs-example bs-example-form"> + <div class="input-group col-lg-7"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default" tabindex="-1">Action</button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" tabindex="-1"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div> + <input type="text"> + </div> + + <br> + + <div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn"> + <button type="button" class="btn btn-default" tabindex="-1">Action</button> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" tabindex="-1"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-7"> + <div class="input-group-btn"> + <!-- Button and dropdown menu --> + </div> + <input type="text"> +</div> + +<div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn btn-group"> + <!-- Button and dropdown menu --> + </div> +</div> +{% endhighlight %} + + <h3 id="forms-control-sizes">Control sizing</h3> + <p>Use relative sizing classes like <code>.input-large</code> or match your inputs to the grid column sizes using <code>.col-lg-*</code> classes.</p> + + <h4>Relative sizing</h4> + <p>Create larger or smaller form controls that match button sizes.</p> + <form class="bs-example bs-example-control-sizing"> + <div class="controls docs-input-sizes"> + <input class="input-large" type="text" placeholder=".input-large"> + <input type="text" placeholder="Default input"> + <input class="input-small" type="text" placeholder=".input-small"> + </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"> +{% endhighlight %} + + <h4>Column sizing</h4> + <p>Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.</p> + <form class="bs-example" style="padding-bottom: 15px;"> + <div class="row"> + <div class="col-lg-2"> + <input type="text" placeholder="col-large-2"> + </div> + <div class="col-lg-3"> + <input type="text" placeholder="col-large-3"> + </div> + <div class="col-lg-4"> + <input type="text" placeholder="col-large-4"> + </div> + </div> + </form> +{% highlight html %} +<div class="row"> + <div class="col-lg-2"> + <input type="text" placeholder="col-large-2"> + </div> + <div class="col-lg-3"> + <input type="text" placeholder="col-large-3"> + </div> + <div class="col-lg-4"> + <input type="text" placeholder="col-large-4"> + </div> +</div> +{% endhighlight %} + + <h3 id="forms-help-text">Help text</h3> + <p>Block level help text for form controls.</p> + <form class="bs-example"> + <input type="text"> + <span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> + </form> +{% highlight html %} +<span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> +{% endhighlight %} + + </div> + + + + <!-- Buttons + ================================================== --> + <div class="bs-docs-section" id="buttons"> + <div class="page-header"> + <h1>Buttons</h1> + </div> + + <h2 id="buttons-options">Button options</h2> + <p>Use any of the available button classes to quickly create a styled button.</p> + <div class="bs-example"> + <button type="button" class="btn btn-default">Default</button> + <button type="button" class="btn btn-primary">Primary</button> + <button type="button" class="btn btn-success">Success</button> + <button type="button" class="btn btn-info">Info</button> + <button type="button" class="btn btn-warning">Warning</button> + <button type="button" class="btn btn-danger">Danger</button> + <button type="button" class="btn btn-link">Link</button> + </div> +{% highlight html %} +<!-- Standard gray button with gradient --> +<button type="button" class="btn btn-default">Default</button> + +<!-- Provides extra visual weight and identifies the primary action in a set of buttons --> +<button type="button" class="btn btn-primary">Primary</button> + +<!-- Indicates a successful or positive action --> +<button type="button" class="btn btn-success">Success</button> + +<!-- Contextual button for informational alert messages --> +<button type="button" class="btn btn-info">Info</button> + +<!-- Indicates caution should be taken with this action --> +<button type="button" class="btn btn-warning">Warning</button> + +<!-- Indicates a dangerous or potentially negative action --> +<button type="button" class="btn btn-danger">Danger</button> + +<!-- Deemphasize a button by making it look like a link while maintaining button behavior --> +<button type="button" class="btn btn-link">Link</button> +{% endhighlight %} + + <h2 id="buttons-sizes">Button sizes</h2> + <p>Fancy larger or smaller buttons? Add <code>.btn-large</code> or <code>.btn-small</code> for additional sizes.</p> + <div class="bs-example"> + <p> + <button type="button" class="btn btn-primary btn-large">Large button</button> + <button type="button" class="btn btn-default btn-large">Large button</button> + </p> + <p> + <button type="button" class="btn btn-primary">Default button</button> + <button type="button" class="btn btn-default">Default button</button> + </p> + <p> + <button type="button" class="btn btn-primary btn-small">Small button</button> + <button type="button" class="btn btn-default btn-small">Small button</button> + </p> + </div> +{% highlight html %} +<p> + <button type="button" class="btn btn-primary btn-large">Large button</button> + <button type="button" class="btn btn-default btn-large">Large button</button> +</p> +<p> + <button type="button" class="btn btn-primary">Default button</button> + <button type="button" class="btn btn-default">Default button</button> +</p> +<p> + <button type="button" class="btn btn-primary btn-small">Small button</button> + <button type="button" class="btn btn-default btn-small">Small button</button> +</p> +{% endhighlight %} + + <p>Create block level buttons—those that span the full width of a parent— by adding <code>.btn-block</code>.</p> + <div class="bs-example"> + <div class="well" style="max-width: 400px; margin: 0 auto 10px;"> + <button type="button" class="btn btn-primary btn-large btn-block">Block level button</button> + <button type="button" class="btn btn-default btn-large btn-block">Block level button</button> + </div> + </div> +{% highlight html %} +<button type="button" class="btn btn-primary btn-large btn-block">Block level button</button> +<button type="button" class="btn btn-default btn-large btn-block">Block level button</button> +{% endhighlight %} + + + <h2 id="buttons-disabled">Disabled state</h2> + <p>Make buttons look unclickable by fading them back 50%.</p> + + <h3>Button element</h3> + <p>Add the <code>disabled</code> attribute to <code><button></code> buttons.</p> + <p class="bs-example"> + <button type="button" class="btn btn-primary btn-large" disabled="disabled">Primary button</button> + <button type="button" class="btn btn-default btn-large" disabled="disabled">Button</button> + </p> +{% highlight html %} +<button type="button" class="btn btn-large btn-primary" disabled="disabled">Primary button</button> +<button type="button" class="btn btn-default btn-large" disabled="disabled">Button</button> +{% endhighlight %} + + <div class="bs-callout"> + <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> + + <h3>Anchor element</h3> + <p>Add the <code>.disabled</code> class to <code><a></code> buttons.</p> + <p class="bs-example"> + <a href="#" class="btn btn-primary btn-large disabled">Primary link</a> + <a href="#" class="btn btn-default btn-large disabled">Link</a> + </p> +{% highlight html %} +<a href="#" class="btn btn-primary btn-large disabled">Primary link</a> +<a href="#" class="btn btn-default btn-large disabled">Link</a> +{% endhighlight %} + <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"> + <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> + + + <h2 id="buttons-tags">Using multiple tags</h2> + <p>Use the button classes on an <code><a></code>, <code><button></code>, or <code><input></code> element.</p> + <form class="bs-example"> + <a class="btn btn-default" href="#">Link</a> + <button class="btn btn-default" type="submit">Button</button> + <input class="btn btn-default" type="button" value="Input"> + <input class="btn btn-default" type="submit" value="Submit"> + </form> +{% highlight html %} +<a class="btn btn-default" href="#">Link</a> +<button class="btn btn-default" type="submit">Button</button> +<input class="btn btn-default" type="button" value="Input"> +<input class="btn btn-default" type="submit" value="Submit"> +{% endhighlight %} + + <div class="bs-callout"> + <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> + + </div> + + + + <!-- Images + ================================================== --> + <div class="bs-docs-section" id="images"> + <div class="page-header"> + <h1>Images</h1> + </div> + + <p>Add classes to an <code><img></code> element to easily style images in any project.</p> + <div class="bs-callout"> + <h4>Cross-browser compatibility</h4> + <p>Keep in mind that Internet Explorer 8 lacks support for rounded corners.</p> + </div> + <div class="bs-example bs-example-images"> + <img data-src="holder.js/140x140" class="img-rounded"> + <img data-src="holder.js/140x140" class="img-circle"> + <img data-src="holder.js/140x140" class="img-thumbnail"> + </div> +{% highlight html %} +<img src="..." class="img-rounded"> +<img src="..." class="img-circle"> +<img src="..." class="img-thumbnail"> +{% endhighlight %} + + </div> + + + <!-- Helpers + ================================================== --> + <div class="bs-docs-section" id="helper-classes"> + <div class="page-header"> + <h1>Helper classes</h1> + </div> + + <h3>Close icon</h3> + <p>Use the generic close icon for dismissing content like modals and alerts.</p> + <div class="bs-example"> + <p><button type="button" class="close">×</button></p> + </div> +{% highlight html %} +<button type="button" class="close">×</button> +{% endhighlight %} + + <h3>.pull-left</h3> + <p>Float an element left</p> +{% highlight html %} +<div class="pull-left">...</div> +{% endhighlight %} +{% highlight css %} +.pull-left { + float: left; +} +{% endhighlight %} + + <h3>.pull-right</h3> + <p>Float an element right</p> +{% highlight html %} +<div class="pull-right">...</div> +{% endhighlight %} +{% highlight css %} +.pull-right { + float: right; +} +{% endhighlight %} + + <h3>.clearfix</h3> + <p>Clear the <code>float</code> on any element. Utilizes <a href="http://nicolasgallagher.com/micro-clearfix-hack/">the micro clearfix</a> as popularized by Nicolas Gallagher.</p> +{% highlight html %} +<div class="clearfix">...</div> +{% endhighlight %} +{% highlight css %} +// Mixin +.clearfix { + &:before, + &:after { + content: " "; + display: table; + } + &:after { + clear: both; + } +} + +// Usage +.element { + .clearfix(); +} +{% endhighlight %} + </div> + + <!-- Responsive utilities + ================================================== --> + <div class="bs-docs-section" id="responsive-utilities"> + <div class="page-header"> + <h1>Responsive utilities</h1> + </div> + <p class="lead">For faster mobile-friendly development, use these utility classes for showing and hiding content by device via media query. Also included are utility classes for toggling content when printed.</p> + + <h3>Responsive classes</h3> + <div class="hidden-sm"> + <table class="table table-bordered table-striped responsive-utilities"> + <thead> + <tr> + <th>Class</th> + <th>Small devices <small>Up to 768px</small></th> + <th>Medium devices <small>768px to 979px</small></th> + <th>Large devices <small>980px and up</small></th> + </tr> + </thead> + <tbody> + <tr> + <th><code>.visible-sm</code></th> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + <td class="is-hidden">Hidden</td> + </tr> + <tr> + <th><code>.visible-md</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + </tr> + <tr> + <th><code>.visible-lg</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-sm</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-md</code></th> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-lg</code></th> + <td class="is-visible">Visible</td> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + </tr> + </tbody> + </table> + </div> + + <h3>Print classes</h3> + <table class="table table-bordered table-striped responsive-utilities"> + <thead> + <tr> + <th>Class</th> + <th>Browser</th> + <th>Print</th> + </tr> + </thead> + <tbody> + <tr> + <th><code>.visible-print</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-print</code></th> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + </tr> + </tbody> + </table> + + <h3>When to use</h3> + <p>Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities are currently only available for block-level toggling, meaning <code>display: none;</code> or <code>display: block;</code>. Use with inline and table elements is currently not supported.</p> + + <h3>Test case</h3> + <p>Resize your browser or load on different devices to test the responsive utility classes.</p> + <h4>Visible on...</h4> + <p>Green checkmarks indicate the element <strong>is visible</strong> in your current viewport.</p> + <ul class="responsive-utilities-test visible-on"> + <li> + <span class="hidden-sm">Small</span> + <span class="visible-sm">✔ Visible on small</span> + </li> + <li> + <span class="hidden-md">Medium</span> + <span class="visible-md">✔ Visible on medium</span> + </li> + <li> + <span class="hidden-lg">Large</span> + <span class="visible-lg">✔ Visible on large</span> + </li> + </ul> + <h4>Hidden on...</h4> + <p>Here, green checkmarks indicate the element <strong>is hidden</strong> in your current viewport.</p> + <ul class="responsive-utilities-test hidden-on"> + <li> + <span class="visible-sm">Small</span> + <span class="hidden-sm">✔ Hidden on small</span> + </li> + <li> + <span class="visible-md">Medium</span> + <span class="hidden-md">✔ Hidden on medium</span> + </li> + <li> + <span class="visible-lg">Large</span> + <span class="hidden-lg">✔ Hidden on desktop</span> + </li> + </ul> + + </div> diff --git a/docs/customize.html b/docs/customize.html index a3c6ec6887588e4b78e9138025f8cdbceb33f7a9..edf197df38ef01a14b1686778a5bdc8b716e1c81 100644 --- a/docs/customize.html +++ b/docs/customize.html @@ -1,514 +1,1203 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Customize · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class="active"> - <a href="./customize.html">Customize</a> - </li> - </ul> +--- +layout: default +title: Customize and download +slug: customize +lead: Customize Bootstrap's components, LESS variables, and jQuery plugins to get your very own version. +--- + + <!-- Customize + ================================================== --> + <form class="bs-customizer"> + <div class="bs-docs-section" id="less"> + <div class="page-header"> + <button class="btn btn-default toggle" type="button">Toggle all</button> + <h1>LESS files</h1> + </div> + <p class="lead">Choose which LESS files to compile into your custom build of Bootstrap. Not sure which files to use? Read through the <a href="/css/">CSS</a> and <a href="/components/">Components</a> pages in the docs</p> + + <h3>Basics</h3> + <div class="row"> + <div class="col-lg-4"> + <h4>Layout</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="normalize.less"> + Normalize (CSS reset) + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="scaffolding.less"> + Scaffolding + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="grid.less"> + Grid system + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="print.less"> + Print media styles + </label> + </div> + </div> + <div class="col-lg-4"> + <h4>Global CSS</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="type.less"> + Typography + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="code.less"> + Code + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="tables.less"> + Tables + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="forms.less"> + Forms + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="buttons.less"> + Buttons + </label> + </div> + </div> + <div class="col-lg-4"> + <h4>Utility classes</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="utilities.less"> + Basic utilities + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="responsive-utilities.less"> + Responsive utilities + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="component-animations.less"> + Component animations (for JS) + </label> + </div> + </div> + </div> + + <h3>Components</h3> + <div class="row"> + <div class="col-lg-4"> + <h4>Navigation</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="navs.less"> + Navs + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="navbar.less"> + Navbar + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="pagination.less"> + Pagination + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="pager.less"> + Pager + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="breadcrumbs.less"> + Breadcrumbs + </label> + </div> + </div> + <div class="col-lg-4"> + <h4>Content blocks</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="jumbotron.less"> + Jumbotron + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="accordion.less"> + Accordion + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="panels.less"> + Panels + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="wells.less"> + Wells + </label> + </div> + </div> + <div class="col-lg-4"> + <h4>Behavioral (requires JS)</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="alerts.less"> + Alerts + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="dropdowns.less"> + Dropdowns + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="tooltip.less"> + Tooltips + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="popovers.less"> + Popovers + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="modals.less"> + Modals + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="carousel.less"> + Carousel + </label> + </div> + </div> + </div> + + <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"> + Thumbnails + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="list-group.less"> + List groups + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="media.less"> + Media items + </label> + </div> + </div> + <div class="col-lg-4"> + <h4>Miscellaneous</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="button-groups.less"> + Button groups + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="progress-bars.less"> + Progress bars + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="badges.less"> + Badges + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="labels.less"> + Labels + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="close.less"> + Close icon + </label> </div> </div> </div> </div> -<!-- Masthead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Customize and download</h1> - <p class="lead"><a href="https://github.com/twitter/bootstrap/zipball/master">Download Bootstrap</a> or customize variables, components, JavaScript plugins, and more.</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#components"><i class="icon-chevron-right"></i> 1. Choose components</a></li> - <li><a href="#plugins"><i class="icon-chevron-right"></i> 2. Select jQuery plugins</a></li> - <li><a href="#variables"><i class="icon-chevron-right"></i> 3. Customize variables</a></li> - <li><a href="#download"><i class="icon-chevron-right"></i> 4. Download</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Customize form - ================================================== --> - <form> - <section class="download" id="components"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">Toggle all</a> - <h1> - 1. Choose components - </h1> + + + <div class="bs-docs-section" id="plugins"> + <div class="page-header"> + <button class="btn btn-default toggle" type="button">Toggle all</button> + <h1>jQuery plugins</h1> + </div> + <p class="lead">Choose which jQuery plugins should be included in your custom JavaScript files. Unsure what to include? Read the <a href="/javascript/">JavaScript</a> page in the docs.</p> + <div class="row"> + <div class="col-lg-6"> + <h4>Linked to components</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="alert.js"> + Alert dismissal + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="button.js"> + Advanced buttons + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="carousel.js"> + Carousel functionality + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="dropdown.js"> + Dropdowns + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="modal.js"> + Modals + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="tooltip.js"> + Tooltips + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="popover.js"> + Popovers <small>(requires Tooltips)</small> + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="tab.js"> + Toggable tabs + </label> + </div> + </div> + <div class="col-lg-6"> + <h4>Magic</h4> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="affix.js"> + Affix + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="collapse.js"> + Collapse + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="scrollspy.js"> + Scrollspy + </label> + </div> + <div class="checkbox"> + <label> + <input type="checkbox" checked value="transition.js"> + Transitions <small>(required for any kind of animation)</small> + </label> + </div> + </div> + </div> + <div class="bs-callout"> + <h4>Heads up!</h4> + <p>All checked plugins will be compiled into a single file, bootstrap.js. All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.</p> + </div> + </div> + + + + <div class="bs-docs-section" id="less-variables"> + <div class="page-header"> + <button class="btn btn-default toggle" type="button">Reset to defaults</button> + <h1>LESS variables</h1> + </div> + <p class="lead">Customize LESS variables to define colors, sizes and more inside your custom CSS stylesheets.</p> + + <h2 id="variables-basics">Basics</h2> + + <h3>Typography</h3> + <div class="row"> + <div class="col-lg-6"> + <label>@font-family-sans-serif</label> + <input type="text" placeholder="'Helvetica Neue', Helvetica, Arial, sans-serif"> + <p class="help-block">Default sans-serif fonts.</p> + <label>@font-family-serif</label> + <input type="text" placeholder="Georgia, 'Times New Roman', Times, serif"> + <p class="help-block">Default serif fonts.</p> + <label>@font-family-monospace</label> + <input type="text" placeholder="Monaco, Menlo, Consolas, 'Courier New', monospace"> + <p class="help-block">Default monospace fonts for <code><code></code> and <code><pre></code>.</p> + </div> + <div class="col-lg-6"> + <label>@font-family-base</label> + <input type="text" placeholder="@font-family-sans-serif"> + <p class="help-block">Used to globally set font-family in Bootstrap.</p> + <label>@font-size-base</label> + <input type="text" placeholder="14px"> + <p class="help-block">Used to calculate font-size throughout Bootstrap.</p> + <label>@line-height-base</label> + <input type="text" placeholder="1.428571429"> + <p class="help-block">Used to calculate line-height throughout Bootstrap.</p> + <label>@headings-font-weight</label> + <input type="text" placeholder="500"> + <p class="help-block">Choose a separate font-weight for headings.</p> + <label>@headings-line-height</label> + <input type="text" placeholder="1.1"> + <p class="help-block">Choose a separate line-height for headings.</p> + </div> + </div> + + <h3>Colors</h3> + <div class="row"> + + <!--Primary Colors--> + <div class="col-lg-6"> + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@body-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Background color applied to <code><body></code>.</p> + </div> + <div class="col-1 col-lg-2 swatch"> + <div class="swatch" data-default-color="#fff" style="background-color: #fff"></div> + </div> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@brand-primary</label> + <input type="text" placeholder="#428bca"> + <p class="help-block">Used for primary buttons, panels and more.</p> + </div> + <div class="col-1 col-lg-2 swatch"> + <div data-default-color="#428bca" style="background-color: #428bca"></div> + </div> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@brand-success</label> + <input type="text" placeholder="#5cb85c"> + <p class="help-block">Used to indicate success.</p> + </div> + <div class="col-1 col-lg-2 swatch"> + <div data-default-color="#5cb85c" style="background-color: #5cb85c"></div> + </div> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@brand-warning</label> + <input type="text" placeholder="#f0ad4e"> + <p class="help-block">Used to indicate a warning.</p> + </div> + <div class="col-1 col-lg-2 swatch"> + <div data-default-color="#f0ad4e" style="background-color: #f0ad4e"></div> + </div> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@brand-danger</label> + <input type="text" placeholder="#d9534f"> + <p class="help-block">Used to indicate danger.</p> + </div> + <div class="col-1 col-lg-2 swatch"> + <div data-default-color="#d9534f" style="background-color: #d9534f"></div> + </div> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@brand-info</label> + <input type="text" placeholder="#5bc0de"> + <p class="help-block">Used to indicate informational content.</p> + </div> + <div class="col-1 col-lg-2 swatch"> + <div data-default-color="#5bc0de" style="background-color: #5bc0de"></div> + </div> + </div> + </div> + + <!--Text Colors--> + <div class="col-lg-6"> + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@text-color</label> + <input type="text" placeholder="#333333"> + <p class="help-block">Global color set on the body.</p> </div> - <div class="row download-builder"> - <div class="span3"> - <h3>Scaffolding</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="reset.less"> Normalize and reset</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="scaffolding.less"> Body type and links</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="grid.less"> Grid system</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="layouts.less"> Layouts</label> - <h3>Base CSS</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="type.less"> Headings, body, etc</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="code.less"> Code and pre</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="labels-badges.less"> Labels and badges</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="tables.less"> Tables</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="forms.less"> Forms</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="buttons.less"> Buttons</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="sprites.less"> Icons</label> - </div><!-- /span --> - <div class="span3"> - <h3>Components</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="button-groups.less"> Button groups and dropdowns</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navs.less"> Navs, tabs, and pills</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navbar.less"> Navbar</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="breadcrumbs.less"> Breadcrumbs</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pagination.less"> Pagination</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pager.less"> Pager</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="thumbnails.less"> Thumbnails</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="alerts.less"> Alerts</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="progress-bars.less"> Progress bars</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="hero-unit.less"> Hero unit</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="media.less"> Media component</label> - <h3>JS Components</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="tooltip.less"> Tooltips</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="popovers.less"> Popovers</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="modals.less"> Modals</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="dropdowns.less"> Dropdowns</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="accordion.less"> Collapse</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="carousel.less"> Carousel</label> - </div><!-- /span --> - <div class="span3"> - <h3>Miscellaneous</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="wells.less"> Wells</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="close.less"> Close icon</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="utilities.less"> Utilities</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="component-animations.less"> Component animations</label> - <h3>Responsive</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-utilities.less"> Visible/hidden classes</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-767px-max.less"> Narrow tablets and below (<767px)</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-768px-979px.less"> Tablets to desktops (767-979px)</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-1200px-min.less"> Large desktops (>1200px)</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-navbar.less"> Responsive navbar</label> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="plugins"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">Toggle all</a> - <h1> - 2. Select jQuery plugins - </h1> + <div class="col-1 col-lg-2 swatch" style="padding: 0"> + <div data-default-color="#333333" style="background-color: #333333"></div> </div> - <div class="row download-builder"> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-transition.js"> - Transitions <small>(required for any animation)</small> - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-modal.js"> - Modals - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-dropdown.js"> - Dropdowns - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-scrollspy.js"> - Scrollspy - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tab.js"> - Togglable tabs - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tooltip.js"> - Tooltips - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-popover.js"> - Popovers <small>(requires Tooltips)</small> - </label> - </div><!-- /span --> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-affix.js"> - Affix - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-alert.js"> - Alert messages - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-button.js"> - Buttons - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-collapse.js"> - Collapse - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-carousel.js"> - Carousel - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-typeahead.js"> - Typeahead - </label> - </div><!-- /span --> - <div class="span3"> - <h4 class="muted">Heads up!</h4> - <p class="muted">All checked plugins will be compiled into a single file, bootstrap.js. All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.</p> - </div><!-- /span --> - </div><!-- /row --> - </section> - - - <section class="download" id="variables"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">Reset to defaults</a> - <h1> - 3. Customize variables - </h1> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@link-color</label> + <input type="text" placeholder="#428bca"> + <p class="help-block">Global link color for text.</p> </div> - <div class="row download-builder"> - <div class="span3"> - <h3>Scaffolding</h3> - <label>@bodyBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@textColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - - <h3>Links</h3> - <label>@linkColor</label> - <input type="text" class="span3" placeholder="#08c"> - <label>@linkColorHover</label> - <input type="text" class="span3" placeholder="darken(@linkColor, 15%)"> - <h3>Colors</h3> - <label>@blue</label> - <input type="text" class="span3" placeholder="#049cdb"> - <label>@green</label> - <input type="text" class="span3" placeholder="#46a546"> - <label>@red</label> - <input type="text" class="span3" placeholder="#9d261d"> - <label>@yellow</label> - <input type="text" class="span3" placeholder="#ffc40d"> - <label>@orange</label> - <input type="text" class="span3" placeholder="#f89406"> - <label>@pink</label> - <input type="text" class="span3" placeholder="#c3325f"> - <label>@purple</label> - <input type="text" class="span3" placeholder="#7a43b6"> - - <h3>Sprites</h3> - <label>@iconSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings.png'"> - <label>@iconWhiteSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings-white.png'"> - - <h3>Grid system</h3> - <label>@gridColumns</label> - <input type="text" class="span3" placeholder="12"> - <label>@gridColumnWidth</label> - <input type="text" class="span3" placeholder="60px"> - <label>@gridGutterWidth</label> - <input type="text" class="span3" placeholder="20px"> - <label>@gridColumnWidth1200</label> - <input type="text" class="span3" placeholder="70px"> - <label>@gridGutterWidth1200</label> - <input type="text" class="span3" placeholder="30px"> - <label>@gridColumnWidth768</label> - <input type="text" class="span3" placeholder="42px"> - <label>@gridGutterWidth768</label> - <input type="text" class="span3" placeholder="20px"> - - </div><!-- /span --> - <div class="span3"> - - <h3>Typography</h3> - <label>@sansFontFamily</label> - <input type="text" class="span3" placeholder="'Helvetica Neue', Helvetica, Arial, sans-serif"> - <label>@serifFontFamily</label> - <input type="text" class="span3" placeholder="Georgia, 'Times New Roman', Times, serif"> - <label>@monoFontFamily</label> - <input type="text" class="span3" placeholder="Menlo, Monaco, 'Courier New', monospace"> - - <label>@baseFontSize</label> - <input type="text" class="span3" placeholder="14px"> - <label>@baseFontFamily</label> - <input type="text" class="span3" placeholder="@sansFontFamily"> - <label>@baseLineHeight</label> - <input type="text" class="span3" placeholder="20px"> - - <label>@altFontFamily</label> - <input type="text" class="span3" placeholder="@serifFontFamily"> - <label>@headingsFontFamily</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@headingsFontWeight</label> - <input type="text" class="span3" placeholder="bold"> - <label>@headingsColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <label>@fontSizeLarge</label> - <input type="text" class="span3" placeholder="@baseFontSize * 1.25"> - <label>@fontSizeSmall</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.85"> - <label>@fontSizeMini</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.75"> - - <label>@paddingLarge</label> - <input type="text" class="span3" placeholder="11px 19px"> - <label>@paddingSmall</label> - <input type="text" class="span3" placeholder="2px 10px"> - <label>@paddingMini</label> - <input type="text" class="span3" placeholder="1px 6px"> - - <label>@baseBorderRadius</label> - <input type="text" class="span3" placeholder="4px"> - <label>@borderRadiusLarge</label> - <input type="text" class="span3" placeholder="6px"> - <label>@borderRadiusSmall</label> - <input type="text" class="span3" placeholder="3px"> - - <label>@heroUnitBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@heroUnitHeadingColor</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@heroUnitLeadColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <h3>Tables</h3> - <label>@tableBackground</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@tableBackgroundAccent</label> - <input type="text" class="span3" placeholder="#f9f9f9"> - <label>@tableBackgroundHover</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@tableBorder</label> - <input type="text" class="span3" placeholder="#ddd"> - - <h3>Forms</h3> - <label>@placeholderText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@inputBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@inputBorder</label> - <input type="text" class="span3" placeholder="#ccc"> - <label>@inputBorderRadius</label> - <input type="text" class="span3" placeholder="3px"> - <label>@inputDisabledBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@formActionsBackground</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@btnPrimaryBackground</label> - <input type="text" class="span3" placeholder="@linkColor"> - <label>@btnPrimaryBackgroundHighlight</label> - <input type="text" class="span3" placeholder="darken(@white, 10%)"> - - </div><!-- /span --> - <div class="span3"> - - <h3>Form states & alerts</h3> - <label>@warningText</label> - <input type="text" class="span3" placeholder="#c09853"> - <label>@warningBackground</label> - <input type="text" class="span3" placeholder="#fcf8e3"> - <label>@errorText</label> - <input type="text" class="span3" placeholder="#b94a48"> - <label>@errorBackground</label> - <input type="text" class="span3" placeholder="#f2dede"> - <label>@successText</label> - <input type="text" class="span3" placeholder="#468847"> - <label>@successBackground</label> - <input type="text" class="span3" placeholder="#dff0d8"> - <label>@infoText</label> - <input type="text" class="span3" placeholder="#3a87ad"> - <label>@infoBackground</label> - <input type="text" class="span3" placeholder="#d9edf7"> - - <h3>Navbar</h3> - <label>@navbarHeight</label> - <input type="text" class="span3" placeholder="40px"> - <label>@navbarBackground</label> - <input type="text" class="span3" placeholder="@grayDarker"> - <label>@navbarBackgroundHighlight</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@navbarText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarBrandColor</label> - <input type="text" class="span3" placeholder="@navbarLinkColor"> - <label>@navbarLinkColor</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarLinkColorActive</label> - <input type="text" class="span3" placeholder="@navbarLinkColorHover"> - <label>@navbarLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@navbarLinkBackgroundActive</label> - <input type="text" class="span3" placeholder="@navbarBackground"> - <label>@navbarSearchBackground</label> - <input type="text" class="span3" placeholder="lighten(@navbarBackground, 25%)"> - <label>@navbarSearchBackgroundFocus</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarSearchBorder</label> - <input type="text" class="span3" placeholder="darken(@navbarSearchBackground, 30%)"> - <label>@navbarSearchPlaceholderColor</label> - <input type="text" class="span3" placeholder="#ccc"> - - <label>@navbarCollapseWidth</label> - <input type="text" class="span3" placeholder="979px"> - <label>@navbarCollapseDesktopWidth</label> - <input type="text" class="span3" placeholder="@navbarCollapseWidth + 1"> - - <h3>Dropdowns</h3> - <label>@dropdownBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownBorder</label> - <input type="text" class="span3" placeholder="rgba(0,0,0,.2)"> - <label>@dropdownLinkColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@dropdownLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="@linkColor"> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="download"> - <div class="page-header"> - <h1> - 4. Download - </h1> + <div class="col-1 col-lg-2 swatch"> + <div data-default-color="#428bca" style="background-color: #428bca"></div> + </div> + </div> + + <div class="row color-preview"> + <div class="col-11 col-lg-10"> + <label>@link-color-hover</label> + <input type="text" placeholder="#2a6496"> + <p class="help-block">Automatically darken links on hover via color function.</p> </div> - <div class="download-btn"> - <a class="btn btn-primary" href="#" >Customize and Download</a> - <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 class="col-1 col-lg-2 swatch"> + <div data-default-color="#2a6496" style="background-color: #2a6496"></div> </div> - </section><!-- /download --> - </form> + </div> + + </div> + </div> + + <h3>Media queries breakpoints</h3> + <p>Define the breakpoints at which your layout will change, adapting to different screen sizes.</p> + <div class="row"> + <div class="col-lg-6"> + <label>@screen-tiny</label> + <input type="text" placeholder="480px"> + <label>@screen-small</label> + <input type="text" placeholder="768px"> + </div> + <div class="col-lg-6"> + <label>@screen-medium</label> + <input type="text" placeholder="992px"> + <label>@screen-large</label> + <input type="text" placeholder="1200px"> + </div> + </div> + <h3>Grid system</h3> + <p>Define your custom responsive grid.</p> + <div class="row"> + <div class="col-lg-6"> + <label>@grid-columns</label> + <input type="text" placeholder="12"> + <p class="help-block">Number of columns in the grid.</p> + <label>@grid-gutter-width</label> + <input type="text" placeholder="30px"> + <p class="help-block">Padding between columns.</p> + </div> + <div class="col-lg-6"> + <label>@grid-float-breakpoint</label> + <input type="text" placeholder="@screen-tablet"> + <p class="help-block">Point at which the navbar stops collapsing.</p> + </div> + </div> + <h3>Components</h3> + <p>Define common padding and border radius sizes and more.</p> + <div class="row"> + <div class="col-lg-6"> + <h4>Padding</h4> + <label>@padding-base-vertical</label> + <input type="text" placeholder="8px"> + <label>@padding-base-horizontal</label> + <input type="text" placeholder="12px"> + <label>@padding-large-vertical</label> + <input type="text" placeholder="14px"> + <label>@padding-large-horizontal</label> + <input type="text" placeholder="16px"> + <label>@padding-small-vertical</label> + <input type="text" placeholder="5px"> + <label>@padding-small-horizontal</label> + <input type="text" placeholder="10px"> + </div> + <div class="col-lg-6"> + <h4>Border radius sizes</h4> + <label>@border-radius-base</label> + <input type="text" placeholder="4px"> + <label>@border-radius-large</label> + <input type="text" placeholder="6px"> + <label>@border-radius-small</label> + <input type="text" placeholder="3px"> + </div> + </div> + <h4>Active background color</h4> + <div class="row"> + <div class="col-lg-6"> + <label>@component-active-bg</label> + <input type="text" placeholder="@brand-primary"> + <p class="help-block">Used for active or hovered items in places like navs or dropdowns.</p> + </div> </div> - </div> - </div> + <h2 id="variables-buttons">Buttons</h2> + <p>For each of Bootstrap's buttons, define text, background and border color.</p> + <div class="row"> + <div class="col-lg-6"> + <h4>Default</h4> + <label>@btn-default-color</label> + <input type="text" placeholder="#fff"> + <label>@btn-default-bg</label> + <input type="text" placeholder="#a7a99aa"> + <label>@btn-default-border</label> + <input type="text" placeholder="@btn-default-bg"> + <h4>Primary</h4> + <label>@btn-primary-color</label> + <input type="text" placeholder="@btn-default-color"> + <label>@btn-primary-bg</label> + <input type="text" placeholder="@brand-primary"> + <label>@btn-primary-border</label> + <input type="text" placeholder="@btn-primary-bg"> + <h4>Info</h4> + <label>@btn-info-color</label> + <input type="text" placeholder="@btn-default-color"> + <label>@btn-info-bg</label> + <input type="text" placeholder="@brand-info"> + <label>@btn-info-border</label> + <input type="text" placeholder="@btn-info-bg"> + </div> + <div class="col-lg-6"> + <h4>Success</h4> + <label>@btn-success-color</label> + <input type="text" placeholder="@btn-default-color"> + <label>@btn-success-bg</label> + <input type="text" placeholder="@brand-success"> + <label>@btn-success-border</label> + <input type="text" placeholder="@btn-success-bg"> + <h4>Warning</h4> + <label>@btn-warning-color</label> + <input type="text" placeholder="@btn-default-color"> + <label>@btn-warning-bg</label> + <input type="text" placeholder="@brand-warning"> + <label>@btn-warning-border</label> + <input type="text" placeholder="@btn-warning-bg"> + <h4>Danger</h4> + <label>@btn-danger-color</label> + <input type="text" placeholder="@btn-default-color"> + <label>@btn-danger-bg</label> + <input type="text" placeholder="@brand-danger"> + <label>@btn-danger-border</label> + <input type="text" placeholder="@btn-danger-bg"> + </div> + </div> + <h2 id="variables-form-states">Form states and alerts</h2> + <p>Define colors for form feedback states and, by default, alerts.</p> + <div class="row"> + <div class="col-lg-6"> + <h4>Success</h4> + <label>@state-success-text</label> + <input type="text" placeholder="#468847"> + <label>@state-success-bg</label> + <input type="text" placeholder="#dff0d8"> + <label>@state-success-border</label> + <input type="text" placeholder="darken(spin(@state-success-bg, -10), 5%)"> + <h4>Warning</h4> + <label>@state-warning-text</label> + <input type="text" placeholder="#c09853"> + <label>@state-warning-bg</label> + <input type="text" placeholder="#fcf8e3"> + <label>@state-warning-border</label> + <input type="text" placeholder="darken(spin(@state-warning-bg, -10), 3%)"> + </div> + <div class="col-lg-6"> + <h4>Danger</h4> + <label>@state-danger-text</label> + <input type="text" placeholder="#b94a48"> + <label>@state-danger-bg</label> + <input type="text" placeholder="#f2dede"> + <label>@state-danger-border</label> + <input type="text" placeholder="darken(spin(@state-danger-bg, -10), 3%)"> + <h4>Info</h4> + <label>@state-info-text</label> + <input type="text" placeholder="#3a87ad"> + <label>@state-info-bg</label> + <input type="text" placeholder="#d9edf7"> + <label>@state-info-border</label> + <input type="text" placeholder="darken(spin(@state-info-bg, -10), 7%)"> + </div> + </div> + <h2 id="variables-alerts">Alerts</h2> + <p>Define alert colors and border radius.</p> + <h4>Border radius</h4> + <label>@alert-border-radius</label> + <input type="text" placeholder="@border-radius-base"> + <div class="row"> + <div class="col-lg-6"> + <h4>Success</h4> + <label>@alert-success-text</label> + <input type="text" placeholder="@state-success-text"> + <label>@alert-success-bg</label> + <input type="text" placeholder="@state-success-bg"> + <label>@alert-success-border</label> + <input type="text" placeholder="@state-success-border"> + <h4>Warning</h4> + <label>@alert-warning-text</label> + <input type="text" placeholder="@state-warning-text"> + <label>@alert-warning-bg</label> + <input type="text" placeholder="@state-warning-bg"> + <label>@alert-warning-border</label> + <input type="text" placeholder="@state-warning-border"> + </div> + <div class="col-lg-6"> + <h4>Danger</h4> + <label>@alert-danger-text</label> + <input type="text" placeholder="@state-danger-text"> + <label>@alert-danger-bg</label> + <input type="text" placeholder="@state-danger-bg"> + <label>@alert-danger-border</label> + <input type="text" placeholder="@state-danger-border"> + <h4>Info</h4> + <label>@alert-info-text</label> + <input type="text" placeholder="@state-info-text"> + <label>@alert-info-bg</label> + <input type="text" placeholder="@state-info-bg"> + <label>@alert-info-border</label> + <input type="text" placeholder="@state-info-border"> + </div> + </div> - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> + <h2 id="variables-navbar">Navbar</h2> + <div class="row"> + <div class="col-lg-6"> + <h3>Default navbar</h3> + <h4>Basics</h4> + <label>@navbar-height</label> + <input type="text" placeholder="50px"> + <label>@navbar-color</label> + <input type="text" placeholder="#777"> + <label>@navbar-bg</label> + <input type="text" placeholder="#eee"> + <h4>Links</h4> + <label>@navbar-link-color</label> + <input type="text" placeholder="#777"> + <label>@navbar-link-hover-color</label> + <input type="text" placeholder="#333"> + <label>@navbar-link-hover-bg</label> + <input type="text" placeholder="transparent"> + <label>@navbar-link-active-color</label> + <input type="text" placeholder="#555"> + <label>@navbar-link-active-bg</label> + <input type="text" placeholder="darken(@navbar-bg, 10%)"> + <label>@navbar-link-disabled-color</label> + <input type="text" placeholder="#ccc"> + <label>@navbar-link-disabled-bg</label> + <input type="text" placeholder="transparent"> + <h4>Brand</h4> + <label>@navbar-brand-color</label> + <input type="text" placeholder="@navbar-link-color"> + <label>@navbar-brand-hover-color</label> + <input type="text" placeholder="darken(@navbar-link-color, 10%)"> + <label>@navbar-brand-hover-bg</label> + <input type="text" placeholder="transparent"> + </div> + <div class="col-lg-6"> + <h3>Inverted navbar</h3> + <h4>Basics</h4> + <label>@navbar-inverse-color</label> + <input type="text" placeholder="@gray-light"> + <label>@navbar-inverse-bg</label> + <input type="text" placeholder="#222"> + <h4>Links</h4> + <label>@navbar-inverse-link-color</label> + <input type="text" placeholder="@gray-light"> + <label>@navbar-inverse-link-hover-color</label> + <input type="text" placeholder="#fff"> + <label>@navbar-inverse-link-hover-bg</label> + <input type="text" placeholder="transparent"> + <label>@navbar-inverse-link-active-color</label> + <input type="text" placeholder="@navbar-inverse-link-hover-color"> + <label>@navbar-inverse-link-active-bg</label> + <input type="text" placeholder="darken(@navbar-inverse-bg, 10%)"> + <label>@navbar-inverse-link-disabled-color</label> + <input type="text" placeholder="#444"> + <label>@navbar-inverse-link-disabled-bg</label> + <input type="text" placeholder="transparent"> + <h4>Brand</h4> + <label>@navbar-inverse-brand-color</label> + <input type="text" placeholder="@navbar-inverse-link-color"> + <label>@navbar-inverse-brand-hover-color</label> + <input type="text" placeholder="#fff"> + <label>@navbar-inverse-brand-hover-bg</label> + <input type="text" placeholder="transparent"> + </div> </div> - </footer> + <h2 id="variables-tables">Tables</h2> + <div class="row"> + <div class="col-lg-6"> + <label>@table-bg</label> + <input type="text" placeholder="transparent"> + <p class="help-block">Default background color used for all tables.</p> + <label>@table-bg-accent</label> + <input type="text" placeholder="#f9f9f9"> + <p class="help-block">Background color used for <code>.table-striped</code>.</p> + </div> + <div class="col-lg-6"> + <label>@table-bg-hover</label> + <input type="text" placeholder="#f5f5f5"> + <p class="help-block">Background color used for <code>.table-hover</code>.</p> + <label>@table-border-color</label> + <input type="text" placeholder="#ddd"> + <p class="help-block">Border color for table and cell borders.</p> + </div> + </div> - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> + <h2 id="variables-forms">Forms</h2> + <div class="row"> + <div class="col-lg-6"> + <h3>Background</h3> + <label>@input-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block"><code><input></code> background color</p> + <label>@input-bg-disabled</label> + <input type="text" placeholder="@gray-lighter"> + <p class="help-block"><code><input disabled></code>background color</p> - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> + <h3>Placeholder</h3> + <label>@input-color-placeholder</label> + <input type="text" placeholder="@gray-light"> + <p class="help-block">Placeholder text color</p> + </div> + <div class="col-lg-6"> + <h3>Border</h3> + <label>@input-border</label> + <input type="text" placeholder="#ccc"> + <p class="help-block"><code><input></code> border color</p> + <label>@input-border-radius</label> + <input type="text" placeholder="@border-radius-base"> + <p class="help-block"><code><input></code>border radius</p> + </div> + </div> - <script src="assets/js/application.js"></script> + <h2 id="variables-dropdowns">Dropdowns</h2> + <div class="row"> + <div class="col-lg-6"> + <h3>Background</h3> + <label>@dropdown-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Dropdown menu background color</p> + <label>@dropdown-link-active-bg</label> + <input type="text" placeholder="@component-active-bg"> + <p class="help-block">Active dropdown menu entry background color</p> + <label>@dropdown-link-hover-bg</label> + <input type="text" placeholder="@dropdown-link-active-bg"> + <p class="help-block">Hovered dropdown menu entry background color</p> + </div> + <div class="col-lg-6"> + <h3>Colors</h3> + <label>@dropdown-link-color</label> + <input type="text" placeholder="@gray-dark"> + <p class="help-block">Dropdown text color</p> + <label>@dropdown-link-active-color</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Active dropdown menu entry text color</p> + <label>@dropdown-link-hover-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Hovered dropdown menu entry text color</p> + </div> + </div> + <h3>Dividers</h3> + <div class="row"> + <div class="col-lg-6"> + <label>@dropdown-divider-top</label> + <input type="text" placeholder="#e5e5e5"> + <p class="help-block">Dropdown divider top border color</p> + <label>@dropdown-divider-bottom</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Dropdown divider bottom border color</p> + </div> + </div> + <h2 id="variables-panels-wells">Panels and wells</h2> + <h3>Default panel styles</h3> + <div class="row"> + <div class="col-lg-6"> + <label>@panel-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Panel body background color</p> + <label>@panel-heading-bg</label> + <input type="text" placeholder="#f5f5f5"> + <p class="help-block">Panel heading background color</p> + <label>@panel-footer-bg</label> + <input type="text" placeholder="#f5f5f5"> + <p class="help-block">Panel footer background color</p> + </div> + <div class="col-lg-6"> + <label>@panel-border</label> + <input type="text" placeholder="#ddd"> + <p class="help-block">Panel border color</p> + <label>@panel-border-radius</label> + <input type="text" placeholder="@border-radius-base"> + <p class="help-block">Panel border radius</p> + </div> + </div> + <h3>Contextual panel colors</h3> + <div class="row"> + <div class="col-lg-6"> + <h4>Primary</h4> + <label>@panel-primary-text</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Primary text color</p> + <label>@panel-primary-border</label> + <input type="text" placeholder="@brand-primary"> + <p class="help-block">Primary border color</p> + <label>@panel-primary-heading-bg</label> + <input type="text" placeholder="@brand-primary"> + <p class="help-block">Primary heading background color</p> + <h4>Success</h4> + <label>@panel-success-text</label> + <input type="text" placeholder="@state-success-text"> + <p class="help-block">Success text color</p> + <label>@panel-success-border</label> + <input type="text" placeholder="@state-success-border"> + <p class="help-block">Success border color</p> + <label>@panel-success-heading-bg</label> + <input type="text" placeholder="@state-success-bg"> + <p class="help-block">Success heading background color</p> + <h4>Info</h4> + <label>@panel-info-text</label> + <input type="text" placeholder="@state-info-text"> + <p class="help-block">Info text color</p> + <label>@panel-info-border</label> + <input type="text" placeholder="@state-info-border"> + <p class="help-block">Info border color</p> + <label>@panel-info-heading-bg</label> + <input type="text" placeholder="@state-info-bg"> + <p class="help-block">Info heading background color</p> + </div> + <div class="col-lg-6"> + <h4>Warning</h4> + <label>@panel-warning-text</label> + <input type="text" placeholder="@state-warning-text"> + <p class="help-block">Warning text color</p> + <label>@panel-warning-border</label> + <input type="text" placeholder="@state-warning-border"> + <p class="help-block">Warning border color</p> + <label>@panel-warning-heading-bg</label> + <input type="text" placeholder="@state-warning-bg"> + <p class="help-block">Warning heading background color</p> + <h4>Danger</h4> + <label>@panel-danger-text</label> + <input type="text" placeholder="@state-danger-text"> + <p class="help-block">Danger text color</p> + <label>@panel-danger-border</label> + <input type="text" placeholder="@state-danger-border"> + <p class="help-block">Danger border color</p> + <label>@panel-danger-heading-bg</label> + <input type="text" placeholder="@state-danger-bg"> + <p class="help-block">Danger heading background color</p> + </div> + </div> + <h3>Wells</h3> + <label>@well-bg</label> + <input type="text" placeholder="#f5f5f5"> - </body> -</html> + <h2 id="variables-jumbotron">Jumbotron</h2> + <div class="row"> + <div class="col-lg-4"> + <label>@jumbotron-bg</label> + <input type="text" placeholder="@gray-lighter"> + <p class="help-block">Jumbotron background color</p> + </div> + <div class="col-lg-4"> + <label>@jumbotron-heading-color</label> + <input type="text" placeholder="inherit"> + <p class="help-block">Jumbotron heading color</p> + </div> + <div class="col-lg-4"> + <label>@jumbotron-lead-color</label> + <input type="text" placeholder="inherit"> + <p class="help-block">Jumbotron lead paragraph color</p> + </div> + </div> + <h2 id="variables-modals">Modals</h2> + <div class="row"> + <div class="col-lg-4"> + <label>@modal-inner-padding</label> + <input type="text" placeholder="20px"> + <p class="help-block">Padding applied to the modal body</p> + </div> + <div class="col-lg-4"> + <label>@modal-title-padding</label> + <input type="text" placeholder="15px"> + <p class="help-block">Padding applied to the modal title</p> + </div> + <div class="col-lg-4"> + <label>@modal-title-line-height</label> + <input type="text" placeholder="@line-height-base"> + <p class="help-block">Modal title line-height</p> + </div> + </div> + <h2 id="variables-list-group">List group</h2> + <h3>Background</h3> + <div class="row"> + <div class="col-lg-4"> + <label>@list-group-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Default background color</p> + </div> + <div class="col-lg-4"> + <label>@list-group-hover-bg</label> + <input type="text" placeholder="#f5f5f5"> + <p class="help-block">Background color of single list elements on hover</p> + </div> + <div class="col-lg-4"> + <label>@list-group-active-bg</label> + <input type="text" placeholder="@component-active-bg"> + <p class="help-block">Background color of active list elements</p> + </div> + </div> + <h3>Borders</h3> + <div class="row"> + <div class="col-lg-4"> + <label>@list-group-border</label> + <input type="text" placeholder="#ddd"> + <p class="help-block">Default border color</p> + </div> + <div class="col-lg-4"> + <label>@list-group-border-radius</label> + <input type="text" placeholder="@border-radius-base"> + <p class="help-block">List group border radius</p> + </div> + <div class="col-lg-4"> + <label>@list-group-active-border</label> + <input type="text" placeholder="@list-group-active-bg"> + <p class="help-block">Border color of active list elements</p> + </div> + </div> + <label>@list-group-active-color</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Text color of active list elements</p> + <h2 id="variables-thumbnails">Thumbnails</h2> + <div class="row"> + <div class="col-lg-6"> + <label>@thumbnail-caption-color</label> + <input type="text" placeholder="@text-color"> + <p class="help-block">Custom text color for thumbnail captions</p> + <label>@thumbnail-bg</label> + <input type="text" placeholder="@body-bg"> + <p class="help-block">Thumbnail background color</p> + </div> + <div class="col-lg-6"> + <label>@thumbnail-border</label> + <input type="text" placeholder="#ddd"> + <p class="help-block">Thumbnail border color</p> + <label>@thumbnail-border-radius</label> + <input type="text" placeholder="@border-radius-base"> + <p class="help-block">Thumbnail border radius</p> + </div> + </div> + <h2 id="variables-progress">Progress bars</h2> + <div class="row"> + <div class="col-lg-4"> + <label>@progress-bg</label> + <input type="text" placeholder="#f5f5f5"> + <p class="help-block">Background color of the whole progress component</p> + </div> + <div class="col-lg-4"> + <label>@progress-bar-bg</label> + <input type="text" placeholder="@brand-primary"> + <p class="help-block">Default progress bar color</p> + </div> + <div class="col-lg-4"> + <label>@progress-bar-success-bg</label> + <input type="text" placeholder="@brand-success"> + <p class="help-block">Success progress bar color</p> + </div> + </div> + <div class="row"> + <div class="col-lg-4"> + <label>@progress-bar-warning-bg</label> + <input type="text" placeholder="@brand-warning"> + <p class="help-block">Warning progress bar color</p> + </div> + <div class="col-lg-4"> + <label>@progress-bar-danger-bg</label> + <input type="text" placeholder="@brand-danger"> + <p class="help-block">Danger progress bar color</p> + </div> + <div class="col-lg-4"> + <label>@progress-bar-info-bg</label> + <input type="text" placeholder="@brand-info"> + <p class="help-block">Info progress bar color</p> + </div> + </div> + <h2 id="variables-pagination">Pagination</h2> + <div class="row"> + <div class="col-lg-4"> + <label>@pagination-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Background color</p> + </div> + <div class="col-lg-4"> + <label>@pagination-border</label> + <input type="text" placeholder="#ddd"> + <p class="help-block">Border color</p> + </div> + <div class="col-lg-4"> + <label>@pagination-active-bg</label> + <input type="text" placeholder="#f5f5f5"> + <p class="help-block">Active background color</p> + </div> + </div> + + <h2 id="variables-labels">Labels</h2> + <div class="row"> + <div class="col-lg-6"> + <label>@label-success-bg</label> + <input type="text" placeholder="@brand-success"> + <p class="help-block">Success label background color</p> + <label>@label-info-bg</label> + <input type="text" placeholder="@brand-info"> + <p class="help-block">Info label background color</p> + </div> + <div class="col-lg-6"> + <label>@label-warning-bg</label> + <input type="text" placeholder="@brand-warning"> + <p class="help-block">Warning label background color</p> + <label>@label-danger-bg</label> + <input type="text" placeholder="@brand-danger"> + <p class="help-block">Danger label background color</p> + </div> + </div> + <h2 id="variables-tooltips-popovers">Tooltips and popovers</h2> + <h3>Tooltip styles</h3> + <div class="row"> + <div class="col-lg-6"> + <label>@tooltip-color</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Tooltip text color</p> + <label>@tooltip-bg</label> + <input type="text" placeholder="rgba(0,0,0,.9)"> + <p class="help-block">Tooltip background color</p> + </div> + <div class="col-lg-6"> + <label>@tooltip-arrow-width</label> + <input type="text" placeholder="5px"> + <p class="help-block">Tooltip arrow width</p> + <label>@tooltip-arrow-color</label> + <input type="text" placeholder="@tooltip-bg"> + <p class="help-block">Tooltip arrow color</p> + </div> + </div> + <h3>Popover styles</h3> + <div class="row"> + <div class="col-lg-6"> + <label>@popover-bg</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Popover body background color</p> + <label>@popover-title-bg</label> + <input type="text" placeholder="darken(@popover-bg, 3%)"> + <p class="help-block">Popover title background color</p> + </div> + <div class="col-lg-6"> + <label>@popover-arrow-width</label> + <input type="text" placeholder="10px"> + <p class="help-block">Popover arrow width</p> + <label>@popover-arrow-color</label> + <input type="text" placeholder="#fff"> + <p class="help-block">Popover arrow color</p> + </div> + </div> + <div class="row"> + <div class="col-lg-6"> + <label>@popover-arrow-outer-width</label> + <input type="text" placeholder="(@popover-arrow-width 1)"> + <p class="help-block">Popover outer arrow width</p> + </div> + <div class="col-lg-6"> + <label>@popover-arrow-outer-color</label> + <input type="text" placeholder="rgba(0,0,0,.25)"> + <p class="help-block">Popover outer arrow color</p> + </div> + </div> + <h2 id="variables-other">Other</h2> + <div class="row"> + <div class="col-lg-6"> + <label>@hr-border</label> + <input type="text" placeholder="@gray-lighter"> + <p class="help-block">Horizontal line color</p> + </div> + <div class="col-lg-6"> + <label>@component-offset-horizontal</label> + <input type="text" placeholder="180px"> + <p class="help-block">Horizontal offset for forms and lists</p> + </div> + </div> + </div> + + <div class="bs-docs-section" id="download"> + <div class="page-header"> + <h1>Download</h1> + </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> + </div> + <div class="bs-callout"> + <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> + </div><!-- /download --> + </form> diff --git a/docs/docs.html b/docs/docs.html new file mode 100644 index 0000000000000000000000000000000000000000..d0cd3b6705e9c41347fd7f3cd701a19fcedecbb8 --- /dev/null +++ b/docs/docs.html @@ -0,0 +1,6742 @@ +--- +layout: default +title: Bootstrap Documentation +--- + +<div class="bs-docs-container"> + + <!-- Welcome + ================================================== --> + <div id="welcome" class="bs-docs-section-header"> + <h1>Welcome</h1> + <p class="lead">Welcome to the Bootstrap documentation, the living, interactive style and code guide for all things Bootstrap. If you're new here, continue reading to learn how to get started. Otherwise, carry on you beautiful person you.</p> + </div> + + <!-- Getting started + ================================================== --> + <div class="bs-docs-section" id="getting-started"> + <div class="page-header"> + <h1>Getting started</h1> + </div> + <p class="lead">There are a few easy ways to quickly get started with Bootstrap, each one appealing to a different skill level and use case. Read through to see what suits your particular needs.</p> + + <h3>Download compiled CSS and JS</h3> + <p class="lead">The fastest way to get started is to get the compiled and minified versions of our CSS, JavaScript, and fonts. No documentation or original source files are included.</p> + <p><a class="btn btn-large btn-primary" href="assets/bootstrap.zip" onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download compiled']);">Download Bootstrap</a></p> + + <hr> + + <h3 id="download-options">More download options</h3> + <div class="bs-docs-dl-options"> + <h4> + <a href="https://github.com/twitter/bootstrap/zipball/master" onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download source']);">Download latest source code</a> + </h4> + <p>Get the original files for all CSS and JavaScript by downloading the latest version directly from GitHub.</p> + <h4> + <a href="https://github.com/twitter/bootstrap/" onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'GitHub project']);">Clone or fork via GitHub</a> + </h4> + <p>Clone the entire project or fork your own version of Bootstrap to make it your own by visiting us on GitHub.</p> + <h4> + Install with <a href="http://twitter.github.com/bower">Bower</a> + </h4> + <p>Install and manage the original files for all CSS and JavaScript, along with a local copy of the docs, using <a href="http://twitter.github.com/bower">Bower</a>.</p> + {% highlight bash %}$ bower install bootstrap{% endhighlight %} + </div> + + <hr> + + <h3 id="bootstrap-cdn">Use the Bootstrap CDN</h3> + <p>The folks over at <a href="https://www.netdna.com/">NetDNA</a> have graciously provided CDN support for Bootstrap's CSS and JavaScript. To use, swap your local instances for the <a href="http://www.bootstrapcdn.com/">Bootstrap CDN</a> links listed below.</p> +{% highlight html linenos %} +<!-- Latest compiled and minified CSS --> +<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> + +<!-- Latest compiled and minified JavaScript --> +<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> +{% endhighlight %} + </div> + + <!-- File structure + ================================================== --> + <div class="bs-docs-section" id="whats-included"> + <div class="page-header"> + <h1>What's included</h1> + </div> + <p class="lead">Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.</p> + <p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p> + +{% highlight bash %} + bootstrap/ + ├── css/ + │ ├── bootstrap.css + │ ├── bootstrap.min.css + ├── js/ + │ ├── bootstrap.js + │ ├── bootstrap.min.js + └── fonts/ + ├── glyphiconshalflings-regular.eot + ├── glyphiconshalflings-regular.otf + ├── glyphiconshalflings-regular.svg + ├── glyphiconshalflings-regular.ttf + └── glyphiconshalflings-regular.woff +{% 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-docs-sidenote"> + <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 + ================================================== --> + <div class="bs-docs-section" id="examples"> + <div class="page-header"> + <h1>Templates and examples</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> + + <h3>HTML template</h3> + <p>Copy and paste the HTML from below to get started with a bare bones Bootstrap document.</p> +{% highlight html %} +<!DOCTYPE html> +<html> + <head> + <title>Bootstrap 101 Template</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <!-- Bootstrap --> + <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> + </head> + <body> + <h1>Hello, world!</h1> + + <!-- JavaScript plugins (requires jQuery) --> + <script src="http://code.jquery.com/jquery.js"></script> + <!-- Include all compiled plugins (below), or include individual files as needed --> + <script src="js/bootstrap.min.js"></script> + + <!-- Optionally enable responsive features in IE8 --> + <script src="js/respond.js"></script> + </body> +</html> +{% endhighlight %} + + <h3>Examples</h3> + <div class="row bs-docs-examples"> + <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> + <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-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 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 col-lg-4"> + <a class="thumbnail" href="/examples/offcanvas/" target="_blank"> + <img src="/assets/img/examples/bootstrap-example-offcanvas.png" alt=""> + </a> + <h4>Offcanvas layout</h4> + <p>An offcanvas layout based on <a href="https://github.com/bradfrost/this-is-responsive/blob/gh-pages/patterns/layout-offcanvas-right.html" target="_blank">This Is Responsive</a> by <a href="https://github.com/bradfrost" target="_blank">Brad Frost</a>.</p> + </div> + </div> + </div> + + + + + <div class="bs-docs-section" id="customizing"> + <div class="page-header"> + <h1>Customizing Bootstrap</h1> + </div> + <p class="lead">Customizing Bootstrap is best accomplished when you treat it as another dependency in your development stack. Doing so ensures future upgrades are as easy as possible while also familiarizing yourself to the intricacies of the framework.</p> + + <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-docs-sidenote"> + <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> + + <p>From there, include whatever Bootstrap components and HTML content you need to get your template setup. It's best to have a rough idea in mind of modifications to make and content to include, so be sure to spend a brief amount of time on that before moving on.</p> + + <h3>Customizing components</h3> + <p>There are varying degrees to customizing components, but most fall into two camps: light customizations and complete visual overhauls. Luckily, there are plenty of examples of both.</p> + <p>We define light customizations as mostly surface layer changes, things like a color and font changes to existing Bootstrap components. A great example of this is the the <a href="http://translate.twitter.com">Twitter Translation Center</a> (coded by @mdo). Let's look at how to implement the custom button we wrote for this site, <code>.btn-ttc</code>.</p> + <p>Instead of using the provided Bootstrap buttons, which only require just one class to start, <code>.btn</code>, we'll add our own modifier class, <code>.btn-ttc</code>. This will give us a slightly custom look with minimal effort.</p> +{% highlight html %} +<button type="button" class="btn btn-ttc">Save changes</button> +{% endhighlight %} + + <p>In the custom stylesheet, add the following CSS:</p> + +{% highlight css %} +/* Custom button +-------------------------------------------------- */ + +/* Override base .btn styles */ +/* Apply text and background changes to three key states: default, hover, and active (click). */ +.btn-ttc, +.btn-ttc:hover, +.btn-ttc:active { + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #007da7; +} + +/* Apply the custom-colored gradients */ +/* Note: you'll need to include all the appropriate gradients for various browsers and standards. */ +.btn-ttc { + background-repeat: repeat-x; + background-image: linear-gradient(top, #009ED2 0%, #007DA7 100%); + ... +} + +/* Set the hover state */ +/* An easy hover state is just to move the gradient up a small amount. Add other embellishments as you see fit. */ +.btn-ttc:hover { + background-position: 0 -15px; +} +{% endhighlight %} + + <p>Customizing Bootstrap components takes time, but should be straightforward. <strong>Look to the source code often and duplicate the selectors you need for your modifications.</strong> Placing them after the Bootstrap source makes for easy overriding without complication. <strong>To recap, here's the basic workflow:</strong></p> + <ul> + <li>For each element you want to customize, find its code in the compiled Bootstrap CSS. Copy and paste the selector for a component as-is. For instance, to customize the navbar background, just snag <code>.navbar</code>.</li> + <li>Add all your custom CSS in a separate stylesheet using the selectors you just copied from the Bootstrap source. No need for prefacing with additional classes or using <code>!important</code> here.</li> + <li>Rinse and repeat until you're happy with your customizations.</li> + </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-docs-sidenote"> + <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> + + <h3>Removing potential bloat</h3> + <p>Not all sites and applications need to make use of everything Bootstrap has to offer, especially in production environments where bandwidth literally becomes a financial issue. We encourage folks to remove whatever is unused with our <a href="./customizer/">Customizer</a>.</p> + <p>Using the Customizer, simply uncheck any component, feature, or asset you don't need. Hit download and swap out the default Bootstrap files with these newly customized ones. You'll get vanilla Bootstrap, but without the features *you* deem unnecessary. All custom builds include compiled and minified versions, so use whichever works for you.</p> + + </div> + + + + + + <div class="bs-docs-section-header" id="css"> + <h1>CSS</h1> + <p class="lead">Fundamental HTML elements styled and enhanced with extensible classes.</p> + </div> + + <!-- Global Bootstrap settings + ================================================== --> + <div class="bs-docs-section" id="css-overview"> + <div class="page-header"> + <h1>Overview</h1> + </div> + <p class="lead">Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.</p> + + <h3>HTML5 doctype required</h3> + <p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p> +{% highlight html %} +<!DOCTYPE html> +<html lang="en"> + ... +</html> +{% endhighlight %} + + <h3>Mobile first</h3> + <p>With Bootstrap 2, we added optional mobile friendly styles for key aspects of the framework. With Bootstrap 3, we've rewritten the project to be mobile friendly from the start. Instead of adding on optional mobile styles, they're baked right into the core. In fact, <strong>Bootstrap is mobile first</strong>. Mobile first styles can be found throughout the entire library instead of in separate files.</p> + <p>To ensure proper rendering and touch zooming, <strong>add the viewport meta tag</strong> to your <code><head></code>.</p> +{% highlight html %} +<meta name="viewport" content="width=device-width, initial-scale=1.0"> +{% endhighlight %} + + <h3>Responsive images</h3> + <p>We automatically attempt to scale images to appropriate sizes with a global <code>max-width: 100%;</code> on all <code><img></code> elements. If you run into problems (e.g., with Google Maps), be sure to disable this property on a per-case basis.</p> + + <h3>Typography and links</h3> + <p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p> + <ul> + <li>Remove <code>margin</code> on the body</li> + <li>Set <code>background-color: white;</code> on the <code>body</code></li> + <li>Use the <code>@font-family-base</code>, <code>@font-size-base</code>, and <code>@line-height-base</code> attributes as our typographic base</li> + <li>Set the global link color via <code>@link-color</code> and apply link underlines only on <code>:hover</code></li> + </ul> + <p>These styles can be found within <strong>scaffolding.less</strong>.</p> + + <h3>Normalize reset</h3> + <p>For improved cross-browser rendering, we use <a href="http://necolas.github.com/normalize.css/" target="_blank">Normalize</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a>.</p> + </div> + + + + <!-- Grid system + ================================================== --> + <div class="bs-docs-section" id="grid"> + <div class="page-header"> + <h1>Grid system</h1> + </div> + <p class="lead">Bootstrap includes a responsive, percent-based grid system that appropriately scales up to 12 columns as the device or viewport size increases—in other words, it's mobile first. It includes <a href="#grid-example">predefined classes</a> for this, as well as powerful <a href="#grid-less">mixins for generating semantic layouts</a>.</p> + + <h3 id="grid-example">Grid example</h3> + <p>On mobile devices, the grid starts out stacked. Above 768px, it becomes horizontal as media queries kick in to apply <code>float</code>s and <code>width</code>s. To create a basic grid layout, wrap a series of <code>.col-span-*</code> elements within a <code>.row</code>. As this is a 12-column grid, each <code>.col-span-*</code> spans a number of those 12 columns, and should always add up to 12 for each row (or the number of columns in the parent), even at mobile resolutions.</p> + <div class="bs-docs-grid"> + <div class="row show-grid"> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + </div> + <div class="row show-grid"> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> + </div> + <div class="row show-grid"> + <div class="col-lg-6">6</div> + <div class="col-lg-6">6</div> + </div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> + <div class="col-lg-1">1</div> +</div> +<div class="row"> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> + <div class="col-lg-4">4</div> +</div> +<div class="row"> + <div class="col-lg-6">6</div> + <div class="col-lg-6">6</div> +</div> +{% endhighlight %} + + <h3 id="grid-offsetting">Offsetting columns</h3> + <p>Move columns to the right using <code>.col-offset-*</code> classes. These classes increase the left margin of a column by <code>*</code> columns. For example, <code>.col-offset-4</code> moves <code>.col-lg-4</code> over four columns.</p> + <div class="bs-docs-grid"> + <div class="row show-grid"> + <div class="col-lg-4">4</div> + <div class="col-lg-4 col-offset-4">4 offset 4</div> + </div><!-- /row --> + <div class="row show-grid"> + <div class="col-lg-3 col-offset-3">3 offset 3</div> + <div class="col-lg-3 col-offset-3">3 offset 3</div> + </div><!-- /row --> + <div class="row show-grid"> + <div class="col-lg-6 col-offset-3">6 offset 3</div> + </div><!-- /row --> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-4">...</div> + <div class="col-lg-4 col-offset-4">...</div> +</div> +<div class="row"> + <div class="col-lg-3 col-offset-3">3 offset 3</div> + <div class="col-lg-3 col-offset-3">3 offset 3</div> +</div> +<div class="row"> + <div class="col-lg-6 col-offset-3">...</div> +</div> +{% endhighlight %} + + + <h3 id="grid-nesting">Nesting columns</h3> + <p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.col-span-*</code> columns within an existing <code>.col-span-*</code> column. Nested rows should include a set of columns that add up to 12.</p> + <div class="row show-grid"> + <div class="col-lg-9"> + Level 1: 9 columns + <div class="row show-grid"> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + </div> + </div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-9"> + Level 1: 9 columns + <div class="row"> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + <div class="col-lg-6"> + Level 2: 6 columns + </div> + </div> + </div> +</div> +{% endhighlight %} + + <h3 id="grid-column-ordering">Column ordering</h3> + <p>Easily change the order of our built-in grid columns with <code>.col-push-*</code> and <code>.col-pull-*</code> modifier classes.</p> + <div class="row show-grid"> + <div class="col-lg-9 col-push-3">9</div> + <div class="col-lg-3 col-pull-9">3</div> + </div> + +{% highlight html %} +<div class="row show-grid"> + <div class="col-lg-9 col-push-3">9</div> + <div class="col-lg-3 col-pull-9">3</div> +</div> +{% endhighlight %} + + <h3 id="grid-small">Small device grid</h3> + <p>Use the small device grid classes, like <code>.col-sm-6</code>, to create columned layouts on phone and tablet devices (anything under 768px). Offsets, pushes, and pulls are not available with the small grid at this time.</p> + <div class="row show-grid"> + <div class="col-lg-4 col-sm-6">4 cols, 6 small cols</div> + <div class="col-lg-4 col-sm-6">4 cols, 6 small cols</div> + <div class="col-lg-4 col-sm-12">4 cols, 12 small cols</div> + </div> +{% highlight html %} +<div class="row"> + <div class="col-lg-4 col-sm-6">4 cols, 6 small cols</div> + <div class="col-lg-4 col-sm-6">4 cols, 6 small cols</div> + <div class="col-lg-4 col-sm-12">4 cols, 12 small cols</div> +</div> +{% 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> + + <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> +{% highlight css %} +@grid-columns: 12; +@grid-gutter-width: 30px; +@grid-float-breakpoint: 768px; +{% endhighlight %} + + <h4>Mixins</h4> + <p>Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.</p> +{% highlight css %} +// Creates a wrapper for a series of columns +.make-row() { + // Negative margin the row out to align the content of columns + margin-left: (@grid-gutter-width / -2); + margin-right: (@grid-gutter-width / -2); + // Then clear the floated columns + .clearfix(); +} + +// Generate the columns +.make-column(@columns) { + @media (min-width: @grid-float-breakpoint) { + float: left; + // Calculate width based on number of columns available + width: percentage(@columns / @grid-columns); + } + // Prevent columns from collapsing when empty + min-height: 1px; + // Set inner padding as gutters instead of margin + padding-left: (@grid-gutter-width / 2); + padding-right: (@grid-gutter-width / 2); +} + +// Generate the column offsets +.make-column-offset(@columns) { + @media (min-width: @grid-float-breakpoint) { + margin-left: percentage((@columns / @grid-columns)); + } +} +{% endhighlight %} + + <h4>Example usage</h4> + <p>You can modify the variables to your own custom values, or just use the mixins with their default values. Here's an example of using the default settings to create a two-column layout with a gap between.</p> +{% highlight css %} +.wrapper { + .make-row(); +} +.content-main { + .make-column(8); +} +.content-secondary { + .make-column(3); + .make-column-offset(1); +} +{% endhighlight %} +{% highlight html %} +<div class="wrapper"> + <div class="content-main">...</div> + <div class="content-secondary">...</div> +</div> +{% endhighlight %} + + </div> + + + + + <!-- Typography + ================================================== --> + <div class="bs-docs-section" id="type"> + <div class="page-header"> + <h1>Typography</h1> + </div> + + <!-- Headings --> + <h2 id="type-headings">Headings</h2> + <p>All HTML headings, <code><h1></code> through <code><h6></code> are available.</p> + + <div class="bs-docs-example bs-docs-example-type"> + <table class="table"> + <tbody> + <tr> + <th><h1>Bootstrap heading</h1></th> + <td>Semibold 38px</td> + </tr> + <tr> + <th><h2>Bootstrap heading</h2></th> + <td>Semibold 32px</td> + </tr> + <tr> + <th><h3>Bootstrap heading</h3></th> + <td>Semibold 24px</td> + </tr> + <tr> + <th><h4>Bootstrap heading</h4></th> + <td>Semibold 18px</td> + </tr> + <tr> + <th><h5>Bootstrap heading</h5></th> + <td>Semibold 16px</td> + </tr> + <tr> + <th><h6>Bootstrap heading</h6></th> + <td>Semibold 12px</td> + </tr> + </tbody> + </table> + </div> +{% highlight html %} +<h1>...</h1> +<h2>...</h2> +<h3>...</h3> +<h4>...</h4> +<h5>...</h5> +<h6>...</h6> +{% endhighlight %} + + <!-- Body copy --> + <h2 id="type-body-copy">Body copy</h2> + <p>Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>20px</strong>. This is applied to the <code><body></code> and all paragraphs. In addition, <code><p></code> (paragraphs) receive a bottom margin of half their line-height (10px by default).</p> + <div class="bs-docs-example"> + <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p> + <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p> + </div> +{% highlight html %} +<p>...</p> +{% endhighlight %} + + <!-- Body copy .lead --> + <h3>Lead body copy</h3> + <p>Make a paragraph stand out by adding <code>.lead</code>.</p> + <div class="bs-docs-example"> + <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p> + </div> +{% highlight html %} +<p class="lead">...</p> +{% endhighlight %} + + <!-- Using LESS --> + <h3>Built with Less</h3> + <p>The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@font-size-base</code> and <code>@line-height-base</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.</p> + + + <!-- Emphasis --> + <h2 id="type-emphasis">Emphasis</h2> + <p>Make use of HTML's default emphasis tags with lightweight styles.</p> + + <h3>Small text</h3> + <p>For de-emphasizing inline or blocks of text, use the <code><small></code> tag to set text at 85% the size of the parent. Heading elements receive their own <code>font-size</code> for nested <code><small></code> elements.</p> + <div class="bs-docs-example"> + <p><small>This line of text is meant to be treated as fine print.</small></p> + </div> +{% highlight html %} +<small>This line of text is meant to be treated as fine print.</small> +{% endhighlight %} + + + <h3>Bold</h3> + <p>For emphasizing a snippet of text with a heavier font-weight.</p> + <div class="bs-docs-example"> + <p>The following snippet of text is <strong>rendered as bold text</strong>.</p> + </div> +{% highlight html %} +<strong>rendered as bold text</strong> +{% endhighlight %} + + <h3>Italics</h3> + <p>For emphasizing a snippet of text with italics.</p> + <div class="bs-docs-example"> + <p>The following snippet of text is <em>rendered as italicized text</em>.</p> + </div> +{% highlight html %} +<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> + + <h3>Alignment classes</h3> + <p>Easily realign text to components with text alignment classes.</p> + <div class="bs-docs-example"> + <p class="text-left">Left aligned text.</p> + <p class="text-center">Center aligned text.</p> + <p class="text-right">Right aligned text.</p> + </div> +{% highlight html %} +<p class="text-left">Left aligned text.</p> +<p class="text-center">Center aligned text.</p> +<p class="text-right">Right aligned text.</p> +{% endhighlight %} + + <h3>Emphasis classes</h3> + <p>Convey meaning through color with a handful of emphasis utility classes.</p> + <div class="bs-docs-example"> + <p class="text-muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> + <p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> + <p class="text-danger">Donec ullamcorper nulla non metus auctor fringilla.</p> + <p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> + </div> +{% highlight html %} +<p class="text-muted">...</p> +<p class="text-warning">...</p> +<p class="text-danger">...</p> +<p class="text-success">...</p> +{% endhighlight %} + + + <!-- Abbreviations --> + <h2 id="type-abbreviations">Abbreviations</h2> + <p>Stylized implementation of HTML's <code><abbr></code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.</p> + + <h3>Basic abbreviation</h3> + <p>For expanded text on long hover of an abbreviation, include the <code>title</code> attribute with the <code><abbr></code> element.</p> + <div class="bs-docs-example"> + <p>An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.</p> + </div> +{% highlight html %} +<abbr title="attribute">attr</abbr> +{% endhighlight %} + + <h3>Initialism</h3> + <p>Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.</p> + <div class="bs-docs-example"> + <p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.</p> + </div> +{% highlight html %} +<abbr title="HyperText Markup Language" class="initialism">HTML</abbr> +{% endhighlight %} + + + <!-- Addresses --> + <h2 id="type-addresses">Addresses</h2> + <p>Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <code><br></code>.</p> + <div class="bs-docs-example"> + <address> + <strong>Twitter, Inc.</strong><br> + 795 Folsom Ave, Suite 600<br> + San Francisco, CA 94107<br> + <abbr title="Phone">P:</abbr> (123) 456-7890 + </address> + <address> + <strong>Full Name</strong><br> + <a href="mailto:#">first.last@example.com</a> + </address> + </div> +{% highlight html %} +<address> + <strong>Twitter, Inc.</strong><br> + 795 Folsom Ave, Suite 600<br> + San Francisco, CA 94107<br> + <abbr title="Phone">P:</abbr> (123) 456-7890 +</address> + +<address> + <strong>Full Name</strong><br> + <a href="mailto:#">first.last@example.com</a> +</address> +{% endhighlight %} + + + <!-- Blockquotes --> + <h2 id="type-blockquotes">Blockquotes</h2> + <p>For quoting blocks of content from another source within your document.</p> + + <h3>Default blockquote</h3> + <p>Wrap <code><blockquote></code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code><p></code>.</p> + <div class="bs-docs-example"> + <blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + </blockquote> + </div> +{% highlight html %} +<blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> +</blockquote> +{% endhighlight %} + + <h3>Blockquote options</h3> + <p>Style and content changes for simple variations on a standard blockquote.</p> + + <h4>Naming a source</h4> + <p>Add <code><small></code> tag for identifying the source. Wrap the name of the source work in <code><cite></code>.</p> + <div class="bs-docs-example"> + <blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + <small>Someone famous in <cite title="Source Title">Source Title</cite></small> + </blockquote> + </div> +{% highlight html %} +<blockquote> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + <small>Someone famous <cite title="Source Title">Source Title</cite></small> +</blockquote> +{% endhighlight %} + + <h4>Alternate displays</h4> + <p>Use <code>.pull-right</code> for a floated, right-aligned blockquote.</p> + <div class="bs-docs-example" style="overflow: hidden;"> + <blockquote class="pull-right"> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> + <small>Someone famous in <cite title="Source Title">Source Title</cite></small> + </blockquote> + </div> +{% highlight html %} +<blockquote class="pull-right"> + ... +</blockquote> +{% endhighlight %} + + + <!-- Lists --> + <h2 id="type-lists">Lists</h2> + + <h3>Unordered</h3> + <p>A list of items in which the order does <em>not</em> explicitly matter.</p> + <div class="bs-docs-example"> + <ul> + <li>Lorem ipsum dolor sit amet</li> + <li>Consectetur adipiscing elit</li> + <li>Integer molestie lorem at massa</li> + <li>Facilisis in pretium nisl aliquet</li> + <li>Nulla volutpat aliquam velit + <ul> + <li>Phasellus iaculis neque</li> + <li>Purus sodales ultricies</li> + <li>Vestibulum laoreet porttitor sem</li> + <li>Ac tristique libero volutpat at</li> + </ul> + </li> + <li>Faucibus porta lacus fringilla vel</li> + <li>Aenean sit amet erat nunc</li> + <li>Eget porttitor lorem</li> + </ul> + </div> +{% highlight html %} +<ul> + <li>...</li> +</ul> +{% endhighlight %} + + <h3>Ordered</h3> + <p>A list of items in which the order <em>does</em> explicitly matter.</p> + <div class="bs-docs-example"> + <ol> + <li>Lorem ipsum dolor sit amet</li> + <li>Consectetur adipiscing elit</li> + <li>Integer molestie lorem at massa</li> + <li>Facilisis in pretium nisl aliquet</li> + <li>Nulla volutpat aliquam velit</li> + <li>Faucibus porta lacus fringilla vel</li> + <li>Aenean sit amet erat nunc</li> + <li>Eget porttitor lorem</li> + </ol> + </div> +{% highlight html %} +<ol> + <li>...</li> +</ol> +{% endhighlight %} + + <h3>Unstyled</h3> + <p>Remove the default <code>list-style</code> and left margin on list items (immediate children only). <strong>This only applies to immediate children list items</strong>, meaning you will need to add the class for any nested lists as well.</p> + <div class="bs-docs-example"> + <ul class="list-unstyled"> + <li>Lorem ipsum dolor sit amet</li> + <li>Consectetur adipiscing elit</li> + <li>Integer molestie lorem at massa</li> + <li>Facilisis in pretium nisl aliquet</li> + <li>Nulla volutpat aliquam velit + <ul> + <li>Phasellus iaculis neque</li> + <li>Purus sodales ultricies</li> + <li>Vestibulum laoreet porttitor sem</li> + <li>Ac tristique libero volutpat at</li> + </ul> + </li> + <li>Faucibus porta lacus fringilla vel</li> + <li>Aenean sit amet erat nunc</li> + <li>Eget porttitor lorem</li> + </ul> + </div> +{% highlight html %} +<ul class="list-unstyled"> + <li>...</li> +</ul> +{% endhighlight %} + + <h3>Inline</h3> + <p>Place all list items on a single line with <code>inline-block</code> and some light padding.</p> + <div class="bs-docs-example"> + <ul class="list-inline"> + <li>Lorem ipsum</li> + <li>Phasellus iaculis</li> + <li>Nulla volutpat</li> + </ul> + </div> +{% highlight html %} +<ul class="list-inline"> + <li>...</li> +</ul> +{% endhighlight %} + + <h3>Description</h3> + <p>A list of terms with their associated descriptions.</p> + <div class="bs-docs-example"> + <dl> + <dt>Description lists</dt> + <dd>A description list is perfect for defining terms.</dd> + <dt>Euismod</dt> + <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> + <dd>Donec id elit non mi porta gravida at eget metus.</dd> + <dt>Malesuada porta</dt> + <dd>Etiam porta sem malesuada magna mollis euismod.</dd> + </dl> + </div> +{% highlight html %} +<dl> + <dt>...</dt> + <dd>...</dd> +</dl> +{% endhighlight %} + + <h4>Horizontal description</h4> + <p>Make terms and descriptions in <code><dl></code> line up side-by-side.</p> + <div class="bs-docs-example"> + <dl class="dl-horizontal"> + <dt>Description lists</dt> + <dd>A description list is perfect for defining terms.</dd> + <dt>Euismod</dt> + <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> + <dd>Donec id elit non mi porta gravida at eget metus.</dd> + <dt>Malesuada porta</dt> + <dd>Etiam porta sem malesuada magna mollis euismod.</dd> + <dt>Felis euismod semper eget lacinia</dt> + <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd> + </dl> + </div> +{% highlight html %} +<dl class="dl-horizontal"> + <dt>...</dt> + <dd>...</dd> +</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> + + + <!-- Code + ================================================== --> + <div class="bs-docs-section" id="code"> + <div class="page-header"> + <h1>Code</h1> + </div> + + <h2>Inline</h2> + <p>Wrap inline snippets of code with <code><code></code>.</p> +<div class="bs-docs-example"> + For example, <code><section></code> should be wrapped as inline. +</div> +{% highlight html %} +For example, <code><section></code> should be wrapped as inline. +{% endhighlight %} + + <h2>Basic block</h2> + <p>Use <code><pre></code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.</p> +<div class="bs-docs-example"> + <pre><p>Sample text here...</p></pre> +</div> +{% highlight html %} +<pre><p>Sample text here...</p></pre> +{% endhighlight %} + + <p>You may optionally add the <code>.pre-scrollable</code> class which will set a max-height of 350px and provide a y-axis scrollbar.</p> + </div> + + + + <!-- Tables + ================================================== --> + <div class="bs-docs-section" id="tables"> + <div class="page-header"> + <h1>Tables</h1> + </div> + + <h2 id="tables-example">Basic example</h2> + <p>For basic styling—light padding and only horizontal dividers—add the base class <code>.table</code> to any <code><table></code>. It may seem super redundant, but given the widespread use of tables for other plugins like calendars and date pickers, we've opted to isolate our custom table styles.</p> + <div class="bs-docs-example"> + <table class="table"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td>Larry</td> + <td>the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table"> + ... +</table> +{% endhighlight %} + + + <h2>Optional classes</h2> + <p>Add any of the following classes to the <code>.table</code> base class.</p> + + <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-docs-sidenote"> + <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> + <div class="bs-docs-example"> + <table class="table table-striped"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td>Larry</td> + <td>the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-striped"> + ... +</table> +{% endhighlight %} + + <h3 id="tables-bordered">Bordered</h3> + <p>Add <code>.table-bordered</code> for borders and rounded corners.</p> + <div class="bs-docs-example"> + <table class="table table-bordered"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td rowspan="2">1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>Mark</td> + <td>Otto</td> + <td>@TwBootstrap</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td colspan="2">Larry the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-bordered"> + ... +</table> +{% endhighlight %} + + <h3 id="tables-hover-rows">Hover rows</h3> + <p>Add <code>.table-hover</code> to enable a hover state on table rows within a <code><tbody></code>.</p> + <div class="bs-docs-example"> + <table class="table table-hover"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td colspan="2">Larry the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-hover"> + ... +</table> +{% endhighlight %} + + + <h3 id="tables-condensed">Condensed</h3> + <p>Add <code>.table-condensed</code> to make tables more compact by cutting cell padding in half.</p> + <div class="bs-docs-example"> + <table class="table table-condensed"> + <thead> + <tr> + <th>#</th> + <th>First Name</th> + <th>Last Name</th> + <th>Username</th> + </tr> + </thead> + <tbody> + <tr> + <td>1</td> + <td>Mark</td> + <td>Otto</td> + <td>@mdo</td> + </tr> + <tr> + <td>2</td> + <td>Jacob</td> + <td>Thornton</td> + <td>@fat</td> + </tr> + <tr> + <td>3</td> + <td colspan="2">Larry the Bird</td> + <td>@twitter</td> + </tr> + </tbody> + </table> + </div><!-- /example --> +{% highlight html %} +<table class="table table-condensed"> + ... +</table> +{% endhighlight %} + + + + <h2 id="tables-row-classes">Optional row classes</h2> + <p>Use contextual classes to color table rows.</p> + <table class="table table-bordered table-striped"> + <colgroup> + <col class="col-lg-1"> + <col class="col-lg-7"> + </colgroup> + <thead> + <tr> + <th>Class</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td> + <code>.success</code> + </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> + </tr> + <tr> + <td> + <code>.warning</code> + </td> + <td>Indicates a warning that might need attention.</td> + </tr> + <tr> + <td> + <code>.info</code> + </td> + <td>Used as an alternative to the default styles.</td> + </tr> + </tbody> + </table> + <div class="bs-docs-example"> + <table class="table"> + <thead> + <tr> + <th>#</th> + <th>Product</th> + <th>Payment Taken</th> + <th>Status</th> + </tr> + </thead> + <tbody> + <tr class="success"> + <td>1</td> + <td>TB - Monthly</td> + <td>01/04/2012</td> + <td>Approved</td> + </tr> + <tr class="danger"> + <td>2</td> + <td>TB - Monthly</td> + <td>02/04/2012</td> + <td>Declined</td> + </tr> + <tr class="warning"> + <td>3</td> + <td>TB - Monthly</td> + <td>03/04/2012</td> + <td>Pending</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> +</tr> +... +{% endhighlight %} + + </div> + + + + <!-- Forms + ================================================== --> + <div class="bs-docs-section" id="forms"> + <div class="page-header"> + <h1>Forms</h1> + </div> + + <h2 id="forms-example">Basic example</h2> + <p>Individual form controls automatically receive some global styling. By default, inputs are set to <code>width: 100%;</code>.</p> + <form class="bs-docs-example"> + <fieldset> + <legend>Legend</legend> + <label>Label name</label> + <input type="text" placeholder="Type something…"> + <p class="help-block">Example block-level help text here.</p> + <div class="checkbox"> + <label> + <input type="checkbox"> Check me out + </label> + </div> + <button type="submit" class="btn">Submit</button> + </fieldset> + </form><!-- /example --> +{% highlight html %} +<form> + <fieldset> + <legend>Legend</legend> + <label>Label name</label> + <input type="text" placeholder="Type something…"> + <p class="help-block">Example block-level help text here.</p> + <div class="checkbox"> + <label> + <input type="checkbox"> Check me out + </label> + </div> + <button type="submit" class="btn">Submit</button> + </fieldset> +</form> +{% endhighlight %} + + + <h2>Optional layouts</h2> + <p>Included with Bootstrap are optional form layouts for common use cases.</p> + + <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-docs-sidenote"> + <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> + <form class="bs-docs-example form-inline"> + <input type="text" placeholder="Email" style="width: 180px;"> + <input type="password" placeholder="Password" style="width: 180px;"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + <button type="submit" class="btn">Sign in</button> + </form><!-- /example --> +{% highlight html %} +<form class="form-inline"> + <input type="text" placeholder="Email" style="width: 180px;"> + <input type="password" placeholder="Password" style="width: 180px;"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + <button type="submit" class="btn">Sign in</button> +</form> +{% endhighlight %} + + <h3 id="forms-horizontal">Horizontal form</h3> + <p>Right align labels and float them to the left to make them appear on the same line as controls. Requires the most markup changes from a default form:</p> + <ul> + <li>Add <code>.form-horizontal</code> to the form</li> + <li>Wrap labels and controls in <code>.control-group</code></li> + <li>Add <code>.control-label</code> to the label</li> + <li>Wrap any associated controls in <code>.controls</code> for proper alignment</li> + </ul> + <form class="bs-docs-example form-horizontal"> + <div class="control-group"> + <label class="control-label" for="inputEmail">Email</label> + <div class="controls"> + <input type="text" id="inputEmail" placeholder="Email"> + </div> + </div> + <div class="control-group"> + <label class="control-label" for="inputPassword">Password</label> + <div class="controls"> + <input type="password" id="inputPassword" placeholder="Password"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + </div> + </div> + <div class="control-group"> + <div class="controls"> + <button type="submit" class="btn">Sign in</button> + </div> + </div> + </form> +{% highlight html %} +<form class="form-horizontal"> + <div class="control-group"> + <label class="control-label" for="inputEmail">Email</label> + <div class="controls"> + <input type="text" id="inputEmail" placeholder="Email"> + </div> + </div> + <div class="control-group"> + <label class="control-label" for="inputPassword">Password</label> + <div class="controls"> + <input type="password" id="inputPassword" placeholder="Password"> + <div class="checkbox"> + <label> + <input type="checkbox"> Remember me + </label> + </div> + </div> + </div> + <div class="control-group"> + <div class="controls"> + <button type="submit" class="btn">Sign in</button> + </div> + </div> +</form> +{% endhighlight %} + + + <h2 id="forms-controls">Supported form controls</h2> + <p>Examples of standard form controls supported in an example form layout.</p> + + <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-docs-sidenote"> + <h4>Type declaration required</h4> + <p>Inputs will only be fully styled if their <code>type</code> is properly declared.</p> + </div> + <form class="bs-docs-example form-inline"> + <input type="text" placeholder="Text input"> + </form> +{% highlight html %} +<input type="text" placeholder="Text input"> +{% endhighlight %} + + <h3>Textarea</h3> + <p>Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.</p> + <form class="bs-docs-example form-inline"> + <textarea rows="3"></textarea> + </form> +{% highlight html %} +<textarea rows="3"></textarea> +{% endhighlight %} + + <h3>Checkboxes and radios</h3> + <p>Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.</p> + <h4>Default (stacked)</h4> + <form class="bs-docs-example"> + <div class="checkbox"> + <label> + <input type="checkbox" value=""> + Option one is this and that—be sure to include why it's great + </label> + </div> + <br> + <div class="radio"> + <label> + <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> + Option one is this and that—be sure to include why it's great + </label> + </div> + <div class="radio"> + <label> + <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> + Option two can be something else and selecting it will deselect option one + </label> + </div> + </form> +{% highlight html %} +<div class="checkbox"> + <label> + <input type="checkbox" value=""> + Option one is this and that—be sure to include why it's great + </label> +</div> + +<div class="radio"> + <label> + <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> + Option one is this and that—be sure to include why it's great + </label> +</div> +{% endhighlight %} + + <h4>Inline checkboxes</h4> + <p>Use <code>.checkbox-inline</code> or <code>.radio-inline</code> class to a series of checkboxes or radios for controls appear on the same line.</p> + <form class="bs-docs-example"> + <label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 + </label> + <label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 + </label> + <label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 + </label> + </form> +{% highlight html %} +<label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 +</label> +<label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 +</label> +<label class="checkbox-inline"> + <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 +</label> +{% endhighlight %} + + <h3>Selects</h3> + <p>Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.</p> + <form class="bs-docs-example"> + <select> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> + </select> + <br> + <select multiple="multiple"> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> + </select> + </form> +{% highlight html %} +<select> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> +</select> + +<select multiple="multiple"> + <option>1</option> + <option>2</option> + <option>3</option> + <option>4</option> + <option>5</option> +</select> +{% endhighlight %} + + + + <h2 id="forms-control-states">Form control states</h2> + <p>Provide feedback to users or visitors with basic feedback states on form controls and labels.</p> + + <h3 id="forms-input-focus">Input focus</h3> + <p>We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.</p> + <form class="bs-docs-example form-inline"> + <input class="focused" id="focusedInput" type="text" value="This is focused..."> + </form> +{% highlight html %} +<input id="focusedInput" type="text" value="This is focused..."> +{% endhighlight %} + + <h3 id="forms-invalid-inputs">Invalid inputs</h3> + <p>Style inputs via default browser functionality. Specify a <code>type</code>, add the <code>required</code> attribute if the field is not optional, and (if applicable) specify a <code>pattern</code>.</p> + + <div class="bs-docs-sidenote"> + <h4>Cross-browser compatibility</h4> + <p>Invalid inputs are styled via the <code>:invalid</code> CSS selector, which is not supported by Internet Explorer 9 and below.</p> + </div> + + <form class="bs-docs-example form-inline"> + <input class="col-lg-3" type="email" placeholder="test@example.com" required> + </form> +{% highlight html %} +<input class="col-lg-3" type="email" placeholder="test@example.com" required> +{% endhighlight %} + + <h3 id="forms-disabled-inputs">Disabled inputs</h3> + <p>Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.</p> + <form class="bs-docs-example form-inline"> + <input class="input-xlarge" id="disabledInput" type="text" placeholder="Disabled input here…" disabled> + </form> +{% highlight html %} +<input id="disabledInput" type="text" placeholder="Disabled input here..." disabled> +{% endhighlight %} + + <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-docs-sidenote"> + <h4>Link functionality of <code><a></code> not impacted</h4> + <p>This class will only change the appearance of <code><a class="btn"></code> buttons, not their functionality. Use custom JavaScript to disable links here.</p> + </div> + + <div class="bs-docs-sidenote"> + <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> + + <form class="bs-docs-example form-inline"> + <fieldset disabled> + <div> + <input type="text" class="col-lg-4" placeholder="Disabled input"> + </div> + <div> + <select class="col-lg-4"> + <option>Disabled select</option> + </select> + </div> + <div class="checkbox"> + <label> + <input type="checkbox"> Can't check this + </label> + </div> + <button type="submit" class="btn btn-primary">Submit</button> + </fieldset> + </form> +{% highlight html %} +<form class="form-inline"> + <fieldset disabled> + <div> + <input type="text" class="col-lg-4" placeholder="Disabled input"> + </div> + <div> + <select class="col-lg-4"> + <option>Disabled select</option> + </select> + </div> + <div class="checkbox"> + <label> + <input type="checkbox"> Can't check this + </label> + </div> + <button type="submit" class="btn btn-primary">Submit</button> + </fieldset> +</form> +{% endhighlight %} + + <h3 id="forms-validation">Validation states</h3> + <p>Bootstrap includes validation styles for error, warning, info, and success messages. To use:</p> + <ul> + <li>Add <code>.has-warning</code>, <code>.has-error</code>, or <code>.has-success</code> to the parent element</li> + <li>Add .input-with-feedback to the field(s) in question</li> + </ul> + <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-docs-example form-horizontal"> + <div class="control-group 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"> + <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"> + <label class="control-label" for="inputSuccess">Input with success</label> + <div class="controls"> + <input type="text" class="input-with-feedback" id="inputSuccess"> + </div> + </div> + </form> +{% highlight html %} +<div class="control-group 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"> + <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"> + <label class="control-label" for="inputSuccess">Input with success</label> + <div class="controls"> + <input type="text" class="input-with-feedback" id="inputSuccess"> + </div> +</div> +{% endhighlight %} + + + + <h2 id="forms-extending">Extending form controls</h2> + <p>Adding on top of existing browser controls, Bootstrap includes other useful form components.</p> + + <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 a <code>.add-on</code> to prepend or append elements to an <code><input></code>.</p> + + <div class="bs-docs-sidenote"> + <h4>Cross-browser compatibility</h4> + <p>Avoid using <code><select></code> elements here as they cannot be fully styled in WebKit browsers.</p> + </div> + + <form class="bs-docs-example"> + <div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> + </div> + <br> + <div class="input-group col-lg-6"> + <input type="text"> + <span class="input-group-addon">.00</span> + </div> + <br> + <div class="input-group col-lg-3"> + <span class="input-group-addon">$</span> + <input type="text"> + <span class="input-group-addon">.00</span> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> +</div> + +<div class="input-group col-lg-6"> + <input type="text"> + <span class="input-group-addon">.00</span> +</div> + +<div class="input-group col-lg-3"> + <span class="input-group-addon">$</span> + <input type="text"> + <span class="input-group-addon">.00</span> +</div> +{% endhighlight %} + + <h4>Optional sizes</h4> + <p>Add the relative form sizing classes to the `.input-group-addon`.</p> + <form class="bs-docs-example"> + <div class="input-group col-lg-9"> + <span class="input-group-addon input-large">@</span> + <input type="text" class="input-large" placeholder="Username"> + </div> + <br> + <div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> + </div> + <br> + <div class="input-group col-lg-9"> + <span class="input-group-addon input-small">@</span> + <input type="text" class="input-small" placeholder="Username"> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-9"> + <span class="input-group-addon input-large">@</span> + <input type="text" class="input-large" placeholder="Username"> +</div> + +<div class="input-group col-lg-9"> + <span class="input-group-addon">@</span> + <input type="text" placeholder="Username"> +</div> + +<div class="input-group col-lg-9"> + <span class="input-group-addon input-small">@</span> + <input type="text" class="input-small" placeholder="Username"> +</div> +{% endhighlight %} + + <h4>Buttons instead of text</h4> + <p>Buttons in input groups are a bit different and require one extra level of nesting. Instead of <code>.input-group-addon</code>, you'll need to use <code>.input-group-btn</code> to wrap the buttons. This is required due to default browser styles that cannot be overridden.</p> + <form class="bs-docs-example"> + <div class="input-group col-lg-7"> + <span class="input-group-btn"> + <button class="btn" type="button">Go!</button> + </span> + <input type="text"> + </div> + <br> + <div class="input-group col-lg-7"> + <input type="text"> + <span class="input-group-btn"> + <button class="btn" type="button">Go!</button> + </span> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-7"> + <span class="input-group-btn"> + <button class="btn" type="button">Go!</button> + </span> + <input type="text"> +</div> + +<div class="input-group col-lg-7"> + <input type="text"> + <span class="input-group-btn"> + <button class="btn" type="button">Go!</button> + </span> +</div> +{% endhighlight %} + + <h4>Button dropdowns</h4> + <p></p> + <form class="bs-docs-example"> + <div class="input-group col-lg-7"> + <div class="input-group-btn"> + <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <input type="text"> + </div><!-- /input-group --> + <br> + <div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn"> + <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div><!-- /input-group --> + </form> +{% highlight html %} +<div class="input-group col-lg-7"> + <div class="input-group-btn"> + <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <input type="text"> +</div><!-- /input-group --> + +<div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn"> + <button class="btn dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> +</div><!-- /input-group --> +{% endhighlight %} + + <h4>Segmented dropdown groups</h4> + <form class="bs-docs-example"> + <div class="input-group col-lg-7"> + <div class="input-group-btn"> + <button class="btn" tabindex="-1">Action</button> + <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div> + <input type="text"> + </div> + + <br> + + <div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn"> + <button class="btn" tabindex="-1">Action</button> + <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div> + </div> + </form> +{% highlight html %} +<div class="input-group col-lg-7"> + <div class="input-group-btn"> + <!-- Button and dropdown menu --> + </div> + <input type="text"> +</div> + +<div class="input-group col-lg-7"> + <input type="text"> + <div class="input-group-btn btn-group"> + <!-- Button and dropdown menu --> + </div> +</div> +{% endhighlight %} + + <h3 id="forms-control-sizes">Control sizing</h3> + <p>Use relative sizing classes like <code>.input-large</code> or match your inputs to the grid column sizes using <code>.col-span-*</code> classes.</p> + + <h4>Relative sizing</h4> + <p>Create larger or smaller form controls that match button sizes.</p> + <form class="bs-docs-example" style="padding-bottom: 15px;"> + <div class="controls docs-input-sizes"> + <input class="input-large" type="text" placeholder=".input-large"> + <input type="text" placeholder="Default input"> + <input class="input-small" type="text" placeholder=".input-small"> + </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"> +{% endhighlight %} + + <h4>Column sizing</h4> + <p>Wrap inputs in grid columns, or any custom parent element, to easily enforce desired widths.</p> + <form class="bs-docs-example" style="padding-bottom: 15px;"> + <div class="row"> + <div class="col-lg-2"> + <input type="text" placeholder="col-large-2"> + </div> + <div class="col-lg-3"> + <input type="text" placeholder="col-large-3"> + </div> + <div class="col-lg-4"> + <input type="text" placeholder="col-large-4"> + </div> + </div> + </form> +{% highlight html %} +<div class="row"> + <div class="col-lg-2"> + <input type="text" placeholder="col-large-2"> + </div> + <div class="col-lg-3"> + <input type="text" placeholder="col-large-3"> + </div> + <div class="col-lg-4"> + <input type="text" placeholder="col-large-4"> + </div> +</div> +{% endhighlight %} + + <h3 id="forms-actions">Form actions</h3> + <p>End a form with a group of actions (buttons). When placed within a <code>.form-horizontal</code>, the buttons will automatically indent to line up with the form controls.</p> + <form class="bs-docs-example"> + <div class="form-actions"> + <button type="submit" class="btn btn-primary">Save changes</button> + <button type="button" class="btn">Cancel</button> + </div> + </form> +{% highlight html %} +<div class="form-actions"> + <button type="submit" class="btn btn-primary">Save changes</button> + <button type="button" class="btn">Cancel</button> +</div> +{% endhighlight %} + + <h3 id="forms-help-text">Help text</h3> + <p>Inline and block level support for help text that appears around form controls.</p> + <h4>Inline help</h4> + <form class="bs-docs-example form-inline"> + <input type="text"> <span class="help-inline">Inline help text</span> + </form> +{% highlight html %} +<input type="text"> +<span class="help-inline">Inline help text</span> +{% endhighlight %} + + <h4>Block help</h4> + <form class="bs-docs-example form-inline"> + <input type="text"> + <span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> + </form> +{% highlight html %} +<input type="text"> +<span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> +{% endhighlight %} + + </div> + + + + <!-- Buttons + ================================================== --> + <div class="bs-docs-section" id="buttons"> + <div class="page-header"> + <h1>Buttons</h1> + </div> + + <h2 id="buttons-options">Button options</h2> + <p>Use any of the available button classes to quickly create a styled button.</p> + <div class="bs-docs-example"> + <button type="button" class="btn btn-default">Default</button> + <button type="button" class="btn btn-primary">Primary</button> + <button type="button" class="btn btn-success">Success</button> + <button type="button" class="btn btn-info">Info</button> + <button type="button" class="btn btn-warning">Warning</button> + <button type="button" class="btn btn-danger">Danger</button> + <button type="button" class="btn btn-link">Link</button> + </div> +{% highlight html %} +<!-- Standard gray button with gradient --> +<button type="button" class="btn btn-default">Default</button> + +<!-- Provides extra visual weight and identifies the primary action in a set of buttons --> +<button type="button" class="btn btn-primary">Primary</button> + +<!-- Indicates a successful or positive action --> +<button type="button" class="btn btn-success">Success</button> + +<!-- Contextual button for informational alert messages --> +<button type="button" class="btn btn-info">Info</button> + +<!-- Indicates caution should be taken with this action --> +<button type="button" class="btn btn-warning">Warning</button> + +<!-- Indicates a dangerous or potentially negative action --> +<button type="button" class="btn btn-danger">Danger</button> + +<!-- Deemphasize a button by making it look like a link while maintaining button behavior --> +<button type="button" class="btn btn-link">Link</button> +{% endhighlight %} + + <h2 id="buttons-sizes">Button sizes</h2> + <p>Fancy larger or smaller buttons? Add <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code> for additional sizes.</p> + <div class="bs-docs-example"> + <p> + <button type="button" class="btn btn-primary btn-large">Large button</button> + <button type="button" class="btn btn-default btn-large">Large button</button> + </p> + <p> + <button type="button" class="btn btn-primary">Default button</button> + <button type="button" class="btn btn-default">Default button</button> + </p> + <p> + <button type="button" class="btn btn-primary btn-small">Small button</button> + <button type="button" class="btn btn-default btn-small">Small button</button> + </p> + <p> + <button type="button" class="btn btn-primary btn-mini">Mini button</button> + <button type="button" class="btn btn-default btn-mini">Mini button</button> + </p> + </div> +{% highlight html %} +<p> + <button type="button" class="btn btn-primary btn-large">Large button</button> + <button type="button" class="btn btn-default btn-large">Large button</button> +</p> +<p> + <button type="button" class="btn btn-primary">Default button</button> + <button type="button" class="btn btn-default">Default button</button> +</p> +<p> + <button type="button" class="btn btn-primary btn-small">Small button</button> + <button type="button" class="btn btn-default btn-small">Small button</button> +</p> +<p> + <button type="button" class="btn btn-primary btn-mini">Mini button</button> + <button type="button" class="btn btn-default btn-mini">Mini button</button> +</p> +{% endhighlight %} + + <p>Create block level buttons—those that span the full width of a parent— by adding <code>.btn-block</code>.</p> + <div class="bs-docs-example"> + <div class="well" style="max-width: 400px; margin: 0 auto 10px;"> + <button type="button" class="btn btn-primary btn-large btn-block">Block level button</button> + <button type="button" class="btn btn-default btn-large btn-block">Block level button</button> + </div> + </div> +{% highlight html %} +<button type="button" class="btn btn-primary btn-large btn-block">Block level button</button> +<button type="button" class="btn btn-default btn-large btn-block">Block level button</button> +{% endhighlight %} + + + <h2 id="buttons-disabled">Disabled state</h2> + <p>Make buttons look unclickable by fading them back 50%.</p> + + <h3>Button element</h3> + <p>Add the <code>disabled</code> attribute to <code><button></code> buttons.</p> + <p class="bs-docs-example"> + <button type="button" class="btn btn-primary btn-large" disabled="disabled">Primary button</button> + <button type="button" class="btn btn-default btn-large" disabled="disabled">Button</button> + </p> +{% highlight html %} +<button type="button" class="btn btn-large btn-primary" disabled="disabled">Primary button</button> +<button type="button" class="btn btn-default btn-large" disabled="disabled">Button</button> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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> + + <h3>Anchor element</h3> + <p>Add the <code>.disabled</code> class to <code><a></code> buttons.</p> + <p class="bs-docs-example"> + <a href="#" class="btn btn-primary btn-large disabled">Primary link</a> + <a href="#" class="btn btn-default btn-large disabled">Link</a> + </p> +{% highlight html %} +<a href="#" class="btn btn-primary btn-large disabled">Primary link</a> +<a href="#" class="btn btn-default btn-large disabled">Link</a> +{% endhighlight %} + <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-docs-sidenote"> + <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> + + + <h2 id="buttons-tags">Using multiple tags</h2> + <p>Use the button classes on an <code><a></code>, <code><button></code>, or <code><input></code> element.</p> + <form class="bs-docs-example"> + <a class="btn btn-default" href="#">Link</a> + <button class="btn btn-default" type="submit">Button</button> + <input class="btn btn-default" type="button" value="Input"> + <input class="btn btn-default" type="submit" value="Submit"> + </form> +{% highlight html %} +<a class="btn btn-default" href="#">Link</a> +<button class="btn btn-default" type="submit">Button</button> +<input class="btn btn-default" type="button" value="Input"> +<input class="btn btn-default" type="submit" value="Submit"> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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> + + </div> + + + + <!-- Images + ================================================== --> + <div class="bs-docs-section" id="images"> + <div class="page-header"> + <h1>Images</h1> + </div> + + <p>Add classes to an <code><img></code> element to easily style images in any project.</p> + <div class="bs-docs-sidenote"> + <h4>Cross-browser compatibility</h4> + <p>Keep in mind that Internet Explorer 8 lacks support for rounded corners.</p> + </div> + <div class="bs-docs-example bs-docs-example-images"> + <img data-src="holder.js/140x140" class="img-rounded"> + <img data-src="holder.js/140x140" class="img-circle"> + <img data-src="holder.js/140x140" class="img-thumbnail"> + </div> +{% highlight html %} +<img src="..." class="img-rounded"> +<img src="..." class="img-circle"> +<img src="..." class="img-thumbnail"> +{% endhighlight %} + + </div> + + + <!-- Helpers + ================================================== --> + <div class="bs-docs-section" id="helper-classes"> + <div class="page-header"> + <h1>Helper classes</h1> + </div> + + <h3>Close icon</h3> + <p>Use the generic close icon for dismissing content like modals and alerts.</p> + <div class="bs-docs-example"> + <p><button class="close" style="float: none;">×</button></p> + </div> +{% highlight html %} +<button class="close" style="float: none;">×</button> +{% endhighlight %} + + <h3>.pull-left</h3> + <p>Float an element left</p> +{% highlight html %} +<div class="pull-left">...</div> +{% endhighlight %} +{% highlight css %} +.pull-left { + float: left; +} +{% endhighlight %} + + <h3>.pull-right</h3> + <p>Float an element right</p> +{% highlight html %} +<div class="pull-right">...</div> +{% endhighlight %} +{% highlight css %} +.pull-right { + float: right; +} +{% endhighlight %} + + <h3>.clearfix</h3> + <p>Clear the <code>float</code> on any element. Utilizes <a href="http://nicolasgallagher.com/micro-clearfix-hack/">the micro clearfix</a> as popularized by Nicolas Gallagher.</p> +{% highlight html %} +<div class="clearfix">...</div> +{% endhighlight %} +{% highlight css %} +// Mixin +.clearfix { + &:before, + &:after { + content: " "; + display: table; + } + &:after { + clear: both; + } +} + +// Usage +.element { + .clearfix(); +} +{% endhighlight %} + </div> + + + <!-- Responsive utilities + ================================================== --> + <div class="bs-docs-section" id="responsive-utilities"> + <div class="page-header"> + <h1>Responsive utilities</h1> + </div> + <p class="lead">For faster mobile-friendly development, use these utility classes for showing and hiding content by device via media query. Also included are utility classes for toggling content when printed.</p> + + <h3>Responsive classes</h3> + <table class="table table-bordered table-striped responsive-utilities hidden-phone"> + <thead> + <tr> + <th>Class</th> + <th>Phones <small>767px and below</small></th> + <th>Tablets <small>979px to 768px</small></th> + <th>Desktops <small>Default</small></th> + </tr> + </thead> + <tbody> + <tr> + <th><code>.visible-phone</code></th> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + <td class="is-hidden">Hidden</td> + </tr> + <tr> + <th><code>.visible-tablet</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + </tr> + <tr> + <th><code>.visible-desktop</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-phone</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-tablet</code></th> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-desktop</code></th> + <td class="is-visible">Visible</td> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + </tr> + </tbody> + </table> + + <h3>Print classes</h3> + <table class="table table-bordered table-striped responsive-utilities"> + <thead> + <tr> + <th>Class</th> + <th>Browser</th> + <th>Print</th> + </tr> + </thead> + <tbody> + <tr> + <th><code>.visible-print</code></th> + <td class="is-hidden">Hidden</td> + <td class="is-visible">Visible</td> + </tr> + <tr> + <th><code>.hidden-print</code></th> + <td class="is-visible">Visible</td> + <td class="is-hidden">Hidden</td> + </tr> + </tbody> + </table> + + <h3>When to use</h3> + <p>Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities should not be used with tables, and as such are not supported.</p> + + <h3>Test case</h3> + <p>Resize your browser or load on different devices to test the above classes.</p> + <h4>Visible on...</h4> + <p>Green checkmarks indicate that class is visible in your current viewport.</p> + <ul class="responsive-utilities-test"> + <li>Phone<span class="visible-phone">✔ Phone</span></li> + <li>Tablet<span class="visible-tablet">✔ Tablet</span></li> + <li>Desktop<span class="visible-desktop">✔ Desktop</span></li> + </ul> + <h4>Hidden on...</h4> + <p>Here, green checkmarks indicate that class is hidden in your current viewport.</p> + <ul class="responsive-utilities-test hidden-on"> + <li>Phone<span class="hidden-phone">✔ Phone</span></li> + <li>Tablet<span class="hidden-tablet">✔ Tablet</span></li> + <li>Desktop<span class="hidden-desktop">✔ Desktop</span></li> + </ul> + + </div> + + + + + + <div class="bs-docs-section-header" id="components"> + <h1>Components</h1> + <p class="lead">Dozens of reusable components built to provide iconography, dropdowns, navigation, alerts, popovers, and much more.</p> + </div> + + + <!-- Icons + ================================================== --> + <div class="bs-docs-section" id="icons"> + <div class="page-header"> + <h1>Icons font <small>by <a href="http://glyphicons.com" target="_blank">Glyphicons</a></small></h1> + </div> + + <h2>Included glyphs</h2> + <p>Bootstrap comes with all 160 of <a href="http://glyphicons.com" target="_blank">Glyphicons</a> Halflings set, all available in font formats for easy coloring, sizing, and placement.</p> + + <ul class="the-icons clearfix"> + <li><i class="glyphicon glyphicon-glass"></i> glyphicon-glass</li> + <li><i class="glyphicon glyphicon-music"></i> glyphicon-music</li> + <li><i class="glyphicon glyphicon-search"></i> glyphicon-search</li> + <li><i class="glyphicon glyphicon-envelope"></i> glyphicon-envelope</li> + <li><i class="glyphicon glyphicon-heart"></i> glyphicon-heart</li> + <li><i class="glyphicon glyphicon-star"></i> glyphicon-star</li> + <li><i class="glyphicon glyphicon-star-empty"></i> glyphicon-star-empty</li> + <li><i class="glyphicon glyphicon-user"></i> glyphicon-user</li> + <li><i class="glyphicon glyphicon-film"></i> glyphicon-film</li> + <li><i class="glyphicon glyphicon-th-large"></i> glyphicon-th-large</li> + <li><i class="glyphicon glyphicon-th"></i> glyphicon-th</li> + <li><i class="glyphicon glyphicon-th-list"></i> glyphicon-th-list</li> + <li><i class="glyphicon glyphicon-ok"></i> glyphicon-ok</li> + <li><i class="glyphicon glyphicon-remove"></i> glyphicon-remove</li> + <li><i class="glyphicon glyphicon-zoom-in"></i> glyphicon-zoom-in</li> + <li><i class="glyphicon glyphicon-zoom-out"></i> glyphicon-zoom-out</li> + <li><i class="glyphicon glyphicon-off"></i> glyphicon-off</li> + <li><i class="glyphicon glyphicon-signal"></i> glyphicon-signal</li> + <li><i class="glyphicon glyphicon-cog"></i> glyphicon-cog</li> + <li><i class="glyphicon glyphicon-trash"></i> glyphicon-trash</li> + <li><i class="glyphicon glyphicon-home"></i> glyphicon-home</li> + <li><i class="glyphicon glyphicon-file"></i> glyphicon-file</li> + <li><i class="glyphicon glyphicon-time"></i> glyphicon-time</li> + <li><i class="glyphicon glyphicon-road"></i> glyphicon-road</li> + <li><i class="glyphicon glyphicon-download-alt"></i> glyphicon-download-alt</li> + <li><i class="glyphicon glyphicon-download"></i> glyphicon-download</li> + <li><i class="glyphicon glyphicon-upload"></i> glyphicon-upload</li> + <li><i class="glyphicon glyphicon-inbox"></i> glyphicon-inbox</li> + + <li><i class="glyphicon glyphicon-play-circle"></i> glyphicon-play-circle</li> + <li><i class="glyphicon glyphicon-repeat"></i> glyphicon-repeat</li> + <li><i class="glyphicon glyphicon-refresh"></i> glyphicon-refresh</li> + <li><i class="glyphicon glyphicon-list-alt"></i> glyphicon-list-alt</li> + <li><i class="glyphicon glyphicon-lock"></i> glyphicon-lock</li> + <li><i class="glyphicon glyphicon-flag"></i> glyphicon-flag</li> + <li><i class="glyphicon glyphicon-headphones"></i> glyphicon-headphones</li> + <li><i class="glyphicon glyphicon-volume-off"></i> glyphicon-volume-off</li> + <li><i class="glyphicon glyphicon-volume-down"></i> glyphicon-volume-down</li> + <li><i class="glyphicon glyphicon-volume-up"></i> glyphicon-volume-up</li> + <li><i class="glyphicon glyphicon-qrcode"></i> glyphicon-qrcode</li> + <li><i class="glyphicon glyphicon-barcode"></i> glyphicon-barcode</li> + <li><i class="glyphicon glyphicon-tag"></i> glyphicon-tag</li> + <li><i class="glyphicon glyphicon-tags"></i> glyphicon-tags</li> + <li><i class="glyphicon glyphicon-book"></i> glyphicon-book</li> + <li><i class="glyphicon glyphicon-bookmark"></i> glyphicon-bookmark</li> + <li><i class="glyphicon glyphicon-print"></i> glyphicon-print</li> + <li><i class="glyphicon glyphicon-camera"></i> glyphicon-camera</li> + <li><i class="glyphicon glyphicon-font"></i> glyphicon-font</li> + <li><i class="glyphicon glyphicon-bold"></i> glyphicon-bold</li> + <li><i class="glyphicon glyphicon-italic"></i> glyphicon-italic</li> + <li><i class="glyphicon glyphicon-text-height"></i> glyphicon-text-height</li> + <li><i class="glyphicon glyphicon-text-width"></i> glyphicon-text-width</li> + <li><i class="glyphicon glyphicon-align-left"></i> glyphicon-align-left</li> + <li><i class="glyphicon glyphicon-align-center"></i> glyphicon-align-center</li> + <li><i class="glyphicon glyphicon-align-right"></i> glyphicon-align-right</li> + <li><i class="glyphicon glyphicon-align-justify"></i> glyphicon-align-justify</li> + <li><i class="glyphicon glyphicon-list"></i> glyphicon-list</li> + + <li><i class="glyphicon glyphicon-indent-left"></i> glyphicon-indent-left</li> + <li><i class="glyphicon glyphicon-indent-right"></i> glyphicon-indent-right</li> + <li><i class="glyphicon glyphicon-facetime-video"></i> glyphicon-facetime-video</li> + <li><i class="glyphicon glyphicon-picture"></i> glyphicon-picture</li> + <li><i class="glyphicon glyphicon-pencil"></i> glyphicon-pencil</li> + <li><i class="glyphicon glyphicon-map-marker"></i> glyphicon-map-marker</li> + <li><i class="glyphicon glyphicon-adjust"></i> glyphicon-adjust</li> + <li><i class="glyphicon glyphicon-tint"></i> glyphicon-tint</li> + <li><i class="glyphicon glyphicon-edit"></i> glyphicon-edit</li> + <li><i class="glyphicon glyphicon-share"></i> glyphicon-share</li> + <li><i class="glyphicon glyphicon-check"></i> glyphicon-check</li> + <li><i class="glyphicon glyphicon-move"></i> glyphicon-move</li> + <li><i class="glyphicon glyphicon-step-backward"></i> glyphicon-step-backward</li> + <li><i class="glyphicon glyphicon-fast-backward"></i> glyphicon-fast-backward</li> + <li><i class="glyphicon glyphicon-backward"></i> glyphicon-backward</li> + <li><i class="glyphicon glyphicon-play"></i> glyphicon-play</li> + <li><i class="glyphicon glyphicon-pause"></i> glyphicon-pause</li> + <li><i class="glyphicon glyphicon-stop"></i> glyphicon-stop</li> + <li><i class="glyphicon glyphicon-forward"></i> glyphicon-forward</li> + <li><i class="glyphicon glyphicon-fast-forward"></i> glyphicon-fast-forward</li> + <li><i class="glyphicon glyphicon-step-forward"></i> glyphicon-step-forward</li> + <li><i class="glyphicon glyphicon-eject"></i> glyphicon-eject</li> + <li><i class="glyphicon glyphicon-chevron-left"></i> glyphicon-chevron-left</li> + <li><i class="glyphicon glyphicon-chevron-right"></i> glyphicon-chevron-right</li> + <li><i class="glyphicon glyphicon-plus-sign"></i> glyphicon-plus-sign</li> + <li><i class="glyphicon glyphicon-minus-sign"></i> glyphicon-minus-sign</li> + <li><i class="glyphicon glyphicon-remove-sign"></i> glyphicon-remove-sign</li> + <li><i class="glyphicon glyphicon-ok-sign"></i> glyphicon-ok-sign</li> + + <li><i class="glyphicon glyphicon-question-sign"></i> glyphicon-question-sign</li> + <li><i class="glyphicon glyphicon-info-sign"></i> glyphicon-info-sign</li> + <li><i class="glyphicon glyphicon-screenshot"></i> glyphicon-screenshot</li> + <li><i class="glyphicon glyphicon-remove-circle"></i> glyphicon-remove-circle</li> + <li><i class="glyphicon glyphicon-ok-circle"></i> glyphicon-ok-circle</li> + <li><i class="glyphicon glyphicon-ban-circle"></i> glyphicon-ban-circle</li> + <li><i class="glyphicon glyphicon-arrow-left"></i> glyphicon-arrow-left</li> + <li><i class="glyphicon glyphicon-arrow-right"></i> glyphicon-arrow-right</li> + <li><i class="glyphicon glyphicon-arrow-up"></i> glyphicon-arrow-up</li> + <li><i class="glyphicon glyphicon-arrow-down"></i> glyphicon-arrow-down</li> + <li><i class="glyphicon glyphicon-share-alt"></i> glyphicon-share-alt</li> + <li><i class="glyphicon glyphicon-resize-full"></i> glyphicon-resize-full</li> + <li><i class="glyphicon glyphicon-resize-small"></i> glyphicon-resize-small</li> + <li><i class="glyphicon glyphicon-plus"></i> glyphicon-plus</li> + <li><i class="glyphicon glyphicon-minus"></i> glyphicon-minus</li> + <li><i class="glyphicon glyphicon-asterisk"></i> glyphicon-asterisk</li> + <li><i class="glyphicon glyphicon-exclamation-sign"></i> glyphicon-exclamation-sign</li> + <li><i class="glyphicon glyphicon-gift"></i> glyphicon-gift</li> + <li><i class="glyphicon glyphicon-leaf"></i> glyphicon-leaf</li> + <li><i class="glyphicon glyphicon-fire"></i> glyphicon-fire</li> + <li><i class="glyphicon glyphicon-eye-open"></i> glyphicon-eye-open</li> + <li><i class="glyphicon glyphicon-eye-close"></i> glyphicon-eye-close</li> + <li><i class="glyphicon glyphicon-warning-sign"></i> glyphicon-warning-sign</li> + <li><i class="glyphicon glyphicon-plane"></i> glyphicon-plane</li> + <li><i class="glyphicon glyphicon-calendar"></i> glyphicon-calendar</li> + <li><i class="glyphicon glyphicon-random"></i> glyphicon-random</li> + <li><i class="glyphicon glyphicon-comment"></i> glyphicon-comment</li> + <li><i class="glyphicon glyphicon-magnet"></i> glyphicon-magnet</li> + + <li><i class="glyphicon glyphicon-chevron-up"></i> glyphicon-chevron-up</li> + <li><i class="glyphicon glyphicon-chevron-down"></i> glyphicon-chevron-down</li> + <li><i class="glyphicon glyphicon-retweet"></i> glyphicon-retweet</li> + <li><i class="glyphicon glyphicon-shopping-cart"></i> glyphicon-shopping-cart</li> + <li><i class="glyphicon glyphicon-folder-close"></i> glyphicon-folder-close</li> + <li><i class="glyphicon glyphicon-folder-open"></i> glyphicon-folder-open</li> + <li><i class="glyphicon glyphicon-resize-vertical"></i> glyphicon-resize-vertical</li> + <li><i class="glyphicon glyphicon-resize-horizontal"></i> glyphicon-resize-horizontal</li> + <li><i class="glyphicon glyphicon-hdd"></i> glyphicon-hdd</li> + <li><i class="glyphicon glyphicon-bullhorn"></i> glyphicon-bullhorn</li> + <li><i class="glyphicon glyphicon-bell"></i> glyphicon-bell</li> + <li><i class="glyphicon glyphicon-certificate"></i> glyphicon-certificate</li> + <li><i class="glyphicon glyphicon-thumbs-up"></i> glyphicon-thumbs-up</li> + <li><i class="glyphicon glyphicon-thumbs-down"></i> glyphicon-thumbs-down</li> + <li><i class="glyphicon glyphicon-hand-right"></i> glyphicon-hand-right</li> + <li><i class="glyphicon glyphicon-hand-left"></i> glyphicon-hand-left</li> + <li><i class="glyphicon glyphicon-hand-up"></i> glyphicon-hand-up</li> + <li><i class="glyphicon glyphicon-hand-down"></i> glyphicon-hand-down</li> + <li><i class="glyphicon glyphicon-circle-arrow-right"></i> glyphicon-circle-arrow-right</li> + <li><i class="glyphicon glyphicon-circle-arrow-left"></i> glyphicon-circle-arrow-left</li> + <li><i class="glyphicon glyphicon-circle-arrow-up"></i> glyphicon-circle-arrow-up</li> + <li><i class="glyphicon glyphicon-circle-arrow-down"></i> glyphicon-circle-arrow-down</li> + <li><i class="glyphicon glyphicon-globe"></i> glyphicon-globe</li> + <li><i class="glyphicon glyphicon-wrench"></i> glyphicon-wrench</li> + <li><i class="glyphicon glyphicon-tasks"></i> glyphicon-tasks</li> + <li><i class="glyphicon glyphicon-filter"></i> glyphicon-filter</li> + <li><i class="glyphicon glyphicon-briefcase"></i> glyphicon-briefcase</li> + <li><i class="glyphicon glyphicon-fullscreen"></i> glyphicon-fullscreen</li> + + <li><i class="glyphicon glyphicon-dashboard"></i> glyphicon-dashboard</li> + <li><i class="glyphicon glyphicon-paperclip"></i> glyphicon-paperclip</li> + <li><i class="glyphicon glyphicon-heart-empty"></i> glyphicon-heart-empty</li> + <li><i class="glyphicon glyphicon-link"></i> glyphicon-link</li> + <li><i class="glyphicon glyphicon-phone"></i> glyphicon-phone</li> + <li><i class="glyphicon glyphicon-pushpin"></i> glyphicon-pushpin</li> + <li><i class="glyphicon glyphicon-euro"></i> glyphicon-euro</li> + <li><i class="glyphicon glyphicon-usd"></i> glyphicon-usd</li> + <li><i class="glyphicon glyphicon-gbp"></i> glyphicon-gbp</li> + <li><i class="glyphicon glyphicon-sort"></i> glyphicon-sort</li> + <li><i class="glyphicon glyphicon-sort-by-alphabet"></i> glyphicon-sort-by-alphabet</li> + <li><i class="glyphicon glyphicon-sort-by-alphabet-alt"></i> glyphicon-sort-by-alphabet-alt</li> + <li><i class="glyphicon glyphicon-sort-by-order"></i> glyphicon-sort-by-order</li> + <li><i class="glyphicon glyphicon-sort-by-order-alt"></i> glyphicon-sort-by-order-alt</li> + <li><i class="glyphicon glyphicon-sort-by-attributes"></i> glyphicon-sort-by-attributes</li> + <li><i class="glyphicon glyphicon-sort-by-attributes-alt"></i> glyphicon-sort-by-attributes-alt</li> + <li><i class="glyphicon glyphicon-unchecked"></i> glyphicon-unchecked</li> + <li><i class="glyphicon glyphicon-expand"></i> glyphicon-expand</li> + <li><i class="glyphicon glyphicon-collapse"></i> glyphicon-collapse</li> + <li><i class="glyphicon glyphicon-collapse-top"></i> glyphicon-collapse-top</li> + + </ul> + + <h3>Glyphicons attribution</h3> + <p><a href="http://glyphicons.com/">Glyphicons</a> Halflings are normally not available for free, but an arrangement between Bootstrap and the Glyphicons creator have made this possible at no cost to you as developers. As a thank you, we ask you to include an optional link back to <a href="http://glyphicons.com/">Glyphicons</a> whenever practical.</p> + + + <h2>How to use</h2> + <p>Add the appropriate class to any inline element. All icon classes are prefixed with <code>glyphicon-</code> for easy styling. To use, place the following code just about anywhere:</p> +{% highlight html %} +<span class="glyphicon glyphicon-search"></span> +{% endhighlight %} + <p>Want to change the icon color? Just change the <code>color</code> of the parent element.</p> + <p>When using beside strings of text, as in buttons or nav links, be sure to leave a space after the icon for proper spacing.</p> + + + <h2>Icon examples</h2> + <p>Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.</p> + + <h4>Buttons</h4> + + <h5>Button group in a button toolbar</h5> + <div class="bs-docs-example"> + <div class="btn-toolbar"> + <div class="btn-group"> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-left"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-center"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-right"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-justify"></span></a> + </div> + </div> + </div><!-- /bs-docs-example --> +{% highlight html %} +<div class="btn-toolbar"> + <div class="btn-group"> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-left"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-center"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-right"></span></a> + <a class="btn btn-default" href="#"><span class="glyphicon glyphicon-align-justify"></span></a> + </div> +</div> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <h4>Accessibility</h4> + <p>Keep in mind that using icons without any additional content means the icons are not represented to screen reader users.</p> + </div> + + <h5>Dropdown in a button group</h5> + <div class="bs-docs-example"> + <div class="btn-group"> + <a class="btn btn-primary" href="#"><i class="glyphicon glyphicon-user"></i> User</a> + <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> + <ul class="dropdown-menu"> + <li><a href="#"><i class="glyphicon glyphicon-pencil"></i> Edit</a></li> + <li><a href="#"><i class="glyphicon glyphicon-trash"></i> Delete</a></li> + <li><a href="#"><i class="glyphicon glyphicon-ban-circle"></i> Ban</a></li> + <li class="divider"></li> + <li><a href="#"><i class="glyphicon glyphicon-"></i> Make admin</a></li> + </ul> + </div> + </div><!-- /bs-docs-example --> +{% highlight html %} +<div class="btn-group"> + <a class="btn btn-default btn-primary" href="#"><span class="glyphicon glyphicon-user"></span> User</a> + <a class="btn btn-default btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> + <ul class="dropdown-menu"> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Edit</a></li> + <li><a href="#"><span class="glyphicon glyphicon-trash"></span> Delete</a></li> + <li><a href="#"><span class="glyphicon glyphicon-ban-circle"></span> Ban</a></li> + <li class="divider"></li> + <li><a href="#"><span class="glyphicon glyphicon-"></span> Make admin</a></li> + </ul> +</div> +{% endhighlight %} + + <h5>Large button</h5> + <div class="bs-docs-example"> + <a class="btn btn-default btn-large" href="#"><span class="glyphicon glyphicon-star"></span> Star</a> + </div><!-- /bs-docs-example --> +{% highlight html %} +<a class="btn btn-default btn-large" href="#"><span class="glyphicon glyphicon-star"></span> Star</a> +{% endhighlight %} + + <h5>Small button</h5> + <div class="bs-docs-example"> + <a class="btn btn-default btn-small" href="#"><span class="glyphicon glyphicon-star"></span></a> + </div><!-- /bs-docs-example --> +{% highlight html %} +<a class="btn btn-default btn-small" href="#"><span class="glyphicon glyphicon-star"></span></a> +{% endhighlight %} + + + <h4>Navigation</h4> + <div class="bs-docs-example"> + <ul class="nav nav-pills nav-stacked"> + <li class="active"><a href="#"><span class="glyphicon glyphicon-home"></span> Home</a></li> + <li><a href="#"><span class="glyphicon glyphicon-book"></span> Library</a></li> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Applications</a></li> + <li><a href="#"><span class="glyphicon glyphicon-"></span> Misc</a></li> + </ul> + </div><!-- /bs-docs-example --> +{% highlight html %} +<ul class="nav nav-pills nav-stacked"> + <li class="active"><a href="#"><span class="glyphicon glyphicon-home"></span> Home</a></li> + <li><a href="#"><span class="glyphicon glyphicon-book"></span> Library</a></li> + <li><a href="#"><span class="glyphicon glyphicon-pencil"></span> Applications</a></li> + <li><a href="#"><span class="glyphicon glyphicon-"></span> Misc</a></li> +</ul> +{% endhighlight %} + + <h4>Form fields</h4> + <form class="bs-docs-example form-horizontal"> + <div class="control-group"> + <label class="control-label" for="inputIcon">Email address</label> + <div class="controls"> + <div class="input-group"> + <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span> + <input class="col-lg-2" id="inputIcon" type="text"> + </div> + </div> + </div> + </form> +{% highlight html %} +<div class="control-group"> + <label class="control-label" for="inputIcon">Email address</label> + <div class="controls"> + <div class="input-group"> + <span class="input-group-addon"><span class="glyphicon glyphicon-envelope"></span></span> + <input class="col-lg-2" id="inputIcon" type="text"> + </div> + </div> +</div> +{% endhighlight %} + + </div> + + + + <!-- Dropdowns + ================================================== --> + <div class="bs-docs-section" id="dropdowns"> + <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> + + <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> + <div class="bs-docs-example"> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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><a tabindex="-1" href="#">Separated link</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="dropdown"> + <!-- Link or button to toggle dropdown --> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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><a tabindex="-1" href="#">Separated link</a></li> + </ul> +</div> +{% endhighlight %} + + <h3 id="dropdowns-alignment">Aligning the menus</h3> + <p>Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.</p> +{% highlight html %} +<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> + ... +</ul> +{% endhighlight %} + + <h3 id="dropdowns-disabled">Disabled menu options</h3> + <p>Add <code>.disabled</code> to a <code><li></code> in the dropdown to disable the link.</p> + <div class="bs-docs-example"> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <li><a tabindex="-1" href="#">Regular link</a></li> + <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> + <li><a tabindex="-1" href="#">Another link</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <li><a tabindex="-1" href="#">Regular link</a></li> + <li class="disabled"><a tabindex="-1" href="#">Disabled link</a></li> + <li><a tabindex="-1" href="#">Another link</a></li> +</ul> +{% endhighlight %} + + <h3 id="dropdowns-submenus">Sub menus on dropdowns</h3> + <p>Add an extra level of dropdown menus, appearing on hover like those of OS X, with some simple markup additions. Add <code>.dropdown-submenu</code> to any <code>li</code> in an existing dropdown menu for automatic styling.</p> + <div class="bs-docs-example bs-docs-example-submenu"> + + <div class="pull-left"> + <p class="text-muted">Default</p> + <div class="dropdown clearfix"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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-submenu"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + </ul> + </div> + </div> + + <div class="pull-left"> + <p class="text-muted">Dropup</p> + <div class="dropup"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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-submenu"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + </ul> + </div> + </div> + + <div class="pull-left"> + <p class="text-muted">Left submenu</p> + <div class="dropdown"> + <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + <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-submenu pull-left"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + </ul> + </div> + </div> + + </div> +{% highlight html %} +<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> + ... + <li class="dropdown-submenu pull-left"> + <a tabindex="-1" href="#">More options</a> + <ul class="dropdown-menu"> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + <li><a tabindex="-1" href="#">Second level link</a></li> + </ul> + </li> + ... +</ul> +{% endhighlight %} + + </div> + + + + <!-- Button Groups + ================================================== --> + <div class="bs-docs-section" id="btn-groups"> + <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> + + <h3 id="btn-groups-single">Basic button group</h3> + <p>Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.</p> + <div class="bs-docs-example"> + <div class="btn-group" style="margin: 9px 0 5px;"> + <button type="button" class="btn btn-default">Left</button> + <button type="button" class="btn btn-default">Middle</button> + <button type="button" class="btn btn-default">Right</button> + </div> + </div> +{% highlight html %} +<div class="btn-group"> + <button type="button" class="btn btn-default">Left</button> + <button type="button" class="btn btn-default">Middle</button> + <button type="button" class="btn btn-default">Right</button> +</div> +{% endhighlight %} + + <h3 id="btn-groups-toolbar">Multiple button groups</h3> + <p>Combine sets of <code><div class="btn-group"></code> into a <code><div class="btn-toolbar"></code> for more complex components.</p> + <div class="bs-docs-example"> + <div class="btn-toolbar" style="margin: 0;"> + <div class="btn-group"> + <button type="button" class="btn btn-default">1</button> + <button type="button" class="btn btn-default">2</button> + <button type="button" class="btn btn-default">3</button> + <button type="button" class="btn btn-default">4</button> + </div> + <div class="btn-group"> + <button type="button" class="btn btn-default">5</button> + <button type="button" class="btn btn-default">6</button> + <button type="button" class="btn btn-default">7</button> + </div> + <div class="btn-group"> + <button type="button" class="btn btn-default">8</button> + </div> + </div> + </div> +{% highlight html %} +<div class="btn-toolbar"> + <div class="btn-group">...</div> + <div class="btn-group">...</div> + <div class="btn-group">...</div> +</div> +{% endhighlight %} + + <h3 id="btn-groups-nested">Nested button groups</h3> + <p>Place buttons groups within button groups when you want dropdown menus mixed with a series of buttons.</p> + <div class="bs-docs-example"> + <div class="btn-group"> + <button type="button" class="btn btn-default">1</button> + <button type="button" class="btn btn-default">2</button> + <button type="button" class="btn btn-default">3</button> + + <div class="btn-group"> + <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + Dropdown + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Dropdown link</a></li> + <li><a href="#">Dropdown link</a></li> + <li><a href="#">Dropdown link</a></li> + </ul> + </div> + </div> + </div> + + <h3 id="btn-groups-vertical">Vertical button groups</h3> + <p>Make a set of buttons appear vertically stacked rather than horizontally.</p> + <div class="bs-docs-example"> + <div class="btn-group btn-group-vertical"> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-left"></i></button> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-center"></i></button> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-right"></i></button> + <button type="button" class="btn btn-default"><i class="glyphicon glyphicon-align-justify"></i></button> + </div> + </div> +{% highlight html %} +<div class="btn-group btn-group-vertical"> + ... +</div> +{% 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> + <div class="bs-docs-example"> + <div class="btn-group btn-group-justified"> + <a href="#" class="btn btn-default">Left</a> + <a href="#" class="btn btn-default">Right</a> + <a href="#" class="btn btn-default">Middle</a> + </div> + </div> +{% highlight html %} +<div class="btn-group btn-group-justified"> + ... +</div> +{% endhighlight %} + + </div> + + + + <!-- Split button dropdowns + ================================================== --> + <div class="bs-docs-section" id="btn-dropdowns"> + <div class="page-header"> + <h1>Button dropdown menus</h1> + </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-docs-sidenote"> + <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> + </div> + + <h3 id="btn-dropdowns-single">Single button dropdowns</h3> + <p>Turn a button into dropdown toggle with some basic markup changes.</p> + <div class="bs-docs-example"> + <div class="btn-toolbar" style="margin-bottom: 10px;"> + <div class="btn-group"> + <button class="btn btn-default dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">Action <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown">Danger <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown">Warning <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-success dropdown-toggle" data-toggle="dropdown">Success <span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div> + </div> +{% highlight html %} +<!-- Single button --> +<div class="btn-group"> + <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + Action <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> +</div> +{% endhighlight %} + + <h3 id="btn-dropdowns-split">Split button dropdowns</h3> + <p>Similarly, create split button dropdowns with the same markup changes, only with a separate button.</p> + <div class="bs-docs-example"> + <div class="btn-toolbar" style="margin: 0;"> + <div class="btn-group"> + <button class="btn btn-default">Action</button> + <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-primary">Action</button> + <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-danger">Danger</button> + <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-warning">Warning</button> + <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-success">Success</button> + <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div><!-- /btn-toolbar --> + </div> +{% highlight html %} +<!-- Split button --> +<div class="btn-group"> + <button class="btn btn-default">Action</button> + <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> +</div> +{% endhighlight %} + + <h3 id="btn-dropdowns-sizes">Works with all button sizes</h3> + <p>Button dropdowns work at any size: <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code>.</p> + <div class="bs-docs-example"> + <div class="btn-toolbar" style="margin: 0;"> + <div class="btn-group"> + <button class="btn btn-default btn-large dropdown-toggle" type="button" data-toggle="dropdown"> + Large button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-default btn-small dropdown-toggle" type="button" data-toggle="dropdown"> + Small button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group"> + <button class="btn btn-default btn-mini dropdown-toggle" type="button" data-toggle="dropdown"> + Mini button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div><!-- /btn-toolbar --> + </div><!-- /example --> +{% highlight html %} +<!-- Large button group --> +<div class="btn-group"> + <button class="btn btn-default btn-large dropdown-toggle" type="button" data-toggle="dropdown"> + Large button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + ... + </ul> +</div> + +<!-- Small button group --> +<div class="btn-group"> + <button class="btn btn-default btn-small dropdown-toggle" type="button" data-toggle="dropdown"> + Small button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + ... + </ul> +</div> + +<!-- Mini button group --> +<div class="btn-group"> + <button class="btn btn-default btn-mini dropdown-toggle" type="button" data-toggle="dropdown"> + Mini button <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + ... + </ul> +</div> +{% endhighlight %} + + <h3 id="btn-dropdowns-dropup">Dropup buttons</h3> + <p>Trigger dropdown menus above elements by adding <code>.dropup</code> to the parent.</p> + <div class="bs-docs-example"> + <div class="btn-toolbar"> + <div class="btn-group dropup"> + <button class="btn btn-default">Dropup</button> + <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + <div class="btn-group dropup"> + <button class="btn btn-primary">Right dropup</button> + <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> + <ul class="dropdown-menu pull-right"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </div><!-- /btn-group --> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="btn-group dropup"> + <button class="btn btn-default">Dropup</button> + <button class="btn btn-default dropdown-toggle" data-toggle="dropdown"> + <span class="caret"></span> + </button> + <ul class="dropdown-menu"> + <!-- Dropdown menu links --> + </ul> +</div> +{% endhighlight %} + + </div> + + + + <!-- Navs + ================================================== --> + <div class="bs-docs-section" id="nav"> + <div class="page-header"> + <h1>Navs</small></h1> + </div> + + <p class="lead">Navs available in Bootstrap have shared markup, starting with the base <code>.nav</code> class, as well as shared states. Swap modifier classes to switch between each style.</p> + + <h2 id="nav-tabs">Tabs</h2> + <p>Note the <code>.nav-tabs</code> class requires the <code>.nav</code> base class.</p> + <div class="bs-docs-example"> + <ul class="nav nav-tabs"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> +</ul> +{% endhighlight %} + + <h2 id="nav-pills">Pills</h2> + <p>Take that same HTML, but use <code>.nav-pills</code> instead:</p> + <div class="bs-docs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-pills"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> +</ul> +{% endhighlight %} + <p>Pills are also vertically stackable. Just add <code>.nav-stacked</code>.</p> + <div class="bs-docs-example"> + <ul class="nav nav-pills nav-stacked" style="max-width: 300px;"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-pills nav-stacked"> + ... +</ul> +{% endhighlight %} + + <h2>Options</h2> + + <h3 id="nav-justified">Justified links</h3> + <p>Easily make tabs or pills equal widths of their parent with <code>.nav-justified</code>.</p> + <div class="bs-docs-example"> + <ul class="nav nav-tabs nav-justified"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + <br> + <ul class="nav nav-pills nav-justified"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs nav-justified"> + ... +</ul> +<ul class="nav nav-pills nav-justified"> + ... +</ul> +{% endhighlight %} + + <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-docs-sidenote"> + <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> + + <div class="bs-docs-example"> + <ul class="nav nav-pills"> + <li><a href="#">Clickable link</a></li> + <li><a href="#">Clickable link</a></li> + <li class="disabled"><a href="#">Disabled link</a></li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs"> + ... + <li class="disabled"><a href="#">Disabled link</a></li> + ... +</ul> +{% endhighlight %} + + + <h3 id="nav-alignment">Component alignment</h3> + <p>To align nav links, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> + + + <hr class="bs-docs-separator"> + + + <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> + + <h3>Tabs with dropdowns</h3> + <div class="bs-docs-example"> + <ul class="nav nav-tabs"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Help</a></li> + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-tabs"> + ... + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + ... + </ul> + </li> + ... +</ul> +{% endhighlight %} + + <h3>Pills with dropdowns</h3> + <div class="bs-docs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Help</a></li> + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div><!-- /example --> +{% highlight html %} +<ul class="nav nav-pills"> + ... + <li class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu"> + ... + </ul> + </li> + ... +</ul> +{% endhighlight %} + + </div> + + + + <!-- Navbar + ================================================== --> + <div class="bs-docs-section" id="navbar"> + <div class="page-header"> + <h1>Navbar</h1> + </div> + + + <h2 id="navbar-basic">Basic navbar</h2> + <p>To start, navbars are static (not fixed to the top) and include support for a project name and basic navigation. Place one anywhere within a <code>.container</code>, which sets the width of your site and content.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> +</div> +{% endhighlight %} + + <h2>Navbar components</h2> + + <h3 id="navbar-brand">Brand</h3> + <p>A simple link to show your brand or project name only requires an anchor tag.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <a class="navbar-brand" href="#">Title</a> + </div> + </div><!-- /example --> +{% highlight html %} +<a class="navbar-brand" href="#">Title</a> +{% endhighlight %} + + <h3 id="navbar-nav">Nav links</h3> + <p>Nav items are simple to add via unordered lists.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li class="disabled"><a href="#">Disabled</a></li> + </ul> + </div> + </div><!-- /example --> +{% highlight html %} +<ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li class="disabled"><a href="#">Disabled</a></li> +</ul> +{% endhighlight %} + + <h3 id="navbar-forms">Forms</h3> + <p>To properly style and position a form within the navbar, add the appropriate classes as shown below. For a default form, include <code>.navbar-form</code> and either <code>.pull-left</code> or <code>.pull-right</code> to properly align it.</p> + <div class="bs-docs-example"> + + <div class="navbar"> + <form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <button type="submit" class="btn">Submit</button> + </form> + </div> + + <div class="navbar"> + <form class="navbar-form pull-left"> + <select name="" id="" style="width: 200px;"> + <option value="1">1</option> + <option value="2">2</option> + <option value="3">3</option> + <option value="4">4</option> + </select> + <button type="submit" class="btn">Submit</button> + </form> + </div> + + <div class="navbar"> + <form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <input type="checkbox"> + <button type="submit" class="btn">Submit</button> + </form> + </div> + + <div class="navbar"> + <form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <label class="checkbox-inline"> + <input type="checkbox"> Remember me + </label> + <button type="submit" class="btn">Submit</button> + </form> + </div> + + </div><!-- /example --> +{% highlight html %} +<form class="navbar-form pull-left"> + <input type="text" style="width: 200px;"> + <button type="submit" class="btn">Submit</button> +</form> +{% endhighlight %} + + <h3 id="navbar-buttons">Buttons</h3> + <p>For buttons not residing in a <code><form></code>, add this class to vertically center buttons within a navbar.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <button type="button" class="btn">Submit</button> + </div> + </div> + + <h3 id="navbar-text">Text</h3> + <p>Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code><p></code> tag for proper leading and color.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="navbar-text">Signed in as Mark Otto</p> + </div> + </div> +{% highlight html linenos %} +<div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="navbar-text">Signed in as Mark Otto</p> +</div> +{% endhighlight %} + + <h3 id="navbar-links">Links</h3> + <p>For folks using standard links that are not within the regular navbar navigation component, use the <code>.navbar-link</code> class to add the proper colors for the default and inverse navbar options.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="pull-right">Signed in as <a href="#" class="navbar-link">Mark Otto</a></p> + </div> + </div> +{% highlight html linenos %} +<div class="navbar"> + <a href="#" class="navbar-brand">Brand</a> + <p class="pull-right">Signed in as <a href="#" class="navbar-link">Mark Otto</a></p> +</div> +{% endhighlight %} + + <h3 id="navbar-component-alignment">Component alignment</h3> + <p>Align nav links, search form, or text, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.</p> + + + <h2>Optional display variations</h2> + <p>Fix the navbar to the top or bottom of the viewport with an additional class on the outermost div, <code>.navbar</code>. These will also remove rounded corners.</p> + + <h3 id="navbar-fixed-top">Fixed to top</h3> + <p>Add <code>.navbar-fixed-top</code>.</p> + <div class="bs-docs-example bs-navbar-top-example"> + <div class="navbar navbar-fixed-top"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-fixed-top"> + ... +</div> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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>. The navbar itself has a height of 54px by default. At 768px and above, its height shrinks to 50px. Try out your own values or use our snippet below:</p> +{% highlight css %} +body { + padding-top: 64px; +} +@media screen and (min-width: 768px) { + body { + padding-top: 60px; + } +} +{% endhighlight %} + <p>Make sure to include this <strong>after</strong> the core Bootstrap CSS.</p> + </div> + + <h3 id="navbar-fixed-bottom">Fixed to bottom</h3> + <p>Add <code>.navbar-fixed-bottom</code> instead.</p> + <div class="bs-docs-example bs-navbar-bottom-example"> + <div class="navbar navbar-fixed-bottom"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-fixed-bottom"> + ... +</div> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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>. The navbar itself has a height of 54px by default. At 768px and above, its height shrinks to 50px. Try out your own values or use our snippet below:</p> +{% highlight css %} +body { + padding-bottom: 64px; +} +@media screen and (min-width: 768px) { + body { + padding-bottom: 60px; + } +} +{% endhighlight %} + <p>Make sure to include this <strong>after</strong> the core Bootstrap CSS.</p> + </div> + + <h3 id="navbar-static-top">Static top navbar</h3> + <p>Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-*</code> classes, you do not need to change any padding on the <code>body</code>.</p> + <div class="bs-docs-example bs-navbar-top-example"> + <div class="navbar navbar-static-top" style="margin: -1px -1px 0;"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Title</a> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-static-top"> + ... +</div> +{% endhighlight %} + + + <h2 id="navbar-responsive">Responsive navbar</h2> + <p>To implement a collapsing responsive navbar, wrap your navbar content in a containing div, <code>.nav-collapse.collapse</code>, and add the navbar toggle button, <code>.navbar-toggle</code>.</p> + <div class="bs-docs-example"> + <div class="navbar"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Title</a> + <div class="nav-collapse collapse navbar-responsive-collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + <form class="navbar-form pull-left" action=""> + <input type="text" class="col-lg-8" placeholder="Search"> + </form> + <ul class="nav navbar-nav pull-right"> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div><!-- /.nav-collapse --> + </div><!-- /.container --> + </div><!-- /.navbar --> + </div><!-- /example --> +{% highlight html %} +<div class="navbar"> + <div class="container"> + + <!-- .navbar-toggle is used as the toggle for collapsed navbar content --> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + + <!-- Be sure to leave the brand out there if you want it shown --> + <a class="navbar-brand" href="#">Title</a> + + <!-- Place everything within .navbar-collapse to hide it until above 768px --> + <div class="nav-collapse collapse navbar-responsive-collapse"> + ... + </div><!-- /.nav-collapse --> + </div><!-- /.container --> +</div><!-- /.navbar --> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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> + </div> + + + <h2>Inverted variation</h2> + <p>Modify the look of the navbar by adding <code>.navbar-inverse</code>.</p> + <div class="bs-docs-example"> + <div class="navbar navbar-inverse"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-inverse-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Title</a> + <div class="nav-collapse collapse navbar-inverse-collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + <form class="navbar-form pull-left" action=""> + <input type="text" class="col-lg-8" placeholder="Search"> + </form> + <ul class="nav navbar-nav pull-right"> + <li><a href="#">Link</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <li><a href="#">Another action</a></li> + <li><a href="#">Something else here</a></li> + <li class="divider"></li> + <li><a href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div><!-- /.nav-collapse --> + </div><!-- /.container --> + </div><!-- /.navbar --> + </div><!-- /example --> +{% highlight html %} +<div class="navbar navbar-inverse"> + ... +</div> +{% endhighlight %} + + </div> + + + + <!-- Breadcrumbs + ================================================== --> + <div class="bs-docs-section" id="breadcrumbs"> + <div class="page-header"> + <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 `:after` and `content`.</p> + <div class="bs-docs-example"> + <ul class="breadcrumb"> + <li class="active">Home</li> + </ul> + <ul class="breadcrumb"> + <li><a href="#">Home</a></li> + <li class="active">Library</li> + </ul> + <ul class="breadcrumb" style="margin-bottom: 5px;"> + <li><a href="#">Home</a></li> + <li><a href="#">Library</a></li> + <li class="active">Data</li> + </ul> + </div> +{% highlight html %} +<ul class="breadcrumb"> + <li><a href="#">Home</a></li> + <li><a href="#">Library</a></li> + <li class="active">Data</li> +</ul> +{% endhighlight %} + </div> + + + + <!-- Pagination + ================================================== --> + <div class="bs-docs-section" id="pagination"> + <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> + + <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> + <div class="bs-docs-example"> + <ul class="pagination"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pagination"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> +</ul> +{% endhighlight %} + + <h3>Disabled and active states</h3> + <p>Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.</p> + <div class="bs-docs-example"> + <ul class="pagination"> + <li class="disabled"><a href="#">«</a></li> + <li class="active"><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pagination"> + <li class="disabled"><a href="#">«</a></li> + <li class="active"><a href="#">1</a></li> + ... +</ul> +{% endhighlight %} + <p>You can optionally swap out active or disabled anchors for <code><span></code> to remove click functionality while retaining intended styles.</p> +{% highlight html %} +<ul class="pagination"> + <li class="disabled"><span>«</span></li> + <li class="active"><span>1</span></li> + ... +</ul> +{% endhighlight %} + + + <h3>Sizes</h3> + <p>Fancy larger or smaller pagination? Add <code>.pagination-large</code>, <code>.pagination-small</code>, or <code>.pagination-mini</code> for additional sizes.</p> + <div class="bs-docs-example"> + <div> + <ul class="pagination pagination-large"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + <div> + <ul class="pagination"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + <div> + <ul class="pagination pagination-small"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + <div> + <ul class="pagination pagination-mini"> + <li><a href="#">«</a></li> + <li><a href="#">1</a></li> + <li><a href="#">2</a></li> + <li><a href="#">3</a></li> + <li><a href="#">4</a></li> + <li><a href="#">5</a></li> + <li><a href="#">»</a></li> + </ul> + </div> + </div> +{% highlight html %} +<ul class="pagination pagination-large">...</ul> +<ul class="pagination pagination">...</ul> +<ul class="pagination pagination-small">...</ul> +<ul class="pagination pagination-mini">...</ul> +{% endhighlight %} + + + <h2 id="pagination-pager">Pager</h2> + <p>Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.</p> + + <h3>Default example</h3> + <p>By default, the pager centers links.</p> + <div class="bs-docs-example"> + <ul class="pager"> + <li><a href="#">Previous</a></li> + <li><a href="#">Next</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pager"> + <li><a href="#">Previous</a></li> + <li><a href="#">Next</a></li> +</ul> +{% endhighlight %} + + <h3>Aligned links</h3> + <p>Alternatively, you can align each link to the sides:</p> + <div class="bs-docs-example"> + <ul class="pager"> + <li class="previous"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pager"> + <li class="previous"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> +</ul> +{% endhighlight %} + + + <h3>Optional disabled state</h3> + <p>Pager links also use the general <code>.disabled</code> utility class from the pagination.</p> + <div class="bs-docs-example"> + <ul class="pager"> + <li class="previous disabled"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> + </ul> + </div> +{% highlight html %} +<ul class="pager"> + <li class="previous disabled"><a href="#">← Older</a></li> + <li class="next"><a href="#">Newer →</a></li> +</ul> +{% endhighlight %} + </div> + + + + <!-- Labels + ================================================== --> + <div class="bs-docs-section" id="labels"> + <div class="page-header"> + <h1>Labels</h1> + </div> + <p class="lead"></p> + + <h3>Example</h3> + <div class="bs-docs-example"> + <h1>Example heading <span class="label">New</span></h1> + <h2>Example heading <span class="label">New</span></h2> + <h3>Example heading <span class="label">New</span></h3> + <h4>Example heading <span class="label">New</span></h4> + <h5>Example heading <span class="label">New</span></h5> + <h6>Example heading <span class="label">New</span></h6> + </div> +{% highlight html %} +<h3>Example heading <span class="label">New</span></h3> +{% endhighlight %} + + <h3>Available variations</h3> + <p>Add any of the below mentioned modifier classes to change the appearance of a label.</p> + <div class="bs-docs-example"> + <span class="label">Default</span> + <span class="label label-success">Success</span> + <span class="label label-warning">Warning</span> + <span class="label label-danger">Danger</span> + <span class="label label-info">Info</span> + </div> +{% highlight html %} +<span class="label">Default</span> +<span class="label label-success">Success</span> +<span class="label label-warning">Warning</span> +<span class="label label-danger">Danger</span> +<span class="label label-info">Info</span> +{% endhighlight %} + + </div> + + + + <!-- Badges + ================================================== --> + <div class="bs-docs-section" id="badges"> + <div class="page-header"> + <h1>Badges</h1> + </div> + <p class="lead">Easily highlight new or unread items by adding a <code><span class="badge"></code> to links, Bootstrap navs, and more.</p> + + <div class="bs-docs-example"> + <a href="#">Inbox <span class="badge">42</span></a> + </div> +{% highlight html %} +<a href="#">Inbox <span class="badge">42</span></a> +{% endhighlight %} + + <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-docs-sidenote"> + <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> + + <h4>Adapts to active nav states</h4> + <p>Built-in styles are included for placing badges in active states in pill and list navigations.</p> + <div class="bs-docs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Home <span class="badge">42</span></a></li> + <li><a href="#">Profile</a></li> + <li><a href="#">Messages <span class="badge">3</span></a></li> + </ul> + <br> + <ul class="nav nav-pills nav-stacked" style="max-width: 260px;"> + <li class="active"> + <a href="#"> + <span class="badge pull-right">42</span> + Home + </a> + </li> + <li><a href="#">Profile</a></li> + <li> + <a href="#"> + <span class="badge pull-right">3</span> + Messages + </a> + </li> + </ul> + </div> +{% highlight html %} +<ul class="nav nav-pills nav-stacked"> + <li class="active"> + <a href="#"> + <span class="badge pull-right">42</span> + Home + </a> + </li> + ... +</ul> +{% endhighlight %} + </div> + + + + <!-- Typographic components + ================================================== --> + <div class="bs-docs-section" id="type-components"> + <div class="page-header"> + <h1>Typographic components</h1> + </div> + + <h2 id="type-components-jumbotron">Jumbotron</h2> + <p>A lightweight, flexible component to showcase key content on your site. It works well on marketing and content-heavy sites.</p> + <div class="bs-docs-example"> + <div class="jumbotron"> + <h1>Hello, world!</h1> + <p>This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p> + <p><a class="btn btn-primary btn-large">Learn more</a></p> + </div> + </div> +{% highlight html %} +<div class="jumbotron"> + <h1>Hello, world!</h1> + <p>...</p> + <p><a class="btn btn-primary btn-large">Learn more</a></p> +</div> +{% endhighlight %} + + <h2 id="type-components-page-header">Page header</h2> + <p>A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code> element, as well as most other components (with additional styles).</p> + <div class="bs-docs-example"> + <div class="page-header"> + <h1>Example page header <small>Subtext for header</small></h1> + </div> + </div> +{% highlight html %} +<div class="page-header"> + <h1>Example page header <small>Subtext for header</small></h1> +</div> +{% endhighlight %} + </div> + + + + <!-- Thumbnails + ================================================== --> + <div class="bs-docs-section" id="thumbnails"> + <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> + + <h3>Default thumbnails</h3> + <p>By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.</p> + <div class="bs-docs-example"> + <div class="row"> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/260x180" alt=""> + </a> + </div> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/260x180" alt=""> + </a> + </div> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/260x180" alt=""> + </a> + </div> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/260x180" alt=""> + </a> + </div> + </div> + </div><!-- /.bs-docs-example --> +{% highlight html %} +<div class="row"> + <div class="col-lg-3"> + <a href="#" class="thumbnail"> + <img data-src="holder.js/260x180" alt=""> + </a> + </div> + ... +</div> +{% endhighlight %} + + <h3>Custom content thumbnails</h3> + <p>With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.</p> + <div class="bs-docs-example"> + <div class="row"> + <div class="col-lg-4"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> + </div> + </div> + </div> + <div class="col-lg-4"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> + </div> + </div> + </div> + </div> + </div><!-- /.bs-docs-example --> +{% highlight html %} +<div class="row"> + <div class="col-lg-3"> + <div class="thumbnail"> + <img data-src="holder.js/300x200" alt=""> + <div class="caption"> + <h3>Thumbnail label</h3> + <p>...</p> + <p><a href="#" class="btn btn-primary">Action</a> <a href="#" class="btn">Action</a></p> + </div> + </div> + </div> +</div> +{% endhighlight %} + </div> + + + + + <!-- Alerts + ================================================== --> + <div class="bs-docs-section" id="alerts"> + <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> + + <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> + <div class="bs-docs-example"> + <div class="alert"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Warning!</strong> Best check yo self, you're not looking too good. + </div> + </div> +{% highlight html %} +<div class="alert"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Warning!</strong> Best check yo self, you're not looking too good. +</div> +{% endhighlight %} + + <h3 id="alerts-block">Block alerts</h3> + <p>For longer messages, increase the padding on the top and bottom of the alert wrapper by adding <code>.alert-block</code>.</p> + <div class="bs-docs-example"> + <div class="alert alert-block"> + <button type="button" class="close" data-dismiss="alert">×</button> + <h4>Warning!</h4> + <p>Best check yo self, you're not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> + </div> + </div> +{% highlight html %} +<div class="alert alert-block"> + <button type="button" class="close" data-dismiss="alert">×</button> + <h4>Warning!</h4> + <p>...</p> +</div> +{% endhighlight %} + + <h3 id="alerts-alternatives">Contextual alternatives</h3> + <p>Add optional classes to change an alert's connotation.</p> + <div class="bs-docs-example"> + <div class="alert alert-danger"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Oh snap!</strong> Change a few things up and try submitting again. + </div> + <div class="alert alert-success"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Well done!</strong> You successfully read this important alert message. + </div> + <div class="alert alert-info"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Heads up!</strong> This alert needs your attention, but it's not super important. + </div> + </div> +{% highlight html %} +<div class="alert alert-danger">...</div> +<div class="alert alert-success">...</div> +<div class="alert alert-info">...</div> +{% endhighlight %} + </div> + + + + + <!-- Progress bars + ================================================== --> + <div class="bs-docs-section" id="progress"> + <div class="page-header"> + <h1>Progress bars</h1> + </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-docs-sidenote"> + <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> + + <h3 id="progress-basic">Basic</h3> + <p>Default progress bar with a vertical gradient.</p> + <div class="bs-docs-example"> + <div class="progress"> + <div class="progress-bar" style="width: 60%;"></div> + </div> + </div> +{% highlight html %} +<div class="progress"> + <div class="progress-bar" style="width: 60%;"></div> +</div> +{% endhighlight %} + + <h3 id="progress-alternatives">Contextual alternatives</h3> + <p>Progress bars use some of the same button and alert classes for consistent styles.</p> + <div class="bs-docs-example"> + <div class="progress" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> + </div> + <div class="progress" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> + </div> + <div class="progress" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> + </div> + <div class="progress"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> + </div> + </div> +{% highlight html %} +<div class="progress"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> +</div> +<div class="progress"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> +</div> +<div class="progress"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> +</div> +<div class="progress"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> +</div> +{% endhighlight %} + + <h3 id="progress-striped">Striped</h3> + <p>Uses a gradient to create a striped effect. Not available in IE8.</p> + <div class="bs-docs-example"> + <div class="progress progress-striped" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> + </div> + <div class="progress progress-striped" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> + </div> + <div class="progress progress-striped" style="margin-bottom: 9px;"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> + </div> + <div class="progress progress-striped"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> + </div> + </div> +{% highlight html %} +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-info" style="width: 20%"></div> +</div> +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-success" style="width: 40%"></div> +</div> +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-warning" style="width: 60%"></div> +</div> +<div class="progress progress-striped"> + <div class="progress-bar progress-bar-danger" style="width: 80%"></div> +</div> +{% endhighlight %} + + <h3 id="progress-animated">Animated</h3> + <p>Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.</p> + <div class="bs-docs-example"> + <div class="progress progress-striped active"> + <div class="progress-bar" style="width: 45%"></div> + </div> + </div> +{% highlight html %} +<div class="progress progress-striped active"> + <div class="progress-bar" style="width: 45%"></div> +</div> +{% endhighlight %} + + <h3 id="progress-stacked">Stacked</h3> + <p>Place multiple bars into the same <code>.progress</code> to stack them.</p> + <div class="bs-docs-example"> + <div class="progress"> + <div class="progress-bar progress-bar-success" style="width: 35%"></div> + <div class="progress-bar progress-bar-warning" style="width: 20%"></div> + <div class="progress-bar progress-bar-danger" style="width: 10%"></div> + </div> + </div> +{% highlight html %} +<div class="progress"> + <div class="progress-bar progress-bar-success" style="width: 35%"></div> + <div class="progress-bar progress-bar-warning" style="width: 20%"></div> + <div class="progress-bar progress-bar-danger" style="width: 10%"></div> +</div> +{% endhighlight %} + </div> + + + + + <!-- Media object + ================================================== --> + <div class="bs-docs-section" id="media"> + <div class="page-header"> + <h1>Media object</h1> + </div> + <p class="lead">Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.</p> + + <h3>Default example</h3> + <p>The default media allow to float a media object (images, video, audio) to the left or right of a content block.</p> + <div class="bs-docs-example"> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + </div> + </div> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. + </div> + </div> + </div> + </div> + </div><!-- /.bs-docs-example --> +{% highlight html %} +<div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" src="..."> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + ... + </div> +</div> +{% endhighlight %} + + <h3>Media list</h3> + <p>With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).</p> + <div class="bs-docs-example"> + <ul class="media-list"> + <li class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p> + <!-- Nested media object --> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Nested media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + <!-- Nested media object --> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Nested media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + </div> + </div> + </div> + </div> + <!-- Nested media object --> + <div class="media"> + <a class="pull-left" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Nested media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + </div> + </div> + </div> + </li> + <li class="media"> + <a class="pull-right" href="#"> + <img class="media-object" data-src="holder.js/64x64"> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. + </div> + </li> + </ul> + </div> +{% highlight html %} +<ul class="media-list"> + <li class="media"> + <a class="pull-left" href="#"> + <img class="media-object" src="..."> + </a> + <div class="media-body"> + <h4 class="media-heading">Media heading</h4> + ... + </div> + </li> +</ul> +{% endhighlight %} + </div> + + + + + + <!-- List group + ================================================== --> + <div class="bs-docs-section" id="list-group"> + <div class="page-header"> + <h1>List group</h1> + </div> + <p class="lead">List groups are a flexible and powerful component for displaying not only simple lists of elements, but complex ones with custom content.</p> + + <h3 id="list-group-basic">Basic list group</h3> + <p>The most basic list group is simply an unordered list with list items, and the proper classes. Build upon it with the options that follow, or your own CSS as needed.</p> + <div class="bs-docs-example"> + <ul class="list-group"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> + </ul> + </div> +{% highlight html %} +<ul class="list-group"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <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-docs-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> + <p>Add the badges component to any list group item and it will automatically be positioned on the right.</p> + <div class="bs-docs-example"> + <ul class="list-group"> + <li class="list-group-item"> + <span class="badge">14</span> + Cras justo odio + </li> + <li class="list-group-item"> + <span class="badge">2</span> + Dapibus ac facilisis in + </li> + <li class="list-group-item"> + <span class="badge">1</span> + Morbi leo risus + </li> + </ul> + </div> +{% highlight html %} +<ul class="list-group"> + <li class="list-group-item"> + <span class="badge">14</span> + 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-docs-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> + <p>Linkify list group items by using anchor tags instead of list items (that also means a parent <code><div></code> instead of an <code><ul></code>). No need for individual parents around each element.</p> + <div class="bs-docs-example"> + <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> +{% highlight html %} +<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 %} + + <h3 id="list-group-custom-content">Custom content</h3> + <p>Add nearly any HTML within, even for linked list groups like the one below.</p> + <div class="bs-docs-example"> + <div class="list-group"> + <a href="#" class="list-group-item active"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + </a> + <a href="#" class="list-group-item"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + </a> + <a href="#" class="list-group-item"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.</p> + </a> + </div> + </div> +{% highlight html %} +<div class="list-group"> + <a href="#" class="list-group-item active"> + <h4 class="list-group-item-heading">List group item heading</h4> + <p class="list-group-item-text">...</p> + </a> +</div> +{% endhighlight %} + </div> + + + + + <!-- Panels + ================================================== --> + <div class="bs-docs-section" id="panels"> + <div class="page-header"> + <h1>Panels</h1> + </div> + <p class="lead">While not always necessary, sometimes you need to put your DOM in a box. For those situations, try the panel component.</p> + + <h3 id="panels-basic">Basic panel</h3> + <p>By default, all the <code>.panel</code> does is apply some basic border and padding to contain some content.</p> + <div class="bs-docs-example"> + <div class="panel"> + Basic panel example + </div> + </div> +{% highlight html %} +<div class="panel"> + Basic panel example +</div> +{% endhighlight %} + + <h3 id="panels-heading">Panel with heading</h3> + <p>Easily add a heading to your panel with <code>.panel-heading</code>. Use it on a <code><div></code> or any heading element (e.g., <code><h3></code>).</p> + <div class="bs-docs-example"> + <div class="panel"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + </div> +{% highlight html %} +<div class="panel"> + <div class="panel-heading">Panel heading</div> + Panel content +</div> +{% endhighlight %} + + <h3 id="panels-alternatives">Contextual alternatives</h3> + <p>Like other components, easily make a panel more meaningful to a particular context by adding any of the contextual state classes.</p> + <div class="bs-docs-example"> + <div class="panel panel-primary"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-success"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-warning"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-danger"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + <div class="panel panel-info"> + <div class="panel-heading">Panel heading</div> + Panel content + </div> + </div> +{% highlight html %} +<div class="panel panel-primary">...</div> +<div class="panel panel-success">...</div> +<div class="panel panel-warning">...</div> +<div class="panel panel-danger">...</div> +<div class="panel panel-info">...</div> +{% 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> + <div class="bs-docs-example"> + <div class="panel"> + <!-- Default panel contents --> + <div class="panel-heading">Panel heading</div> + <p>Some default panel content here. Nulla vitae elit libero, a pharetra augue. Aenean lacinia bibendum nulla sed consectetur. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + + <!-- List group --> + <ul class="list-group list-group-flush"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> + </ul> + </div> + </div> +{% highlight html %} +<div class="panel"> + <!-- Default panel contents --> + <div class="panel-heading">Panel heading</div> + <p>...</p> + + <!-- List group --> + <ul class="list-group list-group-flush"> + <li class="list-group-item">Cras justo odio</li> + <li class="list-group-item">Dapibus ac facilisis in</li> + <li class="list-group-item">Morbi leo risus</li> + <li class="list-group-item">Porta ac consectetur ac</li> + <li class="list-group-item">Vestibulum at eros</li> + </ul> +</div> +{% endhighlight %} + + </div> + + + + + + <!-- Wells + ================================================== --> + <div class="bs-docs-section" id="wells"> + <div class="page-header"> + <h1>Wells</h1> + </div> + + <h3>Default well</h3> + <p>Use the well as a simple effect on an element to give it an inset effect.</p> + <div class="bs-docs-example"> + <div class="well"> + Look, I'm in a well! + </div> + </div> +{% highlight html %} +<div class="well">...</div> +{% endhighlight %} + <h3>Optional classes</h3> + <p>Control padding and rounded corners with two optional modifier classes.</p> + <div class="bs-docs-example"> + <div class="well well-large"> + Look, I'm in a well! + </div> + </div> +{% highlight html %} +<div class="well well-large">...</div> +{% endhighlight %} + + <div class="bs-docs-example"> + <div class="well well-small"> + Look, I'm in a well! + </div> + </div> +{% highlight html %} +<div class="well well-small">...</div> +{% endhighlight %} + </div> + + + + + + <div class="bs-docs-section-header" id="js"> + <h1>JavaScript plugins</h1> + <p class="lead">Bring Bootstrap's components to life with over a dozen custom jQuery plugins. Easily include them all, or one by one.</p> + </div> + + + <!-- Overview + ================================================== --> + <div class="bs-docs-section" id="js-overview"> + <div class="page-header"> + <h1>Overview</h1> + </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-docs-sidenote"> + <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 (in notes like this one).</p> + </div> + + <h3 id="js-data-attrs">Data attributes</h3> + <p>You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first class API and should be your first consideration when using a plugin.</p> + + <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this: +{% highlight js %} +$('body').off('.data-api') +{% endhighlight %} + + <p>Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:</p> +{% highlight js %} +$('body').off('.alert.data-api') +{% endhighlight %} + + <h3 id="js-programmatic-api">Programmatic API</h3> + <p>We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.</p> +{% highlight js %} +$(".btn.danger").button("toggle").addClass("fat") +{% endhighlight %} + + <p>All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):</p> +{% highlight js %} +$("#myModal").modal() // initialized with defaults +$("#myModal").modal({ keyboard: false }) // initialized with no keyboard +$("#myModal").modal('show') // initializes and invokes show immediately</p> +{% endhighlight %} + + <p>Each plugin also exposes its raw constructor on a `Constructor` property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.</p> + + <h3 id="js-noconflict">No conflict</h3> + <p>Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.</p> +{% highlight js %} +var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value +$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the bootstrap functionality +{% endhighlight %} + + <h3 id="js-events">Events</h3> + <p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p> + <p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p> +{% highlight js %} +$('#myModal').on('show', function (e) { + if (!data) return e.preventDefault() // stops modal from being shown +}) +{% endhighlight %} + </div> + + + + <!-- Transitions + ================================================== --> + <div class="bs-docs-section" id="transitions"> + <div class="page-header"> + <h1>Transitions <small>transition.js</small></h1> + </div> + <h3>About transitions</h3> + <p>For simple transition effects, include transition.js once alongside the other JS files. If you're using the compiled (or minified) bootstrap.js, there is no need to include this—it's already there.</p> + <h3>Use cases</h3> + <p>A few examples of the transition plugin:</p> + <ul> + <li>Sliding or fading in modals</li> + <li>Fading out tabs</li> + <li>Fading out alerts</li> + <li>Sliding carousel panes</li> + </ul> + + <!-- Ideas: include docs for .fade.in, .slide.in, etc --> + </div> + + + + <!-- Modal + ================================================== --> + <div class="bs-docs-section" id="modals"> + <div class="page-header"> + <h1>Modals <small>modal.js</small></h1> + </div> + + <h2 id="modals-examples">Examples</h2> + <p>Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.</p> + + <h3>Static example</h3> + <p>A rendered modal with header, body, and set of actions in the footer.</p> + <div class="bs-docs-example bs-docs-example-modal"> + <div class="modal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">Modal title</h4> + </div> + <div class="modal-body"> + <p>One fine body…</p> + </div> + <div class="modal-footer"> + <a href="#" class="btn">Close</a> + <a href="#" class="btn btn-primary">Save changes</a> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> + </div><!-- /.modal --> + </div><!-- /example --> +{% highlight html %} +<div class="modal fade"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">Modal title</h4> + </div> + <div class="modal-body"> + <p>One fine body…</p> + </div> + <div class="modal-footer"> + <a href="#" class="btn">Close</a> + <a href="#" class="btn btn-primary">Save changes</a> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> +</div><!-- /.modal --> +{% endhighlight %} + + <h3>Live demo</h3> + <p>Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.</p> + <!-- sample modal content --> + <div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title" id="myModalLabel">Modal Heading</h4> + </div> + <div class="modal-body"> + <h4>Text in a modal</h4> + <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> + + <h4>Popover in a modal</h4> + <p>This <a href="#" role="button" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on click.</p> + + <h4>Tooltips in a modal</h4> + <p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> should have tooltips on hover.</p> + + <hr> + + <h4>Overflowing text to show optional scrollbar</h4> + <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> + <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> + <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> + <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + </div> + <div class="modal-footer"> + <button class="btn" data-dismiss="modal">Close</button> + <button class="btn btn-primary">Save changes</button> + </div> + + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> + </div><!-- /.modal --> + + <div class="bs-docs-example" style="padding-bottom: 24px;"> + <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a> + </div><!-- /example --> +{% highlight html %} + <!-- Button trigger modal --> + <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a> + + <!-- Modal --> + <div class="modal" id="myModal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">Modal title</h4> + </div> + <div class="modal-body"> + ... + </div> + <div class="modal-footer"> + <a href="#" class="btn">Close</a> + <a href="#" class="btn btn-primary">Save changes</a> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> + </div><!-- /.modal --> +{% endhighlight %} + + + + <h2 id="modals-usage">Usage</h2> + + <h3>Via data attributes</h3> + <p>Activate a modal without writing JavaScript. Set <code>data-toggle="modal"</code> on a controller element, like a button, along with a <code>data-target="#foo"</code> or <code>href="#foo"</code> to target a specific modal to toggle.</p> +{% highlight html %} +<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button> +{% endhighlight %} + + <h3>Via JavaScript</h3> + <p>Call a modal with id <code>myModal</code> with a single line of JavaScript:</p> + {% highlight js %}$('#myModal').modal(options){% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 50px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>backdrop</td> + <td>boolean</td> + <td>true</td> + <td>Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.</td> + </tr> + <tr> + <td>keyboard</td> + <td>boolean</td> + <td>true</td> + <td>Closes the modal when escape key is pressed</td> + </tr> + <tr> + <td>show</td> + <td>boolean</td> + <td>true</td> + <td>Shows the modal when initialized.</td> + </tr> + <tr> + <td>remote</td> + <td>path</td> + <td>false</td> + <td><p>If a remote url is provided, content will be loaded via jQuery's <code>load</code> method and injected into the <code>.modal-body</code>. If you're using the data api, you may alternatively use the <code>href</code> tag to specify the remote source. An example of this is shown below:</p> +{% highlight html %} +<a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a> +{% endhighlight %} + </tr> + </tbody> + </table> + + <h3>Methods</h3> + + <h4>.modal(options)</h4> + <p>Activates your content as a modal. Accepts an optional options <code>object</code>.</p> +{% highlight js %} +$('#myModal').modal({ + keyboard: false +}) +{% endhighlight %} + + <h4>.modal('toggle')</h4> + <p>Manually toggles a modal.</p> + {% highlight js %}$('#myModal').modal('toggle'){% endhighlight %} + + <h4>.modal('show')</h4> + <p>Manually opens a modal.</p> + {% highlight js %}$('#myModal').modal('show'){% endhighlight %} + + <h4>.modal('hide')</h4> + <p>Manually hides a modal.</p> + {% highlight js %}$('#myModal').modal('hide'){% endhighlight %} + + <h3>Events</h3> + <p>Bootstrap's modal class exposes a few events for hooking into modal functionality.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>show</td> + <td>This event fires immediately when the <code>show</code> instance method is called.</td> + </tr> + <tr> + <td>shown</td> + <td>This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).</td> + </tr> + <tr> + <td>hide</td> + <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td> + </tr> + <tr> + <td>hidden</td> + <td>This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).</td> + </tr> + </tbody> + </table> +{% highlight js %} +$('#myModal').on('hidden', function () { + // do something… +}) +{% endhighlight %} + </div> + + + + <!-- Dropdowns + ================================================== --> + <section id="dropdowns"> + <div class="page-header"> + <h1>Dropdowns <small>dropdown.js</small></h1> + </div> + + + <h2>Examples</h2> + <p>Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.</p> + + <h3>Within a navbar</h3> + <div class="bs-docs-example"> + <div id="navbar-example" class="navbar navbar-static"> + <div class="navbar-inner"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Project Name</a> + <ul class="nav" role="navigation"> + <li class="dropdown"> + <a id="drop1" href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu" role="menu" aria-labelledby="drop1"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://google.com">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#anotherAction">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation" class="divider"></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + </ul> + </li> + <li class="dropdown"> + <a href="#" id="drop2" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown 2 <b class="caret"></b></a> + <ul class="dropdown-menu" role="menu" aria-labelledby="drop2"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation" class="divider"></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + </ul> + </li> + </ul> + <ul class="nav pull-right"> + <li id="fat-menu" class="dropdown"> + <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown 3 <b class="caret"></b></a> + <ul class="dropdown-menu" role="menu" aria-labelledby="drop3"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation" class="divider"></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + </ul> + </li> + </ul> + </div> + </div> + </div> <!-- /navbar-example --> + </div> <!-- /example --> + + <h3>Within tabs</h3> + <div class="bs-docs-example"> + <ul class="nav nav-pills"> + <li class="active"><a href="#">Regular link</a></li> + <li class="dropdown"> + <a class="dropdown-toggle" id="drop4" role="button" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> + <ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation" class="divider"></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + </ul> + </li> + <li class="dropdown"> + <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">Dropdown 2 <b class="caret"></b></a> + <ul id="menu2" class="dropdown-menu" role="menu" aria-labelledby="drop5"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation" class="divider"></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + </ul> + </li> + <li class="dropdown"> + <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">Dropdown 3 <b class="caret"></b></a> + <ul id="menu3" class="dropdown-menu" role="menu" aria-labelledby="drop5"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation" class="divider"></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + </ul> + </li> + </ul> <!-- /tabs --> + </div> <!-- /example --> + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + + <h3>Via data attributes</h3> + <p>Add <code>data-toggle="dropdown"</code> to a link or button to toggle a dropdown.</p> +{% highlight html %} +<div class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a> + <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> + ... + </ul> +</div> +{% endhighlight %} + <p>To keep URLs intact, use the <code>data-target</code> attribute instead of <code>href="#"</code>.</p> +{% highlight html %} +<div class="dropdown"> + <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> + ... + </ul> +</div> +{% endhighlight %} + + <h3>Via JavaScript</h3> + <p>Call the dropdowns via JavaScript:</p> +{% highlight js %} +$('.dropdown-toggle').dropdown() +{% endhighlight %} + + <h3>Options</h3> + <p><em>None</em></p> + + <h3>Methods</h3> + <h4>$().dropdown('toggle')</h4> + <p>A programmatic api for toggling menus for a given navbar or tabbed navigation.</p> + </section> + + + + <!-- ScrollSpy + ================================================== --> + <section id="scrollspy"> + <div class="page-header"> + <h1>ScrollSpy <small>scrollspy.js</small></h1> + </div> + + + <h2>Example in navbar</h2> + <p>The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.</p> + <div class="bs-docs-example"> + <div id="navbar-example" class="navbar navbar-static"> + <div class="navbar-inner"> + <div class="container" style="width: auto;"> + <a class="navbar-brand" href="#">Project Name</a> + <ul class="nav"> + <li><a href="#fat">@fat</a></li> + <li><a href="#mdo">@mdo</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#one">one</a></li> + <li><a href="#two">two</a></li> + <li class="divider"></li> + <li><a href="#three">three</a></li> + </ul> + </li> + </ul> + </div> + </div> + </div> + <div data-spy="scroll" data-target="#navbar-example" 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> + <p>Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.</p> + <h4 id="one">one</h4> + <p>Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.</p> + <h4 id="two">two</h4> + <p>In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.</p> + <h4 id="three">three</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> + <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. + </p> + </div> + </div><!-- /example --> + + + <h2>Usage</h2> + + <h3>Via data attributes</h3> + <p>To easily add scrollspy behavior to your topbar navigation, add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the <code><body></code>. Then add the <code>data-target</code> attribute with the ID or class of the parent element of any Bootstrap <code>.nav</code> component.</p> +{% highlight html %} +<body data-spy="scroll" data-target="#navbar-example"> + ... +</body> +{% endhighlight %} + + <h3>Via JavaScript</h3> + <p>Call the scrollspy via JavaScript:</p> +{% highlight js %} +$('#navbar-example').scrollspy() +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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> + + <h3>Methods</h3> + <h4>.scrollspy('refresh')</h4> + <p>When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:</p> +{% highlight js %} +$('[data-spy="scroll"]').each(function () { + var $spy = $(this).scrollspy('refresh') +}); +{% endhighlight %} + + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 100px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>offset</td> + <td>number</td> + <td>10</td> + <td>Pixels to offset from top when calculating position of scroll.</td> + </tr> + </tbody> + </table> + + <h3>Events</h3> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>activate</td> + <td>This event fires whenever a new item becomes activated by the scrollspy.</td> + </tr> + </tbody> + </table> + </section> + + + + <!-- Tabs + ================================================== --> + <section id="tabs"> + <div class="page-header"> + <h1>Togglable tabs <small>tab.js</small></h1> + </div> + + + <h2>Example tabs</h2> + <p>Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.</p> + <div class="bs-docs-example bs-docs-example-tabs"> + <ul id="myTab" class="nav nav-tabs"> + <li class="active"><a href="#home" data-toggle="tab">Home</a></li> + <li><a href="#profile" data-toggle="tab">Profile</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#dropdown1" data-toggle="tab">@fat</a></li> + <li><a href="#dropdown2" data-toggle="tab">@mdo</a></li> + </ul> + </li> + </ul> + <div id="myTabContent" class="tab-content"> + <div class="tab-pane fade in active" id="home"> + <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p> + </div> + <div class="tab-pane fade" id="profile"> + <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p> + </div> + <div class="tab-pane fade" id="dropdown1"> + <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p> + </div> + <div class="tab-pane fade" id="dropdown2"> + <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p> + </div> + </div> + </div><!-- /example --> + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + <p>Enable tabbable tabs via JavaScript (each tab needs to be activated individually):</p> +{% highlight js %} +$('#myTab a').click(function (e) { + e.preventDefault(); + $(this).tab('show'); +}) +{% endhighlight %} + + <p>You can activate individual tabs in several ways:</p> +{% highlight js %} +$('#myTab a[href="#profile"]').tab('show'); // Select tab by name +$('#myTab a:first').tab('show'); // Select first tab +$('#myTab a:last').tab('show'); // Select last tab +$('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed) +{% endhighlight %} + + <h3>Markup</h3> + <p>You can activate a tab or pill navigation without writing any JavaScript by simply specifying <code>data-toggle="tab"</code> or <code>data-toggle="pill"</code> on an element. Adding the <code>nav</code> and <code>nav-tabs</code> classes to the tab <code>ul</code> will apply the Bootstrap tab styling.</p> +{% highlight html %} +<ul class="nav nav-tabs"> + <li><a href="#home" data-toggle="tab">Home</a></li> + <li><a href="#profile" data-toggle="tab">Profile</a></li> + <li><a href="#messages" data-toggle="tab">Messages</a></li> + <li><a href="#settings" data-toggle="tab">Settings</a></li> +</ul> +{% endhighlight %} + + <p>To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>.</p> + + <h3>Methods</h3> + <h4>$().tab</h4> + <p> + Activates a tab element and content container. Tab should have either a <code>data-target</code> or an <code>href</code> targeting a container node in the DOM. + </p> +{% highlight html %} +<ul class="nav nav-tabs" id="myTab"> + <li class="active"><a href="#home">Home</a></li> + <li><a href="#profile">Profile</a></li> + <li><a href="#messages">Messages</a></li> + <li><a href="#settings">Settings</a></li> +</ul> + +<div class="tab-content"> + <div class="tab-pane active" id="home">...</div> + <div class="tab-pane" id="profile">...</div> + <div class="tab-pane" id="messages">...</div> + <div class="tab-pane" id="settings">...</div> +</div> + +<script> + $(function () { + $('#myTab a:last').tab('show'); + }) +</script> +{% endhighlight %} + + <h3>Events</h3> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>show</td> + <td>This event fires on tab show, but before the new tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.</td> + </tr> + <tr> + <td>shown</td> + <td>This event fires on tab show after a tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.</td> + </tr> + </tbody> + </table> +{% highlight js %} +$('a[data-toggle="tab"]').on('shown', function (e) { + e.target // activated tab + e.relatedTarget // previous tab +}) +{% endhighlight %} + </section> + + + <!-- Tooltips + ================================================== --> + <section id="tooltips"> + <div class="page-header"> + <h1>Tooltips <small>tooltip.js</small></h1> + </div> + + + <h2>Examples</h2> + <p>Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.</p> + <p>Hover over the links below to see tooltips:</p> + <div class="bs-docs-example tooltip-demo"> + <p class="muted" style="margin-bottom: 0;">Tight pants next level keffiyeh <a href="#" data-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-toggle="tooltip" title="Another one here too">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-toggle="tooltip" title="The last tip!">twitter handle</a> freegan cred raw denim single-origin coffee viral. + </p> + </div><!-- /example --> + + <h3>Four directions</h3> + <div class="bs-docs-example tooltip-demo"> + <ul class="bs-docs-tooltip-examples"> + <li><a href="#" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</a></li> + <li><a href="#" data-toggle="tooltip" data-placement="right" title="Tooltip on right">Tooltip on right</a></li> + <li><a href="#" data-toggle="tooltip" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</a></li> + <li><a href="#" data-toggle="tooltip" data-placement="left" title="Tooltip on left">Tooltip on left</a></li> + </ul> + </div><!-- /example --> + + + <h3>Tooltips in input groups</h3> + <p>When using tooltips and popovers with the Bootstrap input groups, you'll have to set the <code>container</code> (documented below) option to avoid unwanted side effects.</p> + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + <p>Trigger the tooltip via JavaScript:</p> +{% highlight js %} +$('#example').tooltip(options) +{% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 100px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>animation</td> + <td>boolean</td> + <td>true</td> + <td>apply a css fade transition to the tooltip</td> + </tr> + <tr> + <td>html</td> + <td>boolean</td> + <td>false</td> + <td>Insert html into the tooltip. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.</td> + </tr> + <tr> + <td>placement</td> + <td>string | function</td> + <td>'top'</td> + <td>how to position the tooltip - top | bottom | left | right</td> + </tr> + <tr> + <td>selector</td> + <td>string</td> + <td>false</td> + <td>If a selector is provided, tooltip objects will be delegated to the specified targets.</td> + </tr> + <tr> + <td>title</td> + <td>string | function</td> + <td>''</td> + <td>default title value if `title` tag isn't present</td> + </tr> + <tr> + <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 seperated, trigger types.</td> + </tr> + <tr> + <td>delay</td> + <td>number | object</td> + <td>0</td> + <td> + <p>delay showing and hiding the tooltip (ms) - does not apply to manual trigger type</p> + <p>If a number is supplied, delay is applied to both hide/show</p> + <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p> + </td> + </tr> + <tr> + <td>container</td> + <td>string | false</td> + <td>false</td> + <td> + <p>Appends the tooltip to a specific element <code>container: 'body'</code></p> + </td> + </tr> + </tbody> + </table> + <div class="bs-docs-sidenote"> + <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> + + <h3>Markup</h3> +{% highlight html %} +<a href="#" data-toggle="tooltip" title="first tooltip">Hover over me</a> +{% endhighlight %} + + <h3>Methods</h3> + + <h4>$().tooltip(options)</h4> + <p>Attaches a tooltip handler to an element collection.</p> + + <h4>.tooltip('show')</h4> + <p>Reveals an element's tooltip.</p> + {% highlight js %}$('#element').tooltip('show'){% endhighlight %} + + <h4>.tooltip('hide')</h4> + <p>Hides an element's tooltip.</p> + {% highlight js %}$('#element').tooltip('hide'){% endhighlight %} + + <h4>.tooltip('toggle')</h4> + <p>Toggles an element's tooltip.</p> + {% highlight js %}$('#element').tooltip('toggle'){% endhighlight %} + + <h4>.tooltip('destroy')</h4> + <p>Hides and destroys an element's tooltip.</p> + {% highlight js %}$('#element').tooltip('destroy'){% endhighlight %} + </section> + + + + <!-- Popovers + ================================================== --> + <section id="popovers"> + <div class="page-header"> + <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-docs-sidenote"> + <h4>Plugin dependency</h4> + <p>Popovers require the <a href="#tooltips">tooltip plugin</a> to be included in your version of Bootstrap.</p> + </div> + + <h3>Static popover</h3> + <p>Four options are available: top, right, bottom, and left aligned.</p> + <div class="bs-docs-example bs-docs-example-popover"> + <div class="popover top"> + <div class="arrow"></div> + <h3 class="popover-title">Popover top</h3> + <div class="popover-content"> + <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> + </div> + </div> + + <div class="popover right"> + <div class="arrow"></div> + <h3 class="popover-title">Popover right</h3> + <div class="popover-content"> + <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> + </div> + </div> + + <div class="popover bottom"> + <div class="arrow"></div> + <h3 class="popover-title">Popover bottom</h3> + <div class="popover-content"> + <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> + </div> + </div> + + <div class="popover left"> + <div class="arrow"></div> + <h3 class="popover-title">Popover left</h3> + <div class="popover-content"> + <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> + </div> + </div> + + <div class="clearfix"></div> + </div> + + <h3>Live demo</h3> + <div class="bs-docs-example" style="padding-bottom: 24px;"> + <a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">Click to toggle popover</a> + </div> + + <h4>Four directions</h4> + <div class="bs-docs-example tooltip-demo"> + <ul class="bs-docs-tooltip-examples"> + <li><a href="#" class="btn" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on top">Popover on top</a></li> + <li><a href="#" class="btn" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on right">Popover on right</a></li> + <li><a href="#" class="btn" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on bottom">Popover on bottom</a></li> + <li><a href="#" class="btn" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on left">Popover on left</a></li> + </ul> + </div><!-- /example --> + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + <p>Enable popovers via JavaScript:</p> + {% highlight js %}$('#example').popover(options){% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 100px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>animation</td> + <td>boolean</td> + <td>true</td> + <td>apply a css fade transition to the tooltip</td> + </tr> + <tr> + <td>html</td> + <td>boolean</td> + <td>false</td> + <td>Insert html into the popover. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.</td> + </tr> + <tr> + <td>placement</td> + <td>string | function</td> + <td>'right'</td> + <td>how to position the popover - top | bottom | left | right</td> + </tr> + <tr> + <td>selector</td> + <td>string</td> + <td>false</td> + <td>if a selector is provided, tooltip objects will be delegated to the specified targets if a selector is provided, tooltip objects will be delegated to the specified targets. in practice, this is used to enable dynamic HTML content to have popovers added. See <a href="https://github.com/twitter/bootstrap/issues/4215">this</a> and <a href="http://jsfiddle.net/KPeKS/4/">an informative example</a>.</td> + </tr> + <tr> + <td>trigger</td> + <td>string</td> + <td>'click'</td> + <td>how popover is triggered - click | hover | focus | manual</td> + </tr> + <tr> + <td>title</td> + <td>string | function</td> + <td>''</td> + <td>default title value if `title` attribute isn't present</td> + </tr> + <tr> + <td>content</td> + <td>string | function</td> + <td>''</td> + <td>default content value if `data-content` attribute isn't present</td> + </tr> + <tr> + <td>delay</td> + <td>number | object</td> + <td>0</td> + <td> + <p>delay showing and hiding the popover (ms) - does not apply to manual trigger type</p> + <p>If a number is supplied, delay is applied to both hide/show</p> + <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p> + </td> + </tr> + <tr> + <td>container</td> + <td>string | false</td> + <td>false</td> + <td> + <p>Appends the popover to a specific element <code>container: 'body'</code></p> + </td> + </tr> + </tbody> + </table> + <div class="bs-docs-sidenote"> + <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> + + <h3>Markup</h3> + <p>For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.</p> + + <h3>Methods</h3> + <h4>$().popover(options)</h4> + <p>Initializes popovers for an element collection.</p> + + <h4>.popover('show')</h4> + <p>Reveals an elements popover.</p> + {% highlight js %}$('#element').popover('show'){% endhighlight %} + + <h4>.popover('hide')</h4> + <p>Hides an elements popover.</p> + {% highlight js %}$('#element').popover('hide'){% endhighlight %} + + <h4>.popover('toggle')</h4> + <p>Toggles an elements popover.</p> + {% highlight js %}$('#element').popover('toggle'){% endhighlight %} + + <h4>.popover('destroy')</h4> + <p>Hides and destroys an element's popover.</p> + {% highlight js %}$('#element').popover('destroy'){% endhighlight %} + </section> + + + + <!-- Alert + ================================================== --> + <div class="bs-docs-section" id="js-alerts"> + <div class="page-header"> + <h1>Alert messages <small>alert.js</small></h1> + </div> + + + <h2>Example alerts</h2> + <p>Add dismiss functionality to all alert messages with this plugin.</p> + <div class="bs-docs-example"> + <div class="alert fade in"> + <button type="button" class="close" data-dismiss="alert">×</button> + <strong>Holy guacamole!</strong> Best check yo self, you're not looking too good. + </div> + </div><!-- /example --> + + <div class="bs-docs-example"> + <div class="alert alert-block alert-error fade in"> + <button type="button" class="close" data-dismiss="alert">×</button> + <h4>Oh snap! You got an error!</h4> + <p>Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.</p> + <p> + <a class="btn btn-danger" href="#">Take this action</a> <a class="btn" href="#">Or do this</a> + </p> + </div> + </div><!-- /example --> + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + <p>Enable dismissal of an alert via JavaScript:</p> + {% highlight js %}$(".alert").alert(){% endhighlight %} + + <h3>Markup</h3> + <p>Just add <code>data-dismiss="alert"</code> to your close button to automatically give an alert close functionality.</p> + {% highlight html %}<a class="close" data-dismiss="alert" href="#">×</a>{% endhighlight %} + + <h3>Methods</h3> + + <h4>$().alert()</h4> + <p>Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.</p> + + <h4>.alert('close')</h4> + <p>Closes an alert.</p> + {% highlight js %}$(".alert").alert('close'){% endhighlight %} + + + <h3>Events</h3> + <p>Bootstrap's alert class exposes a few events for hooking into alert functionality.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>close</td> + <td>This event fires immediately when the <code>close</code> instance method is called.</td> + </tr> + <tr> + <td>closed</td> + <td>This event is fired when the alert has been closed (will wait for css transitions to complete).</td> + </tr> + </tbody> + </table> +{% highlight js %} +$('#my-alert').bind('closed', function () { + // do something… +}) +{% endhighlight %} + </div> + + + + <!-- Buttons + ================================================== --> + <div class="bs-docs-section" id="js-buttons"> + <div class="page-header"> + <h1>Buttons <small>button.js</small></h1> + </div> + + <h2>Example uses</h2> + <p>Do more with buttons. Control button states or create groups of buttons for more components like toolbars.</p> + + <h4>Stateful</h4> + <p>Add <code>data-loading-text="Loading..."</code> to use a loading state on a button.</p> + <div class="bs-docs-example" style="padding-bottom: 24px;"> + <button type="button" id="fat-btn" data-loading-text="Loading..." class="btn btn-primary"> + Loading state + </button> + </div><!-- /example --> +{% highlight html %} +<button type="button" id="fat-btn" data-loading-text="Loading..." class="btn btn-primary"> + Loading state +</button> +{% endhighlight %} + + <h4>Single toggle</h4> + <p>Add <code>data-toggle="button"</code> to activate toggling on a single button.</p> + <div class="bs-docs-example" style="padding-bottom: 24px;"> + <button type="button" class="btn btn-primary" data-toggle="button">Single toggle</button> + </div><!-- /example --> +{% highlight html %} +<button type="button" class="btn btn-primary" data-toggle="button">Single toggle</button> +{% endhighlight %} + + <h4>Checkbox</h4> + <p>Add <code>data-toggle="buttons-checkbox"</code> for checkbox style toggling on btn-group.</p> + <div class="bs-docs-example" style="padding-bottom: 24px;"> + <div class="btn-group" data-toggle="buttons-checkbox"> + <label class="btn btn-primary"> + <input type="checkbox"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 3 + </label> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="btn-group" data-toggle="buttons-checkbox"> + <label class="btn btn-primary"> + <input type="checkbox"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 3 + </label> +</div> +{% endhighlight %} + + <h4>Radio</h4> + <p>Add <code>data-toggle="buttons-radio"</code> for radio style toggling on btn-group.</p> + <div class="bs-docs-example" style="padding-bottom: 24px;"> + <div class="btn-group" data-toggle="buttons-radio"> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option1"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option2"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option3"> Option 3 + </label> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="btn-group" data-toggle="buttons-radio"> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option1"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option2"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option3"> Option 3 + </label> +</div> +{% endhighlight %} + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + <p>Enable buttons via JavaScript:</p> +{% highlight js %} +$('.nav-tabs').button() +{% endhighlight %} + + <h3>Markup</h3> + <p>Data attributes are integral to the button plugin. Check out the example code below for the various markup types.</p> + + <h3>Options</h3> + <p><em>None</em></p> + + <h3>Methods</h3> + + <h4>$().button('toggle')</h4> + <p>Toggles push state. Gives the button the appearance that it has been activated.</p> + <div class="bs-docs-sidenote"> + <h4>Auto toggling</h4> + <p>You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.</p> + </div> +{% highlight html %} +<button type="button" class="btn" data-toggle="button">...</button> +{% endhighlight %} + + <h4>$().button('loading')</h4> + <p>Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>. + </p> +{% highlight html %} +<button type="button" class="btn" data-loading-text="loading stuff...">...</button> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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> + + <h4>$().button('reset')</h4> + <p>Resets button state - swaps text to original text.</p> + + <h4>$().button(string)</h4> + <p>Resets button state - swaps text to any data defined text state.</p> +{% highlight html %} +<button type="button" class="btn" data-complete-text="finished!" >...</button> +<script> + $('.btn').button('complete') +</script> +{% endhighlight %} + </div> + + + + <!-- Collapse + ================================================== --> + <section id="collapse"> + <div class="page-header"> + <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-docs-sidenote"> + <h4>Plugin dependency</h4> + <p>Collapse requires the <a href="#transitions">transitions plugin</a> to be included in your version of Bootstrap.</p> + </div> + + <h2>Example accordion</h2> + <p>Using the collapse plugin, we built a simple accordion style widget:</p> + + <div class="bs-docs-example"> + <div class="accordion" id="accordion2"> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> + Collapsible Group Item #1 + </a> + </div> + <div id="collapseOne" class="accordion-body collapse in"> + <div class="accordion-inner"> + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. + </div> + </div> + </div> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> + Collapsible Group Item #2 + </a> + </div> + <div id="collapseTwo" class="accordion-body collapse"> + <div class="accordion-inner"> + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. + </div> + </div> + </div> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> + Collapsible Group Item #3 + </a> + </div> + <div id="collapseThree" class="accordion-body collapse"> + <div class="accordion-inner"> + Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. + </div> + </div> + </div> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="accordion" id="accordion2"> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> + Collapsible Group Item #1 + </a> + </div> + <div id="collapseOne" class="accordion-body collapse in"> + <div class="accordion-inner"> + ... + </div> + </div> + </div> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> + Collapsible Group Item #2 + </a> + </div> + <div id="collapseTwo" class="accordion-body collapse"> + <div class="accordion-inner"> + ... + </div> + </div> + </div> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> + Collapsible Group Item #3 + </a> + </div> + <div id="collapseThree" class="accordion-body collapse"> + <div class="accordion-inner"> + ... + </div> + </div> + </div> +</div> +{% endhighlight %} + + <p>You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.</p> +{% highlight html %} +<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo"> + simple collapsible +</button> + +<div id="demo" class="collapse in">...</div> +{% endhighlight %} + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + + <h3>Via data attributes</h3> + <p>Just add <code>data-toggle="collapse"</code> and a <code>data-target</code> to element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a css selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.</p> + <p>To add accordion-like group management to a collapsible control, add the data attribute <code>data-parent="#selector"</code>. Refer to the demo to see this in action.</p> + + <h3>Via JavaScript</h3> + <p>Enable manually with:</p> +{% highlight js %} +$(".collapse").collapse() +{% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-parent=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 50px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>parent</td> + <td>selector</td> + <td>false</td> + <td>If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior)</td> + </tr> + <tr> + <td>toggle</td> + <td>boolean</td> + <td>true</td> + <td>Toggles the collapsible element on invocation</td> + </tr> + </tbody> + </table> + + + <h3>Methods</h3> + + <h4>.collapse(options)</h4> + <p>Activates your content as a collapsible element. Accepts an optional options <code>object</code>. +{% highlight js %} +$('#myCollapsible').collapse({ + toggle: false +}) +{% endhighlight %} + + <h4>.collapse('toggle')</h4> + <p>Toggles a collapsible element to shown or hidden.</p> + + <h4>.collapse('show')</h4> + <p>Shows a collapsible element.</p> + + <h4>.collapse('hide')</h4> + <p>Hides a collapsible element.</p> + + <h3>Events</h3> + <p>Bootstrap's collapse class exposes a few events for hooking into collapse functionality.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>show</td> + <td>This event fires immediately when the <code>show</code> instance method is called.</td> + </tr> + <tr> + <td>shown</td> + <td>This event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).</td> + </tr> + <tr> + <td>hide</td> + <td> + This event is fired immediately when the <code>hide</code> method has been called. + </td> + </tr> + <tr> + <td>hidden</td> + <td>This event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).</td> + </tr> + </tbody> + </table> +{% highlight js %} +$('#myCollapsible').on('hidden', function () { + // do something… +}) +{% endhighlight %} + </section> + + + + <!-- Carousel + ================================================== --> + <section id="carousel"> + <div class="page-header"> + <h1>Carousel <small>carousel.js</small></h1> + </div> + + <h2>Examples</h2> + <p>The slideshow below shows a generic plugin and component for cycling through elements like a carousel.</p> + <div class="bs-docs-example"> + <div id="carousel-example-generic" class="carousel slide bs-docs-carousel-example"> + <ol class="carousel-indicators"> + <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> + <li data-target="#carousel-example-generic" data-slide-to="1"></li> + <li data-target="#carousel-example-generic" data-slide-to="2"></li> + </ol> + <div class="carousel-inner"> + <div class="item active"> + <img data-src="holder.js/900x500/auto/#777:#fff/text:First slide" alt=""> + </div> + <div class="item"> + <img data-src="holder.js/900x500/auto/#777:#fff/text:Second slide" alt=""> + </div> + <div class="item"> + <img data-src="holder.js/900x500/auto/#777:#fff/text:Third slide" alt=""> + </div> + </div> + <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + </a> + <a class="right carousel-control" href="#carousel-example-generic" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + </a> + </div> + </div><!-- /example --> +{% highlight html %} +<div id="carousel-example-generic" class="carousel slide"> + <!-- Indicators --> + <ol class="carousel-indicators"> + <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> + <li data-target="#carousel-example-generic" data-slide-to="1"></li> + <li data-target="#carousel-example-generic" data-slide-to="2"></li> + </ol> + + <!-- Wrapper for slides --> + <div class="carousel-inner"> + <div class="item active"> + <img src="..." alt=""> + <div class="carousel-caption"> + ... + </div> + </div> + ... + </div> + + <!-- Controls --> + <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + </a> + <a class="right carousel-control" href="#carousel-example-generic" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + </a> +</div> +{% endhighlight %} + + <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-docs-sidenote"> + <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> + <div class="bs-docs-example"> + <div id="carousel-example-captions" class="carousel slide bs-docs-carousel-example"> + <ol class="carousel-indicators"> + <li data-target="#carousel-example-captions" data-slide-to="0" class="active"></li> + <li data-target="#carousel-example-captions" data-slide-to="1"></li> + <li data-target="#carousel-example-captions" data-slide-to="2"></li> + </ol> + <div class="carousel-inner"> + <div class="item active"> + <img data-src="holder.js/900x500/auto/#777:#777" alt=""> + <div class="carousel-caption"> + <h3>First slide label</h3> + <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p> + </div> + </div> + <div class="item"> + <img data-src="holder.js/900x500/auto/#777:#777" alt=""> + <div class="carousel-caption"> + <h3>Second slide label</h3> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> + </div> + </div> + <div class="item"> + <img data-src="holder.js/900x500/auto/#777:#777" alt=""> + <div class="carousel-caption"> + <h3>Third slide label</h3> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p> + </div> + </div> + </div> + <a class="left carousel-control" href="#carousel-example-captions" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + </a> + <a class="right carousel-control" href="#carousel-example-captions" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + </a> + </div> + </div><!-- /example --> +{% highlight html %} +<div class="item active"> + <img src="..." alt=""> + <div class="carousel-caption"> + <h3>...</h3> + <p>...</p> + </div> +</div> +{% endhighlight %} + + + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + + <h3>Via data attributes</h3> + <p>Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to its current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to="2"</code>, which shifts the slide position to a particular index beginning with <code>0</code>.</p> + + <h3>Via JavaScript</h3> + <p>Call carousel manually with:</p> +{% highlight js %} +$('.carousel').carousel() +{% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 50px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>interval</td> + <td>number</td> + <td>5000</td> + <td>The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.</td> + </tr> + <tr> + <td>pause</td> + <td>string</td> + <td>"hover"</td> + <td>Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.</td> + </tr> + </tbody> + </table> + + <h3>Methods</h3> + + <h4>.carousel(options)</h4> + <p>Initializes the carousel with an optional options <code>object</code> and starts cycling through items.</p> +{% highlight html %} +$('.carousel').carousel({ + interval: 2000 +}) +{% endhighlight %} + + <h4>.carousel('cycle')</h4> + <p>Cycles through the carousel items from left to right.</p> + + <h4>.carousel('pause')</h4> + <p>Stops the carousel from cycling through items.</p> + + + <h4>.carousel(number)</h4> + <p>Cycles the carousel to a particular frame (0 based, similar to an array).</p> + + <h4>.carousel('prev')</h4> + <p>Cycles to the previous item.</p> + + <h4>.carousel('next')</h4> + <p>Cycles to the next item.</p> + + <h3>Events</h3> + <p>Bootstrap's carousel class exposes two events for hooking into carousel functionality.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>slide</td> + <td>This event fires immediately when the <code>slide</code> instance method is invoked.</td> + </tr> + <tr> + <td>slid</td> + <td>This event is fired when the carousel has completed its slide transition.</td> + </tr> + </tbody> + </table> + </section> + + + + <!-- Typeahead + ================================================== --> + <section id="typeahead"> + <div class="page-header"> + <h1>Typeahead <small>typeahead.js</small></h1> + </div> + + + <h2>Example</h2> + <p>A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.</p> + <div class="bs-docs-example" style="background-color: #f5f5f5;"> + <input type="text" class="col-lg-3" style="margin: 0 auto;" data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]'> + </div><!-- /example --> +{% highlight html %} +<input type="text" data-provide="typeahead"> +{% endhighlight %} + + <p>You'll want to set <code>autocomplete="off"</code> to prevent default browser menus from appearing over the Bootstrap typeahead dropdown.</p> + + <hr class="bs-docs-separator"> + + + <h2>Usage</h2> + + <h3>Via data attributes</h3> + <p>Add data attributes to register an element with typeahead functionality as shown in the example above.</p> + + <h3>Via JavaScript</h3> + <p>Call the typeahead manually with:</p> +{% highlight js %} +$('.typeahead').typeahead() +{% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-source=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 50px;">type</th> + <th style="width: 100px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>source</td> + <td>array, function</td> + <td>[ ]</td> + <td>The data source to query against. May be an array of strings or a function. The function is passed two arguments, the <code>query</code> value in the input field and the <code>process</code> callback. The function may be used synchronously by returning the data source directly or asynchronously via the <code>process</code> callback's single argument.</td> + </tr> + <tr> + <td>items</td> + <td>number</td> + <td>8</td> + <td>The max number of items to display in the dropdown.</td> + </tr> + <tr> + <td>minLength</td> + <td>number</td> + <td>1</td> + <td>The minimum character length needed before triggering autocomplete suggestions</td> + </tr> + <tr> + <td>matcher</td> + <td>function</td> + <td>case insensitive</td> + <td>The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.</td> + </tr> + <tr> + <td>sorter</td> + <td>function</td> + <td>exact match,<br> case sensitive,<br> case insensitive</td> + <td>Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.</td> + </tr> + <tr> + <td>updater</td> + <td>function</td> + <td>returns selected item</td> + <td>The method used to return selected item. Accepts a single argument, the <code>item</code> and has the scope of the typeahead instance.</td> + </tr> + <tr> + <td>highlighter</td> + <td>function</td> + <td>highlights all default matches</td> + <td>Method used to highlight autocomplete results. Accepts a single argument <code>item</code> and has the scope of the typeahead instance. Should return html.</td> + </tr> + </tbody> + </table> + + <h3>Methods</h3> + <h4>.typeahead(options)</h4> + <p>Initializes an input with a typeahead.</p> + </section> + + + + <!-- Affix + ================================================== --> + <section id="affix"> + <div class="page-header"> + <h1>Affix <small>affix.js</small></h1> + </div> + + <h2>Example</h2> + <p>The subnavigation on the left is a live demo of the affix plugin.</p> + + <hr class="bs-docs-separator"> + + <h2>Usage</h2> + + <h3>Via data attributes</h3> + <p>To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.</p> + +{% highlight html %} +<div data-spy="affix" data-offset-top="200">...</div> +{% endhighlight %} + + <div class="bs-docs-sidenote"> + <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> + + <h3>Via JavaScript</h3> + <p>Call the affix plugin via JavaScript:</p> +{% highlight js %} +$('#navbar').affix() +{% endhighlight %} + + <h3>Methods</h3> + <h4>.affix('refresh')</h4> + <p>When using affix in conjunction with adding or removing of elements from the DOM, you'll want to call the refresh method:</p> +{% highlight js %} +$('[data-spy="affix"]').each(function () { + $(this).affix('refresh') +}); +{% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.</p> + + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 100px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>offset</td> + <td>number | function | object</td> + <td>10</td> + <td>Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provide an object <code>offset: { x: 10 }</code>. Use a function when you need to dynamically provide an offset (useful for some responsive designs).</td> + </tr> + </tbody> + </table> + </section> + +</div><!-- /.container --> + +<a href="#welcome" class="bs-docs-top"> + Back to top +</a> diff --git a/docs/examples/carousel.html b/docs/examples/carousel.html index 81d1a28a180b43006b69ea9ffd2a5e9097065add..7719e804b844a0f02d3aacee8e88baaaa1013531 100644 --- a/docs/examples/carousel.html +++ b/docs/examples/carousel.html @@ -1,454 +1,384 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Carousel Template · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - <style> - - /* GLOBAL STYLES - -------------------------------------------------- */ - /* Padding below the footer and lighter body text */ - - body { - padding-bottom: 40px; - color: #5a5a5a; - } - - - - /* CUSTOMIZE THE NAVBAR - -------------------------------------------------- */ - - /* Special class on .container surrounding .navbar, used for positioning it into place. */ - .navbar-wrapper { - position: absolute; - top: 0; - left: 0; - right: 0; - z-index: 10; - margin-top: 20px; - margin-bottom: -90px; /* Negative margin to pull up carousel. 90px is roughly margins and height of navbar. */ - } - .navbar-wrapper .navbar { - - } - - /* Remove border and change up box shadow for more contrast */ - .navbar .navbar-inner { - border: 0; - -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.25); - -moz-box-shadow: 0 2px 10px rgba(0,0,0,.25); - box-shadow: 0 2px 10px rgba(0,0,0,.25); - } - - /* Downsize the brand/project name a bit */ - .navbar .brand { - padding: 14px 20px 16px; /* Increase vertical padding to match navbar links */ - font-size: 16px; - font-weight: bold; - text-shadow: 0 -1px 0 rgba(0,0,0,.5); - } - - /* Navbar links: increase padding for taller navbar */ - .navbar .nav > li > a { - padding: 15px 20px; - } - - /* Offset the responsive button for proper vertical alignment */ - .navbar .btn-navbar { - margin-top: 10px; - } - - - - /* CUSTOMIZE THE CAROUSEL - -------------------------------------------------- */ - - /* Carousel base class */ - .carousel { - margin-bottom: 60px; - } - - .carousel .container { - position: relative; - z-index: 9; - } - - .carousel-control { - height: 80px; - margin-top: 0; - font-size: 120px; - text-shadow: 0 1px 1px rgba(0,0,0,.4); - background-color: transparent; - border: 0; - z-index: 10; - } - - .carousel .item { - height: 500px; - } - .carousel img { - position: absolute; - top: 0; - left: 0; - min-width: 100%; - height: 500px; - } - - .carousel-caption { - background-color: transparent; - position: static; - max-width: 550px; - padding: 0 20px; - margin-top: 200px; - } - .carousel-caption h1, - .carousel-caption .lead { - margin: 0; - line-height: 1.25; - color: #fff; - text-shadow: 0 1px 1px rgba(0,0,0,.4); - } - .carousel-caption .btn { - margin-top: 10px; - } - - - - /* MARKETING CONTENT - -------------------------------------------------- */ - - /* Center align the text within the three columns below the carousel */ - .marketing .span4 { - text-align: center; - } - .marketing h2 { - font-weight: normal; - } - .marketing .span4 p { - margin-left: 10px; - margin-right: 10px; - } - - - /* Featurettes - ------------------------- */ - - .featurette-divider { - margin: 80px 0; /* Space out the Bootstrap <hr> more */ - } - .featurette { - padding-top: 120px; /* Vertically center images part 1: add padding above and below text. */ - overflow: hidden; /* Vertically center images part 2: clear their floats. */ - } - .featurette-image { - margin-top: -120px; /* Vertically center images part 3: negative margin up the image the same amount of the padding to center it. */ - } - - /* Give some space on the sides of the floated elements so text doesn't run right into it. */ - .featurette-image.pull-left { - margin-right: 40px; - } - .featurette-image.pull-right { - margin-left: 40px; - } - - /* Thin out the marketing headings */ - .featurette-heading { - font-size: 50px; - font-weight: 300; - line-height: 1; - letter-spacing: -1px; - } - - - - /* RESPONSIVE CSS - -------------------------------------------------- */ - - @media (max-width: 979px) { - - .container.navbar-wrapper { - margin-bottom: 0; - width: auto; - } - .navbar-inner { - border-radius: 0; - margin: -20px 0; - } - - .carousel .item { - height: 500px; - } - .carousel img { - width: auto; - height: 500px; - } - - .featurette { - height: auto; - padding: 0; - } - .featurette-image.pull-left, - .featurette-image.pull-right { - display: block; - float: none; - max-width: 40%; - margin: 0 auto 20px; - } - } - - - @media (max-width: 767px) { - - .navbar-inner { - margin: -20px; - } - - .carousel { - margin-left: -20px; - margin-right: -20px; - } - .carousel .container { - - } - .carousel .item { - height: 300px; - } - .carousel img { - height: 300px; - } - .carousel-caption { - width: 65%; - padding: 0 70px; - margin-top: 100px; - } - .carousel-caption h1 { - font-size: 30px; - } - .carousel-caption .lead, - .carousel-caption .btn { - font-size: 18px; - } - - .marketing .span4 + .span4 { - margin-top: 40px; - } - - .featurette-heading { - font-size: 30px; - } - .featurette .lead { - font-size: 18px; - line-height: 1.5; - } - - } - </style> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - - - <!-- NAVBAR - ================================================== --> - <div class="navbar-wrapper"> - <!-- Wrap the .navbar in .container to center it within the absolutely positioned parent. --> +--- +layout: example +title: Carousel template +--- + +<!-- Custom styles for this template --> +<style> + +/* GLOBAL STYLES +-------------------------------------------------- */ +/* Padding below the footer and lighter body text */ + +body { + padding-bottom: 40px; + color: #5a5a5a; +} + + + +/* CUSTOMIZE THE NAVBAR +-------------------------------------------------- */ + +/* Special class on .container surrounding .navbar, used for positioning it into place. */ +.navbar-wrapper { + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 10; +} + + + +/* CUSTOMIZE THE CAROUSEL +-------------------------------------------------- */ + +/* Carousel base class */ +.carousel { + margin-bottom: 60px; +} +/* Since positioning the image, we need to help out the caption */ +.carousel-caption { + z-index: 10; +} + +/* Declare heights because of positioning of img element */ +.carousel .item { + height: 500px; +} +.carousel img { + position: absolute; + top: 0; + left: 0; + min-width: 100%; + height: 500px; +} + + + +/* MARKETING CONTENT +-------------------------------------------------- */ + +/* Pad the edges of the mobile views a bit */ +.marketing { + padding-left: 15px; + padding-right: 15px; +} + +/* Center align the text within the three columns below the carousel */ +.marketing .col-lg-4 { + text-align: center; + margin-bottom: 20px; +} +.marketing h2 { + font-weight: normal; +} +.marketing .col-lg-4 p { + margin-left: 10px; + margin-right: 10px; +} + + +/* Featurettes +------------------------- */ + +.featurette-divider { + margin: 80px 0; /* Space out the Bootstrap <hr> more */ +} +.featurette { + padding-top: 120px; /* Vertically center images part 1: add padding above and below text. */ + overflow: hidden; /* Vertically center images part 2: clear their floats. */ +} +.featurette-image { + margin-top: -120px; /* Vertically center images part 3: negative margin up the image the same amount of the padding to center it. */ +} + +/* Give some space on the sides of the floated elements so text doesn't run right into it. */ +.featurette-image.pull-left { + margin-right: 40px; +} +.featurette-image.pull-right { + margin-left: 40px; +} + +/* Thin out the marketing headings */ +.featurette-heading { + font-size: 50px; + font-weight: 300; + line-height: 1; + letter-spacing: -1px; +} + + + +/* RESPONSIVE CSS +-------------------------------------------------- */ + +@media (min-width: 768px) { + + /* Remve the edge padding needed for mobile */ + .marketing { + padding-left: 0; + padding-right: 0; + } + + /* Navbar positioning foo */ + .navbar-wrapper { + margin-top: 20px; + margin-bottom: -90px; /* Negative margin to pull up carousel. 90px is roughly margins and height of navbar. */ + } + /* The navbar becomes detached from the top, so we round the corners */ + .navbar-wrapper .navbar { + border-radius: 4px; + } + + /* Bump up size of carousel content */ + .carousel-caption p { + margin-bottom: 20px; + font-size: 21px; + line-height: 1.4; + } + +} + + +/*@media (max-width: 979px) { + + .container.navbar-wrapper { + margin-bottom: 0; + width: auto; + } + + .carousel .item { + height: 500px; + } + .carousel img { + width: auto; + height: 500px; + } + + .featurette { + height: auto; + padding: 0; + } + .featurette-image.pull-left, + .featurette-image.pull-right { + display: block; + float: none; + max-width: 40%; + margin: 0 auto 20px; + } +} + + +@media (max-width: 767px) { + + .carousel { + margin-left: -20px; + margin-right: -20px; + } + .carousel .container { + + } + .carousel .item { + height: 300px; + } + .carousel img { + height: 300px; + } + .carousel-caption { + width: 65%; + padding: 0 70px; + margin-top: 100px; + } + .carousel-caption h1 { + font-size: 30px; + } + .carousel-caption .lead, + .carousel-caption .btn { + font-size: 18px; + } + + .marketing .col-span-4 + .col-span-4 { + margin-top: 40px; + } + + .featurette-heading { + font-size: 30px; + } + .featurette .lead { + font-size: 18px; + line-height: 1.5; + } + + .navbar-wrapper { + margin-top: 0; + } + + .navbar { + border-radius: 0; + } + + #myCarousel { + margin-top: 54px; + } + +}*/ +</style> + + + +<!-- NAVBAR +================================================== --> +<div class="navbar-wrapper"> + <div class="container"> + + <div class="navbar navbar-inverse navbar-static-top"> <div class="container"> - - <div class="navbar navbar-inverse"> - <div class="navbar-inner"> - <!-- Responsive Navbar Part 1: Button for triggering responsive navbar (not covered in tutorial). Include responsive CSS to utilize. --> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <!-- Responsive Navbar Part 2: Place all navbar contents you want collapsed withing .navbar-collapse.collapse. --> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <!-- Read about Bootstrap dropdowns at http://twitter.github.com/bootstrap/javascript.html#dropdowns --> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> </ul> - </div><!--/.nav-collapse --> - </div><!-- /.navbar-inner --> - </div><!-- /.navbar --> - - </div> <!-- /.container --> - </div><!-- /.navbar-wrapper --> - - - - <!-- Carousel - ================================================== --> - <div id="myCarousel" class="carousel slide"> - <div class="carousel-inner"> - <div class="item active"> - <img src="../assets/img/examples/slide-01.jpg" alt=""> - <div class="container"> - <div class="carousel-caption"> - <h1>Example headline.</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <a class="btn btn-large btn-primary" href="#">Sign up today</a> - </div> - </div> + </li> + </ul> </div> - <div class="item"> - <img src="../assets/img/examples/slide-02.jpg" alt=""> - <div class="container"> - <div class="carousel-caption"> - <h1>Another example headline.</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <a class="btn btn-large btn-primary" href="#">Learn more</a> - </div> - </div> + </div> + </div> + + </div> +</div> + + +<!-- Carousel +================================================== --> +<div id="myCarousel" class="carousel slide"> + <!-- Indicators --> + <ol class="carousel-indicators"> + <li data-target="#myCarousel" data-slide-to="0" class="active"></li> + <li data-target="#myCarousel" data-slide-to="1"></li> + <li data-target="#myCarousel" data-slide-to="2"></li> + </ol> + <div class="carousel-inner"> + <div class="item active"> + <img data-src="holder.js/1500x500/auto/#777:#7a7a7a/text:First slide" alt=""> + <div class="container"> + <div class="carousel-caption"> + <h1>Example headline.</h1> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a class="btn btn-large btn-primary" href="#">Sign up today</a></p> </div> - <div class="item"> - <img src="../assets/img/examples/slide-03.jpg" alt=""> - <div class="container"> - <div class="carousel-caption"> - <h1>One more for good measure.</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <a class="btn btn-large btn-primary" href="#">Browse gallery</a> - </div> - </div> + </div> + </div> + <div class="item"> + <img data-src="holder.js/1500x500/auto/#777:#7a7a7a/text:Second slide" alt=""> + <div class="container"> + <div class="carousel-caption"> + <h1>Another example headline.</h1> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a class="btn btn-large btn-primary" href="#">Learn more</a></p> </div> </div> - <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> - <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> - </div><!-- /.carousel --> - - - - <!-- Marketing messaging and featurettes - ================================================== --> - <!-- Wrap the rest of the page in another container to center all the content. --> - - <div class="container marketing"> - - <!-- Three columns of text below the carousel --> - <div class="row"> - <div class="span4"> - <img class="img-circle" data-src="holder.js/140x140"> - <h2>Heading</h2> - <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> - <p><a class="btn" href="#">View details »</a></p> - </div><!-- /.span4 --> - <div class="span4"> - <img class="img-circle" data-src="holder.js/140x140"> - <h2>Heading</h2> - <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn" href="#">View details »</a></p> - </div><!-- /.span4 --> - <div class="span4"> - <img class="img-circle" data-src="holder.js/140x140"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn" href="#">View details »</a></p> - </div><!-- /.span4 --> - </div><!-- /.row --> - - - <!-- START THE FEATURETTES --> - - <hr class="featurette-divider"> - - <div class="featurette"> - <img class="featurette-image pull-right" src="../assets/img/examples/browser-icon-chrome.png"> - <h2 class="featurette-heading">First featurette headling. <span class="muted">It'll blow your mind.</span></h2> - <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> + </div> + <div class="item"> + <img data-src="holder.js/1500x500/auto/#777:#7a7a7a/text:Third slide" alt=""> + <div class="container"> + <div class="carousel-caption"> + <h1>One more for good measure.</h1> + <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <p><a class="btn btn-large btn-primary" href="#">Browse gallery</a></p> + </div> </div> + </div> + </div> + <a class="left carousel-control" href="#myCarousel" data-slide="prev"><span class="glyphicon glyphicon-chevron-left"></span></a> + <a class="right carousel-control" href="#myCarousel" data-slide="next"><span class="glyphicon glyphicon-chevron-right"></span></a> +</div><!-- /.carousel --> - <hr class="featurette-divider"> - <div class="featurette"> - <img class="featurette-image pull-left" src="../assets/img/examples/browser-icon-firefox.png"> - <h2 class="featurette-heading">Oh yeah, it's that good. <span class="muted">See for yourself.</span></h2> - <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> - </div> - <hr class="featurette-divider"> +<!-- Marketing messaging and featurettes +================================================== --> +<!-- Wrap the rest of the page in another container to center all the content. --> - <div class="featurette"> - <img class="featurette-image pull-right" src="../assets/img/examples/browser-icon-safari.png"> - <h2 class="featurette-heading">And lastly, this one. <span class="muted">Checkmate.</span></h2> - <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> - </div> +<div class="container marketing"> + + <!-- Three columns of text below the carousel --> + <div class="row"> + <div class="col-lg-4"> + <img class="img-circle" data-src="holder.js/140x140"> + <h2>Heading</h2> + <p>Donec sed odio dui. Etiam porta sem malesuada magna mollis euismod. Nullam id dolor id nibh ultricies vehicula ut id elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Praesent commodo cursus magna.</p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!-- /.col-lg-4 --> + <div class="col-lg-4"> + <img class="img-circle" data-src="holder.js/140x140"> + <h2>Heading</h2> + <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh.</p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!-- /.col-lg-4 --> + <div class="col-lg-4"> + <img class="img-circle" data-src="holder.js/140x140"> + <h2>Heading</h2> + <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!-- /.col-lg-4 --> + </div><!-- /.row --> + + + <!-- START THE FEATURETTES --> + + <hr class="featurette-divider"> + + <div class="featurette"> + <img class="featurette-image img-circle pull-right" data-src="holder.js/512x512"> + <h2 class="featurette-heading">First featurette heading. <span class="text-muted">It'll blow your mind.</span></h2> + <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> + </div> + + <hr class="featurette-divider"> + + <div class="featurette"> + <img class="featurette-image img-circle pull-left" data-src="holder.js/512x512"> + <h2 class="featurette-heading">Oh yeah, it's that good. <span class="text-muted">See for yourself.</span></h2> + <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> + </div> + + <hr class="featurette-divider"> + + <div class="featurette"> + <img class="featurette-image img-circle pull-right" data-src="holder.js/512x512"> + <h2 class="featurette-heading">And lastly, this one. <span class="text-muted">Checkmate.</span></h2> + <p class="lead">Donec ullamcorper nulla non metus auctor fringilla. Vestibulum id ligula porta felis euismod semper. Praesent commodo cursus magna, vel scelerisque nisl consectetur. Fusce dapibus, tellus ac cursus commodo.</p> + </div> + + <hr class="featurette-divider"> + + <!-- /END THE FEATURETTES --> + + + <!-- FOOTER --> + <footer> + <p class="pull-right"><a href="#">Back to top</a></p> + <p>© 2013 Company, Inc. · <a href="#">Privacy</a> · <a href="#">Terms</a></p> + </footer> - <hr class="featurette-divider"> - - <!-- /END THE FEATURETTES --> - - - <!-- FOOTER --> - <footer> - <p class="pull-right"><a href="#">Back to top</a></p> - <p>© 2013 Company, Inc. · <a href="#">Privacy</a> · <a href="#">Terms</a></p> - </footer> - - </div><!-- /.container --> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - <script> - !function ($) { - $(function(){ - // carousel demo - $('#myCarousel').carousel() - }) - }(window.jQuery) - </script> - <script src="../assets/js/holder/holder.js"></script> - </body> -</html> +</div><!-- /.container --> diff --git a/docs/examples/fluid.html b/docs/examples/fluid.html deleted file mode 100644 index 502062a2737f924ecd7a8a7cd5cbd4e424e8dd8b..0000000000000000000000000000000000000000 --- a/docs/examples/fluid.html +++ /dev/null @@ -1,163 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 60px; - padding-bottom: 40px; - } - .sidebar-nav { - padding: 9px 0; - } - - @media (max-width: 980px) { - /* Enable use of floated navbar text */ - .navbar-text.pull-right { - float: none; - padding-left: 5px; - padding-right: 5px; - } - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container-fluid"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <p class="navbar-text pull-right"> - Logged in as <a href="#" class="navbar-link">Username</a> - </p> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container-fluid"> - <div class="row-fluid"> - <div class="span3"> - <div class="well sidebar-nav"> - <ul class="nav nav-list"> - <li class="nav-header">Sidebar</li> - <li class="active"><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="nav-header">Sidebar</li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li class="nav-header">Sidebar</li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - <li><a href="#">Link</a></li> - </ul> - </div><!--/.well --> - </div><!--/span--> - <div class="span9"> - <div class="hero-unit"> - <h1>Hello, world!</h1> - <p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p> - <p><a href="#" class="btn btn-primary btn-large">Learn more »</a></p> - </div> - <div class="row-fluid"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div><!--/span--> - </div><!--/row--> - </div><!--/span--> - </div><!--/row--> - - <hr> - - <footer> - <p>© Company 2013</p> - </footer> - - </div><!--/.fluid-container--> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/docs/examples/grid.html b/docs/examples/grid.html new file mode 100644 index 0000000000000000000000000000000000000000..14e8ecdf67765a6ac73c3a9665c3b16bb79d7c45 --- /dev/null +++ b/docs/examples/grid.html @@ -0,0 +1,104 @@ +--- +layout: example +title: Grid template +--- + +<!-- Custom styles for this template --> +<style> + + .container { + padding-left: 15px; + padding-right: 15px; + } + + h4 { + margin-top: 25px; + } + .row { + margin-bottom: 20px; + } + .row .row { + margin-top: 10px; + margin-bottom: 0; + } + [class*="col-lg-"] { + padding-top: 15px; + padding-bottom: 15px; + background-color: rgba(185,74,72,.15); + border: 1px solid rgba(185,74,72,.2); + } +</style> + + +<div class="container"> + + <h2>Bootstrap grids</h2> + <p class="lead">Basic grid layouts to get you familiar with building within the Bootstrap grid system.</p> + + <h4>Three equal columns</h4> + <div class="row"> + <div class="col-lg-4">.col-lg-4</div> + <div class="col-lg-4">.col-lg-4</div> + <div class="col-lg-4">.col-lg-4</div> + </div> + + <h4>Three unequal columns</h4> + <div class="row"> + <div class="col-lg-3">.col-lg-3</div> + <div class="col-lg-6">.col-lg-6</div> + <div class="col-lg-3">.col-lg-3</div> + </div> + + <h4>Two columns</h4> + <div class="row"> + <div class="col-lg-8">.col-lg-8</div> + <div class="col-lg-4">.col-lg-4</div> + </div> + + <h4>Full width, single column</h4> + <p class="text-warning">No grid classes are necessary for full-width elements.</p> + + <h4>Two columns with two nested columns</h4> + <div class="row"> + <div class="col-lg-8"> + .col-lg-8 + <div class="row"> + <div class="col-lg-6">.col-lg-6</div> + <div class="col-lg-6">.col-lg-6</div> + </div> + </div> + <div class="col-lg-4">.col-lg-4</div> + </div> + + <h4>Mixed: mobile and desktop</h4> + <div class="row"> + <div class="col-12 col-lg-8">.col-12 .col-lg-8</div> + <div class="col-6 col-lg-4">.col-6 .col-lg-4</div> + </div> + <div class="row"> + <div class="col-6 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-lg-4">.col-6 .col-lg-4</div> + </div> + <div class="row"> + <div class="col-6 col-lg-6">.col-6 .col-lg-6</div> + <div class="col-6 col-lg-6">.col-6 .col-lg-6</div> + </div> + + <h4>Mixed: mobile, tablet, and desktop</h4> + <div class="row"> + <div class="col-12 col-sm-8 col-lg-8">.col-12 .col-lg-8</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + </div> + <div class="row"> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + <div class="col-6 col-sm-4 col-lg-4">.col-6 .col-lg-4</div> + </div> + <div class="row"> + <div class="col-6 col-sm-6 col-lg-6">.col-6 .col-lg-6</div> + <div class="col-6 col-sm-6 col-lg-6">.col-6 .col-lg-6</div> + </div> + + +</div> <!-- /container --> diff --git a/docs/examples/hero.html b/docs/examples/hero.html deleted file mode 100644 index 6fb7a2c4e01f02c2d4ad6a14b649aa643c7b8430..0000000000000000000000000000000000000000 --- a/docs/examples/hero.html +++ /dev/null @@ -1,126 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 60px; - padding-bottom: 40px; - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <form class="navbar-form pull-right"> - <input class="span2" type="text" placeholder="Email"> - <input class="span2" type="password" placeholder="Password"> - <button type="submit" class="btn">Sign in</button> - </form> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container"> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Hello, world!</h1> - <p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p> - <p><a href="#" class="btn btn-primary btn-large">Learn more »</a></p> - </div> - - <!-- Example row of columns --> - <div class="row"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <p><a class="btn" href="#">View details »</a></p> - </div> - </div> - - <hr> - - <footer> - <p>© Company 2013</p> - </footer> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/docs/examples/jumbotron-narrow.html b/docs/examples/jumbotron-narrow.html new file mode 100644 index 0000000000000000000000000000000000000000..b94b0009621c532ba2683bd059d7fed88d678645 --- /dev/null +++ b/docs/examples/jumbotron-narrow.html @@ -0,0 +1,134 @@ +--- +layout: example +title: Narrow page template +--- + +<!-- Custom styles for this template --> +<style> + /* Space out content a bit */ + body { + padding-top: 20px; + padding-bottom: 20px; + } + + /* Everything but the jumbotron gets side spacing for mobile-first views */ + .header, + .marketing, + .footer { + padding-left: 15px; + padding-right: 15px; + } + + /* Custom page header */ + .header { + border-bottom: 1px solid #e5e5e5; + } + /* Make the masthead heading the same height as the navigation */ + .header h3 { + margin-top: 0; + margin-bottom: 0; + line-height: 40px; + padding-bottom: 19px; + } + + /* Custom page footer */ + .footer { + padding-top: 19px; + color: #777; + border-top: 1px solid #e5e5e5; + } + + /* Custom container */ + .container-narrow { + margin: 0 auto; + max-width: 700px; + } + .container-narrow > hr { + margin: 30px 0; + } + + /* Main marketing message and sign up button */ + .jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; + } + .jumbotron .btn { + font-size: 21px; + padding: 14px 24px; + } + + /* Supporting marketing content */ + .marketing { + margin: 40px 0; + } + .marketing p + h4 { + margin-top: 28px; + } + + /* Responsive: Portrait tablets and up */ + @media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-left: 0; + padding-right: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } + } +</style> + + + +<div class="container-narrow"> + <div class="header"> + <ul class="nav nav-pills pull-right"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">About</a></li> + <li><a href="#">Contact</a></li> + </ul> + <h3 class="text-muted">Project name</h3> + </div> + + <div class="jumbotron"> + <h1>Jumbotron heading</h1> + <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> + <p><a class="btn btn-large btn-success" href="#">Sign up today</a></p> + </div> + + <div class="row marketing"> + <div class="col-lg-6"> + <h4>Subheading</h4> + <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> + + <h4>Subheading</h4> + <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> + + <h4>Subheading</h4> + <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> + </div> + + <div class="col-lg-6"> + <h4>Subheading</h4> + <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> + + <h4>Subheading</h4> + <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> + + <h4>Subheading</h4> + <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> + </div> + </div> + + <div class="footer"> + <p>© Company 2013</p> + </div> + +</div> <!-- /container --> diff --git a/docs/examples/jumbotron.html b/docs/examples/jumbotron.html new file mode 100644 index 0000000000000000000000000000000000000000..897313449db0873e303843e25e811a713821bb2f --- /dev/null +++ b/docs/examples/jumbotron.html @@ -0,0 +1,112 @@ +--- +layout: example +title: Jumbotron template +--- + +<!-- Custom styles for this template --> +<style> + /* Move down content because we have a fixed navbar that is 50px tall */ + body { + padding-top: 50px; + padding-bottom: 20px; + } + + /* Set widths on the navbar form inputs since otherwise they're 100% wide */ + .navbar-form input[type="text"], + .navbar-form input[type="password"] { + width: 180px; + } + + /* Wrapping element */ + /* Set some basic padding to keep content from hitting the edges */ + .body-content { + padding-left: 15px; + padding-right: 15px; + } + + /* Responsive: Portrait tablets and up */ + @media screen and (min-width: 768px) { + /* Let the jumbotron breathe */ + .jumbotron { + margin-top: 20px; + } + /* Remove padding from wrapping element since we kick in the grid classes here */ + .body-content { + padding: 0; + } + } +</style> + +<div class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + <form class="navbar-form form-inline pull-right"> + <input type="text" placeholder="Email"> + <input type="password" placeholder="Password"> + <button type="submit" class="btn">Sign in</button> + </form> + </div><!--/.nav-collapse --> + </div> +</div> + +<div class="container"> + + <!-- Main jumbotron for a primary marketing message or call to action --> + <div class="jumbotron"> + <h1>Hello, world!</h1> + <p>This is a template for a simple marketing or informational website. It includes a large callout called the hero unit and three supporting pieces of content. Use it as a starting point to create something more unique.</p> + <p><a class="btn btn-primary btn-large">Learn more »</a></p> + </div> + + <div class="body-content"> + + <!-- Example row of columns --> + <div class="row"> + <div class="col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div> + <div class="col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div> + <div class="col-lg-4"> + <h2>Heading</h2> + <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div> + </div> + + <hr> + + <footer> + <p>© Company 2013</p> + </footer> + </div> + +</div> <!-- /container --> diff --git a/docs/examples/justified-nav.html b/docs/examples/justified-nav.html index ef8f8d428671c4e115bcf389bf98ae2a3d4a0cd1..edf8cfae624041f5e7557839a433c17ec47b3932 100644 --- a/docs/examples/justified-nav.html +++ b/docs/examples/justified-nav.html @@ -1,174 +1,145 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Template · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 20px; - padding-bottom: 60px; - } - - /* Custom container */ - .container { - margin: 0 auto; - max-width: 1000px; - } - .container > hr { - margin: 60px 0; - } - - /* Main marketing message and sign up button */ - .jumbotron { - margin: 80px 0; - text-align: center; - } - .jumbotron h1 { - font-size: 100px; - line-height: 1; - } - .jumbotron .lead { - font-size: 24px; - line-height: 1.25; - } - .jumbotron .btn { - font-size: 21px; - padding: 14px 24px; - } - - /* Supporting marketing content */ - .marketing { - margin: 60px 0; - } - .marketing p + h4 { - margin-top: 28px; - } - - - /* Customize the navbar links to be fill the entire space of the .navbar */ - .navbar .navbar-inner { - padding: 0; - } - .navbar .nav { - margin: 0; - display: table; - width: 100%; - } - .navbar .nav li { - display: table-cell; - width: 1%; - float: none; - } - .navbar .nav li a { - font-weight: bold; - text-align: center; - border-left: 1px solid rgba(255,255,255,.75); - border-right: 1px solid rgba(0,0,0,.1); - } - .navbar .nav li:first-child a { - border-left: 0; - border-radius: 3px 0 0 3px; - } - .navbar .nav li:last-child a { - border-right: 0; - border-radius: 0 3px 3px 0; - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <div class="masthead"> - <h3 class="muted">Project name</h3> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">Projects</a></li> - <li><a href="#">Services</a></li> - <li><a href="#">Downloads</a></li> - <li><a href="#">About</a></li> - <li><a href="#">Contact</a></li> - </ul> - </div> - </div> - </div><!-- /.navbar --> +--- +layout: example +title: Justified nav template +--- + +<!-- Custom styles for this template --> +<style> + + body { + padding-top: 20px; + } + + /* Everything but the jumbotron gets side spacing for mobile-first views */ + .masthead, + .body-content, + .footer { + padding-left: 15px; + padding-right: 15px; + } + + .footer { + border-top: 1px solid #ddd; + margin-top: 30px; + padding-top: 29px; + padding-bottom: 30px; + } + + /* Main marketing message and sign up button */ + .jumbotron { + text-align: center; + background-color: transparent; + } + .jumbotron .btn { + font-size: 21px; + padding: 14px 24px; + } + + /* Customize the nav-justified links to be fill the entire space of the .navbar */ + .nav-justified { + max-height: 50px; + background-color: #eee; + border-radius: 5px; + border: 1px solid #ccc; + } + .nav-justified > li > a { + padding-top: 15px; + padding-bottom: 15px; + color: #777; + font-weight: bold; + text-align: center; + border-left: 1px solid rgba(255,255,255,.75); + border-right: 1px solid rgba(0,0,0,.1); + background-color: #e5e5e5; /* Old browsers */ + background-repeat: repeat-x; /* Repeat the gradient */ + background-image: -moz-linear-gradient(top, #f5f5f5 0%, #e5e5e5 100%); /* FF3.6+ */ + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(100%,#e5e5e5)); /* Chrome,Safari4+ */ + background-image: -webkit-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Chrome 10+,Safari 5.1+ */ + background-image: -ms-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* IE10+ */ + background-image: -o-linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* Opera 11.10+ */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#e5e5e5',GradientType=0 ); /* IE6-9 */ + background-image: linear-gradient(top, #f5f5f5 0%,#e5e5e5 100%); /* W3C */ + } + .nav-justified > .active > a { + background-color: #ddd; + background-image: none; + box-shadow: inset 0 3px 7px rgba(0,0,0,.15); + } + .nav-justified > li:first-child > a { + border-left: 0; + border-top-left-radius: 5px; + border-bottom-left-radius: 5px; + } + .nav-justified > li:last-child > a { + border-right: 0; + border-top-right-radius: 5px; + border-bottom-right-radius: 5px; + } + + + /* Responsive: Portrait tablets and up */ + @media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .masthead, + .marketing, + .footer { + padding-left: 0; + padding-right: 0; + } + } + +</style> + + + +<div class="container"> + + <div class="masthead"> + <h3 class="text-muted">Project name</h3> + <ul class="nav navbar-nav nav-justified"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#">Projects</a></li> + <li><a href="#">Services</a></li> + <li><a href="#">Downloads</a></li> + <li><a href="#">About</a></li> + <li><a href="#">Contact</a></li> + </ul> + </div> + + <!-- Jumbotron --> + <div class="jumbotron"> + <h1>Marketing stuff!</h1> + <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet.</p> + <p><a class="btn btn-large btn-success" href="#">Get started today</a></p> + </div> + + + <div class="body-content"> + + <!-- Example row of columns --> + <div class="row"> + <div class="col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> </div> - - <!-- Jumbotron --> - <div class="jumbotron"> - <h1>Marketing stuff!</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <a class="btn btn-large btn-success" href="#">Get started today</a> - </div> - - <hr> - - <!-- Example row of columns --> - <div class="row-fluid"> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> - <p><a class="btn" href="#">View details »</a></p> - </div> - <div class="span4"> - <h2>Heading</h2> - <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p> - <p><a class="btn" href="#">View details »</a></p> - </div> + <div class="col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div> + <div class="col-lg-4"> + <h2>Heading</h2> + <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p> + <p><a class="btn btn-default" href="#">View details »</a></p> </div> + </div> - <hr> + </div><!-- /.body-content --> - <div class="footer"> - <p>© Company 2013</p> - </div> + <!-- Site footer --> + <div class="footer"> + <p>© Company 2013</p> + </div> - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> +</div> <!-- /container --> diff --git a/docs/examples/marketing-narrow.html b/docs/examples/marketing-narrow.html deleted file mode 100644 index f6f5d1685122713724c7c65f1a89b5a4dc67cccd..0000000000000000000000000000000000000000 --- a/docs/examples/marketing-narrow.html +++ /dev/null @@ -1,137 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Template · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 20px; - padding-bottom: 40px; - } - - /* Custom container */ - .container-narrow { - margin: 0 auto; - max-width: 700px; - } - .container-narrow > hr { - margin: 30px 0; - } - - /* Main marketing message and sign up button */ - .jumbotron { - margin: 60px 0; - text-align: center; - } - .jumbotron h1 { - font-size: 72px; - line-height: 1; - } - .jumbotron .btn { - font-size: 21px; - padding: 14px 24px; - } - - /* Supporting marketing content */ - .marketing { - margin: 60px 0; - } - .marketing p + h4 { - margin-top: 28px; - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="container-narrow"> - - <div class="masthead"> - <ul class="nav nav-pills pull-right"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#">About</a></li> - <li><a href="#">Contact</a></li> - </ul> - <h3 class="muted">Project name</h3> - </div> - - <hr> - - <div class="jumbotron"> - <h1>Super awesome marketing speak!</h1> - <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - <a class="btn btn-large btn-success" href="#">Sign up today</a> - </div> - - <hr> - - <div class="row-fluid marketing"> - <div class="span6"> - <h4>Subheading</h4> - <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> - - <h4>Subheading</h4> - <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> - - <h4>Subheading</h4> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> - </div> - - <div class="span6"> - <h4>Subheading</h4> - <p>Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.</p> - - <h4>Subheading</h4> - <p>Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.</p> - - <h4>Subheading</h4> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna.</p> - </div> - </div> - - <hr> - - <div class="footer"> - <p>© Company 2013</p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/docs/examples/navbar-fixed-top.html b/docs/examples/navbar-fixed-top.html new file mode 100644 index 0000000000000000000000000000000000000000..2f73f08e46d3042510a89342733f84894c0ef0ce --- /dev/null +++ b/docs/examples/navbar-fixed-top.html @@ -0,0 +1,67 @@ +--- +layout: example +title: Fixed navbar template +--- + +<!-- Custom styles for this template --> +<style> + + body { + padding-top: 60px; + } + + .jumbotron { + margin-top: 20px; + } + +</style> + + + <!-- Fixed navbar --> + <div class="navbar navbar-fixed-top"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + <ul class="nav navbar-nav pull-right"> + <li><a href="/examples/navbar/">Default</a></li> + <li><a href="/examples/navbar-static-top/">Static top</a></li> + <li class="active"><a href="/examples/navbar-fixed-top/">Fixed top</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </div> + + <div class="container"> + + <!-- Main component for a primary marketing message or call to action --> + <div class="jumbotron"> + <h1>Navbar example</h1> + <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> + <p> + <a class="btn btn-large btn-primary" href="../../docs/#navbar">View navbar docs »</a> + </p> + </div> + + </div> <!-- /container --> diff --git a/docs/examples/navbar-static-top.html b/docs/examples/navbar-static-top.html new file mode 100644 index 0000000000000000000000000000000000000000..f2274690010525f0cff632edcbe650facff78271 --- /dev/null +++ b/docs/examples/navbar-static-top.html @@ -0,0 +1,64 @@ +--- +layout: example +title: Static navbar template +--- + +<!-- Custom styles for this template --> +<style> + + .jumbotron { + margin-top: 30px; + } + +</style> + + +<!-- Static navbar --> +<div class="navbar navbar-static-top"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + <ul class="nav navbar-nav pull-right"> + <li><a href="/examples/navbar/">Default</a></li> + <li class="active"><a href="/examples/navbar-static-top/">Static top</a></li> + <li><a href="/examples/navbar-fixed-top/">Fixed top</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> +</div> + + +<div class="container"> + + <!-- Main component for a primary marketing message or call to action --> + <div class="jumbotron"> + <h1>Navbar example</h1> + <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> + <p> + <a class="btn btn-large btn-primary" href="../../docs/#navbar">View navbar docs »</a> + </p> + </div> + +</div> <!-- /container --> diff --git a/docs/examples/navbar.html b/docs/examples/navbar.html new file mode 100644 index 0000000000000000000000000000000000000000..f8b25482ee894f7eeb91ecf247dd89ff113243ca --- /dev/null +++ b/docs/examples/navbar.html @@ -0,0 +1,67 @@ +--- +layout: example +title: Navbar template +--- + +<!-- Custom styles for this template --> +<style> + + body { + padding: 30px; + } + + .navbar { + margin-bottom: 30px; + } + +</style> + + +<div class="container"> + + <!-- Static navbar --> + <div class="navbar"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + <ul class="nav navbar-nav pull-right"> + <li class="active"><a href="/examples/navbar/">Default</a></li> + <li><a href="/examples/navbar-static-top/">Static top</a></li> + <li><a href="/examples/navbar-fixed-top/">Fixed top</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> + </div> + + <!-- Main component for a primary marketing message or call to action --> + <div class="jumbotron"> + <h1>Navbar example</h1> + <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> + <p> + <a class="btn btn-large btn-primary" href="../../docs/#navbar">View navbar docs »</a> + </p> + </div> + +</div> <!-- /container --> diff --git a/docs/examples/offcanvas.html b/docs/examples/offcanvas.html new file mode 100644 index 0000000000000000000000000000000000000000..c93578e2bb432ff83a21fee5de9fbff0aedd8a02 --- /dev/null +++ b/docs/examples/offcanvas.html @@ -0,0 +1,205 @@ +--- +layout: example +title: Static navbar template +--- + +<!-- Custom styles for this template --> +<style> + body { + padding-top: 80px; + } + footer { + padding-left: 15px; + padding-right: 15px; + } + + /* + * Off canvas + * -------------------------------------------------- */ + + .row-offcanvas { + position: relative; + overflow: hidden; + -webkit-transition: all 0.25s ease-out; + -moz-transition: all 0.25s ease-out; + transition: all 0.25s ease-out; + } + .row-offcanvas.active { + overflow: visible; + } + .row-offcanvas-right .sidebar-offcanvas { + right: -210px; /* 60px * 3.5 = very small phones like 240x320 HTC Wildfire */ + } + .row-offcanvas-left .sidebar-offcanvas { + left: -210px; /* 60px * 3.5 = very small phones like 240x320 HTC Wildfire */ + } + .row-offcanvas-right.active { + right: 210px; /* 60px * 3.5 = very small phones like 240x320 HTC Wildfire */ + } + .row-offcanvas-left.active { + left: 210px; /* 60px * 3.5 = very small phones like 240x320 HTC Wildfire */ + } + .sidebar-offcanvas { + position: absolute; + top: 0; + } + + @media screen and (max-width: 319px) { + /* This is here instead of being outside the media queries because when + * we exit "mobile land", the sidebar needs to be able to restore its + * originally authored ".col-lg-X" width. */ + .sidebar-offcanvas { + width: 210px; /* 60px * 3.5 = very small phones like 240x320 HTC Wildfire */ + } + } + + @media screen and (min-width: 320px) and (max-width: 480px) { + .row-offcanvas-right .sidebar-offcanvas { + right: -270px; /* 60px * 4.5 = average iPhones and Android phones */ + } + .row-offcanvas-left .sidebar-offcanvas { + left: -270px; /* 60px * 4.5 = average iPhones and Android phones */ + } + .row-offcanvas-right.active { + right: 270px; /* 60px * 4.5 = average iPhones and Android phones */ + } + .row-offcanvas-left.active { + left: 270px; /* 60px * 4.5 = average iPhones and Android phones */ + } + .sidebar-offcanvas { + width: 270px; /* 60px * 4.5 = average iPhones and Android phones */ + } + } + + /* Landscape phone to tablets + * -------------------------- */ + @media screen and (min-width: 481px) and (max-width: 767px) { + .row-offcanvas-right .sidebar-offcanvas { + right: -480px; /* 60px * 8 = Tablets and wider */ + } + .row-offcanvas-left .sidebar-offcanvas { + left: -480px; /* 60px * 8 = Tablets and wider */ + } + .row-offcanvas-right.active { + right: 480px; /* 60px * 8 = Tablets and wider */ + } + .row-offcanvas-left.active { + left: 480px; /* 60px * 8 = Tablets and wider */ + } + .sidebar-offcanvas { + width: 480px; /* 60px * 8 = Tablets and wider */ + } + } + + /* Tablets & above + * ---------------- */ + @media screen and (min-width: 768px) { + .row-offcanvas { + position: static; + overflow: visible; + } + .sidebar-offcanvas { + position: static; + } + .btn-offcanvas { + display: none; + } + } +</style> + +<script> + $(document).ready(function() { + $('[data-toggle=offcanvas]').click(function() { + $('.row-offcanvas').toggleClass('active'); + }); + }); +</script> + +<div class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> +</div> + +<div class="container"> + + <div class="row row-offcanvas row-offcanvas-right"> + <div class="col-lg-9"> + <p class="pull-right hidden-lg"> + <a href="#sidebar" class="btn btn-primary btn-offcanvas" data-toggle="offcanvas"><i class="glyphicon glyphicon-resize-horizontal"></i></a> + </p> + <div class="jumbotron"> + <h1>Hello, world!</h1> + <p>This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.</p> + </div> + <div class="row"> + <div class="col-sm-6 col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!--/span--> + <div class="col-sm-6 col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!--/span--> + <div class="col-sm-6 col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!--/span--> + <div class="col-sm-6 col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!--/span--> + <div class="col-sm-6 col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!--/span--> + <div class="col-sm-6 col-lg-4"> + <h2>Heading</h2> + <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p> + <p><a class="btn btn-default" href="#">View details »</a></p> + </div><!--/span--> + </div><!--/row--> + </div><!--/span--> + <nav class="col-lg-3 sidebar-offcanvas" id="sidebar" role="navigation"> + <div class="well sidebar-nav"> + <ul class="nav nav-list"> + <li class="nav-header">Sidebar</li> + <li class="active"><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li class="nav-header">Sidebar</li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + <li class="nav-header">Sidebar</li> + <li><a href="#">Link</a></li> + <li><a href="#">Link</a></li> + </ul> + </div><!--/.well --> + </nav><!--/span--> + </div><!--/row--> + + <hr> + + <footer> + <p>© Company 2012</p> + </footer> + +</div><!--/.container--> diff --git a/docs/examples/signin.html b/docs/examples/signin.html index 031052789da081fa99fd829e8d7aca1c8aeff396..92db3e0365080d8992005812a55e8fa54f03582c 100644 --- a/docs/examples/signin.html +++ b/docs/examples/signin.html @@ -1,94 +1,68 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Sign in · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> +--- +layout: example +title: Sign in form template +--- - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - body { - padding-top: 40px; - padding-bottom: 40px; - background-color: #f5f5f5; - } +<!-- Custom styles for this template --> +<style> - .form-signin { - max-width: 300px; - padding: 19px 29px 29px; - margin: 0 auto 20px; - background-color: #fff; - border: 1px solid #e5e5e5; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; - -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05); - -moz-box-shadow: 0 1px 2px rgba(0,0,0,.05); - box-shadow: 0 1px 2px rgba(0,0,0,.05); - } - .form-signin .form-signin-heading, - .form-signin .checkbox { - margin-bottom: 10px; - } - .form-signin input[type="text"], - .form-signin input[type="password"] { - font-size: 16px; - height: auto; - margin-bottom: 15px; - padding: 7px 9px; - } + body { + padding-top: 40px; + padding-bottom: 40px; + background-color: #eee; + } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> + .form-signin { + max-width: 330px; + padding: 15px; + margin: 0 auto; + } + .form-signin .form-signin-heading, + .form-signin .checkbox { + margin-bottom: 10px; + } + .form-signin .checkbox { + font-weight: normal; + } + .form-signin input[type="text"], + .form-signin input[type="password"] { + position: relative; + font-size: 16px; + height: auto; + padding: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + } + .form-signin input[type="text"]:focus, + .form-signin input[type="password"]:focus { + z-index: 2; + } + .form-signin input[type="text"] { + margin-bottom: -1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } + .form-signin input[type="password"] { + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; + } - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> +</style> - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - <body> - <div class="container"> +<div class="container"> - <form class="form-signin"> - <h2 class="form-signin-heading">Please sign in</h2> - <input type="text" class="input-block-level" placeholder="Email address"> - <input type="password" class="input-block-level" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox" value="remember-me"> Remember me - </label> - <button class="btn btn-large btn-primary" type="submit">Sign in</button> - </form> + <form class="form-signin"> + <h2 class="form-signin-heading">Please sign in</h2> + <input type="text" class="input-block-level" placeholder="Email address" autofocus> + <input type="password" class="input-block-level" placeholder="Password"> + <label class="checkbox"> + <input type="checkbox" value="remember-me"> Remember me + </label> + <button class="btn btn-large btn-primary btn-block" type="submit">Sign in</button> + </form> - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> +</div> <!-- /container --> diff --git a/docs/examples/starter-template.html b/docs/examples/starter-template.html index 29c47a89c9c63cfa044db6ee36c74327a41cdd5c..18fdaf5fc3df00d7c81035ca61ad621731eb32c9 100644 --- a/docs/examples/starter-template.html +++ b/docs/examples/starter-template.html @@ -1,79 +1,43 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */ - } - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container"> - - <h1>Bootstrap starter template</h1> - <p>Use this document as a way to quick start any new project.<br> All you get is this message and a barebones HTML document.</p> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> +--- +layout: example +title: Starter template +--- + +<!-- Custom styles for this template --> +<style> + body { + padding-top: 50px; + } + .starter-template { + padding: 40px 15px; + text-align: center; + } +</style> + + +<div class="navbar navbar-inverse navbar-fixed-top"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + </ul> + </div><!--/.nav-collapse --> + </div> +</div> + +<div class="container"> + + <div class="starter-template"> + <h1>Bootstrap starter template</h1> + <p class="lead">Use this document as a way to quickly start any new project.<br> All you get is this text and a mostly barebones HTML document.</p> + </div> + +</div><!-- /container --> diff --git a/docs/examples/sticky-footer-navbar.html b/docs/examples/sticky-footer-navbar.html index a9027c8c28096dc1455479825e23cac73bf42999..fe6681ef69cf66257e1efe7a2797674eb16ed9b0 100644 --- a/docs/examples/sticky-footer-navbar.html +++ b/docs/examples/sticky-footer-navbar.html @@ -1,161 +1,114 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Sticky footer · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- CSS --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - - /* Sticky footer styles - -------------------------------------------------- */ - - html, - body { - height: 100%; - /* The html and body elements cannot have any padding or margin. */ - } - - /* Wrapper for page content to push down footer */ - #wrap { - min-height: 100%; - height: auto !important; - height: 100%; - /* Negative indent footer by it's height */ - margin: 0 auto -60px; - } - - /* Set the fixed height of the footer here */ - #push, - #footer { - height: 60px; - } - #footer { - background-color: #f5f5f5; - } - - /* Lastly, apply responsive CSS fixes as necessary */ - @media (max-width: 767px) { - #footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; - } - } - - - - /* Custom page CSS - -------------------------------------------------- */ - /* Not required for template or sticky footer method. */ - - #wrap > .container { - padding-top: 60px; - } - .container .credit { - margin: 20px 0; - } - - code { - font-size: 80%; - } - - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - - <!-- Part 1: Wrap all page content here --> - <div id="wrap"> - - <!-- Fixed navbar --> - <div class="navbar navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <!-- Begin page content --> - <div class="container"> - <div class="page-header"> - <h1>Sticky footer with fixed navbar</h1> - </div> - <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code> with <code>padding-top: 60px;</code> on the <code>.container</code>.</p> - <p>Back to <a href="./sticky-footer.html">the sticky footer</a> minus the navbar.</p> - </div> - - <div id="push"></div> +--- +layout: example +title: Sticky footer with navbar template +--- + +<!-- Custom styles for this template --> +<style> + + /* Sticky footer styles + -------------------------------------------------- */ + + html, + body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ + } + + /* Wrapper for page content to push down footer */ + #wrap { + min-height: 100%; + height: auto !important; + height: 100%; + /* Negative indent footer by its height */ + margin: 0 auto -60px; + /* Pad bottom by footer height */ + padding: 0 0 60px; + } + + /* Set the fixed height of the footer here */ + #footer { + height: 60px; + background-color: #f5f5f5; + } + + /* Lastly, apply responsive CSS fixes as necessary */ + @media (max-width: 767px) { + #footer { + margin-left: -20px; + margin-right: -20px; + padding-left: 20px; + padding-right: 20px; + } + } + + + + /* Custom page CSS + -------------------------------------------------- */ + /* Not required for template or sticky footer method. */ + + #wrap > .container { + padding: 60px 15px 0; + } + .container .credit { + margin: 20px 0; + } + + code { + font-size: 80%; + } + +</style> + + + +<!-- Wrap all page content here --> +<div id="wrap"> + + <!-- Fixed navbar --> + <div class="navbar navbar-fixed-top"> + <div class="container"> + <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse"> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + <span class="icon-bar"></span> + </button> + <a class="navbar-brand" href="#">Project name</a> + <div class="nav-collapse collapse"> + <ul class="nav navbar-nav"> + <li class="active"><a href="#">Home</a></li> + <li><a href="#about">About</a></li> + <li><a href="#contact">Contact</a></li> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> + <ul class="dropdown-menu"> + <li><a href="#">Action</a></li> + <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><a href="#">Separated link</a></li> + <li><a href="#">One more separated link</a></li> + </ul> + </li> + </ul> + </div><!--/.nav-collapse --> </div> + </div> - <div id="footer"> - <div class="container"> - <p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> - </div> + <!-- Begin page content --> + <div class="container"> + <div class="page-header"> + <h1>Sticky footer with fixed navbar</h1> </div> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> + <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added within <code>#wrap</code> with <code>padding-top: 60px;</code> on the <code>.container</code>.</p> + <p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p> + </div> +</div> + +<div id="footer"> + <div class="container"> + <p class="text-muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> + </div> +</div> diff --git a/docs/examples/sticky-footer.html b/docs/examples/sticky-footer.html index d307d79387f2871cf764918a420cf1c2d7e9a8a7..14fc1edebe4eb84ea51d5d5844fba95f5ef6d48e 100644 --- a/docs/examples/sticky-footer.html +++ b/docs/examples/sticky-footer.html @@ -1,125 +1,79 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Sticky footer · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- CSS --> - <link href="../assets/css/bootstrap.css" rel="stylesheet"> - <style type="text/css"> - - /* Sticky footer styles - -------------------------------------------------- */ - - html, - body { - height: 100%; - /* The html and body elements cannot have any padding or margin. */ - } - - /* Wrapper for page content to push down footer */ - #wrap { - min-height: 100%; - height: auto !important; - height: 100%; - /* Negative indent footer by it's height */ - margin: 0 auto -60px; - } - - /* Set the fixed height of the footer here */ - #push, - #footer { - height: 60px; - } - #footer { - background-color: #f5f5f5; - } - - /* Lastly, apply responsive CSS fixes as necessary */ - @media (max-width: 767px) { - #footer { - margin-left: -20px; - margin-right: -20px; - padding-left: 20px; - padding-right: 20px; - } - } - - - - /* Custom page CSS - -------------------------------------------------- */ - /* Not required for template or sticky footer method. */ - - .container { - width: auto; - max-width: 680px; - } - .container .credit { - margin: 20px 0; - } - - </style> - <link href="../assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="../assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../assets/ico/favicon.png"> - </head> - - <body> - - - <!-- Part 1: Wrap all page content here --> - <div id="wrap"> - - <!-- Begin page content --> - <div class="container"> - <div class="page-header"> - <h1>Sticky footer</h1> - </div> - <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p> - <p>Use <a href="./sticky-footer-navbar.html">the sticky footer</a> with a fixed navbar if need be, too.</p> - </div> - - <div id="push"></div> +--- +layout: example +title: Sticky footer template +--- + +<!-- Custom styles for this template --> +<style> + + /* Sticky footer styles + -------------------------------------------------- */ + + html, + body { + height: 100%; + /* The html and body elements cannot have any padding or margin. */ + } + + /* Wrapper for page content to push down footer */ + #wrap { + min-height: 100%; + height: auto !important; + height: 100%; + /* Negative indent footer by its height */ + margin: 0 auto -60px; + /* Pad bottom by footer height */ + padding: 0 0 60px; + } + + /* Set the fixed height of the footer here */ + #footer { + height: 60px; + background-color: #f5f5f5; + } + + /* Lastly, apply responsive CSS fixes as necessary */ + @media (max-width: 767px) { + #footer { + margin-left: -20px; + margin-right: -20px; + padding-left: 20px; + padding-right: 20px; + } + } + + /* Custom page CSS + -------------------------------------------------- */ + /* Not required for template or sticky footer method. */ + + .container { + width: auto; + max-width: 680px; + padding: 0 15px; + } + .container .credit { + margin: 20px 0; + } + +</style> + + + +<!-- Wrap all page content here --> +<div id="wrap"> + + <!-- Begin page content --> + <div class="container"> + <div class="page-header"> + <h1>Sticky footer</h1> </div> - - <div id="footer"> - <div class="container"> - <p class="muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> - </div> - </div> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../assets/js/jquery.js"></script> - <script src="../assets/js/bootstrap-transition.js"></script> - <script src="../assets/js/bootstrap-alert.js"></script> - <script src="../assets/js/bootstrap-modal.js"></script> - <script src="../assets/js/bootstrap-dropdown.js"></script> - <script src="../assets/js/bootstrap-scrollspy.js"></script> - <script src="../assets/js/bootstrap-tab.js"></script> - <script src="../assets/js/bootstrap-tooltip.js"></script> - <script src="../assets/js/bootstrap-popover.js"></script> - <script src="../assets/js/bootstrap-button.js"></script> - <script src="../assets/js/bootstrap-collapse.js"></script> - <script src="../assets/js/bootstrap-carousel.js"></script> - <script src="../assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> + <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.</p> + <p>Use <a href="../sticky-footer-navbar">the sticky footer with a fixed navbar</a> if need be, too.</p> + </div> +</div> + +<div id="footer"> + <div class="container"> + <p class="text-muted credit">Example courtesy <a href="http://martinbean.co.uk">Martin Bean</a> and <a href="http://ryanfait.com/sticky-footer/">Ryan Fait</a>.</p> + </div> +</div> diff --git a/docs/extend.html b/docs/extend.html deleted file mode 100644 index 59281293449128597c67a94827ad4107f2aec4c0..0000000000000000000000000000000000000000 --- a/docs/extend.html +++ /dev/null @@ -1,282 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Extend · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Extending Bootstrap</h1> - <p class="lead">Extend Bootstrap to take advantage of included styles and components, as well as LESS variables and mixins.</p> - <div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#built-with-less"><i class="icon-chevron-right"></i> Built with LESS</a></li> - <li><a href="#compiling"><i class="icon-chevron-right"></i> Compiling Bootstrap</a></li> - <li><a href="#static-assets"><i class="icon-chevron-right"></i> Use as static assets</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- BUILT WITH LESS - ================================================== --> - <section id="built-with-less"> - <div class="page-header"> - <h1>Built with LESS</h1> - </div> - - <img style="float: right; height: 36px; margin: 10px 20px 20px" src="assets/img/less-logo-large.png" alt="LESS CSS"> - <p class="lead">Bootstrap is made with LESS at its core, a dynamic stylesheet language created by our good friend, <a href="http://cloudhead.io">Alexis Sellier</a>. It makes developing systems-based CSS faster, easier, and more fun.</p> - - <h3>Why LESS?</h3> - <p>One of Bootstrap's creators wrote a quick <a href="http://www.wordsbyf.at/2012/03/08/why-less/">blog post about this</a>, summarized here:</p> - <ul> - <li>Bootstrap compiles faster ~6x faster with Less compared to Sass</li> - <li>Less is written in JavaScript, making it easier to us to dive in and patch compared to Ruby with Sass.</li> - <li>Less is more; we want to feel like we're writing CSS and making Bootstrap approachable to all.</li> - </ul> - - <h3>What's included?</h3> - <p>As an extension of CSS, LESS includes variables, mixins for reusable snippets of code, operations for simple math, nesting, and even color functions.</p> - - <h3>Learn more</h3> - <p>Visit the official website at <a href="http://lesscss.org">http://lesscss.org</a> to learn more.</p> - </section> - - - - <!-- COMPILING LESS AND BOOTSTRAP - ================================================== --> - <section id="compiling"> - <div class="page-header"> - <h1>Compiling Bootstrap with Less</h1> - </div> - - <p class="lead">Since our CSS is written with Less and utilizes variables and mixins, it needs to be compiled for final production implementation. Here's how.</p> - - <div class="alert alert-info"> - <strong>Note:</strong> If you're submitting a pull request to GitHub with modified CSS, you <strong>must</strong> recompile the CSS via any of these methods. - </div> - - <h2>Tools for compiling</h2> - - <h3>Command line</h3> - <p>Follow <a href="https://github.com/twitter/bootstrap#developers">the instructions in the project readme</a> on GitHub for compiling via command line.</p> - - <h3>JavaScript</h3> - <p><a href="http://lesscss.org/">Download the latest Less.js</a> and include the path to it (and Bootstrap) in the <code><head></code>.</p> -<pre class="prettyprint"> -<link rel="stylesheet/less" href="/path/to/bootstrap.less"> -<script src="/path/to/less.js"></script> -</pre> - <p>To recompile the .less files, just save them and reload your page. Less.js compiles them and stores them in local storage.</p> - - <h3>Unofficial Mac app</h3> - <p><a href="http://incident57.com/less/">The unofficial Mac app</a> watches directories of .less files and compiles the code to local files after every save of a watched .less file. If you like, you can toggle preferences in the app for automatic minifying and which directory the compiled files end up in.</p> - - <h3>More apps</h3> - <h4><a href="http://crunchapp.net/" target="_blank">Crunch</a></h4> - <p>Crunch is a great looking LESS editor and compiler built on Adobe Air.</p> - <h4><a href="http://incident57.com/codekit/" target="_blank">CodeKit</a></h4> - <p>Created by the same guy as the unofficial Mac app, CodeKit is a Mac app that compiles LESS, SASS, Stylus, and CoffeeScript.</p> - <h4><a href="http://wearekiss.com/simpless" target="_blank">Simpless</a></h4> - <p>Mac, Linux, and Windows app for drag and drop compiling of LESS files. Plus, the <a href="https://github.com/Paratron/SimpLESS" target="_blank">source code is on GitHub</a>.</p> - - </section> - - - - <!-- Static assets - ================================================== --> - <section id="static-assets"> - <div class="page-header"> - <h1>Use as static assets</h1> - </div> - <p class="lead"><a href="./getting-started.html">Quickly start</a> any web project by dropping in the compiled or minified CSS and JS. Layer on custom styles separately for easy upgrades and maintenance moving forward.</p> - - <h3>Setup file structure</h3> - <p>Download the latest compiled Bootstrap and place into your project. For example, you might have something like this:</p> -<pre> - <span class="icon-folder-open"></span> app/ - <span class="icon-folder-open"></span> layouts/ - <span class="icon-folder-open"></span> templates/ - <span class="icon-folder-open"></span> public/ - <span class="icon-folder-open"></span> css/ - <span class="icon-file"></span> bootstrap.min.css - <span class="icon-folder-open"></span> js/ - <span class="icon-file"></span> bootstrap.min.js - <span class="icon-folder-open"></span> img/ - <span class="icon-file"></span> glyphicons-halflings.png - <span class="icon-file"></span> glyphicons-halflings-white.png -</pre> - - <h3>Utilize starter template</h3> - <p>Copy the following base HTML to get started.</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - </body> -</html> -</pre> - - <h3>Layer on custom code</h3> - <p>Work in your custom CSS, JS, and more as necessary to make Bootstrap your own with your own separate CSS and JS files.</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - <!-- Project --> - <link href="public/css/application.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - <!-- Project --> - <script src="public/js/application.js"></script> - </body> -</html> -</pre> - - </section> - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/docs/getting-started.html b/docs/getting-started.html index c54da9a67f736a80148aaeff27fd80994a0334c2..018c8ed0a010bb52e9b71bd531edafd2e74a22e0 100644 --- a/docs/getting-started.html +++ b/docs/getting-started.html @@ -1,377 +1,289 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Getting · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> +--- +layout: default +title: Getting started +slug: getting-started +lead: "An overview of Bootstrap, how to download and use, basic templates and examples, and more." +--- + + + <!-- Getting started + ================================================== --> + <div class="bs-docs-section" id="download"> + <div class="page-header"> + <h1>Download Bootstrap</h1> + </div> + <p class="lead">There are a few easy ways to quickly get started with Bootstrap, each one appealing to a different skill level and use case. Read through to see what suits your particular needs.</p> + + <h3>Download compiled CSS and JS</h3> + <p class="lead">The fastest way to get started is to get the compiled and minified versions of our CSS, JavaScript, and fonts. No documentation or original source files are included.</p> + <p><a class="btn btn-large btn-primary" href="assets/bootstrap.zip" onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download compiled']);">Download Bootstrap</a></p> + + <hr> + + <h3 id="download-options">More download options</h3> + <div class="bs-docs-dl-options"> + <h4> + <a href="https://github.com/twitter/bootstrap/zipball/master" onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download source']);">Download latest source code</a> + </h4> + <p>Get the original files for all CSS and JavaScript by downloading the latest version directly from GitHub.</p> + <h4> + <a href="https://github.com/twitter/bootstrap/" onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'GitHub project']);">Clone or fork via GitHub</a> + </h4> + <p>Clone the entire project or fork your own version of Bootstrap to make it your own by visiting us on GitHub.</p> + <h4> + Install with <a href="http://twitter.github.com/bower">Bower</a> + </h4> + <p>Install and manage the original files for all CSS and JavaScript, along with a local copy of the docs, using <a href="http://twitter.github.com/bower">Bower</a>.</p> + {% highlight bash %}$ bower install bootstrap{% endhighlight %} + </div> - </head> + <hr> - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class="active"> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> + <h3 id="download-cdn">Use the Bootstrap CDN</h3> + <p>The folks over at <a href="https://www.netdna.com/">NetDNA</a> have graciously provided CDN support for Bootstrap's CSS and JavaScript. To use, swap your local instances for the <a href="http://www.bootstrapcdn.com/">Bootstrap CDN</a> links listed below.</p> +{% highlight html linenos %} +<!-- Latest compiled and minified CSS --> +<link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css"> -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Getting started</h1> - <p class="lead">Overview of the project, its contents, and how to get started with a simple template.</p> +<!-- Latest compiled and minified JavaScript --> +<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script> +{% endhighlight %} </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> Download</a></li> - <li><a href="#file-structure"><i class="icon-chevron-right"></i> File structure</a></li> - <li><a href="#contents"><i class="icon-chevron-right"></i> What's included</a></li> - <li><a href="#html-template"><i class="icon-chevron-right"></i> HTML template</a></li> - <li><a href="#examples"><i class="icon-chevron-right"></i> Examples</a></li> - <li><a href="#what-next"><i class="icon-chevron-right"></i> What next?</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Download - ================================================== --> - <section id="download-bootstrap"> - <div class="page-header"> - <h1>1. Download</h1> - </div> - <p class="lead">Before downloading, be sure to have a code editor (we recommend <a href="http://sublimetext.com/2">Sublime Text 2</a>) and some working knowledge of HTML and CSS. We won't walk through the source files here, but they are available for download. We'll focus on getting started with the compiled Bootstrap files.</p> - - <div class="row-fluid"> - <div class="span6"> - <h2>Download compiled</h2> - <p><strong>Fastest way to get started:</strong> get the compiled and minified versions of our CSS, JS, and images. No docs or original source files.</p> - <p><a class="btn btn-large btn-primary" href="assets/bootstrap.zip" >Download Bootstrap</a></p> - </div> - <div class="span6"> - <h2>Download source</h2> - <p>Get the original files for all CSS and JavaScript, along with a local copy of the docs by downloading the latest version directly from GitHub.</p> - <p><a class="btn btn-large" href="https://github.com/twitter/bootstrap/zipball/master" >Download Bootstrap source</a></p> - </div> - </div> - </section> - - - - <!-- File structure - ================================================== --> - <section id="file-structure"> - <div class="page-header"> - <h1>2. File structure</h1> - </div> - <p class="lead">Within the download you'll find the following file structure and contents, logically grouping common assets and providing both compiled and minified variations.</p> - <p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p> -<pre class="prettyprint"> - bootstrap/ - ├── css/ - │ ├── bootstrap.css - │ ├── bootstrap.min.css - ├── js/ - │ ├── bootstrap.js - │ ├── bootstrap.min.js - └── img/ - ├── glyphicons-halflings.png - └── glyphicons-halflings-white.png -</pre> - <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> - <p>Please note that all JavaScript plugins require jQuery to be included.</p> - </section> - - - - <!-- Contents - ================================================== --> - <section id="contents"> - <div class="page-header"> - <h1>3. What's included</h1> - </div> - <p class="lead">Bootstrap comes equipped with HTML, CSS, and JS for all sorts of things, but they can be summarized with a handful of categories visible at the top of the <a href="http://getbootstrap.com">Bootstrap documentation</a>.</p> - - <h2>Docs sections</h2> - <h4><a href="http://twitter.github.com/bootstrap/scaffolding.html">Scaffolding</a></h4> - <p>Global styles for the body to reset type and background, link styles, grid system, and two simple layouts.</p> - <h4><a href="http://twitter.github.com/bootstrap/base-css.html">Base CSS</a></h4> - <p>Styles for common HTML elements like typography, code, tables, forms, and buttons. Also includes <a href="http://glyphicons.com">Glyphicons</a>, a great little icon set.</p> - <h4><a href="http://twitter.github.com/bootstrap/components.html">Components</a></h4> - <p>Basic styles for common interface components like tabs and pills, navbar, alerts, page headers, and more.</p> - <h4><a href="http://twitter.github.com/bootstrap/javascript.html">JavaScript plugins</a></h4> - <p>Similar to Components, these JavaScript plugins are interactive components for things like tooltips, popovers, modals, and more.</p> - - <h2>List of components</h2> - <p>Together, the <strong>Components</strong> and <strong>JavaScript plugins</strong> sections provide the following interface elements:</p> - <ul> - <li>Button groups</li> - <li>Button dropdowns</li> - <li>Navigational tabs, pills, and lists</li> - <li>Navbar</li> - <li>Labels</li> - <li>Badges</li> - <li>Page headers and hero unit</li> - <li>Thumbnails</li> - <li>Alerts</li> - <li>Progress bars</li> - <li>Modals</li> - <li>Dropdowns</li> - <li>Tooltips</li> - <li>Popovers</li> - <li>Accordion</li> - <li>Carousel</li> - <li>Typeahead</li> - </ul> - <p>In future guides, we may walk through these components individually in more detail. Until then, look for each of these in the documentation for information on how to utilize and customize them.</p> - </section> - - - - <!-- HTML template - ================================================== --> - <section id="html-template"> - <div class="page-header"> - <h1>4. Basic HTML template</h1> - </div> - <p class="lead">With a brief intro into the contents out of the way, we can focus on putting Bootstrap to use. To do that, we'll utilize a basic HTML template that includes everything we mentioned in the <a href="./getting-started.html#file-structure">File structure</a>.</p> - <p>Now, here's a look at a <strong>typical HTML file</strong>:</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - </body> -</html> -</pre> - <p>To make this <strong>a Bootstrapped template</strong>, just include the appropriate CSS and JS files:</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <!-- Bootstrap --> - <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - <script src="js/bootstrap.min.js"></script> - </body> -</html> -</pre> - <p><strong>And you're set!</strong> With those two files added, you can begin to develop any site or application with Bootstrap.</p> - </section> - - - - <!-- Examples - ================================================== --> - <section id="examples"> - <div class="page-header"> - <h1>5. Examples</h1> - </div> - <p class="lead">Move beyond the base template with a few example layouts. We encourage folks to iterate on these examples and not simply use them as an end result.</p> - <ul class="thumbnails bootstrap-examples"> - <li class="span3"> - <a class="thumbnail" href="examples/starter-template.html"> - <img src="assets/img/examples/bootstrap-example-starter.png" alt=""> - </a> - <h4>Starter template</h4> - <p>A barebones HTML document with all the Bootstrap CSS and JavaScript included.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/hero.html"> - <img src="assets/img/examples/bootstrap-example-marketing.png" alt=""> - </a> - <h4>Basic marketing site</h4> - <p>Featuring a hero unit for a primary message and three supporting elements.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/fluid.html"> - <img src="assets/img/examples/bootstrap-example-fluid.png" alt=""> - </a> - <h4>Fluid layout</h4> - <p>Uses our new responsive, fluid grid system to create a seamless liquid layout.</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/marketing-narrow.html"> - <img src="assets/img/examples/bootstrap-example-marketing-narrow.png" alt=""> - </a> - <h4>Narrow marketing</h4> - <p>Slim, lightweight marketing template for small projects or teams.</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/justified-nav.html"> - <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> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/signin.html"> - <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> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/sticky-footer.html"> - <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> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/carousel.html"> - <img src="assets/img/examples/bootstrap-example-carousel.png" alt=""> - </a> - <h4>Carousel jumbotron</h4> - <p>A more interactive riff on the basic marketing site featuring a prominent carousel.</p> - </li> - </ul> - </section> - - - - - <!-- Next - ================================================== --> - <section id="what-next"> - <div class="page-header"> - <h1>What next?</h1> - </div> - <p class="lead">Head to the docs for information, examples, and code snippets, or take the next leap and customize Bootstrap for any upcoming project.</p> - <a class="btn btn-large btn-primary" href="./scaffolding.html" >Visit the Bootstrap docs</a> - <a class="btn btn-large" href="./customize.html" style="margin-left: 5px;" >Customize Bootstrap</a> - </section> + <!-- File structure + ================================================== --> + <div class="bs-docs-section" id="whats-included"> + <div class="page-header"> + <h1>What's included</h1> + </div> + <p class="lead">Within the download you'll find the following directories and files, logically grouping common assets and providing both compiled and minified variations.</p> + <p>Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:</p> + +{% highlight bash %} +bootstrap/ +├── css/ +│ ├── bootstrap.css +│ ├── bootstrap.min.css +├── js/ +│ ├── bootstrap.js +│ ├── bootstrap.min.js +└── fonts/ + ├── glyphiconshalflings-regular.eot + ├── glyphiconshalflings-regular.otf + ├── glyphiconshalflings-regular.svg + ├── glyphiconshalflings-regular.ttf + └── glyphiconshalflings-regular.woff +{% 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"> + <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 + ================================================== --> + <div class="bs-docs-section" id="examples"> + <div class="page-header"> + <h1>Templates and examples</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> + <h3 id="examples-template">HTML template</h3> + <p>Copy and paste the HTML from below to get started with a bare bones Bootstrap document.</p> +{% highlight html %} +<!DOCTYPE html> +<html> + <head> + <title>Bootstrap 101 Template</title> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <!-- Bootstrap --> + <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> + </head> + <body> + <h1>Hello, world!</h1> + <!-- JavaScript plugins (requires jQuery) --> + <script src="http://code.jquery.com/jquery.js"></script> + <!-- Include all compiled plugins (below), or include individual files as needed --> + <script src="js/bootstrap.min.js"></script> + + <!-- Optionally enable responsive features in IE8 --> + <script src="js/respond.js"></script> + </body> +</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> + </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> + <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-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> </div> - </div> - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> - </div> - </footer> - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> + <div class="bs-docs-section" id="customizing"> + <div class="page-header"> + <h1>Customizing Bootstrap</h1> + </div> + <p class="lead">Customizing Bootstrap is best accomplished when you treat it as another dependency in your development stack. Doing so ensures future upgrades are as easy as possible while also familiarizing yourself to the intricacies of the framework.</p> - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> + <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> - <script src="assets/js/application.js"></script> + <div class="bs-callout"> + <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> + <p>From there, include whatever Bootstrap components and HTML content you need to get your template setup. It's best to have a rough idea in mind of modifications to make and content to include, so be sure to spend a brief amount of time on that before moving on.</p> + + <h3>Customizing components</h3> + <p>There are varying degrees to customizing components, but most fall into two camps: light customizations and complete visual overhauls. Luckily, there are plenty of examples of both.</p> + <p>We define light customizations as mostly surface layer changes, things like a color and font changes to existing Bootstrap components. A great example of this is the the <a href="http://translate.twitter.com">Twitter Translation Center</a> (coded by @mdo). Let's look at how to implement the custom button we wrote for this site, <code>.btn-ttc</code>.</p> + <p>Instead of using the provided Bootstrap buttons, which only require just one class to start, <code>.btn</code>, we'll add our own modifier class, <code>.btn-ttc</code>. This will give us a slightly custom look with minimal effort.</p> +{% highlight html %} +<button type="button" class="btn btn-ttc">Save changes</button> +{% endhighlight %} + + <p>In the custom stylesheet, add the following CSS:</p> + +{% highlight css %} +/* Custom button +-------------------------------------------------- */ + +/* Override base .btn styles */ +/* Apply text and background changes to three key states: default, hover, and active (click). */ +.btn-ttc, +.btn-ttc:hover, +.btn-ttc:active { + color: white; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #007da7; +} + +/* Apply the custom-colored gradients */ +/* Note: you'll need to include all the appropriate gradients for various browsers and standards. */ +.btn-ttc { + background-repeat: repeat-x; + background-image: linear-gradient(top, #009ED2 0%, #007DA7 100%); + ... +} + +/* Set the hover state */ +/* An easy hover state is just to move the gradient up a small amount. Add other embellishments as you see fit. */ +.btn-ttc:hover { + background-position: 0 -15px; +} +{% endhighlight %} + + <p>Customizing Bootstrap components takes time, but should be straightforward. <strong>Look to the source code often and duplicate the selectors you need for your modifications.</strong> Placing them after the Bootstrap source makes for easy overriding without complication. <strong>To recap, here's the basic workflow:</strong></p> + <ul> + <li>For each element you want to customize, find its code in the compiled Bootstrap CSS. Copy and paste the selector for a component as-is. For instance, to customize the navbar background, just snag <code>.navbar</code>.</li> + <li>Add all your custom CSS in a separate stylesheet using the selectors you just copied from the Bootstrap source. No need for prefacing with additional classes or using <code>!important</code> here.</li> + <li>Rinse and repeat until you're happy with your customizations.</li> + </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"> + <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> + <h3>Removing potential bloat</h3> + <p>Not all sites and applications need to make use of everything Bootstrap has to offer, especially in production environments where bandwidth literally becomes a financial issue. We encourage folks to remove whatever is unused with our <a href="/customize/">Customizer</a>.</p> + <p>Using the Customizer, simply uncheck any component, feature, or asset you don't need. Hit download and swap out the default Bootstrap files with these newly customized ones. You'll get vanilla Bootstrap, but without the features *you* deem unnecessary. All custom builds include compiled and minified versions, so use whichever works for you.</p> - </body> -</html> + </div> diff --git a/docs/index.html b/docs/index.html index 523a0381f9d437599f28570a9bb431c0ba8fe975..24a0220f2f19842b8d2e995f9b8d7c8b0281e150 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,221 +1,34 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> +--- +layout: home +title: Bootstrap +--- - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> +<div class="container"> + <div class="bs-masthead"> -<div class="jumbotron masthead"> - <div class="container"> <h1>Bootstrap</h1> - <p>Sleek, intuitive, and powerful front-end framework for faster and easier web development.</p> + <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-primary btn-large" >Download Bootstrap</a> + <a href="assets/bootstrap.zip" class="btn btn-large" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download 3.0.0']);">Download Bootstrap</a> </p> - <ul class="masthead-links"> + + {% include social-buttons.html %} + + <ul class="bs-masthead-links"> <li> - <a href="http://github.com/twitter/bootstrap" >GitHub project</a> + <a href="./customize/" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Customize']);">Customize</a> </li> <li> - <a href="./getting-started.html#examples" >Examples</a> + <a href="http://github.com/twitter/bootstrap" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'GitHub project']);">GitHub project</a> </li> <li> - <a href="./extend.html" >Extend</a> + <a href="./getting-started/#examples" onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Examples']);">Examples</a> </li> <li> - Version 2.3.1 + <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> -</div> -<div class="bs-docs-social"> - <div class="container"> - <ul class="bs-docs-social-buttons"> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> - </li> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="102px" height="20px"></iframe> - </li> - <li class="follow-btn"> - <a href="https://twitter.com/twbootstrap" class="twitter-follow-button" data-link-color="#0069D6" data-show-count="true">Follow @twbootstrap</a> - </li> - <li class="tweet-btn"> - <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://twitter.github.com/bootstrap/" data-count="horizontal" data-via="twbootstrap" data-related="mdo:Creator of Twitter Bootstrap">Tweet</a> - </li> - </ul> </div> </div> - -<div class="container"> - - <div class="marketing"> - - <h1>Introducing Bootstrap.</h1> - <p class="marketing-byline">Need reasons to love Bootstrap? Look no further.</p> - - <div class="row-fluid"> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-twitter-github.png"> - <h2>By nerds, for nerds.</h2> - <p>Built at Twitter by <a href="http://twitter.com/mdo">@mdo</a> and <a href="http://twitter.com/fat">@fat</a>, Bootstrap utilizes <a href="http://lesscss.org">LESS CSS</a>, is compiled via <a href="http://nodejs.org">Node</a>, and is managed through <a href="http://github.com">GitHub</a> to help nerds do awesome stuff on the web.</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-responsive-illustrations.png"> - <h2>Made for everyone.</h2> - <p>Bootstrap was made to not only look and behave great in the latest desktop browsers (as well as IE7!), but in tablet and smartphone browsers via <a href="./scaffolding.html#responsive">responsive CSS</a> as well.</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-bootstrap-features.png"> - <h2>Packed with features.</h2> - <p>A 12-column responsive <a href="./scaffolding.html#gridSystem">grid</a>, dozens of components, <a href="./javascript.html">JavaScript plugins</a>, typography, form controls, and even a <a href="./customize.html">web-based Customizer</a> to make Bootstrap your own.</p> - </div> - </div> - - <hr class="soften"> - - <h1>Built with Bootstrap.</h1> - <p class="marketing-byline">For even more sites built with Bootstrap, <a href="http://builtwithbootstrap.tumblr.com/" target="_blank">visit the unofficial Tumblr</a> or <a href="./getting-started.html#examples">browse the examples</a>.</p> - <div class="row-fluid"> - <ul class="thumbnails example-sites"> - <li class="span3"> - <a class="thumbnail" href="http://soundready.fm/" target="_blank"> - <img src="assets/img/example-sites/soundready.png" alt="SoundReady.fm"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://kippt.com/" target="_blank"> - <img src="assets/img/example-sites/kippt.png" alt="Kippt"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.gathercontent.com/" target="_blank"> - <img src="assets/img/example-sites/gathercontent.png" alt="Gather Content"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.jshint.com/" target="_blank"> - <img src="assets/img/example-sites/jshint.png" alt="JS Hint"> - </a> - </li> - </ul> - </div> - - </div> - -</div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/docs/javascript.html b/docs/javascript.html index f4957d91cf9efcaee3c48c905c95dfdae78fdbec..955ad31f82a1af6e0d13cf2b018829fddd9bf370 100644 --- a/docs/javascript.html +++ b/docs/javascript.html @@ -1,386 +1,328 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Javascript · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class=""> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class="active"> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> +--- +layout: default +title: JavaScript plugins +slug: js +lead: "Bring Bootstrap's components to life with over a dozen custom jQuery plugins. Easily include them all, or one by one." +--- + + + <!-- Overview + ================================================== --> + <div class="bs-docs-section" id="js-overview"> + <div class="page-header"> + <h1>Overview</h1> </div> -<!-- Subhead -================================================== --> -<header class="jumbotron subhead"> - <div class="container"> - <h1>JavaScript</h1> - <p class="lead">Bring Bootstrap's components to life—now with 13 custom jQuery plugins. - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#overview"><i class="icon-chevron-right"></i> Overview</a></li> - <li><a href="#transitions"><i class="icon-chevron-right"></i> Transitions</a></li> - <li><a href="#modals"><i class="icon-chevron-right"></i> Modal</a></li> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> Dropdown</a></li> - <li><a href="#scrollspy"><i class="icon-chevron-right"></i> Scrollspy</a></li> - <li><a href="#tabs"><i class="icon-chevron-right"></i> Tab</a></li> - <li><a href="#tooltips"><i class="icon-chevron-right"></i> Tooltip</a></li> - <li><a href="#popovers"><i class="icon-chevron-right"></i> Popover</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> Alert</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> Button</a></li> - <li><a href="#collapse"><i class="icon-chevron-right"></i> Collapse</a></li> - <li><a href="#carousel"><i class="icon-chevron-right"></i> Carousel</a></li> - <li><a href="#typeahead"><i class="icon-chevron-right"></i> Typeahead</a></li> - <li><a href="#affix"><i class="icon-chevron-right"></i> Affix</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Overview - ================================================== --> - <section id="overview"> - <div class="page-header"> - <h1>JavaScript in Bootstrap</h1> - </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"> + <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> - <h3>Individual or compiled</h3> - <p>Plugins can be included individually (though some have required dependencies), or all at once. Both <strong>bootstrap.js</strong> and <strong>bootstrap.min.js</strong> contain all plugins in a single file.</p> + <h3 id="js-data-attrs">Data attributes</h3> + <p>You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first class API and should be your first consideration when using a plugin.</p> - <h3>Data attributes</h3> - <p>You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first class API and should be your first consideration when using a plugin.</p> + <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the body namespaced with <code>data-api</code>. This looks like this: +{% highlight js %} +$('body').off('.data-api') +{% endhighlight %} - <p>That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this: - <pre class="prettyprint linenums">$('body').off('.data-api')</pre> + <p>Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:</p> +{% highlight js %} +$('body').off('.alert.data-api') +{% endhighlight %} - <p>Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:</p> - <pre class="prettyprint linenums">$('body').off('.alert.data-api')</pre> + <h3 id="js-programmatic-api">Programmatic API</h3> + <p>We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.</p> +{% highlight js %} +$(".btn.danger").button("toggle").addClass("fat") +{% endhighlight %} - <h3>Programmatic API</h3> - <p>We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.</p> - <pre class="prettyprint linenums">$(".btn.danger").button("toggle").addClass("fat")</pre> - <p>All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):</p> -<pre class="prettyprint linenums"> -$("#myModal").modal() // initialized with defaults + <p>All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):</p> +{% highlight js %} +$("#myModal").modal() // initialized with defaults $("#myModal").modal({ keyboard: false }) // initialized with no keyboard $("#myModal").modal('show') // initializes and invokes show immediately</p> -</pre> - <p>Each plugin also exposes its raw constructor on a `Constructor` property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.</p> +{% endhighlight %} - <h3>No Conflict</h3> - <p>Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.</p> + <p>Each plugin also exposes its raw constructor on a <code>Constructor</code> property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.</p> -<pre class="prettyprint linenums"> + <h3 id="js-noconflict">No conflict</h3> + <p>Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.</p> +{% highlight js %} var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value $.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the bootstrap functionality -</pre> - - <h3>Events</h3> - <p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p> - <p>All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.</p> -<pre class="prettyprint linenums"> -$('#myModal').on('show', function (e) { - if (!data) return e.preventDefault() // stops modal from being shown +{% endhighlight %} + + <h3 id="js-events">Events</h3> + <p>Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.</p> + <p>As of 3.0.0, all bootstrap events are namespaced.</p> + <p>All infinitive events provide <code>preventDefault</code> functionality. This provides the ability to stop the execution of an action before it starts.</p> +{% highlight js %} +$('#myModal').on('show.bs.modal', function (e) { + if (!data) return e.preventDefault() // stops modal from being shown }) -</pre> - </section> - +{% endhighlight %} + </div> - <!-- Transitions - ================================================== --> - <section id="transitions"> - <div class="page-header"> - <h1>Transitions <small>bootstrap-transition.js</small></h1> - </div> - <h3>About transitions</h3> - <p>For simple transition effects, include <strong>bootstrap-transition.js</strong> once alongside the other JS files. If you're using the compiled (or minified) <strong>bootstrap.js</strong>, there is no need to include this—it's already there.</p> - <h3>Use cases</h3> - <p>A few examples of the transition plugin:</p> - <ul> - <li>Sliding or fading in modals</li> - <li>Fading out tabs</li> - <li>Fading out alerts</li> - <li>Sliding carousel panes</li> - </ul> - </section> + <!-- Transitions + ================================================== --> + <div class="bs-docs-section" id="transitions"> + <div class="page-header"> + <h1>Transitions <small>transition.js</small></h1> + </div> + <h3>About transitions</h3> + <p>For simple transition effects, include transition.js once alongside the other JS files. If you're using the compiled (or minified) bootstrap.js, there is no need to include this—it's already there.</p> + <h3>Use cases</h3> + <p>A few examples of the transition plugin:</p> + <ul> + <li>Sliding or fading in modals</li> + <li>Fading out tabs</li> + <li>Fading out alerts</li> + <li>Sliding carousel panes</li> + </ul> + + <!-- Ideas: include docs for .fade.in, .slide.in, etc --> + </div> - <!-- Modal - ================================================== --> - <section id="modals"> - <div class="page-header"> - <h1>Modals <small>bootstrap-modal.js</small></h1> - </div> + <!-- Modal + ================================================== --> + <div class="bs-docs-section" id="modals"> + <div class="page-header"> + <h1>Modals <small>bootstrap-modal.js</small></h1> + </div> + <h2 id="modals-examples">Examples</h2> + <p>Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.</p> - <h2>Examples</h2> - <p>Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.</p> - - <h3>Static example</h3> - <p>A rendered modal with header, body, and set of actions in the footer.</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <div class="modal" style="position: relative; top: auto; left: auto; right: auto; margin: 0 auto 20px; z-index: 1; max-width: 100%;"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3>Modal header</h3> - </div> - <div class="modal-body"> - <p>One fine body…</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">Close</a> - <a href="#" class="btn btn-primary">Save changes</a> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="modal hide fade"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> - <h3>Modal header</h3> - </div> - <div class="modal-body"> - <p>One fine body…</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">Close</a> - <a href="#" class="btn btn-primary">Save changes</a> - </div> -</div> -</pre> - - <h3>Live demo</h3> - <p>Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.</p> - <!-- sample modal content --> - <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> + <h3>Static example</h3> + <p>A rendered modal with header, body, and set of actions in the footer.</p> + <div class="bs-example bs-example-modal"> + <div class="modal"> + <div class="modal-dialog"> + <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">Modal Heading</h3> + <h4 class="modal-title">Modal title</h4> </div> <div class="modal-body"> - <h4>Text in a modal</h4> - <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p> - - <h4>Popover in a modal</h4> - <p>This <a href="#" role="button" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on click.</p> - - <h4>Tooltips in a modal</h4> - <p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> should have tooltips on hover.</p> - - <hr> - - <h4>Overflowing text to show optional scrollbar</h4> - <p>We set a fixed <code>max-height</code> on the <code>.modal-body</code>. Watch it overflow with all this extra lorem ipsum text we've included.</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>One fine body…</p> </div> <div class="modal-footer"> - <button class="btn" data-dismiss="modal">Close</button> - <button class="btn btn-primary">Save changes</button> + <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> + <button type="button" class="btn btn-primary">Save changes</button> </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> + </div><!-- /.modal --> + </div><!-- /example --> +{% highlight html %} +<div class="modal fade"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">Modal title</h4> + </div> + <div class="modal-body"> + <p>One fine body…</p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> + <button type="button" class="btn btn-primary">Save changes</button> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> +</div><!-- /.modal --> +{% endhighlight %} + + <h3>Live demo</h3> + <p>Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.</p> + <!-- sample modal content --> + <div id="myModal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> + <div class="modal-dialog"> + <div class="modal-content"> + + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title" id="myModalLabel">Modal Heading</h4> </div> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a> + <div class="modal-body"> + <h4>Text in a modal</h4> + <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> + + <h4>Popover in a modal</h4> + <p>This <a href="#" role="button" class="btn btn-default popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on click.</p> + + <h4>Tooltips in a modal</h4> + <p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> should have tooltips on hover.</p> + + <hr> + + <h4>Overflowing text to show optional scrollbar</h4> + <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> + <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> + <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> + <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-default" data-dismiss="modal">Close</button> + <button type="button" class="btn btn-primary">Save changes</button> </div> -<pre class="prettyprint linenums"> -<!-- Button to trigger modal --> -<a href="#myModal" role="button" class="btn" data-toggle="modal">Launch demo modal</a> - -<!-- Modal --> -<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">Modal header</h3> - </div> - <div class="modal-body"> - <p>One fine body…</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button> - <button class="btn btn-primary">Save changes</button> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Activate a modal without writing JavaScript. Set <code>data-toggle="modal"</code> on a controller element, like a button, along with a <code>data-target="#foo"</code> or <code>href="#foo"</code> to target a specific modal to toggle.</p> - <pre class="prettyprint linenums"><button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button></pre> - - <h3>Via JavaScript</h3> - <p>Call a modal with id <code>myModal</code> with a single line of JavaScript:</p> - <pre class="prettyprint linenums">$('#myModal').modal(options)</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 50px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>backdrop</td> - <td>boolean</td> - <td>true</td> - <td>Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.</td> - </tr> - <tr> - <td>keyboard</td> - <td>boolean</td> - <td>true</td> - <td>Closes the modal when escape key is pressed</td> - </tr> - <tr> - <td>show</td> - <td>boolean</td> - <td>true</td> - <td>Shows the modal when initialized.</td> - </tr> - <tr> - <td>remote</td> - <td>path</td> - <td>false</td> - <td><p>If a remote url is provided, content will be loaded via jQuery's <code>load</code> method and injected into the <code>.modal-body</code>. If you're using the data api, you may alternatively use the <code>href</code> tag to specify the remote source. An example of this is shown below:</p> - <pre class="prettyprint linenums"><code><a data-toggle="modal" href="remote.html" data-target="#modal">click me</a></code></pre></td> - </tr> - </tbody> - </table> - <h3>Methods</h3> - <h4>.modal(options)</h4> - <p>Activates your content as a modal. Accepts an optional options <code>object</code>.</p> -<pre class="prettyprint linenums"> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> + </div><!-- /.modal --> + + <div class="bs-example" style="padding-bottom: 24px;"> + <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a> + </div><!-- /example --> +{% highlight html %} + <!-- Button trigger modal --> + <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a> + + <!-- Modal --> + <div class="modal" id="myModal"> + <div class="modal-dialog"> + <div class="modal-content"> + <div class="modal-header"> + <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> + <h4 class="modal-title">Modal title</h4> + </div> + <div class="modal-body"> + ... + </div> + <div class="modal-footer"> + <a href="#" class="btn">Close</a> + <a href="#" class="btn btn-primary">Save changes</a> + </div> + </div><!-- /.modal-content --> + </div><!-- /.modal-dalog --> + </div><!-- /.modal --> +{% endhighlight %} + + + + <h2 id="modals-usage">Usage</h2> + + <h3>Via data attributes</h3> + <p>Activate a modal without writing JavaScript. Set <code>data-toggle="modal"</code> on a controller element, like a button, along with a <code>data-target="#foo"</code> or <code>href="#foo"</code> to target a specific modal to toggle.</p> +{% highlight html %} +<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button> +{% endhighlight %} + + <h3>Via JavaScript</h3> + <p>Call a modal with id <code>myModal</code> with a single line of JavaScript:</p> + {% highlight js %}$('#myModal').modal(options){% endhighlight %} + + <h3>Options</h3> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=""</code>.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 50px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> + </thead> + <tbody> + <tr> + <td>backdrop</td> + <td>boolean</td> + <td>true</td> + <td>Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.</td> + </tr> + <tr> + <td>keyboard</td> + <td>boolean</td> + <td>true</td> + <td>Closes the modal when escape key is pressed</td> + </tr> + <tr> + <td>show</td> + <td>boolean</td> + <td>true</td> + <td>Shows the modal when initialized.</td> + </tr> + <tr> + <td>remote</td> + <td>path</td> + <td>false</td> + <td><p>If a remote url is provided, content will be loaded via jQuery's <code>load</code> method and injected into the <code>.modal-body</code>. If you're using the data api, you may alternatively use the <code>href</code> tag to specify the remote source. An example of this is shown below:</p> +{% highlight html %} +<a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a> +{% endhighlight %} + </tr> + </tbody> + </table> + + <h3>Methods</h3> + + <h4>.modal(options)</h4> + <p>Activates your content as a modal. Accepts an optional options <code>object</code>.</p> +{% highlight js %} $('#myModal').modal({ keyboard: false }) -</pre> - <h4>.modal('toggle')</h4> - <p>Manually toggles a modal.</p> - <pre class="prettyprint linenums">$('#myModal').modal('toggle')</pre> - <h4>.modal('show')</h4> - <p>Manually opens a modal.</p> - <pre class="prettyprint linenums">$('#myModal').modal('show')</pre> - <h4>.modal('hide')</h4> - <p>Manually hides a modal.</p> - <pre class="prettyprint linenums">$('#myModal').modal('hide')</pre> - <h3>Events</h3> - <p>Bootstrap's modal class exposes a few events for hooking into modal functionality.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> - </thead> - <tbody> - <tr> - <td>show</td> - <td>This event fires immediately when the <code>show</code> instance method is called.</td> - </tr> - <tr> - <td>shown</td> - <td>This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).</td> - </tr> - <tr> - <td>hide</td> - <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td> - </tr> - <tr> - <td>hidden</td> - <td>This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myModal').on('hidden', function () { +{% endhighlight %} + + <h4>.modal('toggle')</h4> + <p>Manually toggles a modal.</p> + {% highlight js %}$('#myModal').modal('toggle'){% endhighlight %} + + <h4>.modal('show')</h4> + <p>Manually opens a modal.</p> + {% highlight js %}$('#myModal').modal('show'){% endhighlight %} + + <h4>.modal('hide')</h4> + <p>Manually hides a modal.</p> + {% highlight js %}$('#myModal').modal('hide'){% endhighlight %} + + <h3>Events</h3> + <p>Bootstrap's modal class exposes a few events for hooking into modal functionality.</p> + <table class="table table-bordered table-striped"> + <thead> + <tr> + <th style="width: 150px;">Event Type</th> + <th>Description</th> + </tr> + </thead> + <tbody> + <tr> + <td>show</td> + <td>This event fires immediately when the <code>show</code> instance method is called.</td> + </tr> + <tr> + <td>shown</td> + <td>This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).</td> + </tr> + <tr> + <td>hide</td> + <td>This event is fired immediately when the <code>hide</code> instance method has been called.</td> + </tr> + <tr> + <td>hidden</td> + <td>This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).</td> + </tr> + </tbody> + </table> +{% highlight js %} +$('#myModal').on('hidden.bs.modal', function () { // do something… }) -</pre> - </section> +{% endhighlight %} + </div> @@ -396,86 +338,86 @@ $('#myModal').on('hidden', function () { <p>Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.</p> <h3>Within a navbar</h3> - <div class="bs-docs-example"> + <div class="bs-example"> <div id="navbar-example" class="navbar navbar-static"> <div class="navbar-inner"> <div class="container" style="width: auto;"> - <a class="brand" href="#">Project Name</a> - <ul class="nav" role="navigation"> + <a class="navbar-brand" href="#">Project Name</a> + <ul class="nav navbar-nav" role="navigation"> <li class="dropdown"> <a id="drop1" href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> <ul class="dropdown-menu" role="menu" aria-labelledby="drop1"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="http://google.com">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#anotherAction">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Something else here</a></li> <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li> </ul> </li> <li class="dropdown"> <a href="#" id="drop2" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown 2 <b class="caret"></b></a> <ul class="dropdown-menu" role="menu" aria-labelledby="drop2"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Something else here</a></li> <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li> </ul> </li> </ul> - <ul class="nav pull-right"> + <ul class="nav navbar-nav pull-right"> <li id="fat-menu" class="dropdown"> <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">Dropdown 3 <b class="caret"></b></a> <ul class="dropdown-menu" role="menu" aria-labelledby="drop3"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Something else here</a></li> <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li> </ul> </li> </ul> </div> </div> </div> <!-- /navbar-example --> - </div> + </div> <!-- /example --> <h3>Within tabs</h3> - <div class="bs-docs-example"> + <div class="bs-example"> <ul class="nav nav-pills"> <li class="active"><a href="#">Regular link</a></li> <li class="dropdown"> <a class="dropdown-toggle" id="drop4" role="button" data-toggle="dropdown" href="#">Dropdown <b class="caret"></b></a> <ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Something else here</a></li> <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li> </ul> </li> <li class="dropdown"> <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">Dropdown 2 <b class="caret"></b></a> <ul id="menu2" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Something else here</a></li> <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li> </ul> </li> <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">Dropdown 3 <b class="caret"></b></a> - <ul id="menu3" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Another action</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Something else here</a></li> + <a class="dropdown-toggle" id="drop6" role="button" data-toggle="dropdown" href="#">Dropdown 3 <b class="caret"></b></a> + <ul id="menu3" class="dropdown-menu" role="menu" aria-labelledby="drop6"> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Another action</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Something else here</a></li> <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">Separated link</a></li> + <li role="presentation"><a role="menuitem" tabindex="-1" href="http://twitter.com/fat">Separated link</a></li> </ul> </li> </ul> <!-- /tabs --> - </div> + </div> <!-- /example --> <hr class="bs-docs-separator"> @@ -485,30 +427,31 @@ $('#myModal').on('hidden', function () { <h3>Via data attributes</h3> <p>Add <code>data-toggle="dropdown"</code> to a link or button to toggle a dropdown.</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> +{% highlight html %} +<div class="dropdown"> + <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a> + <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> ... - </ul> -</div> -</pre> + </ul> +</div> +{% endhighlight %} <p>To keep URLs intact, use the <code>data-target</code> attribute instead of <code>href="#"</code>.</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> - Dropdown - <b class="caret"></b> - </a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> +{% highlight html %} +<div class="dropdown"> + <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> + Dropdown <span class="caret"></span> + </a> + <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> ... - </ul> -</div> -</pre> + </ul> +</div> +{% endhighlight %} <h3>Via JavaScript</h3> <p>Call the dropdowns via JavaScript:</p> - <pre class="prettyprint linenums">$('.dropdown-toggle').dropdown()</pre> +{% highlight js %} +$('.dropdown-toggle').dropdown() +{% endhighlight %} <h3>Options</h3> <p><em>None</em></p> @@ -530,12 +473,12 @@ $('#myModal').on('hidden', function () { <h2>Example in navbar</h2> <p>The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.</p> - <div class="bs-docs-example"> - <div id="navbarExample" class="navbar navbar-static"> + <div class="bs-example"> + <div id="navbar-example2" class="navbar navbar-static"> <div class="navbar-inner"> <div class="container" style="width: auto;"> - <a class="brand" href="#">Project Name</a> - <ul class="nav"> + <a class="navbar-brand" href="#">Project Name</a> + <ul class="nav navbar-nav"> <li><a href="#fat">@fat</a></li> <li><a href="#mdo">@mdo</a></li> <li class="dropdown"> @@ -551,7 +494,7 @@ $('#myModal').on('hidden', function () { </div> </div> </div> - <div data-spy="scroll" data-target="#navbarExample" data-offset="0" class="scrollspy-example"> + <div data-spy="scroll" data-target="#navbar-example" 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> @@ -565,35 +508,39 @@ $('#myModal').on('hidden', function () { <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. </p> </div> - </div> - - - <hr class="bs-docs-separator"> + </div><!-- /example --> <h2>Usage</h2> <h3>Via data attributes</h3> - <p>To easily add scrollspy behavior to your topbar navigation, just add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the body) and <code>data-target=".navbar"</code> to select which nav to use. You'll want to use scrollspy with a <code>.nav</code> component.</p> - <pre class="prettyprint linenums"><body data-spy="scroll" data-target=".navbar">...</body></pre> + <p>To easily add scrollspy behavior to your topbar navigation, add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the <code><body></code>. Then add the <code>data-target</code> attribute with the ID or class of the parent element of any Bootstrap <code>.nav</code> component.</p> +{% highlight html %} +<body data-spy="scroll" data-target="#navbar-example"> + ... +</body> +{% endhighlight %} <h3>Via JavaScript</h3> <p>Call the scrollspy via JavaScript:</p> - <pre class="prettyprint linenums">$('#navbar').scrollspy()</pre> +{% highlight js %} +$('#navbar-example').scrollspy() +{% endhighlight %} - <div class="alert alert-info"> - <strong>Heads up!</strong> - 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>. + <div class="bs-callout"> + <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> <h3>Methods</h3> <h4>.scrollspy('refresh')</h4> <p>When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:</p> -<pre class="prettyprint linenums"> +{% highlight js %} $('[data-spy="scroll"]').each(function () { var $spy = $(this).scrollspy('refresh') }); -</pre> +{% endhighlight %} + <h3>Options</h3> <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset=""</code>.</p> @@ -620,7 +567,7 @@ $('[data-spy="scroll"]').each(function () { <table class="table table-bordered table-striped"> <thead> <tr> - <th style="width: 150px;">Event</th> + <th style="width: 150px;">Event Type</th> <th>Description</th> </tr> </thead> @@ -631,6 +578,11 @@ $('[data-spy="scroll"]').each(function () { </tr> </tbody> </table> +{% highlight js %} +$('#myScrollspy').on('activate.bs.scrollspy', function () { + // do something… +}) +{% endhighlight %} </section> @@ -645,7 +597,7 @@ $('[data-spy="scroll"]').each(function () { <h2>Example tabs</h2> <p>Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.</p> - <div class="bs-docs-example"> + <div class="bs-example bs-example-tabs"> <ul id="myTab" class="nav nav-tabs"> <li class="active"><a href="#home" data-toggle="tab">Home</a></li> <li><a href="#profile" data-toggle="tab">Profile</a></li> @@ -671,7 +623,7 @@ $('[data-spy="scroll"]').each(function () { <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p> </div> </div> - </div> + </div><!-- /example --> <hr class="bs-docs-separator"> @@ -679,61 +631,66 @@ $('[data-spy="scroll"]').each(function () { <h2>Usage</h2> <p>Enable tabbable tabs via JavaScript (each tab needs to be activated individually):</p> -<pre class="prettyprint linenums"> +{% highlight js %} $('#myTab a').click(function (e) { e.preventDefault(); $(this).tab('show'); -})</pre> +}) +{% endhighlight %} + <p>You can activate individual tabs in several ways:</p> -<pre class="prettyprint linenums"> +{% highlight js %} $('#myTab a[href="#profile"]').tab('show'); // Select tab by name $('#myTab a:first').tab('show'); // Select first tab $('#myTab a:last').tab('show'); // Select last tab $('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed) -</pre> +{% endhighlight %} <h3>Markup</h3> <p>You can activate a tab or pill navigation without writing any JavaScript by simply specifying <code>data-toggle="tab"</code> or <code>data-toggle="pill"</code> on an element. Adding the <code>nav</code> and <code>nav-tabs</code> classes to the tab <code>ul</code> will apply the Bootstrap tab styling.</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li><a href="#home" data-toggle="tab">Home</a></li> - <li><a href="#profile" data-toggle="tab">Profile</a></li> - <li><a href="#messages" data-toggle="tab">Messages</a></li> - <li><a href="#settings" data-toggle="tab">Settings</a></li> -</ul></pre> +{% highlight html %} +<ul class="nav nav-tabs"> + <li><a href="#home" data-toggle="tab">Home</a></li> + <li><a href="#profile" data-toggle="tab">Profile</a></li> + <li><a href="#messages" data-toggle="tab">Messages</a></li> + <li><a href="#settings" data-toggle="tab">Settings</a></li> +</ul> +{% endhighlight %} + + <p>To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>.</p> <h3>Methods</h3> <h4>$().tab</h4> <p> Activates a tab element and content container. Tab should have either a <code>data-target</code> or an <code>href</code> targeting a container node in the DOM. </p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs" id="myTab"> - <li class="active"><a href="#home">Home</a></li> - <li><a href="#profile">Profile</a></li> - <li><a href="#messages">Messages</a></li> - <li><a href="#settings">Settings</a></li> -</ul> - -<div class="tab-content"> - <div class="tab-pane active" id="home">...</div> - <div class="tab-pane" id="profile">...</div> - <div class="tab-pane" id="messages">...</div> - <div class="tab-pane" id="settings">...</div> -</div> - -<script> +{% highlight html %} +<ul class="nav nav-tabs" id="myTab"> + <li class="active"><a href="#home">Home</a></li> + <li><a href="#profile">Profile</a></li> + <li><a href="#messages">Messages</a></li> + <li><a href="#settings">Settings</a></li> +</ul> + +<div class="tab-content"> + <div class="tab-pane active" id="home">...</div> + <div class="tab-pane" id="profile">...</div> + <div class="tab-pane" id="messages">...</div> + <div class="tab-pane" id="settings">...</div> +</div> + +<script> $(function () { $('#myTab a:last').tab('show'); }) -</script> -</pre> +</script> +{% endhighlight %} <h3>Events</h3> <table class="table table-bordered table-striped"> <thead> <tr> - <th style="width: 150px;">Event</th> + <th style="width: 150px;">Event Type</th> <th>Description</th> </tr> </thead> @@ -748,12 +705,12 @@ $('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed) </tr> </tbody> </table> -<pre class="prettyprint linenums"> -$('a[data-toggle="tab"]').on('shown', function (e) { +{% highlight js %} +$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) { e.target // activated tab e.relatedTarget // previous tab }) -</pre> +{% endhighlight %} </section> @@ -764,25 +721,23 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <h1>Tooltips <small>bootstrap-tooltip.js</small></h1> </div> - <h2>Examples</h2> <p>Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.</p> - <p>For performance reasons, the tooltip and popover data-apis are opt in, meaning <strong>you must initialize them yourself</strong>.</p> <p>Hover over the links below to see tooltips:</p> - <div class="bs-docs-example tooltip-demo"> - <p class="muted" style="margin-bottom: 0;">Tight pants next level keffiyeh <a href="#" data-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-toggle="tooltip" title="A much longer tooltip belongs right here to demonstrate the max-width we apply.">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-toggle="tooltip" title="The last tip!">twitter handle</a> freegan cred raw denim single-origin coffee viral. + <div class="bs-example tooltip-demo"> + <p class="muted" style="margin-bottom: 0;">Tight pants next level keffiyeh <a href="#" data-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-toggle="tooltip" title="Another one here too">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-toggle="tooltip" title="The last tip!">twitter handle</a> freegan cred raw denim single-origin coffee viral. </p> - </div> + </div><!-- /example --> <h3>Four directions</h3> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> + <div class="bs-example tooltip-demo"> + <ul class="bs-example-tooltips"> <li><a href="#" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</a></li> <li><a href="#" data-toggle="tooltip" data-placement="right" title="Tooltip on right">Tooltip on right</a></li> <li><a href="#" data-toggle="tooltip" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</a></li> <li><a href="#" data-toggle="tooltip" data-placement="left" title="Tooltip on left">Tooltip on left</a></li> </ul> - </div> + </div><!-- /example --> <h3>Tooltips in input groups</h3> @@ -793,7 +748,9 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <h2>Usage</h2> <p>Trigger the tooltip via JavaScript:</p> - <pre class="prettyprint linenums">$('#example').tooltip(options)</pre> +{% highlight js %} +$('#example').tooltip(options) +{% endhighlight %} <h3>Options</h3> <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.</p> @@ -835,13 +792,13 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <td>title</td> <td>string | function</td> <td>''</td> - <td>default title value if `title` tag isn't present</td> + <td>default title value if <code>title</code> tag isn't present</td> </tr> <tr> <td>trigger</td> <td>string</td> <td>'hover focus'</td> - <td>how tooltip is triggered - click | hover | focus | manual. Note you case pass trigger mutliple, space seperated, trigger types.</td> + <td>how tooltip is triggered - click | hover | focus | manual. Note you case pass trigger multiple, space seperated, trigger types.</td> </tr> <tr> <td>delay</td> @@ -863,29 +820,36 @@ $('a[data-toggle="tab"]').on('shown', function (e) { </tr> </tbody> </table> - <div class="alert alert-info"> - <strong>Heads up!</strong> - Options for individual tooltips can alternatively be specified through the use of data attributes. + <div class="bs-callout"> + <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> <h3>Markup</h3> - <pre class="prettyprint linenums"><a href="#" data-toggle="tooltip" title="first tooltip">hover over me</a></pre> +{% highlight html %} +<a href="#" data-toggle="tooltip" title="first tooltip">Hover over me</a> +{% endhighlight %} <h3>Methods</h3> + <h4>$().tooltip(options)</h4> <p>Attaches a tooltip handler to an element collection.</p> + <h4>.tooltip('show')</h4> <p>Reveals an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('show')</pre> + {% highlight js %}$('#element').tooltip('show'){% endhighlight %} + <h4>.tooltip('hide')</h4> <p>Hides an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('hide')</pre> + {% highlight js %}$('#element').tooltip('hide'){% endhighlight %} + <h4>.tooltip('toggle')</h4> <p>Toggles an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('toggle')</pre> + {% highlight js %}$('#element').tooltip('toggle'){% endhighlight %} + <h4>.tooltip('destroy')</h4> <p>Hides and destroys an element's tooltip.</p> - <pre class="prettyprint linenums">$('#element').tooltip('destroy')</pre> + {% highlight js %}$('#element').tooltip('destroy'){% endhighlight %} </section> @@ -898,11 +862,16 @@ $('a[data-toggle="tab"]').on('shown', function (e) { </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. <strong>Requires <a href="#tooltips">Tooltip</a> to be included.</strong></p> + <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"> + <h4>Plugin dependency</h4> + <p>Popovers require the <a href="#tooltips">tooltip plugin</a> to be included in your version of Bootstrap.</p> + </div> <h3>Static popover</h3> <p>Four options are available: top, right, bottom, and left aligned.</p> - <div class="bs-docs-example bs-docs-example-popover"> + <div class="bs-example bs-example-popover"> <div class="popover top"> <div class="arrow"></div> <h3 class="popover-title">Popover top</h3> @@ -937,22 +906,21 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <div class="clearfix"></div> </div> - <p>No markup shown as popovers are generated from JavaScript and content within a <code>data</code> attribute.</p> <h3>Live demo</h3> - <div class="bs-docs-example" style="padding-bottom: 24px;"> + <div class="bs-example" style="padding-bottom: 24px;"> <a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">Click to toggle popover</a> </div> <h4>Four directions</h4> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> + <div class="bs-example tooltip-demo"> + <ul class="bs-example-tooltips"> <li><a href="#" class="btn" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on top">Popover on top</a></li> <li><a href="#" class="btn" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on right">Popover on right</a></li> <li><a href="#" class="btn" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on bottom">Popover on bottom</a></li> <li><a href="#" class="btn" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on left">Popover on left</a></li> </ul> - </div> + </div><!-- /example --> <hr class="bs-docs-separator"> @@ -960,85 +928,85 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <h2>Usage</h2> <p>Enable popovers via JavaScript:</p> - <pre class="prettyprint linenums">$('#example').popover(options)</pre> + {% highlight js %}$('#example').popover(options){% endhighlight %} <h3>Options</h3> <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.</p> <table class="table table-bordered table-striped"> <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 100px;">type</th> - <th style="width: 50px;">default</th> - <th>description</th> - </tr> + <tr> + <th style="width: 100px;">Name</th> + <th style="width: 100px;">type</th> + <th style="width: 50px;">default</th> + <th>description</th> + </tr> </thead> <tbody> - <tr> - <td>animation</td> - <td>boolean</td> - <td>true</td> - <td>apply a css fade transition to the tooltip</td> - </tr> - <tr> - <td>html</td> - <td>boolean</td> - <td>false</td> - <td>Insert html into the popover. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.</td> - </tr> - <tr> - <td>placement</td> - <td>string | function</td> - <td>'right'</td> - <td>how to position the popover - top | bottom | left | right</td> - </tr> - <tr> - <td>selector</td> - <td>string</td> - <td>false</td> - <td>if a selector is provided, tooltip objects will be delegated to the specified targets</td> - </tr> - <tr> - <td>trigger</td> - <td>string</td> - <td>'click'</td> - <td>how popover is triggered - click | hover | focus | manual</td> - </tr> - <tr> - <td>title</td> - <td>string | function</td> - <td>''</td> - <td>default title value if `title` attribute isn't present</td> - </tr> - <tr> - <td>content</td> - <td>string | function</td> - <td>''</td> - <td>default content value if `data-content` attribute isn't present</td> - </tr> - <tr> - <td>delay</td> - <td>number | object</td> - <td>0</td> - <td> - <p>delay showing and hiding the popover (ms) - does not apply to manual trigger type</p> - <p>If a number is supplied, delay is applied to both hide/show</p> - <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p> - </td> - </tr> - <tr> - <td>container</td> - <td>string | false</td> - <td>false</td> - <td> - <p>Appends the popover to a specific element <code>container: 'body'</code></p> - </td> - </tr> + <tr> + <td>animation</td> + <td>boolean</td> + <td>true</td> + <td>apply a css fade transition to the tooltip</td> + </tr> + <tr> + <td>html</td> + <td>boolean</td> + <td>false</td> + <td>Insert html into the popover. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.</td> + </tr> + <tr> + <td>placement</td> + <td>string | function</td> + <td>'right'</td> + <td>how to position the popover - top | bottom | left | right</td> + </tr> + <tr> + <td>selector</td> + <td>string</td> + <td>false</td> + <td>if a selector is provided, tooltip objects will be delegated to the specified targets if a selector is provided, tooltip objects will be delegated to the specified targets. in practice, this is used to enable dynamic HTML content to have popovers added. See <a href="https://github.com/twitter/bootstrap/issues/4215">this</a> and <a href="http://jsfiddle.net/KPeKS/4/">an informative example</a>.</td> + </tr> + <tr> + <td>trigger</td> + <td>string</td> + <td>'click'</td> + <td>how popover is triggered - click | hover | focus | manual</td> + </tr> + <tr> + <td>title</td> + <td>string | function</td> + <td>''</td> + <td>default title value if <code>title</code> attribute isn't present</td> + </tr> + <tr> + <td>content</td> + <td>string | function</td> + <td>''</td> + <td>default content value if <code>data-content</code> attribute isn't present</td> + </tr> + <tr> + <td>delay</td> + <td>number | object</td> + <td>0</td> + <td> + <p>delay showing and hiding the popover (ms) - does not apply to manual trigger type</p> + <p>If a number is supplied, delay is applied to both hide/show</p> + <p>Object structure is: <code>delay: { show: 500, hide: 100 }</code></p> + </td> + </tr> + <tr> + <td>container</td> + <td>string | false</td> + <td>false</td> + <td> + <p>Appends the popover to a specific element <code>container: 'body'</code></p> + </td> + </tr> </tbody> </table> - <div class="alert alert-info"> - <strong>Heads up!</strong> - Options for individual popovers can alternatively be specified through the use of data attributes. + <div class="bs-callout"> + <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> <h3>Markup</h3> @@ -1047,25 +1015,29 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <h3>Methods</h3> <h4>$().popover(options)</h4> <p>Initializes popovers for an element collection.</p> + <h4>.popover('show')</h4> <p>Reveals an elements popover.</p> - <pre class="prettyprint linenums">$('#element').popover('show')</pre> + {% highlight js %}$('#element').popover('show'){% endhighlight %} + <h4>.popover('hide')</h4> <p>Hides an elements popover.</p> - <pre class="prettyprint linenums">$('#element').popover('hide')</pre> + {% highlight js %}$('#element').popover('hide'){% endhighlight %} + <h4>.popover('toggle')</h4> <p>Toggles an elements popover.</p> - <pre class="prettyprint linenums">$('#element').popover('toggle')</pre> + {% highlight js %}$('#element').popover('toggle'){% endhighlight %} + <h4>.popover('destroy')</h4> <p>Hides and destroys an element's popover.</p> - <pre class="prettyprint linenums">$('#element').popover('destroy')</pre> + {% highlight js %}$('#element').popover('destroy'){% endhighlight %} </section> <!-- Alert ================================================== --> - <section id="alerts"> + <div class="bs-docs-section" id="js-alerts"> <div class="page-header"> <h1>Alert messages <small>bootstrap-alert.js</small></h1> </div> @@ -1073,23 +1045,23 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <h2>Example alerts</h2> <p>Add dismiss functionality to all alert messages with this plugin.</p> - <div class="bs-docs-example"> + <div class="bs-example"> <div class="alert fade in"> <button type="button" class="close" data-dismiss="alert">×</button> <strong>Holy guacamole!</strong> Best check yo self, you're not looking too good. </div> - </div> + </div><!-- /example --> - <div class="bs-docs-example"> + <div class="bs-example"> <div class="alert alert-block alert-error fade in"> <button type="button" class="close" data-dismiss="alert">×</button> - <h4 class="alert-heading">Oh snap! You got an error!</h4> + <h4>Oh snap! You got an error!</h4> <p>Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.</p> <p> - <a class="btn btn-danger" href="#">Take this action</a> <a class="btn" href="#">Or do this</a> + <a class="btn btn-danger" href="#">Take this action</a> <a class="btn btn-default" href="#">Or do this</a> </p> </div> - </div> + </div><!-- /example --> <hr class="bs-docs-separator"> @@ -1097,52 +1069,54 @@ $('a[data-toggle="tab"]').on('shown', function (e) { <h2>Usage</h2> <p>Enable dismissal of an alert via JavaScript:</p> - <pre class="prettyprint linenums">$(".alert").alert()</pre> + {% highlight js %}$(".alert").alert(){% endhighlight %} <h3>Markup</h3> <p>Just add <code>data-dismiss="alert"</code> to your close button to automatically give an alert close functionality.</p> - <pre class="prettyprint linenums"><a class="close" data-dismiss="alert" href="#">&times;</a></pre> + {% highlight html %}<a class="close" data-dismiss="alert" href="#">×</a>{% endhighlight %} <h3>Methods</h3> + <h4>$().alert()</h4> <p>Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.</p> + <h4>.alert('close')</h4> <p>Closes an alert.</p> - <pre class="prettyprint linenums">$(".alert").alert('close')</pre> + {% highlight js %}$(".alert").alert('close'){% endhighlight %} <h3>Events</h3> <p>Bootstrap's alert class exposes a few events for hooking into alert functionality.</p> <table class="table table-bordered table-striped"> <thead> - <tr> - <th style="width: 150px;">Event</th> - <th>Description</th> - </tr> + <tr> + <th style="width: 150px;">Event Type</th> + <th>Description</th> + </tr> </thead> <tbody> - <tr> - <td>close</td> - <td>This event fires immediately when the <code>close</code> instance method is called.</td> - </tr> - <tr> - <td>closed</td> - <td>This event is fired when the alert has been closed (will wait for css transitions to complete).</td> - </tr> + <tr> + <td>close</td> + <td>This event fires immediately when the <code>close</code> instance method is called.</td> + </tr> + <tr> + <td>closed</td> + <td>This event is fired when the alert has been closed (will wait for css transitions to complete).</td> + </tr> </tbody> </table> -<pre class="prettyprint linenums"> -$('#my-alert').bind('closed', function () { +{% highlight js %} +$('#my-alert').bind('closed.bs.alert', function () { // do something… }) -</pre> - </section> +{% endhighlight %} + </div> <!-- Buttons ================================================== --> - <section id="buttons"> + <div class="bs-docs-section" id="js-buttons"> <div class="page-header"> <h1>Buttons <small>bootstrap-button.js</small></h1> </div> @@ -1152,53 +1126,83 @@ $('#my-alert').bind('closed', function () { <h4>Stateful</h4> <p>Add <code>data-loading-text="Loading..."</code> to use a loading state on a button.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" id="fat-btn" data-loading-text="loading..." class="btn btn-primary"> + <div class="bs-example" style="padding-bottom: 24px;"> + <button type="button" id="fat-btn" data-loading-text="Loading..." class="btn btn-primary"> Loading state </button> - </div> - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-loading-text="Loading...">Loading state</button></pre> + </div><!-- /example --> +{% highlight html %} +<button type="button" id="fat-btn" data-loading-text="Loading..." class="btn btn-primary"> + Loading state +</button> +{% endhighlight %} <h4>Single toggle</h4> <p>Add <code>data-toggle="button"</code> to activate toggling on a single button.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" class="btn btn-primary" data-toggle="button">Single Toggle</button> - </div> - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-toggle="button">Single Toggle</button></pre> + <div class="bs-example" style="padding-bottom: 24px;"> + <button type="button" class="btn btn-primary" data-toggle="button">Single toggle</button> + </div><!-- /example --> +{% highlight html %} +<button type="button" class="btn btn-primary" data-toggle="button">Single toggle</button> +{% endhighlight %} <h4>Checkbox</h4> <p>Add <code>data-toggle="buttons-checkbox"</code> for checkbox style toggling on btn-group.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> + <div class="bs-example" style="padding-bottom: 24px;"> <div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> + <label class="btn btn-primary"> + <input type="checkbox"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 3 + </label> </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> + </div><!-- /example --> +{% highlight html %} +<div class="btn-group" data-toggle="buttons-checkbox"> + <label class="btn btn-primary"> + <input type="checkbox"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="checkbox"> Option 3 + </label> +</div> +{% endhighlight %} <h4>Radio</h4> <p>Add <code>data-toggle="buttons-radio"</code> for radio style toggling on btn-group.</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> + <div class="bs-example" style="padding-bottom: 24px;"> <div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option1"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option2"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option3"> Option 3 + </label> </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> + </div><!-- /example --> +{% highlight html %} +<div class="btn-group" data-toggle="buttons-radio"> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option1"> Option 1 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option2"> Option 2 + </label> + <label class="btn btn-primary"> + <input type="radio" name="options" id="option3"> Option 3 + </label> +</div> +{% endhighlight %} <hr class="bs-docs-separator"> @@ -1206,7 +1210,9 @@ $('#my-alert').bind('closed', function () { <h2>Usage</h2> <p>Enable buttons via JavaScript:</p> - <pre class="prettyprint linenums">$('.nav-tabs').button()</pre> +{% highlight js %} +$('.nav-tabs').button() +{% endhighlight %} <h3>Markup</h3> <p>Data attributes are integral to the button plugin. Check out the example code below for the various markup types.</p> @@ -1215,31 +1221,41 @@ $('#my-alert').bind('closed', function () { <p><em>None</em></p> <h3>Methods</h3> + <h4>$().button('toggle')</h4> <p>Toggles push state. Gives the button the appearance that it has been activated.</p> - <div class="alert alert-info"> - <strong>Heads up!</strong> - You can enable auto toggling of a button by using the <code>data-toggle</code> attribute. + <div class="bs-callout"> + <h4>Auto toggling</h4> + <p>You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.</p> </div> - <pre class="prettyprint linenums"><button type="button" class="btn" data-toggle="button" >…</button></pre> +{% highlight html %} +<button type="button" class="btn" data-toggle="button">...</button> +{% endhighlight %} + <h4>$().button('loading')</h4> <p>Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>. </p> - <pre class="prettyprint linenums"><button type="button" class="btn" data-loading-text="loading stuff..." >...</button></pre> - <div class="alert alert-info"> - <strong>Heads up!</strong> - <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>. +{% highlight html %} +<button type="button" class="btn" data-loading-text="loading stuff...">...</button> +{% endhighlight %} + + <div class="bs-callout"> + <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> + <h4>$().button('reset')</h4> <p>Resets button state - swaps text to original text.</p> + <h4>$().button(string)</h4> <p>Resets button state - swaps text to any data defined text state.</p> -<pre class="prettyprint linenums"><button type="button" class="btn" data-complete-text="finished!" >...</button> -<script> +{% highlight html %} +<button type="button" class="btn" data-complete-text="finished!" >...</button> +<script> $('.btn').button('complete') -</script> -</pre> - </section> +</script> +{% endhighlight %} + </div> @@ -1252,12 +1268,16 @@ $('#my-alert').bind('closed', function () { <h3>About</h3> <p>Get base styles and flexible support for collapsible components like accordions and navigation.</p> - <p class="muted"><strong>*</strong> Requires the Transitions plugin to be included.</p> + + <div class="bs-callout"> + <h4>Plugin dependency</h4> + <p>Collapse requires the <a href="#transitions">transitions plugin</a> to be included in your version of Bootstrap.</p> + </div> <h2>Example accordion</h2> <p>Using the collapse plugin, we built a simple accordion style widget:</p> - <div class="bs-docs-example"> + <div class="bs-example"> <div class="accordion" id="accordion2"> <div class="accordion-group"> <div class="accordion-heading"> @@ -1296,44 +1316,56 @@ $('#my-alert').bind('closed', function () { </div> </div> </div> - </div> -<pre class="prettyprint linenums"> -<div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> + </div><!-- /example --> +{% highlight html %} +<div class="accordion" id="accordion2"> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> Collapsible Group Item #1 - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> + </a> + </div> + <div id="collapseOne" class="accordion-body collapse in"> + <div class="accordion-inner"> + ... + </div> + </div> + </div> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> Collapsible Group Item #2 - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> -</div> -... -</pre> + </a> + </div> + <div id="collapseTwo" class="accordion-body collapse"> + <div class="accordion-inner"> + ... + </div> + </div> + </div> + <div class="accordion-group"> + <div class="accordion-heading"> + <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> + Collapsible Group Item #3 + </a> + </div> + <div id="collapseThree" class="accordion-body collapse"> + <div class="accordion-inner"> + ... + </div> + </div> + </div> +</div> +{% endhighlight %} + <p>You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.</p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo"> +{% highlight html %} +<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo"> simple collapsible -</button> +</button> -<div id="demo" class="collapse in"> … </div> -</pre> +<div id="demo" class="collapse in">...</div> +{% endhighlight %} <hr class="bs-docs-separator"> @@ -1347,7 +1379,9 @@ $('#my-alert').bind('closed', function () { <h3>Via JavaScript</h3> <p>Enable manually with:</p> - <pre class="prettyprint linenums">$(".collapse").collapse()</pre> +{% highlight js %} +$(".collapse").collapse() +{% endhighlight %} <h3>Options</h3> <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-parent=""</code>.</p> @@ -1378,17 +1412,21 @@ $('#my-alert').bind('closed', function () { <h3>Methods</h3> + <h4>.collapse(options)</h4> <p>Activates your content as a collapsible element. Accepts an optional options <code>object</code>. -<pre class="prettyprint linenums"> +{% highlight js %} $('#myCollapsible').collapse({ toggle: false }) -</pre> +{% endhighlight %} + <h4>.collapse('toggle')</h4> <p>Toggles a collapsible element to shown or hidden.</p> + <h4>.collapse('show')</h4> <p>Shows a collapsible element.</p> + <h4>.collapse('hide')</h4> <p>Hides a collapsible element.</p> @@ -1397,7 +1435,7 @@ $('#myCollapsible').collapse({ <table class="table table-bordered table-striped"> <thead> <tr> - <th style="width: 150px;">Event</th> + <th style="width: 150px;">Event Type</th> <th>Description</th> </tr> </thead> @@ -1422,10 +1460,11 @@ $('#myCollapsible').collapse({ </tr> </tbody> </table> -<pre class="prettyprint linenums"> -$('#myCollapsible').on('hidden', function () { +{% highlight js %} +$('#myCollapsible').on('hidden.bs.collapse', function () { // do something… -})</pre> +}) +{% endhighlight %} </section> @@ -1437,65 +1476,118 @@ $('#myCollapsible').on('hidden', function () { <h1>Carousel <small>bootstrap-carousel.js</small></h1> </div> - <h2>Example carousel</h2> + <h2>Examples</h2> <p>The slideshow below shows a generic plugin and component for cycling through elements like a carousel.</p> - <div class="bs-docs-example"> - <div id="myCarousel" class="carousel slide"> + <div class="bs-example"> + <div id="carousel-example-generic" class="carousel slide bs-docs-carousel-example"> + <ol class="carousel-indicators"> + <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> + <li data-target="#carousel-example-generic" data-slide-to="1"></li> + <li data-target="#carousel-example-generic" data-slide-to="2"></li> + </ol> + <div class="carousel-inner"> + <div class="item active"> + <img data-src="holder.js/900x500/auto/#777:#fff/text:First slide" alt=""> + </div> + <div class="item"> + <img data-src="holder.js/900x500/auto/#777:#fff/text:Second slide" alt=""> + </div> + <div class="item"> + <img data-src="holder.js/900x500/auto/#777:#fff/text:Third slide" alt=""> + </div> + </div> + <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + </a> + <a class="right carousel-control" href="#carousel-example-generic" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + </a> + </div> + </div><!-- /example --> +{% highlight html %} +<div id="carousel-example-generic" class="carousel slide"> + <!-- Indicators --> + <ol class="carousel-indicators"> + <li data-target="#carousel-example-generic" data-slide-to="0" class="active"></li> + <li data-target="#carousel-example-generic" data-slide-to="1"></li> + <li data-target="#carousel-example-generic" data-slide-to="2"></li> + </ol> + + <!-- Wrapper for slides --> + <div class="carousel-inner"> + <div class="item active"> + <img src="..." alt=""> + <div class="carousel-caption"> + ... + </div> + </div> + ... + </div> + + <!-- Controls --> + <a class="left carousel-control" href="#carousel-example-generic" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + </a> + <a class="right carousel-control" href="#carousel-example-generic" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + </a> +</div> +{% endhighlight %} + + <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"> + <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> + <div class="bs-example"> + <div id="carousel-example-captions" class="carousel slide bs-docs-carousel-example"> <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> + <li data-target="#carousel-example-captions" data-slide-to="0" class="active"></li> + <li data-target="#carousel-example-captions" data-slide-to="1"></li> + <li data-target="#carousel-example-captions" data-slide-to="2"></li> </ol> <div class="carousel-inner"> <div class="item active"> - <img src="assets/img/bootstrap-mdo-sfmoma-01.jpg" alt=""> + <img data-src="holder.js/900x500/auto/#777:#777" alt=""> <div class="carousel-caption"> - <h4>First Thumbnail label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <h3>First slide label</h3> + <p>Nulla vitae elit libero, a pharetra augue mollis interdum.</p> </div> </div> <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-02.jpg" alt=""> + <img data-src="holder.js/900x500/auto/#777:#777" alt=""> <div class="carousel-caption"> - <h4>Second Thumbnail label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <h3>Second slide label</h3> + <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> </div> </div> <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-03.jpg" alt=""> + <img data-src="holder.js/900x500/auto/#777:#777" alt=""> <div class="carousel-caption"> - <h4>Third Thumbnail label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> + <h3>Third slide label</h3> + <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur.</p> </div> </div> </div> - <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> - <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> + <a class="left carousel-control" href="#carousel-example-captions" data-slide="prev"> + <span class="glyphicon glyphicon-chevron-left"></span> + </a> + <a class="right carousel-control" href="#carousel-example-captions" data-slide="next"> + <span class="glyphicon glyphicon-chevron-right"></span> + </a> </div> - </div> -<pre class="prettyprint linenums"> -<div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <!-- Carousel items --> - <div class="carousel-inner"> - <div class="active item">…</div> - <div class="item">…</div> - <div class="item">…</div> - </div> - <!-- Carousel nav --> - <a class="carousel-control left" href="#myCarousel" data-slide="prev">&lsaquo;</a> - <a class="carousel-control right" href="#myCarousel" data-slide="next">&rsaquo;</a> -</div> -</pre> - - <div class="alert alert-warning"> - <strong>Heads up!</strong> - When implementing this carousel, remove the images we have provided and replace them with your own. - </div> + </div><!-- /example --> +{% highlight html %} +<div class="item active"> + <img src="..." alt=""> + <div class="carousel-caption"> + <h3>...</h3> + <p>...</p> + </div> +</div> +{% endhighlight %} + <hr class="bs-docs-separator"> @@ -1504,14 +1596,16 @@ $('#myCollapsible').on('hidden', function () { <h2>Usage</h2> <h3>Via data attributes</h3> - <p>Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to it's current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to="2"</code>, which jump's the slide position to a particular index beginning with <code>0</code>.</p> + <p>Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to its current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to="2"</code>, which shifts the slide position to a particular index beginning with <code>0</code>.</p> <h3>Via JavaScript</h3> <p>Call carousel manually with:</p> - <pre class="prettyprint linenums">$('.carousel').carousel()</pre> +{% highlight js %} +$('.carousel').carousel() +{% endhighlight %} <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScriptz. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=""</code>.</p> + <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=""</code>.</p> <table class="table table-bordered table-striped"> <thead> <tr> @@ -1538,21 +1632,28 @@ $('#myCollapsible').on('hidden', function () { </table> <h3>Methods</h3> + <h4>.carousel(options)</h4> <p>Initializes the carousel with an optional options <code>object</code> and starts cycling through items.</p> -<pre class="prettyprint linenums"> +{% highlight html %} $('.carousel').carousel({ interval: 2000 }) -</pre> +{% endhighlight %} + <h4>.carousel('cycle')</h4> <p>Cycles through the carousel items from left to right.</p> + <h4>.carousel('pause')</h4> <p>Stops the carousel from cycling through items.</p> + + <h4>.carousel(number)</h4> <p>Cycles the carousel to a particular frame (0 based, similar to an array).</p> + <h4>.carousel('prev')</h4> <p>Cycles to the previous item.</p> + <h4>.carousel('next')</h4> <p>Cycles to the next item.</p> @@ -1561,7 +1662,7 @@ $('.carousel').carousel({ <table class="table table-bordered table-striped"> <thead> <tr> - <th style="width: 150px;">Event</th> + <th style="width: 150px;">Event Type</th> <th>Description</th> </tr> </thead> @@ -1576,98 +1677,11 @@ $('.carousel').carousel({ </tr> </tbody> </table> - </section> - - - - <!-- Typeahead - ================================================== --> - <section id="typeahead"> - <div class="page-header"> - <h1>Typeahead <small>bootstrap-typeahead.js</small></h1> - </div> - - - <h2>Example</h2> - <p>A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <input type="text" class="span3" style="margin: 0 auto;" data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]'> - </div> - <pre class="prettyprint linenums"><input type="text" data-provide="typeahead"></pre> - <p>You'll want to set <code>autocomplete="off"</code> to prevent default browser menus from appearing over the Bootstrap typeahead dropdown.</p> - - <hr class="bs-docs-separator"> - - - <h2>Usage</h2> - - <h3>Via data attributes</h3> - <p>Add data attributes to register an element with typeahead functionality as shown in the example above.</p> - - <h3>Via JavaScript</h3> - <p>Call the typeahead manually with:</p> - <pre class="prettyprint linenums">$('.typeahead').typeahead()</pre> - - <h3>Options</h3> - <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-source=""</code>.</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">Name</th> - <th style="width: 50px;">type</th> - <th style="width: 100px;">default</th> - <th>description</th> - </tr> - </thead> - <tbody> - <tr> - <td>source</td> - <td>array, function</td> - <td>[ ]</td> - <td>The data source to query against. May be an array of strings or a function. The function is passed two arguments, the <code>query</code> value in the input field and the <code>process</code> callback. The function may be used synchronously by returning the data source directly or asynchronously via the <code>process</code> callback's single argument.</td> - </tr> - <tr> - <td>items</td> - <td>number</td> - <td>8</td> - <td>The max number of items to display in the dropdown.</td> - </tr> - <tr> - <td>minLength</td> - <td>number</td> - <td>1</td> - <td>The minimum character length needed before triggering autocomplete suggestions</td> - </tr> - <tr> - <td>matcher</td> - <td>function</td> - <td>case insensitive</td> - <td>The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.</td> - </tr> - <tr> - <td>sorter</td> - <td>function</td> - <td>exact match,<br> case sensitive,<br> case insensitive</td> - <td>Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.</td> - </tr> - <tr> - <td>updater</td> - <td>function</td> - <td>returns selected item</td> - <td>The method used to return selected item. Accepts a single argument, the <code>item</code> and has the scope of the typeahead instance.</td> - </tr> - <tr> - <td>highlighter</td> - <td>function</td> - <td>highlights all default matches</td> - <td>Method used to highlight autocomplete results. Accepts a single argument <code>item</code> and has the scope of the typeahead instance. Should return html.</td> - </tr> - </tbody> - </table> - - <h3>Methods</h3> - <h4>.typeahead(options)</h4> - <p>Initializes an input with a typeahead.</p> + {% highlight js %} +$('#myCarousel').on('slide.bs.carousel', function () { + // do something… +}) +{% endhighlight %} </section> @@ -1689,19 +1703,33 @@ $('.carousel').carousel({ <h3>Via data attributes</h3> <p>To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.</p> - <pre class="prettyprint linenums"><div data-spy="affix" data-offset-top="200">...</div></pre> +{% highlight html %} +<div data-spy="affix" data-offset-top="200">...</div> +{% endhighlight %} - <div class="alert alert-info"> - <strong>Heads up!</strong> - 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. + <div class="bs-callout"> + <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> <h3>Via JavaScript</h3> <p>Call the affix plugin via JavaScript:</p> - <pre class="prettyprint linenums">$('#navbar').affix()</pre> +{% highlight js %} +$('#navbar').affix() +{% endhighlight %} + + <h3>Methods</h3> + <h4>.affix('refresh')</h4> + <p>When using affix in conjunction with adding or removing of elements from the DOM, you'll want to call the refresh method:</p> +{% highlight js %} +$('[data-spy="affix"]').each(function () { + $(this).affix('refresh') +}); +{% endhighlight %} <h3>Options</h3> <p>Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.</p> + <table class="table table-bordered table-striped"> <thead> <tr> @@ -1721,60 +1749,3 @@ $('.carousel').carousel({ </tbody> </table> </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/docs/scaffolding.html b/docs/scaffolding.html deleted file mode 100644 index 87a9bb003157bb3f54f85897790f45da318ca026..0000000000000000000000000000000000000000 --- a/docs/scaffolding.html +++ /dev/null @@ -1,602 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Scaffolding · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class=""> - <a href="./index.html">Home</a> - </li> - <li class=""> - <a href="./getting-started.html">Get started</a> - </li> - <li class="active"> - <a href="./scaffolding.html">Scaffolding</a> - </li> - <li class=""> - <a href="./base-css.html">Base CSS</a> - </li> - <li class=""> - <a href="./components.html">Components</a> - </li> - <li class=""> - <a href="./javascript.html">JavaScript</a> - </li> - <li class=""> - <a href="./customize.html">Customize</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>Scaffolding</h1> - <p class="lead">Bootstrap is built on responsive 12-column grids, layouts, and components.</p> - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#global"><i class="icon-chevron-right"></i> Global styles</a></li> - <li><a href="#gridSystem"><i class="icon-chevron-right"></i> Grid system</a></li> - <li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> Fluid grid system</a></li> - <li><a href="#layouts"><i class="icon-chevron-right"></i> Layouts</a></li> - <li><a href="#responsive"><i class="icon-chevron-right"></i> Responsive design</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Global Bootstrap settings - ================================================== --> - <section id="global"> - <div class="page-header"> - <h1>Global settings</h1> - </div> - - <h3>Requires HTML5 doctype</h3> - <p>Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html lang="en"> - ... -</html> -</pre> - - <h3>Typography and links</h3> - <p>Bootstrap sets basic global display, typography, and link styles. Specifically, we:</p> - <ul> - <li>Remove <code>margin</code> on the body</li> - <li>Set <code>background-color: white;</code> on the <code>body</code></li> - <li>Use the <code>@baseFontFamily</code>, <code>@baseFontSize</code>, and <code>@baseLineHeight</code> attributes as our typographic base</li> - <li>Set the global link color via <code>@linkColor</code> and apply link underlines only on <code>:hover</code></li> - </ul> - <p>These styles can be found within <strong>scaffolding.less</strong>.</p> - - <h3>Reset via Normalize</h3> - <p>With Bootstrap 2, the old reset block has been dropped in favor of <a href="http://necolas.github.com/normalize.css/" target="_blank">Normalize.css</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a> that also powers the <a href="http://html5boilerplate.com" target="_blank">HTML5 Boilerplate</a>. While we use much of Normalize within our <strong>reset.less</strong>, we have removed some elements specifically for Bootstrap.</p> - - </section> - - - - - <!-- Grid system - ================================================== --> - <section id="gridSystem"> - <div class="page-header"> - <h1>Default grid system</h1> - </div> - - <h2>Live grid example</h2> - <p>The default Bootstrap grid system utilizes <strong>12 columns</strong>, making for a 940px wide container without <a href="./scaffolding.html#responsive">responsive features</a> enabled. With the responsive CSS file added, the grid adapts to be 724px and 1170px wide depending on your viewport. Below 767px viewports, the columns become fluid and stack vertically.</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row show-grid"> - <div class="span2">2</div> - <div class="span3">3</div> - <div class="span4">4</div> - </div> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span5">5</div> - </div> - <div class="row show-grid"> - <div class="span9">9</div> - </div> - </div> - - <h3>Basic grid HTML</h3> - <p>For a simple two column layout, create a <code>.row</code> and add the appropriate number of <code>.span*</code> columns. As this is a 12-column grid, each <code>.span*</code> spans a number of those 12 columns, and should always add up to 12 for each row (or the number of columns in the parent).</p> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - <p>Given this example, we have <code>.span4</code> and <code>.span8</code>, making for 12 total columns and a complete row.</p> - - <h2>Offsetting columns</h2> - <p>Move columns to the right using <code>.offset*</code> classes. Each class increases the left margin of a column by a whole column. For example, <code>.offset4</code> moves <code>.span4</code> over four columns.</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span3 offset1">3 offset 1</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span6 offset3">6 offset 3</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span3 offset2">...</div> -</div> -</pre> - - <h2>Nesting columns</h2> - <p>To nest your content with the default grid, add a new <code>.row</code> and set of <code>.span*</code> columns within an existing <code>.span*</code> column. Nested rows should include a set of columns that add up to the number of columns of its parent.</p> - <div class="row show-grid"> - <div class="span9"> - Level 1 column - <div class="row show-grid"> - <div class="span6"> - Level 2 - </div> - <div class="span3"> - Level 2 - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span9"> - Level 1 column - <div class="row"> - <div class="span6">Level 2</div> - <div class="span3">Level 2</div> - </div> - </div> -</div> -</pre> - </section> - - - - <!-- Fluid grid system - ================================================== --> - <section id="fluidGridSystem"> - <div class="page-header"> - <h1>Fluid grid system</h1> - </div> - - <h2>Live fluid grid example</h2> - <p>The fluid grid system uses percents instead of pixels for column widths. It has the same responsive capabilities as our fixed grid system, ensuring proper proportions for key screen resolutions and devices.</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4">4</div> - <div class="span4">4</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span8">8</div> - </div> - <div class="row-fluid show-grid"> - <div class="span6">6</div> - <div class="span6">6</div> - </div> - <div class="row-fluid show-grid"> - <div class="span12">12</div> - </div> - </div> - - <h3>Basic fluid grid HTML</h3> - <p>Make any row "fluid" by changing <code>.row</code> to <code>.row-fluid</code>. The column classes stay the exact same, making it easy to flip between fixed and fluid grids.</p> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - - <h2>Fluid offsetting</h2> - <p>Operates the same way as the fixed grid system offsetting: add <code>.offset*</code> to any column to offset by that many columns.</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4 offset4">4 offset 4</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span3 offset3">3 offset 3</div> - <div class="span3 offset3">3 offset 3</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span6 offset6">6 offset 6</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span4 offset2">...</div> -</div> -</pre> - - <h2>Fluid nesting</h2> - <p>Fluid grids utilize nesting differently: each nested level of columns should add up to 12 columns. This is because the fluid grid uses percentages, not pixels, for setting widths.</p> - <div class="row-fluid show-grid"> - <div class="span12"> - Fluid 12 - <div class="row-fluid show-grid"> - <div class="span6"> - Fluid 6 - <div class="row-fluid show-grid"> - <div class="span6"> - Fluid 6 - </div> - <div class="span6"> - Fluid 6 - </div> - </div> - </div> - <div class="span6"> - Fluid 6 - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span12"> - Fluid 12 - <div class="row-fluid"> - <div class="span6"> - Fluid 6 - <div class="row-fluid"> - <div class="span6">Fluid 6</div> - <div class="span6">Fluid 6</div> - </div> - </div> - <div class="span6">Fluid 6</div> - </div> - </div> -</div> -</pre> - - </section> - - - - - <!-- Layouts (Default and fluid) - ================================================== --> - <section id="layouts"> - <div class="page-header"> - <h1>Layouts</h1> - </div> - - <h2>Fixed layout</h2> - <p>Provides a common fixed-width (and optionally responsive) layout with only <code><div class="container"></code> required.</p> - <div class="mini-layout"> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<body> - <div class="container"> - ... - </div> -</body> -</pre> - - <h2>Fluid layout</h2> - <p>Create a fluid, two-column page with <code><div class="container-fluid"></code>—great for applications and docs.</p> - <div class="mini-layout fluid"> - <div class="mini-layout-sidebar"></div> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<div class="container-fluid"> - <div class="row-fluid"> - <div class="span2"> - <!--Sidebar content--> - </div> - <div class="span10"> - <!--Body content--> - </div> - </div> -</div> -</pre> - </section> - - - - - <!-- Responsive design - ================================================== --> - <section id="responsive"> - <div class="page-header"> - <h1>Responsive design</h1> - </div> - - <h2>Enabling responsive features</h2> - <p>Turn on responsive CSS in your project by including the proper meta tag and additional stylesheet within the <code><head></code> of your document. If you've compiled Bootstrap from the Customize page, you need only include the meta tag.</p> -<pre class="prettyprint linenums"> -<meta name="viewport" content="width=device-width, initial-scale=1.0"> -<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> -</pre> - <p><span class="label label-info">Heads up!</span> Bootstrap doesn't include responsive features by default at this time as not everything needs to be responsive. Instead of encouraging developers to remove this feature, we figure it best to enable it as needed.</p> - - <h2>About responsive Bootstrap</h2> - <img src="assets/img/responsive-illustrations.png" alt="Responsive devices" style="float: right; margin: 0 0 20px 20px;"> - <p>Media queries allow for custom CSS based on a number of conditions—ratios, widths, display type, etc—but usually focuses around <code>min-width</code> and <code>max-width</code>.</p> - <ul> - <li>Modify the width of column in our grid</li> - <li>Stack elements instead of float wherever necessary</li> - <li>Resize headings and text to be more appropriate for devices</li> - </ul> - <p>Use media queries responsibly and only as a start to your mobile audiences. For larger projects, do consider dedicated code bases and not layers of media queries.</p> - - <h2>Supported devices</h2> - <p>Bootstrap supports a handful of media queries in a single file to help make your projects more appropriate on different devices and screen resolutions. Here's what's included:</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Label</th> - <th>Layout width</th> - <th>Column width</th> - <th>Gutter width</th> - </tr> - </thead> - <tbody> - <tr> - <td>Large display</td> - <td>1200px and up</td> - <td>70px</td> - <td>30px</td> - </tr> - <tr> - <td>Default</td> - <td>980px and up</td> - <td>60px</td> - <td>20px</td> - </tr> - <tr> - <td>Portrait tablets</td> - <td>768px and above</td> - <td>42px</td> - <td>20px</td> - </tr> - <tr> - <td>Phones to tablets</td> - <td>767px and below</td> - <td class="muted" colspan="2">Fluid columns, no fixed widths</td> - </tr> - <tr> - <td>Phones</td> - <td>480px and below</td> - <td class="muted" colspan="2">Fluid columns, no fixed widths</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -/* Large desktop */ -@media (min-width: 1200px) { ... } - -/* Portrait tablet to landscape and desktop */ -@media (min-width: 768px) and (max-width: 979px) { ... } - -/* Landscape phone to portrait tablet */ -@media (max-width: 767px) { ... } - -/* Landscape phones and down */ -@media (max-width: 480px) { ... } -</pre> - - - <h2>Responsive utility classes</h2> - <p>For faster mobile-friendly development, use these utility classes for showing and hiding content by device. Below is a table of the available classes and their effect on a given media query layout (labeled by device). They can be found in <code>responsive.less</code>.</p> - <table class="table table-bordered table-striped responsive-utilities"> - <thead> - <tr> - <th>Class</th> - <th>Phones <small>767px and below</small></th> - <th>Tablets <small>979px to 768px</small></th> - <th>Desktops <small>Default</small></th> - </tr> - </thead> - <tbody> - <tr> - <th><code>.visible-phone</code></th> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - <td class="is-hidden">Hidden</td> - </tr> - <tr> - <th><code>.visible-tablet</code></th> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - </tr> - <tr> - <th><code>.visible-desktop</code></th> - <td class="is-hidden">Hidden</td> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - </tr> - <tr> - <th><code>.hidden-phone</code></th> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - <td class="is-visible">Visible</td> - </tr> - <tr> - <th><code>.hidden-tablet</code></th> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - <td class="is-visible">Visible</td> - </tr> - <tr> - <th><code>.hidden-desktop</code></th> - <td class="is-visible">Visible</td> - <td class="is-visible">Visible</td> - <td class="is-hidden">Hidden</td> - </tr> - </tbody> - </table> - - <h3>When to use</h3> - <p>Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities should not be used with tables, and as such are not supported.</p> - - <h3>Responsive utilities test case</h3> - <p>Resize your browser or load on different devices to test the above classes.</p> - <h4>Visible on...</h4> - <p>Green checkmarks indicate that class is visible in your current viewport.</p> - <ul class="responsive-utilities-test"> - <li>Phone<span class="visible-phone">✔ Phone</span></li> - <li>Tablet<span class="visible-tablet">✔ Tablet</span></li> - <li>Desktop<span class="visible-desktop">✔ Desktop</span></li> - </ul> - <h4>Hidden on...</h4> - <p>Here, green checkmarks indicate that class is hidden in your current viewport.</p> - <ul class="responsive-utilities-test hidden-on"> - <li>Phone<span class="hidden-phone">✔ Phone</span></li> - <li>Tablet<span class="hidden-tablet">✔ Tablet</span></li> - <li>Desktop<span class="hidden-desktop">✔ Desktop</span></li> - </ul> - - </section> - - - - </div> - </div> - - </div> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <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> - <p><a href="http://glyphicons.com">Glyphicons Free</a> licensed 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> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - - </body> -</html> diff --git a/docs/templates/layout.mustache b/docs/templates/layout.mustache deleted file mode 100644 index 993b44620c2ab285b61ed32abe0ba0a69fdf1cae..0000000000000000000000000000000000000000 --- a/docs/templates/layout.mustache +++ /dev/null @@ -1,151 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>{{title}}</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="assets/css/bootstrap.css" rel="stylesheet"> - <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="assets/css/docs.css" rel="stylesheet"> - <link href="assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="assets/js/html5shiv.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="assets/ico/favicon.png"> - - {{#production}} - <script type="text/javascript"> - var _gaq = _gaq || []; - _gaq.push(['_setAccount', 'UA-146052-10']); - _gaq.push(['_trackPageview']); - (function() { - var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; - ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; - var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); - })(); - </script> - {{/production}} - </head> - - <body data-spy="scroll" data-target=".bs-docs-sidebar"> - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </button> - <a class="brand" href="./index.html">Bootstrap</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="{{index}}"> - <a href="./index.html">{{_i}}Home{{/i}}</a> - </li> - <li class="{{getting-started}}"> - <a href="./getting-started.html">{{_i}}Get started{{/i}}</a> - </li> - <li class="{{scaffolding}}"> - <a href="./scaffolding.html">{{_i}}Scaffolding{{/i}}</a> - </li> - <li class="{{base-css}}"> - <a href="./base-css.html">{{_i}}Base CSS{{/i}}</a> - </li> - <li class="{{components}}"> - <a href="./components.html">{{_i}}Components{{/i}}</a> - </li> - <li class="{{javascript}}"> - <a href="./javascript.html">{{_i}}JavaScript{{/i}}</a> - </li> - <li class="{{customize}}"> - <a href="./customize.html">{{_i}}Customize{{/i}}</a> - </li> - </ul> - </div> - </div> - </div> - </div> - -{{>body}} - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p>{{_i}}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>.{{/i}}</p> - <p>{{_i}}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>.{{/i}}</p> - <p>{{_i}}<a href="http://glyphicons.com">Glyphicons Free</a> licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.{{/i}}</p> - <ul class="footer-links"> - <li><a href="http://blog.getbootstrap.com">{{_i}}Blog{{/i}}</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">{{_i}}Issues{{/i}}</a></li> - <li class="muted">·</li> - <li><a href="https://github.com/twitter/bootstrap/blob/master/CHANGELOG.md">{{_i}}Changelog{{/i}}</a></li> - </ul> - </div> - </footer> - - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="assets/js/jquery.js"></script> - <script src="assets/js/bootstrap-transition.js"></script> - <script src="assets/js/bootstrap-alert.js"></script> - <script src="assets/js/bootstrap-modal.js"></script> - <script src="assets/js/bootstrap-dropdown.js"></script> - <script src="assets/js/bootstrap-scrollspy.js"></script> - <script src="assets/js/bootstrap-tab.js"></script> - <script src="assets/js/bootstrap-tooltip.js"></script> - <script src="assets/js/bootstrap-popover.js"></script> - <script src="assets/js/bootstrap-button.js"></script> - <script src="assets/js/bootstrap-collapse.js"></script> - <script src="assets/js/bootstrap-carousel.js"></script> - <script src="assets/js/bootstrap-typeahead.js"></script> - <script src="assets/js/bootstrap-affix.js"></script> - - <script src="assets/js/holder/holder.js"></script> - <script src="assets/js/google-code-prettify/prettify.js"></script> - - <script src="assets/js/application.js"></script> - - - {{#production}} - <!-- Analytics - ================================================== --> - <script> - var _gauges = _gauges || []; - (function() { - var t = document.createElement('script'); - t.type = 'text/javascript'; - t.async = true; - t.id = 'gauges-tracker'; - t.setAttribute('data-site-id', '4f0dc9fef5a1f55508000013'); - t.src = '//secure.gaug.es/track.js'; - var s = document.getElementsByTagName('script')[0]; - s.parentNode.insertBefore(t, s); - })(); - </script> - {{/production}} - - </body> -</html> diff --git a/docs/templates/pages/base-css.mustache b/docs/templates/pages/base-css.mustache deleted file mode 100644 index 1f40f371104e644439a53af4e4dc182ad62e4d09..0000000000000000000000000000000000000000 --- a/docs/templates/pages/base-css.mustache +++ /dev/null @@ -1,2102 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Base CSS{{/i}}</h1> - <p class="lead">{{_i}}Fundamental HTML elements styled and enhanced with extensible classes.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#typography"><i class="icon-chevron-right"></i> {{_i}}Typography{{/i}}</a></li> - <li><a href="#code"><i class="icon-chevron-right"></i> {{_i}}Code{{/i}}</a></li> - <li><a href="#tables"><i class="icon-chevron-right"></i> {{_i}}Tables{{/i}}</a></li> - <li><a href="#forms"><i class="icon-chevron-right"></i> {{_i}}Forms{{/i}}</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> {{_i}}Buttons{{/i}}</a></li> - <li><a href="#images"><i class="icon-chevron-right"></i> {{_i}}Images{{/i}}</a></li> - <li><a href="#icons"><i class="icon-chevron-right"></i> {{_i}}Icons by Glyphicons{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Typography - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>{{_i}}Typography{{/i}}</h1> - </div> - - {{! Headings }} - <h2 id="headings">{{_i}}Headings{{/i}}</h2> - <p>{{_i}}All HTML headings, <code><h1></code> through <code><h6></code> are available.{{/i}}</p> - <div class="bs-docs-example"> - <h1>h1. {{_i}}Heading 1{{/i}}</h1> - <h2>h2. {{_i}}Heading 2{{/i}}</h2> - <h3>h3. {{_i}}Heading 3{{/i}}</h3> - <h4>h4. {{_i}}Heading 4{{/i}}</h4> - <h5>h5. {{_i}}Heading 5{{/i}}</h5> - <h6>h6. {{_i}}Heading 6{{/i}}</h6> - </div> - - {{! Body copy }} - <h2 id="body-copy">{{_i}}Body copy{{/i}}</h2> - <p>{{_i}}Bootstrap's global default <code>font-size</code> is <strong>14px</strong>, with a <code>line-height</code> of <strong>20px</strong>. This is applied to the <code><body></code> and all paragraphs. In addition, <code><p></code> (paragraphs) receive a bottom margin of half their line-height (10px by default).{{/i}}</p> - <div class="bs-docs-example"> - <p>Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam id dolor id nibh ultricies vehicula.</p> - <p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec ullamcorper nulla non metus auctor fringilla. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Maecenas sed diam eget risus varius blandit sit amet non magna. Donec id elit non mi porta gravida at eget metus. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.</p> - </div> - <pre class="prettyprint"><p>...</p></pre> - - {{! Body copy .lead }} - <h3>{{_i}}Lead body copy{{/i}}</h3> - <p>{{_i}}Make a paragraph stand out by adding <code>.lead</code>.{{/i}}</p> - <div class="bs-docs-example"> - <p class="lead">Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.</p> - </div> - <pre class="prettyprint"><p class="lead">...</p></pre> - - {{! Using LESS }} - <h3>{{_i}}Built with Less{{/i}}</h3> - <p>{{_i}}The typographic scale is based on two LESS variables in <strong>variables.less</strong>: <code>@baseFontSize</code> and <code>@baseLineHeight</code>. The first is the base font-size used throughout and the second is the base line-height. We use those variables and some simple math to create the margins, paddings, and line-heights of all our type and more. Customize them and Bootstrap adapts.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - {{! Emphasis }} - <h2 id="emphasis">{{_i}}Emphasis{{/i}}</h2> - <p>{{_i}}Make use of HTML's default emphasis tags with lightweight styles.{{/i}}</p> - - <h3><code><small></code></h3> - <p>{{_i}}For de-emphasizing inline or blocks of text, <small>use the small tag.</small>{{/i}}</p> - <div class="bs-docs-example"> - <p><small>This line of text is meant to be treated as fine print.</small></p> - </div> -<pre class="prettyprint"> -<p> - <small>This line of text is meant to be treated as fine print.</small> -</p> -</pre> - - <h3>{{_i}}Bold{{/i}}</h3> - <p>{{_i}}For emphasizing a snippet of text with a heavier font-weight.{{/i}}</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <strong>rendered as bold text</strong>.</p> - </div> - <pre class="prettyprint"><strong>rendered as bold text</strong></pre> - - <h3>{{_i}}Italics{{/i}}</h3> - <p>{{_i}}For emphasizing a snippet of text with italics.{{/i}}</p> - <div class="bs-docs-example"> - <p>The following snippet of text is <em>rendered as italicized text</em>.</p> - </div> - <pre class="prettyprint"><em>rendered as italicized text</em></pre> - - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}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.{{/i}}</p> - - <h3>{{_i}}Alignment classes{{/i}}</h3> - <p>{{_i}}Easily realign text to components with text alignment classes.{{/i}}</p> - <div class="bs-docs-example"> - <p class="text-left">Left aligned text.</p> - <p class="text-center">Center aligned text.</p> - <p class="text-right">Right aligned text.</p> - </div> -<pre class="prettyprint linenums"> -<p class="text-left">Left aligned text.</p> -<p class="text-center">Center aligned text.</p> -<p class="text-right">Right aligned text.</p> -</pre> - - <h3>{{_i}}Emphasis classes{{/i}}</h3> - <p>{{_i}}Convey meaning through color with a handful of emphasis utility classes.{{/i}}</p> - <div class="bs-docs-example"> - <p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> - <p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> - <p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> - <p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> - <p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> - </div> -<pre class="prettyprint linenums"> -<p class="muted">Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.</p> -<p class="text-warning">Etiam porta sem malesuada magna mollis euismod.</p> -<p class="text-error">Donec ullamcorper nulla non metus auctor fringilla.</p> -<p class="text-info">Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis.</p> -<p class="text-success">Duis mollis, est non commodo luctus, nisi erat porttitor ligula.</p> -</pre> - - - <hr class="bs-docs-separator"> - - - {{! Abbreviations }} - <h2 id="abbreviations">{{_i}}Abbreviations{{/i}}</h2> - <p>{{_i}}Stylized implementation of HTML's <code><abbr></code> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a <code>title</code> attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.{{/i}}</p> - - <h3><code><abbr></code></h3> - <p>{{_i}}For expanded text on long hover of an abbreviation, include the <code>title</code> attribute.{{/i}}</p> - <div class="bs-docs-example"> - <p>{{_i}}An abbreviation of the word attribute is <abbr title="attribute">attr</abbr>.{{/i}}</p> - </div> - <pre class="prettyprint"><abbr title="attribute">attr</abbr></pre> - - <h3><code><abbr class="initialism"></code></h3> - <p>{{_i}}Add <code>.initialism</code> to an abbreviation for a slightly smaller font-size.{{/i}}</p> - <div class="bs-docs-example"> - <p>{{_i}}<abbr title="HyperText Markup Language" class="initialism">HTML</abbr> is the best thing since sliced bread.{{/i}}</p> - </div> - <pre class="prettyprint"><abbr title="HyperText Markup Language" class="initialism">HTML</abbr></pre> - - - <hr class="bs-docs-separator"> - - - {{! Addresses }} - <h2 id="addresses">{{_i}}Addresses{{/i}}</h2> - <p>{{_i}}Present contact information for the nearest ancestor or the entire body of work.{{/i}}</p> - - <h3><code><address></code></h3> - <p>{{_i}}Preserve formatting by ending all lines with <code><br></code>.{{/i}}</p> - <div class="bs-docs-example"> - <address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 - </address> - <address> - <strong>{{_i}}Full Name{{/i}}</strong><br> - <a href="mailto:#">{{_i}}first.last@example.com{{/i}}</a> - </address> - </div> -<pre class="prettyprint linenums"> -<address> - <strong>Twitter, Inc.</strong><br> - 795 Folsom Ave, Suite 600<br> - San Francisco, CA 94107<br> - <abbr title="Phone">P:</abbr> (123) 456-7890 -</address> - -<address> - <strong>{{_i}}Full Name{{/i}}</strong><br> - <a href="mailto:#">{{_i}}first.last@example.com{{/i}}</a> -</address> -</pre> - - - <hr class="bs-docs-separator"> - - - {{! Blockquotes }} - <h2 id="blockquotes">{{_i}}Blockquotes{{/i}}</h2> - <p>{{_i}}For quoting blocks of content from another source within your document.{{/i}}</p> - - <h3>{{_i}}Default blockquote{{/i}}</h3> - <p>{{_i}}Wrap <code><blockquote></code> around any <abbr title="HyperText Markup Language">HTML</abbr> as the quote. For straight quotes we recommend a <code><p></code>.{{/i}}</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> -</blockquote> -</pre> - - <h3>{{_i}}Blockquote options{{/i}}</h3> - <p>{{_i}}Style and content changes for simple variations on a standard blockquote.{{/i}}</p> - - <h4>{{_i}}Naming a source{{/i}}</h4> - <p>{{_i}}Add <code><small></code> tag for identifying the source. Wrap the name of the source work in <code><cite></code>.{{/i}}</p> - <div class="bs-docs-example"> - <blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>{{_i}}Someone famous in <cite title="Source Title">Source Title</cite>{{/i}}</small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>{{_i}}Someone famous <cite title="Source Title">Source Title</cite>{{/i}}</small> -</blockquote> -</pre> - - <h4>{{_i}}Alternate displays{{/i}}</h4> - <p>{{_i}}Use <code>.pull-right</code> for a floated, right-aligned blockquote.{{/i}}</p> - <div class="bs-docs-example" style="overflow: hidden;"> - <blockquote class="pull-right"> - <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p> - <small>{{_i}}Someone famous in <cite title="Source Title">Source Title</cite>{{/i}}</small> - </blockquote> - </div> -<pre class="prettyprint linenums"> -<blockquote class="pull-right"> - ... -</blockquote> -</pre> - - - <hr class="bs-docs-separator"> - - - <!-- Lists --> - <h2 id="lists">{{_i}}Lists{{/i}}</h2> - - <h3>{{_i}}Unordered{{/i}}</h3> - <p>{{_i}}A list of items in which the order does <em>not</em> explicitly matter.{{/i}}</p> - <div class="bs-docs-example"> - <ul> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul> - <li>...</li> -</ul> -</pre> - - <h3>{{_i}}Ordered{{/i}}</h3> - <p>{{_i}}A list of items in which the order <em>does</em> explicitly matter.{{/i}}</p> - <div class="bs-docs-example"> - <ol> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit</li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ol> - </div> -<pre class="prettyprint linenums"> -<ol> - <li>...</li> -</ol> -</pre> - - <h3>{{_i}}Unstyled{{/i}}</h3> - <p>{{_i}}Remove the default <code>list-style</code> and left padding on list items (immediate children only).{{/i}}</p> - <div class="bs-docs-example"> - <ul class="unstyled"> - <li>Lorem ipsum dolor sit amet</li> - <li>Consectetur adipiscing elit</li> - <li>Integer molestie lorem at massa</li> - <li>Facilisis in pretium nisl aliquet</li> - <li>Nulla volutpat aliquam velit - <ul> - <li>Phasellus iaculis neque</li> - <li>Purus sodales ultricies</li> - <li>Vestibulum laoreet porttitor sem</li> - <li>Ac tristique libero volutpat at</li> - </ul> - </li> - <li>Faucibus porta lacus fringilla vel</li> - <li>Aenean sit amet erat nunc</li> - <li>Eget porttitor lorem</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="unstyled"> - <li>...</li> -</ul> -</pre> - - <h3>{{_i}}Inline{{/i}}</h3> - <p>{{_i}}Place all list items on a single line with <code>inline-block</code> and some light padding.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="inline"> - <li>Lorem ipsum</li> - <li>Phasellus iaculis</li> - <li>Nulla volutpat</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="inline"> - <li>...</li> -</ul> -</pre> - - <h3>{{_i}}Description{{/i}}</h3> - <p>{{_i}}A list of terms with their associated descriptions.{{/i}}</p> - <div class="bs-docs-example"> - <dl> - <dt>{{_i}}Description lists{{/i}}</dt> - <dd>{{_i}}A description list is perfect for defining terms.{{/i}}</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - - <h4>{{_i}}Horizontal description{{/i}}</h4> - <p>{{_i}}Make terms and descriptions in <code><dl></code> line up side-by-side.{{/i}}</p> - <div class="bs-docs-example"> - <dl class="dl-horizontal"> - <dt>{{_i}}Description lists{{/i}}</dt> - <dd>{{_i}}A description list is perfect for defining terms.{{/i}}</dd> - <dt>Euismod</dt> - <dd>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</dd> - <dd>Donec id elit non mi porta gravida at eget metus.</dd> - <dt>Malesuada porta</dt> - <dd>Etiam porta sem malesuada magna mollis euismod.</dd> - <dt>Felis euismod semper eget lacinia</dt> - <dd>Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</dd> - </dl> - </div> -<pre class="prettyprint linenums"> -<dl class="dl-horizontal"> - <dt>...</dt> - <dd>...</dd> -</dl> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> - {{_i}}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.{{/i}} - </p> - </section> - - - - <!-- Code - ================================================== --> - <section id="code"> - <div class="page-header"> - <h1>{{_i}}Code{{/i}}</h1> - </div> - - <h2>Inline</h2> - <p>Wrap inline snippets of code with <code><code></code>.</p> -<div class="bs-docs-example"> - For example, <code><section></code> should be wrapped as inline. -</div> -<pre class="prettyprint linenums"> -{{_i}}For example, <code>&lt;section&gt;</code> should be wrapped as inline.{{/i}} -</pre> - - <h2>Basic block</h2> - <p>{{_i}}Use <code><pre></code> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.{{/i}}</p> -<div class="bs-docs-example"> - <pre><p>{{_i}}Sample text here...{{/i}}</p></pre> -</div> -<pre class="prettyprint linenums" style="margin-bottom: 9px;"> -<pre> - &lt;p&gt;{{_i}}Sample text here...{{/i}}&lt;/p&gt; -</pre> -</pre> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}Be sure to keep code within <code><pre></code> tags as close to the left as possible; it will render all tabs.{{/i}}</p> - <p>{{_i}}You may optionally add the <code>.pre-scrollable</code> class which will set a max-height of 350px and provide a y-axis scrollbar.{{/i}}</p> - </section> - - - - <!-- Tables - ================================================== --> - <section id="tables"> - <div class="page-header"> - <h1>{{_i}}Tables{{/i}}</h1> - </div> - - <h2>{{_i}}Default styles{{/i}}</h2> - <p>{{_i}}For basic styling—light padding and only horizontal dividers—add the base class <code>.table</code> to any <code><table></code>.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<table class="table"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional classes{{/i}}</h2> - <p>{{_i}}Add any of the following classes to the <code>.table</code> base class.{{/i}}</p> - - <h3><code>{{_i}}.table-striped{{/i}}</code></h3> - <p>{{_i}}Adds zebra-striping to any table row within the <code><tbody></code> via the <code>:nth-child</code> CSS selector (not available in IE7-8).{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-striped"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td>Larry</td> - <td>the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-striped"> - … -</table> -</pre> - - <h3><code>{{_i}}.table-bordered{{/i}}</code></h3> - <p>{{_i}}Add borders and rounded corners to the table.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-bordered"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td rowspan="2">1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>Mark</td> - <td>Otto</td> - <td>@TwBootstrap</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<table class="table table-bordered"> - … -</table> -</pre> - - <h3><code>{{_i}}.table-hover{{/i}}</code></h3> - <p>{{_i}}Enable a hover state on table rows within a <code><tbody></code>.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-hover"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-hover"> - … -</table> -</pre> - - <h3><code>{{_i}}.table-condensed{{/i}}</code></h3> - <p>{{_i}}Makes tables more compact by cutting cell padding in half.{{/i}}</p> - <div class="bs-docs-example"> - <table class="table table-condensed"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}First Name{{/i}}</th> - <th>{{_i}}Last Name{{/i}}</th> - <th>{{_i}}Username{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>Mark</td> - <td>Otto</td> - <td>@mdo</td> - </tr> - <tr> - <td>2</td> - <td>Jacob</td> - <td>Thornton</td> - <td>@fat</td> - </tr> - <tr> - <td>3</td> - <td colspan="2">Larry the Bird</td> - <td>@twitter</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums" style="margin-bottom: 18px;"> -<table class="table table-condensed"> - … -</table> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional row classes{{/i}}</h2> - <p>{{_i}}Use contextual classes to color table rows.{{/i}}</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>{{_i}}Class{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code>.success</code> - </td> - <td>{{_i}}Indicates a successful or positive action.{{/i}}</td> - </tr> - <tr> - <td> - <code>.error</code> - </td> - <td>{{_i}}Indicates a dangerous or potentially negative action.{{/i}}</td> - </tr> - <tr> - <td> - <code>.warning</code> - </td> - <td>{{_i}}Indicates a warning that might need attention.{{/i}}</td> - </tr> - <tr> - <td> - <code>.info</code> - </td> - <td>{{_i}}Used as an alternative to the default styles.{{/i}}</td> - </tr> - </tbody> - </table> - <div class="bs-docs-example"> - <table class="table"> - <thead> - <tr> - <th>#</th> - <th>{{_i}}Product{{/i}}</th> - <th>{{_i}}Payment Taken{{/i}}</th> - <th>{{_i}}Status{{/i}}</th> - </tr> - </thead> - <tbody> - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> - <tr class="error"> - <td>2</td> - <td>TB - Monthly</td> - <td>02/04/2012</td> - <td>Declined</td> - </tr> - <tr class="warning"> - <td>3</td> - <td>TB - Monthly</td> - <td>03/04/2012</td> - <td>Pending</td> - </tr> - <tr class="info"> - <td>4</td> - <td>TB - Monthly</td> - <td>04/04/2012</td> - <td>Call in to confirm</td> - </tr> - </tbody> - </table> - </div>{{! /example }} -<pre class="prettyprint linenums"> -... - <tr class="success"> - <td>1</td> - <td>TB - Monthly</td> - <td>01/04/2012</td> - <td>Approved</td> - </tr> -... -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Supported table markup{{/i}}</h2> - <p>{{_i}}List of supported table HTML elements and how they should be used.{{/i}}</p> - <table class="table table-bordered table-striped"> - <colgroup> - <col class="span1"> - <col class="span7"> - </colgroup> - <thead> - <tr> - <th>{{_i}}Tag{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <code><table></code> - </td> - <td> - {{_i}}Wrapping element for displaying data in a tabular format{{/i}} - </td> - </tr> - <tr> - <td> - <code><thead></code> - </td> - <td> - {{_i}}Container element for table header rows (<code><tr></code>) to label table columns{{/i}} - </td> - </tr> - <tr> - <td> - <code><tbody></code> - </td> - <td> - {{_i}}Container element for table rows (<code><tr></code>) in the body of the table{{/i}} - </td> - </tr> - <tr> - <td> - <code><tr></code> - </td> - <td> - {{_i}}Container element for a set of table cells (<code><td></code> or <code><th></code>) that appears on a single row{{/i}} - </td> - </tr> - <tr> - <td> - <code><td></code> - </td> - <td> - {{_i}}Default table cell{{/i}} - </td> - </tr> - <tr> - <td> - <code><th></code> - </td> - <td> - {{_i}}Special table cell for column (or row, depending on scope and placement) labels{{/i}} - </td> - </tr> - <tr> - <td> - <code><caption></code> - </td> - <td> - {{_i}}Description or summary of what the table holds, especially useful for screen readers{{/i}} - </td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -<table> - <caption>...</caption> - <thead> - <tr> - <th>...</th> - <th>...</th> - </tr> - </thead> - <tbody> - <tr> - <td>...</td> - <td>...</td> - </tr> - </tbody> -</table> -</pre> - - </section> - - - - <!-- Forms - ================================================== --> - <section id="forms"> - <div class="page-header"> - <h1>{{_i}}Forms{{/i}}</h1> - </div> - - <h2>{{_i}}Default styles{{/i}}</h2> - <p>{{_i}}Individual form controls receive styling, but without any required base class on the <code><form></code> or large changes in markup. Results in stacked, left-aligned labels on top of form controls.{{/i}}</p> - <form class="bs-docs-example"> - <fieldset> - <legend>Legend</legend> - <label>{{_i}}Label name{{/i}}</label> - <input type="text" placeholder="{{_i}}Type something…{{/i}}"> - <span class="help-block">{{_i}}Example block-level help text here.{{/i}}</span> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Check me out{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> - </fieldset> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form> - <fieldset> - <legend>{{_i}}Legend{{/i}}</legend> - <label>{{_i}}Label name{{/i}}</label> - <input type="text" placeholder="{{_i}}Type something…{{/i}}"> - <span class="help-block">Example block-level help text here.</span> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Check me out{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> - </fieldset> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional layouts{{/i}}</h2> - <p>{{_i}}Included with Bootstrap are three optional form layouts for common use cases.{{/i}}</p> - - <h3>{{_i}}Search form{{/i}}</h3> - <p>{{_i}}Add <code>.form-search</code> to the form and <code>.search-query</code> to the <code><input></code> for an extra-rounded text input.{{/i}}</p> - <form class="bs-docs-example form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form class="form-search"> - <input type="text" class="input-medium search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> -</form> -</pre> - - <h3>{{_i}}Inline form{{/i}}</h3> - <p>{{_i}}Add <code>.form-inline</code> for left-aligned labels and inline-block controls for a compact layout.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input type="text" class="input-small" placeholder="{{_i}}Email{{/i}}"> - <input type="password" class="input-small" placeholder="{{_i}}Password{{/i}}"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form class="form-inline"> - <input type="text" class="input-small" placeholder="{{_i}}Email{{/i}}"> - <input type="password" class="input-small" placeholder="{{_i}}Password{{/i}}"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> -</form> -</pre> - - <h3>{{_i}}Horizontal form{{/i}}</h3> - <p>{{_i}}Right align labels and float them to the left to make them appear on the same line as controls. Requires the most markup changes from a default form:{{/i}}</p> - <ul> - <li>{{_i}}Add <code>.form-horizontal</code> to the form{{/i}}</li> - <li>{{_i}}Wrap labels and controls in <code>.control-group</code>{{/i}}</li> - <li>{{_i}}Add <code>.control-label</code> to the label{{/i}}</li> - <li>{{_i}}Wrap any associated controls in <code>.controls</code> for proper alignment{{/i}}</li> - </ul> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">{{_i}}Email{{/i}}</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="{{_i}}Email{{/i}}"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">{{_i}}Password{{/i}}</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="{{_i}}Password{{/i}}"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form class="form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputEmail">{{_i}}Email{{/i}}</label> - <div class="controls"> - <input type="text" id="inputEmail" placeholder="{{_i}}Email{{/i}}"> - </div> - </div> - <div class="control-group"> - <label class="control-label" for="inputPassword">{{_i}}Password{{/i}}</label> - <div class="controls"> - <input type="password" id="inputPassword" placeholder="{{_i}}Password{{/i}}"> - </div> - </div> - <div class="control-group"> - <div class="controls"> - <label class="checkbox"> - <input type="checkbox"> {{_i}}Remember me{{/i}} - </label> - <button type="submit" class="btn">{{_i}}Sign in{{/i}}</button> - </div> - </div> -</form> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Supported form controls{{/i}}</h2> - <p>{{_i}}Examples of standard form controls supported in an example form layout.{{/i}}</p> - - <h3>{{_i}}Inputs{{/i}}</h3> - <p>{{_i}}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.{{/i}}</p> - <p>{{_i}}Requires the use of a specified <code>type</code> at all times.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input type="text" placeholder="Text input"> - </form> -<pre class="prettyprint linenums"> -<input type="text" placeholder="Text input"> -</pre> - - <h3>{{_i}}Textarea{{/i}}</h3> - <p>{{_i}}Form control which supports multiple lines of text. Change <code>rows</code> attribute as necessary.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <textarea rows="3"></textarea> - </form> -<pre class="prettyprint linenums"> -<textarea rows="3"></textarea> -</pre> - - <h3>{{_i}}Checkboxes and radios{{/i}}</h3> - <p>{{_i}}Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.{{/i}}</p> - <h4>{{_i}}Default (stacked){{/i}}</h4> - <form class="bs-docs-example"> - <label class="checkbox"> - <input type="checkbox" value=""> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} - </label> - <br> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} - </label> - <label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - {{_i}}Option two can be something else and selecting it will deselect option one{{/i}} - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox"> - <input type="checkbox" value=""> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} -</label> - -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios1" value="option1" checked> - {{_i}}Option one is this and that—be sure to include why it's great{{/i}} -</label> -<label class="radio"> - <input type="radio" name="optionsRadios" id="optionsRadios2" value="option2"> - {{_i}}Option two can be something else and selecting it will deselect option one{{/i}} -</label> -</pre> - - <h4>{{_i}}Inline checkboxes{{/i}}</h4> - <p>{{_i}}Add the <code>.inline</code> class to a series of checkboxes or radios for controls appear on the same line.{{/i}}</p> - <form class="bs-docs-example"> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 - </label> - <label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 - </label> - </form> -<pre class="prettyprint linenums"> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox1" value="option1"> 1 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox2" value="option2"> 2 -</label> -<label class="checkbox inline"> - <input type="checkbox" id="inlineCheckbox3" value="option3"> 3 -</label> -</pre> - - <h3>{{_i}}Selects{{/i}}</h3> - <p>{{_i}}Use the default option or specify a <code>multiple="multiple"</code> to show multiple options at once.{{/i}}</p> - <form class="bs-docs-example"> - <select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <br> - <select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </form> -<pre class="prettyprint linenums"> -<select> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> - -<select multiple="multiple"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> -</select> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Extending form controls{{/i}}</h2> - <p>{{_i}}Adding on top of existing browser controls, Bootstrap includes other useful form components.{{/i}}</p> - - <h3>{{_i}}Prepended and appended inputs{{/i}}</h3> - <p>{{_i}}Add text or buttons before or after any text-based input. Do note that <code>select</code> elements are not supported here.{{/i}}</p> - - <h4>{{_i}}Default options{{/i}}</h4> - <p>{{_i}}Wrap an <code>.add-on</code> and an <code>input</code> with one of two classes to prepend or append text to an input.{{/i}}</p> - <form class="bs-docs-example"> - <div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="{{_i}}Username{{/i}}"> - </div> - <br> - <div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" type="text" placeholder="{{_i}}Username{{/i}}"> -</div> -<div class="input-append"> - <input class="span2" id="appendedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>{{_i}}Combined{{/i}}</h4> - <p>{{_i}}Use both classes and two instances of <code>.add-on</code> to prepend and append an input.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="appendedPrependedInput" type="text"> - <span class="add-on">.00</span> -</div> -</pre> - - <h4>{{_i}}Buttons instead of text{{/i}}</h4> - <p>{{_i}}Instead of a <code><span></code> with text, use a <code>.btn</code> to attach a button (or two) to an input.{{/i}}</p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButton" type="text"> - <button class="btn" type="button">Go!</button> -</div> -</pre> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedInputButtons" type="text"> - <button class="btn" type="button">Search</button> - <button class="btn" type="button">Options</button> -</div> -</pre> - - <h4>{{_i}}Button dropdowns{{/i}}</h4> - <p>{{_i}}{{/i}}</p> - <form class="bs-docs-example"> - <div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-append"> - <input class="span2" id="appendedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="prependedDropdownButton" type="text"> - </div><!-- /input-prepend --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="prependedDropdownButton" type="text"> -</div> -</pre> - - <form class="bs-docs-example"> - <div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /input-prepend input-append --> - </form> -<pre class="prettyprint linenums"> -<div class="input-prepend input-append"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> - <input class="span2" id="appendedPrependedDropdownButton" type="text"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - ... - </ul> - </div> -</div> -</pre> - - <h4>{{_i}}Segmented dropdown groups{{/i}}</h4> - <form class="bs-docs-example"> - <div class="input-prepend"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group"> - <button class="btn" tabindex="-1">Action</button> - <button class="btn dropdown-toggle" data-toggle="dropdown" tabindex="-1"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<form> - <div class="input-prepend"> - <div class="btn-group">...</div> - <input type="text"> - </div> - <div class="input-append"> - <input type="text"> - <div class="btn-group">...</div> - </div> -</form> -</pre> - - <h4>{{_i}}Search form{{/i}}</h4> - <form class="bs-docs-example form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - <input type="text" class="span2 search-query"> - </div> - </form>{{! /example }} -<pre class="prettyprint linenums"> -<form class="form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - </div> - <div class="input-prepend"> - <button type="submit" class="btn">{{_i}}Search{{/i}}</button> - <input type="text" class="span2 search-query"> - </div> -</form> -</pre> - - <h3>{{_i}}Control sizing{{/i}}</h3> - <p>{{_i}}Use relative sizing classes like <code>.input-large</code> or match your inputs to the grid column sizes using <code>.span*</code> classes.{{/i}}</p> - - <h4>{{_i}}Block level inputs{{/i}}</h4> - <p>{{_i}}Make any <code><input></code> or <code><textarea></code> element behave like a block level element.{{/i}}</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="input-block-level" type="text" placeholder=".input-block-level"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-block-level" type="text" placeholder=".input-block-level"> -</pre> - - <h4>{{_i}}Relative sizing{{/i}}</h4> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="input-mini" type="text" placeholder=".input-mini"> - <input class="input-small" type="text" placeholder=".input-small"> - <input class="input-medium" type="text" placeholder=".input-medium"> - <input class="input-large" type="text" placeholder=".input-large"> - <input class="input-xlarge" type="text" placeholder=".input-xlarge"> - <input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="input-mini" type="text" placeholder=".input-mini"> -<input class="input-small" type="text" placeholder=".input-small"> -<input class="input-medium" type="text" placeholder=".input-medium"> -<input class="input-large" type="text" placeholder=".input-large"> -<input class="input-xlarge" type="text" placeholder=".input-xlarge"> -<input class="input-xxlarge" type="text" placeholder=".input-xxlarge"> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> In future versions, we'll be altering the use of these relative input classes to match our button sizes. For example, <code>.input-large</code> will increase the padding and font-size of an input. - </p> - - <h4>{{_i}}Grid sizing{{/i}}</h4> - <p>{{_i}}Use <code>.span1</code> to <code>.span12</code> for inputs that match the same sizes of the grid columns.{{/i}}</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls docs-input-sizes"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - <select class="span1"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span2"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - <select class="span3"> - <option>1</option> - <option>2</option> - <option>3</option> - <option>4</option> - <option>5</option> - </select> - </div> - </form> -<pre class="prettyprint linenums"> -<input class="span1" type="text" placeholder=".span1"> -<input class="span2" type="text" placeholder=".span2"> -<input class="span3" type="text" placeholder=".span3"> -<select class="span1"> - ... -</select> -<select class="span2"> - ... -</select> -<select class="span3"> - ... -</select> -</pre> - - <p>{{_i}}For multiple grid inputs per line, <strong>use the <code>.controls-row</code> modifier class for proper spacing</strong>. It floats the inputs to collapse white-space, sets the proper margins, and clears the float.{{/i}}</p> - <form class="bs-docs-example" style="padding-bottom: 15px;"> - <div class="controls"> - <input class="span5" type="text" placeholder=".span5"> - </div> - <div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> - </div> - <div class="controls controls-row"> - <input class="span3" type="text" placeholder=".span3"> - <input class="span2" type="text" placeholder=".span2"> - </div> - <div class="controls controls-row"> - <input class="span2" type="text" placeholder=".span2"> - <input class="span3" type="text" placeholder=".span3"> - </div> - <div class="controls controls-row"> - <input class="span1" type="text" placeholder=".span1"> - <input class="span4" type="text" placeholder=".span4"> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="controls"> - <input class="span5" type="text" placeholder=".span5"> -</div> -<div class="controls controls-row"> - <input class="span4" type="text" placeholder=".span4"> - <input class="span1" type="text" placeholder=".span1"> -</div> -... -</pre> - - <h3>{{_i}}Uneditable inputs{{/i}}</h3> - <p>{{_i}}Present data in a form that's not editable without using actual form markup.{{/i}}</p> - <form class="bs-docs-example"> - <span class="input-xlarge uneditable-input">Some value here</span> - </form> -<pre class="prettyprint linenums"> -<span class="input-xlarge uneditable-input">Some value here</span> -</pre> - - <h3>{{_i}}Form actions{{/i}}</h3> - <p>{{_i}}End a form with a group of actions (buttons). When placed within a <code>.form-actions</code>, the buttons will automatically indent to line up with the form controls.{{/i}}</p> - <form class="bs-docs-example"> - <div class="form-actions"> - <button type="submit" class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - <button type="button" class="btn">{{_i}}Cancel{{/i}}</button> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="form-actions"> - <button type="submit" class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - <button type="button" class="btn">{{_i}}Cancel{{/i}}</button> -</div> -</pre> - - <h3>{{_i}}Help text{{/i}}</h3> - <p>{{_i}}Inline and block level support for help text that appears around form controls.{{/i}}</p> - <h4>{{_i}}Inline help{{/i}}</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> <span class="help-inline">Inline help text</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-inline">Inline help text</span> -</pre> - - <h4>{{_i}}Block help{{/i}}</h4> - <form class="bs-docs-example form-inline"> - <input type="text"> - <span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> - </form> -<pre class="prettyprint linenums"> -<input type="text"><span class="help-block">A longer block of help text that breaks onto a new line and may extend beyond one line.</span> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Form control states{{/i}}</h2> - <p>{{_i}}Provide feedback to users or visitors with basic feedback states on form controls and labels.{{/i}}</p> - - <h3>{{_i}}Input focus{{/i}}</h3> - <p>{{_i}}We remove the default <code>outline</code> styles on some form controls and apply a <code>box-shadow</code> in its place for <code>:focus</code>.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge focused" id="focusedInput" type="text" value="{{_i}}This is focused...{{/i}}"> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="focusedInput" type="text" value="{{_i}}This is focused...{{/i}}"> -</pre> - - <h3>{{_i}}Invalid inputs{{/i}}</h3> - <p>{{_i}}Style inputs via default browser functionality with <code>:invalid</code>. Specify a <code>type</code>, add the <code>required</code> attribute if the field is not optional, and (if applicable) specify a <code>pattern</code>.{{/i}}</p> - <p>{{_i}}This is not available in versions of Internet Explorer 7-9 due to lack of support for CSS pseudo selectors.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input class="span3" type="email" placeholder="test@example.com" required> - </form> -<pre class="prettyprint linenums"> -<input class="span3" type="email" required> -</pre> - - <h3>{{_i}}Disabled inputs{{/i}}</h3> - <p>{{_i}}Add the <code>disabled</code> attribute on an input to prevent user input and trigger a slightly different look.{{/i}}</p> - <form class="bs-docs-example form-inline"> - <input class="input-xlarge" id="disabledInput" type="text" placeholder="{{_i}}Disabled input here…{{/i}}" disabled> - </form> -<pre class="prettyprint linenums"> -<input class="input-xlarge" id="disabledInput" type="text" placeholder="{{_i}}Disabled input here...{{/i}}" disabled> -</pre> - - <h3>{{_i}}Validation states{{/i}}</h3> - <p>{{_i}}Bootstrap includes validation styles for error, warning, info, and success messages. To use, add the appropriate class to the surrounding <code>.control-group</code>.{{/i}}</p> - - <form class="bs-docs-example form-horizontal"> - <div class="control-group warning"> - <label class="control-label" for="inputWarning">{{_i}}Input with warning{{/i}}</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">{{_i}}Something may have gone wrong{{/i}}</span> - </div> - </div> - <div class="control-group error"> - <label class="control-label" for="inputError">{{_i}}Input with error{{/i}}</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">{{_i}}Please correct the error{{/i}}</span> - </div> - </div> - <div class="control-group info"> - <label class="control-label" for="inputInfo">{{_i}}Input with info{{/i}}</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">{{_i}}Username is taken{{/i}}</span> - </div> - </div> - <div class="control-group success"> - <label class="control-label" for="inputSuccess">{{_i}}Input with success{{/i}}</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">{{_i}}Woohoo!{{/i}}</span> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group warning"> - <label class="control-label" for="inputWarning">{{_i}}Input with warning{{/i}}</label> - <div class="controls"> - <input type="text" id="inputWarning"> - <span class="help-inline">{{_i}}Something may have gone wrong{{/i}}</span> - </div> -</div> - -<div class="control-group error"> - <label class="control-label" for="inputError">{{_i}}Input with error{{/i}}</label> - <div class="controls"> - <input type="text" id="inputError"> - <span class="help-inline">{{_i}}Please correct the error{{/i}}</span> - </div> -</div> - -<div class="control-group info"> - <label class="control-label" for="inputInfo">{{_i}}Input with info{{/i}}</label> - <div class="controls"> - <input type="text" id="inputInfo"> - <span class="help-inline">{{_i}}Username is already taken{{/i}}</span> - </div> -</div> - -<div class="control-group success"> - <label class="control-label" for="inputSuccess">{{_i}}Input with success{{/i}}</label> - <div class="controls"> - <input type="text" id="inputSuccess"> - <span class="help-inline">{{_i}}Woohoo!{{/i}}</span> - </div> -</div> -</pre> - - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>{{_i}}Buttons{{/i}}</h1> - </div> - - <h2>Default buttons</h2> - <p>{{_i}}Button styles can be applied to anything with the <code>.btn</code> class applied. However, typically you'll want to apply these to only <code><a></code> and <code><button></code> elements for the best rendering.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Button{{/i}}</th> - <th>{{_i}}class=""{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td><button type="button" class="btn">{{_i}}Default{{/i}}</button></td> - <td><code>btn</code></td> - <td>{{_i}}Standard gray button with gradient{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-primary">{{_i}}Primary{{/i}}</button></td> - <td><code>btn btn-primary</code></td> - <td>{{_i}}Provides extra visual weight and identifies the primary action in a set of buttons{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-info">{{_i}}Info{{/i}}</button></td> - <td><code>btn btn-info</code></td> - <td>{{_i}}Used as an alternative to the default styles{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-success">{{_i}}Success{{/i}}</button></td> - <td><code>btn btn-success</code></td> - <td>{{_i}}Indicates a successful or positive action{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-warning">{{_i}}Warning{{/i}}</button></td> - <td><code>btn btn-warning</code></td> - <td>{{_i}}Indicates caution should be taken with this action{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-danger">{{_i}}Danger{{/i}}</button></td> - <td><code>btn btn-danger</code></td> - <td>{{_i}}Indicates a dangerous or potentially negative action{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-inverse">{{_i}}Inverse{{/i}}</button></td> - <td><code>btn btn-inverse</code></td> - <td>{{_i}}Alternate dark gray button, not tied to a semantic action or use{{/i}}</td> - </tr> - <tr> - <td><button type="button" class="btn btn-link">{{_i}}Link{{/i}}</button></td> - <td><code>btn btn-link</code></td> - <td>{{_i}}Deemphasize a button by making it look like a link while maintaining button behavior{{/i}}</td> - </tr> - </tbody> - </table> - - <h4>{{_i}}Cross browser compatibility{{/i}}</h4> - <p>{{_i}}IE9 doesn't crop background gradients on rounded corners, so we remove it. Related, IE9 jankifies disabled <code>button</code> elements, rendering text gray with a nasty text-shadow that we cannot fix.{{/i}}</p> - - - <h2>{{_i}}Button sizes{{/i}}</h2> - <p>{{_i}}Fancy larger or smaller buttons? Add <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code> for additional sizes.{{/i}}</p> - <div class="bs-docs-example"> - <p> - <button type="button" class="btn btn-large btn-primary">{{_i}}Large button{{/i}}</button> - <button type="button" class="btn btn-large">{{_i}}Large button{{/i}}</button> - </p> - <p> - <button type="button" class="btn btn-primary">{{_i}}Default button{{/i}}</button> - <button type="button" class="btn">{{_i}}Default button{{/i}}</button> - </p> - <p> - <button type="button" class="btn btn-small btn-primary">{{_i}}Small button{{/i}}</button> - <button type="button" class="btn btn-small">{{_i}}Small button{{/i}}</button> - </p> - <p> - <button type="button" class="btn btn-mini btn-primary">{{_i}}Mini button{{/i}}</button> - <button type="button" class="btn btn-mini">{{_i}}Mini button{{/i}}</button> - </p> - </div> -<pre class="prettyprint linenums"> -<p> - <button class="btn btn-large btn-primary" type="button">{{_i}}Large button{{/i}}</button> - <button class="btn btn-large" type="button">{{_i}}Large button{{/i}}</button> -</p> -<p> - <button class="btn btn-primary" type="button">{{_i}}Default button{{/i}}</button> - <button class="btn" type="button">{{_i}}Default button{{/i}}</button> -</p> -<p> - <button class="btn btn-small btn-primary" type="button">{{_i}}Small button{{/i}}</button> - <button class="btn btn-small" type="button">{{_i}}Small button{{/i}}</button> -</p> -<p> - <button class="btn btn-mini btn-primary" type="button">{{_i}}Mini button{{/i}}</button> - <button class="btn btn-mini" type="button">{{_i}}Mini button{{/i}}</button> -</p> -</pre> - <p>{{_i}}Create block level buttons—those that span the full width of a parent— by adding <code>.btn-block</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 400px; margin: 0 auto 10px;"> - <button type="button" class="btn btn-large btn-block btn-primary">{{_i}}Block level button{{/i}}</button> - <button type="button" class="btn btn-large btn-block">{{_i}}Block level button{{/i}}</button> - </div> - </div> -<pre class="prettyprint linenums"> -<button class="btn btn-large btn-block btn-primary" type="button">{{_i}}Block level button{{/i}}</button> -<button class="btn btn-large btn-block" type="button">{{_i}}Block level button{{/i}}</button> -</pre> - - - <h2>{{_i}}Disabled state{{/i}}</h2> - <p>{{_i}}Make buttons look unclickable by fading them back 50%.{{/i}}</p> - - <h3>Anchor element</h3> - <p>{{_i}}Add the <code>.disabled</code> class to <code><a></code> buttons.{{/i}}</p> - <p class="bs-docs-example"> - <a href="#" class="btn btn-large btn-primary disabled">{{_i}}Primary link{{/i}}</a> - <a href="#" class="btn btn-large disabled">{{_i}}Link{{/i}}</a> - </p> -<pre class="prettyprint linenums"> -<a href="#" class="btn btn-large btn-primary disabled">{{_i}}Primary link{{/i}}</a> -<a href="#" class="btn btn-large disabled">{{_i}}Link{{/i}}</a> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> - {{_i}}We use <code>.disabled</code> as a utility class here, similar to the common <code>.active</code> class, so no prefix is required. Also, this class is only for aesthetic; you must use custom JavaScript to disable links here.{{/i}} - </p> - - <h3>Button element</h3> - <p>{{_i}}Add the <code>disabled</code> attribute to <code><button></code> buttons.{{/i}}</p> - <p class="bs-docs-example"> - <button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">{{_i}}Primary button{{/i}}</button> - <button type="button" class="btn btn-large" disabled>{{_i}}Button{{/i}}</button> - </p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">{{_i}}Primary button{{/i}}</button> -<button type="button" class="btn btn-large" disabled>{{_i}}Button{{/i}}</button> -</pre> - - - <h2>{{_i}}One class, multiple tags{{/i}}</h2> - <p>{{_i}}Use the <code>.btn</code> class on an <code><a></code>, <code><button></code>, or <code><input></code> element.{{/i}}</p> - <form class="bs-docs-example"> - <a class="btn" href="">{{_i}}Link{{/i}}</a> - <button class="btn" type="submit">{{_i}}Button{{/i}}</button> - <input class="btn" type="button" value="{{_i}}Input{{/i}}"> - <input class="btn" type="submit" value="{{_i}}Submit{{/i}}"> - </form> -<pre class="prettyprint linenums"> -<a class="btn" href="">{{_i}}Link{{/i}}</a> -<button class="btn" type="submit">{{_i}}Button{{/i}}</button> -<input class="btn" type="button" value="{{_i}}Input{{/i}}"> -<input class="btn" type="submit" value="{{_i}}Submit{{/i}}"> -</pre> - <p>{{_i}}As a best practice, try to match the element for your context to ensure matching cross-browser rendering. If you have an <code>input</code>, use an <code><input type="submit"></code> for your button.{{/i}}</p> - - </section> - - - - <!-- Images - ================================================== --> - <section id="images"> - <div class="page-header"> - <h1>{{_i}}Images{{/i}}</h1> - </div> - - <p>{{_i}}Add classes to an <code><img></code> element to easily style images in any project.{{/i}}</p> - <div class="bs-docs-example bs-docs-example-images"> - <img data-src="holder.js/140x140" class="img-rounded"> - <img data-src="holder.js/140x140" class="img-circle"> - <img data-src="holder.js/140x140" class="img-polaroid"> - </div> -<pre class="prettyprint linenums"> -<img src="..." class="img-rounded"> -<img src="..." class="img-circle"> -<img src="..." class="img-polaroid"> -</pre> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}<code>.img-rounded</code> and <code>.img-circle</code> do not work in IE7-8 due to lack of <code>border-radius</code> support.{{/i}}</p> - - - </section> - - - - <!-- Icons - ================================================== --> - <section id="icons"> - <div class="page-header"> - <h1>{{_i}}Icons <small>by <a href="http://glyphicons.com" target="_blank">Glyphicons</a></small>{{/i}}</h1> - </div> - - <h2>{{_i}}Icon glyphs{{/i}}</h2> - <p>{{_i}}140 icons in sprite form, available in dark gray (default) and white, provided by <a href="http://glyphicons.com" target="_blank">Glyphicons</a>.{{/i}}</p> - <ul class="the-icons clearfix"> - <li><i class="icon-glass"></i> icon-glass</li> - <li><i class="icon-music"></i> icon-music</li> - <li><i class="icon-search"></i> icon-search</li> - <li><i class="icon-envelope"></i> icon-envelope</li> - <li><i class="icon-heart"></i> icon-heart</li> - <li><i class="icon-star"></i> icon-star</li> - <li><i class="icon-star-empty"></i> icon-star-empty</li> - <li><i class="icon-user"></i> icon-user</li> - <li><i class="icon-film"></i> icon-film</li> - <li><i class="icon-th-large"></i> icon-th-large</li> - <li><i class="icon-th"></i> icon-th</li> - <li><i class="icon-th-list"></i> icon-th-list</li> - <li><i class="icon-ok"></i> icon-ok</li> - <li><i class="icon-remove"></i> icon-remove</li> - <li><i class="icon-zoom-in"></i> icon-zoom-in</li> - <li><i class="icon-zoom-out"></i> icon-zoom-out</li> - <li><i class="icon-off"></i> icon-off</li> - <li><i class="icon-signal"></i> icon-signal</li> - <li><i class="icon-cog"></i> icon-cog</li> - <li><i class="icon-trash"></i> icon-trash</li> - <li><i class="icon-home"></i> icon-home</li> - <li><i class="icon-file"></i> icon-file</li> - <li><i class="icon-time"></i> icon-time</li> - <li><i class="icon-road"></i> icon-road</li> - <li><i class="icon-download-alt"></i> icon-download-alt</li> - <li><i class="icon-download"></i> icon-download</li> - <li><i class="icon-upload"></i> icon-upload</li> - <li><i class="icon-inbox"></i> icon-inbox</li> - - <li><i class="icon-play-circle"></i> icon-play-circle</li> - <li><i class="icon-repeat"></i> icon-repeat</li> - <li><i class="icon-refresh"></i> icon-refresh</li> - <li><i class="icon-list-alt"></i> icon-list-alt</li> - <li><i class="icon-lock"></i> icon-lock</li> - <li><i class="icon-flag"></i> icon-flag</li> - <li><i class="icon-headphones"></i> icon-headphones</li> - <li><i class="icon-volume-off"></i> icon-volume-off</li> - <li><i class="icon-volume-down"></i> icon-volume-down</li> - <li><i class="icon-volume-up"></i> icon-volume-up</li> - <li><i class="icon-qrcode"></i> icon-qrcode</li> - <li><i class="icon-barcode"></i> icon-barcode</li> - <li><i class="icon-tag"></i> icon-tag</li> - <li><i class="icon-tags"></i> icon-tags</li> - <li><i class="icon-book"></i> icon-book</li> - <li><i class="icon-bookmark"></i> icon-bookmark</li> - <li><i class="icon-print"></i> icon-print</li> - <li><i class="icon-camera"></i> icon-camera</li> - <li><i class="icon-font"></i> icon-font</li> - <li><i class="icon-bold"></i> icon-bold</li> - <li><i class="icon-italic"></i> icon-italic</li> - <li><i class="icon-text-height"></i> icon-text-height</li> - <li><i class="icon-text-width"></i> icon-text-width</li> - <li><i class="icon-align-left"></i> icon-align-left</li> - <li><i class="icon-align-center"></i> icon-align-center</li> - <li><i class="icon-align-right"></i> icon-align-right</li> - <li><i class="icon-align-justify"></i> icon-align-justify</li> - <li><i class="icon-list"></i> icon-list</li> - - <li><i class="icon-indent-left"></i> icon-indent-left</li> - <li><i class="icon-indent-right"></i> icon-indent-right</li> - <li><i class="icon-facetime-video"></i> icon-facetime-video</li> - <li><i class="icon-picture"></i> icon-picture</li> - <li><i class="icon-pencil"></i> icon-pencil</li> - <li><i class="icon-map-marker"></i> icon-map-marker</li> - <li><i class="icon-adjust"></i> icon-adjust</li> - <li><i class="icon-tint"></i> icon-tint</li> - <li><i class="icon-edit"></i> icon-edit</li> - <li><i class="icon-share"></i> icon-share</li> - <li><i class="icon-check"></i> icon-check</li> - <li><i class="icon-move"></i> icon-move</li> - <li><i class="icon-step-backward"></i> icon-step-backward</li> - <li><i class="icon-fast-backward"></i> icon-fast-backward</li> - <li><i class="icon-backward"></i> icon-backward</li> - <li><i class="icon-play"></i> icon-play</li> - <li><i class="icon-pause"></i> icon-pause</li> - <li><i class="icon-stop"></i> icon-stop</li> - <li><i class="icon-forward"></i> icon-forward</li> - <li><i class="icon-fast-forward"></i> icon-fast-forward</li> - <li><i class="icon-step-forward"></i> icon-step-forward</li> - <li><i class="icon-eject"></i> icon-eject</li> - <li><i class="icon-chevron-left"></i> icon-chevron-left</li> - <li><i class="icon-chevron-right"></i> icon-chevron-right</li> - <li><i class="icon-plus-sign"></i> icon-plus-sign</li> - <li><i class="icon-minus-sign"></i> icon-minus-sign</li> - <li><i class="icon-remove-sign"></i> icon-remove-sign</li> - <li><i class="icon-ok-sign"></i> icon-ok-sign</li> - - <li><i class="icon-question-sign"></i> icon-question-sign</li> - <li><i class="icon-info-sign"></i> icon-info-sign</li> - <li><i class="icon-screenshot"></i> icon-screenshot</li> - <li><i class="icon-remove-circle"></i> icon-remove-circle</li> - <li><i class="icon-ok-circle"></i> icon-ok-circle</li> - <li><i class="icon-ban-circle"></i> icon-ban-circle</li> - <li><i class="icon-arrow-left"></i> icon-arrow-left</li> - <li><i class="icon-arrow-right"></i> icon-arrow-right</li> - <li><i class="icon-arrow-up"></i> icon-arrow-up</li> - <li><i class="icon-arrow-down"></i> icon-arrow-down</li> - <li><i class="icon-share-alt"></i> icon-share-alt</li> - <li><i class="icon-resize-full"></i> icon-resize-full</li> - <li><i class="icon-resize-small"></i> icon-resize-small</li> - <li><i class="icon-plus"></i> icon-plus</li> - <li><i class="icon-minus"></i> icon-minus</li> - <li><i class="icon-asterisk"></i> icon-asterisk</li> - <li><i class="icon-exclamation-sign"></i> icon-exclamation-sign</li> - <li><i class="icon-gift"></i> icon-gift</li> - <li><i class="icon-leaf"></i> icon-leaf</li> - <li><i class="icon-fire"></i> icon-fire</li> - <li><i class="icon-eye-open"></i> icon-eye-open</li> - <li><i class="icon-eye-close"></i> icon-eye-close</li> - <li><i class="icon-warning-sign"></i> icon-warning-sign</li> - <li><i class="icon-plane"></i> icon-plane</li> - <li><i class="icon-calendar"></i> icon-calendar</li> - <li><i class="icon-random"></i> icon-random</li> - <li><i class="icon-comment"></i> icon-comment</li> - <li><i class="icon-magnet"></i> icon-magnet</li> - - <li><i class="icon-chevron-up"></i> icon-chevron-up</li> - <li><i class="icon-chevron-down"></i> icon-chevron-down</li> - <li><i class="icon-retweet"></i> icon-retweet</li> - <li><i class="icon-shopping-cart"></i> icon-shopping-cart</li> - <li><i class="icon-folder-close"></i> icon-folder-close</li> - <li><i class="icon-folder-open"></i> icon-folder-open</li> - <li><i class="icon-resize-vertical"></i> icon-resize-vertical</li> - <li><i class="icon-resize-horizontal"></i> icon-resize-horizontal</li> - <li><i class="icon-hdd"></i> icon-hdd</li> - <li><i class="icon-bullhorn"></i> icon-bullhorn</li> - <li><i class="icon-bell"></i> icon-bell</li> - <li><i class="icon-certificate"></i> icon-certificate</li> - <li><i class="icon-thumbs-up"></i> icon-thumbs-up</li> - <li><i class="icon-thumbs-down"></i> icon-thumbs-down</li> - <li><i class="icon-hand-right"></i> icon-hand-right</li> - <li><i class="icon-hand-left"></i> icon-hand-left</li> - <li><i class="icon-hand-up"></i> icon-hand-up</li> - <li><i class="icon-hand-down"></i> icon-hand-down</li> - <li><i class="icon-circle-arrow-right"></i> icon-circle-arrow-right</li> - <li><i class="icon-circle-arrow-left"></i> icon-circle-arrow-left</li> - <li><i class="icon-circle-arrow-up"></i> icon-circle-arrow-up</li> - <li><i class="icon-circle-arrow-down"></i> icon-circle-arrow-down</li> - <li><i class="icon-globe"></i> icon-globe</li> - <li><i class="icon-wrench"></i> icon-wrench</li> - <li><i class="icon-tasks"></i> icon-tasks</li> - <li><i class="icon-filter"></i> icon-filter</li> - <li><i class="icon-briefcase"></i> icon-briefcase</li> - <li><i class="icon-fullscreen"></i> icon-fullscreen</li> - </ul> - - <h3>Glyphicons attribution</h3> - <p>{{_i}}<a href="http://glyphicons.com/">Glyphicons</a> Halflings are normally not available for free, but an arrangement between Bootstrap and the Glyphicons creators have made this possible at no cost to you as developers. As a thank you, we ask you to include an optional link back to <a href="http://glyphicons.com/">Glyphicons</a> whenever practical.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}How to use{{/i}}</h2> - <p>{{_i}}All icons require an <code><i></code> tag with a unique class, prefixed with <code>icon-</code>. To use, place the following code just about anywhere:{{/i}}</p> -<pre class="prettyprint linenums"> -<i class="icon-search"></i> -</pre> - <p>{{_i}}There are also styles available for inverted (white) icons, made ready with one extra class. We will specifically enforce this class on hover and active states for nav and dropdown links.{{/i}}</p> -<pre class="prettyprint linenums"> -<i class="icon-search icon-white"></i> -</pre> - <p> - <span class="label label-info">{{_i}}Heads up!{{/i}}</span> - {{_i}}When using beside strings of text, as in buttons or nav links, be sure to leave a space after the <code><i></code> tag for proper spacing.{{/i}} - </p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Icon examples{{/i}}</h2> - <p>{{_i}}Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.{{/i}}</p> - - <h4>{{_i}}Buttons{{/i}}</h4> - - <h5>{{_i}}Button group in a button toolbar{{/i}}</h5> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> - </div> - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - <a class="btn" href="#"><i class="icon-align-left"></i></a> - <a class="btn" href="#"><i class="icon-align-center"></i></a> - <a class="btn" href="#"><i class="icon-align-right"></i></a> - <a class="btn" href="#"><i class="icon-align-justify"></i></a> - </div> -</div> -</pre> - - <h5>{{_i}}Dropdown in a button group{{/i}}</h5> - <div class="bs-docs-example"> - <div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> {{_i}}User{{/i}}</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Edit{{/i}}</a></li> - <li><a href="#"><i class="icon-trash"></i> {{_i}}Delete{{/i}}</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> {{_i}}Ban{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> {{_i}}Make admin{{/i}}</a></li> - </ul> - </div> - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn btn-primary" href="#"><i class="icon-user icon-white"></i> {{_i}}User{{/i}}</a> - <a class="btn btn-primary dropdown-toggle" data-toggle="dropdown" href="#"><span class="caret"></span></a> - <ul class="dropdown-menu"> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Edit{{/i}}</a></li> - <li><a href="#"><i class="icon-trash"></i> {{_i}}Delete{{/i}}</a></li> - <li><a href="#"><i class="icon-ban-circle"></i> {{_i}}Ban{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#"><i class="i"></i> {{_i}}Make admin{{/i}}</a></li> - </ul> -</div> -</pre> - - <h5>{{_i}}Button sizes{{/i}}</h5> - <div class="bs-docs-example"> - <a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> - <a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<a class="btn btn-large" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-small" href="#"><i class="icon-star"></i> Star</a> -<a class="btn btn-mini" href="#"><i class="icon-star"></i> Star</a> -</pre> - - <h4>{{_i}}Navigation{{/i}}</h4> - <div class="bs-docs-example"> - <div class="well" style="padding: 8px 0; margin-bottom: 0;"> - <ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> {{_i}}Home{{/i}}</a></li> - <li><a href="#"><i class="icon-book"></i> {{_i}}Library{{/i}}</a></li> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Applications{{/i}}</a></li> - <li><a href="#"><i class="i"></i> {{_i}}Misc{{/i}}</a></li> - </ul> - </div>{{! /well }} - </div>{{! /bs-docs-example }} -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="active"><a href="#"><i class="icon-home icon-white"></i> {{_i}}Home{{/i}}</a></li> - <li><a href="#"><i class="icon-book"></i> {{_i}}Library{{/i}}</a></li> - <li><a href="#"><i class="icon-pencil"></i> {{_i}}Applications{{/i}}</a></li> - <li><a href="#"><i class="i"></i> {{_i}}Misc{{/i}}</a></li> -</ul> -</pre> - - <h4>{{_i}}Form fields{{/i}}</h4> - <form class="bs-docs-example form-horizontal"> - <div class="control-group"> - <label class="control-label" for="inputIcon">{{_i}}Email address{{/i}}</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span><input class="span2" id="inputIcon" type="text"> - </div> - </div> - </div> - </form> -<pre class="prettyprint linenums"> -<div class="control-group"> - <label class="control-label" for="inputIcon">{{_i}}Email address{{/i}}</label> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on"><i class="icon-envelope"></i></span> - <input class="span2" id="inputIcon" type="text"> - </div> - </div> -</div> -</pre> - - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/docs/templates/pages/components.mustache b/docs/templates/pages/components.mustache deleted file mode 100644 index 6d3ff9beee65de453cf010d186d704a7293b7cf7..0000000000000000000000000000000000000000 --- a/docs/templates/pages/components.mustache +++ /dev/null @@ -1,2505 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Components{{/i}}</h1> - <p class="lead">{{_i}}Dozens of reusable components built to provide navigation, alerts, popovers, and more.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> {{_i}}Dropdowns{{/i}}</a></li> - <li><a href="#buttonGroups"><i class="icon-chevron-right"></i> {{_i}}Button groups{{/i}}</a></li> - <li><a href="#buttonDropdowns"><i class="icon-chevron-right"></i> {{_i}}Button dropdowns{{/i}}</a></li> - <li><a href="#navs"><i class="icon-chevron-right"></i> {{_i}}Navs{{/i}}</a></li> - <li><a href="#navbar"><i class="icon-chevron-right"></i> {{_i}}Navbar{{/i}}</a></li> - <li><a href="#breadcrumbs"><i class="icon-chevron-right"></i> {{_i}}Breadcrumbs{{/i}}</a></li> - <li><a href="#pagination"><i class="icon-chevron-right"></i> {{_i}}Pagination{{/i}}</a></li> - <li><a href="#labels-badges"><i class="icon-chevron-right"></i> {{_i}}Labels and badges{{/i}}</a></li> - <li><a href="#typography"><i class="icon-chevron-right"></i> {{_i}}Typography{{/i}}</a></li> - <li><a href="#thumbnails"><i class="icon-chevron-right"></i> {{_i}}Thumbnails{{/i}}</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> {{_i}}Alerts{{/i}}</a></li> - <li><a href="#progress"><i class="icon-chevron-right"></i> {{_i}}Progress bars{{/i}}</a></li> - <li><a href="#media"><i class="icon-chevron-right"></i> {{_i}}Media object{{/i}}</a></li> - <li><a href="#misc"><i class="icon-chevron-right"></i> {{_i}}Misc{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>{{_i}}Dropdown menus{{/i}}</h1> - </div> - - <h2>{{_i}}Example{{/i}}</h2> - <p>{{_i}}Toggleable, contextual menu for displaying lists of links. Made interactive with the <a href="./javascript.html#dropdowns">dropdown JavaScript plugin</a>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> -</ul> -</pre> - - <h2>{{_i}}Markup{{/i}}</h2> - <p>{{_i}}Looking at just the dropdown menu, here's the required HTML. You need to wrap the dropdown's trigger and the dropdown menu within <code>.dropdown</code>, or another element that declares <code>position: relative;</code>. Then just create the menu.{{/i}}</p> - -<pre class="prettyprint linenums"> -<div class="dropdown"> - <!-- Link or button to toggle dropdown --> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> -</div> -</pre> - - <h2>{{_i}}Options{{/i}}</h2> - <p>{{_i}}Align menus to the right and add include additional levels of dropdowns.{{/i}}</p> - - <h3>{{_i}}Aligning the menus{{/i}}</h3> - <p>{{_i}}Add <code>.pull-right</code> to a <code>.dropdown-menu</code> to right align the dropdown menu.{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="dropdown-menu pull-right" role="menu" aria-labelledby="dLabel"> - ... -</ul> -</pre> - - <h3>{{_i}}Disabled menu options{{/i}}</h3> - <p>{{_i}}Add <code>.disabled</code> to a <code><li></code> in the dropdown to disable the link.{{/i}}</p> - <div class="bs-docs-example"> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu" style="display: block; position: static; margin-bottom: 5px; *width: 180px;"> - <li><a tabindex="-1" href="#">{{_i}}Regular link{{/i}}</a></li> - <li class="disabled"><a tabindex="-1" href="#">{{_i}}Disabled link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another link{{/i}}</a></li> - </ul> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Regular link{{/i}}</a></li> - <li class="disabled"><a tabindex="-1" href="#">{{_i}}Disabled link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another link{{/i}}</a></li> -</ul> -</pre> - - <h3>{{_i}}Sub menus on dropdowns{{/i}}</h3> - <p>{{_i}}Add an extra level of dropdown menus, appearing on hover like those of OS X, with some simple markup additions. Add <code>.dropdown-submenu</code> to any <code>li</code> in an existing dropdown menu for automatic styling.{{/i}}</p> - <div class="bs-docs-example bs-docs-example-submenus"> - - <div class="pull-left"> - <p class="muted">Default</p> - <div class="dropdown clearfix"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div>{{! /.pull-left }} - - <div class="pull-left"> - <p class="muted">Dropup</p> - <div class="dropup"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div>{{! /.pull-left }} - - <div class="pull-left"> - <p class="muted">Left submenu</p> - <div class="dropdown"> - <ul class="dropdown-menu" role="menu" aria-labelledby="dropdownMenu"> - <li><a tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="dropdown-submenu pull-left"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - <li><a tabindex="-1" href="#">{{_i}}Second level link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div>{{! /.pull-left }} - - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - <li class="dropdown-submenu"> - <a tabindex="-1" href="#">{{_i}}More options{{/i}}</a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - - </section> - - - - - <!-- Button Groups - ================================================== --> - <section id="buttonGroups"> - <div class="page-header"> - <h1>{{_i}}Button groups{{/i}}</h1> - </div> - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Two basic options, along with two more specific variations.{{/i}}</p> - - <h3>{{_i}}Single button group{{/i}}</h3> - <p>{{_i}}Wrap a series of buttons with <code>.btn</code> in <code>.btn-group</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-group" style="margin: 9px 0 5px;"> - <button class="btn">{{_i}}Left{{/i}}</button> - <button class="btn">{{_i}}Middle{{/i}}</button> - <button class="btn">{{_i}}Right{{/i}}</button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">Left</button> - <button class="btn">Middle</button> - <button class="btn">Right</button> -</div> -</pre> - - <h3>{{_i}}Multiple button groups{{/i}}</h3> - <p>{{_i}}Combine sets of <code><div class="btn-group"></code> into a <code><div class="btn-toolbar"></code> for more complex components.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">1</button> - <button class="btn">2</button> - <button class="btn">3</button> - <button class="btn">4</button> - </div> - <div class="btn-group"> - <button class="btn">5</button> - <button class="btn">6</button> - <button class="btn">7</button> - </div> - <div class="btn-group"> - <button class="btn">8</button> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-toolbar"> - <div class="btn-group"> - ... - </div> -</div> -</pre> - - <h3>{{_i}}Vertical button groups{{/i}}</h3> - <p>{{_i}}Make a set of buttons appear vertically stacked rather than horizontally.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-group btn-group-vertical"> - <button type="button" class="btn"><i class="icon-align-left"></i></button> - <button type="button" class="btn"><i class="icon-align-center"></i></button> - <button type="button" class="btn"><i class="icon-align-right"></i></button> - <button type="button" class="btn"><i class="icon-align-justify"></i></button> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="btn-group btn-group-vertical"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h4>{{_i}}Checkbox and radio flavors{{/i}}</h4> - <p>{{_i}}Button groups can also function as radios, where only one button may be active, or checkboxes, where any number of buttons may be active. View <a href="./javascript.html#buttons">the JavaScript docs</a> for that.{{/i}}</p> - - <h4>{{_i}}Dropdowns in button groups{{/i}}</h4> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}}Buttons with dropdowns must be individually wrapped in their own <code>.btn-group</code> within a <code>.btn-toolbar</code> for proper rendering.{{/i}}</p> - </section> - - - - <!-- Split button dropdowns - ================================================== --> - <section id="buttonDropdowns"> - <div class="page-header"> - <h1>{{_i}}Button dropdown menus{{/i}}</h1> - </div> - - - <h2>{{_i}}Overview and examples{{/i}}</h2> - <p>{{_i}}Use any button to trigger a dropdown menu by placing it within a <code>.btn-group</code> and providing the proper menu markup.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">{{_i}}Action{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown">{{_i}}Danger{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown">{{_i}}Warning{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown">{{_i}}Success{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown">{{_i}}Info{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown">{{_i}}Inverse{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> - {{_i}}Action{{/i}} - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - <h3>{{_i}}Works with all button sizes{{/i}}</h3> - <p>{{_i}}Button dropdowns work at any size: <code>.btn-large</code>, <code>.btn-small</code>, or <code>.btn-mini</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown">{{_i}}Large button{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown">{{_i}}Small button{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown">{{_i}}Mini button{{/i}} <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} - - <h3>{{_i}}Requires JavaScript{{/i}}</h3> - <p>{{_i}}Button dropdowns require the <a href="./javascript.html#dropdowns">Bootstrap dropdown plugin</a> to function.{{/i}}</p> - <p>{{_i}}In some cases—like mobile—dropdown menus will extend outside the viewport. You need to resolve the alignment manually or with custom JavaScript.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Split button dropdowns{{/i}}</h2> - <p>{{_i}}Building on the button group styles and markup, we can easily create a split button. Split buttons feature a standard action on the left and a dropdown toggle on the right with contextual links.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group"> - <button class="btn">{{_i}}Action{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-primary">{{_i}}Action{{/i}}</button> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-danger">{{_i}}Danger{{/i}}</button> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-warning">{{_i}}Warning{{/i}}</button> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-success">{{_i}}Success{{/i}}</button> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-info">{{_i}}Info{{/i}}</button> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group"> - <button class="btn btn-inverse">{{_i}}Inverse{{/i}}</button> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn">{{_i}}Action{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - <h3>{{_i}}Sizes{{/i}}</h3> - <p>{{_i}}Utilize the extra button classes <code>.btn-mini</code>, <code>.btn-small</code>, or <code>.btn-large</code> for sizing.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-large">{{_i}}Large action{{/i}}</button> - <button class="btn btn-large dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-small">{{_i}}Small action{{/i}}</button> - <button class="btn btn-small dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - <div class="btn-toolbar"> - <div class="btn-group"> - <button class="btn btn-mini">{{_i}}Mini action{{/i}}</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group"> - <button class="btn btn-mini">{{_i}}Action{{/i}}</button> - <button class="btn btn-mini dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - <h3>{{_i}}Dropup menus{{/i}}</h3> - <p>{{_i}}Dropdown menus can also be toggled from the bottom up by adding a single class to the immediate parent of <code>.dropdown-menu</code>. It will flip the direction of the <code>.caret</code> and reposition the menu itself to move from the bottom up instead of top down.{{/i}}</p> - <div class="bs-docs-example"> - <div class="btn-toolbar" style="margin: 0;"> - <div class="btn-group dropup"> - <button class="btn">{{_i}}Dropup{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn primary">{{_i}}Right dropup{{/i}}</button> - <button class="btn primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu pull-right"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </div><!-- /btn-group --> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group dropup"> - <button class="btn">{{_i}}Dropup{{/i}}</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - <!-- {{_i}}dropdown menu links{{/i}} --> - </ul> -</div> -</pre> - - </section> - - - - <!-- Nav, Tabs, & Pills - ================================================== --> - <section id="navs"> - <div class="page-header"> - <h1>{{_i}}Nav: tabs, pills, and lists{{/i}}</small></h1> - </div> - - <h2>{{_i}}Lightweight defaults{{/i}} <small>{{_i}}Same markup, different classes{{/i}}</small></h2> - <p>{{_i}}All nav components here—tabs, pills, and lists—<strong>share the same base markup and styles</strong> through the <code>.nav</code> class.{{/i}}</p> - - <h3>{{_i}}Basic tabs{{/i}}</h3> - <p>{{_i}}Take a regular <code><ul></code> of links and add <code>.nav-tabs</code>:{{/i}}</p> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="active"> - <a href="#">{{_i}}Home{{/i}}</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>{{_i}}Basic pills{{/i}}</h3> - <p>{{_i}}Take that same HTML, but use <code>.nav-pills</code> instead:{{/i}}</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="active"> - <a href="#">{{_i}}Home{{/i}}</a> - </li> - <li><a href="#">...</a></li> - <li><a href="#">...</a></li> -</ul> -</pre> - - <h3>{{_i}}Disabled state{{/i}}</h3> - <p>{{_i}}For any nav component (tabs, pills, or list), add <code>.disabled</code> for <strong>gray links and no hover effects</strong>. Links will remain clickable, however, unless you remove the <code>href</code> attribute. Alternatively, you could implement custom JavaScript to prevent those clicks.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li><a href="#">{{_i}}Clickable link{{/i}}</a></li> - <li><a href="#">{{_i}}Clickable link{{/i}}</a></li> - <li class="disabled"><a href="#">{{_i}}Disabled link{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - ... - <li class="disabled"><a href="#">{{_i}}Home{{/i}}</a></li> - ... -</ul> -</pre> - - <h3>{{_i}}Component alignment{{/i}}</h3> - <p>{{_i}}To align nav links, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Stackable{{/i}}</h2> - <p>{{_i}}As tabs and pills are horizontal by default, just add a second class, <code>.nav-stacked</code>, to make them appear vertically stacked.{{/i}}</p> - - <h3>{{_i}}Stacked tabs{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs nav-stacked"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs nav-stacked"> - ... -</ul> -</pre> - - <h3>{{_i}}Stacked pills{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills nav-stacked"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Messages{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-pills nav-stacked"> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Dropdowns{{/i}}</h2> - <p>{{_i}}Add dropdown menus with a little extra HTML and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.{{/i}}</p> - - <h3>{{_i}}Tabs with dropdowns{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Help{{/i}}</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - {{_i}}Dropdown{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- {{_i}}links{{/i}} --> - </ul> - </li> -</ul> -</pre> - - <h3>{{_i}}Pills with dropdowns{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Help{{/i}}</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav nav-pills"> - <li class="dropdown"> - <a class="dropdown-toggle" - data-toggle="dropdown" - href="#"> - {{_i}}Dropdown{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - <!-- {{_i}}links{{/i}} --> - </ul> - </li> -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Nav lists{{/i}}</h2> - <p>{{_i}}A simple and easy way to build groups of nav links with optional headers. They're best used in sidebars like the Finder in OS X.{{/i}}</p> - - <h3>{{_i}}Example nav list{{/i}}</h3> - <p>{{_i}}Take a list of links and add <code>class="nav nav-list"</code>:{{/i}}</p> - <div class="bs-docs-example"> - <div class="well" style="max-width: 340px; padding: 8px 0;"> - <ul class="nav nav-list"> - <li class="nav-header">{{_i}}List header{{/i}}</li> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Library{{/i}}</a></li> - <li><a href="#">{{_i}}Applications{{/i}}</a></li> - <li class="nav-header">{{_i}}Another list header{{/i}}</li> - <li><a href="#">{{_i}}Profile{{/i}}</a></li> - <li><a href="#">{{_i}}Settings{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Help{{/i}}</a></li> - </ul> - </div> <!-- /well --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - <li class="nav-header">{{_i}}List header{{/i}}</li> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Library{{/i}}</a></li> - ... -</ul> -</pre> - <p> - <span class="label label-info">{{_i}}Note{{/i}}</span> - {{_i}}For nesting within a nav list, include <code>class="nav nav-list"</code> on any nested <code><ul></code>.{{/i}} - </p> - - <h3>{{_i}}Horizontal dividers{{/i}}</h3> - <p>{{_i}}Add a horizontal divider by creating an empty list item with the class <code>.divider</code>, like so:{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-list"> - ... - <li class="divider"></li> - ... -</ul> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Tabbable nav{{/i}}</h2> - <p>{{_i}}Bring your tabs to life with a simple plugin to toggle between content via tabs. Bootstrap integrates tabbable tabs in four styles: top (default), right, bottom, and left.{{/i}}</p> - - <h3>{{_i}}Tabbable example{{/i}}</h3> - <p>{{_i}}To make tabs tabbable, create a <code>.tab-pane</code> with unique ID for every tab and wrap them in <code>.tab-content</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable" style="margin-bottom: 18px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#tab2" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#tab3" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1"> - <p>{{_i}}I'm in Section 1.{{/i}}</p> - </div> - <div class="tab-pane" id="tab2"> - <p>{{_i}}Howdy, I'm in Section 2.{{/i}}</p> - </div> - <div class="tab-pane" id="tab3"> - <p>{{_i}}What up girl, this is Section 3.{{/i}}</p> - </div> - </div> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable"> <!-- Only required for left/right tabs --> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#tab2" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="tab1"> - <p>{{_i}}I'm in Section 1.{{/i}}</p> - </div> - <div class="tab-pane" id="tab2"> - <p>{{_i}}Howdy, I'm in Section 2.{{/i}}</p> - </div> - </div> -</div> -</pre> - - <h4>{{_i}}Fade in tabs{{/i}}</h4> - <p>{{_i}}To make tabs fade in, add <code>.fade</code> to each <code>.tab-pane</code>.{{/i}}</p> - - <h4>{{_i}}Requires jQuery plugin{{/i}}</h4> - <p>{{_i}}All tabbable tabs are powered by our lightweight jQuery plugin. Read more about how to bring tabbable tabs to life <a href="./javascript.html#tabs">on the JavaScript docs page</a>.{{/i}}</p> - - <h3>{{_i}}Tabbable in any direction{{/i}}</h3> - - <h4>{{_i}}Tabs on the bottom{{/i}}</h4> - <p>{{_i}}Flip the order of the HTML and add a class to put tabs on the bottom.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-below"> - <div class="tab-content"> - <div class="tab-pane active" id="A"> - <p>{{_i}}I'm in Section A.{{/i}}</p> - </div> - <div class="tab-pane" id="B"> - <p>{{_i}}Howdy, I'm in Section B.{{/i}}</p> - </div> - <div class="tab-pane" id="C"> - <p>{{_i}}What up girl, this is Section C.{{/i}}</p> - </div> - </div> - <ul class="nav nav-tabs"> - <li class="active"><a href="#A" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#B" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#C" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable tabs-below"> - <div class="tab-content"> - ... - </div> - <ul class="nav nav-tabs"> - ... - </ul> -</div> -</pre> - - <h4>{{_i}}Tabs on the left{{/i}}</h4> - <p>{{_i}}Swap the class to put tabs on the left.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#lA" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#lB" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#lC" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="lA"> - <p>{{_i}}I'm in Section A.{{/i}}</p> - </div> - <div class="tab-pane" id="lB"> - <p>{{_i}}Howdy, I'm in Section B.{{/i}}</p> - </div> - <div class="tab-pane" id="lC"> - <p>{{_i}}What up girl, this is Section C.{{/i}}</p> - </div> - </div> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable tabs-left"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - <h4>{{_i}}Tabs on the right{{/i}}</h4> - <p>{{_i}}Swap the class to put tabs on the right.{{/i}}</p> - <div class="bs-docs-example"> - <div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#rA" data-toggle="tab">{{_i}}Section 1{{/i}}</a></li> - <li><a href="#rB" data-toggle="tab">{{_i}}Section 2{{/i}}</a></li> - <li><a href="#rC" data-toggle="tab">{{_i}}Section 3{{/i}}</a></li> - </ul> - <div class="tab-content"> - <div class="tab-pane active" id="rA"> - <p>{{_i}}I'm in Section A.{{/i}}</p> - </div> - <div class="tab-pane" id="rB"> - <p>{{_i}}Howdy, I'm in Section B.{{/i}}</p> - </div> - <div class="tab-pane" id="rC"> - <p>{{_i}}What up girl, this is Section C.{{/i}}</p> - </div> - </div> - </div> <!-- /tabbable --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="tabbable tabs-right"> - <ul class="nav nav-tabs"> - ... - </ul> - <div class="tab-content"> - ... - </div> -</div> -</pre> - - </section> - - - - <!-- Navbar - ================================================== --> - <section id="navbar"> - <div class="page-header"> - <h1>{{_i}}Navbar{{/i}}</h1> - </div> - - - <h2>{{_i}}Basic navbar{{/i}}</h2> - <p>{{_i}}To start, navbars are static (not fixed to the top) and include support for a project name and basic navigation. Place one anywhere within a <code>.container</code>, which sets the width of your site and content.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Navbar components{{/i}}</h2> - - <h3>{{_i}}Brand{{/i}}</h3> - <p>{{_i}}A simple link to show your brand or project name only requires an anchor tag.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<a class="brand" href="#">{{_i}}Project name{{/i}}</a> -</pre> - - <h3>{{_i}}Nav links{{/i}}</h3> - <p>{{_i}}Nav items are simple to add via unordered lists.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="active"> - <a href="#">{{_i}}Home{{/i}}</a> - </li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> -</ul> -</pre> - <p>{{_i}}You can easily add dividers to your nav links with an empty list item and a simple class. Just add this between links:{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li class="divider-vertical"></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - </ul> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<ul class="nav"> - ... - <li class="divider-vertical"></li> - ... -</ul> -</pre> - - <h3>{{_i}}Forms{{/i}}</h3> - <p>{{_i}}To properly style and position a form within the navbar, add the appropriate classes as shown below. For a default form, include <code>.navbar-form</code> and either <code>.pull-left</code> or <code>.pull-right</code> to properly align it.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> - </form> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<form class="navbar-form pull-left"> - <input type="text" class="span2"> - <button type="submit" class="btn">{{_i}}Submit{{/i}}</button> -</form> -</pre> - - <h3>{{_i}}Search form{{/i}}</h3> - <p>{{_i}}For a more customized search form, add <code>.navbar-search</code> to the <code>form</code> and <code>.search-query</code> to the input for specialized styles in the navbar.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="{{_i}}Search{{/i}}"> - </form> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<form class="navbar-search pull-left"> - <input type="text" class="search-query" placeholder="{{_i}}Search{{/i}}"> -</form> -</pre> - - <h3>{{_i}}Component alignment{{/i}}</h3> - <p>{{_i}}Align nav links, search form, or text, use the <code>.pull-left</code> or <code>.pull-right</code> utility classes. Both classes will add a CSS float in the specified direction.{{/i}}</p> - - <h3>{{_i}}Using dropdowns{{/i}}</h3> - <p>{{_i}}Add dropdowns and dropups to the nav with a bit of markup and the <a href="./javascript.html#dropdowns">dropdowns JavaScript plugin</a>.{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="nav"> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - {{_i}}Account{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu"> - ... - </ul> - </li> -</ul> -</pre> - <p>{{_i}}Visit the <a href="./javascript.html#dropdowns">JavaScript dropdowns documentation</a> for more markup and information on calling dropdowns.{{/i}}</p> - - <h3>{{_i}}Text{{/i}}</h3> - <p>{{_i}}Wrap strings of text in an element with <code>.navbar-text</code>, usually on a <code><p></code> tag for proper leading and color.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Optional display variations{{/i}}</h2> - <p>{{_i}}Fix the navbar to the top or bottom of the viewport with an additional class on the outermost div, <code>.navbar</code>.{{/i}}</p> - - <h3>Fixed to top</h3> - <p>{{_i}}Add <code>.navbar-fixed-top</code> and remember to account for the hidden area underneath it by adding at least 40px <code>padding</code> to the <code><body></code>. Be sure to add this after the core Bootstrap CSS and before the optional responsive CSS.{{/i}}</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-fixed-top" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-top"> - ... -</div> -</pre> - - <h3>Fixed to bottom</h3> - <p>{{_i}}Add <code>.navbar-fixed-bottom</code> instead.{{/i}}</p> - <div class="bs-docs-example bs-navbar-bottom-example"> - <div class="navbar navbar-fixed-bottom" style="position: absolute;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-fixed-bottom"> - ... -</div> -</pre> - - <h3>{{_i}}Static top navbar{{/i}}</h3> - <p>{{_i}}Create a full-width navbar that scrolls away with the page by adding <code>.navbar-static-top</code>. Unlike the <code>.navbar-fixed-top</code> class, you do not need to change any padding on the <code>body</code>.{{/i}}</p> - <div class="bs-docs-example bs-navbar-top-example"> - <div class="navbar navbar-static-top" style="margin: -1px -1px 0;"> - <div class="navbar-inner"> - <div class="container" style="width: auto; padding: 0 20px;"> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - </ul> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-static-top"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Responsive navbar{{/i}}</h2> - <p>{{_i}}To implement a collapsing responsive navbar, wrap your navbar content in a containing div, <code>.nav-collapse.collapse</code>, and add the navbar toggle button, <code>.btn-navbar</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-responsive-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <div class="nav-collapse collapse navbar-responsive-collapse"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - <li><a href="#">{{_i}}One more separated link{{/i}}</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - - <!-- {{_i}}.btn-navbar is used as the toggle for collapsed navbar content{{/i}} --> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - - <!-- {{_i}}Be sure to leave the brand out there if you want it shown{{/i}} --> - <a class="brand" href="#">{{_i}}Project name{{/i}}</a> - - <!-- {{_i}}Everything you want hidden at 940px or less, place within here{{/i}} --> - <div class="nav-collapse collapse"> - <!-- .nav, .navbar-search, .navbar-form, etc --> - </div> - - </div> - </div> -</div> -</pre> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> The responsive navbar requires the <a href="./javascript.html#collapse">collapse plugin</a> and <a href="./scaffolding.html#responsive">responsive Bootstrap CSS file</a>. - </div> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Inverted variation{{/i}}</h2> - <p>{{_i}}Modify the look of the navbar by adding <code>.navbar-inverse</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="navbar navbar-inverse" style="position: static;"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".navbar-inverse-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">{{_i}}Title{{/i}}</a> - <div class="nav-collapse collapse navbar-inverse-collapse"> - <ul class="nav"> - <li class="active"><a href="#">{{_i}}Home{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li class="nav-header">Nav header</li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - <li><a href="#">{{_i}}One more separated link{{/i}}</a></li> - </ul> - </li> - </ul> - <form class="navbar-search pull-left" action=""> - <input type="text" class="search-query span2" placeholder="Search"> - </form> - <ul class="nav pull-right"> - <li><a href="#">{{_i}}Link{{/i}}</a></li> - <li class="divider-vertical"></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">{{_i}}Action{{/i}}</a></li> - <li><a href="#">{{_i}}Another action{{/i}}</a></li> - <li><a href="#">{{_i}}Something else here{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div><!-- /.nav-collapse --> - </div> - </div><!-- /navbar-inner --> - </div><!-- /navbar --> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="navbar navbar-inverse"> - ... -</div> -</pre> - - </section> - - - - <!-- Breadcrumbs - ================================================== --> - <section id="breadcrumbs"> - <div class="page-header"> - <h1>{{_i}}Breadcrumbs{{/i}} <small></small></h1> - </div> - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}A single example shown as it might be displayed across multiple pages.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="breadcrumb"> - <li class="active">{{_i}}Home{{/i}}</li> - </ul> - <ul class="breadcrumb"> - <li><a href="#">{{_i}}Home{{/i}}</a> <span class="divider">/</span></li> - <li class="active">{{_i}}Library{{/i}}</li> - </ul> - <ul class="breadcrumb" style="margin-bottom: 5px;"> - <li><a href="#">{{_i}}Home{{/i}}</a> <span class="divider">/</span></li> - <li><a href="#">{{_i}}Library{{/i}}</a> <span class="divider">/</span></li> - <li class="active">{{_i}}Data{{/i}}</li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="breadcrumb"> - <li><a href="#">{{_i}}Home{{/i}}</a> <span class="divider">/</span></li> - <li><a href="#">{{_i}}Library{{/i}}</a> <span class="divider">/</span></li> - <li class="active">{{_i}}Data{{/i}}</li> -</ul> -</pre> - - </section> - - - - <!-- Pagination - ================================================== --> - <section id="pagination"> - <div class="page-header"> - <h1>{{_i}}Pagination{{/i}} <small>{{_i}}Two options for paging through content{{/i}}</small></h1> - </div> - - <h2>{{_i}}Standard pagination{{/i}}</h2> - <p>{{_i}}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.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li><a href="#">Prev</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">Next</a></li> - </ul> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Options{{/i}}</h2> - - <h3>{{_i}}Disabled and active states{{/i}}</h3> - <p>{{_i}}Links are customizable for different circumstances. Use <code>.disabled</code> for unclickable links and <code>.active</code> to indicate the current page.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li class="disabled"><a href="#">«</a></li> - <li class="active"><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><a href="#">&laquo;</a></li> - <li class="active"><a href="#">1</a></li> - ... - </ul> -</div> -</pre> - <p>{{_i}}You can optionally swap out active or disabled anchors for spans to remove click functionality while retaining intended styles.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="pagination"> - <ul> - <li class="disabled"><span>&laquo;</span></li> - <li class="active"><span>1</span></li> - ... - </ul> -</div> -</pre> - - <h3>{{_i}}Sizes{{/i}}</h3> - <p>{{_i}}Fancy larger or smaller pagination? Add <code>.pagination-large</code>, <code>.pagination-small</code>, or <code>.pagination-mini</code> for additional sizes.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination pagination-large"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-small"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - <div class="pagination pagination-mini"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-large"> - <ul> - ... - </ul> -</div> -<div class="pagination"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-small"> - <ul> - ... - </ul> -</div> -<div class="pagination pagination-mini"> - <ul> - ... - </ul> -</div> -</pre> - - <h3>{{_i}}Alignment{{/i}}</h3> - <p>{{_i}}Add one of two optional classes to change the alignment of pagination links: <code>.pagination-centered</code> and <code>.pagination-right</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="pagination pagination-centered"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-centered"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="pagination pagination-right"> - <ul> - <li><a href="#">«</a></li> - <li><a href="#">1</a></li> - <li><a href="#">2</a></li> - <li><a href="#">3</a></li> - <li><a href="#">4</a></li> - <li><a href="#">5</a></li> - <li><a href="#">»</a></li> - </ul> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="pagination pagination-right"> - ... -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Pager{{/i}}</h2> - <p>{{_i}}Quick previous and next links for simple pagination implementations with light markup and styles. It's great for simple sites like blogs or magazines.{{/i}}</p> - - <h3>{{_i}}Default example{{/i}}</h3> - <p>{{_i}}By default, the pager centers links.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li><a href="#">{{_i}}Previous{{/i}}</a></li> - <li><a href="#">{{_i}}Next{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li><a href="#">{{_i}}Previous{{/i}}</a></li> - <li><a href="#">{{_i}}Next{{/i}}</a></li> -</ul> -</pre> - - <h3>{{_i}}Aligned links{{/i}}</h3> - <p>{{_i}}Alternatively, you can align each link to the sides:{{/i}}</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous"><a href="#">{{_i}}← Older{{/i}}</a></li> - <li class="next"><a href="#">{{_i}}Newer →{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous"> - <a href="#">{{_i}}&larr; Older{{/i}}</a> - </li> - <li class="next"> - <a href="#">{{_i}}Newer &rarr;{{/i}}</a> - </li> -</ul> -</pre> - - <h3>{{_i}}Optional disabled state{{/i}}</h3> - <p>{{_i}}Pager links also use the general <code>.disabled</code> utility class from the pagination.{{/i}}</p> - <div class="bs-docs-example"> - <ul class="pager"> - <li class="previous disabled"><a href="#">{{_i}}← Older{{/i}}</a></li> - <li class="next"><a href="#">{{_i}}Newer →{{/i}}</a></li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="pager"> - <li class="previous disabled"> - <a href="#">{{_i}}&larr; Older{{/i}}</a> - </li> - ... -</ul> -</pre> - - </section> - - - - <!-- Labels and badges - ================================================== --> - <section id="labels-badges"> - <div class="page-header"> - <h1>{{_i}}Labels and badges{{/i}}</h1> - </div> - <h3>{{_i}}Labels{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Labels{{/i}}</th> - <th>{{_i}}Markup{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <span class="label">{{_i}}Default{{/i}}</span> - </td> - <td> - <code><span class="label">{{_i}}Default{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-success">{{_i}}Success{{/i}}</span> - </td> - <td> - <code><span class="label label-success">{{_i}}Success{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-warning">{{_i}}Warning{{/i}}</span> - </td> - <td> - <code><span class="label label-warning">{{_i}}Warning{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-important">{{_i}}Important{{/i}}</span> - </td> - <td> - <code><span class="label label-important">{{_i}}Important{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-info">{{_i}}Info{{/i}}</span> - </td> - <td> - <code><span class="label label-info">{{_i}}Info{{/i}}</span></code> - </td> - </tr> - <tr> - <td> - <span class="label label-inverse">{{_i}}Inverse{{/i}}</span> - </td> - <td> - <code><span class="label label-inverse">{{_i}}Inverse{{/i}}</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Badges{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Name{{/i}}</th> - <th>{{_i}}Example{{/i}}</th> - <th>{{_i}}Markup{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td> - {{_i}}Default{{/i}} - </td> - <td> - <span class="badge">1</span> - </td> - <td> - <code><span class="badge">1</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Success{{/i}} - </td> - <td> - <span class="badge badge-success">2</span> - </td> - <td> - <code><span class="badge badge-success">2</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Warning{{/i}} - </td> - <td> - <span class="badge badge-warning">4</span> - </td> - <td> - <code><span class="badge badge-warning">4</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Important{{/i}} - </td> - <td> - <span class="badge badge-important">6</span> - </td> - <td> - <code><span class="badge badge-important">6</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Info{{/i}} - </td> - <td> - <span class="badge badge-info">8</span> - </td> - <td> - <code><span class="badge badge-info">8</span></code> - </td> - </tr> - <tr> - <td> - {{_i}}Inverse{{/i}} - </td> - <td> - <span class="badge badge-inverse">10</span> - </td> - <td> - <code><span class="badge badge-inverse">10</span></code> - </td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Easily collapsible{{/i}}</h3> - <p>{{_i}}For easy implementation, labels and badges will simply collapse (via CSS's <code>:empty</code> selector) when no content exists within.{{/i}}</p> - - </section> - - - - <!-- Typographic components - ================================================== --> - <section id="typography"> - <div class="page-header"> - <h1>{{_i}}Typographic components{{/i}}</h1> - </div> - - <h2>{{_i}}Hero unit{{/i}}</h2> - <p>{{_i}}A lightweight, flexible component to showcase key content on your site. It works well on marketing and content-heavy sites.{{/i}}</p> - <div class="bs-docs-example"> - <div class="hero-unit"> - <h1>{{_i}}Hello, world!{{/i}}</h1> - <p>{{_i}}This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.{{/i}}</p> - <p><a class="btn btn-primary btn-large">{{_i}}Learn more{{/i}}</a></p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="hero-unit"> - <h1>{{_i}}Heading{{/i}}</h1> - <p>{{_i}}Tagline{{/i}}</p> - <p> - <a class="btn btn-primary btn-large"> - {{_i}}Learn more{{/i}} - </a> - </p> -</div> -</pre> - - <h2>{{_i}}Page header{{/i}}</h2> - <p>{{_i}}A simple shell for an <code>h1</code> to appropriately space out and segment sections of content on a page. It can utilize the <code>h1</code>'s default <code>small</code>, element as well most other components (with additional styles).{{/i}}</p> - <div class="bs-docs-example"> - <div class="page-header"> - <h1>{{_i}}Example page header{{/i}} <small>{{_i}}Subtext for header{{/i}}</small></h1> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="page-header"> - <h1>{{_i}}Example page header{{/i}} <small>{{_i}}Subtext for header{{/i}}</small></h1> -</div> -</pre> - - </section> - - - - <!-- Thumbnails - ================================================== --> - <section id="thumbnails"> - <div class="page-header"> - <h1>{{_i}}Thumbnails{{/i}} <small>{{_i}}Grids of images, videos, text, and more{{/i}}</small></h1> - </div> - - <h2>{{_i}}Default thumbnails{{/i}}</h2> - <p>{{_i}}By default, Bootstrap's thumbnails are designed to showcase linked images with minimal required markup.{{/i}}</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - </ul> - </div> - - <h2>{{_i}}Highly customizable{{/i}}</h2> - <p>{{_i}}With a bit of extra markup, it's possible to add any kind of HTML content like headings, paragraphs, or buttons into thumbnails.{{/i}}</p> - <div class="row-fluid"> - <ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">{{_i}}Action{{/i}}</a> <a href="#" class="btn">{{_i}}Action{{/i}}</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">{{_i}}Action{{/i}}</a> <a href="#" class="btn">{{_i}}Action{{/i}}</a></p> - </div> - </div> - </li> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <div class="caption"> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - <p><a href="#" class="btn btn-primary">{{_i}}Action{{/i}}</a> <a href="#" class="btn">{{_i}}Action{{/i}}</a></p> - </div> - </div> - </li> - </ul> - </div> - - <h3>{{_i}}Why use thumbnails{{/i}}</h3> - <p>{{_i}}Thumbnails (previously <code>.media-grid</code> up until v1.4) are great for grids of photos or videos, image search results, retail products, portfolios, and much more. They can be links or static content.{{/i}}</p> - - <h3>{{_i}}Simple, flexible markup{{/i}}</h3> - <p>{{_i}}Thumbnail markup is simple—a <code>ul</code> with any number of <code>li</code> elements is all that is required. It's also super flexible, allowing for any type of content with just a bit more markup to wrap your contents.{{/i}}</p> - - <h3>{{_i}}Uses grid column sizes{{/i}}</h3> - <p>{{_i}}Lastly, the thumbnails component uses existing grid system classes—like <code>.span2</code> or <code>.span3</code>—for control of thumbnail dimensions.{{/i}}</p> - - <h2>{{_i}}Markup{{/i}}</h2> - <p>{{_i}}As mentioned previously, the required markup for thumbnails is light and straightforward. Here's a look at the default setup <strong>for linked images</strong>:{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - </a> - </li> - ... -</ul> -</pre> - <p>{{_i}}For custom HTML content in thumbnails, the markup changes slightly. To allow block level content anywhere, we swap the <code><a></code> for a <code><div></code> like so:{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="thumbnails"> - <li class="span4"> - <div class="thumbnail"> - <img data-src="holder.js/300x200" alt=""> - <h3>{{_i}}Thumbnail label{{/i}}</h3> - <p>{{_i}}Thumbnail caption...{{/i}}</p> - </div> - </li> - ... -</ul> -</pre> - - <h2>{{_i}}More examples{{/i}}</h2> - <p>{{_i}}Explore all your options with the various grid classes available to you. You can also mix and match different sizes.{{/i}}</p> - <ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/360x270" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x120" alt=""> - </a> - </li> - <li class="span2"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/160x120" alt=""> - </a> - </li> - </ul> - - </section> - - - - - <!-- Alerts - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>{{_i}}Alerts{{/i}} <small>{{_i}}Styles for success, warning, and error messages{{/i}}</small></h1> - </div> - - <h2>{{_i}}Default alert{{/i}}</h2> - <p>{{_i}}Wrap any text and an optional dismiss button in <code>.alert</code> for a basic warning alert message.{{/i}}</p> - <div class="bs-docs-example"> - <div class="alert"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Warning!{{/i}}</strong> {{_i}}Best check yo self, you're not looking too good.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <strong>{{_i}}Warning!{{/i}}</strong> {{_i}}Best check yo self, you're not looking too good.{{/i}} -</div> -</pre> - - <h3>{{_i}}Dismiss buttons{{/i}}</h3> - <p>{{_i}}Mobile Safari and Mobile Opera browsers, in addition to the <code>data-dismiss="alert"</code> attribute, require an <code>href="#"</code> for the dismissal of alerts when using an <code><a></code> tag.{{/i}}</p> - <pre class="prettyprint linenums"><a href="#" class="close" data-dismiss="alert">&times;</a></pre> - <p>{{_i}}Alternatively, you may use a <code><button></code> element with the data attribute, which we have opted to do for our docs. When using <code><button></code>, you must include <code>type="button"</code> or your forms may not submit.{{/i}}</p> - <pre class="prettyprint linenums"><button type="button" class="close" data-dismiss="alert">&times;</button></pre> - - <h3>{{_i}}Dismiss alerts via JavaScript{{/i}}</h3> - <p>{{_i}}Use the <a href="./javascript.html#alerts">alerts jQuery plugin</a> for quick and easy dismissal of alerts.{{/i}}</p> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Options{{/i}}</h2> - <p>{{_i}}For longer messages, increase the padding on the top and bottom of the alert wrapper by adding <code>.alert-block</code>.{{/i}}</p> - <div class="bs-docs-example"> - <div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4>{{_i}}Warning!{{/i}}</h4> - <p>{{_i}}Best check yo self, you're not looking too good.{{/i}} Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">&times;</button> - <h4>{{_i}}Warning!{{/i}}</h4> - {{_i}}Best check yo self, you're not...{{/i}} -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Contextual alternatives{{/i}}</h2> - <p>{{_i}}Add optional classes to change an alert's connotation.{{/i}}</p> - - <h3>{{_i}}Error or danger{{/i}}</h3> - <div class="bs-docs-example"> - <div class="alert alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Oh snap!{{/i}}</strong> {{_i}}Change a few things up and try submitting again.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-error"> - ... -</div> -</pre> - - <h3>{{_i}}Success{{/i}}</h3> - <div class="bs-docs-example"> - <div class="alert alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Well done!{{/i}}</strong> {{_i}}You successfully read this important alert message.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-success"> - ... -</div> -</pre> - - <h3>{{_i}}Information{{/i}}</h3> - <div class="bs-docs-example"> - <div class="alert alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Heads up!{{/i}}</strong> {{_i}}This alert needs your attention, but it's not super important.{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="alert alert-info"> - ... -</div> -</pre> - - </section> - - - - - <!-- Progress bars - ================================================== --> - <section id="progress"> - <div class="page-header"> - <h1>{{_i}}Progress bars{{/i}} <small>{{_i}}For loading, redirecting, or action status{{/i}}</small></h1> - </div> - - <h2>{{_i}}Examples and markup{{/i}}</h2> - - <h3>{{_i}}Basic{{/i}}</h3> - <p>{{_i}}Default progress bar with a vertical gradient.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar" style="width: 60%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar" style="width: 60%;"></div> -</div> -</pre> - - <h3>{{_i}}Striped{{/i}}</h3> - <p>{{_i}}Uses a gradient to create a striped effect. Not available in IE7-8.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped"> - <div class="bar" style="width: 20%;"></div> -</div> -</pre> - - <h3>{{_i}}Animated{{/i}}</h3> - <p>{{_i}}Add <code>.active</code> to <code>.progress-striped</code> to animate the stripes right to left. Not available in all versions of IE.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-striped active"> - <div class="bar" style="width: 45%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-striped active"> - <div class="bar" style="width: 40%;"></div> -</div> -</pre> - - <h3>Stacked</h3> - <p>Place multiple bars into the same <code>.progress</code> to stack them.</p> - <div class="bs-docs-example"> - <div class="progress"> - <div class="bar bar-success" style="width: 35%"></div> - <div class="bar bar-warning" style="width: 20%"></div> - <div class="bar bar-danger" style="width: 10%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress"> - <div class="bar bar-success" style="width: 35%;"></div> - <div class="bar bar-warning" style="width: 20%;"></div> - <div class="bar bar-danger" style="width: 10%;"></div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Options{{/i}}</h2> - - <h3>{{_i}}Additional colors{{/i}}</h3> - <p>{{_i}}Progress bars use some of the same button and alert classes for consistent styles.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-info" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - <h3>{{_i}}Striped bars{{/i}}</h3> - <p>{{_i}}Similar to the solid colors, we have varied striped progress bars.{{/i}}</p> - <div class="bs-docs-example"> - <div class="progress progress-info progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 20%"></div> - </div> - <div class="progress progress-success progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 40%"></div> - </div> - <div class="progress progress-warning progress-striped" style="margin-bottom: 9px;"> - <div class="bar" style="width: 60%"></div> - </div> - <div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="progress progress-info progress-striped"> - <div class="bar" style="width: 20%"></div> -</div> -<div class="progress progress-success progress-striped"> - <div class="bar" style="width: 40%"></div> -</div> -<div class="progress progress-warning progress-striped"> - <div class="bar" style="width: 60%"></div> -</div> -<div class="progress progress-danger progress-striped"> - <div class="bar" style="width: 80%"></div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Browser support{{/i}}</h2> - <p>{{_i}}Progress bars use CSS3 gradients, transitions, and animations to achieve all their effects. These features are not supported in IE7-9 or older versions of Firefox.{{/i}}</p> - <p>{{_i}}Versions earlier than Internet Explorer 10 and Opera 12 do not support animations.{{/i}}</p> - - </section> - - - - - <!-- Media object - ================================================== --> - <section id="media"> - <div class="page-header"> - <h1>{{_i}}Media object{{/i}}</h1> - </div> - <p class="lead">{{_i}}Abstract object styles for building various types of components (like blog comments, Tweets, etc) that feature a left- or right-aligned image alongside textual content.{{/i}}</p> - - <h2>{{_i}}Default example{{/i}}</h2> - <p>{{_i}}The default media allow to float a media object (images, video, audio) to the left or right of a content block.{{/i}}</p> - <div class="bs-docs-example"> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> - </div> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus. - </div> - </div> - </div> - </div> - </div>{{! /.bs-docs-example }} -<pre class="prettyprint linenums"> -<div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Media list{{/i}}</h2> - <p>{{_i}}With a bit of extra markup, you can use media inside list (useful for comment threads or articles lists).{{/i}}</p> - <div class="bs-docs-example"> - <ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - <p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis.</p> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Nested media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Nested media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </div> - <!-- Nested media object --> - <div class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Nested media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </div> - </div> - </li> - <li class="media"> - <a class="pull-right" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin commodo. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. - </div> - </li> - </ul> - </div> -<pre class="prettyprint linenums"> -<ul class="media-list"> - <li class="media"> - <a class="pull-left" href="#"> - <img class="media-object" data-src="holder.js/64x64"> - </a> - <div class="media-body"> - <h4 class="media-heading">{{_i}}Media heading{{/i}}</h4> - ... - - <!-- Nested media object --> - <div class="media"> - ... - </div> - </div> - </li> -</ul> -</pre> - -</section> - - - - - - <!-- Miscellaneous - ================================================== --> - <section id="misc"> - <div class="page-header"> - <h1>{{_i}}Miscellaneous{{/i}} <small>{{_i}}Lightweight utility components{{/i}}</small></h1> - </div> - - <h2>{{_i}}Wells{{/i}}</h2> - <p>{{_i}}Use the well as a simple effect on an element to give it an inset effect.{{/i}}</p> - <div class="bs-docs-example"> - <div class="well"> - {{_i}}Look, I'm in a well!{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well"> - ... -</div> -</pre> - <h3>{{_i}}Optional classes{{/i}}</h3> - <p>{{_i}}Control padding and rounded corners with two optional modifier classes.{{/i}}</p> - <div class="bs-docs-example"> - <div class="well well-large"> - {{_i}}Look, I'm in a well!{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-large"> - ... -</div> -</pre> - <div class="bs-docs-example"> - <div class="well well-small"> - {{_i}}Look, I'm in a well!{{/i}} - </div> - </div> -<pre class="prettyprint linenums"> -<div class="well well-small"> - ... -</div> -</pre> - - <h2>{{_i}}Close icon{{/i}}</h2> - <p>{{_i}}Use the generic close icon for dismissing content like modals and alerts.{{/i}}</p> - <div class="bs-docs-example"> - <p><button class="close" style="float: none;">×</button></p> - </div> - <pre class="prettyprint linenums"><button class="close">&times;</button></pre> - <p>{{_i}}iOS devices require an <code>href="#"</code> for click events if you would rather use an anchor.{{/i}}</p> - <pre class="prettyprint linenums"><a class="close" href="#">&times;</a></pre> - - <h2>{{_i}}Helper classes{{/i}}</h2> - <p>{{_i}}Simple, focused classes for small display or behavior tweaks.{{/i}}</p> - - <h4>{{_i}}.pull-left{{/i}}</h4> - <p>{{_i}}Float an element left{{/i}}</p> -<pre class="prettyprint linenums"> -class="pull-left" -</pre> -<pre class="prettyprint linenums"> -.pull-left { - float: left; -} -</pre> - - <h4>{{_i}}.pull-right{{/i}}</h4> - <p>{{_i}}Float an element right{{/i}}</p> -<pre class="prettyprint linenums"> -class="pull-right" -</pre> -<pre class="prettyprint linenums"> -.pull-right { - float: right; -} -</pre> - - <h4>{{_i}}.muted{{/i}}</h4> - <p>{{_i}}Change an element's color to <code>#999</code>{{/i}}</p> -<pre class="prettyprint linenums"> -class="muted" -</pre> -<pre class="prettyprint linenums"> -.muted { - color: #999; -} -</pre> - - <h4>{{_i}}.clearfix{{/i}}</h4> - <p>{{_i}}Clear the <code>float</code> on any element{{/i}}</p> -<pre class="prettyprint linenums"> -class="clearfix" -</pre> -<pre class="prettyprint linenums"> -.clearfix { - *zoom: 1; - &:before, - &:after { - display: table; - content: ""; - } - &:after { - clear: both; - } -} -</pre> - - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/docs/templates/pages/customize.mustache b/docs/templates/pages/customize.mustache deleted file mode 100644 index 8d8a2f92a7ac86b0baa17924aa34534eb40ced1c..0000000000000000000000000000000000000000 --- a/docs/templates/pages/customize.mustache +++ /dev/null @@ -1,393 +0,0 @@ -<!-- Masthead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Customize and download{{/i}}</h1> - <p class="lead">{{_i}}<a href="https://github.com/twitter/bootstrap/zipball/master">Download Bootstrap</a> or customize variables, components, JavaScript plugins, and more.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#components"><i class="icon-chevron-right"></i> {{_i}}1. Choose components{{/i}}</a></li> - <li><a href="#plugins"><i class="icon-chevron-right"></i> {{_i}}2. Select jQuery plugins{{/i}}</a></li> - <li><a href="#variables"><i class="icon-chevron-right"></i> {{_i}}3. Customize variables{{/i}}</a></li> - <li><a href="#download"><i class="icon-chevron-right"></i> {{_i}}4. Download{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Customize form - ================================================== --> - <form> - <section class="download" id="components"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">{{_i}}Toggle all{{/i}}</a> - <h1> - {{_i}}1. Choose components{{/i}} - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <h3>{{_i}}Scaffolding{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="reset.less"> {{_i}}Normalize and reset{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="scaffolding.less"> {{_i}}Body type and links{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="grid.less"> {{_i}}Grid system{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="layouts.less"> {{_i}}Layouts{{/i}}</label> - <h3>{{_i}}Base CSS{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="type.less"> {{_i}}Headings, body, etc{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="code.less"> {{_i}}Code and pre{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="labels-badges.less"> {{_i}}Labels and badges{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="tables.less"> {{_i}}Tables{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="forms.less"> {{_i}}Forms{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="buttons.less"> {{_i}}Buttons{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="sprites.less"> {{_i}}Icons{{/i}}</label> - </div><!-- /span --> - <div class="span3"> - <h3>{{_i}}Components{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="button-groups.less"> {{_i}}Button groups and dropdowns{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navs.less"> {{_i}}Navs, tabs, and pills{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="navbar.less"> {{_i}}Navbar{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="breadcrumbs.less"> {{_i}}Breadcrumbs{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pagination.less"> {{_i}}Pagination{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="pager.less"> {{_i}}Pager{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="thumbnails.less"> {{_i}}Thumbnails{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="alerts.less"> {{_i}}Alerts{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="progress-bars.less"> {{_i}}Progress bars{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="hero-unit.less"> {{_i}}Hero unit{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="media.less"> {{_i}}Media component{{/i}}</label> - <h3>{{_i}}JS Components{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="tooltip.less"> {{_i}}Tooltips{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="popovers.less"> {{_i}}Popovers{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="modals.less"> {{_i}}Modals{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="dropdowns.less"> {{_i}}Dropdowns{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="accordion.less"> {{_i}}Collapse{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="carousel.less"> {{_i}}Carousel{{/i}}</label> - </div><!-- /span --> - <div class="span3"> - <h3>{{_i}}Miscellaneous{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="wells.less"> {{_i}}Wells{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="close.less"> {{_i}}Close icon{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="utilities.less"> {{_i}}Utilities{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="component-animations.less"> {{_i}}Component animations{{/i}}</label> - <h3>{{_i}}Responsive{{/i}}</h3> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-utilities.less"> {{_i}}Visible/hidden classes{{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-767px-max.less"> {{_i}}Narrow tablets and below (<767px){{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-768px-979px.less"> {{_i}}Tablets to desktops (767-979px){{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-1200px-min.less"> {{_i}}Large desktops (>1200px){{/i}}</label> - <label class="checkbox"><input checked="checked" type="checkbox" value="responsive-navbar.less"> {{_i}}Responsive navbar{{/i}}</label> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="plugins"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">{{_i}}Toggle all{{/i}}</a> - <h1> - {{_i}}2. Select jQuery plugins{{/i}} - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-transition.js"> - {{_i}}Transitions <small>(required for any animation)</small>{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-modal.js"> - {{_i}}Modals{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-dropdown.js"> - {{_i}}Dropdowns{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-scrollspy.js"> - {{_i}}Scrollspy{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tab.js"> - {{_i}}Togglable tabs{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-tooltip.js"> - {{_i}}Tooltips{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-popover.js"> - {{_i}}Popovers <small>(requires Tooltips)</small>{{/i}} - </label> - </div><!-- /span --> - <div class="span3"> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-affix.js"> - {{_i}}Affix{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-alert.js"> - {{_i}}Alert messages{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-button.js"> - {{_i}}Buttons{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-collapse.js"> - {{_i}}Collapse{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-carousel.js"> - {{_i}}Carousel{{/i}} - </label> - <label class="checkbox"> - <input type="checkbox" checked="true" value="bootstrap-typeahead.js"> - {{_i}}Typeahead{{/i}} - </label> - </div><!-- /span --> - <div class="span3"> - <h4 class="muted">{{_i}}Heads up!{{/i}}</h4> - <p class="muted">{{_i}}All checked plugins will be compiled into a single file, bootstrap.js. All plugins require the latest version of <a href="http://jquery.com/" target="_blank">jQuery</a> to be included.{{/i}}</p> - </div><!-- /span --> - </div><!-- /row --> - </section> - - - <section class="download" id="variables"> - <div class="page-header"> - <a class="btn btn-small pull-right toggle-all" href="#">{{_i}}Reset to defaults{{/i}}</a> - <h1> - {{_i}}3. Customize variables{{/i}} - </h1> - </div> - <div class="row download-builder"> - <div class="span3"> - <h3>{{_i}}Scaffolding{{/i}}</h3> - <label>@bodyBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@textColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - - <h3>{{_i}}Links{{/i}}</h3> - <label>@linkColor</label> - <input type="text" class="span3" placeholder="#08c"> - <label>@linkColorHover</label> - <input type="text" class="span3" placeholder="darken(@linkColor, 15%)"> - <h3>{{_i}}Colors{{/i}}</h3> - <label>@blue</label> - <input type="text" class="span3" placeholder="#049cdb"> - <label>@green</label> - <input type="text" class="span3" placeholder="#46a546"> - <label>@red</label> - <input type="text" class="span3" placeholder="#9d261d"> - <label>@yellow</label> - <input type="text" class="span3" placeholder="#ffc40d"> - <label>@orange</label> - <input type="text" class="span3" placeholder="#f89406"> - <label>@pink</label> - <input type="text" class="span3" placeholder="#c3325f"> - <label>@purple</label> - <input type="text" class="span3" placeholder="#7a43b6"> - - <h3>{{_i}}Sprites{{/i}}</h3> - <label>@iconSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings.png'"> - <label>@iconWhiteSpritePath</label> - <input type="text" class="span3" placeholder="'../img/glyphicons-halflings-white.png'"> - - <h3>{{_i}}Grid system{{/i}}</h3> - <label>@gridColumns</label> - <input type="text" class="span3" placeholder="12"> - <label>@gridColumnWidth</label> - <input type="text" class="span3" placeholder="60px"> - <label>@gridGutterWidth</label> - <input type="text" class="span3" placeholder="20px"> - <label>@gridColumnWidth1200</label> - <input type="text" class="span3" placeholder="70px"> - <label>@gridGutterWidth1200</label> - <input type="text" class="span3" placeholder="30px"> - <label>@gridColumnWidth768</label> - <input type="text" class="span3" placeholder="42px"> - <label>@gridGutterWidth768</label> - <input type="text" class="span3" placeholder="20px"> - - </div><!-- /span --> - <div class="span3"> - - <h3>{{_i}}Typography{{/i}}</h3> - <label>@sansFontFamily</label> - <input type="text" class="span3" placeholder="'Helvetica Neue', Helvetica, Arial, sans-serif"> - <label>@serifFontFamily</label> - <input type="text" class="span3" placeholder="Georgia, 'Times New Roman', Times, serif"> - <label>@monoFontFamily</label> - <input type="text" class="span3" placeholder="Menlo, Monaco, 'Courier New', monospace"> - - <label>@baseFontSize</label> - <input type="text" class="span3" placeholder="14px"> - <label>@baseFontFamily</label> - <input type="text" class="span3" placeholder="@sansFontFamily"> - <label>@baseLineHeight</label> - <input type="text" class="span3" placeholder="20px"> - - <label>@altFontFamily</label> - <input type="text" class="span3" placeholder="@serifFontFamily"> - <label>@headingsFontFamily</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@headingsFontWeight</label> - <input type="text" class="span3" placeholder="bold"> - <label>@headingsColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <label>@fontSizeLarge</label> - <input type="text" class="span3" placeholder="@baseFontSize * 1.25"> - <label>@fontSizeSmall</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.85"> - <label>@fontSizeMini</label> - <input type="text" class="span3" placeholder="@baseFontSize * 0.75"> - - <label>@paddingLarge</label> - <input type="text" class="span3" placeholder="11px 19px"> - <label>@paddingSmall</label> - <input type="text" class="span3" placeholder="2px 10px"> - <label>@paddingMini</label> - <input type="text" class="span3" placeholder="1px 6px"> - - <label>@baseBorderRadius</label> - <input type="text" class="span3" placeholder="4px"> - <label>@borderRadiusLarge</label> - <input type="text" class="span3" placeholder="6px"> - <label>@borderRadiusSmall</label> - <input type="text" class="span3" placeholder="3px"> - - <label>@heroUnitBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@heroUnitHeadingColor</label> - <input type="text" class="span3" placeholder="inherit"> - <label>@heroUnitLeadColor</label> - <input type="text" class="span3" placeholder="inherit"> - - <h3>{{_i}}Tables{{/i}}</h3> - <label>@tableBackground</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@tableBackgroundAccent</label> - <input type="text" class="span3" placeholder="#f9f9f9"> - <label>@tableBackgroundHover</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@tableBorder</label> - <input type="text" class="span3" placeholder="#ddd"> - - <h3>{{_i}}Forms{{/i}}</h3> - <label>@placeholderText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@inputBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@inputBorder</label> - <input type="text" class="span3" placeholder="#ccc"> - <label>@inputBorderRadius</label> - <input type="text" class="span3" placeholder="3px"> - <label>@inputDisabledBackground</label> - <input type="text" class="span3" placeholder="@grayLighter"> - <label>@formActionsBackground</label> - <input type="text" class="span3" placeholder="#f5f5f5"> - <label>@btnPrimaryBackground</label> - <input type="text" class="span3" placeholder="@linkColor"> - <label>@btnPrimaryBackgroundHighlight</label> - <input type="text" class="span3" placeholder="darken(@white, 10%)"> - - </div><!-- /span --> - <div class="span3"> - - <h3>{{_i}}Form states & alerts{{/i}}</h3> - <label>@warningText</label> - <input type="text" class="span3" placeholder="#c09853"> - <label>@warningBackground</label> - <input type="text" class="span3" placeholder="#fcf8e3"> - <label>@errorText</label> - <input type="text" class="span3" placeholder="#b94a48"> - <label>@errorBackground</label> - <input type="text" class="span3" placeholder="#f2dede"> - <label>@successText</label> - <input type="text" class="span3" placeholder="#468847"> - <label>@successBackground</label> - <input type="text" class="span3" placeholder="#dff0d8"> - <label>@infoText</label> - <input type="text" class="span3" placeholder="#3a87ad"> - <label>@infoBackground</label> - <input type="text" class="span3" placeholder="#d9edf7"> - - <h3>{{_i}}Navbar{{/i}}</h3> - <label>@navbarHeight</label> - <input type="text" class="span3" placeholder="40px"> - <label>@navbarBackground</label> - <input type="text" class="span3" placeholder="@grayDarker"> - <label>@navbarBackgroundHighlight</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@navbarText</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarBrandColor</label> - <input type="text" class="span3" placeholder="@navbarLinkColor"> - <label>@navbarLinkColor</label> - <input type="text" class="span3" placeholder="@grayLight"> - <label>@navbarLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarLinkColorActive</label> - <input type="text" class="span3" placeholder="@navbarLinkColorHover"> - <label>@navbarLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="transparent"> - <label>@navbarLinkBackgroundActive</label> - <input type="text" class="span3" placeholder="@navbarBackground"> - <label>@navbarSearchBackground</label> - <input type="text" class="span3" placeholder="lighten(@navbarBackground, 25%)"> - <label>@navbarSearchBackgroundFocus</label> - <input type="text" class="span3" placeholder="@white"> - <label>@navbarSearchBorder</label> - <input type="text" class="span3" placeholder="darken(@navbarSearchBackground, 30%)"> - <label>@navbarSearchPlaceholderColor</label> - <input type="text" class="span3" placeholder="#ccc"> - - <label>@navbarCollapseWidth</label> - <input type="text" class="span3" placeholder="979px"> - <label>@navbarCollapseDesktopWidth</label> - <input type="text" class="span3" placeholder="@navbarCollapseWidth + 1"> - - <h3>{{_i}}Dropdowns{{/i}}</h3> - <label>@dropdownBackground</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownBorder</label> - <input type="text" class="span3" placeholder="rgba(0,0,0,.2)"> - <label>@dropdownLinkColor</label> - <input type="text" class="span3" placeholder="@grayDark"> - <label>@dropdownLinkColorHover</label> - <input type="text" class="span3" placeholder="@white"> - <label>@dropdownLinkBackgroundHover</label> - <input type="text" class="span3" placeholder="@linkColor"> - </div><!-- /span --> - </div><!-- /row --> - </section> - - <section class="download" id="download"> - <div class="page-header"> - <h1> - {{_i}}4. Download{{/i}} - </h1> - </div> - <div class="download-btn"> - <a class="btn btn-primary" href="#" {{#production}}onclick="_gaq.push(['_trackEvent', 'Customize', 'Download', 'Customize and Download']);"{{/production}}>{{_i}}Customize and Download{{/i}}</a> - <h4>{{_i}}What's included?{{/i}}</h4> - <p>{{_i}}Downloads include compiled CSS, compiled and minified CSS, and compiled jQuery plugins, all nicely packed up into a zipball for your convenience.{{/i}}</p> - </div> - </section><!-- /download --> - </form> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/docs/templates/pages/extend.mustache b/docs/templates/pages/extend.mustache deleted file mode 100644 index b5c8d5747402ba6bd0e3557b3d83117648536ffb..0000000000000000000000000000000000000000 --- a/docs/templates/pages/extend.mustache +++ /dev/null @@ -1,161 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Extending Bootstrap{{/i}}</h1> - <p class="lead">{{_i}}Extend Bootstrap to take advantage of included styles and components, as well as LESS variables and mixins.{{/i}}</p> - <div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#built-with-less"><i class="icon-chevron-right"></i> {{_i}}Built with LESS{{/i}}</a></li> - <li><a href="#compiling"><i class="icon-chevron-right"></i> {{_i}}Compiling Bootstrap{{/i}}</a></li> - <li><a href="#static-assets"><i class="icon-chevron-right"></i> {{_i}}Use as static assets{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- BUILT WITH LESS - ================================================== --> - <section id="built-with-less"> - <div class="page-header"> - <h1>{{_i}}Built with LESS{{/i}}</h1> - </div> - - <img style="float: right; height: 36px; margin: 10px 20px 20px" src="assets/img/less-logo-large.png" alt="LESS CSS"> - <p class="lead">{{_i}}Bootstrap is made with LESS at its core, a dynamic stylesheet language created by our good friend, <a href="http://cloudhead.io">Alexis Sellier</a>. It makes developing systems-based CSS faster, easier, and more fun.{{/i}}</p> - - <h3>{{_i}}Why LESS?{{/i}}</h3> - <p>{{_i}}One of Bootstrap's creators wrote a quick <a href="http://www.wordsbyf.at/2012/03/08/why-less/">blog post about this</a>, summarized here:{{/i}}</p> - <ul> - <li>{{_i}}Bootstrap compiles faster ~6x faster with Less compared to Sass{{/i}}</li> - <li>{{_i}}Less is written in JavaScript, making it easier to us to dive in and patch compared to Ruby with Sass.{{/i}}</li> - <li>{{_i}}Less is more; we want to feel like we're writing CSS and making Bootstrap approachable to all.{{/i}}</li> - </ul> - - <h3>{{_i}}What's included?{{/i}}</h3> - <p>{{_i}}As an extension of CSS, LESS includes variables, mixins for reusable snippets of code, operations for simple math, nesting, and even color functions.{{/i}}</p> - - <h3>{{_i}}Learn more{{/i}}</h3> - <p>{{_i}}Visit the official website at <a href="http://lesscss.org">http://lesscss.org</a> to learn more.{{/i}}</p> - </section> - - - - <!-- COMPILING LESS AND BOOTSTRAP - ================================================== --> - <section id="compiling"> - <div class="page-header"> - <h1>{{_i}}Compiling Bootstrap with Less{{/i}}</h1> - </div> - - <p class="lead">{{_i}}Since our CSS is written with Less and utilizes variables and mixins, it needs to be compiled for final production implementation. Here's how.{{/i}}</p> - - <div class="alert alert-info"> - {{_i}}<strong>Note:</strong> If you're submitting a pull request to GitHub with modified CSS, you <strong>must</strong> recompile the CSS via any of these methods.{{/i}} - </div> - - <h2>{{_i}}Tools for compiling{{/i}}</h2> - - <h3>{{_i}}Command line{{/i}}</h3> - <p>{{_i}}Follow <a href="https://github.com/twitter/bootstrap#developers">the instructions in the project readme</a> on GitHub for compiling via command line.{{/i}}</p> - - <h3>{{_i}}JavaScript{{/i}}</h3> - <p>{{_i}}<a href="http://lesscss.org/">Download the latest Less.js</a> and include the path to it (and Bootstrap) in the <code><head></code>.{{/i}}</p> -<pre class="prettyprint"> -<link rel="stylesheet/less" href="/path/to/bootstrap.less"> -<script src="/path/to/less.js"></script> -</pre> - <p>{{_i}}To recompile the .less files, just save them and reload your page. Less.js compiles them and stores them in local storage.{{/i}}</p> - - <h3>{{_i}}Unofficial Mac app{{/i}}</h3> - <p>{{_i}}<a href="http://incident57.com/less/">The unofficial Mac app</a> watches directories of .less files and compiles the code to local files after every save of a watched .less file. If you like, you can toggle preferences in the app for automatic minifying and which directory the compiled files end up in.{{/i}}</p> - - <h3>{{_i}}More apps{{/i}}</h3> - <h4><a href="http://crunchapp.net/" target="_blank">Crunch</a></h4> - <p>{{_i}}Crunch is a great looking LESS editor and compiler built on Adobe Air.{{/i}}</p> - <h4><a href="http://incident57.com/codekit/" target="_blank">CodeKit</a></h4> - <p>{{_i}}Created by the same guy as the unofficial Mac app, CodeKit is a Mac app that compiles LESS, SASS, Stylus, and CoffeeScript.{{/i}}</p> - <h4><a href="http://wearekiss.com/simpless" target="_blank">Simpless</a></h4> - <p>{{_i}}Mac, Linux, and Windows app for drag and drop compiling of LESS files. Plus, the <a href="https://github.com/Paratron/SimpLESS" target="_blank">source code is on GitHub</a>.{{/i}}</p> - - </section> - - - - <!-- Static assets - ================================================== --> - <section id="static-assets"> - <div class="page-header"> - <h1>{{_i}}Use as static assets{{/i}}</h1> - </div> - <p class="lead">{{_i}}<a href="./getting-started.html">Quickly start</a> any web project by dropping in the compiled or minified CSS and JS. Layer on custom styles separately for easy upgrades and maintenance moving forward.{{/i}}</p> - - <h3>{{_i}}Setup file structure{{/i}}</h3> - <p>{{_i}}Download the latest compiled Bootstrap and place into your project. For example, you might have something like this:{{/i}}</p> -<pre> - <span class="icon-folder-open"></span> app/ - <span class="icon-folder-open"></span> layouts/ - <span class="icon-folder-open"></span> templates/ - <span class="icon-folder-open"></span> public/ - <span class="icon-folder-open"></span> css/ - <span class="icon-file"></span> bootstrap.min.css - <span class="icon-folder-open"></span> js/ - <span class="icon-file"></span> bootstrap.min.js - <span class="icon-folder-open"></span> img/ - <span class="icon-file"></span> glyphicons-halflings.png - <span class="icon-file"></span> glyphicons-halflings-white.png -</pre> - - <h3>{{_i}}Utilize starter template{{/i}}</h3> - <p>{{_i}}Copy the following base HTML to get started.{{/i}}</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - </body> -</html> -</pre> - - <h3>{{_i}}Layer on custom code{{/i}}</h3> - <p>{{_i}}Work in your custom CSS, JS, and more as necessary to make Bootstrap your own with your own separate CSS and JS files.{{/i}}</p> -<pre class="prettyprint linenums"> -<html> - <head> - <title>Bootstrap 101 Template</title> - <!-- Bootstrap --> - <link href="public/css/bootstrap.min.css" rel="stylesheet"> - <!-- Project --> - <link href="public/css/application.css" rel="stylesheet"> - </head> - <body> - <h1>Hello, world!</h1> - <!-- Bootstrap --> - <script src="public/js/bootstrap.min.js"></script> - <!-- Project --> - <script src="public/js/application.js"></script> - </body> -</html> -</pre> - - </section> - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/docs/templates/pages/getting-started.mustache b/docs/templates/pages/getting-started.mustache deleted file mode 100644 index ae1534ce36bfdfdf7a48e3c8a9a6c7fe4caa4413..0000000000000000000000000000000000000000 --- a/docs/templates/pages/getting-started.mustache +++ /dev/null @@ -1,256 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Getting started{{/i}}</h1> - <p class="lead">{{_i}}Overview of the project, its contents, and how to get started with a simple template.{{/i}}</p> - </div> -</header> - - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#download-bootstrap"><i class="icon-chevron-right"></i> {{_i}}Download{{/i}}</a></li> - <li><a href="#file-structure"><i class="icon-chevron-right"></i> {{_i}}File structure{{/i}}</a></li> - <li><a href="#contents"><i class="icon-chevron-right"></i> {{_i}}What's included{{/i}}</a></li> - <li><a href="#html-template"><i class="icon-chevron-right"></i> {{_i}}HTML template{{/i}}</a></li> - <li><a href="#examples"><i class="icon-chevron-right"></i> {{_i}}Examples{{/i}}</a></li> - <li><a href="#what-next"><i class="icon-chevron-right"></i> {{_i}}What next?{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Download - ================================================== --> - <section id="download-bootstrap"> - <div class="page-header"> - <h1>{{_i}}1. Download{{/i}}</h1> - </div> - <p class="lead">{{_i}}Before downloading, be sure to have a code editor (we recommend <a href="http://sublimetext.com/2">Sublime Text 2</a>) and some working knowledge of HTML and CSS. We won't walk through the source files here, but they are available for download. We'll focus on getting started with the compiled Bootstrap files.{{/i}}</p> - - <div class="row-fluid"> - <div class="span6"> - <h2>{{_i}}Download compiled{{/i}}</h2> - <p>{{_i}}<strong>Fastest way to get started:</strong> get the compiled and minified versions of our CSS, JS, and images. No docs or original source files.{{/i}}</p> - <p><a class="btn btn-large btn-primary" href="assets/bootstrap.zip" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download compiled']);"{{/production}}>{{_i}}Download Bootstrap{{/i}}</a></p> - </div> - <div class="span6"> - <h2>Download source</h2> - <p>Get the original files for all CSS and JavaScript, along with a local copy of the docs by downloading the latest version directly from GitHub.</p> - <p><a class="btn btn-large" href="https://github.com/twitter/bootstrap/zipball/master" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Download', 'Download source']);"{{/production}}>{{_i}}Download Bootstrap source{{/i}}</a></p> - </div> - </div> - </section> - - - - <!-- File structure - ================================================== --> - <section id="file-structure"> - <div class="page-header"> - <h1>{{_i}}2. File structure{{/i}}</h1> - </div> - <p class="lead">{{_i}}Within the download you'll find the following file structure and contents, logically grouping common assets and providing both compiled and minified variations.{{/i}}</p> - <p>{{_i}}Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:{{/i}}</p> -<pre class="prettyprint"> - bootstrap/ - ├── css/ - │ ├── bootstrap.css - │ ├── bootstrap.min.css - ├── js/ - │ ├── bootstrap.js - │ ├── bootstrap.min.js - └── img/ - ├── glyphicons-halflings.png - └── glyphicons-halflings-white.png -</pre> - <p>{{_i}}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.{{/i}}</p> - <p>{{_i}}Please note that all JavaScript plugins require jQuery to be included.{{/i}}</p> - </section> - - - - <!-- Contents - ================================================== --> - <section id="contents"> - <div class="page-header"> - <h1>{{_i}}3. What's included{{/i}}</h1> - </div> - <p class="lead">{{_i}}Bootstrap comes equipped with HTML, CSS, and JS for all sorts of things, but they can be summarized with a handful of categories visible at the top of the <a href="http://getbootstrap.com">Bootstrap documentation</a>.{{/i}}</p> - - <h2>{{_i}}Docs sections{{/i}}</h2> - <h4><a href="http://twitter.github.com/bootstrap/scaffolding.html">{{_i}}Scaffolding{{/i}}</a></h4> - <p>{{_i}}Global styles for the body to reset type and background, link styles, grid system, and two simple layouts.{{/i}}</p> - <h4><a href="http://twitter.github.com/bootstrap/base-css.html">{{_i}}Base CSS{{/i}}</a></h4> - <p>{{_i}}Styles for common HTML elements like typography, code, tables, forms, and buttons. Also includes <a href="http://glyphicons.com">Glyphicons</a>, a great little icon set.{{/i}}</p> - <h4><a href="http://twitter.github.com/bootstrap/components.html">{{_i}}Components{{/i}}</a></h4> - <p>{{_i}}Basic styles for common interface components like tabs and pills, navbar, alerts, page headers, and more.{{/i}}</p> - <h4><a href="http://twitter.github.com/bootstrap/javascript.html">{{_i}}JavaScript plugins{{/i}}</a></h4> - <p>{{_i}}Similar to Components, these JavaScript plugins are interactive components for things like tooltips, popovers, modals, and more.{{/i}}</p> - - <h2>{{_i}}List of components{{/i}}</h2> - <p>{{_i}}Together, the <strong>Components</strong> and <strong>JavaScript plugins</strong> sections provide the following interface elements:{{/i}}</p> - <ul> - <li>{{_i}}Button groups{{/i}}</li> - <li>{{_i}}Button dropdowns{{/i}}</li> - <li>{{_i}}Navigational tabs, pills, and lists{{/i}}</li> - <li>{{_i}}Navbar{{/i}}</li> - <li>{{_i}}Labels{{/i}}</li> - <li>{{_i}}Badges{{/i}}</li> - <li>{{_i}}Page headers and hero unit{{/i}}</li> - <li>{{_i}}Thumbnails{{/i}}</li> - <li>{{_i}}Alerts{{/i}}</li> - <li>{{_i}}Progress bars{{/i}}</li> - <li>{{_i}}Modals{{/i}}</li> - <li>{{_i}}Dropdowns{{/i}}</li> - <li>{{_i}}Tooltips{{/i}}</li> - <li>{{_i}}Popovers{{/i}}</li> - <li>{{_i}}Accordion{{/i}}</li> - <li>{{_i}}Carousel{{/i}}</li> - <li>{{_i}}Typeahead{{/i}}</li> - </ul> - <p>{{_i}}In future guides, we may walk through these components individually in more detail. Until then, look for each of these in the documentation for information on how to utilize and customize them.{{/i}}</p> - </section> - - - - <!-- HTML template - ================================================== --> - <section id="html-template"> - <div class="page-header"> - <h1>{{_i}}4. Basic HTML template{{/i}}</h1> - </div> - <p class="lead">{{_i}}With a brief intro into the contents out of the way, we can focus on putting Bootstrap to use. To do that, we'll utilize a basic HTML template that includes everything we mentioned in the <a href="./getting-started.html#file-structure">File structure</a>.{{/i}}</p> - <p>{{_i}}Now, here's a look at a <strong>typical HTML file</strong>:{{/i}}</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - </body> -</html> -</pre> - <p>{{_i}}To make this <strong>a Bootstrapped template</strong>, just include the appropriate CSS and JS files:{{/i}}</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html> - <head> - <title>Bootstrap 101 Template</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <!-- Bootstrap --> - <link href="css/bootstrap.min.css" rel="stylesheet" media="screen"> - </head> - <body> - <h1>Hello, world!</h1> - <script src="http://code.jquery.com/jquery.js"></script> - <script src="js/bootstrap.min.js"></script> - </body> -</html> -</pre> - <p>{{_i}}<strong>And you're set!</strong> With those two files added, you can begin to develop any site or application with Bootstrap.{{/i}}</p> - </section> - - - - <!-- Examples - ================================================== --> - <section id="examples"> - <div class="page-header"> - <h1>{{_i}}5. Examples{{/i}}</h1> - </div> - <p class="lead">{{_i}}Move beyond the base template with a few example layouts. We encourage folks to iterate on these examples and not simply use them as an end result.{{/i}}</p> - <ul class="thumbnails bootstrap-examples"> - <li class="span3"> - <a class="thumbnail" href="examples/starter-template.html"> - <img src="assets/img/examples/bootstrap-example-starter.png" alt=""> - </a> - <h4>{{_i}}Starter template{{/i}}</h4> - <p>{{_i}}A barebones HTML document with all the Bootstrap CSS and JavaScript included.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/hero.html"> - <img src="assets/img/examples/bootstrap-example-marketing.png" alt=""> - </a> - <h4>{{_i}}Basic marketing site{{/i}}</h4> - <p>{{_i}}Featuring a hero unit for a primary message and three supporting elements.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/fluid.html"> - <img src="assets/img/examples/bootstrap-example-fluid.png" alt=""> - </a> - <h4>{{_i}}Fluid layout{{/i}}</h4> - <p>{{_i}}Uses our new responsive, fluid grid system to create a seamless liquid layout.{{/i}}</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/marketing-narrow.html"> - <img src="assets/img/examples/bootstrap-example-marketing-narrow.png" alt=""> - </a> - <h4>{{_i}}Narrow marketing{{/i}}</h4> - <p>{{_i}}Slim, lightweight marketing template for small projects or teams.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/justified-nav.html"> - <img src="assets/img/examples/bootstrap-example-justified-nav.png" alt=""> - </a> - <h4>{{_i}}Justified nav{{/i}}</h4> - <p>{{_i}}Marketing page with equal-width navigation links in a modified navbar.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/signin.html"> - <img src="assets/img/examples/bootstrap-example-signin.png" alt=""> - </a> - <h4>{{_i}}Sign in{{/i}}</h4> - <p>{{_i}}Barebones sign in form with custom, larger form controls and a flexible layout.{{/i}}</p> - </li> - - <li class="span3"> - <a class="thumbnail" href="examples/sticky-footer.html"> - <img src="assets/img/examples/bootstrap-example-sticky-footer.png" alt=""> - </a> - <h4>{{_i}}Sticky footer{{/i}}</h4> - <p>{{_i}}Pin a fixed-height footer to the bottom of the user's viewport.{{/i}}</p> - </li> - <li class="span3"> - <a class="thumbnail" href="examples/carousel.html"> - <img src="assets/img/examples/bootstrap-example-carousel.png" alt=""> - </a> - <h4>{{_i}}Carousel jumbotron{{/i}}</h4> - <p>{{_i}}A more interactive riff on the basic marketing site featuring a prominent carousel.{{/i}}</p> - </li> - </ul> - </section> - - - - - <!-- Next - ================================================== --> - <section id="what-next"> - <div class="page-header"> - <h1>{{_i}}What next?{{/i}}</h1> - </div> - <p class="lead">{{_i}}Head to the docs for information, examples, and code snippets, or take the next leap and customize Bootstrap for any upcoming project.{{/i}}</p> - <a class="btn btn-large btn-primary" href="./scaffolding.html" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Next steps', 'Visit docs']);"{{/production}}>{{_i}}Visit the Bootstrap docs{{/i}}</a> - <a class="btn btn-large" href="./customize.html" style="margin-left: 5px;" {{#production}}onclick="_gaq.push(['_trackEvent', 'Getting started', 'Next steps', 'Customize']);"{{/production}}>{{_i}}Customize Bootstrap{{/i}}</a> - </section> - - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/docs/templates/pages/index.mustache b/docs/templates/pages/index.mustache deleted file mode 100644 index 679236bf6e82991ea4dcf9bd3ac889c1c2b9aab2..0000000000000000000000000000000000000000 --- a/docs/templates/pages/index.mustache +++ /dev/null @@ -1,100 +0,0 @@ -<div class="jumbotron masthead"> - <div class="container"> - <h1>{{_i}}Bootstrap{{/i}}</h1> - <p>{{_i}}Sleek, intuitive, and powerful front-end framework for faster and easier web development.{{/i}}</p> - <p> - <a href="assets/bootstrap.zip" class="btn btn-primary btn-large" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Download', 'Download 2.3.1']);"{{/production}}>{{_i}}Download Bootstrap{{/i}}</a> - </p> - <ul class="masthead-links"> - <li> - <a href="http://github.com/twitter/bootstrap" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'GitHub project']);"{{/production}}>{{_i}}GitHub project{{/i}}</a> - </li> - <li> - <a href="./getting-started.html#examples" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Examples']);"{{/production}}>{{_i}}Examples{{/i}}</a> - </li> - <li> - <a href="./extend.html" {{#production}}onclick="_gaq.push(['_trackEvent', 'Jumbotron actions', 'Jumbotron links', 'Extend']);"{{/production}}>{{_i}}Extend{{/i}}</a> - </li> - <li> - {{_i}}Version 2.3.1{{/i}} - </li> - </ul> - </div> -</div> - -<div class="bs-docs-social"> - <div class="container"> - <ul class="bs-docs-social-buttons"> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=watch&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="100px" height="20px"></iframe> - </li> - <li> - <iframe class="github-btn" src="http://ghbtns.com/github-btn.html?user=twitter&repo=bootstrap&type=fork&count=true" allowtransparency="true" frameborder="0" scrolling="0" width="102px" height="20px"></iframe> - </li> - <li class="follow-btn"> - <a href="https://twitter.com/twbootstrap" class="twitter-follow-button" data-link-color="#0069D6" data-show-count="true">{{_i}}Follow @twbootstrap{{/i}}</a> - </li> - <li class="tweet-btn"> - <a href="https://twitter.com/share" class="twitter-share-button" data-url="http://twitter.github.com/bootstrap/" data-count="horizontal" data-via="twbootstrap" data-related="mdo:Creator of Twitter Bootstrap">Tweet</a> - </li> - </ul> - </div> -</div> - -<div class="container"> - - <div class="marketing"> - - <h1>{{_i}}Introducing Bootstrap.{{/i}}</h1> - <p class="marketing-byline">{{_i}}Need reasons to love Bootstrap? Look no further.{{/i}}</p> - - <div class="row-fluid"> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-twitter-github.png"> - <h2>{{_i}}By nerds, for nerds.{{/i}}</h2> - <p>{{_i}}Built at Twitter by <a href="http://twitter.com/mdo">@mdo</a> and <a href="http://twitter.com/fat">@fat</a>, Bootstrap utilizes <a href="http://lesscss.org">LESS CSS</a>, is compiled via <a href="http://nodejs.org">Node</a>, and is managed through <a href="http://github.com">GitHub</a> to help nerds do awesome stuff on the web.{{/i}}</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-responsive-illustrations.png"> - <h2>{{_i}}Made for everyone.{{/i}}</h2> - <p>{{_i}}Bootstrap was made to not only look and behave great in the latest desktop browsers (as well as IE7!), but in tablet and smartphone browsers via <a href="./scaffolding.html#responsive">responsive CSS</a> as well.{{/i}}</p> - </div> - <div class="span4"> - <img class="marketing-img" src="assets/img/bs-docs-bootstrap-features.png"> - <h2>{{_i}}Packed with features.{{/i}}</h2> - <p>{{_i}}A 12-column responsive <a href="./scaffolding.html#gridSystem">grid</a>, dozens of components, <a href="./javascript.html">JavaScript plugins</a>, typography, form controls, and even a <a href="./customize.html">web-based Customizer</a> to make Bootstrap your own.{{/i}}</p> - </div> - </div> - - <hr class="soften"> - - <h1>{{_i}}Built with Bootstrap.{{/i}}</h1> - <p class="marketing-byline">{{_i}}For even more sites built with Bootstrap, <a href="http://builtwithbootstrap.tumblr.com/" target="_blank">visit the unofficial Tumblr</a> or <a href="./getting-started.html#examples">browse the examples</a>.{{/i}}</p> - <div class="row-fluid"> - <ul class="thumbnails example-sites"> - <li class="span3"> - <a class="thumbnail" href="http://soundready.fm/" target="_blank"> - <img src="assets/img/example-sites/soundready.png" alt="SoundReady.fm"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://kippt.com/" target="_blank"> - <img src="assets/img/example-sites/kippt.png" alt="Kippt"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.gathercontent.com/" target="_blank"> - <img src="assets/img/example-sites/gathercontent.png" alt="Gather Content"> - </a> - </li> - <li class="span3"> - <a class="thumbnail" href="http://www.jshint.com/" target="_blank"> - <img src="assets/img/example-sites/jshint.png" alt="JS Hint"> - </a> - </li> - </ul> - </div> - - </div>{{! /.marketing }} - -</div>{{! /.container }} diff --git a/docs/templates/pages/javascript.mustache b/docs/templates/pages/javascript.mustache deleted file mode 100644 index 744988f4b457d627ca92eb4fb41f1912e92b7dff..0000000000000000000000000000000000000000 --- a/docs/templates/pages/javascript.mustache +++ /dev/null @@ -1,1660 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead"> - <div class="container"> - <h1>{{_i}}JavaScript{{/i}}</h1> - <p class="lead">{{_i}}Bring Bootstrap's components to life—now with 13 custom jQuery plugins.{{/i}} - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#overview"><i class="icon-chevron-right"></i> {{_i}}Overview{{/i}}</a></li> - <li><a href="#transitions"><i class="icon-chevron-right"></i> {{_i}}Transitions{{/i}}</a></li> - <li><a href="#modals"><i class="icon-chevron-right"></i> {{_i}}Modal{{/i}}</a></li> - <li><a href="#dropdowns"><i class="icon-chevron-right"></i> {{_i}}Dropdown{{/i}}</a></li> - <li><a href="#scrollspy"><i class="icon-chevron-right"></i> {{_i}}Scrollspy{{/i}}</a></li> - <li><a href="#tabs"><i class="icon-chevron-right"></i> {{_i}}Tab{{/i}}</a></li> - <li><a href="#tooltips"><i class="icon-chevron-right"></i> {{_i}}Tooltip{{/i}}</a></li> - <li><a href="#popovers"><i class="icon-chevron-right"></i> {{_i}}Popover{{/i}}</a></li> - <li><a href="#alerts"><i class="icon-chevron-right"></i> {{_i}}Alert{{/i}}</a></li> - <li><a href="#buttons"><i class="icon-chevron-right"></i> {{_i}}Button{{/i}}</a></li> - <li><a href="#collapse"><i class="icon-chevron-right"></i> {{_i}}Collapse{{/i}}</a></li> - <li><a href="#carousel"><i class="icon-chevron-right"></i> {{_i}}Carousel{{/i}}</a></li> - <li><a href="#typeahead"><i class="icon-chevron-right"></i> {{_i}}Typeahead{{/i}}</a></li> - <li><a href="#affix"><i class="icon-chevron-right"></i> {{_i}}Affix{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - <!-- Overview - ================================================== --> - <section id="overview"> - <div class="page-header"> - <h1>{{_i}}JavaScript in Bootstrap{{/i}}</h1> - </div> - - <h3>{{_i}}Individual or compiled{{/i}}</h3> - <p>{{_i}}Plugins can be included individually (though some have required dependencies), or all at once. Both <strong>bootstrap.js</strong> and <strong>bootstrap.min.js</strong> contain all plugins in a single file.{{/i}}</p> - - <h3>{{_i}}Data attributes{{/i}}</h3> - <p>{{_i}}You can use all Bootstrap plugins purely through the markup API without writing a single line of JavaScript. This is Bootstrap's first class API and should be your first consideration when using a plugin.{{/i}}</p> - - <p>{{_i}}That said, in some situations it may be desirable to turn this functionality off. Therefore, we also provide the ability to disable the data attribute API by unbinding all events on the body namespaced with `'data-api'`. This looks like this:{{/i}} - <pre class="prettyprint linenums">$('body').off('.data-api')</pre> - - <p>{{_i}}Alternatively, to target a specific plugin, just include the plugin's name as a namespace along with the data-api namespace like this:{{/i}}</p> - <pre class="prettyprint linenums">$('body').off('.alert.data-api')</pre> - - <h3>{{_i}}Programmatic API{{/i}}</h3> - <p>{{_i}}We also believe you should be able to use all Bootstrap plugins purely through the JavaScript API. All public APIs are single, chainable methods, and return the collection acted upon.{{/i}}</p> - <pre class="prettyprint linenums">$(".btn.danger").button("toggle").addClass("fat")</pre> - <p>{{_i}}All methods should accept an optional options object, a string which targets a particular method, or nothing (which initiates a plugin with default behavior):{{/i}}</p> -<pre class="prettyprint linenums"> -$("#myModal").modal() // initialized with defaults -$("#myModal").modal({ keyboard: false }) // initialized with no keyboard -$("#myModal").modal('show') // initializes and invokes show immediately</p> -</pre> - <p>{{_i}}Each plugin also exposes its raw constructor on a `Constructor` property: <code>$.fn.popover.Constructor</code>. If you'd like to get a particular plugin instance, retrieve it directly from an element: <code>$('[rel=popover]').data('popover')</code>.{{/i}}</p> - - <h3>{{_i}}No Conflict{{/i}}</h3> - <p>{{_i}}Sometimes it is necessary to use Bootstrap plugins with other UI frameworks. In these circumstances, namespace collisions can occasionally occur. If this happens, you may call <code>.noConflict</code> on the plugin you wish to revert the value of.{{/i}}</p> - -<pre class="prettyprint linenums"> -var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value -$.fn.bootstrapBtn = bootstrapButton // give $().bootstrapBtn the bootstrap functionality -</pre> - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. <code>show</code>) is triggered at the start of an event, and its past participle form (ex. <code>shown</code>) is trigger on the completion of an action.{{/i}}</p> - <p>{{_i}}All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myModal').on('show', function (e) { - if (!data) return e.preventDefault() // stops modal from being shown -}) -</pre> - </section> - - - - <!-- Transitions - ================================================== --> - <section id="transitions"> - <div class="page-header"> - <h1>{{_i}}Transitions{{/i}} <small>bootstrap-transition.js</small></h1> - </div> - <h3>{{_i}}About transitions{{/i}}</h3> - <p>{{_i}}For simple transition effects, include <strong>bootstrap-transition.js</strong> once alongside the other JS files. If you're using the compiled (or minified) <strong>bootstrap.js</strong>, there is no need to include this—it's already there.{{/i}}</p> - <h3>{{_i}}Use cases{{/i}}</h3> - <p>{{_i}}A few examples of the transition plugin:{{/i}}</p> - <ul> - <li>{{_i}}Sliding or fading in modals{{/i}}</li> - <li>{{_i}}Fading out tabs{{/i}}</li> - <li>{{_i}}Fading out alerts{{/i}}</li> - <li>{{_i}}Sliding carousel panes{{/i}}</li> - </ul> - - {{! Ideas: include docs for .fade.in, .slide.in, etc }} - </section> - - - - <!-- Modal - ================================================== --> - <section id="modals"> - <div class="page-header"> - <h1>{{_i}}Modals{{/i}} <small>bootstrap-modal.js</small></h1> - </div> - - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.{{/i}}</p> - - <h3>{{_i}}Static example{{/i}}</h3> - <p>{{_i}}A rendered modal with header, body, and set of actions in the footer.{{/i}}</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <div class="modal" style="position: relative; top: auto; left: auto; right: auto; margin: 0 auto 20px; z-index: 1; max-width: 100%;"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3>{{_i}}Modal header{{/i}}</h3> - </div> - <div class="modal-body"> - <p>{{_i}}One fine body…{{/i}}</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">{{_i}}Close{{/i}}</a> - <a href="#" class="btn btn-primary">{{_i}}Save changes{{/i}}</a> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="modal hide fade"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button> - <h3>{{_i}}Modal header{{/i}}</h3> - </div> - <div class="modal-body"> - <p>{{_i}}One fine body…{{/i}}</p> - </div> - <div class="modal-footer"> - <a href="#" class="btn">{{_i}}Close{{/i}}</a> - <a href="#" class="btn btn-primary">{{_i}}Save changes{{/i}}</a> - </div> -</div> -</pre> - - <h3>{{_i}}Live demo{{/i}}</h3> - <p>{{_i}}Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.{{/i}}</p> - <!-- sample modal content --> - <div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">{{_i}}Modal Heading{{/i}}</h3> - </div> - <div class="modal-body"> - <h4>{{_i}}Text in a modal{{/i}}</h4> - <p>Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem.</p> - - <h4>{{_i}}Popover in a modal{{/i}}</h4> - <p>{{_i}}This <a href="#" role="button" class="btn popover-test" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">button</a> should trigger a popover on click.{{/i}}</p> - - <h4>{{_i}}Tooltips in a modal{{/i}}</h4> - <p>{{_i}}<a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> should have tooltips on hover.{{/i}}</p> - - <hr> - - <h4>{{_i}}Overflowing text to show optional scrollbar{{/i}}</h4> - <p>{{_i}}We set a fixed <code>max-height</code> on the <code>.modal-body</code>. Watch it overflow with all this extra lorem ipsum text we've included.{{/i}}</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - <p>Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</p> - <p>Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.</p> - <p>Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal">{{_i}}Close{{/i}}</button> - <button class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - </div> - </div> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">{{_i}}Launch demo modal{{/i}}</a> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<!-- Button to trigger modal --> -<a href="#myModal" role="button" class="btn" data-toggle="modal">{{_i}}Launch demo modal{{/i}}</a> - -<!-- Modal --> -<div id="myModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> - <div class="modal-header"> - <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button> - <h3 id="myModalLabel">Modal header</h3> - </div> - <div class="modal-body"> - <p>{{_i}}One fine body…{{/i}}</p> - </div> - <div class="modal-footer"> - <button class="btn" data-dismiss="modal" aria-hidden="true">{{_i}}Close{{/i}}</button> - <button class="btn btn-primary">{{_i}}Save changes{{/i}}</button> - </div> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Activate a modal without writing JavaScript. Set <code>data-toggle="modal"</code> on a controller element, like a button, along with a <code>data-target="#foo"</code> or <code>href="#foo"</code> to target a specific modal to toggle.{{/i}}</p> - <pre class="prettyprint linenums"><button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button></pre> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call a modal with id <code>myModal</code> with a single line of JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal(options)</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-backdrop=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}backdrop{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>{{_i}}true{{/i}}</td> - <td>{{_i}}Includes a modal-backdrop element. Alternatively, specify <code>static</code> for a backdrop which doesn't close the modal on click.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}keyboard{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>{{_i}}true{{/i}}</td> - <td>{{_i}}Closes the modal when escape key is pressed{{/i}}</td> - </tr> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>{{_i}}true{{/i}}</td> - <td>{{_i}}Shows the modal when initialized.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}remote{{/i}}</td> - <td>{{_i}}path{{/i}}</td> - <td>{{_i}}false{{/i}}</td> - <td><p>{{_i}}If a remote url is provided, content will be loaded via jQuery's <code>load</code> method and injected into the <code>.modal-body</code>. If you're using the data api, you may alternatively use the <code>href</code> tag to specify the remote source. An example of this is shown below:{{/i}}</p> - <pre class="prettyprint linenums"><code><a data-toggle="modal" href="remote.html" data-target="#modal">click me</a></code></pre></td> - </tr> - </tbody> - </table> - - <h3{{_i}}>Methods{{/i}}</h3> - <h4>.modal({{_i}}options{{/i}})</h4> - <p>{{_i}}Activates your content as a modal. Accepts an optional options <code>object</code>.{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myModal').modal({ - keyboard: false -}) -</pre> - <h4>.modal('toggle')</h4> - <p>{{_i}}Manually toggles a modal.{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal('toggle')</pre> - <h4>.modal('show')</h4> - <p>{{_i}}Manually opens a modal.{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal('show')</pre> - <h4>.modal('hide')</h4> - <p>{{_i}}Manually hides a modal.{{/i}}</p> - <pre class="prettyprint linenums">$('#myModal').modal('hide')</pre> - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's modal class exposes a few events for hooking into modal functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>show</code> instance method is called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}shown{{/i}}</td> - <td>{{_i}}This event is fired when the modal has been made visible to the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - <tr> - <td>{{_i}}hide{{/i}}</td> - <td>{{_i}}This event is fired immediately when the <code>hide</code> instance method has been called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}hidden{{/i}}</td> - <td>{{_i}}This event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myModal').on('hidden', function () { - // {{_i}}do something…{{/i}} -}) -</pre> - </section> - - - - <!-- Dropdowns - ================================================== --> - <section id="dropdowns"> - <div class="page-header"> - <h1>{{_i}}Dropdowns{{/i}} <small>bootstrap-dropdown.js</small></h1> - </div> - - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Add dropdown menus to nearly anything with this simple plugin, including the navbar, tabs, and pills.{{/i}}</p> - - <h3>{{_i}}Within a navbar{{/i}}</h3> - <div class="bs-docs-example"> - <div id="navbar-example" class="navbar navbar-static"> - <div class="navbar-inner"> - <div class="container" style="width: auto;"> - <a class="brand" href="#">{{_i}}Project Name{{/i}}</a> - <ul class="nav" role="navigation"> - <li class="dropdown"> - <a id="drop1" href="#" role="button" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop1"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="http://google.com">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#anotherAction">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - <li class="dropdown"> - <a href="#" id="drop2" role="button" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown 2 {{/i}}<b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop2"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li id="fat-menu" class="dropdown"> - <a href="#" id="drop3" role="button" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown 3{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu" role="menu" aria-labelledby="drop3"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> <!-- /navbar-example --> - </div> {{! /example }} - - <h3>{{_i}}Within tabs{{/i}}</h3> - <div class="bs-docs-example"> - <ul class="nav nav-pills"> - <li class="active"><a href="#">{{_i}}Regular link{{/i}}</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop4" role="button" data-toggle="dropdown" href="#">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul id="menu1" class="dropdown-menu" role="menu" aria-labelledby="drop4"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">{{_i}}Dropdown 2{{/i}} <b class="caret"></b></a> - <ul id="menu2" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - <li class="dropdown"> - <a class="dropdown-toggle" id="drop5" role="button" data-toggle="dropdown" href="#">{{_i}}Dropdown 3{{/i}} <b class="caret"></b></a> - <ul id="menu3" class="dropdown-menu" role="menu" aria-labelledby="drop5"> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Another action{{/i}}</a></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Something else here{{/i}}</a></li> - <li role="presentation" class="divider"></li> - <li role="presentation"><a role="menuitem" tabindex="-1" href="#">{{_i}}Separated link{{/i}}</a></li> - </ul> - </li> - </ul> <!-- /tabs --> - </div> {{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Add <code>data-toggle="dropdown"</code> to a link or button to toggle a dropdown.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#">Dropdown trigger</a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - </ul> -</div> -</pre> - <p>{{_i}}To keep URLs intact, use the <code>data-target</code> attribute instead of <code>href="#"</code>.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="dropdown"> - <a class="dropdown-toggle" id="dLabel" role="button" data-toggle="dropdown" data-target="#" href="/page.html"> - {{_i}}Dropdown{{/i}} - <b class="caret"></b> - </a> - <ul class="dropdown-menu" role="menu" aria-labelledby="dLabel"> - ... - </ul> -</div> -</pre> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the dropdowns via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('.dropdown-toggle').dropdown()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p><em>{{_i}}None{{/i}}</em></p> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().dropdown('toggle')</h4> - <p>{{_i}}A programmatic api for toggling menus for a given navbar or tabbed navigation.{{/i}}</p> - </section> - - - - <!-- ScrollSpy - ================================================== --> - <section id="scrollspy"> - <div class="page-header"> - <h1>{{_i}}ScrollSpy{{/i}} <small>bootstrap-scrollspy.js</small></h1> - </div> - - - <h2>{{_i}}Example in navbar{{/i}}</h2> - <p>{{_i}}The ScrollSpy plugin is for automatically updating nav targets based on scroll position. Scroll the area below the navbar and watch the active class change. The dropdown sub items will be highlighted as well.{{/i}}</p> - <div class="bs-docs-example"> - <div id="navbarExample" class="navbar navbar-static"> - <div class="navbar-inner"> - <div class="container" style="width: auto;"> - <a class="brand" href="#">{{_i}}Project Name{{/i}}</a> - <ul class="nav"> - <li><a href="#fat">@fat</a></li> - <li><a href="#mdo">@mdo</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#one">{{_i}}one{{/i}}</a></li> - <li><a href="#two">{{_i}}two{{/i}}</a></li> - <li class="divider"></li> - <li><a href="#three">{{_i}}three{{/i}}</a></li> - </ul> - </li> - </ul> - </div> - </div> - </div> - <div data-spy="scroll" data-target="#navbarExample" 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> - <p>Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck, mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.</p> - <h4 id="one">one</h4> - <p>Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.</p> - <h4 id="two">two</h4> - <p>In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam. Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud mlkshk brooklyn nesciunt.</p> - <h4 id="three">three</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> - <p>Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda. Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit. VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats. - </p> - </div> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}To easily add scrollspy behavior to your topbar navigation, just add <code>data-spy="scroll"</code> to the element you want to spy on (most typically this would be the body) and <code>data-target=".navbar"</code> to select which nav to use. You'll want to use scrollspy with a <code>.nav</code> component.{{/i}}</p> - <pre class="prettyprint linenums"><body data-spy="scroll" data-target=".navbar">...</body></pre> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the scrollspy via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#navbar').scrollspy()</pre> - - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}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>.{{/i}} - </div> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.scrollspy('refresh')</h4> - <p>{{_i}}When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:{{/i}}</p> -<pre class="prettyprint linenums"> -$('[data-spy="scroll"]').each(function () { - var $spy = $(this).scrollspy('refresh') -}); -</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}offset{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>{{_i}}10{{/i}}</td> - <td>{{_i}}Pixels to offset from top when calculating position of scroll.{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Events{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}activate{{/i}}</td> - <td>{{_i}}This event fires whenever a new item becomes activated by the scrollspy.{{/i}}</td> - </tr> - </tbody> - </table> - </section> - - - - <!-- Tabs - ================================================== --> - <section id="tabs"> - <div class="page-header"> - <h1>{{_i}}Togglable tabs{{/i}} <small>bootstrap-tab.js</small></h1> - </div> - - - <h2>{{_i}}Example tabs{{/i}}</h2> - <p>{{_i}}Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.{{/i}}</p> - <div class="bs-docs-example"> - <ul id="myTab" class="nav nav-tabs"> - <li class="active"><a href="#home" data-toggle="tab">{{_i}}Home{{/i}}</a></li> - <li><a href="#profile" data-toggle="tab">{{_i}}Profile{{/i}}</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">{{_i}}Dropdown{{/i}} <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#dropdown1" data-toggle="tab">@fat</a></li> - <li><a href="#dropdown2" data-toggle="tab">@mdo</a></li> - </ul> - </li> - </ul> - <div id="myTabContent" class="tab-content"> - <div class="tab-pane fade in active" id="home"> - <p>Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.</p> - </div> - <div class="tab-pane fade" id="profile"> - <p>Food truck fixie locavore, accusamus mcsweeney's marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.</p> - </div> - <div class="tab-pane fade" id="dropdown1"> - <p>Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.</p> - </div> - <div class="tab-pane fade" id="dropdown2"> - <p>Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.</p> - </div> - </div> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable tabbable tabs via JavaScript (each tab needs to be activated individually):{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myTab a').click(function (e) { - e.preventDefault(); - $(this).tab('show'); -})</pre> - <p>{{_i}}You can activate individual tabs in several ways:{{/i}}</p> -<pre class="prettyprint linenums"> -$('#myTab a[href="#profile"]').tab('show'); // Select tab by name -$('#myTab a:first').tab('show'); // Select first tab -$('#myTab a:last').tab('show'); // Select last tab -$('#myTab li:eq(2) a').tab('show'); // Select third tab (0-indexed) -</pre> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}You can activate a tab or pill navigation without writing any JavaScript by simply specifying <code>data-toggle="tab"</code> or <code>data-toggle="pill"</code> on an element. Adding the <code>nav</code> and <code>nav-tabs</code> classes to the tab <code>ul</code> will apply the Bootstrap tab styling.{{/i}}</p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs"> - <li><a href="#home" data-toggle="tab">{{_i}}Home{{/i}}</a></li> - <li><a href="#profile" data-toggle="tab">{{_i}}Profile{{/i}}</a></li> - <li><a href="#messages" data-toggle="tab">{{_i}}Messages{{/i}}</a></li> - <li><a href="#settings" data-toggle="tab">{{_i}}Settings{{/i}}</a></li> -</ul></pre> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().tab</h4> - <p> - {{_i}}Activates a tab element and content container. Tab should have either a <code>data-target</code> or an <code>href</code> targeting a container node in the DOM.{{/i}} - </p> -<pre class="prettyprint linenums"> -<ul class="nav nav-tabs" id="myTab"> - <li class="active"><a href="#home">{{_i}}Home{{/i}}</a></li> - <li><a href="#profile">{{_i}}Profile{{/i}}</a></li> - <li><a href="#messages">{{_i}}Messages{{/i}}</a></li> - <li><a href="#settings">{{_i}}Settings{{/i}}</a></li> -</ul> - -<div class="tab-content"> - <div class="tab-pane active" id="home">...</div> - <div class="tab-pane" id="profile">...</div> - <div class="tab-pane" id="messages">...</div> - <div class="tab-pane" id="settings">...</div> -</div> - -<script> - $(function () { - $('#myTab a:last').tab('show'); - }) -</script> -</pre> - - <h3>{{_i}}Events{{/i}}</h3> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}This event fires on tab show, but before the new tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}shown{{/i}}</td> - <td>{{_i}}This event fires on tab show after a tab has been shown. Use <code>event.target</code> and <code>event.relatedTarget</code> to target the active tab and the previous active tab (if available) respectively.{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('a[data-toggle="tab"]').on('shown', function (e) { - e.target // activated tab - e.relatedTarget // previous tab -}) -</pre> - </section> - - - <!-- Tooltips - ================================================== --> - <section id="tooltips"> - <div class="page-header"> - <h1>{{_i}}Tooltips{{/i}} <small>bootstrap-tooltip.js</small></h1> - </div> - - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}Inspired by the excellent jQuery.tipsy plugin written by Jason Frame; Tooltips are an updated version, which don't rely on images, use CSS3 for animations, and data-attributes for local title storage.{{/i}}</p> - <p>{{_i}}For performance reasons, the tooltip and popover data-apis are opt in, meaning <strong>you must initialize them yourself</strong>.{{/i}}</p> - <p>{{_i}}Hover over the links below to see tooltips:{{/i}}</p> - <div class="bs-docs-example tooltip-demo"> - <p class="muted" style="margin-bottom: 0;">{{_i}}Tight pants next level keffiyeh <a href="#" data-toggle="tooltip" title="Default tooltip">you probably</a> haven't heard of them. Photo booth beard raw denim letterpress vegan messenger bag stumptown. Farm-to-table seitan, mcsweeney's fixie sustainable quinoa 8-bit american apparel <a href="#" data-toggle="tooltip" title="Another tooltip">have a</a> terry richardson vinyl chambray. Beard stumptown, cardigans banh mi lomo thundercats. Tofu biodiesel williamsburg marfa, four loko mcsweeney's cleanse vegan chambray. A really ironic artisan <a href="#" data-toggle="tooltip" title="A much longer tooltip belongs right here to demonstrate the max-width we apply.">whatever keytar</a>, scenester farm-to-table banksy Austin <a href="#" data-toggle="tooltip" title="The last tip!">twitter handle</a> freegan cred raw denim single-origin coffee viral.{{/i}} - </p> - </div>{{! /example }} - - <h3>{{_i}}Four directions{{/i}}</h3> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> - <li><a href="#" data-toggle="tooltip" data-placement="top" title="Tooltip on top">Tooltip on top</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="right" title="Tooltip on right">Tooltip on right</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="bottom" title="Tooltip on bottom">Tooltip on bottom</a></li> - <li><a href="#" data-toggle="tooltip" data-placement="left" title="Tooltip on left">Tooltip on left</a></li> - </ul> - </div>{{! /example }} - - - <h3>{{_i}}Tooltips in input groups{{/i}}</h3> - <p>{{_i}}When using tooltips and popovers with the Bootstrap input groups, you'll have to set the <code>container</code> (documented below) option to avoid unwanted side effects.{{/i}}</p> - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Trigger the tooltip via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#example').tooltip({{_i}}options{{/i}})</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}animation{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>true</td> - <td>{{_i}}apply a css fade transition to the tooltip{{/i}}</td> - </tr> - <tr> - <td>{{_i}}html{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>false</td> - <td>{{_i}}Insert html into the tooltip. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}placement{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>'top'</td> - <td>{{_i}}how to position the tooltip{{/i}} - top | bottom | left | right</td> - </tr> - <tr> - <td>{{_i}}selector{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>false</td> - <td>{{_i}}If a selector is provided, tooltip objects will be delegated to the specified targets.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}title{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>''</td> - <td>{{_i}}default title value if `title` tag isn't present{{/i}}</td> - </tr> - <tr> - <td>{{_i}}trigger{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>'hover focus'</td> - <td>{{_i}}how tooltip is triggered{{/i}} - click | hover | focus | manual. {{_i}}Note you case pass trigger mutliple, space seperated, trigger types.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}delay{{/i}}</td> - <td>{{_i}}number | object{{/i}}</td> - <td>0</td> - <td> - <p>{{_i}}delay showing and hiding the tooltip (ms) - does not apply to manual trigger type{{/i}}</p> - <p>{{_i}}If a number is supplied, delay is applied to both hide/show{{/i}}</p> - <p>{{_i}}Object structure is: <code>delay: { show: 500, hide: 100 }</code>{{/i}}</p> - </td> - </tr> - <tr> - <td>{{_i}}container{{/i}}</td> - <td>{{_i}}string | false{{/i}}</td> - <td>{{_i}}false{{/i}}</td> - <td> - <p>{{_i}}Appends the tooltip to a specific element <code>container: 'body'</code>{{/i}}</p> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}Options for individual tooltips can alternatively be specified through the use of data attributes.{{/i}} - </div> - - <h3>{{_i}}Markup{{/i}}</h3> - <pre class="prettyprint linenums"><a href="#" data-toggle="tooltip" title="{{_i}}first tooltip{{/i}}">{{_i}}hover over me{{/i}}</a></pre> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().tooltip({{_i}}options{{/i}})</h4> - <p>{{_i}}Attaches a tooltip handler to an element collection.{{/i}}</p> - <h4>.tooltip('show')</h4> - <p>{{_i}}Reveals an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('show')</pre> - <h4>.tooltip('hide')</h4> - <p>{{_i}}Hides an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('hide')</pre> - <h4>.tooltip('toggle')</h4> - <p>{{_i}}Toggles an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('toggle')</pre> - <h4>.tooltip('destroy')</h4> - <p>{{_i}}Hides and destroys an element's tooltip.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').tooltip('destroy')</pre> - </section> - - - - <!-- Popovers - ================================================== --> - <section id="popovers"> - <div class="page-header"> - <h1>{{_i}}Popovers{{/i}} <small>bootstrap-popover.js</small></h1> - </div> - - <h2>{{_i}}Examples{{/i}}</h2> - <p>{{_i}}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. <strong>Requires <a href="#tooltips">Tooltip</a> to be included.</strong>{{/i}}</p> - - <h3>{{_i}}Static popover{{/i}}</h3> - <p>{{_i}}Four options are available: top, right, bottom, and left aligned.{{/i}}</p> - <div class="bs-docs-example bs-docs-example-popover"> - <div class="popover top"> - <div class="arrow"></div> - <h3 class="popover-title">Popover top</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover right"> - <div class="arrow"></div> - <h3 class="popover-title">Popover right</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover bottom"> - <div class="arrow"></div> - <h3 class="popover-title">Popover bottom</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="popover left"> - <div class="arrow"></div> - <h3 class="popover-title">Popover left</h3> - <div class="popover-content"> - <p>Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.</p> - </div> - </div> - - <div class="clearfix"></div> - </div> - <p>{{_i}}No markup shown as popovers are generated from JavaScript and content within a <code>data</code> attribute.{{/i}}</p> - - <h3>Live demo</h3> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <a href="#" class="btn btn-large btn-danger" data-toggle="popover" title="A Title" data-content="And here's some amazing content. It's very engaging. right?">{{_i}}Click to toggle popover{{/i}}</a> - </div> - - <h4>{{_i}}Four directions{{/i}}</h4> - <div class="bs-docs-example tooltip-demo"> - <ul class="bs-docs-tooltip-examples"> - <li><a href="#" class="btn" data-toggle="popover" data-placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on top">Popover on top</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="right" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on right">Popover on right</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="bottom" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on bottom">Popover on bottom</a></li> - <li><a href="#" class="btn" data-toggle="popover" data-placement="left" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus." title="Popover on left">Popover on left</a></li> - </ul> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable popovers via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#example').popover({{_i}}options{{/i}})</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-animation=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}animation{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>true</td> - <td>{{_i}}apply a css fade transition to the tooltip{{/i}}</td> - </tr> - <tr> - <td>{{_i}}html{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>false</td> - <td>{{_i}}Insert html into the popover. If false, jquery's <code>text</code> method will be used to insert content into the dom. Use text if you're worried about XSS attacks.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}placement{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>'right'</td> - <td>{{_i}}how to position the popover{{/i}} - top | bottom | left | right</td> - </tr> - <tr> - <td>{{_i}}selector{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>false</td> - <td>{{_i}}if a selector is provided, tooltip objects will be delegated to the specified targets{{/i}}</td> - </tr> - <tr> - <td>{{_i}}trigger{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>'click'</td> - <td>{{_i}}how popover is triggered{{/i}} - click | hover | focus | manual</td> - </tr> - <tr> - <td>{{_i}}title{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>''</td> - <td>{{_i}}default title value if `title` attribute isn't present{{/i}}</td> - </tr> - <tr> - <td>{{_i}}content{{/i}}</td> - <td>{{_i}}string | function{{/i}}</td> - <td>''</td> - <td>{{_i}}default content value if `data-content` attribute isn't present{{/i}}</td> - </tr> - <tr> - <td>{{_i}}delay{{/i}}</td> - <td>{{_i}}number | object{{/i}}</td> - <td>0</td> - <td> - <p>{{_i}}delay showing and hiding the popover (ms) - does not apply to manual trigger type{{/i}}</p> - <p>{{_i}}If a number is supplied, delay is applied to both hide/show{{/i}}</p> - <p>{{_i}}Object structure is: <code>delay: { show: 500, hide: 100 }</code>{{/i}}</p> - </td> - </tr> - <tr> - <td>{{_i}}container{{/i}}</td> - <td>{{_i}}string | false{{/i}}</td> - <td>{{_i}}false{{/i}}</td> - <td> - <p>{{_i}}Appends the popover to a specific element <code>container: 'body'</code>{{/i}}</p> - </td> - </tr> - </tbody> - </table> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}Options for individual popovers can alternatively be specified through the use of data attributes.{{/i}} - </div> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.{{/i}}</p> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().popover({{_i}}options{{/i}})</h4> - <p>{{_i}}Initializes popovers for an element collection.{{/i}}</p> - <h4>.popover('show')</h4> - <p>{{_i}}Reveals an elements popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('show')</pre> - <h4>.popover('hide')</h4> - <p>{{_i}}Hides an elements popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('hide')</pre> - <h4>.popover('toggle')</h4> - <p>{{_i}}Toggles an elements popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('toggle')</pre> - <h4>.popover('destroy')</h4> - <p>{{_i}}Hides and destroys an element's popover.{{/i}}</p> - <pre class="prettyprint linenums">$('#element').popover('destroy')</pre> - </section> - - - - <!-- Alert - ================================================== --> - <section id="alerts"> - <div class="page-header"> - <h1>{{_i}}Alert messages{{/i}} <small>bootstrap-alert.js</small></h1> - </div> - - - <h2>{{_i}}Example alerts{{/i}}</h2> - <p>{{_i}}Add dismiss functionality to all alert messages with this plugin.{{/i}}</p> - <div class="bs-docs-example"> - <div class="alert fade in"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>{{_i}}Holy guacamole!{{/i}}</strong> {{_i}}Best check yo self, you're not looking too good.{{/i}} - </div> - </div>{{! /example }} - - <div class="bs-docs-example"> - <div class="alert alert-block alert-error fade in"> - <button type="button" class="close" data-dismiss="alert">×</button> - <h4 class="alert-heading">{{_i}}Oh snap! You got an error!{{/i}}</h4> - <p>{{_i}}Change this and that and try again. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Cras mattis consectetur purus sit amet fermentum.{{/i}}</p> - <p> - <a class="btn btn-danger" href="#">{{_i}}Take this action{{/i}}</a> <a class="btn" href="#">{{_i}}Or do this{{/i}}</a> - </p> - </div> - </div>{{! /example }} - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable dismissal of an alert via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$(".alert").alert()</pre> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}Just add <code>data-dismiss="alert"</code> to your close button to automatically give an alert close functionality.{{/i}}</p> - <pre class="prettyprint linenums"><a class="close" data-dismiss="alert" href="#">&times;</a></pre> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().alert()</h4> - <p>{{_i}}Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the <code>.fade</code> and <code>.in</code> class already applied to them.{{/i}}</p> - <h4>.alert('close')</h4> - <p>{{_i}}Closes an alert.{{/i}}</p> - <pre class="prettyprint linenums">$(".alert").alert('close')</pre> - - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's alert class exposes a few events for hooking into alert functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}close{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>close</code> instance method is called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}closed{{/i}}</td> - <td>{{_i}}This event is fired when the alert has been closed (will wait for css transitions to complete).{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#my-alert').bind('closed', function () { - // {{_i}}do something…{{/i}} -}) -</pre> - </section> - - - - <!-- Buttons - ================================================== --> - <section id="buttons"> - <div class="page-header"> - <h1>{{_i}}Buttons{{/i}} <small>bootstrap-button.js</small></h1> - </div> - - <h2>{{_i}}Example uses{{/i}}</h2> - <p>{{_i}}Do more with buttons. Control button states or create groups of buttons for more components like toolbars.{{/i}}</p> - - <h4>{{_i}}Stateful{{/i}}</h4> - <p>{{_i}}Add <code>data-loading-text="Loading..."</code> to use a loading state on a button.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" id="fat-btn" data-loading-text="loading..." class="btn btn-primary"> - {{_i}}Loading state{{/i}} - </button> - </div>{{! /example }} - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-loading-text="Loading...">Loading state</button></pre> - - <h4>{{_i}}Single toggle{{/i}}</h4> - <p>{{_i}}Add <code>data-toggle="button"</code> to activate toggling on a single button.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <button type="button" class="btn btn-primary" data-toggle="button">{{_i}}Single Toggle{{/i}}</button> - </div>{{! /example }} - <pre class="prettyprint linenums"><button type="button" class="btn btn-primary" data-toggle="button">Single Toggle</button></pre> - - <h4>{{_i}}Checkbox{{/i}}</h4> - <p>{{_i}}Add <code>data-toggle="buttons-checkbox"</code> for checkbox style toggling on btn-group.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">{{_i}}Left{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Middle{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Right{{/i}}</button> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-checkbox"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> - - <h4>{{_i}}Radio{{/i}}</h4> - <p>{{_i}}Add <code>data-toggle="buttons-radio"</code> for radio style toggling on btn-group.{{/i}}</p> - <div class="bs-docs-example" style="padding-bottom: 24px;"> - <div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">{{_i}}Left{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Middle{{/i}}</button> - <button type="button" class="btn btn-primary">{{_i}}Right{{/i}}</button> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="btn-group" data-toggle="buttons-radio"> - <button type="button" class="btn btn-primary">Left</button> - <button type="button" class="btn btn-primary">Middle</button> - <button type="button" class="btn btn-primary">Right</button> -</div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - <p>{{_i}}Enable buttons via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('.nav-tabs').button()</pre> - - <h3>{{_i}}Markup{{/i}}</h3> - <p>{{_i}}Data attributes are integral to the button plugin. Check out the example code below for the various markup types.{{/i}}</p> - - <h3>{{_i}}Options{{/i}}</h3> - <p><em>{{_i}}None{{/i}}</em></p> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>$().button('toggle')</h4> - <p>{{_i}}Toggles push state. Gives the button the appearance that it has been activated.{{/i}}</p> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}You can enable auto toggling of a button by using the <code>data-toggle</code> attribute.{{/i}} - </div> - <pre class="prettyprint linenums"><button type="button" class="btn" data-toggle="button" >…</button></pre> - <h4>$().button('loading')</h4> - <p>{{_i}}Sets button state to loading - disables button and swaps text to loading text. Loading text should be defined on the button element using the data attribute <code>data-loading-text</code>.{{/i}} - </p> - <pre class="prettyprint linenums"><button type="button" class="btn" data-loading-text="loading stuff..." >...</button></pre> - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}<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>.{{/i}} - </div> - <h4>$().button('reset')</h4> - <p>{{_i}}Resets button state - swaps text to original text.{{/i}}</p> - <h4>$().button(string)</h4> - <p>{{_i}}Resets button state - swaps text to any data defined text state.{{/i}}</p> -<pre class="prettyprint linenums"><button type="button" class="btn" data-complete-text="finished!" >...</button> -<script> - $('.btn').button('complete') -</script> -</pre> - </section> - - - - <!-- Collapse - ================================================== --> - <section id="collapse"> - <div class="page-header"> - <h1>{{_i}}Collapse{{/i}} <small>bootstrap-collapse.js</small></h1> - </div> - - <h3>{{_i}}About{{/i}}</h3> - <p>{{_i}}Get base styles and flexible support for collapsible components like accordions and navigation.{{/i}}</p> - <p class="muted"><strong>*</strong> {{_i}}Requires the Transitions plugin to be included.{{/i}}</p> - - <h2>{{_i}}Example accordion{{/i}}</h2> - <p>{{_i}}Using the collapse plugin, we built a simple accordion style widget:{{/i}}</p> - - <div class="bs-docs-example"> - <div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> - {{_i}}Collapsible Group Item #1{{/i}} - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> - {{_i}}Collapsible Group Item #2{{/i}} - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree"> - {{_i}}Collapsible Group Item #3{{/i}} - </a> - </div> - <div id="collapseThree" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid. 3 wolf moon officia aute, non cupidatat skateboard dolor brunch. Food truck quinoa nesciunt laborum eiusmod. Brunch 3 wolf moon tempor, sunt aliqua put a bird on it squid single-origin coffee nulla assumenda shoreditch et. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident. Ad vegan excepteur butcher vice lomo. Leggings occaecat craft beer farm-to-table, raw denim aesthetic synth nesciunt you probably haven't heard of them accusamus labore sustainable VHS. - </div> - </div> - </div> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div class="accordion" id="accordion2"> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne"> - {{_i}}Collapsible Group Item #1{{/i}} - </a> - </div> - <div id="collapseOne" class="accordion-body collapse in"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> - <div class="accordion-group"> - <div class="accordion-heading"> - <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo"> - {{_i}}Collapsible Group Item #2{{/i}} - </a> - </div> - <div id="collapseTwo" class="accordion-body collapse"> - <div class="accordion-inner"> - Anim pariatur cliche... - </div> - </div> - </div> -</div> -... -</pre> - <p>{{_i}}You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.{{/i}}</p> -<pre class="prettyprint linenums"> -<button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo"> - {{_i}}simple collapsible{{/i}} -</button> - -<div id="demo" class="collapse in"> … </div> -</pre> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Just add <code>data-toggle="collapse"</code> and a <code>data-target</code> to element to automatically assign control of a collapsible element. The <code>data-target</code> attribute accepts a css selector to apply the collapse to. Be sure to add the class <code>collapse</code> to the collapsible element. If you'd like it to default open, add the additional class <code>in</code>.{{/i}}</p> - <p>{{_i}}To add accordion-like group management to a collapsible control, add the data attribute <code>data-parent="#selector"</code>. Refer to the demo to see this in action.{{/i}}</p> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Enable manually with:{{/i}}</p> - <pre class="prettyprint linenums">$(".collapse").collapse()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-parent=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}parent{{/i}}</td> - <td>{{_i}}selector{{/i}}</td> - <td>false</td> - <td>{{_i}}If selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior){{/i}}</td> - </tr> - <tr> - <td>{{_i}}toggle{{/i}}</td> - <td>{{_i}}boolean{{/i}}</td> - <td>true</td> - <td>{{_i}}Toggles the collapsible element on invocation{{/i}}</td> - </tr> - </tbody> - </table> - - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.collapse({{_i}}options{{/i}})</h4> - <p>{{_i}}Activates your content as a collapsible element. Accepts an optional options <code>object</code>.{{/i}} -<pre class="prettyprint linenums"> -$('#myCollapsible').collapse({ - toggle: false -}) -</pre> - <h4>.collapse('toggle')</h4> - <p>{{_i}}Toggles a collapsible element to shown or hidden.{{/i}}</p> - <h4>.collapse('show')</h4> - <p>{{_i}}Shows a collapsible element.{{/i}}</p> - <h4>.collapse('hide')</h4> - <p>{{_i}}Hides a collapsible element.{{/i}}</p> - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's collapse class exposes a few events for hooking into collapse functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}show{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>show</code> instance method is called.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}shown{{/i}}</td> - <td>{{_i}}This event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - <tr> - <td>{{_i}}hide{{/i}}</td> - <td> - {{_i}}This event is fired immediately when the <code>hide</code> method has been called.{{/i}} - </td> - </tr> - <tr> - <td>{{_i}}hidden{{/i}}</td> - <td>{{_i}}This event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -$('#myCollapsible').on('hidden', function () { - // {{_i}}do something…{{/i}} -})</pre> - </section> - - - - <!-- Carousel - ================================================== --> - <section id="carousel"> - <div class="page-header"> - <h1>{{_i}}Carousel{{/i}} <small>bootstrap-carousel.js</small></h1> - </div> - - <h2>{{_i}}Example carousel{{/i}}</h2> - <p>{{_i}}The slideshow below shows a generic plugin and component for cycling through elements like a carousel.{{/i}}</p> - <div class="bs-docs-example"> - <div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <div class="carousel-inner"> - <div class="item active"> - <img src="assets/img/bootstrap-mdo-sfmoma-01.jpg" alt=""> - <div class="carousel-caption"> - <h4>{{_i}}First Thumbnail label{{/i}}</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-02.jpg" alt=""> - <div class="carousel-caption"> - <h4>{{_i}}Second Thumbnail label{{/i}}</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - <div class="item"> - <img src="assets/img/bootstrap-mdo-sfmoma-03.jpg" alt=""> - <div class="carousel-caption"> - <h4>{{_i}}Third Thumbnail label{{/i}}</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p> - </div> - </div> - </div> - <a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a> - <a class="right carousel-control" href="#myCarousel" data-slide="next">›</a> - </div> - </div>{{! /example }} -<pre class="prettyprint linenums"> -<div id="myCarousel" class="carousel slide"> - <ol class="carousel-indicators"> - <li data-target="#myCarousel" data-slide-to="0" class="active"></li> - <li data-target="#myCarousel" data-slide-to="1"></li> - <li data-target="#myCarousel" data-slide-to="2"></li> - </ol> - <!-- {{_i}}Carousel items{{/i}} --> - <div class="carousel-inner"> - <div class="active item">…</div> - <div class="item">…</div> - <div class="item">…</div> - </div> - <!-- {{_i}}Carousel nav{{/i}} --> - <a class="carousel-control left" href="#myCarousel" data-slide="prev">&lsaquo;</a> - <a class="carousel-control right" href="#myCarousel" data-slide="next">&rsaquo;</a> -</div> -</pre> - - <div class="alert alert-warning"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}When implementing this carousel, remove the images we have provided and replace them with your own.{{/i}} - </div> - - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Use data attributes to easily control the position of the carousel. <code>data-slide</code> accepts the keywords <code>prev</code> or <code>next</code>, which alters the slide position relative to it's current position. Alternatively, use <code>data-slide-to</code> to pass a raw slide index to the carousel <code>data-slide-to="2"</code>, which jump's the slide position to a particular index beginning with <code>0</code>.{{/i}}</p> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call carousel manually with:{{/i}}</p> - <pre class="prettyprint linenums">$('.carousel').carousel()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScriptz. For data attributes, append the option name to <code>data-</code>, as in <code>data-interval=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}interval{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>5000</td> - <td>{{_i}}The amount of time to delay between automatically cycling an item. If false, carousel will not automatically cycle.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}pause{{/i}}</td> - <td>{{_i}}string{{/i}}</td> - <td>"hover"</td> - <td>{{_i}}Pauses the cycling of the carousel on mouseenter and resumes the cycling of the carousel on mouseleave.{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.carousel({{_i}}options{{/i}})</h4> - <p>{{_i}}Initializes the carousel with an optional options <code>object</code> and starts cycling through items.{{/i}}</p> -<pre class="prettyprint linenums"> -$('.carousel').carousel({ - interval: 2000 -}) -</pre> - <h4>.carousel('cycle')</h4> - <p>{{_i}}Cycles through the carousel items from left to right.{{/i}}</p> - <h4>.carousel('pause')</h4> - <p>{{_i}}Stops the carousel from cycling through items.{{/i}}</p> - <h4>.carousel(number)</h4> - <p>{{_i}}Cycles the carousel to a particular frame (0 based, similar to an array).{{/i}}</p> - <h4>.carousel('prev')</h4> - <p>{{_i}}Cycles to the previous item.{{/i}}</p> - <h4>.carousel('next')</h4> - <p>{{_i}}Cycles to the next item.{{/i}}</p> - - <h3>{{_i}}Events{{/i}}</h3> - <p>{{_i}}Bootstrap's carousel class exposes two events for hooking into carousel functionality.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 150px;">{{_i}}Event{{/i}}</th> - <th>{{_i}}Description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}slide{{/i}}</td> - <td>{{_i}}This event fires immediately when the <code>slide</code> instance method is invoked.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}slid{{/i}}</td> - <td>{{_i}}This event is fired when the carousel has completed its slide transition.{{/i}}</td> - </tr> - </tbody> - </table> - </section> - - - - <!-- Typeahead - ================================================== --> - <section id="typeahead"> - <div class="page-header"> - <h1>{{_i}}Typeahead{{/i}} <small>bootstrap-typeahead.js</small></h1> - </div> - - - <h2>{{_i}}Example{{/i}}</h2> - <p>{{_i}}A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.{{/i}}</p> - <div class="bs-docs-example" style="background-color: #f5f5f5;"> - <input type="text" class="span3" style="margin: 0 auto;" data-provide="typeahead" data-items="4" data-source='["Alabama","Alaska","Arizona","Arkansas","California","Colorado","Connecticut","Delaware","Florida","Georgia","Hawaii","Idaho","Illinois","Indiana","Iowa","Kansas","Kentucky","Louisiana","Maine","Maryland","Massachusetts","Michigan","Minnesota","Mississippi","Missouri","Montana","Nebraska","Nevada","New Hampshire","New Jersey","New Mexico","New York","North Dakota","North Carolina","Ohio","Oklahoma","Oregon","Pennsylvania","Rhode Island","South Carolina","South Dakota","Tennessee","Texas","Utah","Vermont","Virginia","Washington","West Virginia","Wisconsin","Wyoming"]'> - </div>{{! /example }} - <pre class="prettyprint linenums"><input type="text" data-provide="typeahead"></pre> - <p>You'll want to set <code>autocomplete="off"</code> to prevent default browser menus from appearing over the Bootstrap typeahead dropdown.</p> - - <hr class="bs-docs-separator"> - - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}Add data attributes to register an element with typeahead functionality as shown in the example above.{{/i}}</p> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the typeahead manually with:{{/i}}</p> - <pre class="prettyprint linenums">$('.typeahead').typeahead()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-source=""</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 50px;">{{_i}}type{{/i}}</th> - <th style="width: 100px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}source{{/i}}</td> - <td>{{_i}}array, function{{/i}}</td> - <td>[ ]</td> - <td>{{_i}}The data source to query against. May be an array of strings or a function. The function is passed two arguments, the <code>query</code> value in the input field and the <code>process</code> callback. The function may be used synchronously by returning the data source directly or asynchronously via the <code>process</code> callback's single argument.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}items{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>8</td> - <td>{{_i}}The max number of items to display in the dropdown.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}minLength{{/i}}</td> - <td>{{_i}}number{{/i}}</td> - <td>{{_i}}1{{/i}}</td> - <td>{{_i}}The minimum character length needed before triggering autocomplete suggestions{{/i}}</td> - </tr> - <tr> - <td>{{_i}}matcher{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}case insensitive{{/i}}</td> - <td>{{_i}}The method used to determine if a query matches an item. Accepts a single argument, the <code>item</code> against which to test the query. Access the current query with <code>this.query</code>. Return a boolean <code>true</code> if query is a match.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}sorter{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}exact match,<br> case sensitive,<br> case insensitive{{/i}}</td> - <td>{{_i}}Method used to sort autocomplete results. Accepts a single argument <code>items</code> and has the scope of the typeahead instance. Reference the current query with <code>this.query</code>.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}updater{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}returns selected item{{/i}}</td> - <td>{{_i}}The method used to return selected item. Accepts a single argument, the <code>item</code> and has the scope of the typeahead instance.{{/i}}</td> - </tr> - <tr> - <td>{{_i}}highlighter{{/i}}</td> - <td>{{_i}}function{{/i}}</td> - <td>{{_i}}highlights all default matches{{/i}}</td> - <td>{{_i}}Method used to highlight autocomplete results. Accepts a single argument <code>item</code> and has the scope of the typeahead instance. Should return html.{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}Methods{{/i}}</h3> - <h4>.typeahead({{_i}}options{{/i}})</h4> - <p>{{_i}}Initializes an input with a typeahead.{{/i}}</p> - </section> - - - - <!-- Affix - ================================================== --> - <section id="affix"> - <div class="page-header"> - <h1>{{_i}}Affix{{/i}} <small>bootstrap-affix.js</small></h1> - </div> - - <h2>{{_i}}Example{{/i}}</h2> - <p>{{_i}}The subnavigation on the left is a live demo of the affix plugin.{{/i}}</p> - - <hr class="bs-docs-separator"> - - <h2>{{_i}}Usage{{/i}}</h2> - - <h3>{{_i}}Via data attributes{{/i}}</h3> - <p>{{_i}}To easily add affix behavior to any element, just add <code>data-spy="affix"</code> to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.{{/i}}</p> - - <pre class="prettyprint linenums"><div data-spy="affix" data-offset-top="200">...</div></pre> - - <div class="alert alert-info"> - <strong>{{_i}}Heads up!{{/i}}</strong> - {{_i}}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.{{/i}} - </div> - - <h3>{{_i}}Via JavaScript{{/i}}</h3> - <p>{{_i}}Call the affix plugin via JavaScript:{{/i}}</p> - <pre class="prettyprint linenums">$('#navbar').affix()</pre> - - <h3>{{_i}}Options{{/i}}</h3> - <p>{{_i}}Options can be passed via data attributes or JavaScript. For data attributes, append the option name to <code>data-</code>, as in <code>data-offset-top="200"</code>.{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th style="width: 100px;">{{_i}}Name{{/i}}</th> - <th style="width: 100px;">{{_i}}type{{/i}}</th> - <th style="width: 50px;">{{_i}}default{{/i}}</th> - <th>{{_i}}description{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}offset{{/i}}</td> - <td>{{_i}}number | function | object{{/i}}</td> - <td>{{_i}}10{{/i}}</td> - <td>{{_i}}Pixels to offset from screen when calculating position of scroll. If a single number is provided, the offset will be applied in both top and left directions. To listen for a single direction, or multiple unique offsets, just provide an object <code>offset: { x: 10 }</code>. Use a function when you need to dynamically provide an offset (useful for some responsive designs).{{/i}}</td> - </tr> - </tbody> - </table> - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/docs/templates/pages/scaffolding.mustache b/docs/templates/pages/scaffolding.mustache deleted file mode 100644 index a6f2f9dac101f15ba1f7ae0887f456ada378fb3a..0000000000000000000000000000000000000000 --- a/docs/templates/pages/scaffolding.mustache +++ /dev/null @@ -1,485 +0,0 @@ -<!-- Subhead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>{{_i}}Scaffolding{{/i}}</h1> - <p class="lead">{{_i}}Bootstrap is built on responsive 12-column grids, layouts, and components.{{/i}}</p> - </div> -</header> - - <div class="container"> - - <!-- Docs nav - ================================================== --> - <div class="row"> - <div class="span3 bs-docs-sidebar"> - <ul class="nav nav-list bs-docs-sidenav"> - <li><a href="#global"><i class="icon-chevron-right"></i> {{_i}}Global styles{{/i}}</a></li> - <li><a href="#gridSystem"><i class="icon-chevron-right"></i> {{_i}}Grid system{{/i}}</a></li> - <li><a href="#fluidGridSystem"><i class="icon-chevron-right"></i> {{_i}}Fluid grid system{{/i}}</a></li> - <li><a href="#layouts"><i class="icon-chevron-right"></i> {{_i}}Layouts{{/i}}</a></li> - <li><a href="#responsive"><i class="icon-chevron-right"></i> {{_i}}Responsive design{{/i}}</a></li> - </ul> - </div> - <div class="span9"> - - - - <!-- Global Bootstrap settings - ================================================== --> - <section id="global"> - <div class="page-header"> - <h1>{{_i}}Global settings{{/i}}</h1> - </div> - - <h3>{{_i}}Requires HTML5 doctype{{/i}}</h3> - <p>{{_i}}Bootstrap makes use of certain HTML elements and CSS properties that require the use of the HTML5 doctype. Include it at the beginning of all your projects.{{/i}}</p> -<pre class="prettyprint linenums"> -<!DOCTYPE html> -<html lang="en"> - ... -</html> -</pre> - - <h3>{{_i}}Typography and links{{/i}}</h3> - <p>{{_i}}Bootstrap sets basic global display, typography, and link styles. Specifically, we:{{/i}}</p> - <ul> - <li>{{_i}}Remove <code>margin</code> on the body{{/i}}</li> - <li>{{_i}}Set <code>background-color: white;</code> on the <code>body</code>{{/i}}</li> - <li>{{_i}}Use the <code>@baseFontFamily</code>, <code>@baseFontSize</code>, and <code>@baseLineHeight</code> attributes as our typographic base{{/i}}</li> - <li>{{_i}}Set the global link color via <code>@linkColor</code> and apply link underlines only on <code>:hover</code>{{/i}}</li> - </ul> - <p>{{_i}}These styles can be found within <strong>scaffolding.less</strong>.{{/i}}</p> - - <h3>{{_i}}Reset via Normalize{{/i}}</h3> - <p>{{_i}}With Bootstrap 2, the old reset block has been dropped in favor of <a href="http://necolas.github.com/normalize.css/" target="_blank">Normalize.css</a>, a project by <a href="http://twitter.com/necolas" target="_blank">Nicolas Gallagher</a> and <a href="http://twitter.com/jon_neal" target="_blank">Jonathan Neal</a> that also powers the <a href="http://html5boilerplate.com" target="_blank">HTML5 Boilerplate</a>. While we use much of Normalize within our <strong>reset.less</strong>, we have removed some elements specifically for Bootstrap.{{/i}}</p> - - </section> - - - - - <!-- Grid system - ================================================== --> - <section id="gridSystem"> - <div class="page-header"> - <h1>{{_i}}Default grid system{{/i}}</h1> - </div> - - <h2>{{_i}}Live grid example{{/i}}</h2> - <p>{{_i}}The default Bootstrap grid system utilizes <strong>12 columns</strong>, making for a 940px wide container without <a href="./scaffolding.html#responsive">responsive features</a> enabled. With the responsive CSS file added, the grid adapts to be 724px and 1170px wide depending on your viewport. Below 767px viewports, the columns become fluid and stack vertically.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row show-grid"> - <div class="span2">2</div> - <div class="span3">3</div> - <div class="span4">4</div> - </div> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span5">5</div> - </div> - <div class="row show-grid"> - <div class="span9">9</div> - </div> - </div> - - <h3>{{_i}}Basic grid HTML{{/i}}</h3> - <p>{{_i}}For a simple two column layout, create a <code>.row</code> and add the appropriate number of <code>.span*</code> columns. As this is a 12-column grid, each <code>.span*</code> spans a number of those 12 columns, and should always add up to 12 for each row (or the number of columns in the parent).{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - <p>{{_i}}Given this example, we have <code>.span4</code> and <code>.span8</code>, making for 12 total columns and a complete row.{{/i}}</p> - - <h2>{{_i}}Offsetting columns{{/i}}</h2> - <p>{{_i}}Move columns to the right using <code>.offset*</code> classes. Each class increases the left margin of a column by a whole column. For example, <code>.offset4</code> moves <code>.span4</code> over four columns.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row show-grid"> - <div class="span4">4</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span3 offset1">3 offset 1</div> - <div class="span3 offset2">3 offset 2</div> - </div><!-- /row --> - <div class="row show-grid"> - <div class="span6 offset3">6 offset 3</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span4">...</div> - <div class="span3 offset2">...</div> -</div> -</pre> - - <h2>{{_i}}Nesting columns{{/i}}</h2> - <p>{{_i}}To nest your content with the default grid, add a new <code>.row</code> and set of <code>.span*</code> columns within an existing <code>.span*</code> column. Nested rows should include a set of columns that add up to the number of columns of its parent.{{/i}}</p> - <div class="row show-grid"> - <div class="span9"> - {{_i}}Level 1 column{{/i}} - <div class="row show-grid"> - <div class="span6"> - {{_i}}Level 2{{/i}} - </div> - <div class="span3"> - {{_i}}Level 2{{/i}} - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row"> - <div class="span9"> - {{_i}}Level 1 column{{/i}} - <div class="row"> - <div class="span6">{{_i}}Level 2{{/i}}</div> - <div class="span3">{{_i}}Level 2{{/i}}</div> - </div> - </div> -</div> -</pre> - </section> - - - - <!-- Fluid grid system - ================================================== --> - <section id="fluidGridSystem"> - <div class="page-header"> - <h1>{{_i}}Fluid grid system{{/i}}</h1> - </div> - - <h2>{{_i}}Live fluid grid example{{/i}}</h2> - <p>{{_i}}The fluid grid system uses percents instead of pixels for column widths. It has the same responsive capabilities as our fixed grid system, ensuring proper proportions for key screen resolutions and devices.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4">4</div> - <div class="span4">4</div> - </div> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span8">8</div> - </div> - <div class="row-fluid show-grid"> - <div class="span6">6</div> - <div class="span6">6</div> - </div> - <div class="row-fluid show-grid"> - <div class="span12">12</div> - </div> - </div> - - <h3>{{_i}}Basic fluid grid HTML{{/i}}</h3> - <p>{{_i}}Make any row "fluid" by changing <code>.row</code> to <code>.row-fluid</code>. The column classes stay the exact same, making it easy to flip between fixed and fluid grids.{{/i}}</p> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span8">...</div> -</div> -</pre> - - <h2>{{_i}}Fluid offsetting{{/i}}</h2> - <p>{{_i}}Operates the same way as the fixed grid system offsetting: add <code>.offset*</code> to any column to offset by that many columns.{{/i}}</p> - <div class="bs-docs-grid"> - <div class="row-fluid show-grid"> - <div class="span4">4</div> - <div class="span4 offset4">4 offset 4</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span3 offset3">3 offset 3</div> - <div class="span3 offset3">3 offset 3</div> - </div><!-- /row --> - <div class="row-fluid show-grid"> - <div class="span6 offset6">6 offset 6</div> - </div><!-- /row --> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span4">...</div> - <div class="span4 offset2">...</div> -</div> -</pre> - - <h2>{{_i}}Fluid nesting{{/i}}</h2> - <p>{{_i}}Fluid grids utilize nesting differently: each nested level of columns should add up to 12 columns. This is because the fluid grid uses percentages, not pixels, for setting widths.{{/i}}</p> - <div class="row-fluid show-grid"> - <div class="span12"> - {{_i}}Fluid 12{{/i}} - <div class="row-fluid show-grid"> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - <div class="row-fluid show-grid"> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - </div> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - </div> - </div> - </div> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - </div> - </div> - </div> - </div> -<pre class="prettyprint linenums"> -<div class="row-fluid"> - <div class="span12"> - {{_i}}Fluid 12{{/i}} - <div class="row-fluid"> - <div class="span6"> - {{_i}}Fluid 6{{/i}} - <div class="row-fluid"> - <div class="span6">{{_i}}Fluid 6{{/i}}</div> - <div class="span6">{{_i}}Fluid 6{{/i}}</div> - </div> - </div> - <div class="span6">{{_i}}Fluid 6{{/i}}</div> - </div> - </div> -</div> -</pre> - - </section> - - - - - <!-- Layouts (Default and fluid) - ================================================== --> - <section id="layouts"> - <div class="page-header"> - <h1>{{_i}}Layouts{{/i}}</h1> - </div> - - <h2>{{_i}}Fixed layout{{/i}}</h2> - <p>{{_i}}Provides a common fixed-width (and optionally responsive) layout with only <code><div class="container"></code> required.{{/i}}</p> - <div class="mini-layout"> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<body> - <div class="container"> - ... - </div> -</body> -</pre> - - <h2>{{_i}}Fluid layout{{/i}}</h2> - <p>{{_i}}Create a fluid, two-column page with <code><div class="container-fluid"></code>—great for applications and docs.{{/i}}</p> - <div class="mini-layout fluid"> - <div class="mini-layout-sidebar"></div> - <div class="mini-layout-body"></div> - </div> -<pre class="prettyprint linenums"> -<div class="container-fluid"> - <div class="row-fluid"> - <div class="span2"> - <!--{{_i}}Sidebar content{{/i}}--> - </div> - <div class="span10"> - <!--{{_i}}Body content{{/i}}--> - </div> - </div> -</div> -</pre> - </section> - - - - - <!-- Responsive design - ================================================== --> - <section id="responsive"> - <div class="page-header"> - <h1>{{_i}}Responsive design{{/i}}</h1> - </div> - - {{! Enabling }} - <h2>{{_i}}Enabling responsive features{{/i}}</h2> - <p>{{_i}}Turn on responsive CSS in your project by including the proper meta tag and additional stylesheet within the <code><head></code> of your document. If you've compiled Bootstrap from the Customize page, you need only include the meta tag.{{/i}}</p> -<pre class="prettyprint linenums"> -<meta name="viewport" content="width=device-width, initial-scale=1.0"> -<link href="assets/css/bootstrap-responsive.css" rel="stylesheet"> -</pre> - <p><span class="label label-info">{{_i}}Heads up!{{/i}}</span> {{_i}} Bootstrap doesn't include responsive features by default at this time as not everything needs to be responsive. Instead of encouraging developers to remove this feature, we figure it best to enable it as needed.{{/i}}</p> - - {{! About }} - <h2>{{_i}}About responsive Bootstrap{{/i}}</h2> - <img src="assets/img/responsive-illustrations.png" alt="Responsive devices" style="float: right; margin: 0 0 20px 20px;"> - <p>{{_i}}Media queries allow for custom CSS based on a number of conditions—ratios, widths, display type, etc—but usually focuses around <code>min-width</code> and <code>max-width</code>.{{/i}}</p> - <ul> - <li>{{_i}}Modify the width of column in our grid{{/i}}</li> - <li>{{_i}}Stack elements instead of float wherever necessary{{/i}}</li> - <li>{{_i}}Resize headings and text to be more appropriate for devices{{/i}}</li> - </ul> - <p>{{_i}}Use media queries responsibly and only as a start to your mobile audiences. For larger projects, do consider dedicated code bases and not layers of media queries.{{/i}}</p> - - {{! Supported }} - <h2>{{_i}}Supported devices{{/i}}</h2> - <p>{{_i}}Bootstrap supports a handful of media queries in a single file to help make your projects more appropriate on different devices and screen resolutions. Here's what's included:{{/i}}</p> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>{{_i}}Label{{/i}}</th> - <th>{{_i}}Layout width{{/i}}</th> - <th>{{_i}}Column width{{/i}}</th> - <th>{{_i}}Gutter width{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <td>{{_i}}Large display{{/i}}</td> - <td>1200px and up</td> - <td>70px</td> - <td>30px</td> - </tr> - <tr> - <td>{{_i}}Default{{/i}}</td> - <td>980px and up</td> - <td>60px</td> - <td>20px</td> - </tr> - <tr> - <td>{{_i}}Portrait tablets{{/i}}</td> - <td>768px and above</td> - <td>42px</td> - <td>20px</td> - </tr> - <tr> - <td>{{_i}}Phones to tablets{{/i}}</td> - <td>767px and below</td> - <td class="muted" colspan="2">{{_i}}Fluid columns, no fixed widths{{/i}}</td> - </tr> - <tr> - <td>{{_i}}Phones{{/i}}</td> - <td>480px and below</td> - <td class="muted" colspan="2">{{_i}}Fluid columns, no fixed widths{{/i}}</td> - </tr> - </tbody> - </table> -<pre class="prettyprint linenums"> -/* {{_i}}Large desktop{{/i}} */ -@media (min-width: 1200px) { ... } - -/* {{_i}}Portrait tablet to landscape and desktop{{/i}} */ -@media (min-width: 768px) and (max-width: 979px) { ... } - -/* {{_i}}Landscape phone to portrait tablet{{/i}} */ -@media (max-width: 767px) { ... } - -/* {{_i}}Landscape phones and down{{/i}} */ -@media (max-width: 480px) { ... } -</pre> - - - {{! Responsive utility classes }} - <h2>{{_i}}Responsive utility classes{{/i}}</h2> - <p>{{_i}}For faster mobile-friendly development, use these utility classes for showing and hiding content by device. Below is a table of the available classes and their effect on a given media query layout (labeled by device). They can be found in <code>responsive.less</code>.{{/i}}</p> - <table class="table table-bordered table-striped responsive-utilities"> - <thead> - <tr> - <th>{{_i}}Class{{/i}}</th> - <th>{{_i}}Phones <small>767px and below</small>{{/i}}</th> - <th>{{_i}}Tablets <small>979px to 768px</small>{{/i}}</th> - <th>{{_i}}Desktops <small>Default</small>{{/i}}</th> - </tr> - </thead> - <tbody> - <tr> - <th><code>.visible-phone</code></th> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - </tr> - <tr> - <th><code>.visible-tablet</code></th> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - </tr> - <tr> - <th><code>.visible-desktop</code></th> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - </tr> - <tr> - <th><code>.hidden-phone</code></th> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - </tr> - <tr> - <th><code>.hidden-tablet</code></th> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - </tr> - <tr> - <th><code>.hidden-desktop</code></th> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-visible">{{_i}}Visible{{/i}}</td> - <td class="is-hidden">{{_i}}Hidden{{/i}}</td> - </tr> - </tbody> - </table> - - <h3>{{_i}}When to use{{/i}}</h3> - <p>{{_i}}Use on a limited basis and avoid creating entirely different versions of the same site. Instead, use them to complement each device's presentation. Responsive utilities should not be used with tables, and as such are not supported.{{/i}}</p> - - <h3>{{_i}}Responsive utilities test case{{/i}}</h3> - <p>{{_i}}Resize your browser or load on different devices to test the above classes.{{/i}}</p> - <h4>{{_i}}Visible on...{{/i}}</h4> - <p>{{_i}}Green checkmarks indicate that class is visible in your current viewport.{{/i}}</p> - <ul class="responsive-utilities-test"> - <li>{{_i}}Phone{{/i}}<span class="visible-phone">✔ {{_i}}Phone{{/i}}</span></li> - <li>{{_i}}Tablet{{/i}}<span class="visible-tablet">✔ {{_i}}Tablet{{/i}}</span></li> - <li>{{_i}}Desktop{{/i}}<span class="visible-desktop">✔ {{_i}}Desktop{{/i}}</span></li> - </ul> - <h4>{{_i}}Hidden on...{{/i}}</h4> - <p>{{_i}}Here, green checkmarks indicate that class is hidden in your current viewport.{{/i}}</p> - <ul class="responsive-utilities-test hidden-on"> - <li>{{_i}}Phone{{/i}}<span class="hidden-phone">✔ {{_i}}Phone{{/i}}</span></li> - <li>{{_i}}Tablet{{/i}}<span class="hidden-tablet">✔ {{_i}}Tablet{{/i}}</span></li> - <li>{{_i}}Desktop{{/i}}<span class="hidden-desktop">✔ {{_i}}Desktop{{/i}}</span></li> - </ul> - - </section> - - - - </div>{{! /span9 }} - </div>{{! row}} - - </div>{{! /.container }} diff --git a/fonts/glyphiconshalflings-regular.eot b/fonts/glyphiconshalflings-regular.eot new file mode 100755 index 0000000000000000000000000000000000000000..bd59ccd2d679a6fa594560d56120e5e6e98b2c3e Binary files /dev/null and b/fonts/glyphiconshalflings-regular.eot differ diff --git a/fonts/glyphiconshalflings-regular.otf b/fonts/glyphiconshalflings-regular.otf new file mode 100644 index 0000000000000000000000000000000000000000..b058f1cd1b998892d9d6e69c2a3bfcd4b04b42ca Binary files /dev/null and b/fonts/glyphiconshalflings-regular.otf differ diff --git a/fonts/glyphiconshalflings-regular.svg b/fonts/glyphiconshalflings-regular.svg new file mode 100755 index 0000000000000000000000000000000000000000..0fb4587352382d0ee1f09d5951a15926e5a4ccfd --- /dev/null +++ b/fonts/glyphiconshalflings-regular.svg @@ -0,0 +1,175 @@ +<?xml version="1.0" standalone="no"?> +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" > +<svg xmlns="http://www.w3.org/2000/svg"> +<metadata></metadata> +<defs> +<font id="glyphicons_halflingsregular" horiz-adv-x="1200" > +<font-face units-per-em="1200" ascent="960" descent="-240" /> +<missing-glyph horiz-adv-x="500" /> +<glyph /> +<glyph /> +<glyph unicode="
" /> +<glyph unicode=" " /> +<glyph unicode="*" d="M100 500v200h259l-183 183l141 141l183 -183v259h200v-259l183 183l141 -141l-183 -183h259v-200h-259l183 -183l-141 -141l-183 183v-259h-200v259l-183 -183l-141 141l183 183h-259z" /> +<glyph unicode="+" d="M0 400v300h400v400h300v-400h400v-300h-400v-400h-300v400h-400z" /> +<glyph unicode="€" d="M100 500l100 100h113q0 47 5 100h-218l100 100h135q37 167 112 257q117 141 297 141q242 0 354 -189q60 -103 66 -209h-181q0 55 -25.5 99t-63.5 68t-75 36.5t-67 12.5q-24 0 -52.5 -10t-63 -32t-65.5 -67t-50 -107h379l-100 -100h-300q-6 -46 -6 -100h406l-100 -100 h-300q9 -74 33 -132t52.5 -91t62 -54.5t59 -29t46.5 -7.5q29 0 66 13t75 37t63.5 67.5t25.5 96.5h174q-31 -172 -128 -278q-107 -117 -274 -117q-207 0 -324 158q-36 46 -69 131.5t-45 205.5h-217z" /> +<glyph unicode="−" d="M200 400h900v300h-900v-300z" /> +<glyph unicode="✉" d="M0 100l400 400l200 -200l200 200l400 -400h-1200zM0 300v600l300 -300zM0 1100l600 -603l600 603h-1200zM900 600l300 300v-600z" /> +<glyph unicode="✏" d="M-13 -13l333 112l-223 223zM187 403l214 -214l614 614l-214 214zM887 1103l214 -214l99 92q13 13 13 32.5t-13 33.5l-153 153q-15 13 -33 13t-33 -13z" /> +<glyph unicode="" horiz-adv-x="500" d="M0 0z" /> +<glyph unicode="" d="M0 1200h1200l-500 -550v-550h300v-100h-800v100h300v550z" /> +<glyph unicode="" d="M14 84q18 -55 86 -75.5t147 5.5q65 21 109 69t44 90v606l600 155v-521q-64 16 -138 -7q-79 -26 -122.5 -83t-25.5 -111q18 -55 86 -75.5t147 4.5q70 23 111.5 63.5t41.5 95.5v881q0 10 -7 15.5t-17 2.5l-752 -193q-10 -3 -17 -12.5t-7 -19.5v-689q-64 17 -138 -7 q-79 -25 -122.5 -82t-25.5 -112z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233z" /> +<glyph unicode="" d="M100 784q0 64 28 123t73 100.5t104.5 64t119 20.5t120 -38.5t104.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100.5t27 -123q0 -57 -33.5 -117.5t-94 -124.5t-126.5 -127.5t-150 -152.5t-146 -174q-62 85 -145.5 174t-149.5 152.5t-126.5 127.5 t-94 124.5t-33.5 117.5z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447z" /> +<glyph unicode="" d="M-72 800h479l146 400h2l146 -400h472l-382 -278l145 -449l-384 275l-382 -275l146 447zM237 700l196 -142l-73 -226l192 140l195 -141l-74 229l193 140h-235l-77 211l-78 -211h-239z" /> +<glyph unicode="" d="M0 0v143l400 257v100q-37 0 -68.5 74.5t-31.5 125.5v200q0 124 88 212t212 88t212 -88t88 -212v-200q0 -51 -31.5 -125.5t-68.5 -74.5v-100l400 -257v-143h-1200z" /> +<glyph unicode="" d="M0 0v1100h1200v-1100h-1200zM100 100h100v100h-100v-100zM100 300h100v100h-100v-100zM100 500h100v100h-100v-100zM100 700h100v100h-100v-100zM100 900h100v100h-100v-100zM300 100h600v400h-600v-400zM300 600h600v400h-600v-400zM1000 100h100v100h-100v-100z M1000 300h100v100h-100v-100zM1000 500h100v100h-100v-100zM1000 700h100v100h-100v-100zM1000 900h100v100h-100v-100z" /> +<glyph unicode="" d="M0 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM0 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400 q-21 0 -35.5 14.5t-14.5 35.5zM600 50v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5zM600 650v400q0 21 14.5 35.5t35.5 14.5h400q21 0 35.5 -14.5t14.5 -35.5v-400 q0 -21 -14.5 -35.5t-35.5 -14.5h-400q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200 q-21 0 -35.5 14.5t-14.5 35.5zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 450v200q0 21 14.5 35.5t35.5 14.5h200 q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM800 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM0 450q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v200q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5 t-14.5 -35.5v-200zM0 850v200q0 21 14.5 35.5t35.5 14.5h200q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-200q-21 0 -35.5 14.5t-14.5 35.5zM400 50v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5 t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 450v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5zM400 850v200q0 21 14.5 35.5t35.5 14.5h700q21 0 35.5 -14.5t14.5 -35.5 v-200q0 -21 -14.5 -35.5t-35.5 -14.5h-700q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M29 454l419 -420l818 820l-212 212l-607 -607l-206 207z" /> +<glyph unicode="" d="M106 318l282 282l-282 282l212 212l282 -282l282 282l212 -212l-282 -282l282 -282l-212 -212l-282 282l-282 -282z" /> +<glyph unicode="" d="M23 693q0 200 142 342t342 142t342 -142t142 -342q0 -142 -78 -261l300 -300q7 -8 7 -18t-7 -18l-109 -109q-8 -7 -18 -7t-18 7l-300 300q-119 -78 -261 -78q-200 0 -342 142t-142 342zM176 693q0 -136 97 -233t234 -97t233.5 96.5t96.5 233.5t-96.5 233.5t-233.5 96.5 t-234 -97t-97 -233zM300 600v200h100v100h200v-100h100v-200h-100v-100h-200v100h-100z" /> +<glyph unicode="" d="M23 694q0 200 142 342t342 142t342 -142t142 -342q0 -141 -78 -262l300 -299q7 -7 7 -18t-7 -18l-109 -109q-8 -8 -18 -8t-18 8l-300 299q-120 -77 -261 -77q-200 0 -342 142t-142 342zM176 694q0 -136 97 -233t234 -97t233.5 97t96.5 233t-96.5 233t-233.5 97t-234 -97 t-97 -233zM300 601h400v200h-400v-200z" /> +<glyph unicode="" d="M23 600q0 183 105 331t272 210v-166q-103 -55 -165 -155t-62 -220q0 -177 125 -302t302 -125t302 125t125 302q0 120 -62 220t-165 155v166q167 -62 272 -210t105 -331q0 -118 -45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5 zM500 750q0 -21 14.5 -35.5t35.5 -14.5h100q21 0 35.5 14.5t14.5 35.5v400q0 21 -14.5 35.5t-35.5 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-400z" /> +<glyph unicode="" d="M100 1h200v300h-200v-300zM400 1v500h200v-500h-200zM700 1v800h200v-800h-200zM1000 1v1200h200v-1200h-200z" /> +<glyph unicode="" d="M26 601q0 -33 6 -74l151 -38l2 -6q14 -49 38 -93l3 -5l-80 -134q45 -59 105 -105l133 81l5 -3q45 -26 94 -39l5 -2l38 -151q40 -5 74 -5q27 0 74 5l38 151l6 2q46 13 93 39l5 3l134 -81q56 44 104 105l-80 134l3 5q24 44 39 93l1 6l152 38q5 40 5 74q0 28 -5 73l-152 38 l-1 6q-16 51 -39 93l-3 5l80 134q-44 58 -104 105l-134 -81l-5 3q-45 25 -93 39l-6 1l-38 152q-40 5 -74 5q-27 0 -74 -5l-38 -152l-5 -1q-50 -14 -94 -39l-5 -3l-133 81q-59 -47 -105 -105l80 -134l-3 -5q-25 -47 -38 -93l-2 -6l-151 -38q-6 -48 -6 -73zM385 601 q0 88 63 151t152 63t152 -63t63 -151q0 -89 -63 -152t-152 -63t-152 63t-63 152z" /> +<glyph unicode="" d="M100 1025v50q0 10 7.5 17.5t17.5 7.5h275v100q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5v-100h275q10 0 17.5 -7.5t7.5 -17.5v-50q0 -11 -7 -18t-18 -7h-1050q-11 0 -18 7t-7 18zM200 100v800h900v-800q0 -41 -29.5 -71t-70.5 -30h-700q-41 0 -70.5 30 t-29.5 71zM300 100h100v700h-100v-700zM500 100h100v700h-100v-700zM500 1100h300v100h-300v-100zM700 100h100v700h-100v-700zM900 100h100v700h-100v-700z" /> +<glyph unicode="" d="M1 601l656 644l644 -644h-200v-600h-300v400h-300v-400h-300v600h-200z" /> +<glyph unicode="" d="M100 25v1150q0 11 7 18t18 7h475v-500h400v-675q0 -11 -7 -18t-18 -7h-850q-11 0 -18 7t-7 18zM700 800v300l300 -300h-300z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM500 500v400h100v-300h200v-100h-300z" /> +<glyph unicode="" d="M-100 0l431 1200h209l-21 -300h162l-20 300h208l431 -1200h-538l-41 400h-242l-40 -400h-539zM488 500h224l-27 300h-170z" /> +<glyph unicode="" d="M0 0v400h490l-290 300h200v500h300v-500h200l-290 -300h490v-400h-1100zM813 200h175v100h-175v-100z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM350 600h150v300h200v-300h150l-250 -300z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM350 600h150v-300h200v300h150l-250 300z" /> +<glyph unicode="" d="M0 25v475l200 700h800q199 -700 200 -700v-475q0 -11 -7 -18t-18 -7h-1150q-11 0 -18 7t-7 18zM200 500h200l50 -200h300l50 200h200l-97 500h-606z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 601q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM500 397v401l297 -200z" /> +<glyph unicode="" d="M23 600q0 -118 45.5 -224.5t123 -184t184 -123t224.5 -45.5t224.5 45.5t184 123t123 184t45.5 224.5h-150q0 -177 -125 -302t-302 -125t-302 125t-125 302t125 302t302 125q136 0 246 -81l-146 -146h400v400l-145 -145q-157 122 -355 122q-118 0 -224.5 -45.5t-184 -123 t-123 -184t-45.5 -224.5z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5q198 0 355 -122l145 145v-400h-400l147 147q-112 80 -247 80q-177 0 -302 -125t-125 -302h-150zM100 0v400h400l-147 -147q112 -80 247 -80q177 0 302 125t125 302h150q0 -118 -45.5 -224.5t-123 -184t-184 -123 t-224.5 -45.5q-198 0 -355 122z" /> +<glyph unicode="" d="M100 0h1100v1200h-1100v-1200zM200 100v900h900v-900h-900zM300 200v100h100v-100h-100zM300 400v100h100v-100h-100zM300 600v100h100v-100h-100zM300 800v100h100v-100h-100zM500 200h500v100h-500v-100zM500 400v100h500v-100h-500zM500 600v100h500v-100h-500z M500 800v100h500v-100h-500z" /> +<glyph unicode="" d="M0 100v600q0 41 29.5 70.5t70.5 29.5h100v200q0 82 59 141t141 59h300q82 0 141 -59t59 -141v-200h100q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-900q-41 0 -70.5 29.5t-29.5 70.5zM400 800h300v150q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-150z" /> +<glyph unicode="" d="M100 0v1100h100v-1100h-100zM300 400q60 60 127.5 84t127.5 17.5t122 -23t119 -30t110 -11t103 42t91 120.5v500q-40 -81 -101.5 -115.5t-127.5 -29.5t-138 25t-139.5 40t-125.5 25t-103 -29.5t-65 -115.5v-500z" /> +<glyph unicode="" d="M0 275q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v300q0 127 70.5 231.5t184.5 161.5t245 57t245 -57t184.5 -161.5t70.5 -231.5v-300q0 -11 7 -18t18 -7h50q11 0 18 7t7 18v275v25q0 116 -49.5 227t-131 192.5t-192.5 131t-227 49.5t-227 -49.5t-192.5 -131t-131 -192.5 t-49.5 -227v-300zM200 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14zM800 20v460q0 8 6 14t14 6h160q8 0 14 -6t6 -14v-460q0 -8 -6 -14t-14 -6h-160q-8 0 -14 6t-6 14z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM688 459l141 141l-141 141l71 71l141 -141l141 141l71 -71l-141 -141l141 -141l-71 -71l-141 141l-141 -141z" /> +<glyph unicode="" d="M0 400h300l300 -200v800l-300 -200h-300v-400zM700 857l69 53q111 -135 111 -310q0 -169 -106 -302l-67 54q86 110 86 248q0 146 -93 257z" /> +<glyph unicode="" d="M0 401v400h300l300 200v-800l-300 200h-300zM702 858l69 53q111 -135 111 -310q0 -170 -106 -303l-67 55q86 108 86 248q0 145 -93 257zM889 951l7 -8q123 -151 123 -344q0 -189 -119 -339l-7 -8l81 -66l6 8q142 178 142 405q0 230 -144 408l-6 8z" /> +<glyph unicode="" d="M0 0h500v500h-200v100h-100v-100h-200v-500zM0 600h100v100h400v100h100v100h-100v300h-500v-600zM100 100v300h300v-300h-300zM100 800v300h300v-300h-300zM200 200v100h100v-100h-100zM200 900h100v100h-100v-100zM500 500v100h300v-300h200v-100h-100v-100h-200v100 h-100v100h100v200h-200zM600 0v100h100v-100h-100zM600 1000h100v-300h200v-300h300v200h-200v100h200v500h-600v-200zM800 800v300h300v-300h-300zM900 0v100h300v-100h-300zM900 900v100h100v-100h-100zM1100 200v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200h100v1000h-100v-1000zM100 0v100h300v-100h-300zM200 200v1000h100v-1000h-100zM500 0v91h100v-91h-100zM500 200v1000h200v-1000h-200zM700 0v91h100v-91h-100zM800 200v1000h100v-1000h-100zM900 0v91h200v-91h-200zM1000 200v1000h200v-1000h-200z" /> +<glyph unicode="" d="M1 700v475q0 10 7.5 17.5t17.5 7.5h474l700 -700l-500 -500zM148 953q0 -42 29 -71q30 -30 71.5 -30t71.5 30q29 29 29 71t-29 71q-30 30 -71.5 30t-71.5 -30q-29 -29 -29 -71z" /> +<glyph unicode="" d="M2 700v475q0 11 7 18t18 7h474l700 -700l-500 -500zM148 953q0 -42 30 -71q29 -30 71 -30t71 30q30 29 30 71t-30 71q-29 30 -71 30t-71 -30q-30 -29 -30 -71zM701 1200h100l700 -700l-500 -500l-50 50l450 450z" /> +<glyph unicode="" d="M100 0v1025l175 175h925v-1000l-100 -100v1000h-750l-100 -100h750v-1000h-900z" /> +<glyph unicode="" d="M200 0l450 444l450 -443v1150q0 20 -14.5 35t-35.5 15h-800q-21 0 -35.5 -15t-14.5 -35v-1151z" /> +<glyph unicode="" d="M0 100v700h200l100 -200h600l100 200h200v-700h-200v200h-800v-200h-200zM253 829l40 -124h592l62 124l-94 346q-2 11 -10 18t-18 7h-450q-10 0 -18 -7t-10 -18zM281 24l38 152q2 10 11.5 17t19.5 7h500q10 0 19.5 -7t11.5 -17l38 -152q2 -10 -3.5 -17t-15.5 -7h-600 q-10 0 -15.5 7t-3.5 17z" /> +<glyph unicode="" d="M0 200q0 -41 29.5 -70.5t70.5 -29.5h1000q41 0 70.5 29.5t29.5 70.5v600q0 41 -29.5 70.5t-70.5 29.5h-150q-4 8 -11.5 21.5t-33 48t-53 61t-69 48t-83.5 21.5h-200q-41 0 -82 -20.5t-70 -50t-52 -59t-34 -50.5l-12 -20h-150q-41 0 -70.5 -29.5t-29.5 -70.5v-600z M356 500q0 100 72 172t172 72t172 -72t72 -172t-72 -172t-172 -72t-172 72t-72 172zM494 500q0 -44 31 -75t75 -31t75 31t31 75t-31 75t-75 31t-75 -31t-31 -75zM900 700v100h100v-100h-100z" /> +<glyph unicode="" d="M53 0h365v66q-41 0 -72 11t-49 38t1 71l92 234h391q67 -181 82 -222q16 -45 -5.5 -88.5t-74.5 -43.5v-66h417v66q-34 1 -74 43q-18 19 -33 42t-21 37l-6 13l-385 998h-93l-399 -1006q-24 -48 -52 -75q-12 -12 -33 -25t-36 -20l-15 -7v-66zM416 521l178 457l46 -140 l116 -317h-340z" /> +<glyph unicode="" d="M100 0v89q41 7 70.5 32.5t29.5 65.5v827q0 28 -1 39.5t-5.5 26t-15.5 21t-29 13.5t-49 14v71h471q76 0 145.5 -37.5t115 -111.5t45.5 -167q0 -55 -11.5 -101.5t-28 -74t-33.5 -47.5t-28 -28l-12 -7q8 -3 21.5 -9t48 -31.5t60.5 -58t47.5 -91.5t21.5 -129 q0 -84 -59 -156.5t-142 -111t-162 -38.5h-500zM400 200h161q89 0 153 48.5t64 132.5q0 90 -62.5 154.5t-156.5 64.5h-159v-400zM400 700h139q76 0 130 61.5t54 138.5q0 82 -84 130.5t-239 48.5v-379z" /> +<glyph unicode="" d="M200 0v57q77 7 134.5 40.5t65.5 80.5l173 849q10 56 -10 74t-91 37q-6 1 -10.5 2.5t-9.5 2.5v57h425l2 -57q-33 -8 -62 -25.5t-46 -37t-29.5 -38t-17.5 -30.5l-5 -12l-128 -825q-10 -52 14 -82t95 -36v-57h-500z" /> +<glyph unicode="" d="M-75 200h75v800h-75l125 167l125 -167h-75v-800h75l-125 -167zM300 900v300h150h700h150v-300h-50q0 29 -8 48.5t-18.5 30t-33.5 15t-39.5 5.5t-50.5 1h-200v-850l100 -50v-100h-400v100l100 50v850h-200q-34 0 -50.5 -1t-40 -5.5t-33.5 -15t-18.5 -30t-8.5 -48.5h-49z " /> +<glyph unicode="" d="M33 51l167 125v-75h800v75l167 -125l-167 -125v75h-800v-75zM100 901v300h150h700h150v-300h-50q0 29 -8 48.5t-18 30t-33.5 15t-40 5.5t-50.5 1h-200v-650l100 -50v-100h-400v100l100 50v650h-200q-34 0 -50.5 -1t-39.5 -5.5t-33.5 -15t-18.5 -30t-8 -48.5h-50z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 350q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM0 650q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1000q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 950q0 -20 14.5 -35t35.5 -15h600q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-600q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM0 650q0 -20 14.5 -35t35.5 -15h1100q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-1100q-21 0 -35.5 -14.5t-14.5 -35.5 v-100zM200 350q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM200 950q0 -20 14.5 -35t35.5 -15h700q21 0 35.5 15t14.5 35v100q0 21 -14.5 35.5t-35.5 14.5h-700q-21 0 -35.5 -14.5 t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM100 650v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1000q-21 0 -35.5 15 t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM500 950v100q0 21 14.5 35.5t35.5 14.5h600q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-600 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h1100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-1100 q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M0 50v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 350v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM0 650v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15t-14.5 35zM0 950v100q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-100q-21 0 -35.5 15 t-14.5 35zM300 50v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 350v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800 q-21 0 -35.5 15t-14.5 35zM300 650v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15h-800q-21 0 -35.5 15t-14.5 35zM300 950v100q0 21 14.5 35.5t35.5 14.5h800q21 0 35.5 -14.5t14.5 -35.5v-100q0 -20 -14.5 -35t-35.5 -15 h-800q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M-101 500v100h201v75l166 -125l-166 -125v75h-201zM300 0h100v1100h-100v-1100zM500 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35 v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 650q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM500 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100 q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100z" /> +<glyph unicode="" d="M1 50q0 -20 14.5 -35t35.5 -15h600q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-600q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 350q0 -20 14.5 -35t35.5 -15h300q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-300q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 650 q0 -20 14.5 -35t35.5 -15h500q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-500q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM1 950q0 -20 14.5 -35t35.5 -15h100q20 0 35 15t15 35v100q0 21 -15 35.5t-35 14.5h-100q-21 0 -35.5 -14.5t-14.5 -35.5v-100zM801 0v1100h100v-1100 h-100zM934 550l167 -125v75h200v100h-200v75z" /> +<glyph unicode="" d="M0 275v650q0 31 22 53t53 22h750q31 0 53 -22t22 -53v-650q0 -31 -22 -53t-53 -22h-750q-31 0 -53 22t-22 53zM900 600l300 300v-600z" /> +<glyph unicode="" d="M0 44v1012q0 18 13 31t31 13h1112q19 0 31.5 -13t12.5 -31v-1012q0 -18 -12.5 -31t-31.5 -13h-1112q-18 0 -31 13t-13 31zM100 263l247 182l298 -131l-74 156l293 318l236 -288v500h-1000v-737zM208 750q0 56 39 95t95 39t95 -39t39 -95t-39 -95t-95 -39t-95 39t-39 95z " /> +<glyph unicode="" d="M219 725q0 -116 60 -249q65 -114 158.5 -231.5t154.5 -178.5l61 -61q22 25 59.5 69t132 167t163.5 231q70 142 70 258q0 117 -57.5 218.5t-156.5 161t-216 59.5q-116 0 -215 -61t-156.5 -163.5t-57.5 -219.5zM431 752q0 92 64.5 157t156.5 65t157 -65t65 -157t-65 -156.5 t-157 -64.5t-156.5 64.5t-64.5 156.5z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5v854q-177 0 -302 -125t-125 -302z " /> +<glyph unicode="" d="M117 406q0 94 34 186t88.5 172.5t112 159t115 177t87.5 194.5q21 -71 57.5 -142.5t76 -130.5t83 -118.5t82 -117t70 -116t50 -125.5t18.5 -136q0 -89 -39 -165.5t-102 -126.5t-140 -79.5t-156 -33.5q-114 6 -211.5 53t-161.5 138.5t-64 210.5zM243 414q14 -82 59.5 -136 t136.5 -80l16 98q-7 6 -18 17t-34 48t-33 77q-15 73 -14 143.5t10 122.5l9 51q-92 -110 -119.5 -185t-12.5 -156z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5q366 -6 397 -14l-186 -186h-311q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v125l200 200v-225q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM436 341l161 50l412 412l-114 113l-405 -405zM994 1015l114 -113l113 113l-21 85l-92 28z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h261l2 -80q-133 -32 -218 -120h-145q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5l200 153v-53q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5 zM423 524q30 38 81.5 64t103 35.5t99 14t77.5 3.5l29 -1v-209l360 324l-359 318v-216q-7 0 -19 -1t-48 -8t-69.5 -18.5t-76.5 -37t-76.5 -59t-62 -88t-39.5 -121.5z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q60 0 127 -23l-178 -177h-349q-41 0 -70.5 -29.5t-29.5 -70.5v-500q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v69l200 200v-169q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5 t-117.5 282.5zM342 632l283 -284l566 567l-136 137l-430 -431l-147 147z" /> +<glyph unicode="" d="M0 603l300 296v-198h200v200h-200l300 300l295 -300h-195v-200h200v198l300 -296l-300 -300v198h-200v-200h195l-295 -300l-300 300h200v200h-200v-198z" /> +<glyph unicode="" d="M200 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-1100l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M0 50v1000q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-437l500 487v-487l500 487v-1100l-500 488v-488l-500 488v-438q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5z" /> +<glyph unicode="" d="M136 550l564 550v-487l500 487v-1100l-500 488v-488z" /> +<glyph unicode="" d="M200 0l900 550l-900 550v-1100z" /> +<glyph unicode="" d="M200 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200q-21 0 -35.5 -14.5t-14.5 -35.5v-800zM600 150q0 -21 14.5 -35.5t35.5 -14.5h200q21 0 35.5 14.5t14.5 35.5v800q0 21 -14.5 35.5t-35.5 14.5h-200 q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M200 150q0 -20 14.5 -35t35.5 -15h800q21 0 35.5 15t14.5 35v800q0 21 -14.5 35.5t-35.5 14.5h-800q-21 0 -35.5 -14.5t-14.5 -35.5v-800z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l564 -550l-564 -550v488z" /> +<glyph unicode="" d="M0 0v1100l500 -487v487l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438l-500 -488v488z" /> +<glyph unicode="" d="M300 0v1100l500 -487v437q0 21 14.5 35.5t35.5 14.5h100q21 0 35.5 -14.5t14.5 -35.5v-1000q0 -21 -14.5 -35.5t-35.5 -14.5h-100q-21 0 -35.5 14.5t-14.5 35.5v438z" /> +<glyph unicode="" d="M100 250v100q0 21 14.5 35.5t35.5 14.5h1000q21 0 35.5 -14.5t14.5 -35.5v-100q0 -21 -14.5 -35.5t-35.5 -14.5h-1000q-21 0 -35.5 14.5t-14.5 35.5zM100 500h1100l-550 564z" /> +<glyph unicode="" d="M136 550v1l551 550l198 -197l-352 -353l352 -353l-198 -198z" /> +<glyph unicode="" d="M315 198l198 -198l552 550l-1 1l-551 550l-198 -197l353 -353z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM300 500h200v-200h200v200h200v200h-200v200h-200v-200h-200v-200z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM300 500h600v200h-600v-200z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM247 459l212 -212l141 141l141 -141l213 212l-142 141l142 142l-213 212 l-141 -142l-141 142l-212 -212l141 -142z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM270 551l276 -277l411 411l-175 174l-236 -236l-102 102z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM364 700h143q4 0 11.5 -1t11 -0.5t6.5 3t3 8.5t1 11t3.5 8.5t3.5 6t5.5 4 t6.5 2.5t9 1.5t9 0.5h11.5h12.5q19 0 30 -10t11 -26q0 -21 -4.5 -27.5t-26.5 -21.5q-5 -1 -12.5 -3.5t-27 -13.5t-34 -27t-26.5 -46.5t-11 -68.5h200q5 3 14 8t31.5 25.5t39.5 46t31 69t14 93.5q0 51 -17.5 89t-42 58t-58.5 32t-58.5 15t-51.5 3q-50 0 -90.5 -12t-75 -38.5 t-53.5 -74.5t-19 -114zM500 300h200v100h-200v-100z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM400 300h400v100h-100v300h-300v-100h100v-200h-100v-100zM500 800h200 v100h-200v-100z" /> +<glyph unicode="" d="M0 500v200h194q15 60 36 104.5t55.5 86t88 69t126.5 40.5v200h200v-200q54 -20 113 -60t112.5 -105.5t71.5 -134.5h6h165h32v-200h-203q-25 -102 -116.5 -186t-180.5 -117v-197h-200v197q-140 27 -208 102.5t-98 200.5h-194zM290 500q24 -73 79.5 -127.5t130.5 -78.5v206 h200v-206q149 48 201 206h-201v200h200q-25 74 -76 127.5t-124 76.5v-204h-200v203q-75 -24 -130 -77.5t-79 -125.5h209v-200h-210z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM384 465l135 135l-135 135l81 81l135 -135l135 135l81 -81l-135 -135l135 -135l-81 -81l-135 136l-135 -136z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125 -301.5t302 -125.5t302 125.5t125 301.5 q0 177 -125 302t-302 125t-302 -125t-125 -302zM350 537l113 113l87 -87l204 204l113 -113l-317 -317z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -119 66 -225l586 587q-105 65 -225 65q-177 0 -302 -125 t-125 -302zM381 235q104 -62 219 -62q177 0 302 125.5t125 301.5q0 117 -62 219z" /> +<glyph unicode="" d="M0 547l600 453v-300h600v-300h-600v-301z" /> +<glyph unicode="" d="M0 400v300h600v300l600 -453l-600 -448v301h-600z" /> +<glyph unicode="" d="M204 600l450 600l444 -600h-298v-600h-300v600h-296z" /> +<glyph unicode="" d="M104 600h296v600h300v-600h298l-449 -600z" /> +<glyph unicode="" d="M0 200q5 105 27 193t68 167t113 135t166.5 91.5t225.5 42.5v271l600 -453l-600 -448v301q-94 -2 -182.5 -20t-170.5 -52.5t-147 -92.5t-100 -135z" /> +<glyph unicode="" d="M0 0v400l129 -129l294 294l142 -142l-294 -294l129 -129h-400zM635 777l142 -142l294 294l129 -129v400h-400l129 -129z" /> +<glyph unicode="" d="M34 176l295 295l-129 129h400v-400l-129 130l-295 -295zM600 600v400l129 -129l295 295l142 -142l-295 -294l129 -130h-400z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM456 851l58 -302q4 -20 21.5 -34.5t37.5 -14.5h54q20 0 37.5 14.5 t21.5 34.5l58 302q4 20 -8 34.5t-33 14.5h-207q-20 0 -32 -14.5t-8 -34.5zM500 300h200v100h-200v-100z" /> +<glyph unicode="" d="M0 800h100v-200h400v300h200v-300h400v200h100v100h-111v6t-1 15t-3 18l-34 172q-11 39 -41.5 63t-69.5 24q-32 0 -61 -17l-239 -144q-22 -13 -40 -35q-19 24 -40 36l-238 144q-33 18 -62 18q-39 0 -69.5 -23t-40.5 -61l-35 -177q-2 -8 -3 -18t-1 -15v-6h-111v-100z M100 0h400v400h-400v-400zM200 900q-3 0 14 48t35 96l18 47l214 -191h-281zM700 0v400h400v-400h-400zM731 900l202 197q5 -12 12 -32.5t23 -64t25 -72t7 -28.5h-269z" /> +<glyph unicode="" d="M0 -22v143l216 193q-9 53 -13 83t-5.5 94t9 113t38.5 114t74 124q47 60 99.5 102.5t103 68t127.5 48t145.5 37.5t184.5 43.5t220 58.5q0 -189 -22 -343t-59 -258t-89 -181.5t-108.5 -120t-122 -68t-125.5 -30t-121.5 -1.5t-107.5 12.5t-87.5 17t-56.5 7.5l-99 -55z M238.5 300.5q19.5 -6.5 86.5 76.5q55 66 367 234q70 38 118.5 69.5t102 79t99 111.5t86.5 148q22 50 24 60t-6 19q-7 5 -17 5t-26.5 -14.5t-33.5 -39.5q-35 -51 -113.5 -108.5t-139.5 -89.5l-61 -32q-369 -197 -458 -401q-48 -111 -28.5 -117.5z" /> +<glyph unicode="" d="M111 408q0 -33 5 -63q9 -56 44 -119.5t105 -108.5q31 -21 64 -16t62 23.5t57 49.5t48 61.5t35 60.5q32 66 39 184.5t-13 157.5q79 -80 122 -164t26 -184q-4 -23 -14 -51.5t-20 -49t-24 -49.5q-10 -19 -14.5 -29t-12 -26t-9 -23.5t-3 -19t2.5 -15.5t11 -9.5t19.5 -5 t30.5 2.5t42 8q57 20 91 34t87.5 44.5t87 64t65.5 88.5t47 122q38 172 -44.5 341.5t-246.5 278.5q22 -44 43 -129q39 -159 -32 -154q-15 2 -33 9q-79 33 -120.5 100t-44 175.5t48.5 257.5q-13 -8 -34 -23.5t-72.5 -66.5t-88.5 -105.5t-60 -138t-8 -166.5q2 -12 8 -41.5 t8 -43t6 -39.5t3.5 -39.5t-1 -33.5t-6 -31.5t-13.5 -24t-21 -20.5t-31 -12q-38 -10 -67 13t-40.5 61.5t-15 81.5t10.5 75q-52 -46 -83.5 -101t-39 -107t-7.5 -85z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5t145.5 -23.5t132.5 -59t116.5 -83.5t97 -90t74.5 -85.5t49 -63.5t20 -30l26 -40l-26 -40q-6 -10 -20 -30t-49 -63.5t-74.5 -85.5t-97 -90t-116.5 -83.5t-132.5 -59t-145.5 -23.5 t-145.5 23.5t-132.5 59t-116.5 83.5t-97 90t-74.5 85.5t-49 63.5t-20 30zM120 600q7 -10 40.5 -58t56 -78.5t68 -77.5t87.5 -75t103 -49.5t125 -21.5t123.5 20t100.5 45.5t85.5 71.5t66.5 75.5t58 81.5t47 66q-1 1 -28.5 37.5t-42 55t-43.5 53t-57.5 63.5t-58.5 54 q49 -74 49 -163q0 -124 -88 -212t-212 -88t-212 88t-88 212q0 85 46 158q-102 -87 -226 -258zM377 656q49 -124 154 -191l105 105q-37 24 -75 72t-57 84l-20 36z" /> +<glyph unicode="" d="M-61 600l26 40q6 10 20 30t49 63.5t74.5 85.5t97 90t116.5 83.5t132.5 59t145.5 23.5q61 0 121 -17l37 142h148l-314 -1200h-148l37 143q-82 21 -165 71.5t-140 102t-109.5 112t-72 88.5t-29.5 43zM119 600q37 -48 65.5 -82.5t84 -93t118.5 -100t126 -60.5l37 141 q-107 18 -178.5 101.5t-71.5 193.5q0 85 46 158q-97 -83 -227 -258zM377 656q49 -124 154 -191l47 47l23 87q-30 28 -59.5 69t-43.5 68l-15 26zM780 161l38 145q22 15 45 34t45.5 43.5t40.5 44.5t40.5 49.5t34 44.5t32 44t24.5 34q-83 113 -139 175l38 146 q68 -54 132.5 -125.5t87.5 -103.5t36 -52l26 -40l-26 -40q-7 -12 -25.5 -38t-63.5 -79.5t-95.5 -102.5t-124 -100t-146.5 -79z" /> +<glyph unicode="" d="M-97.5 34q13.5 -34 50.5 -34h1294q37 0 50.5 35.5t-7.5 67.5l-642 1056q-20 33 -48 36t-48 -29l-642 -1066q-21 -32 -7.5 -66zM155 200l445 723l445 -723h-345v100h-200v-100h-345zM500 600l100 -300l100 300v100h-200v-100z" /> +<glyph unicode="" d="M100 262v41q0 20 11 44.5t26 38.5l363 325v339q0 62 44 106t106 44t106 -44t44 -106v-339l363 -325q15 -14 26 -38.5t11 -44.5v-41q0 -20 -12 -26.5t-29 5.5l-359 249v-263q100 -91 100 -113v-64q0 -20 -13 -28.5t-32 0.5l-94 78h-222l-94 -78q-19 -9 -32 -0.5t-13 28.5 v64q0 22 100 113v263l-359 -249q-17 -12 -29 -5.5t-12 26.5z" /> +<glyph unicode="" d="M0 50q0 -20 14.5 -35t35.5 -15h1000q21 0 35.5 15t14.5 35v750h-1100v-750zM0 900h1100v150q0 21 -14.5 35.5t-35.5 14.5h-150v100h-100v-100h-500v100h-100v-100h-150q-21 0 -35.5 -14.5t-14.5 -35.5v-150zM100 100v100h100v-100h-100zM100 300v100h100v-100h-100z M100 500v100h100v-100h-100zM300 100v100h100v-100h-100zM300 300v100h100v-100h-100zM300 500v100h100v-100h-100zM500 100v100h100v-100h-100zM500 300v100h100v-100h-100zM500 500v100h100v-100h-100zM700 100v100h100v-100h-100zM700 300v100h100v-100h-100zM700 500 v100h100v-100h-100zM900 100v100h100v-100h-100zM900 300v100h100v-100h-100zM900 500v100h100v-100h-100z" /> +<glyph unicode="" d="M0 200v200h259l600 600h241v198l300 -295l-300 -300v197h-159l-600 -600h-341zM0 800h259l122 -122l141 142l-181 180h-341v-200zM678 381l141 142l122 -123h159v198l300 -295l-300 -300v197h-241z" /> +<glyph unicode="" d="M0 400v600q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-600q0 -41 -29.5 -70.5t-70.5 -29.5h-596l-304 -300v300h-100q-41 0 -70.5 29.5t-29.5 70.5z" /> +<glyph unicode="" d="M100 600v200h300v-250v-26v-55.5t3.5 -50t11 -47.5t22 -37t35.5 -31.5t53.5 -18t74.5 -7.5t74.5 8t53.5 18.5t35.5 32t22 38t11 48t3.5 49.5v54v25v250h300v-200q0 -42 -3 -83t-15 -104t-31.5 -116t-58 -109.5t-89 -96.5t-129 -65.5t-174.5 -25.5t-174.5 25.5t-129 65.5 t-89 96.5t-58 109.5t-31.5 116t-15 104t-3 83zM100 900v300h300v-300h-300zM800 900v300h300v-300h-300z" /> +<glyph unicode="" d="M-1 410l198 -198l353 353l353 -353l198 198l-550 552z" /> +<glyph unicode="" d="M99 797l551 -551l550 551l-198 198l-353 -352l-352 352z" /> +<glyph unicode="" d="M-198 700l299 283l300 -283h-203v-400h385l215 -200h-800v600h-196zM402 1000l215 -200h381v-400h-199l300 -283l299 283h-200v600h-796z" /> +<glyph unicode="" d="M18 939q-5 24 10 42q14 19 39 19h896l38 162q5 17 18.5 27.5t30.5 10.5h94q20 0 35 -14.5t15 -35.5t-15 -35.5t-35 -14.5h-54l-201 -961q-2 -4 -6 -10.5t-19 -17.5t-33 -11h-31v-50q0 -21 -14.5 -35.5t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-300v-50q0 -21 -14.5 -35.5 t-35.5 -14.5t-35.5 14.5t-14.5 35.5v50h-50q-21 0 -35.5 14.5t-14.5 35.5t14.5 35.5t35.5 14.5h535l48 200h-633q-32 0 -54.5 21t-27.5 43z" /> +<glyph unicode="" d="M0 0v800h1200v-800h-1200zM0 900v100h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-100h-1200z" /> +<glyph unicode="" d="M1 0l300 700h1200l-300 -700h-1200zM1 400v600h200q0 41 29.5 70.5t70.5 29.5h300q41 0 70.5 -29.5t29.5 -70.5h500v-200h-1000z" /> +<glyph unicode="" d="M302 300h198v600h-198l298 300l298 -300h-198v-600h198l-298 -300z" /> +<glyph unicode="" d="M0 600l300 298v-198h600v198l300 -298l-300 -297v197h-600v-197z" /> +<glyph unicode="" d="M0 100v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM31 400l172 739q5 22 23 41.5t38 19.5h672q19 0 37.5 -22.5t23.5 -45.5l172 -732h-1138zM800 100h100v100h-100v-100z M1000 100h100v100h-100v-100z" /> +<glyph unicode="" d="M-101 600v50q0 24 25 49t50 38l25 13v-250l-11 5.5t-24 14t-30 21.5t-24 27.5t-11 31.5zM100 500v250v8v8v7t0.5 7t1.5 5.5t2 5t3 4t4.5 3.5t6 1.5t7.5 0.5h200l675 250v-850l-675 200h-38l47 -276q2 -12 -3 -17.5t-11 -6t-21 -0.5h-8h-83q-20 0 -34.5 14t-18.5 35 q-55 337 -55 351zM1100 200v850q0 21 14.5 35.5t35.5 14.5q20 0 35 -14.5t15 -35.5v-850q0 -20 -15 -35t-35 -15q-21 0 -35.5 15t-14.5 35z" /> +<glyph unicode="" d="M74 350q0 21 13.5 35.5t33.5 14.5h17l118 173l63 327q15 77 76 140t144 83l-18 32q-6 19 3 32t29 13h94q20 0 29 -10.5t3 -29.5q-18 -36 -18 -37q83 -19 144 -82.5t76 -140.5l63 -327l118 -173h17q20 0 33.5 -14.5t13.5 -35.5q0 -20 -13 -40t-31 -27q-22 -9 -63 -23 t-167.5 -37t-251.5 -23t-245.5 20.5t-178.5 41.5l-58 20q-18 7 -31 27.5t-13 40.5zM497 110q12 -49 40 -79.5t63 -30.5t63 30.5t39 79.5q-48 -6 -102 -6t-103 6z" /> +<glyph unicode="" d="M21 445l233 -45l-78 -224l224 78l45 -233l155 179l155 -179l45 233l224 -78l-78 224l234 45l-180 155l180 156l-234 44l78 225l-224 -78l-45 233l-155 -180l-155 180l-45 -233l-224 78l78 -225l-233 -44l179 -156z" /> +<glyph unicode="" d="M0 200v600h200v-600h-200zM300 275v400q0 37 20 63l145 196l96 198q14 28 38 48t51 20h50q39 0 69.5 -40.5t30.5 -84.5v-150l-28 -125h328q39 0 69.5 -40.5t30.5 -84.5v-100q0 -43 -29 -74l-238 -344q-37 -57 -83 -57h-250q-7 0 -41.5 25t-66.5 50l-31 25h-61 q-100 0 -100 75z" /> +<glyph unicode="" d="M0 400v600h200v-600h-200zM300 525v400q0 75 100 75h61q123 100 139 100h250q46 0 83 -57l238 -344q29 -31 29 -74v-100q0 -44 -30.5 -84.5t-69.5 -40.5h-328q28 -118 28 -125v-150q0 -44 -30.5 -84.5t-69.5 -40.5h-50q-27 0 -51 20t-38 48l-96 198l-145 196 q-20 26 -20 63z" /> +<glyph unicode="" d="M8 200v600h200v-600h-200zM308 275q0 -13 83 -94t90 -81h341q15 0 28.5 19.5t20.5 41.5l130 339h107q84 0 138.5 39t54.5 111t-53.5 110t-138.5 38h-302l85 121q11 15 10.5 34t-13.5 32l-110 112q-22 22 -53 6l-362 -230q-6 -4 -15.5 -10.5t-25 -26t-15.5 -36.5v-525z M408 289v503l339 236l86 -83l-147 -183q-17 -23 -5 -47q2 -3 4 -5.5t4 -4t5.5 -2.5t5 -1.5t6 -1t6.5 -0.5h7.5h6.5h457q22 0 30.5 -25t-0.5 -50t-30 -25h-203q-15 0 -28.5 -20t-19.5 -41l-131 -339h-293z" /> +<glyph unicode="" d="M-101 651q0 -72 55 -111t139 -39h107l130 -339q6 -21 19.5 -41t29.5 -20h341q8 0 94 80.5t86 93.5v526q0 17 -15 35.5t-30 27.5l-15 10l-365 230q-32 14 -54 -6l-109 -113q-13 -13 -13.5 -32t10.5 -34l85 -121q-101 1 -302 1q-85 0 -139 -38t-54 -110zM-1 601v100h476 h6.5h7.5t6.5 0.5t6.5 1t5.5 1.5t5 2.5l4 4t3.5 5.5q13 24 -5 46l-145 184l87 83l343 -237v-502l-107 -89h-293l-131 339q-6 20 -19.5 40.5t-28.5 20.5h-222zM1000 201v600h200v-600h-200z" /> +<glyph unicode="" d="M97 719l230 -363q4 -6 10.5 -15.5t26 -25t36.5 -15.5h525q13 0 94 83t81 90v342q0 15 -20 28.5t-41 19.5l-339 131v106q0 84 -39 139t-111 55t-110 -53.5t-38 -138.5v-302l-121 84q-15 12 -33.5 11.5t-32.5 -13.5l-112 -110q-22 -22 -6 -53zM172 739l83 86l183 -146 q22 -18 47 -5q3 1 5.5 3.5l4 4t2.5 5t1.5 5.5t1 6.5t0.5 6v7.5v7v456q0 22 25 31t50 -0.5t25 -30.5v-203q0 -15 20 -28.5t41 -19.5l339 -131v-293l-89 -100h-503zM400 0v200h600v-200h-600z" /> +<glyph unicode="" d="M1 585q-15 -31 7 -53l112 -110q13 -13 32 -13.5t34 10.5l121 85q0 -51 -0.5 -153.5t-0.5 -148.5q0 -84 38.5 -138t110.5 -54t111 55t39 139v106l339 131q20 6 40.5 19.5t20.5 28.5v342q0 7 -81 90t-94 83h-525q-17 0 -35.5 -14t-28.5 -28l-10 -15zM76 565l237 339h503 l89 -100v-294l-340 -130q-21 -7 -40.5 -20.5t-19.5 -28.5v-202q0 -22 -25 -31t-50 0t-25 31v456v14.5t-1.5 11.5t-5 12t-9.5 7q-24 13 -46 -5l-184 -146zM305 1104v200h600v-200h-600z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM298 500h300v-194l402 294l-402 299v-198h-300v-201z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM200 600l400 -294v194h300v201h-298v198z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM302 599h197v-300h201v300h194l-294 401z" /> +<glyph unicode="" d="M22 600q0 157 77.5 290.5t210.5 210.5t290 77t290 -77t210.5 -210.5t77.5 -290.5t-77.5 -290t-210.5 -210.5t-290 -77.5t-290 77.5t-210.5 210.5t-77.5 290zM306 602l294 -402l298 402h-197v300h-201v-300h-194z" /> +<glyph unicode="" d="M24 600q0 154 78 287t211 211t287 78t287 -78t211 -211t78 -287t-78 -287t-211 -211t-287 -78t-287 78t-211 211t-78 287zM254 780q-8 -33 5.5 -92.5t7.5 -87.5q0 -9 17 -44t16 -60q12 0 23 -5.5t23 -15t20 -13.5q16 -8 34 -15t40 -14.5t34 -12.5q22 -8 53 -31.5 t59.5 -38.5t57.5 -11q8 -18 -15 -55t-20 -57q42 -71 87 -80q0 -6 -3 -15.5t-3.5 -14.5t4.5 -17q104 -3 221 112q30 29 47 47t34.5 49.5t20.5 62.5q-14 9 -37.5 9t-35.5 7q-14 8 -49 15.5t-52 18.5q-9 0 -39.5 -0.5t-46.5 -1.5t-39 -6.5t-39 -16.5q-50 -35 -66 -12 q-4 2 -3.5 25.5t0.5 25.5q-6 13 -26.5 17t-24.5 7q2 22 -2 41t-16.5 28t-38.5 -20q-23 -25 -42 4q-19 28 -8 58q6 16 22 22q6 -1 26 -1.5t33.5 -4t19.5 -13.5q12 -19 32 -37.5t34 -27.5l14 -8q0 3 9.5 39.5t5.5 57.5q-4 23 14.5 44.5t22.5 31.5q5 14 10 35t8.5 31t15.5 22.5 t34 22.5q-6 17 10 36q8 0 23.5 -1.5t24.5 -1.5t20.5 4.5t20.5 15.5q-10 23 -30.5 42.5t-38 30t-49 26.5t-43.5 23q11 41 1 44q31 -13 58.5 -14.5t39.5 3.5l11 4q6 36 -17 53.5t-64 28.5t-56 23q-20 -3 -37 1q-16 -13 -37.5 -21.5t-34 -12t-44 -8.5t-38.5 -6 q-15 -3 -45.5 0.5t-45.5 -2.5q-22 -8 -52.5 -27t-33.5 -34q-3 -11 6.5 -22.5t8.5 -18.5q-3 -34 -27.5 -90.5t-29.5 -79.5zM518 916q3 12 16 30t16 25q10 -10 18.5 -10t14 6t14.5 14.5t16 12.5q0 -17 8 -41.5t16.5 -44.5t9.5 -24q-9 2 -39.5 6t-52 10t-37.5 16z" /> +<glyph unicode="" d="M0 164.5q0 21.5 15 37.5l600 599q-33 101 6 201.5t135 154.5q164 92 306 -9l-259 -138l145 -232l251 126q13 -175 -151 -267q-123 -70 -253 -23l-596 -596q-15 -16 -36.5 -16t-36.5 16l-111 110q-15 15 -15 36.5z" /> +<glyph unicode="" horiz-adv-x="1220" d="M0 196v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 596v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000 q-41 0 -70.5 29.5t-29.5 70.5zM0 996v100q0 41 29.5 70.5t70.5 29.5h1000q41 0 70.5 -29.5t29.5 -70.5v-100q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM600 596h500v100h-500v-100zM800 196h300v100h-300v-100zM900 996h200v100h-200v-100z" /> +<glyph unicode="" d="M100 1100v100h1000v-100h-1000zM150 1000h900l-350 -500v-300l-200 -200v500z" /> +<glyph unicode="" d="M0 200v200h1200v-200q0 -41 -29.5 -70.5t-70.5 -29.5h-1000q-41 0 -70.5 29.5t-29.5 70.5zM0 500v400q0 41 29.5 70.5t70.5 29.5h300v100q0 41 29.5 70.5t70.5 29.5h200q41 0 70.5 -29.5t29.5 -70.5v-100h300q41 0 70.5 -29.5t29.5 -70.5v-400h-500v100h-200v-100h-500z M500 1000h200v100h-200v-100z" /> +<glyph unicode="" d="M0 0v400l129 -129l200 200l142 -142l-200 -200l129 -129h-400zM0 800l129 129l200 -200l142 142l-200 200l129 129h-400v-400zM729 329l142 142l200 -200l129 129v-400h-400l129 129zM729 871l200 200l-129 129h400v-400l-129 129l-200 -200z" /> +<glyph unicode="" d="M23 600q0 118 45.5 224.5t123 184t184 123t224.5 45.5t224.5 -45.5t184 -123t123 -184t45.5 -224.5t-45.5 -224.5t-123 -184t-184 -123t-224.5 -45.5t-224.5 45.5t-184 123t-123 184t-45.5 224.5zM173 600q0 -176 125.5 -301.5t301.5 -125.5q177 0 302 125.5t125 301.5 q0 177 -125 302t-302 125q-176 0 -301.5 -125t-125.5 -302zM291 655q0 23 16 39t38 16q23 0 39 -16t16 -39t-16 -39t-39 -16q-22 0 -38 16t-16 39zM400 850q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16.5t-16 38.5zM513 609q0 32 21 56.5 t52 29.5l122 126l1 1q-9 14 -9 28q0 22 16 38.5t39 16.5q22 0 38 -16t16 -39t-16 -39t-38 -16q-16 0 -29 10l-55 -145q17 -22 17 -51q0 -36 -25.5 -61.5t-61.5 -25.5t-62 25.5t-26 61.5zM800 655q0 23 16 39t39 16q22 0 38 -16t16 -39t-16 -39t-38 -16q-23 0 -39 16t-16 39z " /> +<glyph unicode="" d="M-40 375q-13 -95 35 -173q35 -57 94 -89t129 -32q63 0 119 28q33 16 65 40.5t52.5 45.5t59.5 64q40 44 57 61l394 394q35 35 47 84t-3 96q-27 87 -117 104q-20 2 -29 2q-46 0 -79.5 -17t-67.5 -51l-388 -396l-7 -7l69 -67l377 373q20 22 39 38q23 23 50 23q38 0 53 -36 q16 -39 -20 -75l-547 -547q-52 -52 -125 -52q-55 0 -100 33t-54 96q-5 35 2.5 66t31.5 63t42 50t56 54q24 21 44 41l348 348q52 52 82.5 79.5t84 54t107.5 26.5q25 0 48 -4q95 -17 154 -94.5t51 -175.5q-7 -101 -98 -192l-252 -249l-253 -256l7 -7l69 -60l517 511 q67 67 95 157t11 183q-16 87 -67 154t-130 103q-69 33 -152 33q-107 0 -197 -55q-39 -23 -111 -95l-512 -512q-68 -68 -81 -163z" /> +<glyph unicode="" d="M99 785q0 64 28 122.5t73 100t104.5 64t119 20.5t120 -38.5t105.5 -104.5q48 69 109.5 105t121.5 38t118.5 -20.5t102.5 -64t71 -100t27 -122.5q0 -70 -55.5 -151.5t-129.5 -151t-182.5 -181t-182.5 -212.5q-62 85 -145.5 174t-150 152.5t-127 127t-94 124.5t-33.5 118z M229 785q0 -31 29.5 -75t64.5 -80.5t97 -97.5q17 -16 25 -24q101 -98 204 -217q85 97 209 219q127 125 163 171q48 62 48 104q0 78 -53.5 132.5t-120.5 54.5q-85 0 -147 -91l-102 -147l-97 150q-58 88 -141 88q-68 0 -123.5 -55.5t-55.5 -131.5z" /> +<glyph unicode="" d="M57 353q0 -95 66 -159l141 -142q66 -66 159 -66t159 66l283 283q66 66 66 159t-66 159l-141 141q-3 4 -19 17l-105 -105l212 -212l-389 -389l-247 248l95 95l-18 18q-46 45 -75 101l-55 -55q-66 -66 -66 -159zM269 706q0 -93 66 -159l141 -141q3 -3 9.5 -9t8.5 -8 l106 105l-212 212l389 389l247 -247l-95 -96l17 -17q47 -47 78 -100l29 29q35 35 62.5 88t27.5 96q0 93 -66 159l-141 141q-66 66 -159 66q-95 0 -159 -66l-283 -283q-66 -64 -66 -159z" /> +<glyph unicode="" d="M200 100v953q0 21 30 46t81 48t129 38t163 15t162 -15t127 -38t79 -48t29 -46v-953q0 -41 -29.5 -70.5t-70.5 -29.5h-600q-41 0 -70.5 29.5t-29.5 70.5zM300 300h600v700h-600v-700zM496 150q0 -43 30.5 -73.5t73.5 -30.5t73.5 30.5t30.5 73.5t-30.5 73.5t-73.5 30.5 t-73.5 -30.5t-30.5 -73.5z" /> +<glyph unicode="" d="M0 0l303 380l207 208l-210 212h300l267 279l-35 36q-15 14 -15 35t15 35q14 15 35 15t35 -15l283 -282q15 -15 15 -36t-15 -35q-14 -15 -35 -15t-35 15l-36 35l-279 -267v-300l-212 210l-208 -207z" /> +<glyph unicode="" d="M295 433h139q5 -77 48.5 -126.5t117.5 -64.5v335q-6 1 -15.5 4t-11.5 3q-46 14 -79 26.5t-72 36t-62.5 52t-40 72.5t-16.5 99q0 92 44 159.5t109 101t144 40.5v78h100v-79q38 -4 72.5 -13.5t75.5 -31.5t71 -53.5t51.5 -84t24.5 -118.5h-159q-8 72 -35 109.5t-101 50.5 v-307l64 -14q34 -7 64 -16.5t70 -31.5t67.5 -52t47.5 -80.5t20 -112.5q0 -139 -89 -224t-244 -96v-77h-100v78q-152 17 -237 104q-40 40 -52.5 93.5t-15.5 139.5zM466 889q0 -36 9 -60t31 -38t36 -19.5t47 -13.5q7 -2 11 -3v274q-61 -8 -97.5 -37.5t-36.5 -102.5zM700 237 q170 18 170 151q0 64 -44 99.5t-126 60.5v-311z" /> +<glyph unicode="" d="M100 600v100h166q-24 49 -44 104q-10 26 -14.5 55.5t-3 72.5t25 90t68.5 87q97 88 263 88q129 0 230 -89t101 -208h-153q0 52 -34 89.5t-74 51.5t-76 14q-37 0 -79 -14.5t-62 -35.5q-41 -44 -41 -101q0 -28 16.5 -69.5t28 -62.5t41.5 -72h241v-100h-197q8 -50 -2.5 -115 t-31.5 -94q-41 -59 -99 -113q35 11 84 18t70 7q32 1 102 -16t104 -17q76 0 136 30l50 -147q-41 -25 -80.5 -36.5t-59 -13t-61.5 -1.5q-23 0 -128 33t-155 29q-39 -4 -82 -17t-66 -25l-24 -11l-55 145l16.5 11t15.5 10t13.5 9.5t14.5 12t14.5 14t17.5 18.5q48 55 54 126.5 t-30 142.5h-221z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM602 900l298 300l298 -300h-198v-900h-200v900h-198z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v200h100v-100h200v-100h-300zM700 400v100h300v-200h-99v-100h-100v100h99v100h-200zM700 700v500h300v-500h-100v100h-100v-100h-100zM801 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300h198v900h200v-900h198l-298 -300zM700 0v500h300v-500h-100v100h-100v-100h-100zM700 700v200h100v-100h200v-100h-300zM700 1100v100h300v-200h-99v-100h-100v100h99v100h-200zM801 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 100v400h300v-500h-100v100h-200zM800 1100v100h200v-500h-100v400h-100zM901 200h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM800 400v100h200v-500h-100v400h-100zM800 800v400h300v-500h-100v100h-200zM901 900h100v200h-100v-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h500v-200h-500zM700 400v200h400v-200h-400zM700 700v200h300v-200h-300zM700 1000v200h200v-200h-200z" /> +<glyph unicode="" d="M2 300l298 -300l298 300h-198v900h-200v-900h-198zM700 100v200h200v-200h-200zM700 400v200h300v-200h-300zM700 700v200h400v-200h-400zM700 1000v200h500v-200h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q162 0 281 -118.5t119 -281.5v-300q0 -165 -118.5 -282.5t-281.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 119 281.5t281 118.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-163 0 -281.5 117.5t-118.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM400 300l333 250l-333 250v-500z" /> +<glyph unicode="" d="M0 400v300q0 163 117.5 281.5t282.5 118.5h300q163 0 281.5 -119t118.5 -281v-300q0 -165 -117.5 -282.5t-282.5 -117.5h-300q-165 0 -282.5 117.5t-117.5 282.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 700l250 -333l250 333h-500z" /> +<glyph unicode="" d="M0 400v300q0 165 117.5 282.5t282.5 117.5h300q165 0 282.5 -117.5t117.5 -282.5v-300q0 -162 -118.5 -281t-281.5 -119h-300q-165 0 -282.5 118.5t-117.5 281.5zM200 300q0 -41 29.5 -70.5t70.5 -29.5h500q41 0 70.5 29.5t29.5 70.5v500q0 41 -29.5 70.5t-70.5 29.5 h-500q-41 0 -70.5 -29.5t-29.5 -70.5v-500zM300 400h500l-250 333z" /> +</font> +</defs></svg> \ No newline at end of file diff --git a/fonts/glyphiconshalflings-regular.ttf b/fonts/glyphiconshalflings-regular.ttf new file mode 100755 index 0000000000000000000000000000000000000000..c63c068feb1ac0de21fb7fe459fc8d0175028f2d Binary files /dev/null and b/fonts/glyphiconshalflings-regular.ttf differ diff --git a/fonts/glyphiconshalflings-regular.woff b/fonts/glyphiconshalflings-regular.woff new file mode 100755 index 0000000000000000000000000000000000000000..4c778ffdc5fa2837359e171f35c5b410674cd3c2 Binary files /dev/null and b/fonts/glyphiconshalflings-regular.woff differ diff --git a/img/glyphicons-halflings-white.png b/img/glyphicons-halflings-white.png deleted file mode 100644 index 3bf6484a29d8da269f9bc874b25493a45fae3bae..0000000000000000000000000000000000000000 Binary files a/img/glyphicons-halflings-white.png and /dev/null differ diff --git a/img/glyphicons-halflings.png b/img/glyphicons-halflings.png deleted file mode 100644 index a9969993201f9cee63cf9f49217646347297b643..0000000000000000000000000000000000000000 Binary files a/img/glyphicons-halflings.png and /dev/null differ diff --git a/js/.jshintrc b/js/.jshintrc index e0722690bd73b3195d87577aab3bba151a85f7e0..70e6c579237379cb6fc3ae65c0e172005470110f 100644 --- a/js/.jshintrc +++ b/js/.jshintrc @@ -1,12 +1,12 @@ { - "validthis": true, - "laxcomma" : true, - "laxbreak" : true, - "browser" : true, - "eqnull" : true, - "debug" : true, - "devel" : true, - "boss" : true, - "expr" : true, - "asi" : true + "validthis": true, + "laxcomma" : true, + "laxbreak" : true, + "browser" : true, + "eqnull" : true, + "debug" : true, + "devel" : true, + "boss" : true, + "expr" : true, + "asi" : true } \ No newline at end of file diff --git a/js/affix.js b/js/affix.js new file mode 100644 index 0000000000000000000000000000000000000000..2400ba217c0307d7fa3f587fe2ede76ce23ffcca --- /dev/null +++ b/js/affix.js @@ -0,0 +1,120 @@ +/* ======================================================================== + * Bootstrap: affix.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#affix + * ======================================================================== + * 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. + * ======================================================================== */ + + ++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 + + + // 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); diff --git a/js/bootstrap-alert.js b/js/alert.js similarity index 54% rename from js/bootstrap-alert.js rename to js/alert.js index 8917f9490a28d68d16bf53c8bd6df4fd88bff335..d9f64767ca206c03b4f5c260347f2fdcf4420bd9 100644 --- a/js/bootstrap-alert.js +++ b/js/alert.js @@ -1,8 +1,8 @@ -/* ========================================================== - * bootstrap-alert.js v2.3.1 +/* ======================================================================== + * Bootstrap: alert.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * 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. @@ -15,48 +15,44 @@ * 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. - * ========================================================== */ + * ======================================================================== */ -!function ($) { ++function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* ALERT CLASS DEFINITION - * ====================== */ + // ALERT CLASS DEFINITION + // ====================== var dismiss = '[data-dismiss="alert"]' - , Alert = function (el) { - $(el).on('click', dismiss, this.close) - } + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } Alert.prototype.close = function (e) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent + var $this = $(this) + var selector = $this.attr('data-target') if (!selector) { selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 } - $parent = $(selector) + var $parent = $(selector) - e && e.preventDefault() + if (e) e.preventDefault() - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } - $parent.trigger(e = $.Event('close')) + $parent.trigger(e = $.Event('close.bs.alert')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { - $parent - .trigger('closed') - .remove() + $parent.trigger('closed.bs.alert').remove() } $.support.transition && $parent.hasClass('fade') ? @@ -65,16 +61,17 @@ } - /* ALERT PLUGIN DEFINITION - * ======================= */ + // ALERT PLUGIN DEFINITION + // ======================= var old = $.fn.alert $.fn.alert = function (option) { return this.each(function () { var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) if (typeof option == 'string') data[option].call($this) }) } @@ -82,8 +79,8 @@ $.fn.alert.Constructor = Alert - /* ALERT NO CONFLICT - * ================= */ + // ALERT NO CONFLICT + // ================= $.fn.alert.noConflict = function () { $.fn.alert = old @@ -91,9 +88,9 @@ } - /* ALERT DATA-API - * ============== */ + // ALERT DATA-API + // ============== - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) -}(window.jQuery); \ No newline at end of file +}(window.jQuery); diff --git a/js/bootstrap-affix.js b/js/bootstrap-affix.js deleted file mode 100644 index 827ff458ede7bf0eed55ae05dec978829b572c5c..0000000000000000000000000000000000000000 --- a/js/bootstrap-affix.js +++ /dev/null @@ -1,117 +0,0 @@ -/* ========================================================== - * bootstrap-affix.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#affix - * ========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ - - var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) - this.$window = $(window) - .on('scroll.affix.data-api', $.proxy(this.checkPosition, this)) - .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this)) - this.$element = $(element) - this.checkPosition() - } - - Affix.prototype.checkPosition = function () { - if (!this.$element.is(':visible')) return - - var scrollHeight = $(document).height() - , scrollTop = this.$window.scrollTop() - , position = this.$element.offset() - , offset = this.options.offset - , offsetBottom = offset.bottom - , offsetTop = offset.top - , reset = 'affix affix-top affix-bottom' - , affix - - if (typeof offset != 'object') offsetBottom = offsetTop = offset - if (typeof offsetTop == 'function') offsetTop = offset.top() - if (typeof offsetBottom == 'function') offsetBottom = offset.bottom() - - 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) - , data = $this.data('affix') - , options = typeof option == 'object' && option - if (!data) $this.data('affix', (data = new Affix(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.affix.Constructor = Affix - - $.fn.affix.defaults = { - offset: 0 - } - - - /* 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) - , data = $spy.data() - - data.offset = data.offset || {} - - data.offsetBottom && (data.offset.bottom = data.offsetBottom) - data.offsetTop && (data.offset.top = data.offsetTop) - - $spy.affix(data) - }) - }) - - -}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-carousel.js b/js/bootstrap-carousel.js deleted file mode 100644 index b40edd7bffd2d1d9a18a7f30e41f37f9f6935ca7..0000000000000000000000000000000000000000 --- a/js/bootstrap-carousel.js +++ /dev/null @@ -1,207 +0,0 @@ -/* ========================================================== - * bootstrap-carousel.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.$indicators = this.$element.find('.carousel-indicators') - this.options = options - this.options.pause == 'hover' && this.$element - .on('mouseenter', $.proxy(this.pause, this)) - .on('mouseleave', $.proxy(this.cycle, this)) - } - - Carousel.prototype = { - - cycle: function (e) { - if (!e) this.paused = false - if (this.interval) clearInterval(this.interval); - this.options.interval - && !this.paused - && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) - return this - } - - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } - - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this - - if (pos > (this.$items.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activeIndex == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } - - , pause: function (e) { - if (!e) this.paused = true - if (this.$element.find('.next, .prev').length && $.support.transition.end) { - this.$element.trigger($.support.transition.end) - this.cycle(true) - } - clearInterval(this.interval) - this.interval = null - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.item.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - , e - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction - }) - - if ($next.hasClass('active')) return - - if (this.$indicators.length) { - this.$indicators.find('.active').removeClass('active') - this.$element.one('slid', function () { - var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) - $nextIndicator && $nextIndicator.addClass('active') - }) - } - - if ($.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } else { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.carousel - - $.fn.carousel = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = $.extend({}, $.fn.carousel.defaults, typeof option == 'object' && option) - , action = typeof option == 'string' ? option : options.slide - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (action) data[action]() - else if (options.interval) data.pause().cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - , pause: 'hover' - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL NO CONFLICT - * ==================== */ - - $.fn.carousel.noConflict = function () { - $.fn.carousel = old - return this - } - - /* CAROUSEL DATA-API - * ================= */ - - $(document).on('click.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = $.extend({}, $target.data(), $this.data()) - , slideIndex - - $target.carousel(options) - - if (slideIndex = $this.attr('data-slide-to')) { - $target.data('carousel').pause().to(slideIndex).cycle() - } - - e.preventDefault() - }) - -}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-collapse.js b/js/bootstrap-collapse.js deleted file mode 100644 index 2bede4a88c74f9dfad7d7309897b6f1f06e0f25d..0000000000000000000000000000000000000000 --- a/js/bootstrap-collapse.js +++ /dev/null @@ -1,167 +0,0 @@ -/* ============================================================= - * bootstrap-collapse.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * 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. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* COLLAPSE PUBLIC CLASS DEFINITION - * ================================ */ - - var Collapse = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options.parent) { - this.$parent = $(this.options.parent) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension - , scroll - , actives - , hasData - - if (this.transitioning || this.$element.hasClass('in')) return - - dimension = this.dimension() - scroll = $.camelCase(['scroll', dimension].join('-')) - actives = this.$parent && this.$parent.find('> .accordion-group > .in') - - if (actives && actives.length) { - hasData = actives.data('collapse') - if (hasData && hasData.transitioning) return - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', $.Event('show'), 'shown') - $.support.transition && this.$element[dimension](this.$element[0][scroll]) - } - - , hide: function () { - var dimension - if (this.transitioning || !this.$element.hasClass('in')) return - dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', $.Event('hide'), 'hidden') - this.$element[dimension](0) - } - - , reset: function (size) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') - - return this - } - - , transition: function (method, startEvent, completeEvent) { - var that = this - , complete = function () { - if (startEvent.type == 'show') that.reset() - that.transitioning = 0 - that.$element.trigger(completeEvent) - } - - this.$element.trigger(startEvent) - - if (startEvent.isDefaultPrevented()) return - - this.transitioning = 1 - - this.$element[method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* COLLAPSE PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.collapse - - $.fn.collapse = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = $.extend({}, $.fn.collapse.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSE NO CONFLICT - * ==================== */ - - $.fn.collapse.noConflict = function () { - $.fn.collapse = old - return this - } - - - /* COLLAPSE DATA-API - * ================= */ - - $(document).on('click.collapse.data-api', '[data-toggle=collapse]', function (e) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') - $(target).collapse(option) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-dropdown.js b/js/bootstrap-dropdown.js deleted file mode 100644 index a1d51519fedbec3fdcb70f94a39dbdf9ccbb4e5e..0000000000000000000000000000000000000000 --- a/js/bootstrap-dropdown.js +++ /dev/null @@ -1,165 +0,0 @@ -/* ============================================================ - * bootstrap-dropdown.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * 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. - * ============================================================ */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle=dropdown]' - , Dropdown = function (element) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function (e) { - var $this = $(this) - , $parent - , isActive - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - clearMenus() - - if (!isActive) { - $parent.toggleClass('open') - } - - $this.focus() - - return false - } - - , keydown: function (e) { - var $this - , $items - , $active - , $parent - , isActive - , index - - if (!/(38|40|27)/.test(e.keyCode)) return - - $this = $(this) - - e.preventDefault() - e.stopPropagation() - - if ($this.is('.disabled, :disabled')) return - - $parent = getParent($this) - - isActive = $parent.hasClass('open') - - if (!isActive || (isActive && e.keyCode == 27)) { - if (e.which == 27) $parent.find(toggle).focus() - return $this.click() - } - - $items = $('[role=menu] li:not(.divider):visible a', $parent) - - if (!$items.length) return - - index = $items.index($items.filter(':focus')) - - if (e.keyCode == 38 && index > 0) index-- // up - if (e.keyCode == 40 && index < $items.length - 1) index++ // down - if (!~index) index = 0 - - $items - .eq(index) - .focus() - } - - } - - function clearMenus() { - $(toggle).each(function () { - getParent($(this)).removeClass('open') - }) - } - - function getParent($this) { - var selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = selector && $(selector) - - if (!$parent || !$parent.length) $parent = $this.parent() - - return $parent - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - var old = $.fn.dropdown - - $.fn.dropdown = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* DROPDOWN NO CONFLICT - * ==================== */ - - $.fn.dropdown.noConflict = function () { - $.fn.dropdown = old - return this - } - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(document) - .on('click.dropdown.data-api', clearMenus) - .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) - .on('click.dropdown-menu', function (e) { e.stopPropagation() }) - .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) - .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) - -}(window.jQuery); diff --git a/js/bootstrap-modal.js b/js/bootstrap-modal.js deleted file mode 100644 index 12abe06f17a0711201cf0090c0d8096fda9cd24c..0000000000000000000000000000000000000000 --- a/js/bootstrap-modal.js +++ /dev/null @@ -1,247 +0,0 @@ -/* ========================================================= - * bootstrap-modal.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * 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. - * ========================================================= */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function (element, options) { - this.options = options - this.$element = $(element) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - this.options.remote && this.$element.find('.modal-body').load(this.options.remote) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - , e = $.Event('show') - - this.$element.trigger(e) - - if (this.isShown || e.isDefaultPrevented()) return - - this.isShown = true - - this.escape() - - this.backdrop(function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position - } - - that.$element.show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element - .addClass('in') - .attr('aria-hidden', false) - - that.enforceFocus() - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) : - that.$element.focus().trigger('shown') - - }) - } - - , hide: function (e) { - e && e.preventDefault() - - var that = this - - e = $.Event('hide') - - this.$element.trigger(e) - - if (!this.isShown || e.isDefaultPrevented()) return - - this.isShown = false - - this.escape() - - $(document).off('focusin.modal') - - this.$element - .removeClass('in') - .attr('aria-hidden', true) - - $.support.transition && this.$element.hasClass('fade') ? - this.hideWithTransition() : - this.hideModal() - } - - , enforceFocus: function () { - var that = this - $(document).on('focusin.modal', function (e) { - if (that.$element[0] !== e.target && !that.$element.has(e.target).length) { - that.$element.focus() - } - }) - } - - , escape: function () { - var that = this - if (this.isShown && this.options.keyboard) { - this.$element.on('keyup.dismiss.modal', function ( e ) { - e.which == 27 && that.hide() - }) - } else if (!this.isShown) { - this.$element.off('keyup.dismiss.modal') - } - } - - , hideWithTransition: function () { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - that.hideModal() - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - that.hideModal() - }) - } - - , hideModal: function () { - var that = this - this.$element.hide() - this.backdrop(function () { - that.removeBackdrop() - that.$element.trigger('hidden') - }) - } - - , removeBackdrop: function () { - this.$backdrop && this.$backdrop.remove() - this.$backdrop = null - } - - , backdrop: function (callback) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - 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) - ) - - if (doAnimate) this.$backdrop[0].offsetWidth // force reflow - - this.$backdrop.addClass('in') - - if (!callback) return - - doAnimate ? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (!this.isShown && this.$backdrop) { - this.$backdrop.removeClass('in') - - $.support.transition && this.$element.hasClass('fade')? - this.$backdrop.one($.support.transition.end, callback) : - callback() - - } else if (callback) { - callback() - } - } - } - - - /* MODAL PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.modal - - $.fn.modal = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('modal') - , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option) - if (!data) $this.data('modal', (data = new Modal(this, options))) - if (typeof option == 'string') data[option]() - else if (options.show) data.show() - }) - } - - $.fn.modal.defaults = { - backdrop: true - , keyboard: true - , show: true - } - - $.fn.modal.Constructor = Modal - - - /* MODAL NO CONFLICT - * ================= */ - - $.fn.modal.noConflict = function () { - $.fn.modal = old - return this - } - - - /* MODAL DATA-API - * ============== */ - - $(document).on('click.modal.data-api', '[data-toggle="modal"]', function (e) { - var $this = $(this) - , href = $this.attr('href') - , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 - , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) - - e.preventDefault() - - $target - .modal(option) - .one('hide', function () { - $this.focus() - }) - }) - -}(window.jQuery); diff --git a/js/bootstrap-popover.js b/js/bootstrap-popover.js deleted file mode 100644 index e6d897cd383cd6fe8a0d7405b854092d423364b3..0000000000000000000000000000000000000000 --- a/js/bootstrap-popover.js +++ /dev/null @@ -1,114 +0,0 @@ -/* =========================================================== - * bootstrap-popover.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#popovers - * =========================================================== - * 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. - * =========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* POPOVER PUBLIC CLASS DEFINITION - * =============================== */ - - var Popover = function (element, options) { - this.init('popover', element, options) - } - - - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js - ========================================== */ - - Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { - - constructor: Popover - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - , content = this.getContent() - - $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) - $tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content) - - $tip.removeClass('fade top bottom left right in') - } - - , hasContent: function () { - return this.getTitle() || this.getContent() - } - - , getContent: function () { - var content - , $e = this.$element - , o = this.options - - content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content) - || $e.attr('data-content') - - return content - } - - , tip: function () { - if (!this.$tip) { - this.$tip = $(this.options.template) - } - return this.$tip - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - }) - - - /* POPOVER PLUGIN DEFINITION - * ======================= */ - - var old = $.fn.popover - - $.fn.popover = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('popover') - , options = typeof option == 'object' && option - if (!data) $this.data('popover', (data = new Popover(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.popover.Constructor = Popover - - $.fn.popover.defaults = $.extend({} , $.fn.tooltip.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>' - }) - - - /* POPOVER NO CONFLICT - * =================== */ - - $.fn.popover.noConflict = function () { - $.fn.popover = old - return this - } - -}(window.jQuery); diff --git a/js/bootstrap-scrollspy.js b/js/bootstrap-scrollspy.js deleted file mode 100644 index ac1402b4bcef8929638ddac319a1ccdf789e624d..0000000000000000000000000000000000000000 --- a/js/bootstrap-scrollspy.js +++ /dev/null @@ -1,162 +0,0 @@ -/* ============================================================= - * bootstrap-scrollspy.js v2.3.1 - * 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. - * ============================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* SCROLLSPY CLASS DEFINITION - * ========================== */ - - function ScrollSpy(element, options) { - var process = $.proxy(this.process, this) - , $element = $(element).is('body') ? $(window) : $(element) - , href - this.options = $.extend({}, $.fn.scrollspy.defaults, options) - this.$scrollElement = $element.on('scroll.scroll-spy.data-api', process) - this.selector = (this.options.target - || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - || '') + ' .nav li > a' - this.$body = $('body') - this.refresh() - this.process() - } - - ScrollSpy.prototype = { - - constructor: ScrollSpy - - , refresh: function () { - var self = this - , $targets - - this.offsets = $([]) - this.targets = $([]) - - $targets = this.$body - .find(this.selector) - .map(function () { - var $el = $(this) - , href = $el.data('target') || $el.attr('href') - , $href = /^#\w/.test(href) && $(href) - 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]) - }) - } - - , process: function () { - var scrollTop = this.$scrollElement.scrollTop() + this.options.offset - , scrollHeight = this.$scrollElement[0].scrollHeight || this.$body[0].scrollHeight - , maxScroll = scrollHeight - this.$scrollElement.height() - , offsets = this.offsets - , targets = this.targets - , activeTarget = this.activeTarget - , i - - if (scrollTop >= maxScroll) { - return activeTarget != (i = targets.last()[0]) - && this.activate ( i ) - } - - for (i = offsets.length; i--;) { - activeTarget != targets[i] - && scrollTop >= offsets[i] - && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) - && this.activate( targets[i] ) - } - } - - , activate: function (target) { - var active - , selector - - this.activeTarget = target - - $(this.selector) - .parent('.active') - .removeClass('active') - - selector = this.selector - + '[data-target="' + target + '"],' - + this.selector + '[href="' + target + '"]' - - active = $(selector) - .parent('li') - .addClass('active') - - if (active.parent('.dropdown-menu').length) { - active = active.closest('li.dropdown').addClass('active') - } - - active.trigger('activate') - } - - } - - - /* SCROLLSPY PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.scrollspy - - $.fn.scrollspy = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('scrollspy') - , options = typeof option == 'object' && option - if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.scrollspy.Constructor = ScrollSpy - - $.fn.scrollspy.defaults = { - offset: 10 - } - - - /* SCROLLSPY NO CONFLICT - * ===================== */ - - $.fn.scrollspy.noConflict = function () { - $.fn.scrollspy = old - return this - } - - - /* SCROLLSPY DATA-API - * ================== */ - - $(window).on('load', function () { - $('[data-spy="scroll"]').each(function () { - var $spy = $(this) - $spy.scrollspy($spy.data()) - }) - }) - -}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-tab.js b/js/bootstrap-tab.js deleted file mode 100644 index 1d23df6c641b276e06b4a57f33ff27e80a6e4a01..0000000000000000000000000000000000000000 --- a/js/bootstrap-tab.js +++ /dev/null @@ -1,144 +0,0 @@ -/* ======================================================== - * bootstrap-tab.js v2.3.1 - * 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. - * ======================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TAB CLASS DEFINITION - * ==================== */ - - var Tab = function (element) { - this.element = $(element) - } - - Tab.prototype = { - - constructor: Tab - - , show: function () { - var $this = this.element - , $ul = $this.closest('ul:not(.dropdown-menu)') - , selector = $this.attr('data-target') - , previous - , $target - , e - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - if ( $this.parent('li').hasClass('active') ) return - - previous = $ul.find('.active:last a')[0] - - e = $.Event('show', { - relatedTarget: previous - }) - - $this.trigger(e) - - if (e.isDefaultPrevented()) return - - $target = $(selector) - - this.activate($this.parent('li'), $ul) - this.activate($target, $target.parent(), function () { - $this.trigger({ - type: 'shown' - , relatedTarget: previous - }) - }) - } - - , activate: function ( element, container, callback) { - var $active = container.find('> .active') - , transition = callback - && $.support.transition - && $active.hasClass('fade') - - function next() { - $active - .removeClass('active') - .find('> .dropdown-menu > .active') - .removeClass('active') - - element.addClass('active') - - if (transition) { - element[0].offsetWidth // reflow for transition - element.addClass('in') - } else { - element.removeClass('fade') - } - - if ( element.parent('.dropdown-menu') ) { - element.closest('li.dropdown').addClass('active') - } - - callback && callback() - } - - transition ? - $active.one($.support.transition.end, next) : - next() - - $active.removeClass('in') - } - } - - - /* TAB PLUGIN DEFINITION - * ===================== */ - - var old = $.fn.tab - - $.fn.tab = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tab') - if (!data) $this.data('tab', (data = new Tab(this))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tab.Constructor = Tab - - - /* TAB NO CONFLICT - * =============== */ - - $.fn.tab.noConflict = function () { - $.fn.tab = old - return this - } - - - /* TAB DATA-API - * ============ */ - - $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { - e.preventDefault() - $(this).tab('show') - }) - -}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-tooltip.js b/js/bootstrap-tooltip.js deleted file mode 100644 index 835abbe68c60e483cc13c764c422360ba5dadda2..0000000000000000000000000000000000000000 --- a/js/bootstrap-tooltip.js +++ /dev/null @@ -1,361 +0,0 @@ -/* =========================================================== - * bootstrap-tooltip.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function (element, options) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function (type, element, options) { - var eventIn - , eventOut - , triggers - , trigger - , i - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - triggers = this.options.trigger.split(' ') - - for (i = triggers.length; i--;) { - trigger = triggers[i] - if (trigger == 'click') { - this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) - } else if (trigger != 'manual') { - eventIn = trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = trigger == 'hover' ? 'mouseleave' : 'blur' - 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)) - } - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function (options) { - options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function (e) { - var defaults = $.fn[this.type].defaults - , options = {} - , self - - this._options && $.each(this._options, function (key, value) { - if (defaults[key] != value) options[key] = value - }, this) - - self = $(e.currentTarget)[this.type](options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) return self.show() - - clearTimeout(this.timeout) - self.hoverState = 'in' - this.timeout = setTimeout(function() { - if (self.hoverState == 'in') self.show() - }, self.options.delay.show) - } - - , leave: function (e) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (this.timeout) clearTimeout(this.timeout) - if (!self.options.delay || !self.options.delay.hide) return self.hide() - - self.hoverState = 'out' - this.timeout = setTimeout(function() { - if (self.hoverState == 'out') self.hide() - }, self.options.delay.hide) - } - - , show: function () { - var $tip - , pos - , actualWidth - , actualHeight - , placement - , tp - , e = $.Event('show') - - if (this.hasContent() && this.enabled) { - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - 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' }) - - this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) - - pos = this.getPosition() - - actualWidth = $tip[0].offsetWidth - 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') - } - } - - , applyPlacement: function(offset, placement){ - var $tip = this.tip() - , width = $tip[0].offsetWidth - , height = $tip[0].offsetHeight - , actualWidth - , actualHeight - , delta - , replace - - $tip - .offset(offset) - .addClass(placement) - .addClass('in') - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - if (placement == 'top' && actualHeight != height) { - offset.top = offset.top + height - actualHeight - replace = true - } - - if (placement == 'bottom' || placement == 'top') { - delta = 0 - - if (offset.left < 0){ - delta = offset.left * -2 - offset.left = 0 - $tip.offset(offset) - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - } - - this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') - } else { - this.replaceArrow(actualHeight - height, actualHeight, 'top') - } - - if (replace) $tip.offset(offset) - } - - , replaceArrow: function(delta, dimension, position){ - this - .arrow() - .css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') - } - - , setContent: function () { - var $tip = this.tip() - , title = this.getTitle() - - $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - , e = $.Event('hide') - - this.$element.trigger(e) - if (e.isDefaultPrevented()) return - - $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() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.detach() - - this.$element.trigger('hidden') - - return this - } - - , 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', '') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function () { - var el = this.$element[0] - return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : { - width: el.offsetWidth - , height: el.offsetHeight - }, this.$element.offset()) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , arrow: function(){ - return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function (e) { - var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this - self.tip().hasClass('in') ? self.hide() : self.show() - } - - , destroy: function () { - this.hide().$element.off('.' + this.type).removeData(this.type) - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - var old = $.fn.tooltip - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.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 - } - - - /* TOOLTIP NO CONFLICT - * =================== */ - - $.fn.tooltip.noConflict = function () { - $.fn.tooltip = old - return this - } - -}(window.jQuery); diff --git a/js/bootstrap-transition.js b/js/bootstrap-transition.js deleted file mode 100644 index 92719d37ed6befb753e31ddadaf9c3a9a9f43e4c..0000000000000000000000000000000000000000 --- a/js/bootstrap-transition.js +++ /dev/null @@ -1,60 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * 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. - * ========================================================== */ - - -!function ($) { - - "use strict"; // jshint ;_; - - - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) - * ======================================================= */ - - $(function () { - - $.support.transition = (function () { - - var transitionEnd = (function () { - - var el = document.createElement('bootstrap') - , transEndEventNames = { - 'WebkitTransition' : 'webkitTransitionEnd' - , 'MozTransition' : 'transitionend' - , 'OTransition' : 'oTransitionEnd otransitionend' - , 'transition' : 'transitionend' - } - , name - - for (name in transEndEventNames){ - if (el.style[name] !== undefined) { - return transEndEventNames[name] - } - } - - }()) - - return transitionEnd && { - end: transitionEnd - } - - })() - - }) - -}(window.jQuery); \ No newline at end of file diff --git a/js/bootstrap-typeahead.js b/js/bootstrap-typeahead.js deleted file mode 100644 index 280cde8be67276148e3d76250f180ae3ab990b02..0000000000000000000000000000000000000000 --- a/js/bootstrap-typeahead.js +++ /dev/null @@ -1,335 +0,0 @@ -/* ============================================================= - * bootstrap-typeahead.js v2.3.1 - * http://twitter.github.com/bootstrap/javascript.html#typeahead - * ============================================================= - * 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. - * ============================================================ */ - - -!function($){ - - "use strict"; // jshint ;_; - - - /* TYPEAHEAD PUBLIC CLASS DEFINITION - * ================================= */ - - var Typeahead = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.typeahead.defaults, options) - this.matcher = this.options.matcher || this.matcher - this.sorter = this.options.sorter || this.sorter - this.highlighter = this.options.highlighter || this.highlighter - this.updater = this.options.updater || this.updater - this.source = this.options.source - this.$menu = $(this.options.menu) - this.shown = false - this.listen() - } - - Typeahead.prototype = { - - constructor: Typeahead - - , select: function () { - var val = this.$menu.find('.active').attr('data-value') - this.$element - .val(this.updater(val)) - .change() - return this.hide() - } - - , updater: function (item) { - return item - } - - , show: function () { - var pos = $.extend({}, this.$element.position(), { - height: this.$element[0].offsetHeight - }) - - this.$menu - .insertAfter(this.$element) - .css({ - top: pos.top + pos.height - , left: pos.left - }) - .show() - - this.shown = true - return this - } - - , hide: function () { - this.$menu.hide() - this.shown = false - return this - } - - , lookup: function (event) { - var items - - this.query = this.$element.val() - - if (!this.query || this.query.length < this.options.minLength) { - return this.shown ? this.hide() : this - } - - items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source - - return items ? this.process(items) : this - } - - , process: function (items) { - var that = this - - items = $.grep(items, function (item) { - return that.matcher(item) - }) - - items = this.sorter(items) - - if (!items.length) { - return this.shown ? this.hide() : this - } - - return this.render(items.slice(0, this.options.items)).show() - } - - , matcher: function (item) { - return ~item.toLowerCase().indexOf(this.query.toLowerCase()) - } - - , sorter: function (items) { - var beginswith = [] - , caseSensitive = [] - , caseInsensitive = [] - , item - - while (item = items.shift()) { - if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) - else if (~item.indexOf(this.query)) caseSensitive.push(item) - else caseInsensitive.push(item) - } - - return beginswith.concat(caseSensitive, caseInsensitive) - } - - , highlighter: function (item) { - var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') - return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { - return '<strong>' + match + '</strong>' - }) - } - - , render: function (items) { - var that = this - - items = $(items).map(function (i, item) { - i = $(that.options.item).attr('data-value', item) - i.find('a').html(that.highlighter(item)) - return i[0] - }) - - items.first().addClass('active') - this.$menu.html(items) - return this - } - - , next: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , next = active.next() - - if (!next.length) { - next = $(this.$menu.find('li')[0]) - } - - next.addClass('active') - } - - , prev: function (event) { - var active = this.$menu.find('.active').removeClass('active') - , prev = active.prev() - - if (!prev.length) { - prev = this.$menu.find('li').last() - } - - prev.addClass('active') - } - - , listen: function () { - this.$element - .on('focus', $.proxy(this.focus, this)) - .on('blur', $.proxy(this.blur, this)) - .on('keypress', $.proxy(this.keypress, this)) - .on('keyup', $.proxy(this.keyup, this)) - - if (this.eventSupported('keydown')) { - this.$element.on('keydown', $.proxy(this.keydown, this)) - } - - this.$menu - .on('click', $.proxy(this.click, this)) - .on('mouseenter', 'li', $.proxy(this.mouseenter, this)) - .on('mouseleave', 'li', $.proxy(this.mouseleave, this)) - } - - , eventSupported: function(eventName) { - var isSupported = eventName in this.$element - if (!isSupported) { - this.$element.setAttribute(eventName, 'return;') - isSupported = typeof this.$element[eventName] === 'function' - } - return isSupported - } - - , move: function (e) { - if (!this.shown) return - - switch(e.keyCode) { - case 9: // tab - case 13: // enter - case 27: // escape - e.preventDefault() - break - - case 38: // up arrow - e.preventDefault() - this.prev() - break - - case 40: // down arrow - e.preventDefault() - this.next() - break - } - - e.stopPropagation() - } - - , keydown: function (e) { - this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27]) - this.move(e) - } - - , keypress: function (e) { - if (this.suppressKeyPressRepeat) return - this.move(e) - } - - , keyup: function (e) { - switch(e.keyCode) { - case 40: // down arrow - case 38: // up arrow - case 16: // shift - case 17: // ctrl - case 18: // alt - break - - case 9: // tab - case 13: // enter - if (!this.shown) return - this.select() - break - - case 27: // escape - if (!this.shown) return - this.hide() - break - - default: - this.lookup() - } - - e.stopPropagation() - e.preventDefault() - } - - , focus: function (e) { - this.focused = true - } - - , blur: function (e) { - this.focused = false - if (!this.mousedover && this.shown) this.hide() - } - - , click: function (e) { - e.stopPropagation() - e.preventDefault() - this.select() - this.$element.focus() - } - - , mouseenter: function (e) { - this.mousedover = true - this.$menu.find('.active').removeClass('active') - $(e.currentTarget).addClass('active') - } - - , mouseleave: function (e) { - this.mousedover = false - if (!this.focused && this.shown) this.hide() - } - - } - - - /* TYPEAHEAD PLUGIN DEFINITION - * =========================== */ - - var old = $.fn.typeahead - - $.fn.typeahead = function (option) { - return this.each(function () { - var $this = $(this) - , data = $this.data('typeahead') - , options = typeof option == 'object' && option - if (!data) $this.data('typeahead', (data = new Typeahead(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.typeahead.defaults = { - source: [] - , items: 8 - , menu: '<ul class="typeahead dropdown-menu"></ul>' - , item: '<li><a href="#"></a></li>' - , minLength: 1 - } - - $.fn.typeahead.Constructor = Typeahead - - - /* TYPEAHEAD NO CONFLICT - * =================== */ - - $.fn.typeahead.noConflict = function () { - $.fn.typeahead = old - return this - } - - - /* TYPEAHEAD DATA-API - * ================== */ - - $(document).on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) { - var $this = $(this) - if ($this.data('typeahead')) return - $this.typeahead($this.data()) - }) - -}(window.jQuery); diff --git a/js/bootstrap-button.js b/js/button.js similarity index 56% rename from js/bootstrap-button.js rename to js/button.js index 66df0a2967961f3776db9f569f2045b7306bcb6d..c29647840b81f82726f859169fd8c31f929c4eb7 100644 --- a/js/bootstrap-button.js +++ b/js/button.js @@ -1,8 +1,8 @@ -/* ============================================================ - * bootstrap-button.js v2.3.1 +/* ======================================================================== + * Bootstrap: button.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * 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. @@ -15,30 +15,32 @@ * 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. - * ============================================================ */ + * ======================================================================== */ -!function ($) { ++function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ + // BUTTON PUBLIC CLASS DEFINITION + // ============================== var Button = function (element, options) { this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' } Button.prototype.setState = function (state) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) + + if (!data.resetText) $el.data('resetText', $el[val]()) $el[val](data[state] || this.options[state]) @@ -46,46 +48,44 @@ setTimeout(function () { state == 'loadingText' ? $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) + $el.removeClass(d).removeAttr(d); }, 0) } Button.prototype.toggle = function () { var $parent = this.$element.closest('[data-toggle="buttons-radio"]') - $parent && $parent - .find('.active') - .removeClass('active') + if ($parent) { + $parent.find('.active').removeClass('active') + } this.$element.toggleClass('active') } - /* BUTTON PLUGIN DEFINITION - * ======================== */ + // BUTTON PLUGIN DEFINITION + // ======================== var old = $.fn.button $.fn.button = function (option) { return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) + var $this = $(this) + var data = $this.data('button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + if (option == 'toggle') data.toggle() else if (option) data.setState(option) }) } - $.fn.button.defaults = { - loadingText: 'loading...' - } - $.fn.button.Constructor = Button - /* BUTTON NO CONFLICT - * ================== */ + // BUTTON NO CONFLICT + // ================== $.fn.button.noConflict = function () { $.fn.button = old @@ -93,13 +93,13 @@ } - /* BUTTON DATA-API - * =============== */ + // BUTTON DATA-API + // =============== - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + $(document).on('click.bs.button.data-api', '[data-toggle^=button]', function (e) { var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') }) -}(window.jQuery); \ No newline at end of file +}(window.jQuery); diff --git a/js/carousel.js b/js/carousel.js new file mode 100644 index 0000000000000000000000000000000000000000..547007d2dd90d7a52138398b8f21f9d7fb5e7791 --- /dev/null +++ b/js/carousel.js @@ -0,0 +1,210 @@ +/* ======================================================================== + * Bootstrap: carousel.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#carousel + * ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.pause == 'hover' && this.$element + .on('mouseenter', $.proxy(this.pause, this)) + .on('mouseleave', $.proxy(this.cycle, this)) + } + + Carousel.DEFAULTS = { + interval: 5000 + , pause: 'hover' + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getActiveIndex = function () { + this.$active = this.$element.find('.item.active') + this.$items = this.$active.parent().children() + + return this.$items.index(this.$active) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getActiveIndex() + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid', function () { that.to(pos) }) + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition.end) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || $active[type]() + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var fallback = type == 'next' ? 'first' : 'last' + var that = this + + this.sliding = true + + isCycling && this.pause() + + $next = $next.length ? $next : this.$element.find('.item')[fallback]() + + var e = $.Event('slide.bs.carousel', { relatedTarget: $next[0], direction: direction }) + + if ($next.hasClass('active')) return + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + this.$element.one('slid', function () { + var $nextIndicator = $(that.$indicators.children()[that.getActiveIndex()]) + $nextIndicator && $nextIndicator.addClass('active') + }) + } + + if ($.support.transition && this.$element.hasClass('slide')) { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + this.$element.one($.support.transition.end, function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { that.$element.trigger('slid') }, 0) + }) + } else { + this.$element.trigger(e) + if (e.isDefaultPrevented()) return + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger('slid') + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + var old = $.fn.carousel + + $.fn.carousel = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + $(document).on('click.bs.carousel.data-api', '[data-slide], [data-slide-to]', function (e) { + 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 + + $target.carousel(options) + + if (slideIndex = $this.attr('data-slide-to')) { + $target.data('bs.carousel').pause().to(slideIndex).cycle() + } + + e.preventDefault() + }) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + $carousel.carousel($carousel.data()) + }) + }) + +}(window.jQuery); diff --git a/js/collapse.js b/js/collapse.js new file mode 100644 index 0000000000000000000000000000000000000000..f8b65b393f8bae8459929ad8621ccc22ab71427a --- /dev/null +++ b/js/collapse.js @@ -0,0 +1,153 @@ +/* ======================================================================== + * Bootstrap: collapse.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#collapse + * ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.transitioning = null + + if (this.options.parent) this.$parent = $(this.options.parent) + if (this.options.toggle) this.toggle() + } + + Collapse.DEFAULTS = { + toggle: true + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) 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') + if (hasData && hasData.transitioning) return + actives.collapse('hide') + hasData || actives.data('collapse', null) + } + + this.$element[dimension](0) + this.transition('addClass', $.Event('show.bs.collapse'), '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 dimension = this.dimension() + this.reset(this.$element[dimension]()) + this.transition('removeClass', $.Event('hide.bs.collapse'), 'hidden') + this.$element[dimension](0) + } + + Collapse.prototype.reset = function (size) { + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + [dimension](size || 'auto') + [0].offsetWidth + + this.$element[size !== null ? 'addClass' : 'removeClass']('collapse') + + return this + } + + Collapse.prototype.transition = function (method, startEvent, completeEvent) { + var that = this + var complete = function () { + if (startEvent.type == 'show') that.reset() + that.transitioning = 0 + that.$element.trigger(completeEvent) + } + + this.$element.trigger(startEvent) + + if (startEvent.isDefaultPrevented()) return + + this.transitioning = 1 + + this.$element[method]('in') + + $.support.transition && this.$element.hasClass('collapse') ? + this.$element.one($.support.transition.end, complete) : + complete() + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + var old = $.fn.collapse + + $.fn.collapse = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle=collapse]', function (e) { + 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() + + $this[$(target).hasClass('in') ? 'addClass' : 'removeClass']('collapsed') + $(target).collapse(option) + }) + +}(window.jQuery); diff --git a/js/dropdown.js b/js/dropdown.js new file mode 100644 index 0000000000000000000000000000000000000000..2bb789a791faece0ed24ec77688095e45ab2bbfa --- /dev/null +++ b/js/dropdown.js @@ -0,0 +1,155 @@ +/* ======================================================================== + * Bootstrap: dropdown.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle=dropdown]' + var Dropdown = function (element) { + var $el = $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement) { + // if mobile we we use a backdrop because click events don't delegate + $('<div class="dropdown-backdrop"/>').insertBefore($(this)).on('click', clearMenus) + } + + $parent.trigger(e = $.Event('show.bs.dropdown')) + + if (e.isDefaultPrevented()) return + + $parent + .toggleClass('open') + .trigger('shown.bs.dropdown') + } + + $this.focus() + + return false + } + + Dropdown.prototype.keydown = function (e) { + if (!/(38|40|27)/.test(e.keyCode)) return + + var $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + var $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + var index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index=0 + + $items.eq(index).focus() + } + + function clearMenus() { + $(backdrop).remove() + $(toggle).each(function (e) { + var $parent = getParent($(this)) + if (!$parent.hasClass('open')) return + $parent.trigger(e = $.Event('hide.bs.dropdown')) + if (e.isDefaultPrevented()) return + $parent.removeClass('open').trigger('hidden.bs.dropdown') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + var $parent = selector && $(selector) + + return $parent && $parent.length ? $parent : $this.parent() + } + + + // DROPDOWN PLUGIN DEFINITION + // ========================== + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('dropdown') + + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + // DROPDOWN NO CONFLICT + // ==================== + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + // APPLY TO STANDARD DROPDOWN ELEMENTS + // =================================== + + + $(document) + .on('click.bs.dropdown.data-api', clearMenus) + .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.bs.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.bs.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); diff --git a/js/modal.js b/js/modal.js new file mode 100644 index 0000000000000000000000000000000000000000..81766b323542c3640d8bf4db48985d015e1128b4 --- /dev/null +++ b/js/modal.js @@ -0,0 +1,243 @@ +/* ======================================================================== + * Bootstrap: modal.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#modals + * ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // MODAL CLASS DEFINITION + // ====================== + + var Modal = function (element, options) { + this.options = options + this.$element = $(element).delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) + this.$backdrop = + this.isShown = null + + if (this.options.remote) this.$element.find('.modal-body').load(this.options.remote) + } + + Modal.DEFAULTS = { + backdrop: true + , keyboard: true + , show: true + } + + Modal.prototype.toggle = function () { + return this[!this.isShown ? 'show' : 'hide']() + } + + Modal.prototype.show = function () { + var that = this + var e = $.Event('show.bs.modal') + + this.$element.trigger(e) + + if (this.isShown || e.isDefaultPrevented()) return + + this.isShown = true + + this.escape() + + this.backdrop(function () { + var transition = $.support.transition && that.$element.hasClass('fade') + + if (!that.$element.parent().length) { + that.$element.appendTo(document.body) // don't move modals dom position + } + + that.$element.show() + + if (transition) { + that.$element[0].offsetWidth // force reflow + } + + that.$element + .addClass('in') + .attr('aria-hidden', false) + + that.enforceFocus() + + transition ? + that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown.bs.modal') }) : + that.$element.focus().trigger('shown.bs.modal') + }) + } + + Modal.prototype.hide = function (e) { + if (e) e.preventDefault() + + e = $.Event('hide.bs.modal') + + this.$element.trigger(e) + + if (!this.isShown || e.isDefaultPrevented()) return + + this.isShown = false + + this.escape() + + $(document).off('focusin.bs.modal') + + this.$element + .removeClass('in') + .attr('aria-hidden', true) + + $.support.transition && this.$element.hasClass('fade') ? + this.hideWithTransition() : + this.hideModal() + } + + Modal.prototype.enforceFocus = function () { + $(document) + .off('focusin.bs.modal') // guard against infinite focus loop + .on('focusin.bs.modal', $.proxy(function (e) { + if (this.$element[0] !== e.target && !this.$element.has(e.target).length) { + this.$element.focus() + } + }, this)) + } + + Modal.prototype.escape = function () { + if (this.isShown && this.options.keyboard) { + this.$element.on('keyup.dismiss.bs.modal', $.proxy(function (e) { + e.which == 27 && this.hide() + }, this)) + } else if (!this.isShown) { + this.$element.off('keyup.dismiss.bs.modal') + } + } + + Modal.prototype.hideWithTransition = function () { + var that = this + var timeout = setTimeout(function () { + that.$element.off($.support.transition.end) + that.hideModal() + }, 500) + + this.$element.one($.support.transition.end, function () { + clearTimeout(timeout) + that.hideModal() + }) + } + + Modal.prototype.hideModal = function () { + var that = this + this.$element.hide() + this.backdrop(function () { + that.removeBackdrop() + that.$element.trigger('hidden.bs.modal') + }) + } + + Modal.prototype.removeBackdrop = function () { + this.$backdrop && this.$backdrop.remove() + this.$backdrop = null + } + + Modal.prototype.backdrop = function (callback) { + var that = this + var animate = this.$element.hasClass('fade') ? 'fade' : '' + + if (this.isShown && this.options.backdrop) { + var doAnimate = $.support.transition && animate + + 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) + ) + + if (doAnimate) this.$backdrop[0].offsetWidth // force reflow + + this.$backdrop.addClass('in') + + if (!callback) return + + doAnimate ? + this.$backdrop.one($.support.transition.end, callback) : + callback() + + } else if (!this.isShown && this.$backdrop) { + this.$backdrop.removeClass('in') + + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one($.support.transition.end, callback) : + callback() + + } else if (callback) { + callback() + } + } + + + // MODAL PLUGIN DEFINITION + // ======================= + + var old = $.fn.modal + + $.fn.modal = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.modal') + var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data) $this.data('bs.modal', (data = new Modal(this, options))) + if (typeof option == 'string') data[option]() + else if (options.show) data.show() + }) + } + + $.fn.modal.Constructor = Modal + + + // MODAL NO CONFLICT + // ================= + + $.fn.modal.noConflict = function () { + $.fn.modal = old + return this + } + + + // MODAL DATA-API + // ============== + + $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { + var $this = $(this) + var href = $this.attr('href') + var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) //strip for ie7 + var option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) + + e.preventDefault() + + $target + .modal(option) + .one('hide', function () { + $this.focus() + }) + }) + + var $body = $(document.body) + .on('bs.modal.shown', '.modal', function () { $body.addClass('modal-open') }) + .on('bs.modal.hidden', '.modal', function () { $body.removeClass('modal-open') }) + +}(window.jQuery); diff --git a/js/popover.js b/js/popover.js new file mode 100644 index 0000000000000000000000000000000000000000..e58e24908ca587acc4f347851d489d70f3295390 --- /dev/null +++ b/js/popover.js @@ -0,0 +1,111 @@ +/* ======================================================================== + * Bootstrap: popover.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#popovers + * ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // POPOVER 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 + + Popover.prototype.getDefaults = function () { + return Popover.DEFAULTS + } + + 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) + + $tip.removeClass('fade top bottom left right in') + + $tip.find('.popover-title:empty').hide() + } + + Popover.prototype.hasContent = function () { + return this.getTitle() || this.getContent() + } + + Popover.prototype.getContent = function () { + var content = typeof this.options.content == 'function' ? + this.options.content.call(this.$element[0]) : + this.options.content + + return content || this.$element.attr('data-content') + } + + Popover.prototype.tip = function () { + if (!this.$tip) this.$tip = $(this.options.template) + return this.$tip + } + + Popover.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData(this.type) + } + + + // POPOVER PLUGIN DEFINITION + // ========================= + + var old = $.fn.popover + + $.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]() + }) + } + + $.fn.popover.Constructor = Popover + + + // POPOVER NO CONFLICT + // =================== + + $.fn.popover.noConflict = function () { + $.fn.popover = old + return this + } + +}(window.jQuery); diff --git a/js/scrollspy.js b/js/scrollspy.js new file mode 100644 index 0000000000000000000000000000000000000000..8d1e72a874cdc90ddafa6b98f0373293049ad81c --- /dev/null +++ b/js/scrollspy.js @@ -0,0 +1,156 @@ +/* ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // SCROLLSPY CLASS DEFINITION + // ========================== + + function ScrollSpy(element, options) { + var href + var process = $.proxy(this.process, this) + var $element = $(element).is('body') ? $(window) : $(element) + + 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.refresh() + this.process() + } + + ScrollSpy.DEFAULTS = { + offset: 10 + } + + ScrollSpy.prototype.refresh = function () { + this.offsets = $([]) + this.targets = $([]) + + 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) + + 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) + } + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activate( targets[i] ) + } + } + + ScrollSpy.prototype.activate = function (target) { + this.activeTarget = target + + $(this.selector) + .parents('.active') + .removeClass('active') + + var selector = this.selector + + '[data-target="' + target + '"],' + + this.selector + '[href="' + target + '"]' + + var active = $(selector) + .parents('li') + .addClass('active') + + if (active.parent('.dropdown-menu').length) { + active = active + .closest('li.dropdown') + .addClass('active') + } + + active.trigger('activate') + } + + + // 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]() + }) + } + + $.fn.scrollspy.Constructor = ScrollSpy + + + // SCROLLSPY NO CONFLICT + // ===================== + + $.fn.scrollspy.noConflict = function () { + $.fn.scrollspy = old + return this + } + + + // SCROLLSPY DATA-API + // ================== + + $(window).on('load', function () { + $('[data-spy="scroll"]').each(function () { + var $spy = $(this) + $spy.scrollspy($spy.data()) + }) + }) + +}(window.jQuery); diff --git a/js/tab.js b/js/tab.js new file mode 100644 index 0000000000000000000000000000000000000000..89dbb8b70f923deefccb8d80c34a9843bd43ba77 --- /dev/null +++ b/js/tab.js @@ -0,0 +1,133 @@ +/* ======================================================================== + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // TAB CLASS DEFINITION + // ==================== + + var Tab = function (element) { + this.element = $(element) + } + + 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 + } + + if ($this.parent('li').hasClass('active')) return + + var previous = $ul.find('.active:last a')[0] + var e = $.Event('show.bs.tab', { + relatedTarget: previous + }) + + $this.trigger(e) + + if (e.isDefaultPrevented()) return + + var $target = $(selector) + + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown.bs.tab' + , relatedTarget: previous + }) + }) + } + + Tab.prototype.activate = function (element, container, callback) { + var $active = container.find('> .active') + var transition = callback + && $.support.transition + && $active.hasClass('fade') + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if (element.parent('.dropdown-menu')) { + element.closest('li.dropdown').addClass('active') + } + + callback && callback() + } + + transition ? + $active.one($.support.transition.end, next) : + next() + + $active.removeClass('in') + } + + + // TAB PLUGIN DEFINITION + // ===================== + + var old = $.fn.tab + + $.fn.tab = function ( option ) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tab') + + if (!data) $this.data('bs.tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tab.Constructor = Tab + + + // TAB NO CONFLICT + // =============== + + $.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); diff --git a/js/tests/index.html b/js/tests/index.html index 976ca16872b62aefd2af4b444429e4aabef4eab7..0cfadc598bb6fd6d1a7a96b6c72478622a8e12e9 100644 --- a/js/tests/index.html +++ b/js/tests/index.html @@ -12,37 +12,36 @@ <script src="vendor/qunit.js"></script> <!-- phantomjs logging script--> - <script src="unit/bootstrap-phantom.js"></script> + <script src="unit/phantom.js"></script> <!-- plugin sources --> - <script src="../../js/bootstrap-transition.js"></script> - <script src="../../js/bootstrap-alert.js"></script> - <script src="../../js/bootstrap-button.js"></script> - <script src="../../js/bootstrap-carousel.js"></script> - <script src="../../js/bootstrap-collapse.js"></script> - <script src="../../js/bootstrap-dropdown.js"></script> - <script src="../../js/bootstrap-modal.js"></script> - <script src="../../js/bootstrap-scrollspy.js"></script> - <script src="../../js/bootstrap-tab.js"></script> - <script src="../../js/bootstrap-tooltip.js"></script> - <script src="../../js/bootstrap-popover.js"></script> - <script src="../../js/bootstrap-typeahead.js"></script> - <script src="../../js/bootstrap-affix.js"></script> + <script src="../../js/transition.js"></script> + <script src="../../js/alert.js"></script> + <script src="../../js/button.js"></script> + <script src="../../js/carousel.js"></script> + <script src="../../js/collapse.js"></script> + <script src="../../js/dropdown.js"></script> + <script src="../../js/modal.js"></script> + <script src="../../js/scrollspy.js"></script> + <script src="../../js/tab.js"></script> + <script src="../../js/tooltip.js"></script> + <script src="../../js/popover.js"></script> + <script src="../../js/affix.js"></script> <!-- unit tests --> - <script src="unit/bootstrap-transition.js"></script> - <script src="unit/bootstrap-alert.js"></script> - <script src="unit/bootstrap-button.js"></script> - <script src="unit/bootstrap-carousel.js"></script> - <script src="unit/bootstrap-collapse.js"></script> - <script src="unit/bootstrap-dropdown.js"></script> - <script src="unit/bootstrap-modal.js"></script> - <script src="unit/bootstrap-scrollspy.js"></script> - <script src="unit/bootstrap-tab.js"></script> - <script src="unit/bootstrap-tooltip.js"></script> - <script src="unit/bootstrap-popover.js"></script> - <script src="unit/bootstrap-typeahead.js"></script> - <script src="unit/bootstrap-affix.js"></script> + <script src="unit/transition.js"></script> + <script src="unit/alert.js"></script> + <script src="unit/button.js"></script> + <script src="unit/carousel.js"></script> + <script src="unit/collapse.js"></script> + <script src="unit/dropdown.js"></script> + <script src="unit/modal.js"></script> + <script src="unit/scrollspy.js"></script> + <script src="unit/tab.js"></script> + <script src="unit/tooltip.js"></script> + <script src="unit/popover.js"></script> + <script src="unit/affix.js"></script> + </head> <body> <div> @@ -53,4 +52,4 @@ <div id="qunit-fixture"></div> </div> </body> -</html> \ No newline at end of file +</html> diff --git a/js/tests/phantom.js b/js/tests/phantom.js index 4105bf529df755fbe7ed51b2408a864ac85e9746..a9047db4ee322ebce8ed9b6bbebe21b1e38f2463 100644 --- a/js/tests/phantom.js +++ b/js/tests/phantom.js @@ -60,4 +60,4 @@ page.open(phantom.args[0], function(status){ phantom.exit((parseInt(failedNum, 10) > 0) ? 1 : 0) }) } -}) \ No newline at end of file +}) diff --git a/js/tests/server.js b/js/tests/server.js index 7c8445feb89937219c1c120c15c1ab7819e1cb2b..f0def8f32667b8e1dd93be95cb83f913b8ce9a3e 100644 --- a/js/tests/server.js +++ b/js/tests/server.js @@ -11,4 +11,4 @@ var connect = require('connect') http.createServer(app).listen(3000); -fs.writeFileSync(__dirname + '/pid.txt', process.pid, 'utf-8') \ No newline at end of file +fs.writeFileSync(__dirname + '/pid.txt', process.pid, 'utf-8') diff --git a/js/tests/unit/bootstrap-affix.js b/js/tests/unit/affix.js similarity index 90% rename from js/tests/unit/bootstrap-affix.js rename to js/tests/unit/affix.js index c978878903bf53f8e180871cb1adc3a8f8010474..b74bc51e48bd48a5a239acfeef34eb7b64f2b675 100644 --- a/js/tests/unit/bootstrap-affix.js +++ b/js/tests/unit/affix.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-affix") + module("affix") test("should provide no conflict", function () { var affix = $.fn.affix.noConflict() @@ -18,8 +18,8 @@ $(function () { test("should exit early if element is not visible", function () { var $affix = $('<div style="display: none"></div>').affix() - $affix.data('affix').checkPosition() + $affix.data('bs.affix').checkPosition() ok(!$affix.hasClass('affix'), 'affix class was not added') }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-alert.js b/js/tests/unit/alert.js similarity index 94% rename from js/tests/unit/bootstrap-alert.js rename to js/tests/unit/alert.js index 9a6b514c47b9497e7ee1c9b8e451d8d133c7dbef..98b10059e16e7a626ddeb338915f651ea4c711a5 100644 --- a/js/tests/unit/bootstrap-alert.js +++ b/js/tests/unit/alert.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-alerts") + module("alert") test("should provide no conflict", function () { var alert = $.fn.alert.noConflict() @@ -48,15 +48,15 @@ $(function () { $.support.transition = false stop(); $('<div class="alert"/>') - .bind('close', function (e) { + .on('close.bs.alert', function (e) { e.preventDefault(); ok(true); start(); }) - .bind('closed', function () { + .on('closed.bs.alert', function () { ok(false); }) .alert('close') }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-typeahead.js b/js/tests/unit/bootstrap-typeahead.js deleted file mode 100644 index 0aa2d61b17ecef4b8ede26c6d45d2a34b8d1f80b..0000000000000000000000000000000000000000 --- a/js/tests/unit/bootstrap-typeahead.js +++ /dev/null @@ -1,236 +0,0 @@ -$(function () { - - module("bootstrap-typeahead") - - test("should provide no conflict", function () { - var typeahead = $.fn.typeahead.noConflict() - ok(!$.fn.typeahead, 'typeahead was set back to undefined (org value)') - $.fn.typeahead = typeahead - }) - - test("should be defined on jquery object", function () { - ok($(document.body).typeahead, 'alert method is defined') - }) - - test("should return element", function () { - ok($(document.body).typeahead()[0] == document.body, 'document.body returned') - }) - - test("should listen to an input", function () { - var $input = $('<input />') - $input.typeahead() - ok($._data($input[0], 'events').blur, 'has a blur event') - ok($._data($input[0], 'events').keypress, 'has a keypress event') - ok($._data($input[0], 'events').keyup, 'has a keyup event') - }) - - test("should create a menu", function () { - var $input = $('<input />') - ok($input.typeahead().data('typeahead').$menu, 'has a menu') - }) - - test("should listen to the menu", function () { - var $input = $('<input />') - , $menu = $input.typeahead().data('typeahead').$menu - - ok($._data($menu[0], 'events').mouseover, 'has a mouseover(pseudo: mouseenter)') - ok($._data($menu[0], 'events').click, 'has a click') - }) - - test("should show menu when query entered", function () { - var $input = $('<input />') - .appendTo('body') - .typeahead({ - source: ['aa', 'ab', 'ac'] - }) - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should accept data source via synchronous function", function () { - var $input = $('<input />').typeahead({ - source: function () { - return ['aa', 'ab', 'ac'] - } - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should accept data source via asynchronous function", function () { - var $input = $('<input />').typeahead({ - source: function (query, process) { - process(['aa', 'ab', 'ac']) - } - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should not explode when regex chars are entered", function () { - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac', 'mdo*', 'fat+'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('+') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 1, 'has 1 item in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should hide menu when query entered", function () { - stop() - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - - $input.blur() - - setTimeout(function () { - ok(!typeahead.$menu.is(":visible"), "typeahead is no longer visible") - start() - }, 200) - - $input.remove() - typeahead.$menu.remove() - }) - - test("should set next item when down arrow is pressed", function () { - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('a') - typeahead.lookup() - - ok(typeahead.$menu.is(":visible"), 'typeahead is visible') - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - equals(typeahead.$menu.find('.active').length, 1, 'one item is active') - ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active") - - // simulate entire key pressing event - $input.trigger({ - type: 'keydown' - , keyCode: 40 - }) - .trigger({ - type: 'keypress' - , keyCode: 40 - }) - .trigger({ - type: 'keyup' - , keyCode: 40 - }) - - ok(typeahead.$menu.find('li').first().next().hasClass('active'), "second item is active") - - $input.trigger({ - type: 'keydown' - , keyCode: 38 - }) - .trigger({ - type: 'keypress' - , keyCode: 38 - }) - .trigger({ - type: 'keyup' - , keyCode: 38 - }) - - ok(typeahead.$menu.find('li').first().hasClass('active'), "first item is active") - - $input.remove() - typeahead.$menu.remove() - }) - - - test("should set input value to selected item", function () { - var $input = $('<input />').typeahead({ - source: ['aa', 'ab', 'ac'] - }).appendTo('body') - , typeahead = $input.data('typeahead') - , changed = false - , focus = false - , blur = false - - $input.val('a') - typeahead.lookup() - - $input.change(function() { changed = true }); - $input.focus(function() { focus = true; blur = false }); - $input.blur(function() { blur = true; focus = false }); - - $(typeahead.$menu.find('li')[2]).mouseover().click() - - equals($input.val(), 'ac', 'input value was correctly set') - ok(!typeahead.$menu.is(':visible'), 'the menu was hidden') - ok(changed, 'a change event was fired') - ok(focus && !blur, 'focus is still set') - - $input.remove() - typeahead.$menu.remove() - }) - - test("should start querying when minLength is met", function () { - var $input = $('<input />').typeahead({ - source: ['aaaa', 'aaab', 'aaac'], - minLength: 3 - }).appendTo('body') - , typeahead = $input.data('typeahead') - - $input.val('aa') - typeahead.lookup() - - equals(typeahead.$menu.find('li').length, 0, 'has 0 items in menu') - - $input.val('aaa') - typeahead.lookup() - - equals(typeahead.$menu.find('li').length, 3, 'has 3 items in menu') - - $input.remove() - typeahead.$menu.remove() - }) -}) diff --git a/js/tests/unit/bootstrap-button.js b/js/tests/unit/button.js similarity index 99% rename from js/tests/unit/bootstrap-button.js rename to js/tests/unit/button.js index e23ff9e302bafa6a6c63aeb208a6b620beb6781c..943d36d1b487cce6677acef1954bafefa698ab03 100644 --- a/js/tests/unit/bootstrap-button.js +++ b/js/tests/unit/button.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-buttons") + module("button") test("should provide no conflict", function () { var button = $.fn.button.noConflict() @@ -99,4 +99,4 @@ $(function () { ok(btn2.hasClass('active'), 'btn2 has active class') }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-carousel.js b/js/tests/unit/carousel.js similarity index 90% rename from js/tests/unit/bootstrap-carousel.js rename to js/tests/unit/carousel.js index 80b6e139b6ef6e367c8be154cc77412cb34b1eaf..f4acda02a74b7fefdcfd0e237bdc32deb50e529d 100644 --- a/js/tests/unit/bootstrap-carousel.js +++ b/js/tests/unit/carousel.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-carousel") + module("carousel") test("should provide no conflict", function () { var carousel = $.fn.carousel.noConflict() @@ -20,12 +20,12 @@ $(function () { $.support.transition = false stop() $('<div class="carousel"/>') - .bind('slide', function (e) { + .on('slide.bs.carousel', function (e) { e.preventDefault(); ok(true); start(); }) - .bind('slid', function () { + .on('slid.bs.carousel', function () { ok(false); }) .carousel('next') @@ -35,7 +35,7 @@ $(function () { var template = '<div id="myCarousel" class="carousel slide"><div class="carousel-inner"><div class="item active"><img alt=""><div class="carousel-caption"><h4>{{_i}}First Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Second Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div><div class="item"><img alt=""><div class="carousel-caption"><h4>{{_i}}Third Thumbnail label{{/i}}</h4><p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Donec id elit non mi porta gravida at eget metus. Nullam id dolor id nibh ultricies vehicula ut id elit.</p></div></div></div><a class="left carousel-control" href="#myCarousel" data-slide="prev">‹</a><a class="right carousel-control" href="#myCarousel" data-slide="next">›</a></div>' $.support.transition = false stop() - $(template).on('slide', function (e) { + $(template).on('slide.bs.carousel', function (e) { e.preventDefault() ok(e.direction) ok(e.direction === 'right' || e.direction === 'left') @@ -48,7 +48,7 @@ $(function () { $.support.transition = false stop() $(template) - .on('slide', function (e) { + .on('slide.bs.carousel', function (e) { e.preventDefault(); ok(e.relatedTarget); ok($(e.relatedTarget).hasClass('item')); @@ -63,19 +63,19 @@ $(function () { template.appendTo("body"); $('[data-slide]').first().click(); - ok($('#myCarousel').data('carousel').options.interval == 1814); + ok($('#myCarousel').data('bs.carousel').options.interval == 1814); $('#myCarousel').remove(); template.appendTo("body").attr("data-modal", "foobar"); $('[data-slide]').first().click(); - ok($('#myCarousel').data('carousel').options.interval == 1814, "even if there is an data-modal attribute set"); + ok($('#myCarousel').data('bs.carousel').options.interval == 1814, "even if there is an data-modal attribute set"); $('#myCarousel').remove(); template.appendTo("body"); $('[data-slide]').first().click(); $('#myCarousel').attr('data-interval', 1860); $('[data-slide]').first().click(); - ok($('#myCarousel').data('carousel').options.interval == 1814, "attributes should be read only on intitialization"); + ok($('#myCarousel').data('bs.carousel').options.interval == 1814, "attributes should be read only on intitialization"); $('#myCarousel').remove(); }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-collapse.js b/js/tests/unit/collapse.js similarity index 89% rename from js/tests/unit/bootstrap-collapse.js rename to js/tests/unit/collapse.js index 4c5916ecd9317de93826a862cb6579d06c2aba10..dd2cee27dbb51068cf295b572d343000c1e61789 100644 --- a/js/tests/unit/bootstrap-collapse.js +++ b/js/tests/unit/collapse.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-collapse") + module("collapse") test("should provide no conflict", function () { var collapse = $.fn.collapse.noConflict() @@ -32,12 +32,12 @@ $(function () { $.support.transition = false stop() $('<div class="collapse"/>') - .bind('show', function (e) { + .on('show.bs.collapse', function (e) { e.preventDefault(); ok(true); start(); }) - .bind('shown', function () { + .on('shown.bs.collapse', function () { ok(false); }) .collapse('show') @@ -47,10 +47,10 @@ $(function () { $.support.transition = false stop() $('<div class="collapse" style="height: 0px"/>') - .bind('show', function () { + .on('show.bs.collapse', function () { ok(this.style.height == '0px') }) - .bind('shown', function () { + .on('shown.bs.collapse', function () { ok(this.style.height == 'auto') start() }) @@ -66,7 +66,7 @@ $(function () { var collapsible = $('<div id="test1"></div>') .appendTo($('#qunit-fixture')) - .on('show', function () { + .on('show.bs.collapse', function () { ok(!target.hasClass('collapsed')) start() }) @@ -83,7 +83,7 @@ $(function () { var collapsible = $('<div id="test1" class="in"></div>') .appendTo($('#qunit-fixture')) - .on('hide', function () { + .on('hide.bs.collapse', function () { ok(target.hasClass('collapsed')) start() }) @@ -91,4 +91,4 @@ $(function () { target.click() }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-dropdown.js b/js/tests/unit/dropdown.js similarity index 74% rename from js/tests/unit/bootstrap-dropdown.js rename to js/tests/unit/dropdown.js index 2f0d2d29ec56265d8652f44b2091bfd83e5fa29a..e45bd0a468e456c1da445a5c16576e2f6ce6939b 100644 --- a/js/tests/unit/bootstrap-dropdown.js +++ b/js/tests/unit/dropdown.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-dropdowns") + module("dropdowns") test("should provide no conflict", function () { var dropdown = $.fn.dropdown.noConflict() @@ -103,6 +103,7 @@ $(function () { .find('[data-toggle="dropdown"]') .dropdown() .click() + ok(dropdown.parent('.dropdown').hasClass('open'), 'open class added on click') $('body').click() ok(!dropdown.parent('.dropdown').hasClass('open'), 'open class removed') @@ -148,4 +149,71 @@ $(function () { $("#qunit-fixture").html("") }) -}) \ No newline at end of file + test("should fire show and hide event", function () { + var dropdownHTML = '<ul class="tabs">' + + '<li class="dropdown">' + + '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' + + '<ul class="dropdown-menu">' + + '<li><a href="#">Secondary link</a></li>' + + '<li><a href="#">Something else here</a></li>' + + '<li class="divider"></li>' + + '<li><a href="#">Another link</a></li>' + + '</ul>' + + '</li>' + + '</ul>' + , dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .dropdown() + + stop() + + dropdown + .parent('.dropdown') + .bind('show.bs.dropdown', function () { + ok(true, 'show was called') + }) + .bind('hide.bs.dropdown', function () { + ok(true, 'hide was called') + start() + }) + + dropdown.click() + $(document.body).click() + }) + + + test("should fire shown and hiden event", function () { + var dropdownHTML = '<ul class="tabs">' + + '<li class="dropdown">' + + '<a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown</a>' + + '<ul class="dropdown-menu">' + + '<li><a href="#">Secondary link</a></li>' + + '<li><a href="#">Something else here</a></li>' + + '<li class="divider"></li>' + + '<li><a href="#">Another link</a></li>' + + '</ul>' + + '</li>' + + '</ul>' + , dropdown = $(dropdownHTML) + .appendTo('#qunit-fixture') + .find('[data-toggle="dropdown"]') + .dropdown() + + stop() + + dropdown + .parent('.dropdown') + .bind('shown.bs.dropdown', function () { + ok(true, 'show was called') + }) + .bind('hidden.bs.dropdown', function () { + ok(true, 'hide was called') + start() + }) + + dropdown.click() + $(document.body).click() + }) + +}) diff --git a/js/tests/unit/bootstrap-modal.js b/js/tests/unit/modal.js similarity index 78% rename from js/tests/unit/bootstrap-modal.js rename to js/tests/unit/modal.js index b0096f8ed3932b86bafea552842f03a23c73e542..9187b5e23a48cf9aa2d9fd2a3cdc9f25cce3bc0c 100644 --- a/js/tests/unit/bootstrap-modal.js +++ b/js/tests/unit/modal.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-modal") + module("modal") test("should provide no conflict", function () { var modal = $.fn.modal.noConflict() @@ -20,15 +20,15 @@ $(function () { }) test("should expose defaults var for settings", function () { - ok($.fn.modal.defaults, 'default object exposed') + ok($.fn.modal.Constructor.DEFAULTS, 'default object exposed') }) test("should insert into dom when show method is called", function () { stop() $.support.transition = false $("<div id='modal-test'></div>") - .bind("shown", function () { - ok($('#modal-test').length, 'modal insterted into dom') + .on("shown.bs.modal", function () { + ok($('#modal-test').length, 'modal inserted into dom') $(this).remove() start() }) @@ -39,10 +39,10 @@ $(function () { stop() $.support.transition = false $("<div id='modal-test'></div>") - .bind("show", function () { + .on("show.bs.modal", function () { ok(true, "show was called") }) - .bind("shown", function () { + .on("shown.bs.modal", function () { $(this).remove() start() }) @@ -53,12 +53,12 @@ $(function () { stop() $.support.transition = false $("<div id='modal-test'></div>") - .bind("show", function (e) { + .on("show.bs.modal", function (e) { e.preventDefault() ok(true, "show was called") start() }) - .bind("shown", function () { + .on("shown.bs.modal", function () { ok(false, "shown was called") }) .modal("show") @@ -69,12 +69,12 @@ $(function () { $.support.transition = false $("<div id='modal-test'></div>") - .bind("shown", function () { + .on("shown.bs.modal", function () { ok($('#modal-test').is(":visible"), 'modal visible') - ok($('#modal-test').length, 'modal insterted into dom') + ok($('#modal-test').length, 'modal inserted into dom') $(this).modal("hide") }) - .bind("hidden", function() { + .on("hidden.bs.modal", function() { ok(!$('#modal-test').is(":visible"), 'modal hidden') $('#modal-test').remove() start() @@ -87,12 +87,12 @@ $(function () { $.support.transition = false var div = $("<div id='modal-test'></div>") div - .bind("shown", function () { + .on("shown.bs.modal", function () { ok($('#modal-test').is(":visible"), 'modal visible') - ok($('#modal-test').length, 'modal insterted into dom') + ok($('#modal-test').length, 'modal inserted into dom') div.modal("toggle") }) - .bind("hidden", function() { + .on("hidden.bs.modal", function() { ok(!$('#modal-test').is(":visible"), 'modal hidden') div.remove() start() @@ -105,12 +105,12 @@ $(function () { $.support.transition = false var div = $("<div id='modal-test'><span class='close' data-dismiss='modal'></span></div>") div - .bind("shown", function () { + .on("shown.bs.modal", function () { ok($('#modal-test').is(":visible"), 'modal visible') - ok($('#modal-test').length, 'modal insterted into dom') + ok($('#modal-test').length, 'modal inserted into dom') div.find('.close').click() }) - .bind("hidden", function() { + .on("hidden.bs.modal", function() { ok(!$('#modal-test').is(":visible"), 'modal hidden') div.remove() start() @@ -123,15 +123,15 @@ $(function () { $.support.transition = false var div = $("<div>", { id: 'modal-test', "data-backdrop": false }) div - .bind("shown", function () { + .on("shown.bs.modal", function () { ok($('#modal-test').is(":visible"), 'modal visible') div.modal("hide") }) - .bind("hidden", function() { + .on("hidden.bs.modal", function() { ok(!$('#modal-test').is(":visible"), 'modal hidden') div.remove() start() }) .modal("show") }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-phantom.js b/js/tests/unit/phantom.js similarity index 99% rename from js/tests/unit/bootstrap-phantom.js rename to js/tests/unit/phantom.js index a04aeaa878fb77216d6e4583083ed7953795876e..c01e71c154e4e0bc0363aea3acb606271bc384a3 100644 --- a/js/tests/unit/bootstrap-phantom.js +++ b/js/tests/unit/phantom.js @@ -18,4 +18,4 @@ 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.") -} \ No newline at end of file +} diff --git a/js/tests/unit/bootstrap-popover.js b/js/tests/unit/popover.js similarity index 96% rename from js/tests/unit/bootstrap-popover.js rename to js/tests/unit/popover.js index 20234e147657bd7a678f147921a4ce2833c0f04c..fb00175673ff933a1bbec53255fc3b01a49054fc 100644 --- a/js/tests/unit/bootstrap-popover.js +++ b/js/tests/unit/popover.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-popover") + module("popover") test("should provide no conflict", function () { var popover = $.fn.popover.noConflict() @@ -34,7 +34,7 @@ $(function () { var popover = $('<a href="#" title="mdo" data-content="http://twitter.com/mdo">@mdo</a>') .popover() - ok(!!popover.data('popover'), 'popover instance exists') + ok(!!popover.data('bs.popover'), 'popover instance exists') }) test("should get title and content from options", function () { @@ -99,7 +99,7 @@ $(function () { test("should destroy popover", function () { var popover = $('<div/>').popover({trigger: 'hover'}).on('click.foo', function(){}) - ok(popover.data('popover'), 'popover has data') + ok(popover.data('bs.popover'), 'popover has data') ok($._data(popover[0], 'events').mouseover && $._data(popover[0], 'events').mouseout, 'popover has hover event') ok($._data(popover[0], 'events').click[0].namespace == 'foo', 'popover has extra click.foo event') popover.popover('show') @@ -110,4 +110,4 @@ $(function () { ok(!$._data(popover[0], 'events').mouseover && !$._data(popover[0], 'events').mouseout, 'popover does not have any events') }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-scrollspy.js b/js/tests/unit/scrollspy.js similarity index 97% rename from js/tests/unit/bootstrap-scrollspy.js rename to js/tests/unit/scrollspy.js index 32bfa7134296057929dda292327956b029cf33f0..06219a1c8d3ba432d0b258d8e56b6a868356cff9 100644 --- a/js/tests/unit/bootstrap-scrollspy.js +++ b/js/tests/unit/scrollspy.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-scrollspy") + module("scrollspy") test("should provide no conflict", function () { var scrollspy = $.fn.scrollspy.noConflict() @@ -34,4 +34,4 @@ $(function () { ok($topbar.find('.active', true)) }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-tab.js b/js/tests/unit/tab.js similarity index 96% rename from js/tests/unit/bootstrap-tab.js rename to js/tests/unit/tab.js index ba5910d5e28c079fcf7f1872667551f887a2e035..aede32abb1878b193aaa819e69e751c693a7df23 100644 --- a/js/tests/unit/bootstrap-tab.js +++ b/js/tests/unit/tab.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-tabs") + module("tabs") test("should provide no conflict", function () { var tab = $.fn.tab.noConflict() @@ -53,12 +53,12 @@ $(function () { $.support.transition = false stop(); $('<div class="tab"/>') - .bind('show', function (e) { + .on('show.bs.tab', function (e) { e.preventDefault(); ok(true); start(); }) - .bind('shown', function () { + .on('shown.bs.tab', function () { ok(false); }) .tab('show') @@ -83,4 +83,4 @@ $(function () { }).tab('show') }) -}) \ No newline at end of file +}) diff --git a/js/tests/unit/bootstrap-tooltip.js b/js/tests/unit/tooltip.js similarity index 93% rename from js/tests/unit/bootstrap-tooltip.js rename to js/tests/unit/tooltip.js index 5b37b4e687d0254e68359fab3259d4ace5f631fd..638edefc26dc9955cf26b0f254bb4afe8da43b28 100644 --- a/js/tests/unit/bootstrap-tooltip.js +++ b/js/tests/unit/tooltip.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-tooltip") + module("tooltip") test("should provide no conflict", function () { var tooltip = $.fn.tooltip.noConflict() @@ -19,7 +19,7 @@ $(function () { }) test("should expose default settings", function () { - ok(!!$.fn.tooltip.defaults, 'defaults is defined') + ok(!!$.fn.tooltip.Constructor.DEFAULTS, 'defaults is defined') }) test("should empty title attribute", function () { @@ -69,7 +69,7 @@ $(function () { test("should fire show event", function () { stop() var tooltip = $('<div title="tooltip title"></div>') - .bind("show", function() { + .on("show.bs.tooltip", function() { ok(true, "show was called") start() }) @@ -79,7 +79,7 @@ $(function () { test("should fire shown event", function () { stop() var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { + .on("shown.bs.tooltip", function() { ok(true, "shown was called") start() }) @@ -89,12 +89,12 @@ $(function () { test("should not fire shown event when default prevented", function () { stop() var tooltip = $('<div title="tooltip title"></div>') - .bind("show", function(e) { + .on("show.bs.tooltip", function(e) { e.preventDefault() ok(true, "show was called") start() }) - .bind("shown", function() { + .on("shown.bs.tooltip", function() { ok(false, "shown was called") }) .tooltip('show') @@ -103,10 +103,10 @@ $(function () { test("should fire hide event", function () { stop() var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { + .on("shown.bs.tooltip", function() { $(this).tooltip('hide') }) - .bind("hide", function() { + .on("hide.bs.tooltip", function() { ok(true, "hide was called") start() }) @@ -116,10 +116,10 @@ $(function () { test("should fire hidden event", function () { stop() var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { + .on("shown.bs.tooltip", function() { $(this).tooltip('hide') }) - .bind("hidden", function() { + .on("hidden.bs.tooltip", function() { ok(true, "hidden was called") start() }) @@ -129,15 +129,15 @@ $(function () { test("should not fire hidden event when default prevented", function () { stop() var tooltip = $('<div title="tooltip title"></div>') - .bind("shown", function() { + .on("shown.bs.tooltip", function() { $(this).tooltip('hide') }) - .bind("hide", function(e) { + .on("hide.bs.tooltip", function(e) { e.preventDefault() ok(true, "hide was called") start() }) - .bind("hidden", function() { + .on("hidden.bs.tooltip", function() { ok(false, "hidden was called") }) .tooltip('show') @@ -214,13 +214,13 @@ $(function () { test("should destroy tooltip", function () { var tooltip = $('<div/>').tooltip().on('click.foo', function(){}) - ok(tooltip.data('tooltip'), 'tooltip has data') + ok(tooltip.data('bs.tooltip'), 'tooltip has data') ok($._data(tooltip[0], 'events').mouseover && $._data(tooltip[0], 'events').mouseout, 'tooltip has hover event') ok($._data(tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip has extra click.foo event') tooltip.tooltip('show') tooltip.tooltip('destroy') ok(!tooltip.hasClass('in'), 'tooltip is hidden') - ok(!$._data(tooltip[0], 'tooltip'), 'tooltip does not have data') + ok(!$._data(tooltip[0], 'bs.tooltip'), 'tooltip does not have data') ok($._data(tooltip[0], 'events').click[0].namespace == 'foo', 'tooltip still has click.foo') ok(!$._data(tooltip[0], 'events').mouseover && !$._data(tooltip[0], 'events').mouseout, 'tooltip does not have any events') }) diff --git a/js/tests/unit/bootstrap-transition.js b/js/tests/unit/transition.js similarity index 90% rename from js/tests/unit/bootstrap-transition.js rename to js/tests/unit/transition.js index 086773fa272f17a3e4d2b11c006fb1cf21493135..39c415bc23fdc745b39579a0975d6ce9718f7368 100644 --- a/js/tests/unit/bootstrap-transition.js +++ b/js/tests/unit/transition.js @@ -1,6 +1,6 @@ $(function () { - module("bootstrap-transition") + module("transition") test("should be defined on jquery support object", function () { ok($.support.transition !== undefined, 'transition object is defined') @@ -10,4 +10,4 @@ $(function () { ok($.support.transition ? $.support.transition.end : true, 'end string is defined') }) -}) \ No newline at end of file +}) diff --git a/js/tests/vendor/jquery.js b/js/tests/vendor/jquery.js index 006e953102ded2db8e217e4507de3baa8bcc976d..32d50cb0ee999dca34fb7ffd99fee78432717b09 100644 --- a/js/tests/vendor/jquery.js +++ b/js/tests/vendor/jquery.js @@ -2,4 +2,4 @@ //@ sourceMappingURL=jquery.min.map */(function(e,t){var n,r,i=typeof t,o=e.document,a=e.location,s=e.jQuery,u=e.$,l={},c=[],p="1.9.1",f=c.concat,d=c.push,h=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=p.trim,b=function(e,t){return new b.fn.init(e,t,r)},x=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,N=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^[\],:{}\s]*$/,E=/(?:^|:|,)(?:\s*\[)+/g,S=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,A=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,j=/^-ms-/,D=/-([\da-z])/gi,L=function(e,t){return t.toUpperCase()},H=function(e){(o.addEventListener||"load"===e.type||"complete"===o.readyState)&&(q(),b.ready())},q=function(){o.addEventListener?(o.removeEventListener("DOMContentLoaded",H,!1),e.removeEventListener("load",H,!1)):(o.detachEvent("onreadystatechange",H),e.detachEvent("onload",H))};b.fn=b.prototype={jquery:p,constructor:b,init:function(e,n,r){var i,a;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof b?n[0]:n,b.merge(this,b.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:o,!0)),C.test(i[1])&&b.isPlainObject(n))for(i in n)b.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(a=o.getElementById(i[2]),a&&a.parentNode){if(a.id!==i[2])return r.find(e);this.length=1,this[0]=a}return this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):b.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),b.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return h.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=b.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return b.each(this,e,t)},ready:function(e){return b.ready.promise().done(e),this},slice:function(){return this.pushStack(h.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(b.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:d,sort:[].sort,splice:[].splice},b.fn.init.prototype=b.fn,b.extend=b.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||b.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(o=arguments[u]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(b.isPlainObject(r)||(n=b.isArray(r)))?(n?(n=!1,a=e&&b.isArray(e)?e:[]):a=e&&b.isPlainObject(e)?e:{},s[i]=b.extend(c,a,r)):r!==t&&(s[i]=r));return s},b.extend({noConflict:function(t){return e.$===b&&(e.$=u),t&&e.jQuery===b&&(e.jQuery=s),b},isReady:!1,readyWait:1,holdReady:function(e){e?b.readyWait++:b.ready(!0)},ready:function(e){if(e===!0?!--b.readyWait:!b.isReady){if(!o.body)return setTimeout(b.ready);b.isReady=!0,e!==!0&&--b.readyWait>0||(n.resolveWith(o,[b]),b.fn.trigger&&b(o).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===b.type(e)},isArray:Array.isArray||function(e){return"array"===b.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==b.type(e)||e.nodeType||b.isWindow(e))return!1;try{if(e.constructor&&!y.call(e,"constructor")&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||y.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=b.buildFragment([e],t,i),i&&b(i).remove(),b.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=b.trim(n),n&&k.test(n.replace(S,"@").replace(A,"]").replace(E,"")))?Function("return "+n)():(b.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||b.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&b.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(j,"ms-").replace(D,L)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:v&&!v.call("\ufeff\u00a0")?function(e){return null==e?"":v.call(e)}:function(e){return null==e?"":(e+"").replace(T,"")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?b.merge(n,"string"==typeof e?[e]:e):d.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(g)return g.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return f.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(o=e[n],n=e,e=o),b.isFunction(e)?(r=h.call(arguments,2),i=function(){return e.apply(n||this,r.concat(h.call(arguments)))},i.guid=e.guid=e.guid||b.guid++,i):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===b.type(r)){o=!0;for(u in r)b.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,b.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(b(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),b.ready.promise=function(t){if(!n)if(n=b.Deferred(),"complete"===o.readyState)setTimeout(b.ready);else if(o.addEventListener)o.addEventListener("DOMContentLoaded",H,!1),e.addEventListener("load",H,!1);else{o.attachEvent("onreadystatechange",H),e.attachEvent("onload",H);var r=!1;try{r=null==e.frameElement&&o.documentElement}catch(i){}r&&r.doScroll&&function a(){if(!b.isReady){try{r.doScroll("left")}catch(e){return setTimeout(a,50)}q(),b.ready()}}()}return n.promise(t)},b.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function M(e){var t=e.length,n=b.type(e);return b.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}r=b(o);var _={};function F(e){var t=_[e]={};return b.each(e.match(w)||[],function(e,n){t[n]=!0}),t}b.Callbacks=function(e){e="string"==typeof e?_[e]||F(e):b.extend({},e);var n,r,i,o,a,s,u=[],l=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=u.length,n=!0;u&&o>a;a++)if(u[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,u&&(l?l.length&&c(l.shift()):r?u=[]:p.disable())},p={add:function(){if(u){var t=u.length;(function i(t){b.each(t,function(t,n){var r=b.type(n);"function"===r?e.unique&&p.has(n)||u.push(n):n&&n.length&&"string"!==r&&i(n)})})(arguments),n?o=u.length:r&&(s=t,c(r))}return this},remove:function(){return u&&b.each(arguments,function(e,t){var r;while((r=b.inArray(t,u,r))>-1)u.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?b.inArray(e,u)>-1:!(!u||!u.length)},empty:function(){return u=[],this},disable:function(){return u=l=r=t,this},disabled:function(){return!u},lock:function(){return l=t,r||p.disable(),this},locked:function(){return!l},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!u||i&&!l||(n?l.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},b.extend({Deferred:function(e){var t=[["resolve","done",b.Callbacks("once memory"),"resolved"],["reject","fail",b.Callbacks("once memory"),"rejected"],["notify","progress",b.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return b.Deferred(function(n){b.each(t,function(t,o){var a=o[0],s=b.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&b.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?b.extend(e,r):r}},i={};return r.pipe=r.then,b.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=h.call(arguments),r=n.length,i=1!==r||e&&b.isFunction(e.promise)?r:0,o=1===i?e:b.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?h.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,u,l;if(r>1)for(s=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&b.isFunction(n[t].promise)?n[t].promise().done(a(t,l,n)).fail(o.reject).progress(a(t,u,s)):--i;return i||o.resolveWith(l,n),o.promise()}}),b.support=function(){var t,n,r,a,s,u,l,c,p,f,d=o.createElement("div");if(d.setAttribute("className","t"),d.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",n=d.getElementsByTagName("*"),r=d.getElementsByTagName("a")[0],!n||!r||!n.length)return{};s=o.createElement("select"),l=s.appendChild(o.createElement("option")),a=d.getElementsByTagName("input")[0],r.style.cssText="top:1px;float:left;opacity:.5",t={getSetAttribute:"t"!==d.className,leadingWhitespace:3===d.firstChild.nodeType,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/top/.test(r.getAttribute("style")),hrefNormalized:"/a"===r.getAttribute("href"),opacity:/^0.5/.test(r.style.opacity),cssFloat:!!r.style.cssFloat,checkOn:!!a.value,optSelected:l.selected,enctype:!!o.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==o.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===o.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},a.checked=!0,t.noCloneChecked=a.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!l.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}a=o.createElement("input"),a.setAttribute("value",""),t.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),t.radioValue="t"===a.value,a.setAttribute("checked","t"),a.setAttribute("name","t"),u=o.createDocumentFragment(),u.appendChild(a),t.appendChecked=a.checked,t.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent("onclick",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c="on"+f,"t"),t[f+"Bubbles"]=c in e||d.attributes[c].expando===!1;return d.style.backgroundClip="content-box",d.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===d.style.backgroundClip,b(function(){var n,r,a,s="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",u=o.getElementsByTagName("body")[0];u&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",u.appendChild(n).appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",a=d.getElementsByTagName("td"),a[0].style.cssText="padding:0;margin:0;border:0;display:none",p=0===a[0].offsetHeight,a[0].style.display="",a[1].style.display="none",t.reliableHiddenOffsets=p&&0===a[0].offsetHeight,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",t.boxSizing=4===d.offsetWidth,t.doesNotIncludeMarginInBodyOffset=1!==u.offsetTop,e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(d,null)||{width:"4px"}).width,r=d.appendChild(o.createElement("div")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width="0",d.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML="",d.style.cssText=s+"width:1px;padding:1px;display:inline;zoom:1",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display="block",d.innerHTML="<div></div>",d.firstChild.style.width="5px",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(u.style.zoom=1)),u.removeChild(n),n=d=a=r=null)}),n=s=u=l=r=a=null,t}();var O=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,B=/([A-Z])/g;function P(e,n,r,i){if(b.acceptData(e)){var o,a,s=b.expando,u="string"==typeof n,l=e.nodeType,p=l?b.cache:e,f=l?e[s]:e[s]&&s;if(f&&p[f]&&(i||p[f].data)||!u||r!==t)return f||(l?e[s]=f=c.pop()||b.guid++:f=s),p[f]||(p[f]={},l||(p[f].toJSON=b.noop)),("object"==typeof n||"function"==typeof n)&&(i?p[f]=b.extend(p[f],n):p[f].data=b.extend(p[f].data,n)),o=p[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[b.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[b.camelCase(n)])):a=o,a}}function R(e,t,n){if(b.acceptData(e)){var r,i,o,a=e.nodeType,s=a?b.cache:e,u=a?e[b.expando]:b.expando;if(s[u]){if(t&&(o=n?s[u]:s[u].data)){b.isArray(t)?t=t.concat(b.map(t,b.camelCase)):t in o?t=[t]:(t=b.camelCase(t),t=t in o?[t]:t.split(" "));for(r=0,i=t.length;i>r;r++)delete o[t[r]];if(!(n?$:b.isEmptyObject)(o))return}(n||(delete s[u].data,$(s[u])))&&(a?b.cleanData([e],!0):b.support.deleteExpando||s!=s.window?delete s[u]:s[u]=null)}}}b.extend({cache:{},expando:"jQuery"+(p+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?b.cache[e[b.expando]]:e[b.expando],!!e&&!$(e)},data:function(e,t,n){return P(e,t,n)},removeData:function(e,t){return R(e,t)},_data:function(e,t,n){return P(e,t,n,!0)},_removeData:function(e,t){return R(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&b.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),b.fn.extend({data:function(e,n){var r,i,o=this[0],a=0,s=null;if(e===t){if(this.length&&(s=b.data(o),1===o.nodeType&&!b._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>a;a++)i=r[a].name,i.indexOf("data-")||(i=b.camelCase(i.slice(5)),W(o,i,s[i]));b._data(o,"parsedAttrs",!0)}return s}return"object"==typeof e?this.each(function(){b.data(this,e)}):b.access(this,function(n){return n===t?o?W(o,e,b.data(o,e)):null:(this.each(function(){b.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){b.removeData(this,e)})}});function W(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(B,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:O.test(r)?b.parseJSON(r):r}catch(o){}b.data(e,n,r)}else r=t}return r}function $(e){var t;for(t in e)if(("data"!==t||!b.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}b.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=b._data(e,n),r&&(!i||b.isArray(r)?i=b._data(e,n,b.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=b.queue(e,t),r=n.length,i=n.shift(),o=b._queueHooks(e,t),a=function(){b.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return b._data(e,n)||b._data(e,n,{empty:b.Callbacks("once memory").add(function(){b._removeData(e,t+"queue"),b._removeData(e,n)})})}}),b.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?b.queue(this[0],e):n===t?this:this.each(function(){var t=b.queue(this,e,n);b._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&b.dequeue(this,e)})},dequeue:function(e){return this.each(function(){b.dequeue(this,e)})},delay:function(e,t){return e=b.fx?b.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=b.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};"string"!=typeof e&&(n=e,e=t),e=e||"fx";while(s--)r=b._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var I,z,X=/[\t\r\n]/g,U=/\r/g,V=/^(?:input|select|textarea|button|object)$/i,Y=/^(?:a|area)$/i,J=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,G=/^(?:checked|selected)$/i,Q=b.support.getSetAttribute,K=b.support.input;b.fn.extend({attr:function(e,t){return b.access(this,b.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){b.removeAttr(this,e)})},prop:function(e,t){return b.access(this,b.prop,e,t,arguments.length>1)},removeProp:function(e){return e=b.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=b.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(b.isFunction(e))return this.each(function(t){b(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(X," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?b.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return b.isFunction(e)?this.each(function(n){b(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,a=0,s=b(this),u=t,l=e.match(w)||[];while(o=l[a++])u=r?u:!s.hasClass(o),s[u?"addClass":"removeClass"](o)}else(n===i||"boolean"===n)&&(this.className&&b._data(this,"__className__",this.className),this.className=this.className||e===!1?"":b._data(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(X," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=b.isFunction(e),this.each(function(n){var o,a=b(this);1===this.nodeType&&(o=i?e.call(this,n,a.val()):e,null==o?o="":"number"==typeof o?o+="":b.isArray(o)&&(o=b.map(o,function(e){return null==e?"":e+""})),r=b.valHooks[this.type]||b.valHooks[this.nodeName.toLowerCase()],r&&"set"in r&&r.set(this,o,"value")!==t||(this.value=o))});if(o)return r=b.valHooks[o.type]||b.valHooks[o.nodeName.toLowerCase()],r&&"get"in r&&(n=r.get(o,"value"))!==t?n:(n=o.value,"string"==typeof n?n.replace(U,""):null==n?"":n)}}}),b.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;for(;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(b.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&b.nodeName(n.parentNode,"optgroup"))){if(t=b(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=b.makeArray(t);return b(e).find("option").each(function(){this.selected=b.inArray(b(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var o,a,s,u=e.nodeType;if(e&&3!==u&&8!==u&&2!==u)return typeof e.getAttribute===i?b.prop(e,n,r):(a=1!==u||!b.isXMLDoc(e),a&&(n=n.toLowerCase(),o=b.attrHooks[n]||(J.test(n)?z:I)),r===t?o&&a&&"get"in o&&null!==(s=o.get(e,n))?s:(typeof e.getAttribute!==i&&(s=e.getAttribute(n)),null==s?t:s):null!==r?o&&a&&"set"in o&&(s=o.set(e,r,n))!==t?s:(e.setAttribute(n,r+""),r):(b.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=b.propFix[n]||n,J.test(n)?!Q&&G.test(n)?e[b.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:b.attr(e,n,""),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!b.support.radioValue&&"radio"===t&&b.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!b.isXMLDoc(e),a&&(n=b.propFix[n]||n,o=b.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):V.test(e.nodeName)||Y.test(e.nodeName)&&e.href?0:t}}}}),z={get:function(e,n){var r=b.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?K&&Q?null!=i:G.test(n)?e[b.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?b.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&b.propFix[n]||n,n):e[b.camelCase("default-"+n)]=e[n]=!0,n}},K&&Q||(b.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return b.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t},set:function(e,n,r){return b.nodeName(e,"input")?(e.defaultValue=n,t):I&&I.set(e,n,r)}}),Q||(I=b.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},b.attrHooks.contenteditable={get:I.get,set:function(e,t,n){I.set(e,""===t?!1:t,n)}},b.each(["width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),b.support.hrefNormalized||(b.each(["href","src","width","height"],function(e,n){b.attrHooks[n]=b.extend(b.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),b.each(["href","src"],function(e,t){b.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),b.support.style||(b.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),b.support.optSelected||(b.propHooks.selected=b.extend(b.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),b.support.enctype||(b.propFix.enctype="encoding"),b.support.checkOn||b.each(["radio","checkbox"],function(){b.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),b.each(["radio","checkbox"],function(){b.valHooks[this]=b.extend(b.valHooks[this],{set:function(e,n){return b.isArray(n)?e.checked=b.inArray(b(e).val(),n)>=0:t}})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\.(.+)|)$/;function it(){return!0}function ot(){return!1}b.event={global:{},add:function(e,n,r,o,a){var s,u,l,c,p,f,d,h,g,m,y,v=b._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=b.guid++),(u=v.events)||(u=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof b===i||e&&b.event.triggered===e.type?t:b.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||"").match(w)||[""],l=n.length;while(l--)s=rt.exec(n[l])||[],g=y=s[1],m=(s[2]||"").split(".").sort(),p=b.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=b.event.special[g]||{},d=b.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&b.expr.match.needsContext.test(a),namespace:m.join(".")},c),(h=u[g])||(h=u[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent("on"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),b.event.global[g]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,p,f,d,h,g,m=b.hasData(e)&&b._data(e);if(m&&(c=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(s=rt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){p=b.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),u=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&("**"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));u&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||b.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)b.event.remove(e,d+t[l],n,r,!0);b.isEmptyObject(c)&&(delete m.handle,b._removeData(e,"events"))}},trigger:function(n,r,i,a){var s,u,l,c,p,f,d,h=[i||o],g=y.call(n,"type")?n.type:n,m=y.call(n,"namespace")?n.namespace.split("."):[];if(l=f=i=i||o,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+b.event.triggered)&&(g.indexOf(".")>=0&&(m=g.split("."),g=m.shift(),m.sort()),u=0>g.indexOf(":")&&"on"+g,n=n[b.expando]?n:new b.Event(g,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=m.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:b.makeArray(r,[n]),p=b.event.special[g]||{},a||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!a&&!p.noBubble&&!b.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(l=l.parentNode);l;l=l.parentNode)h.push(l),f=l;f===(i.ownerDocument||o)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((l=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(b._data(l,"events")||{})[n.type]&&b._data(l,"handle"),s&&s.apply(l,r),s=u&&l[u],s&&b.acceptData(l)&&s.apply&&s.apply(l,r)===!1&&n.preventDefault();if(n.type=g,!(a||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===g&&b.nodeName(i,"a")||!b.acceptData(i)||!u||!i[g]||b.isWindow(i))){f=i[u],f&&(i[u]=null),b.event.triggered=g;try{i[g]()}catch(v){}b.event.triggered=t,f&&(i[u]=f)}return n.result}},dispatch:function(e){e=b.event.fix(e);var n,r,i,o,a,s=[],u=h.call(arguments),l=(b._data(this,"events")||{})[e.type]||[],c=b.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=b.event.handlers.call(this,e,l),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((b.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,u),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==e.type)){for(o=[],a=0;u>a;a++)i=n[a],r=i.selector+" ",o[r]===t&&(o[r]=i.needsContext?b(r,this).index(l)>=0:b.find(r,this,null,[l]).length),o[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[b.expando])return e;var t,n,r,i=e.type,a=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new b.Event(a),t=r.length;while(t--)n=r[t],e[n]=a[n];return e.target||(e.target=a.srcElement||o),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,a):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,a,s=n.button,u=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||o,a=i.documentElement,r=i.body,e.pageX=n.clientX+(a&&a.scrollLeft||r&&r.scrollLeft||0)-(a&&a.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(a&&a.scrollTop||r&&r.scrollTop||0)-(a&&a.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&u&&(e.relatedTarget=u===e.target?n.toElement:u),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return b.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==o.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===o.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=b.extend(new b.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?b.event.trigger(i,null,t):b.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},b.removeEvent=o.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r="on"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},b.Event=function(e,n){return this instanceof b.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&b.extend(this,n),this.timeStamp=e&&e.timeStamp||b.now(),this[b.expando]=!0,t):new b.Event(e,n)},b.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},b.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){b.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj; return(!i||i!==r&&!b.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),b.support.submitBubbles||(b.event.special.submit={setup:function(){return b.nodeName(this,"form")?!1:(b.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=b.nodeName(n,"input")||b.nodeName(n,"button")?n.form:t;r&&!b._data(r,"submitBubbles")&&(b.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),b._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&b.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return b.nodeName(this,"form")?!1:(b.event.remove(this,"._submit"),t)}}),b.support.changeBubbles||(b.event.special.change={setup:function(){return Z.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(b.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),b.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),b.event.simulate("change",this,e,!0)})),!1):(b.event.add(this,"beforeactivate._change",function(e){var t=e.target;Z.test(t.nodeName)&&!b._data(t,"changeBubbles")&&(b.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||b.event.simulate("change",this.parentNode,e,!0)}),b._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return b.event.remove(this,"._change"),!Z.test(this.nodeName)}}),b.support.focusinBubbles||b.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){b.event.simulate(t,e.target,b.event.fix(e),!0)};b.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),b.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return b().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=b.guid++)),this.each(function(){b.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,b(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){b.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){b.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?b.event.trigger(e,n,r,!0):t}}),function(e,t){var n,r,i,o,a,s,u,l,c,p,f,d,h,g,m,y,v,x="sizzle"+-new Date,w=e.document,T={},N=0,C=0,k=it(),E=it(),S=it(),A=typeof t,j=1<<31,D=[],L=D.pop,H=D.push,q=D.slice,M=D.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},_="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=F.replace("w","w#"),B="([*^$|!~]?=)",P="\\["+_+"*("+F+")"+_+"*(?:"+B+_+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+O+")|)|)"+_+"*\\]",R=":("+F+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+P.replace(3,8)+")*)|.*)\\)|)",W=RegExp("^"+_+"+|((?:^|[^\\\\])(?:\\\\.)*)"+_+"+$","g"),$=RegExp("^"+_+"*,"+_+"*"),I=RegExp("^"+_+"*([\\x20\\t\\r\\n\\f>+~])"+_+"*"),z=RegExp(R),X=RegExp("^"+O+"$"),U={ID:RegExp("^#("+F+")"),CLASS:RegExp("^\\.("+F+")"),NAME:RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:RegExp("^("+F.replace("w","w*")+")"),ATTR:RegExp("^"+P),PSEUDO:RegExp("^"+R),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+_+"*(even|odd|(([+-]|)(\\d*)n|)"+_+"*(?:([+-]|)"+_+"*(\\d+)|))"+_+"*\\)|)","i"),needsContext:RegExp("^"+_+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+_+"*((?:-\\d)?\\d*)"+_+"*\\)|)(?=[^-]|$)","i")},V=/[\x20\t\r\n\f]*[+~]/,Y=/^[^{]+\{\s*\[native code/,J=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,G=/^(?:input|select|textarea|button)$/i,Q=/^h\d$/i,K=/'|\\/g,Z=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,et=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{q.call(w.documentElement.childNodes,0)[0].nodeType}catch(nt){q=function(e){var t,n=[];while(t=this[e++])n.push(t);return n}}function rt(e){return Y.test(e+"")}function it(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>i.cacheLength&&delete e[t.shift()],e[n]=r}}function ot(e){return e[x]=!0,e}function at(e){var t=p.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function st(e,t,n,r){var i,o,a,s,u,l,f,g,m,v;if((t?t.ownerDocument||t:w)!==p&&c(t),t=t||p,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!d&&!r){if(i=J.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&y(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return H.apply(n,q.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&T.getByClassName&&t.getElementsByClassName)return H.apply(n,q.call(t.getElementsByClassName(a),0)),n}if(T.qsa&&!h.test(e)){if(f=!0,g=x,m=t,v=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){l=ft(e),(f=t.getAttribute("id"))?g=f.replace(K,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=l.length;while(u--)l[u]=g+dt(l[u]);m=V.test(e)&&t.parentNode||t,v=l.join(",")}if(v)try{return H.apply(n,q.call(m.querySelectorAll(v),0)),n}catch(b){}finally{f||t.removeAttribute("id")}}}return wt(e.replace(W,"$1"),t,n,r)}a=st.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},c=st.setDocument=function(e){var n=e?e.ownerDocument||e:w;return n!==p&&9===n.nodeType&&n.documentElement?(p=n,f=n.documentElement,d=a(n),T.tagNameNoComments=at(function(e){return e.appendChild(n.createComment("")),!e.getElementsByTagName("*").length}),T.attributes=at(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),T.getByClassName=at(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),T.getByName=at(function(e){e.id=x+0,e.innerHTML="<a name='"+x+"'></a><div name='"+x+"'></div>",f.insertBefore(e,f.firstChild);var t=n.getElementsByName&&n.getElementsByName(x).length===2+n.getElementsByName(x+0).length;return T.getIdNotName=!n.getElementById(x),f.removeChild(e),t}),i.attrHandle=at(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==A&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},T.getIdNotName?(i.find.ID=function(e,t){if(typeof t.getElementById!==A&&!d){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(i.find.ID=function(e,n){if(typeof n.getElementById!==A&&!d){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==A&&r.getAttributeNode("id").value===e?[r]:t:[]}},i.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==A&&e.getAttributeNode("id");return n&&n.value===t}}),i.find.TAG=T.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==A?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},i.find.NAME=T.getByName&&function(e,n){return typeof n.getElementsByName!==A?n.getElementsByName(name):t},i.find.CLASS=T.getByClassName&&function(e,n){return typeof n.getElementsByClassName===A||d?t:n.getElementsByClassName(e)},g=[],h=[":focus"],(T.qsa=rt(n.querySelectorAll))&&(at(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||h.push("\\["+_+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&h.push("[*^$]="+_+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(T.matchesSelector=rt(m=f.matchesSelector||f.mozMatchesSelector||f.webkitMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){T.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),g.push("!=",R)}),h=RegExp(h.join("|")),g=RegExp(g.join("|")),y=rt(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},v=f.compareDocumentPosition?function(e,t){var r;return e===t?(u=!0,0):(r=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&r||e.parentNode&&11===e.parentNode.nodeType?e===n||y(w,e)?-1:t===n||y(w,t)?1:0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return u=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:0;if(o===a)return ut(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?ut(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},u=!1,[0,0].sort(v),T.detectDuplicates=u,p):p},st.matches=function(e,t){return st(e,null,null,t)},st.matchesSelector=function(e,t){if((e.ownerDocument||e)!==p&&c(e),t=t.replace(Z,"='$1']"),!(!T.matchesSelector||d||g&&g.test(t)||h.test(t)))try{var n=m.call(e,t);if(n||T.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return st(t,p,null,[e]).length>0},st.contains=function(e,t){return(e.ownerDocument||e)!==p&&c(e),y(e,t)},st.attr=function(e,t){var n;return(e.ownerDocument||e)!==p&&c(e),d||(t=t.toLowerCase()),(n=i.attrHandle[t])?n(e):d||T.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},st.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},st.uniqueSort=function(e){var t,n=[],r=1,i=0;if(u=!T.detectDuplicates,e.sort(v),u){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));while(i--)e.splice(n[i],1)}return e};function ut(e,t){var n=t&&e,r=n&&(~t.sourceIndex||j)-(~e.sourceIndex||j);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ct(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function pt(e){return ot(function(t){return t=+t,ot(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}o=st.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=o(t);return n},i=st.selectors={cacheLength:50,createPseudo:ot,match:U,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||st.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&st.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return U.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&z.test(n)&&(t=ft(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(et,tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=k[e+" "];return t||(t=RegExp("(^|"+_+")"+e+"("+_+"|$)"))&&k(e,function(e){return t.test(e.className||typeof e.getAttribute!==A&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=st.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,p,f,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[x]||(m[x]={}),l=c[e]||[],d=l[0]===N&&l[1],f=l[0]===N&&l[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[N,d,f];break}}else if(v&&(l=(t[x]||(t[x]={}))[e])&&l[0]===N)f=l[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[x]||(p[x]={}))[e]=[N,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||st.error("unsupported pseudo: "+e);return r[x]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?ot(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=M.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:ot(function(e){var t=[],n=[],r=s(e.replace(W,"$1"));return r[x]?ot(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:ot(function(e){return function(t){return st(e,t).length>0}}),contains:ot(function(e){return function(t){return(t.textContent||t.innerText||o(t)).indexOf(e)>-1}}),lang:ot(function(e){return X.test(e||"")||st.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=d?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return Q.test(e.nodeName)},input:function(e){return G.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:pt(function(){return[0]}),last:pt(function(e,t){return[t-1]}),eq:pt(function(e,t,n){return[0>n?n+t:n]}),even:pt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:pt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:pt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:pt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})i.pseudos[n]=lt(n);for(n in{submit:!0,reset:!0})i.pseudos[n]=ct(n);function ft(e,t){var n,r,o,a,s,u,l,c=E[e+" "];if(c)return t?0:c.slice(0);s=e,u=[],l=i.preFilter;while(s){(!n||(r=$.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(o=[])),n=!1,(r=I.exec(s))&&(n=r.shift(),o.push({value:n,type:r[0].replace(W," ")}),s=s.slice(n.length));for(a in i.filter)!(r=U[a].exec(s))||l[a]&&!(r=l[a](r))||(n=r.shift(),o.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?st.error(e):E(e,u).slice(0)}function dt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function ht(e,t,n){var i=t.dir,o=n&&"parentNode"===i,a=C++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,n,s){var u,l,c,p=N+" "+a;if(s){while(t=t[i])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[x]||(t[x]={}),(l=c[i])&&l[0]===p){if((u=l[1])===!0||u===r)return u===!0}else if(l=c[i]=[p],l[1]=e(t,n,s)||r,l[1]===!0)return!0}}function gt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function mt(e,t,n,r,i){var o,a=[],s=0,u=e.length,l=null!=t;for(;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function yt(e,t,n,r,i,o){return r&&!r[x]&&(r=yt(r)),i&&!i[x]&&(i=yt(i,o)),ot(function(o,a,s,u){var l,c,p,f=[],d=[],h=a.length,g=o||xt(t||"*",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:mt(g,f,e,s,u),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,u),r){l=mt(y,d),r(l,[],s,u),c=l.length;while(c--)(p=l[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(p=y[c])&&l.push(m[c]=p);i(null,y=[],l,u)}c=y.length;while(c--)(p=y[c])&&(l=i?M.call(o,p):f[c])>-1&&(o[l]=!(a[l]=p))}}else y=mt(y===a?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)})}function vt(e){var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],u=a?1:0,c=ht(function(e){return e===t},s,!0),p=ht(function(e){return M.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==l)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;o>u;u++)if(n=i.relative[e[u].type])f=[ht(gt(f),n)];else{if(n=i.filter[e[u].type].apply(null,e[u].matches),n[x]){for(r=++u;o>r;r++)if(i.relative[e[r].type])break;return yt(u>1&>(f),u>1&&dt(e.slice(0,u-1)).replace(W,"$1"),n,r>u&&vt(e.slice(u,r)),o>r&&vt(e=e.slice(r)),o>r&&dt(e))}f.push(n)}return gt(f)}function bt(e,t){var n=0,o=t.length>0,a=e.length>0,s=function(s,u,c,f,d){var h,g,m,y=[],v=0,b="0",x=s&&[],w=null!=d,T=l,C=s||a&&i.find.TAG("*",d&&u.parentNode||u),k=N+=null==T?1:Math.random()||.1;for(w&&(l=u!==p&&u,r=n);null!=(h=C[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,u,c)){f.push(h);break}w&&(N=k,r=++n)}o&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,o&&b!==v){g=0;while(m=t[g++])m(x,y,u,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=L.call(f));y=mt(y)}H.apply(f,y),w&&!s&&y.length>0&&v+t.length>1&&st.uniqueSort(f)}return w&&(N=k,l=T),x};return o?ot(s):s}s=st.compile=function(e,t){var n,r=[],i=[],o=S[e+" "];if(!o){t||(t=ft(e)),n=t.length;while(n--)o=vt(t[n]),o[x]?r.push(o):i.push(o);o=S(e,bt(i,r))}return o};function xt(e,t,n){var r=0,i=t.length;for(;i>r;r++)st(e,t[r],n);return n}function wt(e,t,n,r){var o,a,u,l,c,p=ft(e);if(!r&&1===p.length){if(a=p[0]=p[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&!d&&i.relative[a[1].type]){if(t=i.find.ID(u.matches[0].replace(et,tt),t)[0],!t)return n;e=e.slice(a.shift().value.length)}o=U.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],i.relative[l=u.type])break;if((c=i.find[l])&&(r=c(u.matches[0].replace(et,tt),V.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=r.length&&dt(a),!e)return H.apply(n,q.call(r,0)),n;break}}}return s(e,p)(r,t,d,n,V.test(e)),n}i.pseudos.nth=i.pseudos.eq;function Tt(){}i.filters=Tt.prototype=i.pseudos,i.setFilters=new Tt,c(),st.attr=b.attr,b.find=st,b.expr=st.selectors,b.expr[":"]=b.expr.pseudos,b.unique=st.uniqueSort,b.text=st.getText,b.isXMLDoc=st.isXML,b.contains=st.contains}(e);var at=/Until$/,st=/^(?:parents|prev(?:Until|All))/,ut=/^.[^:#\[\.,]*$/,lt=b.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};b.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return r=this,this.pushStack(b(e).filter(function(){for(t=0;i>t;t++)if(b.contains(r[t],this))return!0}));for(n=[],t=0;i>t;t++)b.find(e,this[t],n);return n=this.pushStack(i>1?b.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=b(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(b.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e,!1))},filter:function(e){return this.pushStack(ft(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?lt.test(e)?b(e,this.context).index(this[0])>=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],a=lt.test(e)||"string"!=typeof e?b(e,t||this.context):0;for(;i>r;r++){n=this[r];while(n&&n.ownerDocument&&n!==t&&11!==n.nodeType){if(a?a.index(n)>-1:b.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}}return this.pushStack(o.length>1?b.unique(o):o)},index:function(e){return e?"string"==typeof e?b.inArray(this[0],b(e)):b.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?b(e,t):b.makeArray(e&&e.nodeType?[e]:e),r=b.merge(this.get(),n);return this.pushStack(b.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),b.fn.andSelf=b.fn.addBack;function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}b.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(e,t,n){return b.dir(e,"parentNode",n)},next:function(e){return pt(e,"nextSibling")},prev:function(e){return pt(e,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(e,t,n){return b.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return b.dir(e,"previousSibling",n)},siblings:function(e){return b.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.merge([],e.childNodes)}},function(e,t){b.fn[e]=function(n,r){var i=b.map(this,t,n);return at.test(e)||(r=n),r&&"string"==typeof r&&(i=b.filter(r,i)),i=this.length>1&&!ct[e]?b.unique(i):i,this.length>1&&st.test(e)&&(i=i.reverse()),this.pushStack(i)}}),b.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?b.find.matchesSelector(t[0],e)?[t[0]]:[]:b.find.matches(e,t)},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!b(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(t=t||0,b.isFunction(t))return b.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return b.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=b.grep(e,function(e){return 1===e.nodeType});if(ut.test(t))return b.filter(t,r,!n);t=b.filter(t,r)}return b.grep(e,function(e){return b.inArray(e,t)>=0===n})}function dt(e){var t=ht.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",gt=/ jQuery\d+="(?:null|\d+)"/g,mt=RegExp("<(?:"+ht+")[\\s/>]","i"),yt=/^\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bt=/<([\w:]+)/,xt=/<tbody/i,wt=/<|&#?\w+;/,Tt=/<(?:script|style|link)/i,Nt=/^(?:checkbox|radio)$/i,Ct=/checked\s*(?:[^=]|=\s*.checked.)/i,kt=/^$|\/(?:java|ecma)script/i,Et=/^true\/(.*)/,St=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,At={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:b.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},jt=dt(o),Dt=jt.appendChild(o.createElement("div"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,b.fn.extend({text:function(e){return b.access(this,function(e){return e===t?b.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(b.isFunction(e))return this.each(function(t){b(this).wrapAll(e.call(this,t))});if(this[0]){var t=b(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return b.isFunction(e)?this.each(function(t){b(this).wrapInner(e.call(this,t))}):this.each(function(){var t=b(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=b.isFunction(e);return this.each(function(n){b(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){b.nodeName(this,"body")||b(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=0;for(;null!=(n=this[r]);r++)(!e||b.filter(e,[n]).length>0)&&(t||1!==n.nodeType||b.cleanData(Ot(n)),n.parentNode&&(t&&b.contains(n.ownerDocument,n)&&Mt(Ot(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&b.cleanData(Ot(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&b.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return b.clone(this,e,t)})},html:function(e){return b.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,""):t;if(!("string"!=typeof e||Tt.test(e)||!b.support.htmlSerialize&&mt.test(e)||!b.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(vt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(b.cleanData(Ot(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=b.isFunction(e);return t||"string"==typeof e||(e=b(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;n&&(b(this).remove(),n.insertBefore(e,t))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=f.apply([],e);var i,o,a,s,u,l,c=0,p=this.length,d=this,h=p-1,g=e[0],m=b.isFunction(g);if(m||!(1>=p||"string"!=typeof g||b.support.checkClone)&&Ct.test(g))return this.each(function(i){var o=d.eq(i);m&&(e[0]=g.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(p&&(l=b.buildFragment(e,this[0].ownerDocument,!1,this),i=l.firstChild,1===l.childNodes.length&&(l=i),i)){for(n=n&&b.nodeName(i,"tr"),s=b.map(Ot(l,"script"),Ht),a=s.length;p>c;c++)o=l,c!==h&&(o=b.clone(o,!0,!0),a&&b.merge(s,Ot(o,"script"))),r.call(n&&b.nodeName(this[c],"table")?Lt(this[c],"tbody"):this[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,b.map(s,qt),c=0;a>c;c++)o=s[c],kt.test(o.type||"")&&!b._data(o,"globalEval")&&b.contains(u,o)&&(o.src?b.ajax({url:o.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):b.globalEval((o.text||o.textContent||o.innerHTML||"").replace(St,"")));l=i=null}return this}});function Lt(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function Ht(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Mt(e,t){var n,r=0;for(;null!=(n=e[r]);r++)b._data(n,"globalEval",!t||b._data(t[r],"globalEval"))}function _t(e,t){if(1===t.nodeType&&b.hasData(e)){var n,r,i,o=b._data(e),a=b._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)b.event.add(t,n,s[n][r])}a.data&&(a.data=b.extend({},a.data))}}function Ft(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!b.support.noCloneEvent&&t[b.expando]){i=b._data(t);for(r in i.events)b.removeEvent(t,r,i.handle);t.removeAttribute(b.expando)}"script"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),b.support.html5Clone&&e.innerHTML&&!b.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Nt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}b.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){b.fn[e]=function(e){var n,r=0,i=[],o=b(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),b(o[r])[t](n),d.apply(i,n.get());return this.pushStack(i)}});function Ot(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||"*"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||"*"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||b.nodeName(o,n)?s.push(o):b.merge(s,Ot(o,n));return n===t||n&&b.nodeName(e,n)?b.merge([e],s):s}function Bt(e){Nt.test(e.type)&&(e.defaultChecked=e.checked)}b.extend({clone:function(e,t,n){var r,i,o,a,s,u=b.contains(e.ownerDocument,e);if(b.support.html5Clone||b.isXMLDoc(e)||!mt.test("<"+e.nodeName+">")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(b.support.noCloneEvent&&b.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||b.isXMLDoc(e)))for(r=Ot(o),s=Ot(e),a=0;null!=(i=s[a]);++a)r[a]&&Ft(i,r[a]);if(t)if(n)for(s=s||Ot(e),r=r||Ot(o),a=0;null!=(i=s[a]);a++)_t(i,r[a]);else _t(e,o);return r=Ot(o,"script"),r.length>0&&Mt(r,!u&&Ot(e,"script")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,u,l,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if("object"===b.type(o))b.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement("div")),u=(bt.exec(o)||["",""])[1].toLowerCase(),c=At[u]||At._default,s.innerHTML=c[1]+o.replace(vt,"<$1></$2>")+c[2],i=c[0];while(i--)s=s.lastChild;if(!b.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!b.support.tbody){o="table"!==u||xt.test(o)?"<table>"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)b.nodeName(l=o.childNodes[i],"tbody")&&!l.childNodes.length&&o.removeChild(l) -}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); \ No newline at end of file +}b.merge(d,s.childNodes),s.textContent="";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),b.support.appendChecked||b.grep(Ot(d,"input"),Bt),h=0;while(o=d[h++])if((!r||-1===b.inArray(o,r))&&(a=b.contains(o.ownerDocument,o),s=Ot(f.appendChild(o),"script"),a&&Mt(s),n)){i=0;while(o=s[i++])kt.test(o.type||"")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,u=b.expando,l=b.cache,p=b.support.deleteExpando,f=b.event.special;for(;null!=(n=e[s]);s++)if((t||b.acceptData(n))&&(o=n[u],a=o&&l[o])){if(a.events)for(r in a.events)f[r]?b.event.remove(n,r):b.removeEvent(n,r,a.handle);l[o]&&(delete l[o],p?delete n[u]:typeof n.removeAttribute!==i?n.removeAttribute(u):n[u]=null,c.push(o))}}});var Pt,Rt,Wt,$t=/alpha\([^)]*\)/i,It=/opacity\s*=\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp("^("+x+")(.*)$","i"),Yt=RegExp("^("+x+")(?!px)[a-z%]+$","i"),Jt=RegExp("^([+-])=("+x+")","i"),Gt={BODY:"block"},Qt={position:"absolute",visibility:"hidden",display:"block"},Kt={letterSpacing:0,fontWeight:400},Zt=["Top","Right","Bottom","Left"],en=["Webkit","O","Moz","ms"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,"none"===b.css(e,"display")||!b.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=b._data(r,"olddisplay"),n=r.style.display,t?(o[a]||"none"!==n||(r.style.display=""),""===r.style.display&&nn(r)&&(o[a]=b._data(r,"olddisplay",un(r.nodeName)))):o[a]||(i=nn(r),(n&&"none"!==n||!i)&&b._data(r,"olddisplay",i?n:b.css(r,"display"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[a]||"":"none"));return e}b.fn.extend({css:function(e,n){return b.access(this,function(e,n,r){var i,o,a={},s=0;if(b.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=b.css(e,n[s],!1,o);return a}return r!==t?b.style(e,n,r):b.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:nn(this))?b(this).show():b(this).hide()})}}),b.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":b.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=b.camelCase(n),l=e.style;if(n=b.cssProps[u]||(b.cssProps[u]=tn(l,u)),s=b.cssHooks[n]||b.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(b.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||b.cssNumber[u]||(r+="px"),b.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=b.camelCase(n);return n=b.cssProps[u]||(b.cssProps[u]=tn(e.style,u)),s=b.cssHooks[n]||b.cssHooks[u],s&&"get"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),"normal"===a&&n in Kt&&(a=Kt[n]),""===r||r?(o=parseFloat(a),r===!0||b.isNumeric(o)?o||0:a):a},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||b.contains(e.ownerDocument,e)||(u=b.style(e,n)),Yt.test(u)&&Ut.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):o.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),Yt.test(u)&&!zt.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function an(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;for(;4>o;o+=2)"margin"===n&&(a+=b.css(e,n+Zt[o],!0,i)),r?("content"===n&&(a-=b.css(e,"padding"+Zt[o],!0,i)),"margin"!==n&&(a-=b.css(e,"border"+Zt[o]+"Width",!0,i))):(a+=b.css(e,"padding"+Zt[o],!0,i),"padding"!==n&&(a+=b.css(e,"border"+Zt[o]+"Width",!0,i)));return a}function sn(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(b.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?"border":"content"),r,o)+"px"}function un(e){var t=o,n=Gt[e];return n||(n=ln(e,t),"none"!==n&&n||(Pt=(Pt||b("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=ln(e,t),Pt.detach()),Gt[e]=n),n}function ln(e,t){var n=b(t.createElement(e)).appendTo(t.body),r=b.css(n[0],"display");return n.remove(),r}b.each(["height","width"],function(e,n){b.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(b.css(e,"display"))?b.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,b.support.boxSizing&&"border-box"===b.css(e,"boxSizing",!1,i),i):0)}}}),b.support.opacity||(b.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=b.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===b.trim(o.replace($t,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+" "+i)}}),b(function(){b.support.reliableMarginRight||(b.cssHooks.marginRight={get:function(e,n){return n?b.swap(e,{display:"inline-block"},Wt,[e,"marginRight"]):t}}),!b.support.pixelPosition&&b.fn.position&&b.each(["top","left"],function(e,n){b.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?b(e).position()[n]+"px":r):t}}})}),b.expr&&b.expr.filters&&(b.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!b.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||b.css(e,"display"))},b.expr.filters.visible=function(e){return!b.expr.filters.hidden(e)}),b.each({margin:"",padding:"",border:"Width"},function(e,t){b.cssHooks[e+t]={expand:function(n){var r=0,i={},o="string"==typeof n?n.split(" "):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(b.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\[\]$/,fn=/\r?\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;b.fn.extend({serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=b.prop(this,"elements");return e?b.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!b(this).is(":disabled")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Nt.test(e))}).map(function(e,t){var n=b(this).val();return null==n?null:b.isArray(n)?b.map(n,function(e){return{name:t.name,value:e.replace(fn,"\r\n")}}):{name:t.name,value:n.replace(fn,"\r\n")}}).get()}}),b.param=function(e,n){var r,i=[],o=function(e,t){t=b.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=b.ajaxSettings&&b.ajaxSettings.traditional),b.isArray(e)||e.jquery&&!b.isPlainObject(e))b.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join("&").replace(cn,"+")};function gn(e,t,n,r){var i;if(b.isArray(t))b.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==b.type(t))r(e,t);else for(i in t)gn(e+"["+i+"]",t[i],n,r)}b.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){b.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),b.fn.hover=function(e,t){return this.mouseenter(e).mouseleave(t||e)};var mn,yn,vn=b.now(),bn=/\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Nn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Cn=/^(?:GET|HEAD)$/,kn=/^\/\//,En=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Sn=b.fn.load,An={},jn={},Dn="*/".concat("*");try{yn=a.href}catch(Ln){yn=o.createElement("a"),yn.href="",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(w)||[];if(b.isFunction(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(u){var l;return o[u]=!0,b.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||a||o[c]?a?!(l=c):t:(n.dataTypes.unshift(c),s(c),!1)}),l}return s(n.dataTypes[0])||!o["*"]&&s("*")}function Mn(e,n){var r,i,o=b.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&b.extend(!0,e,r),e}b.fn.load=function(e,n,r){if("string"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),b.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(a="POST"),s.length>0&&b.ajax({url:e,type:a,dataType:"html",data:n}).done(function(e){o=arguments,s.html(i?b("<div>").append(b.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},b.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){b.fn[t]=function(e){return this.on(t,e)}}),b.each(["get","post"],function(e,n){b[n]=function(e,r,i,o){return b.isFunction(r)&&(o=o||i,i=r,r=t),b.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),b.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:"GET",isLocal:Nn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Dn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Mn(Mn(e,b.ajaxSettings),t):Mn(b.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){"object"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,u,l,c,p=b.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?b(f):b.event,h=b.Deferred(),g=b.Callbacks("once memory"),m=p.statusCode||{},y={},v={},x=0,T="canceled",N={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)m[t]=[m[t],e[t]];else N.always(e[N.status]);return this},abort:function(e){var t=e||T;return l&&l.abort(t),k(0,t),this}};if(h.promise(N).complete=g.add,N.success=N.done,N.error=N.fail,p.url=((e||p.url||yn)+"").replace(xn,"").replace(kn,mn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=b.trim(p.dataType||"*").toLowerCase().match(w)||[""],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||("http:"===r[1]?80:443))==(mn[3]||("http:"===mn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=b.param(p.data,p.traditional)),qn(An,p,n,N),2===x)return N;u=p.global,u&&0===b.active++&&b.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Cn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,"$1_="+vn++):o+(bn.test(o)?"&":"?")+"_="+vn++)),p.ifModified&&(b.lastModified[o]&&N.setRequestHeader("If-Modified-Since",b.lastModified[o]),b.etag[o]&&N.setRequestHeader("If-None-Match",b.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&N.setRequestHeader("Content-Type",p.contentType),N.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Dn+"; q=0.01":""):p.accepts["*"]);for(i in p.headers)N.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,N,p)===!1||2===x))return N.abort();T="abort";for(i in{success:1,error:1,complete:1})N[i](p[i]);if(l=qn(jn,p,n,N)){N.readyState=1,u&&d.trigger("ajaxSend",[N,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){N.abort("timeout")},p.timeout));try{x=1,l.send(y,k)}catch(C){if(!(2>x))throw C;k(-1,C)}}else k(-1,"No Transport");function k(e,n,r,i){var c,y,v,w,T,C=n;2!==x&&(x=2,s&&clearTimeout(s),l=t,a=i||"",N.readyState=e>0?4:0,r&&(w=_n(p,N,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=N.getResponseHeader("Last-Modified"),T&&(b.lastModified[o]=T),T=N.getResponseHeader("etag"),T&&(b.etag[o]=T)),204===e?(c=!0,C="nocontent"):304===e?(c=!0,C="notmodified"):(c=Fn(p,w),C=c.state,y=c.data,v=c.error,c=!v)):(v=C,(e||!C)&&(C="error",0>e&&(e=0))),N.status=e,N.statusText=(n||C)+"",c?h.resolveWith(f,[y,C,N]):h.rejectWith(f,[N,C,v]),N.statusCode(m),m=t,u&&d.trigger(c?"ajaxSuccess":"ajaxError",[N,p,c?y:v]),g.fireWith(f,[N,C]),u&&(d.trigger("ajaxComplete",[N,p]),--b.active||b.event.trigger("ajaxStop")))}return N},getScript:function(e,n){return b.get(e,t,n,"script")},getJSON:function(e,t,n){return b.get(e,t,n,"json")}});function _n(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(s in c)s in r&&(n[c[s]]=r[s]);while("*"===l[0])l.shift(),o===t&&(o=e.mimeType||n.getResponseHeader("Content-Type"));if(o)for(s in u)if(u[s]&&u[s].test(o)){l.unshift(s);break}if(l[0]in r)a=l[0];else{for(s in r){if(!l[0]||e.converters[s+" "+l[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function Fn(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(i in e.converters)a[i.toLowerCase()]=e.converters[i];for(;r=u[++s];)if("*"!==r){if("*"!==l&&l!==r){if(i=a[l+" "+r]||a["* "+r],!i)for(n in a)if(o=n.split(" "),o[1]===r&&(i=a[l+" "+o[0]]||a["* "+o[0]])){i===!0?i=a[n]:a[n]!==!0&&(r=o[0],u.splice(s--,0,r));break}if(i!==!0)if(i&&e["throws"])t=i(t);else try{t=i(t)}catch(c){return{state:"parsererror",error:i?c:"No conversion from "+l+" to "+r}}}l=r}return{state:"success",data:t}}b.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return b.globalEval(e),e}}}),b.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),b.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=o.head||b("head")[0]||o.documentElement;return{send:function(t,i){n=o.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var On=[],Bn=/(=)\?(?=&|$)|\?\?/;b.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=On.pop()||b.expando+"_"+vn++;return this[e]=!0,e}}),b.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Bn.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Bn.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=b.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Bn,"$1"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||b.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,On.push(o)),s&&b.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}b.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=b.ajaxSettings.xhr(),b.support.cors=!!Rn&&"withCredentials"in Rn,Rn=b.support.ajax=!!Rn,Rn&&b.ajaxTransport(function(n){if(!n.crossDomain||b.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=b.noop,$n&&delete Pn[a]),i)4!==u.readyState&&u.abort();else{p={},s=u.status,l=u.getAllResponseHeaders(),"string"==typeof u.responseText&&(p.text=u.responseText);try{c=u.statusText}catch(f){c=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,l)},n.async?4===u.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},b(e).unload($n)),Pn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp("^(?:([+-])=|)("+x+")([a-z%]*)$","i"),Jn=/queueHooks$/,Gn=[nr],Qn={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=Yn.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(b.cssNumber[e]?"":"px"),"px"!==r&&s){s=b.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,b.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=b.now()}function Zn(e,t){b.each(t,function(t,n){var r=(Qn[t]||[]).concat(Qn["*"]),i=0,o=r.length;for(;o>i;i++)if(r[i].call(e,t,n))return})}function er(e,t,n){var r,i,o=0,a=Gn.length,s=b.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;for(;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:b.extend({},t),opts:b.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=b.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(tr(c,l.opts.specialEasing);a>o;o++)if(r=Gn[o].call(l,e,c,l.opts))return r;return Zn(l,c),b.isFunction(l.opts.start)&&l.opts.start.call(e,l),b.fx.timer(b.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function tr(e,t){var n,r,i,o,a;for(i in e)if(r=b.camelCase(i),o=t[r],n=e[i],b.isArray(n)&&(o=n[1],n=e[i]=n[0]),i!==r&&(e[r]=n,delete e[i]),a=b.cssHooks[r],a&&"expand"in a){n=a.expand(n),delete e[r];for(i in n)i in e||(e[i]=n[i],t[i]=o)}else t[r]=o}b.Animation=b.extend(er,{tweener:function(e,t){b.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,u,l,c,p,f=this,d=e.style,h={},g=[],m=e.nodeType&&nn(e);n.queue||(c=b._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,p=c.empty.fire,c.empty.fire=function(){c.unqueued||p()}),c.unqueued++,f.always(function(){f.always(function(){c.unqueued--,b.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===b.css(e,"display")&&"none"===b.css(e,"float")&&(b.support.inlineBlockNeedsLayout&&"inline"!==un(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",b.support.shrinkWrapBlocks||f.always(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(i in t)if(a=t[i],Vn.exec(a)){if(delete t[i],u=u||"toggle"===a,a===(m?"hide":"show"))continue;g.push(i)}if(o=g.length){s=b._data(e,"fxshow")||b._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?b(e).show():f.done(function(){b(e).hide()}),f.done(function(){var t;b._removeData(e,"fxshow");for(t in h)b.style(e,t,h[t])});for(i=0;o>i;i++)r=g[i],l=f.createTween(r,m?s[r]:0),h[r]=s[r]||b.style(e,r),r in s||(s[r]=l.start,m&&(l.end=l.start,l.start="width"===r||"height"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}b.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(b.cssNumber[n]?"":"px")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?b.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=b.css(e.elem,e.prop,""),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){b.fx.step[e.prop]?b.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[b.cssProps[e.prop]]||b.cssHooks[e.prop])?b.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},b.each(["toggle","show","hide"],function(e,t){var n=b.fn[t];b.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),b.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=b.isEmptyObject(e),o=b.speed(t,n,r),a=function(){var t=er(this,b.extend({},e),o);a.finish=function(){t.stop(!0)},(i||b._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=b.timers,a=b._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&b.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=b._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=b.timers,a=r?r.length:0;for(n.finish=!0,b.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}b.each({slideDown:ir("show"),slideUp:ir("hide"),slideToggle:ir("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){b.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),b.speed=function(e,t,n){var r=e&&"object"==typeof e?b.extend({},e):{complete:n||!n&&t||b.isFunction(e)&&e,duration:e,easing:n&&t||t&&!b.isFunction(t)&&t};return r.duration=b.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in b.fx.speeds?b.fx.speeds[r.duration]:b.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){b.isFunction(r.old)&&r.old.call(this),r.queue&&b.dequeue(this,r.queue)},r},b.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},b.timers=[],b.fx=rr.prototype.init,b.fx.tick=function(){var e,n=b.timers,r=0;for(Xn=b.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||b.fx.stop(),Xn=t},b.fx.timer=function(e){e()&&b.timers.push(e)&&b.fx.start()},b.fx.interval=13,b.fx.start=function(){Un||(Un=setInterval(b.fx.tick,b.fx.interval))},b.fx.stop=function(){clearInterval(Un),Un=null},b.fx.speeds={slow:600,fast:200,_default:400},b.fx.step={},b.expr&&b.expr.filters&&(b.expr.filters.animated=function(e){return b.grep(b.timers,function(t){return e===t.elem}).length}),b.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){b.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,b.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},b.offset={setOffset:function(e,t,n){var r=b.css(e,"position");"static"===r&&(e.style.position="relative");var i=b(e),o=i.offset(),a=b.css(e,"top"),s=b.css(e,"left"),u=("absolute"===r||"fixed"===r)&&b.inArray("auto",[a,s])>-1,l={},c={},p,f;u?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),b.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(l.top=t.top-o.top+p),null!=t.left&&(l.left=t.left-o.left+f),"using"in t?t.using.call(e,l):i.css(l)}},b.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===b.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),b.nodeName(e[0],"html")||(n=e.offset()),n.top+=b.css(e[0],"borderTopWidth",!0),n.left+=b.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-b.css(r,"marginTop",!0),left:t.left-n.left-b.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||o.documentElement;while(e&&!b.nodeName(e,"html")&&"static"===b.css(e,"position"))e=e.offsetParent;return e||o.documentElement})}}),b.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);b.fn[e]=function(i){return b.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?b(a).scrollLeft():o,r?o:b(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return b.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}b.each({Height:"height",Width:"width"},function(e,n){b.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){b.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return b.access(this,function(n,r,i){var o;return b.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?b.css(n,r,s):b.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=b,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return b})})(window); diff --git a/js/tests/vendor/qunit.css b/js/tests/vendor/qunit.css index b3e3d002d784e7a6b7efd9c264a0fe74db2b9b38..aa0445dd8ec38d2a095f0c470036b97d356bb523 100644 --- a/js/tests/vendor/qunit.css +++ b/js/tests/vendor/qunit.css @@ -229,4 +229,4 @@ #qunit-fixture { display:none; -} \ No newline at end of file +} diff --git a/js/tests/vendor/qunit.js b/js/tests/vendor/qunit.js index 46c95b298e8c8e498d5c112c0de1f75c3bb4c017..b332d7050159c6f33e64f135c511726454f9a9f7 100644 --- a/js/tests/vendor/qunit.js +++ b/js/tests/vendor/qunit.js @@ -1507,4 +1507,4 @@ QUnit.diff = (function() { }; })(); -})(this); \ No newline at end of file +})(this); diff --git a/js/tooltip.js b/js/tooltip.js new file mode 100644 index 0000000000000000000000000000000000000000..d95624bdc2959aa87066c104343da3a627c11ae5 --- /dev/null +++ b/js/tooltip.js @@ -0,0 +1,356 @@ +/* ======================================================================== + * 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. + * + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // TOOLTIP 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 + } + + Tooltip.prototype.init = function (type, element, options) { + this.enabled = true + this.type = type + this.$element = $(element) + this.options = this.getOptions(options) + + var triggers = this.options.trigger.split(' ') + + for (var i = triggers.length; i--;) { + var trigger = triggers[i] + + 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' + + 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)) + } + } + + this.options.selector ? + (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : + this.fixTitle() + } + + Tooltip.prototype.getDefaults = function () { + return Tooltip.DEFAULTS + } + + Tooltip.prototype.getOptions = function (options) { + options = $.extend({}, this.getDefaults(), this.$element.data(), options) + + if (options.delay && typeof options.delay == 'number') { + options.delay = { + show: options.delay + , hide: options.delay + } + } + + return options + } + + 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 + }) + + 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() + + clearTimeout(this.timeout) + + self.hoverState = 'in' + this.timeout = setTimeout(function () { + if (self.hoverState == 'in') self.show() + }, self.options.delay.show) + } + + 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) + + if (!self.options.delay || !self.options.delay.hide) return self.hide() + + self.hoverState = 'out' + this.timeout = setTimeout(function () { + if (self.hoverState == 'out') self.hide() + }, self.options.delay.hide) + } + + Tooltip.prototype.show = function () { + var e = $.Event('show.bs.'+ this.type) + + if (this.hasContent() && this.enabled) { + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + var $tip = this.tip() + + this.setContent() + + if (this.options.animation) $tip.addClass('fade') + + 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' }) + + this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) + + 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) + } + } + + Tooltip.prototype.applyPlacement = function(offset, placement) { + var replace + var $tip = this.tip() + var width = $tip[0].offsetWidth + var height = $tip[0].offsetHeight + + $tip + .offset(offset) + .addClass(placement) + .addClass('in') + + var actualWidth = $tip[0].offsetWidth + var actualHeight = $tip[0].offsetHeight + + if (placement == 'top' && actualHeight != height) { + replace = true + offset.top = offset.top + height - actualHeight + } + + if (placement == 'bottom' || placement == 'top') { + var delta = 0 + + if (offset.left < 0){ + delta = offset.left * -2 + offset.left = 0 + + $tip.offset(offset) + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + } + + this.replaceArrow(delta - width + actualWidth, actualWidth, 'left') + } else { + this.replaceArrow(actualHeight - height, actualHeight, 'top') + } + + if (replace) $tip.offset(offset) + } + + Tooltip.prototype.replaceArrow = function(delta, dimension, position) { + this.arrow().css(position, delta ? (50 * (1 - delta / dimension) + "%") : '') + } + + Tooltip.prototype.setContent = function () { + var $tip = this.tip() + var title = this.getTitle() + + $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) + + this.$element.trigger(e) + + if (e.isDefaultPrevented()) return + + $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() + }) + } + + $.support.transition && this.$tip.hasClass('fade') ? + removeWithAnimation() : + $tip.detach() + + this.$element.trigger('hidden.bs.' + this.type) + + return this + } + + 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', '') + } + } + + Tooltip.prototype.hasContent = function () { + return this.getTitle() + } + + 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()) + } + + Tooltip.prototype.getTitle = function () { + var title + var $e = this.$element + var o = this.options + + title = $e.attr('data-original-title') + || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) + + return title + } + + Tooltip.prototype.tip = function () { + return this.$tip = this.$tip || $(this.options.template) + } + + Tooltip.prototype.arrow =function(){ + return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow") + } + + Tooltip.prototype.validate = function () { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + Tooltip.prototype.enable = function () { + this.enabled = true + } + + Tooltip.prototype.disable = function () { + this.enabled = false + } + + Tooltip.prototype.toggleEnabled = function () { + this.enabled = !this.enabled + } + + 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) + } + + Tooltip.prototype.destroy = function () { + this.hide().$element.off('.' + this.type).removeData('bs.' + this.type) + } + + + // TOOLTIP PLUGIN DEFINITION + // ========================= + + var old = $.fn.tooltip + + $.fn.tooltip = function (option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.tooltip') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tooltip.Constructor = Tooltip + + + // TOOLTIP NO CONFLICT + // =================== + + $.fn.tooltip.noConflict = function () { + $.fn.tooltip = old + return this + } + +}(window.jQuery); diff --git a/js/transition.js b/js/transition.js new file mode 100644 index 0000000000000000000000000000000000000000..2ad53234a3f959bf17d03345cf414dcd02aac7ff --- /dev/null +++ b/js/transition.js @@ -0,0 +1,47 @@ +/* ======================================================================== + * Bootstrap: transition.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#transitions + * ======================================================================== + * 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. + * 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. + * ======================================================================== */ + + ++function ($) { "use strict"; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + } + + $(function () { + $.support.transition = transitionEnd() + }) + +}(window.jQuery); diff --git a/less/accordion.less b/less/accordion.less index d63523bc8c13992d943175fef2036356aa48db77..59765f15402f4d5abe097f5b318ef5d4f3b3de8e 100644 --- a/less/accordion.less +++ b/less/accordion.less @@ -5,14 +5,14 @@ // Parent container .accordion { - margin-bottom: @baseLineHeight; + margin-bottom: @line-height-computed; } // Group == heading + body .accordion-group { margin-bottom: 2px; border: 1px solid #e5e5e5; - .border-radius(@baseBorderRadius); + border-radius: @border-radius-base; } .accordion-heading { border-bottom: 0; diff --git a/less/alerts.less b/less/alerts.less index 0116b191b3b726587b2d3fd0822ad6a45ac7f312..24b79114372e2b0d76bd4ab2f9aa16f15cc10d63 100644 --- a/less/alerts.less +++ b/less/alerts.less @@ -7,68 +7,81 @@ // ------------------------- .alert { - padding: 8px 35px 8px 14px; - margin-bottom: @baseLineHeight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - background-color: @warningBackground; - border: 1px solid @warningBorder; - .border-radius(@baseBorderRadius); -} -.alert, -.alert h4 { - // Specified for the h4 to prevent conflicts of changing @headingsColor - color: @warningText; -} -.alert h4 { - margin: 0; -} + padding: 10px 35px 10px 15px; + margin-bottom: @line-height-computed; + color: @alert-text; + background-color: @alert-bg; + border: 1px solid @alert-border; + border-radius: @alert-border-radius; -// Adjust close link position -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: @baseLineHeight; -} + // Headings for larger alerts + h4 { + margin-top: 0; + // Specified for the h4 to prevent conflicts of changing @headingsColor + color: inherit; + } + // Match the hr to the border of the alert + hr { + border-top-color: darken(@alert-border, 5%); + } + // Provide class for links that match alerts + .alert-link { + font-weight: 500; + color: darken(@alert-text, 10%); + } + // Adjust close link position + .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; + } +} // Alternate styles // ------------------------- .alert-success { - background-color: @successBackground; - border-color: @successBorder; - color: @successText; + 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-success h4 { - color: @successText; -} -.alert-danger, -.alert-error { - background-color: @errorBackground; - border-color: @errorBorder; - color: @errorText; -} -.alert-danger h4, -.alert-error h4 { - color: @errorText; +.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-info { - background-color: @infoBackground; - border-color: @infoBorder; - color: @infoText; + 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-info h4 { - color: @infoText; -} - // Block alerts // ------------------------- .alert-block { - padding-top: 14px; - padding-bottom: 14px; + padding-top: 15px; + padding-bottom: 15px; } .alert-block > p, .alert-block > ul { diff --git a/less/badges.less b/less/badges.less new file mode 100644 index 0000000000000000000000000000000000000000..4750cfb75d9bbd7d7d7981bddd432ec29761fdcb --- /dev/null +++ b/less/badges.less @@ -0,0 +1,58 @@ +// +// Badges +// -------------------------------------------------- + + +// Base classes +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: @font-size-small; + font-weight: bold; + color: #fff; + line-height: 1; + vertical-align: middle; + white-space: nowrap; + text-align: center; + background-color: @gray-light; + border-radius: 10px; + + // Empty labels/badges collapse + &:empty { + display: none; + } +} + +// Hover state, but only for links +a.badge { + &:hover, + &:focus { + color: #fff; + text-decoration: none; + cursor: pointer; + } +} + +// Quick fix for labels/badges in buttons +.btn { + .badge { + position: relative; + top: -1px; + } +} +.btn-mini { + .badge { + top: 0; + } +} + +// Account for counters in navs +a.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: @link-color; + background-color: #fff; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} diff --git a/less/bootstrap.less b/less/bootstrap.less index b56327adceb9d17e8a50f71e882c4bef7921fd50..c73c85c385d9b7f0f2c2b904ef88ec9c58fc4177 100644 --- a/less/bootstrap.less +++ b/less/bootstrap.less @@ -1,46 +1,44 @@ /*! - * Bootstrap v2.3.1 + * Bootstrap v3.0.0 * - * Copyright 2012 Twitter, Inc + * 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 @twitter by @mdo and @fat. + * Designed and built with all the love in the world by @mdo and @fat. */ // Core variables and mixins -@import "variables.less"; // Modify this for custom colors, font-sizes, etc +@import "variables.less"; @import "mixins.less"; -// CSS Reset -@import "reset.less"; +// Reset +@import "normalize.less"; +@import "print.less"; -// Grid system and page structure +// Core CSS @import "scaffolding.less"; -@import "grid.less"; -@import "layouts.less"; - -// Base CSS @import "type.less"; @import "code.less"; -@import "forms.less"; +@import "grid.less"; + @import "tables.less"; +@import "forms.less"; +@import "buttons.less"; // Components: common -@import "sprites.less"; +@import "component-animations.less"; +@import "glyphicons.less"; @import "dropdowns.less"; +@import "list-group.less"; +@import "panels.less"; @import "wells.less"; -@import "component-animations.less"; @import "close.less"; -// Components: Buttons & Alerts -@import "buttons.less"; -@import "button-groups.less"; -@import "alerts.less"; // Note: alerts share common CSS with buttons and thus have styles in buttons.less - // Components: Nav @import "navs.less"; @import "navbar.less"; +@import "button-groups.less"; @import "breadcrumbs.less"; @import "pagination.less"; @import "pager.less"; @@ -51,13 +49,16 @@ @import "popovers.less"; // Components: Misc +@import "alerts.less"; @import "thumbnails.less"; @import "media.less"; -@import "labels-badges.less"; +@import "labels.less"; +@import "badges.less"; @import "progress-bars.less"; @import "accordion.less"; @import "carousel.less"; -@import "hero-unit.less"; +@import "jumbotron.less"; // Utility classes @import "utilities.less"; // Has to be last to override when necessary +@import "responsive-utilities.less"; diff --git a/less/breadcrumbs.less b/less/breadcrumbs.less index f753df6be8cd9d6fd94dcaa5b551541f2e8a0a22..2fe8217a36603a4fb6aed187c80419d62e1b99d0 100644 --- a/less/breadcrumbs.less +++ b/less/breadcrumbs.less @@ -5,20 +5,24 @@ .breadcrumb { padding: 8px 15px; - margin: 0 0 @baseLineHeight; + margin: 0 0 @line-height-computed; list-style: none; background-color: #f5f5f5; - .border-radius(@baseBorderRadius); + border-radius: @border-radius-base; > li { display: inline-block; - .ie7-inline-block(); - text-shadow: 0 1px 0 @white; - > .divider { + text-shadow: 0 1px 0 #fff; + &:after { + display: inline-block; + 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 + } } > .active { - color: @grayLight; + color: @gray-light; } } diff --git a/less/button-groups.less b/less/button-groups.less index 55cdc6033873f2eb3d8de17fcac6ae45a0880e30..f7934a328e8339894e1bc7cae7511d8028de679a 100644 --- a/less/button-groups.less +++ b/less/button-groups.less @@ -2,90 +2,82 @@ // Button groups // -------------------------------------------------- +// Button carets +.btn .caret { + border-top-color: @btn-default-color; +} +.dropup .btn .caret { + border-bottom-color: @btn-default-color; +} // Make the div behave like a button -.btn-group { +.btn-group, +.btn-group-vertical { position: relative; display: inline-block; - .ie7-inline-block(); - font-size: 0; // remove as part 1 of font-size inline-block hack vertical-align: middle; // match .btn alignment given font-size hack above - white-space: nowrap; // prevent buttons from wrapping when in tight spaces (e.g., the table on the tests page) - .ie7-restore-left-whitespace(); + > .btn { + position: relative; + float: left; + // Bring the "active" button to the front + &:hover, + &:active { + z-index: 2; + } + } } -// Space out series of button groups -.btn-group + .btn-group { - margin-left: 5px; +// Prevent double borders when buttons are next to each other +.btn-group .btn + .btn { + margin-left: -1px; } // Optional: Group multiple button groups together for a toolbar .btn-toolbar { - font-size: 0; // Hack to remove whitespace that results from using inline-block - margin-top: @baseLineHeight / 2; - margin-bottom: @baseLineHeight / 2; + .clearfix(); + + .btn-group { + float: left; + } + // Space out series of button groups > .btn + .btn, > .btn-group + .btn, - > .btn + .btn-group { + > .btn + .btn-group, + > .btn-group + .btn-group { margin-left: 5px; } } -// Float them, remove border radius, then re-add to first and last elements -.btn-group > .btn { - position: relative; - .border-radius(0); -} -.btn-group > .btn + .btn { - margin-left: -1px; -} -.btn-group > .btn, -.btn-group > .dropdown-menu, -.btn-group > .popover { - font-size: @baseFontSize; // redeclare as part 2 of font-size inline-block hack -} - -// Reset fonts for other sizes -.btn-group > .btn-mini { - font-size: @fontSizeMini; -} -.btn-group > .btn-small { - font-size: @fontSizeSmall; -} -.btn-group > .btn-large { - font-size: @fontSizeLarge; +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; } // Set corners individual because sometimes a single button can be in a .btn-group and we need :first-child and :last-child to both match .btn-group > .btn:first-child { margin-left: 0; - .border-top-left-radius(@baseBorderRadius); - .border-bottom-left-radius(@baseBorderRadius); + &:not(:last-child):not(.dropdown-toggle) { + .border-right-radius(0); + } } // Need .dropdown-toggle since :last-child doesn't apply given a .dropdown-menu immediately after it -.btn-group > .btn:last-child, -.btn-group > .dropdown-toggle { - .border-top-right-radius(@baseBorderRadius); - .border-bottom-right-radius(@baseBorderRadius); +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + .border-left-radius(0); } -// Reset corners for large buttons -.btn-group > .btn.large:first-child { - margin-left: 0; - .border-top-left-radius(@borderRadiusLarge); - .border-bottom-left-radius(@borderRadiusLarge); + +// Custom edits for including btn-groups within btn-groups (useful for including dropdown buttons within a btn-group) +.btn-group > .btn-group { + float: left; } -.btn-group > .btn.large:last-child, -.btn-group > .large.dropdown-toggle { - .border-top-right-radius(@borderRadiusLarge); - .border-bottom-right-radius(@borderRadiusLarge); +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; } - -// On hover/focus/active, bring the proper btn to front -.btn-group > .btn:hover, -.btn-group > .btn:focus, -.btn-group > .btn:active, -.btn-group > .btn.active { - z-index: 2; +.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:last-child > .btn:first-child { + .border-left-radius(0); } // On active and open, don't show outline @@ -103,78 +95,30 @@ .btn-group > .btn + .dropdown-toggle { padding-left: 8px; padding-right: 8px; - .box-shadow(~"inset 1px 0 0 rgba(255,255,255,.125), inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - *padding-top: 5px; - *padding-bottom: 5px; } .btn-group > .btn-mini + .dropdown-toggle { padding-left: 5px; padding-right: 5px; - *padding-top: 2px; - *padding-bottom: 2px; -} -.btn-group > .btn-small + .dropdown-toggle { - *padding-top: 5px; - *padding-bottom: 4px; } .btn-group > .btn-large + .dropdown-toggle { padding-left: 12px; padding-right: 12px; - *padding-top: 7px; - *padding-bottom: 7px; } -.btn-group.open { - - // The clickable button for toggling the menu - // Remove the gradient and set the same inset shadow as the :active state - .dropdown-toggle { - background-image: none; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); - } - - // Keep the hover's background when dropdown is open - .btn.dropdown-toggle { - background-color: @btnBackgroundHighlight; - } - .btn-primary.dropdown-toggle { - background-color: @btnPrimaryBackgroundHighlight; - } - .btn-warning.dropdown-toggle { - background-color: @btnWarningBackgroundHighlight; - } - .btn-danger.dropdown-toggle { - background-color: @btnDangerBackgroundHighlight; - } - .btn-success.dropdown-toggle { - background-color: @btnSuccessBackgroundHighlight; - } - .btn-info.dropdown-toggle { - background-color: @btnInfoBackgroundHighlight; - } - .btn-inverse.dropdown-toggle { - background-color: @btnInverseBackgroundHighlight; - } +// The clickable button for toggling the menu +// Remove the gradient and set the same inset shadow as the :active state +.btn-group.open .dropdown-toggle { + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); } // Reposition the caret .btn .caret { - margin-top: 8px; margin-left: 0; } // Carets in other button sizes .btn-large .caret { - margin-top: 6px; -} -.btn-large .caret { - border-left-width: 5px; - border-right-width: 5px; - border-top-width: 5px; -} -.btn-mini .caret, -.btn-small .caret { - margin-top: 8px; + border-width: 5px; } // Upside down carets for .dropup .dropup .btn-large .caret { @@ -182,48 +126,45 @@ } - -// Account for other colors -.btn-primary, -.btn-warning, -.btn-danger, -.btn-info, -.btn-success, -.btn-inverse { - .caret { - border-top-color: @white; - border-bottom-color: @white; - } -} - - - // Vertical button groups // ---------------------- -.btn-group-vertical { - display: inline-block; // makes buttons only take up the width they need - .ie7-inline-block(); -} .btn-group-vertical > .btn { display: block; float: none; + width: 100%; max-width: 100%; - .border-radius(0); + + .btn { + margin-top: -1px; + } } -.btn-group-vertical > .btn + .btn { - margin-left: 0; - margin-top: -1px; +.btn-group-vertical .btn:not(:first-child):not(:last-child) { + border-radius: 0; } -.btn-group-vertical > .btn:first-child { - .border-radius(@baseBorderRadius @baseBorderRadius 0 0); +.btn-group-vertical .btn:first-child { + .border-bottom-radius(0); } -.btn-group-vertical > .btn:last-child { - .border-radius(0 0 @baseBorderRadius @baseBorderRadius); +.btn-group-vertical .btn:last-child { + .border-top-radius(0); } -.btn-group-vertical > .btn-large:first-child { - .border-radius(@borderRadiusLarge @borderRadiusLarge 0 0); + + +// Justified button groups +// ---------------------- + +.btn-group-justified { + display: table; + width: 100%; + .btn { + float: none; + display: table-cell; + width: 1%; + } } -.btn-group-vertical > .btn-large:last-child { - .border-radius(0 0 @borderRadiusLarge @borderRadiusLarge); + + +// Checkbox and radio options +.btn-group[data-toggle="buttons-radio"] > .btn > input[type="radio"], +.btn-group[data-toggle="buttons-checkbox"] > .btn > input[type="checkbox"] { + display: none; } diff --git a/less/buttons.less b/less/buttons.less index 4cd4d862b3813ad9b758e3e631bb5a03480b98a6..6280d3448a2f86e9d90f61dbe8ab459775b89264 100644 --- a/less/buttons.less +++ b/less/buttons.less @@ -6,223 +6,155 @@ // Base styles // -------------------------------------------------- -// Core +// Core styles .btn { display: inline-block; - .ie7-inline-block(); - padding: 4px 12px; + padding: @padding-base-vertical @padding-base-horizontal; margin-bottom: 0; // For input.btn - font-size: @baseFontSize; - line-height: @baseLineHeight; + font-size: @font-size-base; + font-weight: 500; + line-height: @line-height-base; text-align: center; vertical-align: middle; cursor: pointer; - .buttonBackground(@btnBackground, @btnBackgroundHighlight, @grayDark, 0 1px 1px rgba(255,255,255,.75)); - border: 1px solid @btnBorder; - *border: 0; // Remove the border to prevent IE7's black border on input:focus - border-bottom-color: darken(@btnBorder, 10%); - .border-radius(@baseBorderRadius); - .ie7-restore-left-whitespace(); // Give IE7 some love - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05)"); - - // Hover/focus state - &:hover, - &:focus { - color: @grayDark; - text-decoration: none; - background-position: 0 -15px; + border: 1px solid transparent; + border-radius: @border-radius-base; + white-space: nowrap; - // transition is only when going to hover/focus, otherwise the background - // behind the gradient (there for IE<=9 fallback) gets mismatched - .transition(background-position .1s linear); + &:focus { + .tab-focus(); } - // Focus state for keyboard and accessibility + &:hover, &:focus { - .tab-focus(); + color: #fff; + text-decoration: none; } - // Active state - &.active, - &:active { - background-image: none; + &:active, + &.active { outline: 0; - .box-shadow(~"inset 0 2px 4px rgba(0,0,0,.15), 0 1px 2px rgba(0,0,0,.05)"); + background-image: none; + .box-shadow(inset 0 3px 5px rgba(0,0,0,.125)); } - // Disabled state &.disabled, - &[disabled] { + &[disabled], + fieldset[disabled] & { cursor: default; - background-image: none; - .opacity(65); + pointer-events: none; // Future-proof disabling of clicks + .opacity(.65); .box-shadow(none); } } - -// Button Sizes -// -------------------------------------------------- - -// Large -.btn-large { - padding: @paddingLarge; - font-size: @fontSizeLarge; - .border-radius(@borderRadiusLarge); -} -.btn-large [class^="icon-"], -.btn-large [class*=" icon-"] { - margin-top: 4px; -} - -// Small -.btn-small { - padding: @paddingSmall; - font-size: @fontSizeSmall; - .border-radius(@borderRadiusSmall); -} -.btn-small [class^="icon-"], -.btn-small [class*=" icon-"] { - margin-top: 0; -} -.btn-mini [class^="icon-"], -.btn-mini [class*=" icon-"] { - margin-top: -1px; -} - -// Mini -.btn-mini { - padding: @paddingMini; - font-size: @fontSizeMini; - .border-radius(@borderRadiusSmall); -} - - -// Block button -// ------------------------- - -.btn-block { - display: block; - width: 100%; - padding-left: 0; - padding-right: 0; - .box-sizing(border-box); -} - -// Vertically space out multiple block buttons -.btn-block + .btn-block { - margin-top: 5px; -} - -// Specificity overrides -input[type="submit"], -input[type="reset"], -input[type="button"] { - &.btn-block { - width: 100%; - } -} - - - // Alternate buttons // -------------------------------------------------- -// Provide *some* extra contrast for those who can get it -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active, -.btn-inverse.active { - color: rgba(255,255,255,.75); +.btn-default { + .btn-pseudo-states(@btn-default-color, @btn-default-bg, @btn-default-border); } - -// Set the backgrounds -// ------------------------- .btn-primary { - .buttonBackground(@btnPrimaryBackground, @btnPrimaryBackgroundHighlight); + .btn-pseudo-states(@btn-primary-color, @btn-primary-bg, @btn-primary-border); } -// Warning appears are orange +// Warning appears as orange .btn-warning { - .buttonBackground(@btnWarningBackground, @btnWarningBackgroundHighlight); + .btn-pseudo-states(@btn-warning-color, @btn-warning-bg, @btn-warning-border); } // Danger and error appear as red .btn-danger { - .buttonBackground(@btnDangerBackground, @btnDangerBackgroundHighlight); + .btn-pseudo-states(@btn-danger-color, @btn-danger-bg, @btn-danger-border); } // Success appears as green .btn-success { - .buttonBackground(@btnSuccessBackground, @btnSuccessBackgroundHighlight); + .btn-pseudo-states(@btn-success-color, @btn-success-bg, @btn-success-border); } -// Info appears as a neutral blue +// Info appears as blue-green .btn-info { - .buttonBackground(@btnInfoBackground, @btnInfoBackgroundHighlight); -} -// Inverse appears as dark gray -.btn-inverse { - .buttonBackground(@btnInverseBackground, @btnInverseBackgroundHighlight); -} - - -// Cross-browser Jank -// -------------------------------------------------- - -button.btn, -input[type="submit"].btn { - - // Firefox 3.6 only I believe - &::-moz-focus-inner { - padding: 0; - border: 0; - } - - // IE7 has some default padding on button controls - *padding-top: 3px; - *padding-bottom: 3px; - - &.btn-large { - *padding-top: 7px; - *padding-bottom: 7px; - } - &.btn-small { - *padding-top: 3px; - *padding-bottom: 3px; - } - &.btn-mini { - *padding-top: 1px; - *padding-bottom: 1px; - } + .btn-pseudo-states(@btn-info-color, @btn-info-bg, @btn-info-border); } // Link buttons -// -------------------------------------------------- +// ------------------------- // Make a button look and behave like a link .btn-link, .btn-link:active, -.btn-link[disabled] { +.btn-link[disabled], +fieldset[disabled] .btn-link { background-color: transparent; background-image: none; .box-shadow(none); } -.btn-link { +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { border-color: transparent; +} +.btn-link { + color: @link-color; + font-weight: normal; cursor: pointer; - color: @linkColor; - .border-radius(0); + border-radius: 0; } .btn-link:hover, .btn-link:focus { - color: @linkColorHover; + color: @link-hover-color; text-decoration: underline; background-color: transparent; } -.btn-link[disabled]:hover, -.btn-link[disabled]:focus { - color: @grayDark; - text-decoration: none; +.btn-link { + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus { + color: @gray-dark; + text-decoration: none; + } + } +} + + +// Button Sizes +// -------------------------------------------------- + +.btn-large { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; + border-radius: @border-radius-large; +} +.btn-small { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + line-height: 1.5; // ensure proper height of button next to small input + border-radius: @border-radius-small; +} + + +// Block button +// -------------------------------------------------- + +.btn-block { + display: block; + width: 100%; + padding-left: 0; + padding-right: 0; +} + +// Vertically space out multiple block buttons +.btn-block + .btn-block { + margin-top: 5px; +} + +// Specificity overrides +input[type="submit"], +input[type="reset"], +input[type="button"] { + &.btn-block { + width: 100%; + } } diff --git a/less/carousel.less b/less/carousel.less index 55bc050144d791e2452acb6a6e21f297bfa802fa..31f9b8aff1be3009f6f4a3c5bd991062edcd0efb 100644 --- a/less/carousel.less +++ b/less/carousel.less @@ -3,18 +3,19 @@ // -------------------------------------------------- +// Wrapper for the slide container and indicators .carousel { position: relative; - margin-bottom: @baseLineHeight; - line-height: 1; } +// Wrap all slides, but only show the active one .carousel-inner { + position: relative; overflow: hidden; width: 100%; - position: relative; } +// Immediate parent of all slides .carousel-inner { > .item { @@ -70,20 +71,15 @@ .carousel-control { position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: @white; + top: 0; + left: 0; + bottom: 0; + width: 15%; + .opacity(.5); + font-size: 20px; + color: #fff; text-align: center; - background: @grayDarker; - border: 3px solid @white; - .border-radius(23px); - .opacity(50); + text-shadow: 0 1px 2px rgba(0,0,0,.6); // we can't have this transition here // because webkit cancels the carousel @@ -92,67 +88,104 @@ // ;_; // .transition(opacity .2s linear); - // Reposition the right one + // Set gradients for backgrounds + &.left { + #gradient > .horizontal(@start-color: rgba(0,0,0,.5); @end-color: rgba(0,0,0,.0001)); + background-color: transparent; + } &.right { left: auto; - right: 15px; + right: 0; + #gradient > .horizontal(@start-color: rgba(0,0,0,.0001); @end-color: rgba(0,0,0,.5)); + background-color: transparent; } // Hover/focus state &:hover, &:focus { - color: @white; + color: #fff; text-decoration: none; - .opacity(90); + .opacity(.9); + } + + // Toggles + .glyphicon { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; } } -// Carousel indicator pips +// Optional indicator pips // ----------------------------- .carousel-indicators { position: absolute; - top: 15px; - right: 15px; - z-index: 5; - margin: 0; + bottom: 20px; + left: 50%; + z-index: 15; + width: 100px; + margin: 0 0 0 -50px; list-style: none; + text-align: center; li { - display: block; - float: left; - width: 10px; - height: 10px; - margin-left: 5px; + display: inline-block; + width: 8px; + height: 8px; + margin-left: 0; + margin-right: 0; text-indent: -999px; - background-color: #ccc; - background-color: rgba(255,255,255,.25); + border: 1px solid #fff; border-radius: 5px; + cursor: pointer; } .active { background-color: #fff; } } -// Caption for text below images +// Optional captions // ----------------------------- - +// Hidden by default for smaller viewports .carousel-caption { position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 15px; - background: @grayDark; - background: rgba(0,0,0,.75); -} -.carousel-caption h4, -.carousel-caption p { - color: @white; - line-height: @baseLineHeight; -} -.carousel-caption h4 { - margin: 0 0 5px; + left: 15%; + right: 15%; + bottom: 20px; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0,0,0,.6); + & .btn { + text-shadow: none; // No shadow for button elements in carousel-caption + } } -.carousel-caption p { - margin-bottom: 0; + + +// Scale up controls for tablets and up +@media screen and (min-width: @screen-tablet) { + + // Scale up the controls a smidge + .carousel-control .glyphicon { + width: 30px; + height: 30px; + margin-top: -15px; + margin-left: -15px; + font-size: 30px; + } + + // Show and left align the captions + .carousel-caption { + left: 20%; + right: 20%; + padding-bottom: 30px; + } } diff --git a/less/close.less b/less/close.less index 4c626bda6cc6567905c2190987e419c272788cc4..e879da4d62d2a4df21ba9b7eaa24f1a44600247b 100644 --- a/less/close.less +++ b/less/close.less @@ -5,18 +5,19 @@ .close { float: right; - font-size: 20px; + font-size: (@font-size-base * 1.5); font-weight: bold; - line-height: @baseLineHeight; - color: @black; + line-height: 1; + color: #000; text-shadow: 0 1px 0 rgba(255,255,255,1); - .opacity(20); + .opacity(.2); + &:hover, &:focus { - color: @black; + color: #000; text-decoration: none; cursor: pointer; - .opacity(40); + .opacity(.5); } } @@ -29,4 +30,4 @@ button.close { background: transparent; border: 0; -webkit-appearance: none; -} \ No newline at end of file +} diff --git a/less/code.less b/less/code.less index 266a926e73da78177bd552439b0976025d45aaf6..f1bc0a0cdbbd6ae14c6108e5ae66dcd1cd4bfd72 100644 --- a/less/code.less +++ b/less/code.less @@ -7,40 +7,40 @@ code, pre { padding: 0 3px 2px; - #font > #family > .monospace; - font-size: @baseFontSize - 2; - color: @grayDark; - .border-radius(3px); + font-family: @font-family-monospace; + font-size: (@font-size-base - 2); + color: @gray-dark; + border-radius: 4px; } // Inline code code { padding: 2px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; white-space: nowrap; } // Blocks of code pre { display: block; - padding: (@baseLineHeight - 1) / 2; - margin: 0 0 @baseLineHeight / 2; - font-size: @baseFontSize - 1; // 14px to 13px - line-height: @baseLineHeight; + padding: ((@line-height-computed - 1) / 2); + margin: 0 0 (@line-height-computed / 2); + font-size: (@font-size-base - 1); // 14px to 13px + line-height: @line-height-base; word-break: break-all; word-wrap: break-word; white-space: pre; white-space: pre-wrap; background-color: #f5f5f5; - border: 1px solid #ccc; // fallback for IE7-8 + border: 1px solid #ccc; // IE8 fallback border: 1px solid rgba(0,0,0,.15); - .border-radius(@baseBorderRadius); + border-radius: @border-radius-base; // Make prettyprint styles more spaced out for readability &.prettyprint { - margin-bottom: @baseLineHeight; + margin-bottom: @line-height-computed; } // Account for some code outputs that place code tags in pre tags @@ -58,4 +58,4 @@ pre { .pre-scrollable { max-height: 340px; overflow-y: scroll; -} \ No newline at end of file +} diff --git a/less/component-animations.less b/less/component-animations.less index d614263a76a75f04614c9205a74f373f74012a41..50e5e45c128cad8773fff72f822f540582342e14 100644 --- a/less/component-animations.less +++ b/less/component-animations.less @@ -16,6 +16,7 @@ height: 0; overflow: hidden; .transition(height .35s ease); + &.in { height: auto; } diff --git a/less/dropdowns.less b/less/dropdowns.less index bbfe3fd3e3a9f0d203f02a3fe6739de67679531a..3e01527882b9ae9770c13655b3b5d1d0bfa2a835 100644 --- a/less/dropdowns.less +++ b/less/dropdowns.less @@ -3,62 +3,39 @@ // -------------------------------------------------- -// Use the .menu class on any <li> element within the topbar or ul.tabs and you'll get some superfancy dropdowns -.dropup, -.dropdown { - position: relative; -} -.dropdown-toggle { - // The caret makes the toggle a bit too tall in IE7 - *margin-bottom: -3px; -} -.dropdown-toggle:active, -.open .dropdown-toggle { - outline: 0; -} - // Dropdown arrow/caret // -------------------- .caret { display: inline-block; width: 0; height: 0; - vertical-align: top; - border-top: 4px solid @black; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid #000; border-right: 4px solid transparent; border-left: 4px solid transparent; content: ""; } -// Place the caret -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} - // The dropdown menu (ul) // ---------------------- .dropdown-menu { position: absolute; top: 100%; left: 0; - z-index: @zindexDropdown; + z-index: @zindex-dropdown; display: none; // none by default, but block on "open" of the menu float: left; min-width: 160px; padding: 5px 0; margin: 2px 0 0; // override default ul list-style: none; - background-color: @dropdownBackground; - border: 1px solid #ccc; // Fallback for IE7-8 - border: 1px solid @dropdownBorder; - *border-right-width: 2px; - *border-bottom-width: 2px; - .border-radius(6px); - .box-shadow(0 5px 10px rgba(0,0,0,.2)); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; + background-color: @dropdown-bg; + border: 1px solid #ccc; // IE8 fallback + border: 1px solid @dropdown-border; + border-radius: @border-radius-base; + .box-shadow(0 6px 12px rgba(0,0,0,.175)); + .background-clip(padding-box); // Aligns the dropdown menu to right &.pull-right { @@ -68,7 +45,7 @@ // Dividers (basically an hr) within the dropdown .divider { - .nav-divider(@dropdownDividerTop, @dropdownDividerBottom); + .nav-divider(@dropdown-divider-top, @dropdown-divider-bottom); } // Links within the dropdown menu @@ -77,9 +54,9 @@ padding: 3px 20px; clear: both; font-weight: normal; - line-height: @baseLineHeight; - color: @dropdownLinkColor; - white-space: nowrap; + line-height: @line-height-base; + color: @dropdown-link-color; + white-space: nowrap; // prevent links from randomly breaking onto new lines } } @@ -90,8 +67,8 @@ .dropdown-submenu:hover > a, .dropdown-submenu:focus > a { text-decoration: none; - color: @dropdownLinkColorHover; - #gradient > .vertical(@dropdownLinkBackgroundHover, darken(@dropdownLinkBackgroundHover, 5%)); + color: @dropdown-link-hover-color; + #gradient > .vertical(@start-color: @dropdown-link-hover-bg; @end-color: darken(@dropdown-link-hover-bg, 5%)); } // Active state @@ -99,10 +76,10 @@ .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { - color: @dropdownLinkColorActive; + color: @dropdown-link-active-color; text-decoration: none; outline: 0; - #gradient > .vertical(@dropdownLinkBackgroundActive, darken(@dropdownLinkBackgroundActive, 5%)); + #gradient > .vertical(@start-color: @dropdown-link-active-bg; @end-color: darken(@dropdown-link-active-bg, 5%)); } // Disabled state @@ -111,7 +88,7 @@ .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { - color: @grayLight; + color: @gray-light; } // Nuke hover/focus effects .dropdown-menu > .disabled > a:hover, @@ -126,13 +103,27 @@ // Open state for the dropdown // --------------------------- .open { - // IE7's z-index only goes to the nearest positioned ancestor, which would - // make the menu appear below buttons that appeared later on the page - *z-index: @zindexDropdown; - - & > .dropdown-menu { + // Show the menu + > .dropdown-menu { display: block; } + + // Remove the outline when :focus is triggered + > a { + outline: 0; + } +} + + +// Backdrop to catch body clicks on mobile, etc. +// --------------------------- +.dropdown-backdrop { + position: fixed; + left: 0; + right: 0; + bottom: 0; + top: 0; + z-index: @zindex-dropdown - 10; } // Right aligned dropdowns @@ -151,7 +142,7 @@ // Reverse the caret .caret { border-top: 0; - border-bottom: 4px solid @black; + border-bottom: 4px solid #000; content: ""; } // Different positioning for bottom up menu @@ -173,7 +164,7 @@ left: 100%; margin-top: -6px; margin-left: -1px; - .border-radius(0 6px 6px 6px); + border-top-left-radius: 0; // Nuke the closest corner as appropriate } .dropdown-submenu:hover > .dropdown-menu { display: block; @@ -185,7 +176,7 @@ bottom: 0; margin-top: 0; margin-bottom: -2px; - .border-radius(5px 5px 5px 0); + border-bottom-left-radius: 0; // Nuke the closest corner as appropriate } // Caret to indicate there is a submenu @@ -198,12 +189,12 @@ border-color: transparent; border-style: solid; border-width: 5px 0 5px 5px; - border-left-color: darken(@dropdownBackground, 20%); + border-left-color: darken(@dropdown-bg, 20%); margin-top: 5px; margin-right: -10px; } .dropdown-submenu:hover > a:after { - border-left-color: @dropdownLinkColorHover; + border-left-color: @dropdown-link-hover-color; } // Left aligned submenus @@ -216,12 +207,12 @@ > .dropdown-menu { left: -100%; margin-left: 10px; - .border-radius(6px 0 6px 6px); + border-top-right-radius: 0; // Remove the rounded corner here } } // Tweak nav headers -// ----------------- +// --------------------------- // Increase padding from 15px to 20px on sides .dropdown .dropdown-menu .nav-header { padding-left: 20px; @@ -229,9 +220,7 @@ } // Typeahead -// --------- +// --------------------------- .typeahead { z-index: 1051; - margin-top: 2px; // give it some space to breathe - .border-radius(@baseBorderRadius); } diff --git a/less/forms.less b/less/forms.less index 06767bdd3ea35771ac6de761ccd03e3d8d672f1d..609580928f2ff310131e600e0a17b7b62344dc47 100644 --- a/less/forms.less +++ b/less/forms.less @@ -3,12 +3,11 @@ // -------------------------------------------------- -// GENERAL STYLES -// -------------- +// Non-controls +// ------------------------- -// Make all forms have space below them form { - margin: 0 0 @baseLineHeight; + margin: 0; } fieldset { @@ -17,44 +16,22 @@ fieldset { border: 0; } -// Groups of fields with labels on top (legends) legend { display: block; width: 100%; padding: 0; - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; - line-height: @baseLineHeight * 2; - color: @grayDark; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); + line-height: inherit; + color: @gray-dark; border: 0; border-bottom: 1px solid #e5e5e5; - - // Small - small { - font-size: @baseLineHeight * .75; - color: @grayLight; - } -} - -// Set font for forms -label, -input, -button, -select, -textarea { - #font > .shorthand(@baseFontSize,normal,@baseLineHeight); // Set size, weight, line-height here -} -input, -button, -select, -textarea { - font-family: @baseFontFamily; // And only set font-family here for those that need it (note the missing label element) } -// Identify controls by their labels label { - display: block; + display: inline-block; margin-bottom: 5px; + font-weight: bold; } // Form controls @@ -76,68 +53,44 @@ input[type="email"], input[type="url"], input[type="search"], input[type="tel"], -input[type="color"], -.uneditable-input { - display: inline-block; - height: @baseLineHeight; - padding: 4px 6px; - margin-bottom: @baseLineHeight / 2; - font-size: @baseFontSize; - line-height: @baseLineHeight; +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) + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + line-height: @line-height-base; color: @gray; - .border-radius(@inputBorderRadius); vertical-align: middle; -} - -// Reset appearance properties for textual inputs and textarea -// Declare width for legacy (can't be on input[type=*] selectors or it's too specific) -input, -textarea, -.uneditable-input { - width: 206px; // plus 12px padding and 2px border -} -// Reset height since textareas have rows -textarea { - height: auto; -} -// Everything else -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"], -.uneditable-input { - background-color: @inputBackground; - border: 1px solid @inputBorder; + background-color: @input-bg; + border: 1px solid @input-border; + border-radius: @input-border-radius; .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); - .transition(~"border linear .2s, box-shadow linear .2s"); + .transition(~"border-color ease-in-out .15s, box-shadow ease-in-out .15s"); - // Focus state &:focus { border-color: rgba(82,168,236,.8); outline: 0; - outline: thin dotted \9; /* IE6-9 */ .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6)"); } + + // Disabled and read-only inputs + // Note: HTML5 says that inputs under a fieldset > legend:first-child won't be + // disabled if the fieldset is disabled. Due to implementation difficulty, + // we don't honor that edge case; we style them as disabled anyway. + &[disabled], + &[readonly], + fieldset[disabled] & { + cursor: not-allowed; + background-color: @input-bg-disabled; + } } -// Position radios and checkboxes better -input[type="radio"], -input[type="checkbox"] { - margin: 4px 0 0; - *margin-top: 0; /* IE7 */ - margin-top: 1px \9; /* IE8-9 */ - line-height: normal; +// Reset appearance properties for textual inputs and textarea +// Can't be on input[type=*] selectors or it's too specific +input, +select, +textarea { + width: 100%; } // Reset width of input images, buttons, radios, checkboxes @@ -151,19 +104,29 @@ input[type="checkbox"] { width: auto; // Override of generic input selector } +// Override content-box in Normalize (* isn't specific enough) +input[type="search"] { + .box-sizing(border-box); +} + +// Reset height since textareas have rows +textarea { + height: auto; +} + +// Position radios and checkboxes better +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; /* IE8-9 */ + line-height: normal; +} + // Set the height of select and file controls to match text inputs select, input[type="file"] { - height: @inputHeight; /* In IE7, the height of the select element cannot be changed by height, only font-size */ - *margin-top: 4px; /* For IE7, add top margin to align select with labels */ - line-height: @inputHeight; -} - -// Make select elements obey height by applying a border -select { - width: 220px; // default input width + 10px of padding that doesn't get applied - border: 1px solid @inputBorder; - background-color: @inputBackground; // Chrome on Linux and Mobile Safari need background-color + 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; } // Make multiple select elements height not fixed @@ -172,8 +135,14 @@ select[size] { height: auto; } +// Fix optgroup Firefox bug per https://github.com/twitter/bootstrap/issues/7611 +select optgroup { + font-size: inherit; + font-style: inherit; + font-family: inherit; +} + // Focus for select, file, radio, and checkbox -select:focus, input[type="file"]:focus, input[type="radio"]:focus, input[type="checkbox"]:focus { @@ -181,32 +150,6 @@ input[type="checkbox"]:focus { } -// Uneditable inputs -// ------------------------- - -// Make uneditable inputs look inactive -.uneditable-input, -.uneditable-textarea { - color: @grayLight; - background-color: darken(@inputBackground, 1%); - border-color: @inputBorder; - .box-shadow(inset 0 1px 2px rgba(0,0,0,.025)); - cursor: not-allowed; -} - -// For text that needs to appear as an input but should not be an input -.uneditable-input { - overflow: hidden; // prevent text from wrapping, but still cut it off like an input does - white-space: nowrap; -} - -// Make uneditable textareas behave like a textarea -.uneditable-textarea { - width: auto; - height: auto; -} - - // Placeholder // ------------------------- @@ -223,32 +166,53 @@ textarea { // Indent the labels to position radios/checkboxes as hanging .radio, .checkbox { - min-height: @baseLineHeight; // clear the floating input if there is no label text + display: block; + min-height: @line-height-computed; // clear the floating input if there is no label text + margin-top: 10px; + margin-bottom: 10px; padding-left: 20px; + vertical-align: middle; + label { + display: inline; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; + } } .radio input[type="radio"], -.checkbox input[type="checkbox"] { +.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; // 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 collaspes } +*/ // Radios and checkboxes on same line -// TODO v3: Convert .inline to .control-inline -.radio.inline, -.checkbox.inline { +.radio-inline, +.checkbox-inline { display: inline-block; - padding-top: 5px; +// padding-top: 5px; + padding-left: 20px; margin-bottom: 0; vertical-align: middle; + font-weight: normal; + cursor: pointer; } -.radio.inline + .radio.inline, -.checkbox.inline + .checkbox.inline { +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; margin-left: 10px; // space out consecutive inline controls } @@ -257,434 +221,212 @@ textarea { // INPUT SIZES // ----------- -// General classes for quick sizes -.input-mini { width: 60px; } -.input-small { width: 90px; } -.input-medium { width: 150px; } -.input-large { width: 210px; } -.input-xlarge { width: 270px; } -.input-xxlarge { width: 530px; } - -// Grid style input sizes -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input[class*="span"], -// Redeclare since the fluid row class is more specific -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"] { - float: none; - margin-left: 0; -} -// Ensure input-prepend/append never wraps -.input-append input[class*="span"], -.input-append .uneditable-input[class*="span"], -.input-prepend input[class*="span"], -.input-prepend .uneditable-input[class*="span"], -.row-fluid input[class*="span"], -.row-fluid select[class*="span"], -.row-fluid textarea[class*="span"], -.row-fluid .uneditable-input[class*="span"], -.row-fluid .input-prepend [class*="span"], -.row-fluid .input-append [class*="span"] { - display: inline-block; -} - - - -// GRID SIZING FOR INPUTS -// ---------------------- - -// Grid sizes -#grid > .input(@gridColumnWidth, @gridGutterWidth); - -// Control row for multiple inputs per line -.controls-row { - .clearfix(); // Clear the float from controls -} - -// Float to collapse white-space for proper grid alignment -.controls-row [class*="span"], -// Redeclare the fluid grid collapse since we undo the float for inputs -.row-fluid .controls-row [class*="span"] { - float: left; -} -// Explicity set top padding on all checkboxes/radios, not just first-child -.controls-row .checkbox[class*="span"], -.controls-row .radio[class*="span"] { - padding-top: 5px; -} - - - - -// DISABLED STATE -// -------------- - -// Disabled and read-only inputs -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - cursor: not-allowed; - background-color: @inputDisabledBackground; -} -// Explicitly reset the colors here -input[type="radio"][disabled], -input[type="checkbox"][disabled], -input[type="radio"][readonly], -input[type="checkbox"][readonly] { - background-color: transparent; +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"] { + &.input-large { + min-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; + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + border-radius: @border-radius-small; + } } - // FORM FIELD FEEDBACK STATES // -------------------------- // Warning -.control-group.warning { - .formFieldState(@warningText, @warningText, @warningBackground); +.has-warning { + .form-field-validation(@state-warning-text, @state-warning-text, @state-warning-bg); } // Error -.control-group.error { - .formFieldState(@errorText, @errorText, @errorBackground); +.has-error { + .form-field-validation(@state-danger-text, @state-danger-text, @state-danger-bg); } // Success -.control-group.success { - .formFieldState(@successText, @successText, @successBackground); -} -// Success -.control-group.info { - .formFieldState(@infoText, @infoText, @infoBackground); -} - -// HTML5 invalid states -// Shares styles with the .control-group.error above -input:focus:invalid, -textarea:focus:invalid, -select:focus:invalid { - color: #b94a48; - border-color: #ee5f5b; - &:focus { - border-color: darken(#ee5f5b, 10%); - @shadow: 0 0 6px lighten(#ee5f5b, 20%); - .box-shadow(@shadow); - } +.has-success { + .form-field-validation(@state-success-text, @state-success-text, @state-success-bg); } -// FORM ACTIONS -// ------------ - -.form-actions { - padding: (@baseLineHeight - 1) 20px @baseLineHeight; - margin-top: @baseLineHeight; - margin-bottom: @baseLineHeight; - background-color: @formActionsBackground; - border-top: 1px solid #e5e5e5; - .clearfix(); // Adding clearfix to allow for .pull-right button containers -} - - // HELP TEXT // --------- -.help-block, -.help-inline { - color: lighten(@textColor, 15%); // lighten the text some for contrast -} - .help-block { display: block; // account for any element using help-block - margin-bottom: @baseLineHeight / 2; + margin-top: 5px; + margin-bottom: 10px; + color: lighten(@text-color, 25%); // lighten the text some for contrast } -.help-inline { - display: inline-block; - .ie7-inline-block(); - vertical-align: middle; - padding-left: 5px; -} +// Input groups +// -------------------------------------------------- -// INPUT GROUPS -// ------------ - -// Allow us to put symbols and text within the input field for a cleaner look -.input-append, -.input-prepend { - display: inline-block; - margin-bottom: @baseLineHeight / 2; - vertical-align: middle; - font-size: 0; // white space collapse hack - white-space: nowrap; // Prevent span and input from separating - - // Reset the white space collapse hack - input, - select, - .uneditable-input, - .dropdown-menu, - .popover { - font-size: @baseFontSize; +// Base styles +// ------------------------- +.input-group { + display: table; + + // Undo padding and float of grid classes + &.col { + float: none; + padding-left: 0; + padding-right: 0; } input, - select, - .uneditable-input { - position: relative; // placed here by default so that on :focus we can place the input above the .add-on for full border and box-shadow goodness - margin-bottom: 0; // prevent bottom margin from screwing up alignment in stacked forms - *margin-left: 0; - vertical-align: top; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - // Make input on top when focused so blue border and shadow always show - &:focus { - z-index: 2; - } - } - .add-on { - display: inline-block; - width: auto; - height: @baseLineHeight; - min-width: 16px; - padding: 4px 5px; - font-size: @baseFontSize; - font-weight: normal; - line-height: @baseLineHeight; - text-align: center; - text-shadow: 0 1px 0 @white; - background-color: @grayLighter; - border: 1px solid #ccc; - } - .add-on, - .btn, - .btn-group > .dropdown-toggle { - vertical-align: top; - .border-radius(0); - } - .active { - background-color: lighten(@green, 30); - border-color: @green; + select { + width: 100%; + margin-bottom: 0; } } -.input-prepend { - .add-on, - .btn { - margin-right: -1px; - } - .add-on:first-child, - .btn:first-child { - // FYI, `.btn:first-child` accounts for a button group that's prepended - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } -} +// Display as table-cell +// ------------------------- +.input-group-addon, +.input-group-btn, +.input-group input { + display: table-cell; -.input-append { - input, - select, - .uneditable-input { - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - + .btn-group .btn:last-child { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on, - .btn, - .btn-group { - margin-left: -1px; - } - .add-on:last-child, - .btn:last-child, - .btn-group:last-child > .dropdown-toggle { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); + &:not(:first-child):not(:last-child) { + border-radius: 0; } } +// Addon and addon wrapper for buttons +.input-group-addon, +.input-group-btn { + width: 1%; + vertical-align: middle; // Match the inputs +} -// Remove all border-radius for inputs with both prepend and append -.input-prepend.input-append { - input, - select, - .uneditable-input { - .border-radius(0); - + .btn-group .btn { - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); - } - } - .add-on:first-child, - .btn:first-child { - margin-right: -1px; - .border-radius(@inputBorderRadius 0 0 @inputBorderRadius); - } - .add-on:last-child, - .btn:last-child { - margin-left: -1px; - .border-radius(0 @inputBorderRadius @inputBorderRadius 0); +// Text input groups +// ------------------------- +.input-group-addon { + .box-sizing(border-box); + padding: @padding-base-vertical @padding-base-horizontal; + font-size: @font-size-base; + font-weight: normal; + line-height: @line-height-base; + text-align: center; + text-shadow: 0 1px 0 #fff; + background-color: @gray-lighter; + border: 1px solid #ccc; + border-radius: @border-radius-base; + + &.input-small { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; + border-radius: @border-radius-small; } - .btn-group:first-child { - margin-left: 0; + &.input-large { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; + border-radius: @border-radius-large; } } - - - -// SEARCH FORM -// ----------- - -input.search-query { - padding-right: 14px; - padding-right: 4px \9; - padding-left: 14px; - padding-left: 4px \9; /* IE7-8 doesn't have border-radius, so don't indent the padding */ - margin-bottom: 0; // Remove the default margin on all inputs - .border-radius(15px); +// Reset rounded corners +.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-right-radius(0); } - -/* Allow for input prepend/append in search forms */ -.form-search .input-append .search-query, -.form-search .input-prepend .search-query { - .border-radius(0); // Override due to specificity +.input-group-addon:first-child { + border-right: 0; } -.form-search .input-append .search-query { - .border-radius(14px 0 0 14px); +.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-left-radius(0); } -.form-search .input-append .btn { - .border-radius(0 14px 14px 0); +.input-group-addon:last-child { + border-left: 0; } -.form-search .input-prepend .search-query { - .border-radius(0 14px 14px 0); + +// Button input groups +// ------------------------- +.input-group-btn { + position: relative; + white-space: nowrap; } -.form-search .input-prepend .btn { - .border-radius(14px 0 0 14px); +.input-group-btn > .btn { + position: relative; + float: left; // Collapse white-space + + .btn { + margin-left: -1px; + } + // Bring the "active" button to the front + &:hover, + &:active { + z-index: 2; + } } +// Inline forms +// -------------------------------------------------- - -// HORIZONTAL & VERTICAL FORMS -// --------------------------- - -// Common properties -// ----------------- - -.form-search, -.form-inline, -.form-horizontal { +.form-inline { input, - textarea, select, - .help-inline, - .uneditable-input, - .input-prepend, - .input-append { + textarea, + .radio, + .checkbox { display: inline-block; - .ie7-inline-block(); - margin-bottom: 0; - vertical-align: middle; } - // Re-hide hidden elements due to specifity - .hide { - display: none; + .radio, + .checkbox { + margin-top: 0; + margin-bottom: 0; } } -.form-search label, -.form-inline label, -.form-search .btn-group, -.form-inline .btn-group { - display: inline-block; -} -// Remove margin for input-prepend/-append -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - margin-bottom: 0; -} -// Inline checkbox/radio labels (remove padding on left) -.form-search .radio, -.form-search .checkbox, -.form-inline .radio, -.form-inline .checkbox { - padding-left: 0; - margin-bottom: 0; - vertical-align: middle; -} -// Remove float and margin, set to inline-block -.form-search .radio input[type="radio"], -.form-search .checkbox input[type="checkbox"], -.form-inline .radio input[type="radio"], -.form-inline .checkbox input[type="checkbox"] { - float: left; - margin-right: 3px; - margin-left: 0; -} - -// Margin to space out fieldsets -.control-group { - margin-bottom: @baseLineHeight / 2; -} - -// Legend collapses margin, so next element is responsible for spacing -legend + .control-group { - margin-top: @baseLineHeight; - -webkit-margin-top-collapse: separate; -} -// Horizontal-specific styles -// -------------------------- +// Horizontal forms +// -------------------------------------------------- +// Horizontal forms are built on grid classes. .form-horizontal { - // Increase spacing between groups - .control-group { - margin-bottom: @baseLineHeight; - .clearfix(); + .row + .row { + margin-top: 15px; } - // Float the labels left .control-label { - float: left; - width: @horizontalComponentOffset - 20; - padding-top: 5px; - text-align: right; - } - // Move over all input controls and content - .controls { - // Super jank IE7 fix to ensure the inputs in .input-append and input-prepend - // don't inherit the margin of the parent, in this case .controls - *display: inline-block; - *padding-left: 20px; - margin-left: @horizontalComponentOffset; - *margin-left: 0; - &:first-child { - *padding-left: @horizontalComponentOffset; - } + padding-top: 6px; } - // Remove bottom margin on block level help text since that's accounted for on .control-group - .help-block { - margin-bottom: 0; - } - // And apply it only to .help-block instances that follow a form control - input, - select, - textarea, - .uneditable-input, - .input-prepend, - .input-append { - + .help-block { - margin-top: @baseLineHeight / 2; - } - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: @horizontalComponentOffset; +} + +// Only right aline form labels here when the columns stop stacking +@media (min-width: 768px) { + .form-horizontal .control-label { + text-align: right; } } diff --git a/less/glyphicons.less b/less/glyphicons.less new file mode 100644 index 0000000000000000000000000000000000000000..0d935ea1928f91d54eb88d1494891efa724ef375 --- /dev/null +++ b/less/glyphicons.less @@ -0,0 +1,200 @@ +// +// Glyphicons +// ----------------------------------------------------------------------------- + +// About +// +// Glyphicons font-based icons require you to include all relevant font files, +// found in the Bootstrap repo under /fonts/. Files are referenced relative to +// the compiled CSS. +// +// Basic usage +// +// Since icons are fonts, they can be placed anywhere text is placed. To use, +// create an inline element with the appropriate classes, like so: +// +// <a href="#"><span class="glyphicon glyphicon-star"></span> Star</a> +// +// Use them in links, buttons, headings, and more. + + +// Import the fonts +@font-face { + font-family: 'Glyphicons Halflings'; + src: url('@{glyphicons-font-path}/glyphiconshalflings-regular.eot'); + src: url('@{glyphicons-font-path}/glyphiconshalflings-regular.eot?#iefix') format('embedded-opentype'), + url('@{glyphicons-font-path}/glyphiconshalflings-regular.woff') format('woff'), + url('@{glyphicons-font-path}/glyphiconshalflings-regular.ttf') format('truetype'), + url('@{glyphicons-font-path}/glyphiconshalflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} + +// Catchall baseclass +.glyphicon:before { + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + -webkit-font-smoothing: antialiased; +} + +// Individual icons +.glyphicon-glass:before { content: "\e001"; } +.glyphicon-music:before { content: "\e002"; } +.glyphicon-search:before { content: "\e003"; } +.glyphicon-envelope:before { content: "\2709"; } +.glyphicon-heart:before { content: "\e005"; } +.glyphicon-star:before { content: "\e006"; } +.glyphicon-star-empty:before { content: "\e007"; } +.glyphicon-user:before { content: "\e008"; } +.glyphicon-film:before { content: "\e009"; } +.glyphicon-th-large:before { content: "\e010"; } +.glyphicon-th:before { content: "\e011"; } +.glyphicon-th-list:before { content: "\e012"; } +.glyphicon-ok:before { content: "\e013"; } +.glyphicon-remove:before { content: "\e014"; } +.glyphicon-zoom-in:before { content: "\e015"; } +.glyphicon-zoom-out:before { content: "\e016"; } +.glyphicon-off:before { content: "\e017"; } +.glyphicon-signal:before { content: "\e018"; } +.glyphicon-cog:before { content: "\e019"; } +.glyphicon-trash:before { content: "\e020"; } +.glyphicon-home:before { content: "\e021"; } +.glyphicon-file:before { content: "\e022"; } +.glyphicon-time:before { content: "\e023"; } +.glyphicon-road:before { content: "\e024"; } +.glyphicon-download-alt:before { content: "\e025"; } +.glyphicon-download:before { content: "\e026"; } +.glyphicon-upload:before { content: "\e027"; } +.glyphicon-inbox:before { content: "\e028"; } +.glyphicon-play-circle:before { content: "\e029"; } +.glyphicon-repeat:before { content: "\e030"; } +.glyphicon-refresh:before { content: "\e031"; } +.glyphicon-list-alt:before { content: "\e032"; } +.glyphicon-lock:before { content: "\e033"; } +.glyphicon-flag:before { content: "\e034"; } +.glyphicon-headphones:before { content: "\e035"; } +.glyphicon-volume-off:before { content: "\e036"; } +.glyphicon-volume-down:before { content: "\e037"; } +.glyphicon-volume-up:before { content: "\e038"; } +.glyphicon-qrcode:before { content: "\e039"; } +.glyphicon-barcode:before { content: "\e040"; } +.glyphicon-tag:before { content: "\e041"; } +.glyphicon-tags:before { content: "\e042"; } +.glyphicon-book:before { content: "\e043"; } +.glyphicon-bookmark:before { content: "\e044"; } +.glyphicon-print:before { content: "\e045"; } +.glyphicon-camera:before { content: "\e046"; } +.glyphicon-font:before { content: "\e047"; } +.glyphicon-bold:before { content: "\e048"; } +.glyphicon-italic:before { content: "\e049"; } +.glyphicon-text-height:before { content: "\e050"; } +.glyphicon-text-width:before { content: "\e051"; } +.glyphicon-align-left:before { content: "\e052"; } +.glyphicon-align-center:before { content: "\e053"; } +.glyphicon-align-right:before { content: "\e054"; } +.glyphicon-align-justify:before { content: "\e055"; } +.glyphicon-list:before { content: "\e056"; } +.glyphicon-indent-left:before { content: "\e057"; } +.glyphicon-indent-right:before { content: "\e058"; } +.glyphicon-facetime-video:before { content: "\e059"; } +.glyphicon-picture:before { content: "\e060"; } +.glyphicon-pencil:before { content: "\270f"; } +.glyphicon-map-marker:before { content: "\e062"; } +.glyphicon-adjust:before { content: "\e063"; } +.glyphicon-tint:before { content: "\e064"; } +.glyphicon-edit:before { content: "\e065"; } +.glyphicon-share:before { content: "\e066"; } +.glyphicon-check:before { content: "\e067"; } +.glyphicon-move:before { content: "\e068"; } +.glyphicon-step-backward:before { content: "\e069"; } +.glyphicon-fast-backward:before { content: "\e070"; } +.glyphicon-backward:before { content: "\e071"; } +.glyphicon-play:before { content: "\e072"; } +.glyphicon-pause:before { content: "\e073"; } +.glyphicon-stop:before { content: "\e074"; } +.glyphicon-forward:before { content: "\e075"; } +.glyphicon-fast-forward:before { content: "\e076"; } +.glyphicon-step-forward:before { content: "\e077"; } +.glyphicon-eject:before { content: "\e078"; } +.glyphicon-chevron-left:before { content: "\e079"; } +.glyphicon-chevron-right:before { content: "\e080"; } +.glyphicon-plus-sign:before { content: "\e081"; } +.glyphicon-minus-sign:before { content: "\e082"; } +.glyphicon-remove-sign:before { content: "\e083"; } +.glyphicon-ok-sign:before { content: "\e084"; } +.glyphicon-question-sign:before { content: "\e085"; } +.glyphicon-info-sign:before { content: "\e086"; } +.glyphicon-screenshot:before { content: "\e087"; } +.glyphicon-remove-circle:before { content: "\e088"; } +.glyphicon-ok-circle:before { content: "\e089"; } +.glyphicon-ban-circle:before { content: "\e090"; } +.glyphicon-arrow-left:before { content: "\e091"; } +.glyphicon-arrow-right:before { content: "\e092"; } +.glyphicon-arrow-up:before { content: "\e093"; } +.glyphicon-arrow-down:before { content: "\e094"; } +.glyphicon-share-alt:before { content: "\e095"; } +.glyphicon-resize-full:before { content: "\e096"; } +.glyphicon-resize-small:before { content: "\e097"; } +.glyphicon-plus:before { content: "\002b"; } +.glyphicon-minus:before { content: "\2212"; } +.glyphicon-asterisk:before { content: "\002a"; } +.glyphicon-exclamation-sign:before { content: "\e101"; } +.glyphicon-gift:before { content: "\e102"; } +.glyphicon-leaf:before { content: "\e103"; } +.glyphicon-fire:before { content: "\e104"; } +.glyphicon-eye-open:before { content: "\e105"; } +.glyphicon-eye-close:before { content: "\e106"; } +.glyphicon-warning-sign:before { content: "\e107"; } +.glyphicon-plane:before { content: "\e108"; } +.glyphicon-calendar:before { content: "\e109"; } +.glyphicon-random:before { content: "\e110"; } +.glyphicon-comment:before { content: "\e111"; } +.glyphicon-magnet:before { content: "\e112"; } +.glyphicon-chevron-up:before { content: "\e113"; } +.glyphicon-chevron-down:before { content: "\e114"; } +.glyphicon-retweet:before { content: "\e115"; } +.glyphicon-shopping-cart:before { content: "\e116"; } +.glyphicon-folder-close:before { content: "\e117"; } +.glyphicon-folder-open:before { content: "\e118"; } +.glyphicon-resize-vertical:before { content: "\e119"; } +.glyphicon-resize-horizontal:before { content: "\e120"; } +.glyphicon-hdd:before { content: "\e121"; } +.glyphicon-bullhorn:before { content: "\e122"; } +.glyphicon-bell:before { content: "\e123"; } +.glyphicon-certificate:before { content: "\e124"; } +.glyphicon-thumbs-up:before { content: "\e125"; } +.glyphicon-thumbs-down:before { content: "\e126"; } +.glyphicon-hand-right:before { content: "\e127"; } +.glyphicon-hand-left:before { content: "\e128"; } +.glyphicon-hand-up:before { content: "\e129"; } +.glyphicon-hand-down:before { content: "\e130"; } +.glyphicon-circle-arrow-right:before { content: "\e131"; } +.glyphicon-circle-arrow-left:before { content: "\e132"; } +.glyphicon-circle-arrow-up:before { content: "\e133"; } +.glyphicon-circle-arrow-down:before { content: "\e134"; } +.glyphicon-globe:before { content: "\e135"; } +.glyphicon-wrench:before { content: "\e136"; } +.glyphicon-tasks:before { content: "\e137"; } +.glyphicon-filter:before { content: "\e138"; } +.glyphicon-briefcase:before { content: "\e139"; } +.glyphicon-fullscreen:before { content: "\e140"; } +.glyphicon-dashboard:before { content: "\e141"; } +.glyphicon-paperclip:before { content: "\e142"; } +.glyphicon-heart-empty:before { content: "\e143"; } +.glyphicon-link:before { content: "\e144"; } +.glyphicon-phone:before { content: "\e145"; } +.glyphicon-pushpin:before { content: "\e146"; } +.glyphicon-euro:before { content: "\20ac"; } +.glyphicon-usd:before { content: "\e148"; } +.glyphicon-gbp:before { content: "\e149"; } +.glyphicon-sort:before { content: "\e150"; } +.glyphicon-sort-by-alphabet:before { content: "\e151"; } +.glyphicon-sort-by-alphabet-alt:before { content: "\e152"; } +.glyphicon-sort-by-order:before { content: "\e153"; } +.glyphicon-sort-by-order-alt:before { content: "\e154"; } +.glyphicon-sort-by-attributes:before { content: "\e155"; } +.glyphicon-sort-by-attributes-alt:before { content: "\e156"; } +.glyphicon-unchecked:before { content: "\e157"; } +.glyphicon-expand:before { content: "\e158"; } +.glyphicon-collapse:before { content: "\e159"; } +.glyphicon-collapse-top:before { content: "\e160"; } diff --git a/less/grid.less b/less/grid.less index 750d20351498f75e2f3dec9e588bbcbc91645bb6..b97d1d5c4a6b3da09b1b7ef609bce31dcea44033 100644 --- a/less/grid.less +++ b/less/grid.less @@ -3,19 +3,164 @@ // -------------------------------------------------- -// Fixed (940px) -#grid > .core(@gridColumnWidth, @gridGutterWidth); +// Set the container width, and override it for fixed navbars in media queries +.container { + .container-fixed(); +} + +// Mobile-first defaults +.row { + .make-row(); +} + +// Common styles for small and large grid columns +.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; + // Float and set width: 100%; for easy stacking on mobile devices + float: left; + width: 100%; + // 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); +} + + + +// +// Container and grid column sizing +// + +// Tiny device columns (smartphones) +.col-1 { width: percentage((1 / @grid-columns)); } +.col-2 { width: percentage((2 / @grid-columns)); } +.col-3 { width: percentage((3 / @grid-columns)); } +.col-4 { width: percentage((4 / @grid-columns)); } +.col-5 { width: percentage((5 / @grid-columns)); } +.col-6 { width: percentage((6 / @grid-columns)); } +.col-7 { width: percentage((7 / @grid-columns)); } +.col-8 { width: percentage((8 / @grid-columns)); } +.col-9 { width: percentage((9 / @grid-columns)); } +.col-10 { width: percentage((10/ @grid-columns)); } +.col-11 { width: percentage((11/ @grid-columns)); } +.col-12 { width: 100%; } + +// Small device columns (phones to tablets) +@media (min-width: @screen-tablet) { + .container { + max-width: @container-tablet; + } -// Fluid (940px) -#grid > .fluid(@fluidGridColumnWidth, @fluidGridGutterWidth); + .col-sm-1 { width: percentage((1 / @grid-columns)); } + .col-sm-2 { width: percentage((2 / @grid-columns)); } + .col-sm-3 { width: percentage((3 / @grid-columns)); } + .col-sm-4 { width: percentage((4 / @grid-columns)); } + .col-sm-5 { width: percentage((5 / @grid-columns)); } + .col-sm-6 { width: percentage((6 / @grid-columns)); } + .col-sm-7 { width: percentage((7 / @grid-columns)); } + .col-sm-8 { width: percentage((8 / @grid-columns)); } + .col-sm-9 { width: percentage((9 / @grid-columns)); } + .col-sm-10 { width: percentage((10/ @grid-columns)); } + .col-sm-11 { width: percentage((11/ @grid-columns)); } + .col-sm-12 { width: 100%; } + + // Offsets + .col-offset-1 { margin-left: percentage((1 / @grid-columns)); } + .col-offset-2 { margin-left: percentage((2 / @grid-columns)); } + .col-offset-3 { margin-left: percentage((3 / @grid-columns)); } + .col-offset-4 { margin-left: percentage((4 / @grid-columns)); } + .col-offset-5 { margin-left: percentage((5 / @grid-columns)); } + .col-offset-6 { margin-left: percentage((6 / @grid-columns)); } + .col-offset-7 { margin-left: percentage((7 / @grid-columns)); } + .col-offset-8 { margin-left: percentage((8 / @grid-columns)); } + .col-offset-9 { margin-left: percentage((9 / @grid-columns)); } + .col-offset-10 { margin-left: percentage((10/ @grid-columns)); } + .col-offset-11 { margin-left: percentage((11/ @grid-columns)); } + + // Push and pull columns for source order changes + .col-push-1 { left: percentage((1 / @grid-columns)); } + .col-push-2 { left: percentage((2 / @grid-columns)); } + .col-push-3 { left: percentage((3 / @grid-columns)); } + .col-push-4 { left: percentage((4 / @grid-columns)); } + .col-push-5 { left: percentage((5 / @grid-columns)); } + .col-push-6 { left: percentage((6 / @grid-columns)); } + .col-push-7 { left: percentage((7 / @grid-columns)); } + .col-push-8 { left: percentage((8 / @grid-columns)); } + .col-push-9 { left: percentage((9 / @grid-columns)); } + .col-push-10 { left: percentage((10/ @grid-columns)); } + .col-push-11 { left: percentage((11/ @grid-columns)); } + + .col-pull-1 { right: percentage((1 / @grid-columns)); } + .col-pull-2 { right: percentage((2 / @grid-columns)); } + .col-pull-3 { right: percentage((3 / @grid-columns)); } + .col-pull-4 { right: percentage((4 / @grid-columns)); } + .col-pull-5 { right: percentage((5 / @grid-columns)); } + .col-pull-6 { right: percentage((6 / @grid-columns)); } + .col-pull-7 { right: percentage((7 / @grid-columns)); } + .col-pull-8 { right: percentage((8 / @grid-columns)); } + .col-pull-9 { right: percentage((9 / @grid-columns)); } + .col-pull-10 { right: percentage((10/ @grid-columns)); } + .col-pull-11 { right: percentage((11/ @grid-columns)); } +} -// Reset utility classes due to specificity -[class*="span"].hide, -.row-fluid [class*="span"].hide { - display: none; +// Medium and large device columns (desktop and up) +@media (min-width: @screen-desktop) { + .container { + max-width: @container-desktop; + } + .col-lg-1 { width: percentage((1 / @grid-columns)); } + .col-lg-2 { width: percentage((2 / @grid-columns)); } + .col-lg-3 { width: percentage((3 / @grid-columns)); } + .col-lg-4 { width: percentage((4 / @grid-columns)); } + .col-lg-5 { width: percentage((5 / @grid-columns)); } + .col-lg-6 { width: percentage((6 / @grid-columns)); } + .col-lg-7 { width: percentage((7 / @grid-columns)); } + .col-lg-8 { width: percentage((8 / @grid-columns)); } + .col-lg-9 { width: percentage((9 / @grid-columns)); } + .col-lg-10 { width: percentage((10/ @grid-columns)); } + .col-lg-11 { width: percentage((11/ @grid-columns)); } + .col-lg-12 { width: 100%; } } -[class*="span"].pull-right, -.row-fluid [class*="span"].pull-right { - float: right; +// Large desktops and up +@media (min-width: @screen-large-desktop) { + .container { + max-width: @container-large-desktop; + } } diff --git a/less/hero-unit.less b/less/hero-unit.less deleted file mode 100644 index 763d86aeee5d5c06e3c7ca6ffe835775e6b7bf9a..0000000000000000000000000000000000000000 --- a/less/hero-unit.less +++ /dev/null @@ -1,25 +0,0 @@ -// -// Hero unit -// -------------------------------------------------- - - -.hero-unit { - padding: 60px; - margin-bottom: 30px; - font-size: 18px; - font-weight: 200; - line-height: @baseLineHeight * 1.5; - color: @heroUnitLeadColor; - background-color: @heroUnitBackground; - .border-radius(6px); - h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - color: @heroUnitHeadingColor; - letter-spacing: -1px; - } - li { - line-height: @baseLineHeight * 1.5; // Reset since we specify in type.less - } -} diff --git a/less/jumbotron.less b/less/jumbotron.less new file mode 100644 index 0000000000000000000000000000000000000000..39bec9be68128eb504f05bfcde85bbc6b9118cad --- /dev/null +++ b/less/jumbotron.less @@ -0,0 +1,32 @@ +// +// Jumbotron +// -------------------------------------------------- + + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: (@font-size-base * 1.5); + font-weight: 200; + line-height: (@line-height-base * 1.5); + color: @jumbotron-lead-color; + background-color: @jumbotron-bg; + h1 { + line-height: 1; + color: @jumbotron-heading-color; + } + p { + line-height: 1.4; + } +} + +@media screen and (min-width: @screen-tablet) { + .jumbotron { + 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-badges.less b/less/labels-badges.less deleted file mode 100644 index bc321fe5c186c2b5b1534d76d6d49a481ddc6f10..0000000000000000000000000000000000000000 --- a/less/labels-badges.less +++ /dev/null @@ -1,84 +0,0 @@ -// -// Labels and badges -// -------------------------------------------------- - - -// Base classes -.label, -.badge { - display: inline-block; - padding: 2px 4px; - font-size: @baseFontSize * .846; - font-weight: bold; - line-height: 14px; // ensure proper line-height if floated - color: @white; - vertical-align: baseline; - white-space: nowrap; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); - background-color: @grayLight; -} -// Set unique padding and border-radii -.label { - .border-radius(3px); -} -.badge { - padding-left: 9px; - padding-right: 9px; - .border-radius(9px); -} - -// Empty labels/badges collapse -.label, -.badge { - &:empty { - display: none; - } -} - -// Hover/focus state, but only for links -a { - &.label:hover, - &.label:focus, - &.badge:hover, - &.badge:focus { - color: @white; - text-decoration: none; - cursor: pointer; - } -} - -// Colors -// Only give background-color difference to links (and to simplify, we don't qualifty with `a` but [href] attribute) -.label, -.badge { - // Important (red) - &-important { background-color: @errorText; } - &-important[href] { background-color: darken(@errorText, 10%); } - // Warnings (orange) - &-warning { background-color: @orange; } - &-warning[href] { background-color: darken(@orange, 10%); } - // Success (green) - &-success { background-color: @successText; } - &-success[href] { background-color: darken(@successText, 10%); } - // Info (turquoise) - &-info { background-color: @infoText; } - &-info[href] { background-color: darken(@infoText, 10%); } - // Inverse (black) - &-inverse { background-color: @grayDark; } - &-inverse[href] { background-color: darken(@grayDark, 10%); } -} - -// Quick fix for labels/badges in buttons -.btn { - .label, - .badge { - position: relative; - top: -1px; - } -} -.btn-mini { - .label, - .badge { - top: 0; - } -} diff --git a/less/labels.less b/less/labels.less new file mode 100644 index 0000000000000000000000000000000000000000..92fe8f89e2293803aff9a594d341d05692ec495c --- /dev/null +++ b/less/labels.less @@ -0,0 +1,70 @@ +// +// Labels +// -------------------------------------------------- + +.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: @gray-light; + border-radius: .25em; + + // Add hover effects, but only for links + &[href] { + &:hover, + &:focus { + color: #fff; + text-decoration: none; + cursor: pointer; + background-color: darken(@gray-light, 10%); + } + } +} + +// 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-success { + background-color: @label-success-bg; + &[href] { + &:hover, + &:focus { + background-color: darken(@label-success-bg, 10%); + } + } +} + +.label-warning { + background-color: @label-warning-bg; + &[href] { + &:hover, + &:focus { + background-color: darken(@label-warning-bg, 10%); + } + } +} + +.label-info { + background-color: @label-info-bg; + &[href] { + &:hover, + &:focus { + background-color: darken(@label-info-bg, 10%); + } + } +} \ No newline at end of file diff --git a/less/layouts.less b/less/layouts.less deleted file mode 100644 index 24a2062117c38052780d8023db2a3e6fc0684200..0000000000000000000000000000000000000000 --- a/less/layouts.less +++ /dev/null @@ -1,16 +0,0 @@ -// -// Layouts -// -------------------------------------------------- - - -// Container (centered, fixed-width layouts) -.container { - .container-fixed(); -} - -// Fluid layouts (left aligned, with sidebar, min- & max-width content) -.container-fluid { - padding-right: @gridGutterWidth; - padding-left: @gridGutterWidth; - .clearfix(); -} \ No newline at end of file diff --git a/less/list-group.less b/less/list-group.less new file mode 100644 index 0000000000000000000000000000000000000000..d812cc5f943afa2e59014a54940d74cbead612c5 --- /dev/null +++ b/less/list-group.less @@ -0,0 +1,93 @@ +// +// List groups +// -------------------------------------------------- + +// Base class +// +// Easily usable on <ul>, <ol>, or <div>. +.list-group { + // No need to set list-style: none; since .list-group-item is block level + margin: 0 0 20px; // reset all margins because ul and ol + background-color: @list-group-bg; +} + +// Individual list items +// ------------------------- + +.list-group-item { + position: relative; + display: block; + padding: 10px 30px 10px 15px; + // 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); +} + + +// Custom content options +// ------------------------- + +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} + +// Linked list items +// ------------------------- + +// Custom content within linked items +a.list-group-item { + .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%); + } +} + +// Chevrons and badges within list items +// ------------------------- + +.list-group-item > .badge, +.list-group-item > .glyphicon-chevron-right { + float: right; + margin-right: -15px; +} +.list-group-item > .glyphicon + .badge { + margin-right: 5px; +} diff --git a/less/media.less b/less/media.less index e461e446d2319ca1c81af5253136b7b21a142f46..21063eb2ba052c901fe3763a031b1afa13f0c070 100644 --- a/less/media.less +++ b/less/media.less @@ -10,7 +10,6 @@ .media, .media-body { overflow: hidden; - *overflow: visible; zoom: 1; } diff --git a/less/mixins.less b/less/mixins.less index 79d889219f10a524f9bba26ec9751b1bbbbfb0e1..9825e9a2d683d82c265ada548d07b281e0739efb 100644 --- a/less/mixins.less +++ b/less/mixins.less @@ -3,21 +3,24 @@ // -------------------------------------------------- -// UTILITY MIXINS -// -------------------------------------------------- +// Utilities +// ------------------------- // Clearfix -// -------- -// For clearing floats like a boss h5bp.com/q -.clearfix { - *zoom: 1; +// Source: http://nicolasgallagher.com/micro-clearfix-hack/ +// +// For modern browsers +// 1. The space content is one way to avoid an Opera bug when the +// contenteditable attribute is included anywhere else in the document. +// Otherwise it causes space to appear at the top and bottom of elements +// that are clearfixed. +// 2. The use of `table` rather than `block` is only necessary if using +// `:before` to contain the top-margins of child elements. +.clearfix() { &:before, &:after { - display: table; - content: ""; - // Fixes Opera/contenteditable bug: - // http://nicolasgallagher.com/micro-clearfix-hack/#comment-36952 - line-height: 0; + content: " "; /* 1 */ + display: table; /* 2 */ } &:after { clear: both; @@ -25,7 +28,6 @@ } // Webkit-style focus -// ------------------ .tab-focus() { // Default outline: thin dotted #333; @@ -35,41 +37,14 @@ } // Center-align a block level element -// ---------------------------------- .center-block() { display: block; margin-left: auto; margin-right: auto; } -// IE7 inline-block -// ---------------- -.ie7-inline-block() { - *display: inline; /* IE7 inline-block hack */ - *zoom: 1; -} - -// IE7 likes to collapse whitespace on either side of the inline-block elements. -// Ems because we're attempting to match the width of a space character. Left -// version is for form buttons, which typically come after other elements, and -// right version is for icons, which come before. Applying both is ok, but it will -// mean that space between those elements will be .6em (~2 space characters) in IE7, -// instead of the 1 space in other browsers. -.ie7-restore-left-whitespace() { - *margin-left: .3em; - - &:first-child { - *margin-left: 0; - } -} - -.ie7-restore-right-whitespace() { - *margin-right: .3em; -} - // Sizing shortcuts -// ------------------------- -.size(@height, @width) { +.size(@width, @height) { width: @width; height: @height; } @@ -78,21 +53,14 @@ } // Placeholder text -// ------------------------- -.placeholder(@color: @placeholderText) { - &:-moz-placeholder { - color: @color; - } - &:-ms-input-placeholder { - color: @color; - } - &::-webkit-input-placeholder { - color: @color; - } +.placeholder(@color: @input-color-placeholder) { + &:-moz-placeholder { color: @color; } // Firefox 4-18 + &::-moz-placeholder { color: @color; } // Firefox 19+ + &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ + &::-webkit-input-placeholder { color: @color; } // Safari and Chrome } // Text overflow -// ------------------------- // Requires inline-block or block for proper styling .text-overflow() { overflow: hidden; @@ -101,9 +69,8 @@ } // CSS image replacement -// ------------------------- // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 -.hide-text { +.hide-text() { font: 0/0 a; color: transparent; text-shadow: none; @@ -112,146 +79,31 @@ } -// FONTS -// -------------------------------------------------- - -#font { - #family { - .serif() { - font-family: @serifFontFamily; - } - .sans-serif() { - font-family: @sansFontFamily; - } - .monospace() { - font-family: @monoFontFamily; - } - } - .shorthand(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - font-size: @size; - font-weight: @weight; - line-height: @lineHeight; - } - .serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .sans-serif(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .sans-serif; - #font > .shorthand(@size, @weight, @lineHeight); - } - .monospace(@size: @baseFontSize, @weight: normal, @lineHeight: @baseLineHeight) { - #font > #family > .monospace; - #font > .shorthand(@size, @weight, @lineHeight); - } -} - - -// FORMS -// -------------------------------------------------- - -// Block level inputs -.input-block-level { - display: block; - width: 100%; - min-height: @inputHeight; // Make inputs at least the height of their button counterpart (base line-height + padding + border) - .box-sizing(border-box); // Makes inputs behave like true block-level elements -} - - - -// Mixin for form field states -.formFieldState(@textColor: #555, @borderColor: #ccc, @backgroundColor: #f5f5f5) { - // Set the text color - .control-label, - .help-block, - .help-inline { - color: @textColor; - } - // Style inputs accordingly - .checkbox, - .radio, - input, - select, - textarea { - color: @textColor; - } - input, - select, - textarea { - border-color: @borderColor; - .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work - &:focus { - border-color: darken(@borderColor, 10%); - @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@borderColor, 20%); - .box-shadow(@shadow); - } - } - // Give a small background color for input-prepend/-append - .input-prepend .add-on, - .input-append .add-on { - color: @textColor; - background-color: @backgroundColor; - border-color: @textColor; - } -} - - // CSS3 PROPERTIES // -------------------------------------------------- -// Border Radius -.border-radius(@radius) { - -webkit-border-radius: @radius; - -moz-border-radius: @radius; - border-radius: @radius; -} - -// Single Corner Border Radius -.border-top-left-radius(@radius) { - -webkit-border-top-left-radius: @radius; - -moz-border-radius-topleft: @radius; - border-top-left-radius: @radius; -} -.border-top-right-radius(@radius) { - -webkit-border-top-right-radius: @radius; - -moz-border-radius-topright: @radius; - border-top-right-radius: @radius; -} -.border-bottom-right-radius(@radius) { - -webkit-border-bottom-right-radius: @radius; - -moz-border-radius-bottomright: @radius; - border-bottom-right-radius: @radius; -} -.border-bottom-left-radius(@radius) { - -webkit-border-bottom-left-radius: @radius; - -moz-border-radius-bottomleft: @radius; - border-bottom-left-radius: @radius; -} - -// Single Side Border Radius +// Single side border-radius .border-top-radius(@radius) { - .border-top-right-radius(@radius); - .border-top-left-radius(@radius); + border-top-right-radius: @radius; + border-top-left-radius: @radius; } .border-right-radius(@radius) { - .border-top-right-radius(@radius); - .border-bottom-right-radius(@radius); + border-bottom-right-radius: @radius; + border-top-right-radius: @radius; } .border-bottom-radius(@radius) { - .border-bottom-right-radius(@radius); - .border-bottom-left-radius(@radius); + border-bottom-right-radius: @radius; + border-bottom-left-radius: @radius; } .border-left-radius(@radius) { - .border-top-left-radius(@radius); - .border-bottom-left-radius(@radius); + border-bottom-left-radius: @radius; + border-top-left-radius: @radius; } // Drop shadows .box-shadow(@shadow) { - -webkit-box-shadow: @shadow; - -moz-box-shadow: @shadow; + -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 box-shadow: @shadow; } @@ -303,7 +155,6 @@ -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twitter/bootstrap/issues/4885 -o-transform: skew(@x, @y); transform: skew(@x, @y); - -webkit-backface-visibility: hidden; // See https://github.com/twitter/bootstrap/issues/5319 } .translate3d(@x, @y, @z) { -webkit-transform: translate3d(@x, @y, @z); @@ -323,7 +174,6 @@ } // Background clipping -// Heads up: FF 3.6 and under need "padding" instead of "padding-box" .background-clip(@clip) { -webkit-background-clip: @clip; -moz-background-clip: @clip; @@ -338,7 +188,6 @@ background-size: @size; } - // Box sizing .box-sizing(@boxmodel) { -webkit-box-sizing: @boxmodel; @@ -363,13 +212,13 @@ } // CSS3 Content Columns -.content-columns(@columnCount, @columnGap: @gridGutterWidth) { - -webkit-column-count: @columnCount; - -moz-column-count: @columnCount; - column-count: @columnCount; - -webkit-column-gap: @columnGap; - -moz-column-gap: @columnGap; - column-gap: @columnGap; +.content-columns(@column-count, @column-gap: @grid-gutter-width) { + -webkit-column-count: @column-count; + -moz-column-count: @column-count; + column-count: @column-count; + -webkit-column-gap: @column-gap; + -moz-column-gap: @column-gap; + column-gap: @column-gap; } // Optional hyphenation @@ -384,92 +233,79 @@ // Opacity .opacity(@opacity) { - opacity: @opacity / 100; - filter: ~"alpha(opacity=@{opacity})"; + opacity: @opacity; + // IE8 filter + @opacity-ie: (@opacity * 100); + filter: ~"alpha(opacity=@{opacity-ie})"; } -// BACKGROUNDS +// GRADIENTS // -------------------------------------------------- -// Add an alphatransparency value to any background or border color (via Elyse Holladay) -#translucent { - .background(@color: @white, @alpha: 1) { - background-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - } - .border(@color: @white, @alpha: 1) { - border-color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); - .background-clip(padding-box); - } -} - -// Gradient Bar Colors for buttons and alerts -.gradientBar(@primaryColor, @secondaryColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - color: @textColor; - text-shadow: @textShadow; - #gradient > .vertical(@primaryColor, @secondaryColor); - border-color: @secondaryColor @secondaryColor darken(@secondaryColor, 15%); - border-color: rgba(0,0,0,.1) rgba(0,0,0,.1) fadein(rgba(0,0,0,.1), 15%); -} - -// Gradients #gradient { - .horizontal(@startColor: #555, @endColor: #333) { - background-color: @endColor; - background-image: -moz-linear-gradient(left, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(left, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(left, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to right, @startColor, @endColor); // Standard, IE10 + + // Horizontal gradient, from left to right + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .horizontal(@start-color: #555; @start-percent: 0%; @end-color: #333; @end-percent: 100%) { + background-color: @end-color; + background-image: -webkit-gradient(linear, @start-percent top, @end-percent top, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(left, color-stop(@start-color @start-percent), color-stop(@end-color @end-percent)); // Safari 5.1+, Chrome 10+ + background-image: -moz-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // FF 3.6+ + background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard, IE10 background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@startColor),argb(@endColor))); // IE9 and down + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down } - .vertical(@startColor: #555, @endColor: #333) { - background-color: mix(@startColor, @endColor, 60%); - background-image: -moz-linear-gradient(top, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), to(@endColor)); // Safari 4+, Chrome 2+ - background-image: -webkit-linear-gradient(top, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(top, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(to bottom, @startColor, @endColor); // Standard, IE10 + + // Vertical gradient, from top to bottom + // + // Creates two color stops, start and end, by specifying a color and position for each color stop. + // Color stops are not available in IE9 and below. + .vertical(@start-color: #555; @start-percent: 0%; @end-color: #333; @end-percent: 100%) { + background-color: @end-color; + background-image: -webkit-gradient(linear, left @start-percent, left @end-percent, from(@start-color), to(@end-color)); // Safari 4+, Chrome 2+ + background-image: -webkit-linear-gradient(top, @start-color, @start-percent, @end-color, @end-percent); // Safari 5.1+, Chrome 10+ + background-image: -moz-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // FF 3.6+ + background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard, IE10 background-repeat: repeat-x; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down } - .directional(@startColor: #555, @endColor: #333, @deg: 45deg) { - background-color: @endColor; + + .directional(@start-color: #555, @end-color: #333, @deg: 45deg) { + background-color: @end-color; background-repeat: repeat-x; - background-image: -moz-linear-gradient(@deg, @startColor, @endColor); // FF 3.6+ - background-image: -webkit-linear-gradient(@deg, @startColor, @endColor); // Safari 5.1+, Chrome 10+ - background-image: -o-linear-gradient(@deg, @startColor, @endColor); // Opera 11.10 - background-image: linear-gradient(@deg, @startColor, @endColor); // Standard, IE10 + background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1+, Chrome 10+ + background-image: -moz-linear-gradient(@deg, @start-color, @end-color); // FF 3.6+ + background-image: linear-gradient(@deg, @start-color, @end-color); // Standard, IE10 } - .horizontal-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(left, @startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(to right, @startColor, @midColor @colorStop, @endColor); + .horizontal-three-colors(@start-color: #00b3ee, @mid-color: #7a43b6, @color-stop: 50%, @end-color: #c3325f) { + background-color: mix(@mid-color, @end-color, 80%); + background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color)); + background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: -moz-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=1)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback } - .vertical-three-colors(@startColor: #00b3ee, @midColor: #7a43b6, @colorStop: 50%, @endColor: #c3325f) { - background-color: mix(@midColor, @endColor, 80%); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@startColor), color-stop(@colorStop, @midColor), to(@endColor)); - background-image: -webkit-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: -moz-linear-gradient(top, @startColor, @midColor @colorStop, @endColor); - background-image: -o-linear-gradient(@startColor, @midColor @colorStop, @endColor); - background-image: linear-gradient(@startColor, @midColor @colorStop, @endColor); + .vertical-three-colors(@start-color: #00b3ee, @mid-color: #7a43b6, @color-stop: 50%, @end-color: #c3325f) { + background-color: mix(@mid-color, @end-color, 80%); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(@start-color), color-stop(@color-stop, @mid-color), to(@end-color)); + background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); + background-image: -moz-linear-gradient(top, @start-color, @mid-color @color-stop, @end-color); + background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); background-repeat: no-repeat; - filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@startColor),argb(@endColor))); // IE9 and down, gets no color-stop at all for proper fallback + filter: e(%("progid:DXImageTransform.Microsoft.gradient(startColorstr='%d', endColorstr='%d', GradientType=0)",argb(@start-color),argb(@end-color))); // IE9 and down, gets no color-stop at all for proper fallback } - .radial(@innerColor: #555, @outerColor: #333) { - background-color: @outerColor; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@innerColor), to(@outerColor)); - background-image: -webkit-radial-gradient(circle, @innerColor, @outerColor); - background-image: -moz-radial-gradient(circle, @innerColor, @outerColor); - background-image: -o-radial-gradient(circle, @innerColor, @outerColor); + .radial(@inner-color: #555, @outer-color: #333) { + background-color: @outer-color; + background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(@inner-color), to(@outer-color)); + background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); + background-image: -moz-radial-gradient(circle, @inner-color, @outer-color); + background-image: radial-gradient(circle, @inner-color, @outer-color); background-repeat: no-repeat; } .striped(@color: #555, @angle: 45deg) { @@ -477,56 +313,81 @@ background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(.25, rgba(255,255,255,.15)), color-stop(.25, transparent), color-stop(.5, transparent), color-stop(.5, rgba(255,255,255,.15)), color-stop(.75, rgba(255,255,255,.15)), color-stop(.75, transparent), to(transparent)); background-image: -webkit-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); background-image: -moz-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); background-image: linear-gradient(@angle, rgba(255,255,255,.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,.15) 50%, rgba(255,255,255,.15) 75%, transparent 75%, transparent); } } + // Reset filters for IE +// +// When you need to remove a gradient background, don't forget to use this to reset +// the IE filter for IE9 and below. .reset-filter() { filter: e(%("progid:DXImageTransform.Microsoft.gradient(enabled = false)")); } +// RETINA IMAGE SUPPORT +// -------------------------------------------------- + +// Short retina mixin for setting background-image and -size +.retina-image(@file-1x, @file-2x, @width-1x, @height-1x) { + background-image: url("@{file-1x}"); + + @media + only screen and (-webkit-min-device-pixel-ratio: 2), + only screen and ( min--moz-device-pixel-ratio: 2), + only screen and ( -o-min-device-pixel-ratio: 2/1), + only screen and ( min-device-pixel-ratio: 2), + only screen and ( min-resolution: 192dpi), + only screen and ( min-resolution: 2dppx) { + background-image: url("@{file-2x}"); + background-size: @width-1x @height-1x; + } +} + + // COMPONENT MIXINS // -------------------------------------------------- // Horizontal dividers // ------------------------- // Dividers (basically an hr) within dropdowns and nav lists -.nav-divider(@top: #e5e5e5, @bottom: @white) { - // IE7 needs a set width since we gave a height. Restricting just - // to IE7 to keep the 1px left/right space in other browsers. - // It is unclear where IE is getting the extra space that we need - // to negative-margin away, but so it goes. - *width: 100%; - height: 1px; - margin: ((@baseLineHeight / 2) - 1) 1px; // 8px 1px - *margin: -5px 0 5px; +.nav-divider(@top: #e5e5e5, @bottom: #fff) { + height: 2px; // 1px for background, one for border + margin: ((@line-height-computed / 2) - 1) 0; overflow: hidden; background-color: @top; border-bottom: 1px solid @bottom; } -// Button backgrounds -// ------------------ -.buttonBackground(@startColor, @endColor, @textColor: #fff, @textShadow: 0 -1px 0 rgba(0,0,0,.25)) { - // gradientBar will set the background to a pleasing blend of these, to support IE<=9 - .gradientBar(@startColor, @endColor, @textColor, @textShadow); - *background-color: @endColor; /* Darken IE7 buttons by default so they stand out more given they won't have borders */ - .reset-filter(); - - // in these cases the gradient won't cover the background, so we override - &:hover, &:focus, &:active, &.active, &.disabled, &[disabled] { - color: @textColor; - background-color: @endColor; - *background-color: darken(@endColor, 5%); - } - - // IE 7 + 8 can't handle box-shadow to show active, so we darken a bit ourselves +// Button psuedo states +// ------------------------- +// Easily pump out default styles, as well as :hover, :focus, :active, +// and disabled options for all buttons +.btn-pseudo-states(@color, @background, @border) { + color: @color; + background-color: @background; + border-color: @border; + + &:hover, + &:focus, &:active, &.active { - background-color: darken(@endColor, 10%) e("\9"); + background-color: darken(@background, 5%); + border-color: darken(@border, 10%); + } + + &.disabled, + &[disabled], + fieldset[disabled] & { + &:hover, + &:focus, + &:active, + &.active { + background-color: @background; + border-color: @border + } } } @@ -534,8 +395,9 @@ // ------------------------- // Vertically center elements in the navbar. // Example: an element has a height of 30px, so write out `.navbarVerticalAlign(30px);` to calculate the appropriate top margin. -.navbarVerticalAlign(@elementHeight) { - margin-top: (@navbarHeight - @elementHeight) / 2; +.navbar-vertical-align(@element-height) { + margin-top: ((@navbar-height - @element-height) / 2); + margin-bottom: ((@navbar-height - @element-height) / 2); } @@ -550,153 +412,84 @@ .clearfix(); } -// Table columns -.tableColumns(@columnSpan: 1) { - float: none; // undo default grid column styles - width: ((@gridColumnWidth) * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1)) - 16; // 16 is total padding on left and right of table cells - margin-left: 0; // undo default grid column styles -} +// Make a grid -// Make a Grid -// Use .makeRow and .makeColumn to assign semantic layouts grid system behavior -.makeRow() { - margin-left: @gridGutterWidth * -1; +// Creates a wrapper for a series of columns +.make-row() { + // Then clear the floated columns .clearfix(); + + @media (min-width: @screen-small) { + margin-left: (@grid-gutter-width / -2); + margin-right: (@grid-gutter-width / -2); + } + + // Negative margin nested rows out to align the content of columns + .row { + margin-left: (@grid-gutter-width / -2); + margin-right: (@grid-gutter-width / -2); + } } -.makeColumn(@columns: 1, @offset: 0) { +// Generate the columns +.make-column(@columns) { + position: relative; + // Float and set width: 100%; for easy stacking on mobile devices float: left; - margin-left: (@gridColumnWidth * @offset) + (@gridGutterWidth * (@offset - 1)) + (@gridGutterWidth * 2); - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); + width: 100%; + // 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); + + // Calculate width based on number of columns available + @media (min-width: @grid-float-breakpoint) { + width: percentage((@columns / @grid-columns)); + } } - -// The Grid -#grid { - - .core (@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns + 1)); - } - - .span (@columns) { - width: (@gridColumnWidth * @columns) + (@gridGutterWidth * (@columns - 1)); - } - - .row { - margin-left: @gridGutterWidth * -1; - .clearfix(); - } - - [class*="span"] { - float: left; - min-height: 1px; // prevent collapsing columns - margin-left: @gridGutterWidth; - } - - // Set the container width, and override it for fixed navbars in media queries - .container, - .navbar-static-top .container, - .navbar-fixed-top .container, - .navbar-fixed-bottom .container { .span(@gridColumns); } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - +// Generate the column offsets +.make-column-offset(@columns) { + @media (min-width: @grid-float-breakpoint) { + margin-left: percentage((@columns / @grid-columns)); } - - .fluid (@fluidGridColumnWidth, @fluidGridGutterWidth) { - - .spanX (@index) when (@index > 0) { - .span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - - .offsetX (@index) when (@index > 0) { - .offset@{index} { .offset(@index); } - .offset@{index}:first-child { .offsetFirstChild(@index); } - .offsetX(@index - 1); - } - .offsetX (0) {} - - .offset (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth*2); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + (@fluidGridGutterWidth*2) - (.5 / @gridRowWidth * 100 * 1%); - } - - .offsetFirstChild (@columns) { - margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) + (@fluidGridGutterWidth); - *margin-left: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%) + @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - - .span (@columns) { - width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)); - *width: (@fluidGridColumnWidth * @columns) + (@fluidGridGutterWidth * (@columns - 1)) - (.5 / @gridRowWidth * 100 * 1%); - } - - .row-fluid { - width: 100%; - .clearfix(); - [class*="span"] { - .input-block-level(); - float: left; - margin-left: @fluidGridGutterWidth; - *margin-left: @fluidGridGutterWidth - (.5 / @gridRowWidth * 100 * 1%); - } - [class*="span"]:first-child { - margin-left: 0; - } - - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @fluidGridGutterWidth; - } - - // generate .spanX and .offsetX - .spanX (@gridColumns); - .offsetX (@gridColumns); - } - +} +.make-column-push(@columns) { + @media (min-width: @grid-float-breakpoint) { + left: percentage((@columns / @grid-columns)); } +} +.make-column-pull(@columns) { + @media (min-width: @grid-float-breakpoint) { + right: percentage((@columns / @grid-columns)); + } +} - .input(@gridColumnWidth, @gridGutterWidth) { - - .spanX (@index) when (@index > 0) { - input.span@{index}, textarea.span@{index}, .uneditable-input.span@{index} { .span(@index); } - .spanX(@index - 1); - } - .spanX (0) {} - .span(@columns) { - width: ((@gridColumnWidth) * @columns) + (@gridGutterWidth * (@columns - 1)) - 14; - } - input, - textarea, - .uneditable-input { - margin-left: 0; // override margin-left from core grid system - } +// Framework mixins +// -------------------------------------------------- - // Space grid-sized controls properly if multiple per line - .controls-row [class*="span"] + [class*="span"] { - margin-left: @gridGutterWidth; +// Generate form validation states +.form-field-validation(@text-color: #555, @border-color: #ccc, @background-color: #f5f5f5) { + // Color the label text + .control-label { + color: @text-color; + } + // Set the border and box shadow on specific inputs to match + .input-with-feedback { + padding-right: 32px; // to account for the feedback icon + border-color: @border-color; + .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work + &:focus { + border-color: darken(@border-color, 10%); + @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%); + .box-shadow(@shadow); } - - // generate .spanX - .spanX (@gridColumns); - } + // Set validation states also for addons + .input-group-addon { + color: @text-color; + border-color: @border-color; + background-color: @background-color; + } } diff --git a/less/modals.less b/less/modals.less index 8e272d409fa747a5f5cd666654b69aedf6e84563..144588a7bfea40d015cd1f2c85282cca7990d83b 100644 --- a/less/modals.less +++ b/less/modals.less @@ -2,81 +2,106 @@ // Modals // -------------------------------------------------- -// Background -.modal-backdrop { +// .modal-open - body class for killing the scroll +// .modal - container to scroll within +// .modal-dialog - positioning shell for the actual modal +// .modal-content - actual modal w/ bg and corners and shit + +// Kill the scroll on the body +.modal-open { + overflow: hidden; +} + +// Container that the modal scrolls within +.modal { + display: none; + overflow: auto; + overflow-y: scroll; position: fixed; top: 0; right: 0; bottom: 0; left: 0; - z-index: @zindexModalBackdrop; - background-color: @black; - // Fade for backdrop - &.fade { opacity: 0; } + z-index: @zindex-modal-background; + -webkit-overflow-scrolling: touch; + + // When fading in the modal, animate it to slide down + &.fade { + top: -25%; + .transition(~"opacity 0.3s linear, top 0.3s ease-out"); + } + &.fade.in { top: 0; } } -.modal-backdrop, -.modal-backdrop.fade.in { - .opacity(80); +// Shell div to position the modal with bottom padding +.modal-dialog { + position: relative; + top: 0; + left: 0; + right: 0; + width: auto; + padding: 10px; + z-index: (@zindex-modal-background + 10); } -// Base modal -.modal { - position: fixed; - top: 10%; - left: 50%; - z-index: @zindexModal; - width: 560px; - margin-left: -280px; - background-color: @white; +// Actual modal +.modal-content { + position: relative; + background-color: #fff; border: 1px solid #999; - border: 1px solid rgba(0,0,0,.3); - *border: 1px solid #999; /* IE6-7 */ - .border-radius(6px); - .box-shadow(0 3px 7px rgba(0,0,0,0.3)); + border: 1px solid rgba(0,0,0,.2); + border-radius: 6px; + .box-shadow(0 3px 9px rgba(0,0,0,.5)); .background-clip(padding-box); // Remove focus outline from opened modal outline: none; +} - &.fade { - .transition(e('opacity .3s linear, top .3s ease-out')); - top: -25%; - } - &.fade.in { top: 10%; } +// Modal background +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: (@zindex-modal-background - 10); + background-color: #000; + // Fade for backdrop + &.fade { .opacity(0); } + &.fade.in { .opacity(.5); } } + +// Modal header +// Top section of the modal w/ title and dismiss .modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; - // Close icon - .close { margin-top: 2px; } - // Heading - h3 { - margin: 0; - line-height: 30px; - } + padding: @modal-title-padding; + border-bottom: 1px solid #e5e5e5; + min-height: (@modal-title-padding + @modal-title-line-height); +} +// Close icon +.modal-header .close { + margin-top: -2px; +} + +// Title text within header +.modal-title { + margin: 0; + line-height: @modal-title-line-height; } -// Body (where all modal content resides) +// Modal body +// Where all modal content resides (sibling of .modal-header and .modal-footer) .modal-body { position: relative; - overflow-y: auto; - max-height: 400px; - padding: 15px; -} -// Remove bottom margin if need be -.modal-form { - margin-bottom: 0; + padding: @modal-inner-padding; } // Footer (for actions) .modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; + margin-top: 15px; + padding: (@modal-inner-padding - 1) @modal-inner-padding @modal-inner-padding; text-align: right; // right align buttons - background-color: #f5f5f5; - border-top: 1px solid #ddd; - .border-radius(0 0 6px 6px); - .box-shadow(inset 0 1px 0 @white); + border-top: 1px solid #e5e5e5; .clearfix(); // clear it in case folks use .pull-* classes on buttons // Properly space out buttons @@ -93,3 +118,20 @@ margin-left: 0; } } + +// Scale up the modal +@media screen and (min-width: @screen-tablet) { + + .modal-dialog { + left: 50%; + right: auto; + width: 560px; + margin-left: -280px; + padding-top: 30px; + padding-bottom: 30px; + } + .modal-content { + .box-shadow(0 5px 15px rgba(0,0,0,.5)); + } + +} diff --git a/less/navbar.less b/less/navbar.less index 93d09bcad03b6c26fd2b775e20306ba5abb40f60..54f4b75ab3a165f7207b44967132fec5039e27c5 100644 --- a/less/navbar.less +++ b/less/navbar.less @@ -1,497 +1,363 @@ // -// Navbars (Redux) +// Navbars // -------------------------------------------------- - -// COMMON STYLES -// ------------- - -// Base class and wrapper +// Wrapper and base class .navbar { - overflow: visible; - margin-bottom: @baseLineHeight; - - // Fix for IE7's bad z-indexing so dropdowns don't appear below content that follows the navbar - *position: relative; - *z-index: 2; -} - -// Inner for background effects -// Gradient is applied to its own element because overflow visible is not honored by IE when filter is present -.navbar-inner { - min-height: @navbarHeight; - padding-left: 20px; - padding-right: 20px; - #gradient > .vertical(@navbarBackgroundHighlight, @navbarBackground); - border: 1px solid @navbarBorder; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 4px rgba(0,0,0,.065)); + position: relative; + margin-bottom: 20px; + padding-left: 15px; + padding-right: 15px; + background-color: @navbar-bg; + border-radius: @border-radius-base; // Prevent floats from breaking the navbar .clearfix(); } -// Set width to auto for default container -// We then reset it for fixed navbars in the #gridSystem mixin -.navbar .container { - width: auto; -} - -// Override the default collapsed state -.nav-collapse.collapse { - height: auto; - overflow: visible; -} - - -// Brand: website or project name -// ------------------------- -.navbar .brand { - float: left; - display: block; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 20px ((@navbarHeight - @baseLineHeight) / 2); - margin-left: -20px; // negative indent to left-align the text down the page - font-size: 20px; - font-weight: 200; - color: @navbarBrandColor; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; - &:hover, - &:focus { - text-decoration: none; - } -} - -// Plain text in topbar +// Navbar nav links // ------------------------- -.navbar-text { - margin-bottom: 0; - line-height: @navbarHeight; - color: @navbarText; -} -// Janky solution for now to account for links outside the .nav -// ------------------------- -.navbar-link { - color: @navbarLinkColor; - &:hover, - &:focus { - color: @navbarLinkColorHover; +.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; + + > li > a { + padding-top: ((@navbar-height - @line-height-computed) / 2); + padding-bottom: ((@navbar-height - @line-height-computed) / 2); + color: @navbar-link-color; + line-height: 20px; + border-radius: @border-radius-base; } -} - -// Dividers in navbar -// ------------------------- -.navbar .divider-vertical { - height: @navbarHeight; - margin: 0 9px; - border-left: 1px solid @navbarBackground; - border-right: 1px solid @navbarBackgroundHighlight; -} - -// Buttons in navbar -// ------------------------- -.navbar .btn, -.navbar .btn-group { - .navbarVerticalAlign(30px); // Vertically center in navbar -} -.navbar .btn-group .btn, -.navbar .input-prepend .btn, -.navbar .input-append .btn, -.navbar .input-prepend .btn-group, -.navbar .input-append .btn-group { - margin-top: 0; // then undo the margin here so we don't accidentally double it -} - -// Navbar forms -// ------------------------- -.navbar-form { - margin-bottom: 0; // remove default bottom margin - .clearfix(); - input, - select, - .radio, - .checkbox { - .navbarVerticalAlign(30px); // Vertically center in navbar - } - input, - select, - .btn { - display: inline-block; - margin-bottom: 0; + > li > a:hover, + > li > a:focus { + color: @navbar-link-hover-color; + background-color: @navbar-link-hover-bg; } - input[type="image"], - input[type="checkbox"], - input[type="radio"] { - margin-top: 3px; + > .active > a, + > .active > a:hover, + > .active > a:focus { + color: @navbar-link-active-color; + background-color: @navbar-link-active-bg; } - .input-append, - .input-prepend { - margin-top: 5px; - white-space: nowrap; // preven two items from separating within a .navbar-form that has .pull-left - input { - margin-top: 0; // remove the margin on top since it's on the parent - } + > .disabled > a, + > .disabled > a:hover, + > .disabled > a:focus { + color: @navbar-link-disabled-color; + background-color: @navbar-link-disabled-bg; } -} -// Navbar search -// ------------------------- -.navbar-search { - position: relative; - float: left; - .navbarVerticalAlign(30px); // Vertically center in navbar - margin-bottom: 0; - .search-query { - margin-bottom: 0; - padding: 4px 14px; - #font > .sans-serif(13px, normal, 1); - .border-radius(15px); // redeclare because of specificity of the type attribute + // Right aligned contents + // Make them full width first so that they align properly on mobile + &.pull-right { + width: 100%; } } -// Static navbar -// ------------------------- +// +// Navbar alignment options +// -------------------------------------------------- +// Static navbar .navbar-static-top { - position: static; - margin-bottom: 0; // remove 18px margin for default navbar - .navbar-inner { - .border-radius(0); - } + border-radius: 0; } - - -// Fixed navbar -// ------------------------- - -// Shared (top/bottom) styles +// Fix the top/bottom navbars when screen real estate supports it .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; - z-index: @zindexFixedNavbar; - margin-bottom: 0; // remove 18px margin for default navbar + z-index: @zindex-navbar-fixed; + border-radius: 0; } -.navbar-fixed-top .navbar-inner, -.navbar-static-top .navbar-inner { - border-width: 0 0 1px; -} -.navbar-fixed-bottom .navbar-inner { - border-width: 1px 0 0; -} -.navbar-fixed-top .navbar-inner, -.navbar-fixed-bottom .navbar-inner { - padding-left: 0; - padding-right: 0; - .border-radius(0); -} - -// Reset container width -// Required here as we reset the width earlier on and the grid mixins don't override early enough -.navbar-static-top .container, -.navbar-fixed-top .container, -.navbar-fixed-bottom .container { - #grid > .core > .span(@gridColumns); -} - -// Fixed to top .navbar-fixed-top { top: 0; } -.navbar-fixed-top, -.navbar-static-top { - .navbar-inner { - .box-shadow(~"0 1px 10px rgba(0,0,0,.1)"); - } -} - -// Fixed to bottom .navbar-fixed-bottom { bottom: 0; - .navbar-inner { - .box-shadow(~"0 -1px 10px rgba(0,0,0,.1)"); - } + margin-bottom: 0; // override .navbar defaults } -// NAVIGATION -// ---------- +// +// Navbar optional components +// -------------------------------------------------- -.navbar .nav { - position: relative; - left: 0; +// Brand/project name +.navbar-brand { display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; // redeclare due to specificity - margin-right: 0; // remove margin on float right nav -} -.navbar .nav > li { - float: left; + max-width: 200px; + margin-left: auto; + margin-right: auto; + padding: 15px; + font-size: @font-size-large; + font-weight: 500; + line-height: @line-height-computed; + color: @navbar-brand-color; + text-align: center; + &:hover, + &:focus { + color: @navbar-brand-hover-color; + text-decoration: none; + background-color: @navbar-brand-hover-bg; + } } -// Links -.navbar .nav > li > a { - float: none; - // Vertically center the text given @navbarHeight - padding: ((@navbarHeight - @baseLineHeight) / 2) 15px ((@navbarHeight - @baseLineHeight) / 2); - color: @navbarLinkColor; - text-decoration: none; - text-shadow: 0 1px 0 @navbarBackgroundHighlight; -} -.navbar .nav .dropdown-toggle .caret { - margin-top: 8px; -} +// Collapsible navbar toggle +.navbar-toggle { + position: absolute; + top: 10px; + right: 10px; + padding: 8px 12px; + background-color: transparent; + border: 1px solid #ddd; + border-radius: 4px; -// Hover/focus -.navbar .nav > li > a:focus, -.navbar .nav > li > a:hover { - background-color: @navbarLinkBackgroundHover; // "transparent" is default to differentiate :hover/:focus from .active - color: @navbarLinkColorHover; - text-decoration: none; -} + &:hover, + &:focus { + background-color: #ddd; + } -// Active nav items -.navbar .nav > .active > a, -.navbar .nav > .active > a:hover, -.navbar .nav > .active > a:focus { - color: @navbarLinkColorActive; - text-decoration: none; - background-color: @navbarLinkBackgroundActive; - .box-shadow(inset 0 3px 8px rgba(0,0,0,.125)); + // Bars + .icon-bar { + display: block; + width: 22px; + height: 2px; + background-color: #ccc; + border-radius: 1px; + } + .icon-bar + .icon-bar { + margin-top: 4px; + } } -// Navbar button for toggling navbar items in responsive layouts -// These definitions need to come after '.navbar .btn' -.navbar .btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - .buttonBackground(darken(@navbarBackgroundHighlight, 5%), darken(@navbarBackground, 5%)); - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.075)"); -} -.navbar .btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - .border-radius(1px); - .box-shadow(0 1px 0 rgba(0,0,0,.25)); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; +// Navbar form +.navbar-form { + .form-inline(); + .navbar-vertical-align(@input-height-base); // Vertically center in navbar } - - // Dropdown menus -// -------------- // Menu position and menu carets -.navbar .nav > li > .dropdown-menu { - &:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: @dropdownBorder; - position: absolute; - top: -7px; - left: 9px; - } - &:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid @dropdownBackground; - position: absolute; - top: -6px; - left: 10px; - } +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; } // Menu position and menu caret support for dropups via extra dropup class -.navbar-fixed-bottom .nav > li > .dropdown-menu { - &:before { - border-top: 7px solid #ccc; - border-top-color: @dropdownBorder; - border-bottom: 0; - bottom: -7px; - top: auto; +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +// Dropdown menu items and carets +.navbar-nav { + // Caret should match text color on hover + > .dropdown > a:hover .caret, + > .dropdown > a:focus .caret { + border-top-color: @navbar-link-hover-color; + border-bottom-color: @navbar-link-hover-color; } - &:after { - border-top: 6px solid @dropdownBackground; - border-bottom: 0; - bottom: -6px; - top: auto; - } -} -// Caret should match text color on hover/focus -.navbar .nav li.dropdown > a:hover .caret, -.navbar .nav li.dropdown > a:focus .caret { - border-top-color: @navbarLinkColorHover; - border-bottom-color: @navbarLinkColorHover; -} - -// Remove background color from open dropdown -.navbar .nav li.dropdown.open > .dropdown-toggle, -.navbar .nav li.dropdown.active > .dropdown-toggle, -.navbar .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarLinkBackgroundActive; - color: @navbarLinkColorActive; -} -.navbar .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarLinkColor; - border-bottom-color: @navbarLinkColor; -} -.navbar .nav li.dropdown.open > .dropdown-toggle .caret, -.navbar .nav li.dropdown.active > .dropdown-toggle .caret, -.navbar .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarLinkColorActive; - border-bottom-color: @navbarLinkColorActive; + // 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; + } + > .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 -.navbar .pull-right > li > .dropdown-menu, -.navbar .nav > li > .dropdown-menu.pull-right { +.navbar-nav.pull-right > li > .dropdown-menu, +.navbar-nav > li > .dropdown-menu.pull-right { left: auto; right: 0; - &:before { - left: auto; - right: 12px; - } - &:after { - left: auto; - right: 13px; - } - .dropdown-menu { - left: auto; - right: 100%; - margin-left: 0; - margin-right: -1px; - .border-radius(6px 0 6px 6px); - } } -// Inverted navbar -// ------------------------- -.navbar-inverse { +// Inverse navbar +// -------------------------------------------------- - .navbar-inner { - #gradient > .vertical(@navbarInverseBackgroundHighlight, @navbarInverseBackground); - border-color: @navbarInverseBorder; - } +.navbar-inverse { + background-color: @navbar-inverse-bg; - .brand, - .nav > li > a { - color: @navbarInverseLinkColor; - text-shadow: 0 -1px 0 rgba(0,0,0,.25); + .navbar-brand { + color: @navbar-inverse-brand-color; &:hover, &:focus { - color: @navbarInverseLinkColorHover; + color: @navbar-inverse-brand-hover-color; + background-color: @navbar-inverse-brand-hover-bg; } } - .brand { - color: @navbarInverseBrandColor; - } - .navbar-text { - color: @navbarInverseText; + color: @navbar-inverse-color; } - .nav > li > a:focus, - .nav > li > a:hover { - background-color: @navbarInverseLinkBackgroundHover; - color: @navbarInverseLinkColorHover; - } - - .nav .active > a, - .nav .active > a:hover, - .nav .active > a:focus { - color: @navbarInverseLinkColorActive; - background-color: @navbarInverseLinkBackgroundActive; + .navbar-nav { + > li > a { + color: @navbar-inverse-link-color; + } + > 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; + } + > .disabled > a, + > .disabled > a:hover, + > .disabled > a:focus { + color: @navbar-inverse-link-disabled-color; + background-color: @navbar-inverse-link-disabled-bg; + } } - // Inline text links - .navbar-link { - color: @navbarInverseLinkColor; + // Darken the responsive nav toggle + .navbar-toggle { + border-color: #333; &:hover, &:focus { - color: @navbarInverseLinkColorHover; + background-color: #333; + } + .icon-bar { + background-color: #fff; } - } - - // Dividers in navbar - .divider-vertical { - border-left-color: @navbarInverseBackground; - border-right-color: @navbarInverseBackgroundHighlight; } // Dropdowns - .nav li.dropdown.open > .dropdown-toggle, - .nav li.dropdown.active > .dropdown-toggle, - .nav li.dropdown.open.active > .dropdown-toggle { - background-color: @navbarInverseLinkBackgroundActive; - color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > a:hover .caret, - .nav li.dropdown > a:focus .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; - } - .nav li.dropdown > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColor; - border-bottom-color: @navbarInverseLinkColor; + .navbar-nav { + > .open > a, + > .open > a:hover, + > .open > a: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; + border-bottom-color: @navbar-inverse-link-hover-color; + } + > .dropdown > a .caret { + 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; + } + } - .nav li.dropdown.open > .dropdown-toggle .caret, - .nav li.dropdown.active > .dropdown-toggle .caret, - .nav li.dropdown.open.active > .dropdown-toggle .caret { - border-top-color: @navbarInverseLinkColorActive; - border-bottom-color: @navbarInverseLinkColorActive; +} + + + +// Responsive navbar +// -------------------------------------------------- + +@media screen and (min-width: @grid-float-breakpoint) { + + .navbar-brand { + float: left; + margin-left: -5px; + margin-right: 5px; } + .navbar-nav { + float: left; + // undo margin to make nav extend full height of navbar + margin-top: 0; + margin-bottom: 0; - // Navbar search - .navbar-search { - .search-query { - color: @white; - background-color: @navbarInverseSearchBackground; - border-color: @navbarInverseSearchBorder; - .box-shadow(~"inset 0 1px 2px rgba(0,0,0,.1), 0 1px 0 rgba(255,255,255,.15)"); - .transition(none); - .placeholder(@navbarInverseSearchPlaceholderColor); - - // Focus states (we use .focused since IE7-8 and down doesn't support :focus) - &:focus, - &.focused { - padding: 5px 15px; - color: @grayDark; - text-shadow: 0 1px 0 @white; - background-color: @navbarInverseSearchBackgroundFocus; - border: 0; - .box-shadow(0 0 3px rgba(0,0,0,.15)); - outline: 0; + > li { + float: left; + > a { + border-radius: 0; } } + + &.pull-right { + float: right; + width: auto; + } + } + + // Required to make the collapsing navbar work on regular desktops + .navbar-toggle { + position: relative; + top: auto; + left: auto; + display: none; } + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } + +} + + + +// Buttons in navbars +// +// Vertically center a button within a navbar (when *not* in a form). + +.navbar-btn { + margin-top: ((@navbar-height - @input-height-base) / 2); +} + + + +// Text in navbars +// +// Add a class to make any element properly align itself vertically within the navbars. - // Navbar collapse button - .btn-navbar { - .buttonBackground(darken(@navbarInverseBackgroundHighlight, 5%), darken(@navbarInverseBackground, 5%)); +.navbar-text { + .navbar-vertical-align(@line-height-computed); +} + + + +// Links in navbars +// +// Add a class to ensure links outside the navbar nav are colored correctly. + +// Default navbar variables +.navbar-link { + color: @navbar-link-color; + &:hover { + color: @navbar-link-hover-color; } +} +// Use the inverse navbar variables +.navbar-inverse .navbar-link { + color: @navbar-inverse-link-color; + &:hover { + color: @navbar-inverse-link-hover-color; + } } diff --git a/less/navs.less b/less/navs.less index 01cd805bde28430b148a0dc44acbda5fb2cb2e61..e5925bf6370a8a762e50e7454947acba71da9f57 100644 --- a/less/navs.less +++ b/less/navs.less @@ -3,301 +3,215 @@ // -------------------------------------------------- -// BASE CLASS -// ---------- +// Base class +// -------------------------------------------------- .nav { margin-left: 0; - margin-bottom: @baseLineHeight; + margin-bottom: 0; + padding-left: 0; // Override default ul/ol list-style: none; -} - -// Make links block level -.nav > li > a { - display: block; -} -.nav > li > a:hover, -.nav > li > a:focus { - text-decoration: none; - background-color: @grayLighter; -} - -// Prevent IE8 from misplacing imgs -// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 -.nav > li > a > img { - max-width: none; -} - -// Redeclare pull classes because of specifity -.nav > .pull-right { - float: right; -} - -// Nav headers (for dropdowns and lists) -.nav-header { - display: block; - padding: 3px 15px; - font-size: 11px; - font-weight: bold; - line-height: @baseLineHeight; - color: @grayLight; - text-shadow: 0 1px 0 rgba(255,255,255,.5); - text-transform: uppercase; -} -// Space them out when they follow another list item (link) -.nav li + .nav-header { - margin-top: 9px; -} + .clearfix(); + > li { + position: relative; + display: block; + + > a { + position: relative; + display: block; + padding: 10px 15px; + &:hover, + &:focus { + text-decoration: none; + background-color: @gray-lighter; + } + } + + // 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; + } + + // Space the headers out when they follow another list item (link) + + .nav-header { + margin-top: 9px; + } + } + // 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; + } + } -// NAV LIST -// -------- + // Redeclare pull classes because of specifity + // Todo: consider making these utilities !important to avoid this bullshit + > .pull-right { + float: right; + } -.nav-list { - padding-left: 15px; - padding-right: 15px; - margin-bottom: 0; -} -.nav-list > li > a, -.nav-list .nav-header { - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255,255,255,.5); -} -.nav-list > li > a { - padding: 3px 15px; -} -.nav-list > .active > a, -.nav-list > .active > a:hover, -.nav-list > .active > a:focus { - color: @white; - text-shadow: 0 -1px 0 rgba(0,0,0,.2); - background-color: @linkColor; -} -.nav-list [class^="icon-"], -.nav-list [class*=" icon-"] { - margin-right: 2px; -} -// Dividers (basically an hr) within the dropdown -.nav-list .divider { - .nav-divider(); + // Dividers (basically an hr) within the dropdown + .nav-divider { + .nav-divider(); + } } -// TABS AND PILLS -// ------------- - -// Common styles -.nav-tabs, -.nav-pills { - .clearfix(); -} -.nav-tabs > li, -.nav-pills > li { - float: left; -} -.nav-tabs > li > a, -.nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; // keeps the overall height an even number -} +// Nav variations +// -------------------------------------------------- -// TABS -// ---- +// Tabs +// ------------------------- // Give the tabs something to sit on .nav-tabs { border-bottom: 1px solid #ddd; -} -// Make the list-items overlay the bottom border -.nav-tabs > li { - margin-bottom: -1px; -} -// Actual tabs (as links) -.nav-tabs > li > a { - padding-top: 8px; - padding-bottom: 8px; - line-height: @baseLineHeight; - border: 1px solid transparent; - .border-radius(4px 4px 0 0); - &:hover, - &:focus { - border-color: @grayLighter @grayLighter #ddd; + > li { + float: left; + // Make the list-items overlay the bottom border + margin-bottom: -1px; + + // Actual tabs (as links) + > a { + margin-right: 2px; + line-height: @line-height-base; + border: 1px solid transparent; + border-radius: @border-radius-base @border-radius-base 0 0; + &:hover { + border-color: @gray-lighter @gray-lighter #ddd; + } + } + + // 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; + } + } + // pulling this in mainly for less shorthand + &.nav-justified { + .nav-justified; + .nav-tabs-justified; } } -// Active state, and it's :hover/:focus to override normal :hover/:focus -.nav-tabs > .active > a, -.nav-tabs > .active > a:hover, -.nav-tabs > .active > a:focus { - color: @gray; - background-color: @bodyBackground; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} - -// PILLS -// ----- -// Links rendered as pills -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - .border-radius(5px); -} - -// Active state -.nav-pills > .active > a, -.nav-pills > .active > a:hover, -.nav-pills > .active > a:focus { - color: @white; - background-color: @linkColor; +// Pills +// ------------------------- +.nav-pills { + > li { + float: left; + + // Links rendered as pills + > a { + border-radius: 5px; + } + + li { + > a { + margin-left: 2px; + } + } + + // Active state + &.active > a, + &.active > a:hover, + &.active > a:focus { + color: #fff; + background-color: @component-active-bg; + } + } } - -// STACKED NAV -// ----------- - -// Stacked tabs and pills -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; // no need for the gap between nav items +// Stacked pills +.nav-stacked { + > li { + float: none; + + li { + > a { + margin-top: 2px; + margin-left: 0; // no need for this gap between nav items + } + } + } } -// Tabs -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - .border-radius(0); -} -.nav-tabs.nav-stacked > li:first-child > a { - .border-top-radius(4px); -} -.nav-tabs.nav-stacked > li:last-child > a { - .border-bottom-radius(4px); -} -.nav-tabs.nav-stacked > li > a:hover, -.nav-tabs.nav-stacked > li > a:focus { - border-color: #ddd; - z-index: 2; -} +// Justified nav links +// ------------------------- -// Pills -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; // decrease margin to match sizing of stacked tabs +.nav-justified { + width: 100%; + > li { + float: none; + display: table-cell; + width: 1%; + > a { + text-align: center; + } + } } +// Move borders to anchors instead of bottom of list +.nav-tabs-justified () { + border-bottom: 0; + > li > a { + border-bottom: 1px solid #ddd; + // Override margin from .nav-tabs + margin-right: 0; + } + > .active > a { + border-bottom-color: @body-bg; + } -// DROPDOWNS -// --------- - -.nav-tabs .dropdown-menu { - .border-radius(0 0 6px 6px); // remove the top rounded corners here since there is a hard edge above the menu -} -.nav-pills .dropdown-menu { - .border-radius(6px); // make rounded corners match the pills -} - -// Default dropdown links -// ------------------------- -// Make carets use linkColor to start -.nav .dropdown-toggle .caret { - border-top-color: @linkColor; - border-bottom-color: @linkColor; - margin-top: 6px; -} -.nav .dropdown-toggle:hover .caret, -.nav .dropdown-toggle:focus .caret { - border-top-color: @linkColorHover; - border-bottom-color: @linkColorHover; -} -/* move down carets for tabs */ -.nav-tabs .dropdown-toggle .caret { - margin-top: 8px; } -// Active dropdown links -// ------------------------- -.nav .active .dropdown-toggle .caret { - border-top-color: #fff; - border-bottom-color: #fff; -} -.nav-tabs .active .dropdown-toggle .caret { - border-top-color: @gray; - border-bottom-color: @gray; -} -// Active:hover/:focus dropdown links -// ------------------------- -.nav > .dropdown.active > a:hover, -.nav > .dropdown.active > a:focus { - cursor: pointer; -} -// Open dropdowns +// Nav headers (for dropdowns and lists) // ------------------------- -.nav-tabs .open .dropdown-toggle, -.nav-pills .open .dropdown-toggle, -.nav > li.dropdown.open.active > a:hover, -.nav > li.dropdown.open.active > a:focus { - color: @white; - background-color: @grayLight; - border-color: @grayLight; -} -.nav li.dropdown.open .caret, -.nav li.dropdown.open.active .caret, -.nav li.dropdown.open a:hover .caret, -.nav li.dropdown.open a:focus .caret { - border-top-color: @white; - border-bottom-color: @white; - .opacity(100); -} -// Dropdowns in stacked tabs -.tabs-stacked .open > a:hover, -.tabs-stacked .open > a:focus { - border-color: @grayLight; +.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 -// -------- - - -// COMMON STYLES -// ------------- +// Tabbable tabs +// ------------------------- // Clear any floats .tabbable { .clearfix(); } -.tab-content { - overflow: auto; // prevent content from running below tabs -} - -// Remove border on bottom, left, right -.tabs-below > .nav-tabs, -.tabs-right > .nav-tabs, -.tabs-left > .nav-tabs { - border-bottom: 0; -} // Show/hide tabbable areas .tab-content > .tab-pane, @@ -310,100 +224,24 @@ } -// BOTTOM -// ------ - -.tabs-below > .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below > .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below > .nav-tabs > li > a { - .border-radius(0 0 4px 4px); - &:hover, - &:focus { - border-bottom-color: transparent; - border-top-color: #ddd; - } -} -.tabs-below > .nav-tabs > .active > a, -.tabs-below > .nav-tabs > .active > a:hover, -.tabs-below > .nav-tabs > .active > a:focus { - border-color: transparent #ddd #ddd #ddd; -} - -// LEFT & RIGHT -// ------------ -// Common styles -.tabs-left > .nav-tabs > li, -.tabs-right > .nav-tabs > li { - float: none; -} -.tabs-left > .nav-tabs > li > a, -.tabs-right > .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} +// Dropdowns +// ------------------------- -// Tabs on the left -.tabs-left > .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left > .nav-tabs > li > a { - margin-right: -1px; - .border-radius(4px 0 0 4px); -} -.tabs-left > .nav-tabs > li > a:hover, -.tabs-left > .nav-tabs > li > a:focus { - border-color: @grayLighter #ddd @grayLighter @grayLighter; +// Make dropdown carets use link color in navs +.nav .caret { + border-top-color: @link-color; + border-bottom-color: @link-color; } -.tabs-left > .nav-tabs .active > a, -.tabs-left > .nav-tabs .active > a:hover, -.tabs-left > .nav-tabs .active > a:focus { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: @white; +.nav a:hover .caret { + border-top-color: @link-hover-color; + border-bottom-color: @link-hover-color; } -// Tabs on the right -.tabs-right > .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right > .nav-tabs > li > a { - margin-left: -1px; - .border-radius(0 4px 4px 0); -} -.tabs-right > .nav-tabs > li > a:hover, -.tabs-right > .nav-tabs > li > a:focus { - border-color: @grayLighter @grayLighter @grayLighter #ddd; -} -.tabs-right > .nav-tabs .active > a, -.tabs-right > .nav-tabs .active > a:hover, -.tabs-right > .nav-tabs .active > a:focus { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: @white; -} - - - -// DISABLED STATES -// --------------- - -// Gray out text -.nav > .disabled > a { - color: @grayLight; -} -// Nuke hover/focus effects -.nav > .disabled > a:hover, -.nav > .disabled > a:focus { - text-decoration: none; - background-color: transparent; - cursor: default; +// Specific dropdowns +.nav-tabs .dropdown-menu { + // make dropdown border overlap tab border + margin-top: -1px; + // Remove the top rounded corners here since there is a hard edge above the menu + .border-top-radius(0); } diff --git a/less/normalize.less b/less/normalize.less new file mode 100644 index 0000000000000000000000000000000000000000..a2e9c6485f2c6ddbf85be265b9b8190decad4ff3 --- /dev/null +++ b/less/normalize.less @@ -0,0 +1,396 @@ +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +// ========================================================================== +// HTML5 display definitions +// ========================================================================== + +// +// Correct `block` display not defined in IE 8/9. +// + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +// +// Correct `inline-block` display not defined in IE 8/9. +// + +audio, +canvas, +video { + display: inline-block; +} + +// +// Prevent modern browsers from displaying `audio` without controls. +// Remove excess height in iOS 5 devices. +// + +audio:not([controls]) { + display: none; + height: 0; +} + +// +// Address styling not present in IE 8/9. +// + +[hidden] { + display: none; +} + +// ========================================================================== +// Base +// ========================================================================== + +// +// 1. Set default font family to sans-serif. +// 2. Prevent iOS text size adjust after orientation change, without disabling +// user zoom. +// + +html { + font-family: sans-serif; // 1 + -webkit-text-size-adjust: 100%; // 2 + -ms-text-size-adjust: 100%; // 2 +} + +// +// Remove default margin. +// + +body { + margin: 0; +} + +// ========================================================================== +// Links +// ========================================================================== + +// +// Address `outline` inconsistency between Chrome and other browsers. +// + +a:focus { + outline: thin dotted; +} + +// +// Improve readability when focused and also mouse hovered in all browsers. +// + +a:active, +a:hover { + outline: 0; +} + +// ========================================================================== +// Typography +// ========================================================================== + +// +// Address variable `h1` font-size and margin within `section` and `article` +// contexts in Firefox 4+, Safari 5, and Chrome. +// + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +// +// Address styling not present in IE 8/9, Safari 5, and Chrome. +// + +abbr[title] { + border-bottom: 1px dotted; +} + +// +// Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. +// + +b, +strong { + font-weight: bold; +} + +// +// Address styling not present in Safari 5 and Chrome. +// + +dfn { + font-style: italic; +} + +// +// Address differences between Firefox and other browsers. +// + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +// +// Address styling not present in IE 8/9. +// + +mark { + background: #ff0; + color: #000; +} + +// +// Correct font family set oddly in Safari 5 and Chrome. +// + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +// +// Improve readability of pre-formatted text in all browsers. +// + +pre { + white-space: pre-wrap; +} + +// +// Set consistent quote types. +// + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +// +// Address inconsistent and variable font size in all browsers. +// + +small { + font-size: 80%; +} + +// +// Prevent `sub` and `sup` affecting `line-height` in all browsers. +// + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +// ========================================================================== +// Embedded content +// ========================================================================== + +// +// Remove border when inside `a` element in IE 8/9. +// + +img { + border: 0; +} + +// +// Correct overflow displayed oddly in IE 9. +// + +svg:not(:root) { + overflow: hidden; +} + +// ========================================================================== +// Figures +// ========================================================================== + +// +// Address margin not present in IE 8/9 and Safari 5. +// + +figure { + margin: 0; +} + +// ========================================================================== +// Forms +// ========================================================================== + +// +// Define consistent border, margin, and padding. +// + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +// +// 1. Correct `color` not being inherited in IE 8/9. +// 2. Remove padding so people aren't caught out if they zero out fieldsets. +// + +legend { + border: 0; // 1 + padding: 0; // 2 +} + +// +// 1. Correct font family not being inherited in all browsers. +// 2. Correct font size not being inherited in all browsers. +// 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. +// + +button, +input, +select, +textarea { + font-family: inherit; // 1 + font-size: 100%; // 2 + margin: 0; // 3 +} + +// +// Address Firefox 4+ setting `line-height` on `input` using `!important` in +// the UA stylesheet. +// + +button, +input { + line-height: normal; +} + +// +// Address inconsistent `text-transform` inheritance for `button` and `select`. +// All other form control elements do not inherit `text-transform` values. +// Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. +// Correct `select` style inheritance in Firefox 4+ and Opera. +// + +button, +select { + text-transform: none; +} + +// +// 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` +// and `video` controls. +// 2. Correct inability to style clickable `input` types in iOS. +// 3. Improve usability and consistency of cursor style between image-type +// `input` and others. +// + +button, +html input[type="button"], // 1 +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; // 2 + cursor: pointer; // 3 +} + +// +// Re-set default cursor for disabled elements. +// + +button[disabled], +html input[disabled] { + cursor: default; +} + +// +// 1. Address box sizing set to `content-box` in IE 8/9. +// 2. Remove excess padding in IE 8/9. +// + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; // 1 + padding: 0; // 2 +} + +// +// 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. +// 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome +// (include `-moz` to future-proof). +// + +input[type="search"] { + -webkit-appearance: textfield; // 1 + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; // 2 + box-sizing: content-box; +} + +// +// Remove inner padding and search cancel button in Safari 5 and Chrome +// on OS X. +// + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +// +// Remove inner padding and border in Firefox 4+. +// + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +// +// 1. Remove default vertical scrollbar in IE 8/9. +// 2. Improve readability and alignment in all browsers. +// + +textarea { + overflow: auto; // 1 + vertical-align: top; // 2 +} + +// ========================================================================== +// Tables +// ========================================================================== + +// +// Remove most spacing between table cells. +// + +table { + border-collapse: collapse; + border-spacing: 0; +} diff --git a/less/pager.less b/less/pager.less index 1476188297ef6ea8fe85f8174aa0af29f13181fc..0b2fcf7cbb8c66fe92c40419c8a511430f5b51b9 100644 --- a/less/pager.less +++ b/less/pager.less @@ -4,40 +4,51 @@ .pager { - margin: @baseLineHeight 0; + margin: @line-height-computed 0; list-style: none; text-align: center; .clearfix(); + li { + display: inline; + > a, + > span { + display: inline-block; + padding: 5px 14px; + background-color: @pagination-bg; + border: 1px solid @pagination-border; + border-radius: 15px; + } + + > a:hover, + > a:focus { + text-decoration: none; + background-color: @pagination-active-bg; + } + } + + .next { + > a, + > span { + float: right; + } + } + + .previous { + > a, + > span { + float: left; + } + } + + .disabled { + > a, + > a:hover, + > a:focus, + > span { + color: @gray-light; + background-color: @pagination-bg; + cursor: default; + } + } + } -.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: @grayLight; - background-color: #fff; - cursor: default; -} \ No newline at end of file diff --git a/less/pagination.less b/less/pagination.less index a789db2d28b7bcbc8a38853096835c6c860d41fc..73c063be04ccb60017d446008138180390c03ed6 100644 --- a/less/pagination.less +++ b/less/pagination.less @@ -1,74 +1,51 @@ // // Pagination (multiple pages) // -------------------------------------------------- - -// Space out pagination from surrounding content .pagination { - margin: @baseLineHeight 0; -} - -.pagination ul { - // Allow for text-based alignment display: inline-block; - .ie7-inline-block(); - // Reset default ul styles - margin-left: 0; - margin-bottom: 0; - // Visuals - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 2px rgba(0,0,0,.05)); + margin: @line-height-computed 0; + border-radius: @border-radius-base; } -.pagination ul > li { +.pagination > li { display: inline; // Remove list-style and block-level defaults } -.pagination ul > li > a, -.pagination ul > li > span { +.pagination > li > a, +.pagination > li > span { float: left; // Collapse white-space padding: 4px 12px; - line-height: @baseLineHeight; + line-height: @line-height-base; text-decoration: none; - background-color: @paginationBackground; - border: 1px solid @paginationBorder; + background-color: @pagination-bg; + border: 1px solid @pagination-border; border-left-width: 0; } -.pagination ul > li > a:hover, -.pagination ul > li > a:focus, -.pagination ul > .active > a, -.pagination ul > .active > span { - background-color: @paginationActiveBackground; +.pagination > li > a:hover, +.pagination > li > a:focus, +.pagination > .active > a, +.pagination > .active > span { + background-color: @pagination-active-bg; } -.pagination ul > .active > a, -.pagination ul > .active > span { - color: @grayLight; +.pagination > .active > a, +.pagination > .active > span { + color: @gray-light; cursor: default; } -.pagination ul > .disabled > span, -.pagination ul > .disabled > a, -.pagination ul > .disabled > a:hover, -.pagination ul > .disabled > a:focus { - color: @grayLight; - background-color: transparent; +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: @gray-light; + background-color: @pagination-bg; cursor: default; } -.pagination ul > li:first-child > a, -.pagination ul > li:first-child > span { +.pagination > li:first-child > a, +.pagination > li:first-child > span { border-left-width: 1px; - .border-left-radius(@baseBorderRadius); -} -.pagination ul > li:last-child > a, -.pagination ul > li:last-child > span { - .border-right-radius(@baseBorderRadius); -} - - -// Alignment -// -------------------------------------------------- - -.pagination-centered { - text-align: center; + .border-left-radius(@border-radius-base); } -.pagination-right { - text-align: right; +.pagination > li:last-child > a, +.pagination > li:last-child > span { + .border-right-radius(@border-radius-base); } @@ -77,47 +54,34 @@ // Large .pagination-large { - ul > li > a, - ul > li > span { - padding: @paddingLarge; - font-size: @fontSizeLarge; - } - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusLarge); + > li > a, + > li > span { + padding: @padding-large-vertical @padding-large-horizontal; + font-size: @font-size-large; } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusLarge); - } -} - -// Small and mini -.pagination-mini, -.pagination-small { - ul > li:first-child > a, - ul > li:first-child > span { - .border-left-radius(@borderRadiusSmall); + > li:first-child > a, + > li:first-child > span { + .border-left-radius(@border-radius-large); } - ul > li:last-child > a, - ul > li:last-child > span { - .border-right-radius(@borderRadiusSmall); + > li:last-child > a, + > li:last-child > span { + .border-right-radius(@border-radius-large); } } // Small .pagination-small { - ul > li > a, - ul > li > span { - padding: @paddingSmall; - font-size: @fontSizeSmall; + > li > a, + > li > span { + padding: @padding-small-vertical @padding-small-horizontal; + font-size: @font-size-small; } -} -// Mini -.pagination-mini { - ul > li > a, - ul > li > span { - padding: @paddingMini; - font-size: @fontSizeMini; + > 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); } } diff --git a/less/panels.less b/less/panels.less new file mode 100644 index 0000000000000000000000000000000000000000..a08febef3f1a2a49a1f06f0401eff9f34d685424 --- /dev/null +++ b/less/panels.less @@ -0,0 +1,96 @@ +// +// Panels +// -------------------------------------------------- + + +// Base class +.panel { + padding: 15px; + margin-bottom: 20px; + background-color: @panel-bg; + border: 1px solid @panel-border; + border-radius: @panel-border-radius; + .box-shadow(0 1px 1px rgba(0,0,0,.05)); +} + +// Optional heading +.panel-heading { + margin: -15px -15px 15px; + padding: 10px 15px; + font-size: (@font-size-base * 1.25); + font-weight: 500; + background-color: @panel-heading-bg; + border-bottom: 1px solid @panel-border; + border-top-left-radius: (@panel-border-radius - 1); + border-top-right-radius: (@panel-border-radius - 1); +} + +// Optional footer (stays gray in every modifier class) +.panel-footer { + margin: 15px -15px -15px; + padding: 10px 15px; + background-color: @panel-footer-bg; + border-top: 1px solid @panel-border; + border-bottom-left-radius: (@panel-border-radius - 1); + border-bottom-right-radius: (@panel-border-radius - 1); +} + +// Contextual variations +.panel-primary { + border-color: @panel-primary-border; + .panel-heading { + color: @panel-primary-text; + background-color: @panel-primary-heading-bg; + border-color: @panel-primary-border; + } +} +.panel-success { + border-color: @panel-success-border; + .panel-heading { + color: @panel-success-text; + background-color: @panel-success-heading-bg; + border-color: @panel-success-border; + } +} +.panel-warning { + border-color: @panel-warning-border; + .panel-heading { + color: @panel-warning-text; + background-color: @panel-warning-heading-bg; + border-color: @panel-warning-border; + } +} +.panel-danger { + border-color: @panel-danger-border; + .panel-heading { + color: @panel-danger-text; + background-color: @panel-danger-heading-bg; + border-color: @panel-danger-border; + } +} +.panel-info { + border-color: @panel-info-border; + .panel-heading { + color: @panel-info-text; + background-color: @panel-info-heading-bg; + border-color: @panel-info-border; + } +} + +// List groups in panels +.list-group-flush { + margin: 15px -15px -15px; + + .list-group-item { + border-width: 1px 0; + + // Remove border radius for top one + &:first-child { + .border-top-radius(0); + } + // But keep it for the last one + &:last-child { + border-bottom: 0; + } + } +} diff --git a/less/popovers.less b/less/popovers.less index aae35c8cd56d92111f74456019abf10a749b6dc2..bcd30e919828ee69ba00e01c64fc058fb5ec962f 100644 --- a/less/popovers.less +++ b/less/popovers.less @@ -7,18 +7,18 @@ position: absolute; top: 0; left: 0; - z-index: @zindexPopover; + z-index: @zindex-popover; display: none; max-width: 276px; padding: 1px; text-align: left; // Reset given new insertion method - background-color: @popoverBackground; - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; + background-color: @popover-bg; + -webkit-bg-clip: padding-box; + -moz-bg-clip: padding; + background-clip: padding-box; border: 1px solid #ccc; border: 1px solid rgba(0,0,0,.2); - .border-radius(6px); + border-radius: 6px; .box-shadow(0 5px 10px rgba(0,0,0,.2)); // Overrides for proper insertion @@ -34,16 +34,12 @@ .popover-title { margin: 0; // reset heading margin padding: 8px 14px; - font-size: 14px; + font-size: @font-size-base; font-weight: normal; line-height: 18px; - background-color: @popoverTitleBackground; - border-bottom: 1px solid darken(@popoverTitleBackground, 5%); - .border-radius(5px 5px 0 0); - - &:empty { - display: none; - } + background-color: @popover-title-bg; + border-bottom: 1px solid darken(@popover-title-bg, 5%); + border-radius: 5px 5px 0 0; } .popover-content { @@ -64,69 +60,69 @@ border-style: solid; } .popover .arrow { - border-width: @popoverArrowOuterWidth; + border-width: @popover-arrow-outer-width; } .popover .arrow:after { - border-width: @popoverArrowWidth; + border-width: @popover-arrow-width; content: ""; } .popover { &.top .arrow { left: 50%; - margin-left: -@popoverArrowOuterWidth; + margin-left: -@popover-arrow-outer-width; border-bottom-width: 0; border-top-color: #999; // IE8 fallback - border-top-color: @popoverArrowOuterColor; - bottom: -@popoverArrowOuterWidth; + border-top-color: @popover-arrow-outer-color; + bottom: -@popover-arrow-outer-width; &:after { bottom: 1px; - margin-left: -@popoverArrowWidth; + margin-left: -@popover-arrow-width; border-bottom-width: 0; - border-top-color: @popoverArrowColor; + border-top-color: @popover-arrow-color; } } &.right .arrow { top: 50%; - left: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; + left: -@popover-arrow-outer-width; + margin-top: -@popover-arrow-outer-width; border-left-width: 0; border-right-color: #999; // IE8 fallback - border-right-color: @popoverArrowOuterColor; + border-right-color: @popover-arrow-outer-color; &:after { left: 1px; - bottom: -@popoverArrowWidth; + bottom: -@popover-arrow-width; border-left-width: 0; - border-right-color: @popoverArrowColor; + border-right-color: @popover-arrow-color; } } &.bottom .arrow { left: 50%; - margin-left: -@popoverArrowOuterWidth; + margin-left: -@popover-arrow-outer-width; border-top-width: 0; border-bottom-color: #999; // IE8 fallback - border-bottom-color: @popoverArrowOuterColor; - top: -@popoverArrowOuterWidth; + border-bottom-color: @popover-arrow-outer-color; + top: -@popover-arrow-outer-width; &:after { top: 1px; - margin-left: -@popoverArrowWidth; + margin-left: -@popover-arrow-width; border-top-width: 0; - border-bottom-color: @popoverArrowColor; + border-bottom-color: @popover-arrow-color; } } &.left .arrow { top: 50%; - right: -@popoverArrowOuterWidth; - margin-top: -@popoverArrowOuterWidth; + right: -@popover-arrow-outer-width; + margin-top: -@popover-arrow-outer-width; border-right-width: 0; border-left-color: #999; // IE8 fallback - border-left-color: @popoverArrowOuterColor; + border-left-color: @popover-arrow-outer-color; &:after { right: 1px; border-right-width: 0; - border-left-color: @popoverArrowColor; - bottom: -@popoverArrowWidth; + border-left-color: @popover-arrow-color; + bottom: -@popover-arrow-width; } } diff --git a/less/print.less b/less/print.less new file mode 100644 index 0000000000000000000000000000000000000000..64c1ff9fa919997b38e7e26b0de59415fd64d780 --- /dev/null +++ b/less/print.less @@ -0,0 +1,85 @@ +// +// Basic print styles +// -------------------------------------------------- +// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css + +@media print { + + * { + text-shadow: none !important; + color: #000 !important; // Black prints faster: h5bp.com/s + 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) ")"; + } + + // Don't show links for images, or javascript/internal links + .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; // h5bp.com/t + } + + 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; + } + + // Bootstrap components + .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; + } +} diff --git a/less/progress-bars.less b/less/progress-bars.less index 5e0c3dda0180068e3435f0461f75141bf8a69806..e963fa9681fff6244020a508436e76c1526e320b 100644 --- a/less/progress-bars.less +++ b/less/progress-bars.less @@ -3,8 +3,8 @@ // -------------------------------------------------- -// ANIMATIONS -// ---------- +// Bar animations +// ------------------------- // Webkit @-webkit-keyframes progress-bar-stripes { @@ -38,45 +38,41 @@ -// THE BARS -// -------- +// Bar itself +// ------------------------- // Outer container .progress { overflow: hidden; - height: @baseLineHeight; - margin-bottom: @baseLineHeight; - #gradient > .vertical(#f5f5f5, #f9f9f9); + height: @line-height-computed; + margin-bottom: @line-height-computed; + background-color: @progress-bg; + border-radius: @border-radius-base; .box-shadow(inset 0 1px 2px rgba(0,0,0,.1)); - .border-radius(@baseBorderRadius); } // Bar of progress -.progress .bar { +.progress-bar { + float: left; width: 0%; height: 100%; - color: @white; - float: left; - font-size: 12px; + font-size: @font-size-small; + color: #fff; text-align: center; text-shadow: 0 -1px 0 rgba(0,0,0,.25); - #gradient > .vertical(#149bdf, #0480be); + background-color: @progress-bar-bg; .box-shadow(inset 0 -1px 0 rgba(0,0,0,.15)); - .box-sizing(border-box); .transition(width .6s ease); } -.progress .bar + .bar { - .box-shadow(~"inset 1px 0 0 rgba(0,0,0,.15), inset 0 -1px 0 rgba(0,0,0,.15)"); -} // Striped bars -.progress-striped .bar { - #gradient > .striped(#149bdf); +.progress-striped .progress-bar { + #gradient > .striped(@progress-bar-bg); .background-size(40px 40px); } // Call animation for the active one -.progress.active .bar { +.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; @@ -86,37 +82,37 @@ -// COLORS -// ------ +// Variations +// ------------------------- // Danger (red) -.progress-danger .bar, .progress .bar-danger { - #gradient > .vertical(#ee5f5b, #c43c35); -} -.progress-danger.progress-striped .bar, .progress-striped .bar-danger { - #gradient > .striped(#ee5f5b); +.progress-bar-danger { + background-color: @progress-bar-danger-bg; + .progress-striped & { + #gradient > .striped(@progress-bar-danger-bg); + } } // Success (green) -.progress-success .bar, .progress .bar-success { - #gradient > .vertical(#62c462, #57a957); -} -.progress-success.progress-striped .bar, .progress-striped .bar-success { - #gradient > .striped(#62c462); -} - -// Info (teal) -.progress-info .bar, .progress .bar-info { - #gradient > .vertical(#5bc0de, #339bb9); -} -.progress-info.progress-striped .bar, .progress-striped .bar-info { - #gradient > .striped(#5bc0de); +.progress-bar-success { + background-color: @progress-bar-success-bg; + .progress-striped & { + #gradient > .striped(@progress-bar-success-bg); + } } // Warning (orange) -.progress-warning .bar, .progress .bar-warning { - #gradient > .vertical(lighten(@orange, 15%), @orange); +.progress-bar-warning { + background-color: @progress-bar-warning-bg; + .progress-striped & { + #gradient > .striped(@progress-bar-warning-bg); + } } -.progress-warning.progress-striped .bar, .progress-striped .bar-warning { - #gradient > .striped(lighten(@orange, 15%)); + +// Info (teal) +.progress-bar-info { + background-color: @progress-bar-info-bg; + .progress-striped & { + #gradient > .striped(@progress-bar-info-bg); + } } diff --git a/less/reset.less b/less/reset.less deleted file mode 100644 index 4806bd5e59daecd3bee0a9dde274f0b836bd61ad..0000000000000000000000000000000000000000 --- a/less/reset.less +++ /dev/null @@ -1,216 +0,0 @@ -// -// Reset CSS -// Adapted from http://github.com/necolas/normalize.css -// -------------------------------------------------- - - -// Display in IE6-9 and FF3 -// ------------------------- - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} - -// Display block in IE6-9 and FF3 -// ------------------------- - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -// Prevents modern browsers from displaying 'audio' without controls -// ------------------------- - -audio:not([controls]) { - display: none; -} - -// Base settings -// ------------------------- - -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -// Focus states -a:focus { - .tab-focus(); -} -// Hover & Active -a:hover, -a:active { - outline: 0; -} - -// Prevents sub and sup affecting line-height in all browsers -// ------------------------- - -sub, -sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} - -// Img border in a's and image quality -// ------------------------- - -img { - /* Responsive images (ensure images don't scale beyond their parents) */ - max-width: 100%; /* Part 1: Set a maxium relative to the parent */ - width: auto\9; /* IE7-8 need help adjusting responsive images */ - height: auto; /* Part 2: Scale the height according to the width, otherwise you get stretching */ - - vertical-align: middle; - border: 0; - -ms-interpolation-mode: bicubic; -} - -// Prevent max-width from affecting Google Maps -#map_canvas img, -.google-maps img { - max-width: none; -} - -// Forms -// ------------------------- - -// Font size in all browsers, margin changes, misc consistency -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, -input { - *overflow: visible; // Inner spacing ie IE6/7 - line-height: normal; // FF3/4 have !important on line-height in UA stylesheet -} -button::-moz-focus-inner, -input::-moz-focus-inner { // Inner padding and border oddities in FF3/4 - padding: 0; - border: 0; -} -button, -html input[type="button"], // Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` and `video` controls. -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; // Corrects inability to style clickable `input` types in iOS. - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -label, -select, -button, -input[type="button"], -input[type="reset"], -input[type="submit"], -input[type="radio"], -input[type="checkbox"] { - cursor: pointer; // Improves usability and consistency of cursor style between image-type `input` and others. -} -input[type="search"] { // Appearance in Safari/Chrome - .box-sizing(content-box); - -webkit-appearance: textfield; -} -input[type="search"]::-webkit-search-decoration, -input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; // Inner-padding issues in Chrome OSX, Safari 5 -} -textarea { - overflow: auto; // Remove vertical scrollbar in IE6-9 - vertical-align: top; // Readability and alignment cross-browser -} - - -// Printing -// ------------------------- -// Source: https://github.com/h5bp/html5-boilerplate/blob/master/css/main.css - -@media print { - - * { - text-shadow: none !important; - color: #000 !important; // Black prints faster: h5bp.com/s - 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) ")"; - } - - // Don't show links for images, or javascript/internal links - .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; // h5bp.com/t - } - - tr, - img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page { - margin: 0.5cm; - } - - p, - h2, - h3 { - orphans: 3; - widows: 3; - } - - h2, - h3 { - page-break-after: avoid; - } -} diff --git a/less/responsive-1200px-min.less b/less/responsive-1200px-min.less deleted file mode 100644 index 4f35ba6ca23c34b892bec83977277b0d5043ea0b..0000000000000000000000000000000000000000 --- a/less/responsive-1200px-min.less +++ /dev/null @@ -1,28 +0,0 @@ -// -// Responsive: Large desktop and up -// -------------------------------------------------- - - -@media (min-width: 1200px) { - - // Fixed grid - #grid > .core(@gridColumnWidth1200, @gridGutterWidth1200); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth1200, @fluidGridGutterWidth1200); - - // Input grid - #grid > .input(@gridColumnWidth1200, @gridGutterWidth1200); - - // Thumbnails - .thumbnails { - margin-left: -@gridGutterWidth1200; - } - .thumbnails > li { - margin-left: @gridGutterWidth1200; - } - .row-fluid .thumbnails { - margin-left: 0; - } - -} diff --git a/less/responsive-767px-max.less b/less/responsive-767px-max.less deleted file mode 100644 index 128f4ce30dae7f63a417a4e5e8ced310943c0dce..0000000000000000000000000000000000000000 --- a/less/responsive-767px-max.less +++ /dev/null @@ -1,193 +0,0 @@ -// -// Responsive: Landscape phone to desktop/tablet -// -------------------------------------------------- - - -@media (max-width: 767px) { - - // Padding to set content in a bit - body { - padding-left: 20px; - padding-right: 20px; - } - // Negative indent the now static "fixed" navbar - .navbar-fixed-top, - .navbar-fixed-bottom, - .navbar-static-top { - margin-left: -20px; - margin-right: -20px; - } - // Remove padding on container given explicit padding set on body - .container-fluid { - padding: 0; - } - - // TYPOGRAPHY - // ---------- - // Reset horizontal dl - .dl-horizontal { - dt { - float: none; - clear: none; - width: auto; - text-align: left; - } - dd { - margin-left: 0; - } - } - - // GRID & CONTAINERS - // ----------------- - // Remove width from containers - .container { - width: auto; - } - // Fluid rows - .row-fluid { - width: 100%; - } - // Undo negative margin on rows and thumbnails - .row, - .thumbnails { - margin-left: 0; - } - .thumbnails > li { - float: none; - margin-left: 0; // Reset the default margin for all li elements when no .span* classes are present - } - // Make all grid-sized elements block level again - [class*="span"], - .uneditable-input[class*="span"], // Makes uneditable inputs full-width when using grid sizing - .row-fluid [class*="span"] { - float: none; - display: block; - width: 100%; - margin-left: 0; - .box-sizing(border-box); - } - .span12, - .row-fluid .span12 { - width: 100%; - .box-sizing(border-box); - } - .row-fluid [class*="offset"]:first-child { - margin-left: 0; - } - - // FORM FIELDS - // ----------- - // Make span* classes full width - .input-large, - .input-xlarge, - .input-xxlarge, - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - .input-block-level(); - } - // But don't let it screw up prepend/append inputs - .input-prepend input, - .input-append input, - .input-prepend input[class*="span"], - .input-append input[class*="span"] { - display: inline-block; // redeclare so they don't wrap to new lines - width: auto; - } - .controls-row [class*="span"] + [class*="span"] { - margin-left: 0; - } - - // Modals - .modal { - position: fixed; - top: 20px; - left: 20px; - right: 20px; - width: auto; - margin: 0; - &.fade { top: -100px; } - &.fade.in { top: 20px; } - } - -} - - - -// UP TO LANDSCAPE PHONE -// --------------------- - -@media (max-width: 480px) { - - // Smooth out the collapsing/expanding nav - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); // activate the GPU - } - - // Block level the page header small tag for readability - .page-header h1 small { - display: block; - line-height: @baseLineHeight; - } - - // Update checkboxes for iOS - input[type="checkbox"], - input[type="radio"] { - border: 1px solid #ccc; - } - - // Remove the horizontal form styles - .form-horizontal { - .control-label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - // Move over all input controls and content - .controls { - margin-left: 0; - } - // Move the options list down to align with labels - .control-list { - padding-top: 0; // has to be padding because margin collaspes - } - // Move over buttons in .form-actions to align with .controls - .form-actions { - padding-left: 10px; - padding-right: 10px; - } - } - - // Medias - // Reset float and spacing to stack - .media .pull-left, - .media .pull-right { - float: none; - display: block; - margin-bottom: 10px; - } - // Remove side margins since we stack instead of indent - .media-object { - margin-right: 0; - margin-left: 0; - } - - // Modals - .modal { - top: 10px; - left: 10px; - right: 10px; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - - // Carousel - .carousel-caption { - position: static; - } - -} diff --git a/less/responsive-768px-979px.less b/less/responsive-768px-979px.less deleted file mode 100644 index 8e8c486a069d8b2c393f605162d1d76b9d7fd0fd..0000000000000000000000000000000000000000 --- a/less/responsive-768px-979px.less +++ /dev/null @@ -1,19 +0,0 @@ -// -// Responsive: Tablet to desktop -// -------------------------------------------------- - - -@media (min-width: 768px) and (max-width: 979px) { - - // Fixed grid - #grid > .core(@gridColumnWidth768, @gridGutterWidth768); - - // Fluid grid - #grid > .fluid(@fluidGridColumnWidth768, @fluidGridGutterWidth768); - - // Input grid - #grid > .input(@gridColumnWidth768, @gridGutterWidth768); - - // No need to reset .thumbnails here since it's the same @gridGutterWidth - -} diff --git a/less/responsive-navbar.less b/less/responsive-navbar.less deleted file mode 100644 index 21cd3ba6717e91ede18aea37a846e9654e2e6cdf..0000000000000000000000000000000000000000 --- a/less/responsive-navbar.less +++ /dev/null @@ -1,189 +0,0 @@ -// -// Responsive: Navbar -// -------------------------------------------------- - - -// TABLETS AND BELOW -// ----------------- -@media (max-width: @navbarCollapseWidth) { - - // UNFIX THE TOPBAR - // ---------------- - // Remove any padding from the body - body { - padding-top: 0; - } - // Unfix the navbars - .navbar-fixed-top, - .navbar-fixed-bottom { - position: static; - } - .navbar-fixed-top { - margin-bottom: @baseLineHeight; - } - .navbar-fixed-bottom { - margin-top: @baseLineHeight; - } - .navbar-fixed-top .navbar-inner, - .navbar-fixed-bottom .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - // Account for brand name - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - - // COLLAPSIBLE NAVBAR - // ------------------ - // Nav collapse clears brand - .nav-collapse { - clear: both; - } - // Block-level the nav - .nav-collapse .nav { - float: none; - margin: 0 0 (@baseLineHeight / 2); - } - .nav-collapse .nav > li { - float: none; - } - .nav-collapse .nav > li > a { - margin-bottom: 2px; - } - .nav-collapse .nav > .divider-vertical { - display: none; - } - .nav-collapse .nav .nav-header { - color: @navbarText; - text-shadow: none; - } - // Nav and dropdown links in navbar - .nav-collapse .nav > li > a, - .nav-collapse .dropdown-menu a { - padding: 9px 15px; - font-weight: bold; - color: @navbarLinkColor; - .border-radius(3px); - } - // Buttons - .nav-collapse .btn { - padding: 4px 10px 4px; - font-weight: normal; - .border-radius(@baseBorderRadius); - } - .nav-collapse .dropdown-menu li + li a { - margin-bottom: 2px; - } - .nav-collapse .nav > li > a:hover, - .nav-collapse .nav > li > a:focus, - .nav-collapse .dropdown-menu a:hover, - .nav-collapse .dropdown-menu a:focus { - background-color: @navbarBackground; - } - .navbar-inverse .nav-collapse .nav > li > a, - .navbar-inverse .nav-collapse .dropdown-menu a { - color: @navbarInverseLinkColor; - } - .navbar-inverse .nav-collapse .nav > li > a:hover, - .navbar-inverse .nav-collapse .nav > li > a:focus, - .navbar-inverse .nav-collapse .dropdown-menu a:hover, - .navbar-inverse .nav-collapse .dropdown-menu a:focus { - background-color: @navbarInverseBackground; - } - // Buttons in the navbar - .nav-collapse.in .btn-group { - margin-top: 5px; - padding: 0; - } - // Dropdowns in the navbar - .nav-collapse .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: none; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - .border-radius(0); - .box-shadow(none); - } - .nav-collapse .open > .dropdown-menu { - display: block; - } - - .nav-collapse .dropdown-menu:before, - .nav-collapse .dropdown-menu:after { - display: none; - } - .nav-collapse .dropdown-menu .divider { - display: none; - } - .nav-collapse .nav > li > .dropdown-menu { - &:before, - &:after { - display: none; - } - } - // Forms in navbar - .nav-collapse .navbar-form, - .nav-collapse .navbar-search { - float: none; - padding: (@baseLineHeight / 2) 15px; - margin: (@baseLineHeight / 2) 0; - border-top: 1px solid @navbarBackground; - border-bottom: 1px solid @navbarBackground; - .box-shadow(~"inset 0 1px 0 rgba(255,255,255,.1), 0 1px 0 rgba(255,255,255,.1)"); - } - .navbar-inverse .nav-collapse .navbar-form, - .navbar-inverse .nav-collapse .navbar-search { - border-top-color: @navbarInverseBackground; - border-bottom-color: @navbarInverseBackground; - } - // Pull right (secondary) nav content - .navbar .nav-collapse .nav.pull-right { - float: none; - margin-left: 0; - } - // Hide everything in the navbar save .brand and toggle button */ - .nav-collapse, - .nav-collapse.collapse { - overflow: hidden; - height: 0; - } - // Navbar button - .navbar .btn-navbar { - display: block; - } - - // STATIC NAVBAR - // ------------- - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } - - -} - - -// DEFAULT DESKTOP -// --------------- - -@media (min-width: @navbarCollapseDesktopWidth) { - - // Required to make the collapsing navbar work on regular desktops - .nav-collapse.collapse { - height: auto !important; - overflow: visible !important; - } - -} diff --git a/less/responsive-utilities.less b/less/responsive-utilities.less index bf43e8ef73994c71dd69dd40839f835dbed592f9..082109e5e8fc86c771d02961e7a81bcba2dae10b 100644 --- a/less/responsive-utilities.less +++ b/less/responsive-utilities.less @@ -5,11 +5,27 @@ // IE10 Metro responsive // Required for Windows 8 Metro split-screen snapping with IE10 +// // Source: http://timkadlec.com/2012/10/ie10-snap-mode-and-responsive-design/ @-ms-viewport{ width: device-width; } +// IE10 on Windows Phone 8 +// IE10 on WP8 doesn't report CSS pixels, but actual device pixels. In +// other words, say on a Lumia, you'll get 768px as the device width, +// meaning users will see the tablet styles and not phone styles. +// +// Alternatively you can override this with JS (see source below), but +// we won't be doing that here given our limited scope. +// +// Source: http://timkadlec.com/2013/01/windows-phone-8-and-device-width/ +@media screen and (max-width: 400px) { + @-ms-viewport{ + width: 320px; + } +} + // Hide from screenreaders and browsers // Credit: HTML5 Boilerplate .hidden { @@ -19,41 +35,93 @@ // Visibility utilities -// For desktops -.visible-phone { display: none !important; } -.visible-tablet { display: none !important; } -.hidden-phone { } -.hidden-tablet { } -.hidden-desktop { display: none !important; } -.visible-desktop { display: inherit !important; } +// For Phones +.visible-sm { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } +} +.visible-md { display: none !important; } +.visible-lg { display: none !important; } + +.hidden-sm { display: none !important; } +.hidden-md { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } +} +.hidden-lg { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } +} + // Tablets & small desktops only -@media (min-width: 768px) and (max-width: 979px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important ; } - // Show - .visible-tablet { display: inherit !important; } - // Hide - .hidden-tablet { display: none !important; } -} - -// Phones only -@media (max-width: 767px) { - // Hide everything else - .hidden-desktop { display: inherit !important; } - .visible-desktop { display: none !important; } - // Show - .visible-phone { display: inherit !important; } // Use inherit to restore previous behavior - // Hide - .hidden-phone { display: none !important; } +@media (min-width: @screen-tablet) and (max-width: @screen-tablet-max) { + .visible-sm { display: none !important; } + .visible-md { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } + .visible-lg { display: none !important; } + + .hidden-sm { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } + .hidden-md { display: none !important; } + .hidden-lg { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } +} + +// For desktops +@media (min-width: @screen-desktop) { + .visible-sm { display: none !important; } + .visible-md { display: none !important; } + .visible-lg { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } + + .hidden-sm { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } + .hidden-md { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } + .hidden-lg { display: none !important; } } // Print utilities -.visible-print { display: none !important; } -.hidden-print { } +.visible-print { display: none !important; } +.hidden-print { } @media print { - .visible-print { display: inherit !important; } - .hidden-print { display: none !important; } + .visible-print { + display: block !important; + tr& { display: table-row !important; } + th&, + td& { display: table-cell !important; } + } + .hidden-print { display: none !important; } } diff --git a/less/responsive.less b/less/responsive.less deleted file mode 100644 index b8366defbdcbf62bf8fefc55810a3d160182451b..0000000000000000000000000000000000000000 --- a/less/responsive.less +++ /dev/null @@ -1,48 +0,0 @@ -/*! - * Bootstrap Responsive v2.3.1 - * - * Copyright 2012 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 @twitter by @mdo and @fat. - */ - - -// Responsive.less -// For phone and tablet devices -// ------------------------------------------------------------- - - -// REPEAT VARIABLES & MIXINS -// ------------------------- -// Required since we compile the responsive stuff separately - -@import "variables.less"; // Modify this for custom colors, font-sizes, etc -@import "mixins.less"; - - -// RESPONSIVE CLASSES -// ------------------ - -@import "responsive-utilities.less"; - - -// MEDIA QUERIES -// ------------------ - -// Large desktops -@import "responsive-1200px-min.less"; - -// Tablets to regular desktops -@import "responsive-768px-979px.less"; - -// Phones to portrait tablets and narrow desktops -@import "responsive-767px-max.less"; - - -// RESPONSIVE NAVBAR -// ------------------ - -// From 979px and below, show a button to toggle navbar contents -@import "responsive-navbar.less"; diff --git a/less/scaffolding.less b/less/scaffolding.less index f17e8cadb40209e8e45689565b03b0230f911b74..9f5739710c62a0974709e33916a3b144e656c550 100644 --- a/less/scaffolding.less +++ b/less/scaffolding.less @@ -3,16 +3,38 @@ // -------------------------------------------------- +// Reset the box-sizing +// ------------------------- + +* { + .box-sizing(border-box); +} + + // Body reset // ------------------------- +html { + font-size: 62.5%; + -webkit-tap-highlight-color: rgba(0,0,0,0); +} + body { - margin: 0; - font-family: @baseFontFamily; - font-size: @baseFontSize; - line-height: @baseLineHeight; - color: @textColor; - background-color: @bodyBackground; + font-family: @font-family-base; + font-size: @font-size-base; + line-height: @line-height-base; + color: @text-color; + background-color: @body-bg; +} + +// Reset fonts for revelant elements +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; } @@ -20,34 +42,40 @@ body { // ------------------------- a { - color: @linkColor; + color: @link-color; text-decoration: none; } a:hover, a:focus { - color: @linkColorHover; + color: @link-hover-color; text-decoration: underline; } +a:focus { + .tab-focus(); +} // Images // ------------------------- +img { + // Responsive images (ensure images don't scale beyond their parents) + max-width: 100%; // Part 1: Set a maxium relative to the parent + height: auto; // Part 2: Scale the height according to the width, otherwise you get stretching + + // Match vertical alignment with other comment elements + vertical-align: middle; +} + // Rounded corners .img-rounded { - .border-radius(6px); + border-radius: 6px; } -// Add polaroid-esque trim -.img-polaroid { - padding: 4px; - background-color: #fff; - border: 1px solid #ccc; - border: 1px solid rgba(0,0,0,.2); - .box-shadow(0 1px 3px rgba(0,0,0,.1)); -} +// Image thumbnails +// See thumbnails.less for `.img-thumbnail` // Perfect circle .img-circle { - .border-radius(500px); // crank the border-radius so it works with most reasonably sized images + border-radius: 500px; // crank the border-radius so it works with most reasonably sized images } diff --git a/less/sprites.less b/less/sprites.less deleted file mode 100644 index 1812bf71acbfeb9ad5c817492bb1f3b9054429d8..0000000000000000000000000000000000000000 --- a/less/sprites.less +++ /dev/null @@ -1,197 +0,0 @@ -// -// Sprites -// -------------------------------------------------- - - -// ICONS -// ----- - -// All icons receive the styles of the <i> tag with a base class -// of .i and are then given a unique class to add width, height, -// and background-position. Your resulting HTML will look like -// <i class="icon-inbox"></i>. - -// For the white version of the icons, just add the .icon-white class: -// <i class="icon-inbox icon-white"></i> - -[class^="icon-"], -[class*=" icon-"] { - display: inline-block; - width: 14px; - height: 14px; - .ie7-restore-right-whitespace(); - line-height: 14px; - vertical-align: text-top; - background-image: url("@{iconSpritePath}"); - background-position: 14px 14px; - background-repeat: no-repeat; - margin-top: 1px; -} - -/* White icons with optional class, or on hover/focus/active states of certain elements */ -.icon-white, -.nav-pills > .active > a > [class^="icon-"], -.nav-pills > .active > a > [class*=" icon-"], -.nav-list > .active > a > [class^="icon-"], -.nav-list > .active > a > [class*=" icon-"], -.navbar-inverse .nav > .active > a > [class^="icon-"], -.navbar-inverse .nav > .active > a > [class*=" icon-"], -.dropdown-menu > li > a:hover > [class^="icon-"], -.dropdown-menu > li > a:focus > [class^="icon-"], -.dropdown-menu > li > a:hover > [class*=" icon-"], -.dropdown-menu > li > a:focus > [class*=" icon-"], -.dropdown-menu > .active > a > [class^="icon-"], -.dropdown-menu > .active > a > [class*=" icon-"], -.dropdown-submenu:hover > a > [class^="icon-"], -.dropdown-submenu:focus > a > [class^="icon-"], -.dropdown-submenu:hover > a > [class*=" icon-"], -.dropdown-submenu:focus > a > [class*=" icon-"] { - background-image: url("@{iconWhiteSpritePath}"); -} - -.icon-glass { background-position: 0 0; } -.icon-music { background-position: -24px 0; } -.icon-search { background-position: -48px 0; } -.icon-envelope { background-position: -72px 0; } -.icon-heart { background-position: -96px 0; } -.icon-star { background-position: -120px 0; } -.icon-star-empty { background-position: -144px 0; } -.icon-user { background-position: -168px 0; } -.icon-film { background-position: -192px 0; } -.icon-th-large { background-position: -216px 0; } -.icon-th { background-position: -240px 0; } -.icon-th-list { background-position: -264px 0; } -.icon-ok { background-position: -288px 0; } -.icon-remove { background-position: -312px 0; } -.icon-zoom-in { background-position: -336px 0; } -.icon-zoom-out { background-position: -360px 0; } -.icon-off { background-position: -384px 0; } -.icon-signal { background-position: -408px 0; } -.icon-cog { background-position: -432px 0; } -.icon-trash { background-position: -456px 0; } - -.icon-home { background-position: 0 -24px; } -.icon-file { background-position: -24px -24px; } -.icon-time { background-position: -48px -24px; } -.icon-road { background-position: -72px -24px; } -.icon-download-alt { background-position: -96px -24px; } -.icon-download { background-position: -120px -24px; } -.icon-upload { background-position: -144px -24px; } -.icon-inbox { background-position: -168px -24px; } -.icon-play-circle { background-position: -192px -24px; } -.icon-repeat { background-position: -216px -24px; } -.icon-refresh { background-position: -240px -24px; } -.icon-list-alt { background-position: -264px -24px; } -.icon-lock { background-position: -287px -24px; } // 1px off -.icon-flag { background-position: -312px -24px; } -.icon-headphones { background-position: -336px -24px; } -.icon-volume-off { background-position: -360px -24px; } -.icon-volume-down { background-position: -384px -24px; } -.icon-volume-up { background-position: -408px -24px; } -.icon-qrcode { background-position: -432px -24px; } -.icon-barcode { background-position: -456px -24px; } - -.icon-tag { background-position: 0 -48px; } -.icon-tags { background-position: -25px -48px; } // 1px off -.icon-book { background-position: -48px -48px; } -.icon-bookmark { background-position: -72px -48px; } -.icon-print { background-position: -96px -48px; } -.icon-camera { background-position: -120px -48px; } -.icon-font { background-position: -144px -48px; } -.icon-bold { background-position: -167px -48px; } // 1px off -.icon-italic { background-position: -192px -48px; } -.icon-text-height { background-position: -216px -48px; } -.icon-text-width { background-position: -240px -48px; } -.icon-align-left { background-position: -264px -48px; } -.icon-align-center { background-position: -288px -48px; } -.icon-align-right { background-position: -312px -48px; } -.icon-align-justify { background-position: -336px -48px; } -.icon-list { background-position: -360px -48px; } -.icon-indent-left { background-position: -384px -48px; } -.icon-indent-right { background-position: -408px -48px; } -.icon-facetime-video { background-position: -432px -48px; } -.icon-picture { background-position: -456px -48px; } - -.icon-pencil { background-position: 0 -72px; } -.icon-map-marker { background-position: -24px -72px; } -.icon-adjust { background-position: -48px -72px; } -.icon-tint { background-position: -72px -72px; } -.icon-edit { background-position: -96px -72px; } -.icon-share { background-position: -120px -72px; } -.icon-check { background-position: -144px -72px; } -.icon-move { background-position: -168px -72px; } -.icon-step-backward { background-position: -192px -72px; } -.icon-fast-backward { background-position: -216px -72px; } -.icon-backward { background-position: -240px -72px; } -.icon-play { background-position: -264px -72px; } -.icon-pause { background-position: -288px -72px; } -.icon-stop { background-position: -312px -72px; } -.icon-forward { background-position: -336px -72px; } -.icon-fast-forward { background-position: -360px -72px; } -.icon-step-forward { background-position: -384px -72px; } -.icon-eject { background-position: -408px -72px; } -.icon-chevron-left { background-position: -432px -72px; } -.icon-chevron-right { background-position: -456px -72px; } - -.icon-plus-sign { background-position: 0 -96px; } -.icon-minus-sign { background-position: -24px -96px; } -.icon-remove-sign { background-position: -48px -96px; } -.icon-ok-sign { background-position: -72px -96px; } -.icon-question-sign { background-position: -96px -96px; } -.icon-info-sign { background-position: -120px -96px; } -.icon-screenshot { background-position: -144px -96px; } -.icon-remove-circle { background-position: -168px -96px; } -.icon-ok-circle { background-position: -192px -96px; } -.icon-ban-circle { background-position: -216px -96px; } -.icon-arrow-left { background-position: -240px -96px; } -.icon-arrow-right { background-position: -264px -96px; } -.icon-arrow-up { background-position: -289px -96px; } // 1px off -.icon-arrow-down { background-position: -312px -96px; } -.icon-share-alt { background-position: -336px -96px; } -.icon-resize-full { background-position: -360px -96px; } -.icon-resize-small { background-position: -384px -96px; } -.icon-plus { background-position: -408px -96px; } -.icon-minus { background-position: -433px -96px; } -.icon-asterisk { background-position: -456px -96px; } - -.icon-exclamation-sign { background-position: 0 -120px; } -.icon-gift { background-position: -24px -120px; } -.icon-leaf { background-position: -48px -120px; } -.icon-fire { background-position: -72px -120px; } -.icon-eye-open { background-position: -96px -120px; } -.icon-eye-close { background-position: -120px -120px; } -.icon-warning-sign { background-position: -144px -120px; } -.icon-plane { background-position: -168px -120px; } -.icon-calendar { background-position: -192px -120px; } -.icon-random { background-position: -216px -120px; width: 16px; } -.icon-comment { background-position: -240px -120px; } -.icon-magnet { background-position: -264px -120px; } -.icon-chevron-up { background-position: -288px -120px; } -.icon-chevron-down { background-position: -313px -119px; } // 1px, 1px off -.icon-retweet { background-position: -336px -120px; } -.icon-shopping-cart { background-position: -360px -120px; } -.icon-folder-close { background-position: -384px -120px; width: 16px; } -.icon-folder-open { background-position: -408px -120px; width: 16px; } -.icon-resize-vertical { background-position: -432px -119px; } // 1px, 1px off -.icon-resize-horizontal { background-position: -456px -118px; } // 1px, 2px off - -.icon-hdd { background-position: 0 -144px; } -.icon-bullhorn { background-position: -24px -144px; } -.icon-bell { background-position: -48px -144px; } -.icon-certificate { background-position: -72px -144px; } -.icon-thumbs-up { background-position: -96px -144px; } -.icon-thumbs-down { background-position: -120px -144px; } -.icon-hand-right { background-position: -144px -144px; } -.icon-hand-left { background-position: -168px -144px; } -.icon-hand-up { background-position: -192px -144px; } -.icon-hand-down { background-position: -216px -144px; } -.icon-circle-arrow-right { background-position: -240px -144px; } -.icon-circle-arrow-left { background-position: -264px -144px; } -.icon-circle-arrow-up { background-position: -288px -144px; } -.icon-circle-arrow-down { background-position: -312px -144px; } -.icon-globe { background-position: -336px -144px; } -.icon-wrench { background-position: -360px -144px; } -.icon-tasks { background-position: -384px -144px; } -.icon-filter { background-position: -408px -144px; } -.icon-briefcase { background-position: -432px -144px; } -.icon-fullscreen { background-position: -456px -144px; } diff --git a/less/tables.less b/less/tables.less index 0e35271e11fe5e0ad3d9e547d5cb56454e616719..fa5fd554b22b38ca7b90a33728ddc39b79569a5d 100644 --- a/less/tables.less +++ b/less/tables.less @@ -3,36 +3,33 @@ // -------------------------------------------------- -// BASE TABLES -// ----------------- - table { max-width: 100%; - background-color: @tableBackground; - border-collapse: collapse; - border-spacing: 0; + background-color: @table-bg; +} +th { + text-align: left; } + // BASELINE STYLES // --------------- .table { width: 100%; - margin-bottom: @baseLineHeight; + margin-bottom: @line-height-computed; // Cells - th, - td { + thead > tr > th, + tbody > tr > th, + thead > tr > td, + tbody > tr > td { padding: 8px; - line-height: @baseLineHeight; - text-align: left; + line-height: @line-height-base; vertical-align: top; - border-top: 1px solid @tableBorder; - } - th { - font-weight: bold; + border-top: 1px solid @table-border-color; } // Bottom align for column headings - thead th { + thead > tr > th { vertical-align: bottom; } // Remove top border from thead by default @@ -46,12 +43,12 @@ table { } // Account for multiple tbody instances tbody + tbody { - border-top: 2px solid @tableBorder; + border-top: 2px solid @table-border-color; } // Nesting .table { - background-color: @bodyBackground; + background-color: @body-bg; } } @@ -61,184 +58,185 @@ table { // ------------------------------- .table-condensed { - th, - td { + thead > tr > th, + tbody > tr > th, + thead > tr > td, + tbody > tr > td { padding: 4px 5px; } } + // BORDERED VERSION // ---------------- .table-bordered { - border: 1px solid @tableBorder; + border: 1px solid @table-border-color; border-collapse: separate; // Done so we can round those corners! - *border-collapse: collapse; // IE7 can't round corners anyway border-left: 0; - .border-radius(@baseBorderRadius); - th, - td { - border-left: 1px solid @tableBorder; + border-radius: @border-radius-base; + + > thead > tr > th, + > tbody > tr > th, + > thead > tr > td, + > tbody > tr > td { + border-left: 1px solid @table-border-color; } // Prevent a double border - caption + thead tr:first-child th, - caption + tbody tr:first-child th, - caption + tbody tr:first-child td, - colgroup + thead tr:first-child th, - colgroup + tbody tr:first-child th, - colgroup + tbody tr:first-child td, - thead:first-child tr:first-child th, - tbody:first-child tr:first-child th, - tbody:first-child tr:first-child td { + > caption + thead > tr:first-child th, + > caption + tbody > tr:first-child th, + > caption + tbody > tr:first-child td, + > colgroup + thead > tr:first-child th, + > colgroup + tbody > tr:first-child th, + > colgroup + tbody > tr:first-child td, + > thead:first-child > tr:first-child th, + > tbody:first-child > tr:first-child 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(@baseBorderRadius); + > 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(@baseBorderRadius); + > 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(@baseBorderRadius); + > 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(@baseBorderRadius); + > 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; } // Clear border-radius for first and last td in the last row in the last tbody for table with tfoot - tfoot + tbody:last-child tr:last-child td:first-child { - .border-bottom-left-radius(0); + > tfoot + tbody:last-child > tr:last-child > td:first-child { + border-bottom-left-radius: 0; } - tfoot + tbody:last-child tr:last-child td:last-child { - .border-bottom-right-radius(0); + > tfoot + tbody:last-child > tr:last-child > td:last-child { + border-bottom-right-radius: 0; } // 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(@baseBorderRadius); + > 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(@baseBorderRadius); + > 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; } } - // ZEBRA-STRIPING // -------------- // Default zebra-stripe styles (alternating gray and transparent backgrounds) .table-striped { - tbody { + > tbody { > tr:nth-child(odd) > td, > tr:nth-child(odd) > th { - background-color: @tableBackgroundAccent; + background-color: @table-bg-accent; } } } + // HOVER EFFECT // ------------ + // Placed here since it has to come after the potential zebra striping .table-hover { - tbody { - tr:hover > td, - tr:hover > th { - background-color: @tableBackgroundHover; + > tbody { + > tr:hover > td, + > tr:hover > th { + background-color: @table-bg-hover; } } } + // TABLE CELL SIZING // ----------------- -// Reset default grid behavior -table td[class*="span"], -table th[class*="span"], -.row-fluid table td[class*="span"], -.row-fluid table th[class*="span"] { - display: table-cell; - float: none; // undo default grid column styles - margin-left: 0; // undo default grid column styles +// Reset default table behavior +table col[class*="col-span-"] { + float: none; + display: table-column; } - -// Change the column widths to account for td/th padding -.table td, -.table th { - &.span1 { .tableColumns(1); } - &.span2 { .tableColumns(2); } - &.span3 { .tableColumns(3); } - &.span4 { .tableColumns(4); } - &.span5 { .tableColumns(5); } - &.span6 { .tableColumns(6); } - &.span7 { .tableColumns(7); } - &.span8 { .tableColumns(8); } - &.span9 { .tableColumns(9); } - &.span10 { .tableColumns(10); } - &.span11 { .tableColumns(11); } - &.span12 { .tableColumns(12); } +table td[class*="col-span-"], +table th[class*="col-span-"] { + float: none; + display: table-cell; } - - // TABLE BACKGROUNDS // ----------------- // Exact selectors below required to override .table-striped -.table tbody tr { +.table > tbody > tr { + > td.success, + > th.success, &.success > td { - background-color: @successBackground; + background-color: @state-success-bg; + border-color: @state-success-border; } - &.error > td { - background-color: @errorBackground; + > td.danger, + > th.danger, + &.danger > td { + background-color: @state-danger-bg; + border-color: @state-danger-border; } + > td.warning, + > th.warning, &.warning > td { - background-color: @warningBackground; - } - &.info > td { - background-color: @infoBackground; + background-color: @state-warning-bg; + border-color: @state-warning-border; } } // Hover states for .table-hover -.table-hover tbody tr { +.table-hover > tbody > tr { + > td.success:hover, + > th.success:hover, &.success:hover > td { - background-color: darken(@successBackground, 5%); + background-color: darken(@state-success-bg, 5%); + border-color: darken(@state-success-border, 5%); } - &.error:hover > td { - background-color: darken(@errorBackground, 5%); + > td.danger:hover, + > th.danger:hover, + &.danger:hover > td { + background-color: darken(@state-danger-bg, 5%); + border-color: darken(@state-danger-border, 5%); } + > td.warning:hover, + > th.warning:hover, &.warning:hover > td { - background-color: darken(@warningBackground, 5%); - } - &.info:hover > td { - background-color: darken(@infoBackground, 5%); + background-color: darken(@state-warning-bg, 5%); + border-color: darken(@state-warning-border, 5%); } } diff --git a/less/tests/buttons.html b/less/tests/buttons.html deleted file mode 100644 index 9b3c2c572c0542792fa4ac3a2513596352a9d10b..0000000000000000000000000000000000000000 --- a/less/tests/buttons.html +++ /dev/null @@ -1,139 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Buttons · Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 30px; - padding-bottom: 30px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <h2>Dropups</h2> - <div class="btn-toolbar"> - <div class="btn-group dropup"> - <button class="btn">Dropup</button> - <button class="btn dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-primary">Dropup</button> - <button class="btn btn-primary dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-danger">Dropup</button> - <button class="btn btn-danger dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-warning">Dropup</button> - <button class="btn btn-warning dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-success">Dropup</button> - <button class="btn btn-success dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-info">Dropup</button> - <button class="btn btn-info dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - <div class="btn-group dropup"> - <button class="btn btn-inverse">Dropup</button> - <button class="btn btn-inverse dropdown-toggle" data-toggle="dropdown"><span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </div><!-- /btn-group --> - </div><!-- /btn-toolbar --> - - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/less/tests/css-tests.css b/less/tests/css-tests.css deleted file mode 100644 index 0f5604ee6866817f7222c3b4b7d7086b7decba97..0000000000000000000000000000000000000000 --- a/less/tests/css-tests.css +++ /dev/null @@ -1,150 +0,0 @@ -/*! - * Bootstrap CSS Tests - */ - - -/* Remove background image */ -body { - background-image: none; -} - -/* Space out subhead */ -.subhead { - margin-bottom: 36px; -} -/*h4 { - margin-bottom: 5px; -} -*/ - -.type-test { - margin-bottom: 20px; - padding: 0 20px 20px; - background: url(../../docs/assets/img/grid-baseline-20px.png); -} -.type-test h1, -.type-test h2, -.type-test h3, -.type-test h4, -.type-test h5, -.type-test h6 { - background-color: rgba(255,0,0,.2); -} - - -/* colgroup tests */ -.col1 { - background-color: rgba(255,0,0,.1); -} -.col2 { - background-color: rgba(0,255,0,.1); -} -.col3 { - background-color: rgba(0,0,255,.1); -} - - -/* Fluid row inputs */ -#rowInputs .row > [class*=span], -#fluidRowInputs .row-fluid > [class*=span] { - background-color: rgba(255,0,0,.1); -} - - -/* Fluid grid */ -.fluid-grid { - margin-bottom: 45px; -} -.fluid-grid .row { - height: 40px; - padding-top: 10px; - margin-top: 10px; - color: #ddd; - text-align: center; -} -.fluid-grid .span1 { - background-color: #999; -} - - -/* Gradients */ - -[class^="gradient-"] { - width: 100%; - height: 400px; - margin: 20px 0; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} - -.gradient-horizontal { - background-color: #333333; - background-image: -moz-linear-gradient(left, #555555, #333333); - background-image: -webkit-gradient(linear, 0 0, 100% 0, from(#555555), to(#333333)); - background-image: -webkit-linear-gradient(left, #555555, #333333); - background-image: -o-linear-gradient(left, #555555, #333333); - background-image: linear-gradient(to right, #555555, #333333); - background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=1); -} - -.gradient-vertical { - background-color: #474747; - background-image: -moz-linear-gradient(top, #555555, #333333); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#555555), to(#333333)); - background-image: -webkit-linear-gradient(top, #555555, #333333); - background-image: -o-linear-gradient(top, #555555, #333333); - background-image: linear-gradient(to bottom, #555555, #333333); - background-repeat: repeat-x; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff555555', endColorstr='#ff333333', GradientType=0); -} - -.gradient-directional { - background-color: #333333; - background-image: -moz-linear-gradient(45deg, #555555, #333333); - background-image: -webkit-linear-gradient(45deg, #555555, #333333); - background-image: -o-linear-gradient(45deg, #555555, #333333); - background-image: linear-gradient(45deg, #555555, #333333); - background-repeat: repeat-x; -} - -.gradient-vertical-three { - background-color: #8940a5; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f)); - background-image: -webkit-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-image: -moz-linear-gradient(top, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -o-linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-image: linear-gradient(#00b3ee, #7a43b6 50%, #c3325f); - background-repeat: no-repeat; - filter: progid:dximagetransform.microsoft.gradient(startColorstr='#ff00b3ee', endColorstr='#ffc3325f', GradientType=0); -} - -.gradient-radial { - background-color: #333333; - background-image: -webkit-gradient(radial, center center, 0, center center, 460, from(#555555), to(#333333)); - background-image: -webkit-radial-gradient(circle, #555555, #333333); - background-image: -moz-radial-gradient(circle, #555555, #333333); - background-image: -o-radial-gradient(circle, #555555, #333333); - background-repeat: no-repeat; -} - -.gradient-striped { - background-color: #555555; - 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: -o-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); -} - -.gradient-horizontal-three { - background-color: #00b3ee; - background-image: -webkit-gradient(left, linear, 0 0, 0 100%, from(#00b3ee), color-stop(50%, #7a43b6), to(#c3325f)); - background-image: -webkit-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -moz-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: -o-linear-gradient(left, #00b3ee, #7a43b6 50%, #c3325f); - background-image: linear-gradient(to right, #00b3ee, #7a43b6 50%, #c3325f); - background-repeat: no-repeat; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00b3ee', endColorstr='#c3325f', GradientType=0); -} diff --git a/less/tests/css-tests.html b/less/tests/css-tests.html deleted file mode 100644 index c69688c76360c63805bf5d12e2bb78646ffb4638..0000000000000000000000000000000000000000 --- a/less/tests/css-tests.html +++ /dev/null @@ -1,1399 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>CSS Tests · Twitter Bootstrap</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - <link href="../../docs/assets/css/docs.css" rel="stylesheet"> - <link href="../../docs/assets/js/google-code-prettify/prettify.css" rel="stylesheet"> - - <!-- CSS just for the tests page --> - <link href="css-tests.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - - <!-- Navbar - ================================================== --> - <div class="navbar navbar-inverse navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <a class="brand" href="../../docs/index.html">Bootstrap</a> - </div> - </div> - </div> - - -<!-- Masthead -================================================== --> -<header class="jumbotron subhead" id="overview"> - <div class="container"> - <h1>CSS Tests</h1> - <p class="lead">One stop shop for quick debugging and edge-case tests of CSS.</p> - </div> -</header> - - -<div class="bs-docs-canvas"> - - <div class="container"> - - - -<!-- Typography -================================================== --> - -<div class="page-header"> - <h1>Typography</h1> -</div> - -<div class="row"> - <div class="span6"> - <div class="type-test"> - <h1>h1. Heading 1</h1> - <h2>h2. Heading 2</h2> - <h3>h3. Heading 3</h3> - <h4>h4. Heading 4</h4> - <h5>h5. Heading 5</h5> - <h6>h6. Heading 6</h6> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - </div> - </div> - <div class="span6"> - <div class="type-test"> - <h1>h1. Heading 1</h1> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h2>h2. Heading 2</h2> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h3>h3. Heading 3</h3> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h4>h4. Heading 4</h4> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h5>h5. Heading 5</h5> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - <h6>h6. Heading 6</h6> - <p>Sed posuere consectetur est at lobortis. Maecenas sed diam eget risus varius blandit sit amet non magna. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p> - </div> - </div> -</div> - - - -<!-- Responsive images -================================================== --> - -<div class="page-header"> - <h1>Responsive images</h1> -</div> - -<div class="row"> - <div class="span4"> - <img data-src="holder.js/600x600" height="200"> - </div> - <div class="span4"> - <img data-src="holder.js/600x600"> - </div> - <div class="span4"> - <img data-src="holder.js/600x600"> - </div> -</div> - -<br> - -<div class="row"> - <div class="span4"> - <img data-src="holder.js/600x900" style="width: 200px;"> - </div> - <div class="span4"> - <img data-src="holder.js/200x300"> - </div> - <div class="span4"> - <img data-src="holder.js/600x600"> - </div> -</div> - -<br><br> - - - - -<!-- Fluid grid -================================================== --> - -<div class="page-header"> - <h1>Fluid grids</h1> -</div> - -<div class="fluid-grid"> - <div class="row"> - <div class="span12">12 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span11">11 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span1">1 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span10">10 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span2">2 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span9">9 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span3">3 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span8">8 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span4">4 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span7">7 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span5">5 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> - <div class="row"> - <div class="span6">6 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - <div class="span6">6 - <div class="row-fluid"> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - <div class="span1">1</div> - </div> - </div> - </div> -</div> <!-- fluid grids --> - - - -<!-- Tables -================================================== --> - -<div class="page-header"> - <h1>Tables</h1> -</div> - -<div class="row"> - <div class="span6"> - <h4>Bordered without thead</h4> - <table class="table table-bordered"> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - </table> - <h4>Bordered without thead, with caption</h4> - <table class="table table-bordered"> - <caption>Table caption</caption> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - </table> - <h4>Bordered without thead, with colgroup</h4> - <table class="table table-bordered"> - <colgroup> - <col class="col1"> - <col class="col2"> - <col class="col3"> - </colgroup> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - <tfoot> - <tr> - <td>3</td> - <td>6</td> - <td>9</td> - </tr> - </tfoot> - </table> - <h4>Bordered with thead, with colgroup</h4> - <table class="table table-bordered"> - <colgroup> - <col class="col1"> - <col class="col2"> - <col class="col3"> - </colgroup> - <thead> - <tr> - <th>A</th> - <th>B</th> - <th>C</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - <tfoot> - <tr> - <td>3</td> - <td>6</td> - <td>9</td> - </tr> - </tfoot> - </table> - </div><!--/span--> - <div class="span6"> - <h4>Bordered with thead and caption</h4> - <table class="table table-bordered"> - <caption>Table caption</caption> - <thead> - <tr> - <th>1</th> - <th>2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td>2</td> - <td>3</td> - </tr> - </tbody> - <tfoot> - <tr> - <td>3</td> - <td>6</td> - <td>9</td> - </tr> - </tfoot> - </table> - <h4>Bordered with rowspan and colspan</h4> - <table class="table table-bordered"> - <thead> - <tr> - <th>1</th> - <th>2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td colspan="2">1 and 2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td rowspan="2">2</td> - <td>3</td> - </tr> - <tr> - <td rowspan="2">1</td> - <td>3</td> - </tr> - <tr> - <td colspan="2">2 and 3</td> - </tr> - </tbody> - </table> - </div><!--/span--> -</div><!--/row--> - - -<h4>Grid sizing</h4> -<div class="row"> - <div class="span12"> - <table class="table table-bordered"> - <thead> - <tr> - <th class="span3">1</th> - <th class="span4">2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td colspan="2">1 and 2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td rowspan="2">2</td> - <td>3</td> - </tr> - <tr> - <td rowspan="2">1</td> - <td>3</td> - </tr> - <tr> - <td colspan="2">2 and 3</td> - </tr> - </tbody> - </table> - </div> -</div><!--/row--> - -<h4>Nesting and striping</h4> -<table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Test</th> - </tr> - </thead> - <tbody> - <tr> - <td> - <table class="table table-bordered table-striped"> - <thead> - <tr> - <th>Test</th> - <th>Test</th> - </tr> - </thead> - <tbody> - <tr> - <td> - test - </td> - <td> - test - </td> - </tr> - <tr> - <td> - test - </td> - <td> - test - </td> - </tr> - <tr> - <td> - test - </td> - <td> - test - </td> - </tr> - </tbody> - </table> - </td> - </tr> - </tbody> -</table> - -<h4>Fluid grid sizing</h4> -<div class="row-fluid"> - <div class="span12"> - <table class="table table-bordered"> - <thead> - <tr> - <th class="span3">1</th> - <th class="span4">2</th> - <th>3</th> - </tr> - </thead> - <tbody> - <tr> - <td colspan="2">1 and 2</td> - <td>3</td> - </tr> - <tr> - <td>1</td> - <td rowspan="2">2</td> - <td>3</td> - </tr> - <tr> - <td rowspan="2">1</td> - <td>3</td> - </tr> - <tr> - <td colspan="2">2 and 3</td> - </tr> - </tbody> - </table> - </div> -</div><!--/row--> - - - -<!-- Forms -================================================== --> - -<div class="page-header"> - <h1>Forms</h1> -</div> - -<h4>Buttons and button groups</h4> -<form class="form-inline"> - <button class="btn btn-success">Save</button> - <button class="btn btn-info">Add new</button> - <div class="btn-group"> - <a class="btn dropdown-toggle" data-toggle="dropdown" href="#"> - <i class="icon-user"></i> User - <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#">Profile</a></li> - <li class="divider"></li> - <li><a href="#">Sign Out</a></li> - </ul> - </div> -</form> - -<h4>Horizontal form errors</h4> -<form class="form-horizontal"> - <div class="control-group error"> - <label class="control-label" for="inputError">Radio with error</label> - <div class="controls"> - <label class="radio"> - <input type="radio" id="inputError"> Oh hai - </label> - <span class="help-inline">Please correct the error</span> - </div> - </div> -</form> - -<div class="row"> - <div class="span4"> - <h4>Prepend and append on inputs</h4> - <form> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on">@</span> - <input class="span2" id="prependedInput" size="16" type="text"> - </div> - </div> - <div class="controls"> - <div class="input-append"> - <input class="span2" id="prependedInput" size="16" type="text"> - <span class="add-on">@</span> - </div> - </div> - <div class="controls"> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <input class="span2" id="prependedInput" size="16" type="text"> - <span class="add-on">.00</span> - </div> - </div> - </form> - </div><!--/span--> - <div class="span4"> - <h4>Prepend and append with uneditable</h4> - <form> - <div class="input-prepend"> - <span class="add-on">$</span> - <span class="span2 uneditable-input">Some value here</span> - </div> - <div class="input-append"> - <span class="span2 uneditable-input">Some value here</span> - <span class="add-on">.00</span> - </div> - <div class="input-prepend input-append"> - <span class="add-on">$</span> - <span class="span2 uneditable-input">Some value here</span> - <span class="add-on">.00</span> - </div> - </form> - </div><!--/span--> - <div class="span4"> - <h4>Prepend with type="submit"</h4> - <form class="form-search"> - <div class="input-append"> - <input type="text" class="span2 search-query" value="" name="q"> - <input type="submit" value="Search" class="btn"> - </div> - </form> - <div class="input-append"> - <input type="text" class="span2" value="" name=""> - <input type="submit" value="Button" class="btn"> - </div> - <div class="input-append"> - <input type="text" size="16" id="appendedInputButtons" class="span2"> - <input type="submit" value="Search" class="btn"> - <button type="button" class="btn">Options</button> - </div> - </div><!--/span--> -</div><!--/row--> - -<h4>Fluid prepended and appended inputs</h4> -<div class="row-fluid"> - <div class="span6"> - <form> - <div class="controls"> - <div class="input-prepend"> - <span class="add-on">@</span><input class="span2" id="prependedInput" size="16" type="text"> - </div> - </div> - <div class="controls"> - <div class="input-append"> - <input class="span2" id="prependedInput" size="16" type="text"><span class="add-on">@</span> - </div> - </div> - <div class="controls"> - <div class="input-prepend input-append"> - <span class="add-on">$</span><input class="span2" id="prependedInput" size="16" type="text"><span class="add-on">.00</span> - </div> - </div> - </form> - </div> -</div> - -<h4>Fixed row with inputs</h4> -<p>Inputs should not extend past the light red background, set on their parent, a <code>.span*</code> column.</p> - -<div class="rowInputs"> - <div class="row"> - <div class="span12"> - <input type="text" class="span1" placeholder="span1"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span2" placeholder="span2"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span3" placeholder="span3"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span4" placeholder="span4"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span5" placeholder="span5"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span6" placeholder="span6"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span7" placeholder="span7"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span8" placeholder="span8"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span9" placeholder="span9"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span10" placeholder="span10"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span11" placeholder="span11"> - </div><!--/span--> - </div><!--/row--> - <div class="row"> - <div class="span12"> - <input type="text" class="span12" placeholder="span12"> - </div><!--/span--> - </div><!--/row--> -</div> -<br> - -<h4>Fluid row with inputs</h4> -<p>Inputs should not extend past the light red background, set on their parent, a <code>.span*</code> column.</p> -<div id="fluidRowInputs"> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span1" placeholder="span1"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span2" placeholder="span2"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span3" placeholder="span3"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span4" placeholder="span4"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span5" placeholder="span5"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span6" placeholder="span6"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span7" placeholder="span7"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span8" placeholder="span8"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span9" placeholder="span9"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span10" placeholder="span10"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span11" placeholder="span11"> - </div><!--/span--> - </div><!--/row--> - <div class="row-fluid"> - <div class="span12"> - <input type="text" class="span12" placeholder="span12"> - </div><!--/span--> - </div><!--/row--> -</div> - -<br> - -<h4>Inline form in fluid row</h4> - -<div class="row-fluid"> - <div class="span12"> - <form class="form-inline"> - <input type="text" class="span3" placeholder="Email"> - <input type="password" class="span3" placeholder="Password"> - <label class="checkbox"> - <input type="checkbox"> Remember me - </label> - <button type="submit" class="btn">Sign in</button> - </form> - </div> -</div> - - -<br> - - -<h4>Fluid textarea at .span12</h4> -<div class="row-fluid"> - <div class="span12"> - <textarea class="span12"></textarea> - </div> -</div> - - -<br> - - -<h4>Selects</h4> -<form> - <select class="span4"> - <option>Option</option> - </select> -</form> - - -<br> - - - - -<!-- Dropdowns -================================================== --> - -<div class="page-header"> - <h1>Dropdowns</h1> -</div> - -<h4>Dropdown link with hash URL</h4> -<ul class="nav nav-pills"> - <li class="active"><a href="#">Link</a></li> - <li><a href="#">Example link</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" href="#"> - Dropdown <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> -</ul> - -<h4>Dropdown link with custom URL and data-target</h4> -<ul class="nav nav-pills"> - <li class="active"><a href="#">Link</a></li> - <li><a href="#">Example link</a></li> - <li class="dropdown"> - <a class="dropdown-toggle" data-toggle="dropdown" data-target="#" href="path/to/page.html"> - Dropdown <span class="caret"></span> - </a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> - </li> -</ul> - -<h4>Dropdown on a button</h4> -<div style="position: relative;"> - <button class="btn" type="button" data-toggle="dropdown">Dropdown <span class="caret"></span></button> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <li><a href="#">Another action</a></li> - <li><a href="#">Something else here</a></li> - <li class="divider"></li> - <li><a href="#">Separated link</a></li> - </ul> -</div> - -<br> - - -<!-- Thumbnails -================================================== --> - -<div class="page-header"> - <h1>Thumbnails</h1> -</div> - -<h4>Default thumbnails (no grid sizing)</h4> -<ul class="thumbnails"> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> - <li class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </li> -</ul> - -<!-- NOT CURRENTLY SUPPORTED -<h4>Offset thumbnails</h4> -<ul class="thumbnails"> - <li class="span3 offset3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> -</ul> ---> - -<h4>Standard grid sizing</h4> -<ul class="thumbnails"> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3 offset3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span3"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> -</ul> - -<h4>Fluid thumbnails</h4> -<div class="row-fluid"> - <div class="span8"> - <ul class="thumbnails"> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - <li class="span4"> - <a href="#" class="thumbnail"> - <img data-src="holder.js/260x180" alt=""> - </a> - </li> - </ul> - </div> -</div> - - - -<!-- Tabs -================================================== --> - -<div class="page-header"> - <h1>Tabs</h1> -</div> - -<div class="tabbable tabs-left" style="margin-bottom: 18px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1" data-toggle="tab">Section 1</a></li> - <li><a href="#tab2" data-toggle="tab">Section 2</a></li> - <li><a href="#tab3" data-toggle="tab">Section 3</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1"> - <p>I'm in Section 1.</p> - - <div class="tabbable" style="background: #f5f5f5; padding: 20px;"> - <ul class="nav nav-tabs"> - <li class="active"><a href="#tab1-1" data-toggle="tab">1.1</a></li> - <li><a href="#tab1-2" data-toggle="tab">1.2</a></li> - <li><a href="#tab1-3" data-toggle="tab">1.3</a></li> - </ul> - <div class="tab-content" style="padding-bottom: 9px; border-bottom: 1px solid #ddd;"> - <div class="tab-pane active" id="tab1-1"> - <p>I'm in Section 1.1.</p> - </div> - <div class="tab-pane" id="tab1-2"> - <p>I'm in Section 1.2.</p> - </div> - <div class="tab-pane" id="tab1-3"> - <p>I'm in Section 1.3.</p> - </div> - </div> - </div> - </div> - <div class="tab-pane" id="tab2"> - <p>Howdy, I'm in Section 2.</p> - </div> - <div class="tab-pane" id="tab3"> - <p>What up girl, this is Section 3.</p> - </div> - </div> -</div> <!-- /tabbable --> - -<br> - - -<!-- Labels -================================================== --> - -<div class="page-header"> - <h1>Labels</h1> -</div> - -<div class="row"> - <div class="span4"> - <h4>Inline label</h4> - <p>Cras justo odio, dapibus ac facilisis in, egestas eget quam. Maecenas sed diam <span class="label label-warning">Label name</span> eget risus varius blandit sit amet non magna. Fusce <code>.class-name</code> dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p> - </div><!--/span--> - <div class="span4"> - <form class="form-horizontal"> - <label>Example label</label> - <input type="text" placeholder="Input"> <span class="help-inline"><span class="label">Hey!</span> Read this.</span> - </form> - </div><!--/span--> - <div class="span4"> - <button class="btn">Action <span class="badge">2</span></button> - <button class="btn">Action <span class="label">2</span></button> - </div><!--/span--> -</div><!--/row--> - -<br> - - -<!-- Button groups -================================================== --> - -<div class="page-header"> - <h1>Buttons</h1> -</div> - -<table class="table table-bordered"> - <tbody> - <tr> - <td> - Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue. Donec ullamcorper nulla non metus auctor fringilla. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. - </td> - <td> - <div class="btn-group"> - <button class="btn">1</button> - <button class="btn">2</button> - <button class="btn">3</button> - <button class="btn">4</button> - </div> - </td> - </tr> - </tbody> -</table> - -<h4>Mini buttons: text and icon</h4> -<div class="btn-group"> - <button class="btn btn-mini">Button text</button> - <button class="btn btn-mini"><i class="icon-cog"></i></button> -</div> - -<br> - - - -<!-- Responsive utility classes -================================================== --> - -<div class="page-header"> - <h1>Responsive utility classes</h1> -</div> - -<h4>Visible on...</h4> -<ul class="responsive-utilities-test visible-on"> - <li>Phone<span class="visible-phone">✔ Phone</span></li> - <li>Tablet<span class="visible-tablet">✔ Tablet</span></li> - <li>Desktop<span class="visible-desktop">✔ Desktop</span></li> -</ul> -<ul class="responsive-utilities-test visible-on"> - <li>Phone + Tablet<span class="visible-phone visible-tablet">✔ Phone + Tablet</span></li> - <li>Tablet + Desktop<span class="visible-tablet visible-desktop">✔ Tablet + Desktop</span></li> - <li>All<span class="visible-phone visible-tablet visible-desktop">✔ All</span></li> -</ul> - -<h4>Hidden on...</h4> -<ul class="responsive-utilities-test hidden-on"> - <li>Phone<span class="hidden-phone">✔ Phone</span></li> - <li>Tablet<span class="hidden-tablet">✔ Tablet</span></li> - <li>Desktop<span class="hidden-desktop">✔ Desktop</span></li> -</ul> -<ul class="responsive-utilities-test hidden-on"> - <li>Phone + Tablet<span class="hidden-phone hidden-tablet">✔ Phone + Tablet</span></li> - <li>Tablet + Desktop<span class="hidden-tablet hidden-desktop">✔ Tablet + Desktop</span></li> - <li>All<span class="hidden-phone hidden-tablet hidden-desktop">✔ All</span></li> -</ul> - - - -<!-- Gradients -================================================== --> - -<div class="page-header"> - <h1>Gradients</h1> -</div> - -<h4>Horizontal</h4> -<div class="gradient-horizontal"></div> - -<h4>Vertical</h4> -<div class="gradient-vertical"></div> - -<h4>Directional</h4> -<div class="gradient-directional"></div> - -<h4>Three colors</h4> -<div class="gradient-vertical-three"></div> - -<h4>Radial</h4> -<div class="gradient-radial"></div> - -<h4>Striped</h4> -<div class="gradient-striped"></div> - -<h4>Horizontal three colors</h4> -<div class="gradient-horizontal-three"></div> - - - -<div class="page-header"> - <h1>Alerts</h1> -</div> - -<h4>Alert default</h4> -<div class="alert"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Alert!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Alert!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Success</h4> -<div class="alert alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Success!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-success"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Success!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Info</h4> -<div class="alert alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Info!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-info"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Info!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Warning</h4> -<div class="alert "> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Warning!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-warning"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Warning!</strong> Best check yourself, you're not looking too good.</p> -</div> - -<h4>Error</h4> -<div class="alert alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <strong>Error!</strong> Best check yourself, you're not looking too good. -</div> -<div class="alert alert-block alert-error"> - <button type="button" class="close" data-dismiss="alert">×</button> - <p><strong>Error!</strong> Best check yourself, you're not looking too good.</p> -</div> - - - </div><!-- /container --> - - - - <!-- Footer - ================================================== --> - <footer class="footer"> - <div class="container"> - <p class="pull-right"><a href="#">Back to top</a></p> - <p>Designed and built with all the love in the world <a href="http://twitter.com/twitter" target="_blank">@twitter</a> 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 the <a href="http://www.apache.org/licenses/LICENSE-2.0" target="_blank">Apache License v2.0</a>. Documentation licensed under <a href="http://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.</p> - <p>Icons from <a href="http://glyphicons.com">Glyphicons Free</a>, licensed 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">Read the blog</a></li> - <li><a href="https://github.com/twitter/bootstrap/issues?state=open">Submit issues</a></li> - <li><a href="https://github.com/twitter/bootstrap/wiki">Roadmap and changelog</a></li> - </ul> - </div> - </footer> - -</div> - - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/google-code-prettify/prettify.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - <script src="../../docs/assets/js/application.js"></script> - - - </body> -</html> diff --git a/less/tests/forms-responsive.html b/less/tests/forms-responsive.html deleted file mode 100644 index c3e208d0215fbb26ec210930b12920a77bbdc035..0000000000000000000000000000000000000000 --- a/less/tests/forms-responsive.html +++ /dev/null @@ -1,71 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - <style> - body { - padding-top: 30px; - padding-bottom: 30px; - } - </style> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <form class="container"> - - <div class="page-header"> - <h1>Fixed grid</h1> - </div> - - <h3>Vertical alignment</h3> - <input type="text" class="span2" placeholder="span2"> - <select class="span2"><option>span2</option></select> - <span class="uneditable-input span2">span1</span> - - <h3>Width across elements</h3> - <div> - <input type="text" class="span2" placeholder="span2"> - </div> - <div> - <select class="span2"><option>span2</option></select> - </div> - <div> - <span class="uneditable-input span2">span2</span> - </div> - - - <div class="page-header"> - <h1>Fluid grid</h1> - </div> - - <div class="row-fluid"> - <input type="text" class="span2" placeholder="span2"> - <select class="span2"><option>span2</option></select> - <span class="uneditable-input span2">span1</span> - </div> - - </form> <!-- /container --> - - </body> -</html> diff --git a/less/tests/forms.html b/less/tests/forms.html deleted file mode 100644 index a63d728a0084b6c766c550967c8d4b0c39c390b6..0000000000000000000000000000000000000000 --- a/less/tests/forms.html +++ /dev/null @@ -1,179 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - <style> - body { - padding-top: 30px; - padding-bottom: 30px; - } - </style> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.ico"> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - </head> - - <body> - - <form class="container"> - - <div class="page-header"> - <h1>Form controls</h1> - </div> - - <div class="row"> - <div class="span4"> - - <label>Select</label> - <select> - <option>Select</option> - <option>Option 2</option> - <option>Option 3</option> - </select> - - <hr> - - <label>textarea</label> - <textarea>Textarea</textarea> - - <hr> - - <label>text</label> - <input type="text" value="Text input"> - - <hr> - - <label>password</label> - <input type="password" value="Password input"> - - <hr> - - <label>checkbox</label> - <input type="checkbox" value=""> - - <hr> - - <label>radio</label> - <input type="radio" value=""> - - <hr> - - <label>button</label> - <input type="button" value="Button"> - - <hr> - - <label>submit</label> - <input type="submit" value="Submit"> - - <hr> - - <label>reset</label> - <input type="reset" value="Reset"> - - </div><!-- /span4 --> - <div class="span4"> - - <label>file</label> - <input type="file" value=""> - - <hr> - - <label>hidden</label> - <input type="hidden" value="hidden"> - - <hr> - - <label>image</label> - <input type="image" value=""> - - <hr> - - <label>datetime</label> - <input type="datetime" value=""> - - <hr> - - <label>datetime-local</label> - <input type="datetime-local" value=""> - - <hr> - - <label>date</label> - <input type="date" value=""> - - <hr> - - <label>month</label> - <input type="month" value=""> - - <hr> - - <label>time</label> - <input type="time" value=""> - - <hr> - - <label>week</label> - <input type="week" value=""> - - </div><!-- /span4 --> - <div class="span4"> - - <label>number</label> - <input type="number" value=""> - - <hr> - - <label>range</label> - <input type="range" value=""> - - <hr> - - <label>email</label> - <input type="email" value=""> - - <hr> - - <label>url</label> - <input type="url" value=""> - - <hr> - - <label>search</label> - <input type="search" value=""> - - <hr> - - <label>tel</label> - <input type="tel" value=""> - - <hr> - - <label>color</label> - <input type="color" value=""> - - </div><!-- /span4 --> - </div><!-- /row --> - - </form> <!-- /container --> - - </body> -</html> diff --git a/less/tests/navbar-fixed-top.html b/less/tests/navbar-fixed-top.html deleted file mode 100644 index 2d9a7a718c266135ef7bb99459e5f889a83ba268..0000000000000000000000000000000000000000 --- a/less/tests/navbar-fixed-top.html +++ /dev/null @@ -1,104 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 60px; - padding-bottom: 30px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <!-- Fixed navbar --> - <div class="navbar navbar-fixed-top"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li><a href="./navbar.html">Default</a></li> - <li><a href="./navbar-static-top.html">Static top</a></li> - <li class="active"><a href="./navbar-fixed-top.html">Fixed top</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <div class="container"> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Navbar example</h1> - <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> - <p> - <a class="btn btn-large btn-primary" href="../components.html#navbar">View navbar docs »</a> - </p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/less/tests/navbar-static-top.html b/less/tests/navbar-static-top.html deleted file mode 100644 index 4bead8ec67294e61324122fc6ea2e946e08a2636..0000000000000000000000000000000000000000 --- a/less/tests/navbar-static-top.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-bottom: 30px; - } - .hero-unit { - margin-top: 20px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <!-- Static navbar --> - <div class="navbar navbar-static-top"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li><a href="./navbar.html">Default</a></li> - <li class="active"><a href="./navbar-static-top.html">Static top</a></li> - <li><a href="./navbar-fixed-top.html">Fixed top</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - - <div class="container"> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Navbar example</h1> - <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> - <p> - <a class="btn btn-large btn-primary" href="../components.html#navbar">View navbar docs »</a> - </p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/less/tests/navbar.html b/less/tests/navbar.html deleted file mode 100644 index d5ad4784ef69a2b98759b62d82b1490a0a319e2b..0000000000000000000000000000000000000000 --- a/less/tests/navbar.html +++ /dev/null @@ -1,107 +0,0 @@ -<!DOCTYPE html> -<html lang="en"> - <head> - <meta charset="utf-8"> - <title>Bootstrap, from Twitter</title> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <meta name="description" content=""> - <meta name="author" content=""> - - <!-- Le styles --> - <link href="../../docs/assets/css/bootstrap.css" rel="stylesheet"> - <style> - body { - padding-top: 0; - padding-bottom: 30px; - } - .navbar { - margin-top: 20px; - } - </style> - <link href="../../docs/assets/css/bootstrap-responsive.css" rel="stylesheet"> - - <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> - <!--[if lt IE 9]> - <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> - <![endif]--> - - <!-- Le fav and touch icons --> - <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../docs/assets/ico/apple-touch-icon-144-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../docs/assets/ico/apple-touch-icon-114-precomposed.png"> - <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../docs/assets/ico/apple-touch-icon-72-precomposed.png"> - <link rel="apple-touch-icon-precomposed" href="../../docs/assets/ico/apple-touch-icon-57-precomposed.png"> - <link rel="shortcut icon" href="../../docs/assets/ico/favicon.png"> - </head> - - <body> - - <div class="container"> - - <!-- Static navbar --> - <div class="navbar"> - <div class="navbar-inner"> - <div class="container"> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> - <a class="brand" href="#">Project name</a> - <div class="nav-collapse collapse"> - <ul class="nav"> - <li class="active"><a href="#">Home</a></li> - <li><a href="#about">About</a></li> - <li><a href="#contact">Contact</a></li> - <li class="dropdown"> - <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dropdown <b class="caret"></b></a> - <ul class="dropdown-menu"> - <li><a href="#">Action</a></li> - <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><a href="#">Separated link</a></li> - <li><a href="#">One more separated link</a></li> - </ul> - </li> - </ul> - <ul class="nav pull-right"> - <li class="active"><a href="./navbar.html">Default</a></li> - <li><a href="./navbar-static-top.html">Static top</a></li> - <li><a href="./navbar-fixed-top.html">Fixed top</a></li> - </ul> - </div><!--/.nav-collapse --> - </div> - </div> - </div> - - <!-- Main hero unit for a primary marketing message or call to action --> - <div class="hero-unit"> - <h1>Navbar example</h1> - <p>This example is a quick exercise to illustrate how the default, static navbar and fixed to top navbar work. It includes the responsive CSS and HTML, so it also adapts to your viewport and device.</p> - <p> - <a class="btn btn-large btn-primary" href="../components.html#navbar">View navbar docs »</a> - </p> - </div> - - </div> <!-- /container --> - - <!-- Le javascript - ================================================== --> - <!-- Placed at the end of the document so the pages load faster --> - <script src="../../docs/assets/js/jquery.js"></script> - <script src="../../docs/assets/js/bootstrap-transition.js"></script> - <script src="../../docs/assets/js/bootstrap-alert.js"></script> - <script src="../../docs/assets/js/bootstrap-modal.js"></script> - <script src="../../docs/assets/js/bootstrap-dropdown.js"></script> - <script src="../../docs/assets/js/bootstrap-scrollspy.js"></script> - <script src="../../docs/assets/js/bootstrap-tab.js"></script> - <script src="../../docs/assets/js/bootstrap-tooltip.js"></script> - <script src="../../docs/assets/js/bootstrap-popover.js"></script> - <script src="../../docs/assets/js/bootstrap-button.js"></script> - <script src="../../docs/assets/js/bootstrap-collapse.js"></script> - <script src="../../docs/assets/js/bootstrap-carousel.js"></script> - <script src="../../docs/assets/js/bootstrap-typeahead.js"></script> - - </body> -</html> diff --git a/less/thumbnails.less b/less/thumbnails.less index 4fd07d25337deb95d80277c9cd66fc1229d617f7..f31d78617f0845e4e6e7551c603ba89acb5f3ca9 100644 --- a/less/thumbnails.less +++ b/less/thumbnails.less @@ -3,41 +3,31 @@ // -------------------------------------------------- -// Note: `.thumbnails` and `.thumbnails > li` are overriden in responsive files +// Base classes +// For thumbnail block-level composite components and simple image styles -// Make wrapper ul behave like the grid -.thumbnails { - margin-left: -@gridGutterWidth; - list-style: none; - .clearfix(); -} -// Fluid rows have no left margin -.row-fluid .thumbnails { - margin-left: 0; -} - -// Float li to make thumbnails appear in a row -.thumbnails > li { - float: left; // Explicity set the float since we don't require .span* classes - margin-bottom: @baseLineHeight; - margin-left: @gridGutterWidth; +// The actual thumbnailed element +// Can be `a`, `div`, or `img` +.thumbnail, +.img-thumbnail { + padding: 4px; + line-height: @line-height-base; + background-color: @thumbnail-bg; + border: 1px solid @thumbnail-border; + border-radius: @thumbnail-border-radius; + .transition(all .2s ease-in-out); } - -// The actual thumbnail (can be `a` or `div`) .thumbnail { display: block; - padding: 4px; - line-height: @baseLineHeight; - border: 1px solid #ddd; - .border-radius(@baseBorderRadius); - .box-shadow(0 1px 3px rgba(0,0,0,.055)); - .transition(all .2s ease-in-out); } -// Add a hover/focus state for linked versions only +.img-thumbnail { + display: inline-block; +} + +// Add a hover state for linked versions only a.thumbnail:hover, a.thumbnail:focus { - border-color: @linkColor; - .box-shadow(0 1px 4px rgba(0,105,214,.25)); + border-color: @link-color; } // Images and captions @@ -49,5 +39,5 @@ a.thumbnail:focus { } .thumbnail .caption { padding: 9px; - color: @gray; + color: @thumbnail-caption-color; } diff --git a/less/tooltip.less b/less/tooltip.less index 83d5f2bd765596c6c131a1f02dd58505bd6c95fa..9dba6f04f21f484414d1f16871e8b13e9d16edda 100644 --- a/less/tooltip.less +++ b/less/tooltip.less @@ -6,13 +6,14 @@ // Base class .tooltip { position: absolute; - z-index: @zindexTooltip; + z-index: @zindex-tooltip; display: block; visibility: visible; - font-size: 11px; + font-size: @font-size-mini; line-height: 1.4; .opacity(0); - &.in { .opacity(80); } + + &.in { .opacity(1); } &.top { margin-top: -3px; padding: 5px 0; } &.right { margin-left: 3px; padding: 0 5px; } &.bottom { margin-top: 3px; padding: 5px 0; } @@ -22,12 +23,12 @@ // Wrapper for the tooltip content .tooltip-inner { max-width: 200px; - padding: 8px; - color: @tooltipColor; + padding: 3px 8px; + color: @tooltip-color; text-align: center; text-decoration: none; - background-color: @tooltipBackground; - .border-radius(@baseBorderRadius); + background-color: @tooltip-bg; + border-radius: @border-radius-base; } // Arrows @@ -42,29 +43,29 @@ &.top .tooltip-arrow { bottom: 0; left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth 0; - border-top-color: @tooltipArrowColor; + margin-left: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width 0; + border-top-color: @tooltip-arrow-color; } &.right .tooltip-arrow { top: 50%; left: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth @tooltipArrowWidth @tooltipArrowWidth 0; - border-right-color: @tooltipArrowColor; + margin-top: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width @tooltip-arrow-width @tooltip-arrow-width 0; + border-right-color: @tooltip-arrow-color; } &.left .tooltip-arrow { top: 50%; right: 0; - margin-top: -@tooltipArrowWidth; - border-width: @tooltipArrowWidth 0 @tooltipArrowWidth @tooltipArrowWidth; - border-left-color: @tooltipArrowColor; + margin-top: -@tooltip-arrow-width; + border-width: @tooltip-arrow-width 0 @tooltip-arrow-width @tooltip-arrow-width; + border-left-color: @tooltip-arrow-color; } &.bottom .tooltip-arrow { top: 0; left: 50%; - margin-left: -@tooltipArrowWidth; - border-width: 0 @tooltipArrowWidth @tooltipArrowWidth; - border-bottom-color: @tooltipArrowColor; + margin-left: -@tooltip-arrow-width; + border-width: 0 @tooltip-arrow-width @tooltip-arrow-width; + border-bottom-color: @tooltip-arrow-color; } } diff --git a/less/type.less b/less/type.less index 337138ac8effc25fd8a870c396aa3f117e368819..852f7f32fd75cbf0ca72bdce521a06f4e5a5b5f0 100644 --- a/less/type.less +++ b/less/type.less @@ -7,13 +7,13 @@ // ------------------------- p { - margin: 0 0 @baseLineHeight / 2; + margin: 0 0 (@line-height-computed / 2); } .lead { - margin-bottom: @baseLineHeight; - font-size: @baseFontSize * 1.5; + margin-bottom: @line-height-computed; + font-size: (@font-size-base * 1.5); font-weight: 200; - line-height: @baseLineHeight * 1.5; + line-height: 1.4; } @@ -28,25 +28,21 @@ em { font-style: italic; } cite { font-style: normal; } // Utility classes -.muted { color: @grayLight; } -a.muted:hover, -a.muted:focus { color: darken(@grayLight, 10%); } +.text-muted { color: @gray-light; } +a.text-muted:hover, +a.text-muted:focus { color: darken(@gray-light, 10%); } -.text-warning { color: @warningText; } +.text-warning { color: @state-warning-text; } a.text-warning:hover, -a.text-warning:focus { color: darken(@warningText, 10%); } +a.text-warning:focus { color: darken(@state-warning-text, 10%); } -.text-error { color: @errorText; } -a.text-error:hover, -a.text-error:focus { color: darken(@errorText, 10%); } +.text-danger { color: @state-danger-text; } +a.text-danger:hover, +a.text-danger:focus { color: darken(@state-danger-text, 10%); } -.text-info { color: @infoText; } -a.text-info:hover, -a.text-info:focus { color: darken(@infoText, 10%); } - -.text-success { color: @successText; } +.text-success { color: @state-success-text; } a.text-success:hover, -a.text-success:focus { color: darken(@successText, 10%); } +a.text-success:focus { color: darken(@state-success-text, 10%); } .text-left { text-align: left; } .text-right { text-align: right; } @@ -56,44 +52,51 @@ a.text-success:focus { color: darken(@successText, 10%); } // Headings // ------------------------- -h1, h2, h3, h4, h5, h6 { - margin: (@baseLineHeight / 2) 0; - font-family: @headingsFontFamily; - font-weight: @headingsFontWeight; - line-height: @baseLineHeight; - color: @headingsColor; - text-rendering: optimizelegibility; // Fix the character spacing for headings +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + font-family: @headings-font-family; + font-weight: @headings-font-weight; + line-height: @headings-line-height; small { font-weight: normal; line-height: 1; - color: @grayLight; + color: @gray-light; } } h1, h2, -h3 { line-height: @baseLineHeight * 2; } +h3 { + margin-top: @line-height-computed; + margin-bottom: (@line-height-computed / 2); +} +h4, +h5, +h6 { + margin-top: (@line-height-computed / 2); + margin-bottom: (@line-height-computed / 2); +} -h1 { font-size: @baseFontSize * 2.75; } // ~38px -h2 { font-size: @baseFontSize * 2.25; } // ~32px -h3 { font-size: @baseFontSize * 1.75; } // ~24px -h4 { font-size: @baseFontSize * 1.25; } // ~18px -h5 { font-size: @baseFontSize; } -h6 { font-size: @baseFontSize * 0.85; } // ~12px +h1, .h1 { font-size: ceil(@font-size-base * 2.70); } // ~38px +h2, .h2 { font-size: ceil(@font-size-base * 2.25); } // ~32px +h3, .h3 { font-size: ceil(@font-size-base * 1.70); } // ~24px +h4, .h4 { font-size: ceil(@font-size-base * 1.25); } // ~18px +h5, .h5 { font-size: @font-size-base; } +h6, .h6 { font-size: ceil(@font-size-base * 0.85); } // ~12px -h1 small { font-size: @baseFontSize * 1.75; } // ~24px -h2 small { font-size: @baseFontSize * 1.25; } // ~18px -h3 small { font-size: @baseFontSize; } -h4 small { font-size: @baseFontSize; } +h1 small, .h1 small { font-size: ceil(@font-size-base * 1.70); } // ~24px +h2 small, .h2 small { font-size: ceil(@font-size-base * 1.25); } // ~18px +h3 small, .h3 small, +h4 small, .h4 small { font-size: @font-size-base; } // Page header // ------------------------- .page-header { - padding-bottom: (@baseLineHeight / 2) - 1; - margin: @baseLineHeight 0 (@baseLineHeight * 1.5); - border-bottom: 1px solid @grayLighter; + padding-bottom: ((@line-height-computed / 2) - 1); + margin: (@line-height-computed * 2) 0 @line-height-computed; + border-bottom: 1px solid @gray-lighter; } @@ -102,9 +105,10 @@ h4 small { font-size: @baseFontSize; } // -------------------------------------------------- // Unordered and Ordered lists -ul, ol { - padding: 0; - margin: 0 0 @baseLineHeight / 2 25px; +ul, +ol { + margin-top: 0; + margin-bottom: (@line-height-computed / 2); } ul ul, ul ol, @@ -112,25 +116,19 @@ ol ol, ol ul { margin-bottom: 0; } -li { - line-height: @baseLineHeight; -} -// Remove default list styles -ul.unstyled, -ol.unstyled { - margin-left: 0; - list-style: none; -} +// List options -// Single-line list items -ul.inline, -ol.inline { - margin-left: 0; +// Unstyled keeps list items block level, just removes default browser padding and list-style +.list-unstyled { + padding-left: 0; list-style: none; +} +// Inline turns list items into inline-block +.list-inline { + .list-unstyled(); > li { display: inline-block; - .ie7-inline-block(); padding-left: 5px; padding-right: 5px; } @@ -138,30 +136,30 @@ ol.inline { // Description Lists dl { - margin-bottom: @baseLineHeight; + margin-bottom: @line-height-computed; } dt, dd { - line-height: @baseLineHeight; + line-height: @line-height-base; } dt { font-weight: bold; } dd { - margin-left: @baseLineHeight / 2; + margin-left: (@line-height-computed / 2); } // Horizontal layout (like forms) .dl-horizontal { - .clearfix(); // Ensure dl clears floats if empty dd elements present dt { float: left; - width: @horizontalComponentOffset - 20; + width: (@component-offset-horizontal - 20); clear: left; text-align: right; .text-overflow(); } dd { - margin-left: @horizontalComponentOffset; + .clearfix(); // Clear the floated `dt` if an empty `dd` is present + margin-left: @component-offset-horizontal; } } @@ -170,10 +168,11 @@ dd { // Horizontal rules hr { - margin: @baseLineHeight 0; + margin: @line-height-computed 0; border: 0; - border-top: 1px solid @hrBorder; - border-bottom: 1px solid @white; + border-top: 1px solid @hr-border; + border-bottom: 1px solid #fff; + border-bottom: 1px solid rgba(255,255,255,.5); } // Abbreviations and acronyms @@ -181,7 +180,7 @@ abbr[title], // Added data-* attribute to help out our tooltip plugin, per https://github.com/twitter/bootstrap/issues/5257 abbr[data-original-title] { cursor: help; - border-bottom: 1px dotted @grayLight; + border-bottom: 1px dotted @gray-light; } abbr.initialism { font-size: 90%; @@ -190,19 +189,21 @@ abbr.initialism { // Blockquotes blockquote { - padding: 0 0 0 15px; - margin: 0 0 @baseLineHeight; - border-left: 5px solid @grayLighter; + padding: (@line-height-computed / 2) @line-height-computed; + margin: 0 0 @line-height-computed; + border-left: 5px solid @gray-lighter; p { - margin-bottom: 0; - font-size: @baseFontSize * 1.25; + font-size: (@font-size-base * 1.25); font-weight: 300; line-height: 1.25; } + p:last-child { + margin-bottom: 0; + } small { display: block; - line-height: @baseLineHeight; - color: @grayLight; + line-height: @line-height-base; + color: @gray-light; &:before { content: '\2014 \00A0'; } @@ -213,7 +214,7 @@ blockquote { float: right; padding-right: 15px; padding-left: 0; - border-right: 5px solid @grayLighter; + border-right: 5px solid @gray-lighter; border-left: 0; p, small { @@ -241,7 +242,7 @@ blockquote:after { // Addresses address { display: block; - margin-bottom: @baseLineHeight; + margin-bottom: @line-height-computed; font-style: normal; - line-height: @baseLineHeight; + line-height: @line-height-base; } diff --git a/less/utilities.less b/less/utilities.less index 314b4ffdb45acbb991eedc0782a800535e73b051..d296b32c25ffd3bd0eed221ec8f3cbd2011c9ef0 100644 --- a/less/utilities.less +++ b/less/utilities.less @@ -3,7 +3,12 @@ // -------------------------------------------------- -// Quick floats +// Floats +// ------------------------- + +.clearfix { + .clearfix(); +} .pull-right { float: right; } @@ -11,20 +16,27 @@ float: left; } + // Toggling content +// ------------------------- + .hide { - display: none; + display: none !important; } .show { - display: block; + display: block !important; } - -// Visibility .invisible { visibility: hidden; } +.text-hide { + .hide-text(); +} + // For Affix plugin +// ------------------------- + .affix { position: fixed; } diff --git a/less/variables.less b/less/variables.less index 31c131b1e237771b333012f6ee36b1a475b78cea..f9184612641c762c3f805b09f135b5bd947ed118 100644 --- a/less/variables.less +++ b/less/variables.less @@ -9,128 +9,144 @@ // Grays // ------------------------- -@black: #000; -@grayDarker: #222; -@grayDark: #333; -@gray: #555; -@grayLight: #999; -@grayLighter: #eee; -@white: #fff; +@gray-darker: lighten(#000, 13.5%); // #222 +@gray-dark: lighten(#000, 20%); // #333 +@gray: lighten(#000, 33.5%); // #555 +@gray-light: lighten(#000, 60%); // #999 +@gray-lighter: lighten(#000, 93.5%); // #eee -// Accent colors +// Brand colors // ------------------------- -@blue: #049cdb; -@blueDark: #0064cd; -@green: #46a546; -@red: #9d261d; -@yellow: #ffc40d; -@orange: #f89406; -@pink: #c3325f; -@purple: #7a43b6; +@brand-primary: #428bca; +@brand-success: #5cb85c; +@brand-warning: #f0ad4e; +@brand-danger: #d9534f; +@brand-info: #5bc0de; // Scaffolding // ------------------------- -@bodyBackground: @white; -@textColor: @grayDark; +@body-bg: #fff; +@text-color: @gray-dark; // Links // ------------------------- -@linkColor: #08c; -@linkColorHover: darken(@linkColor, 15%); +@link-color: @brand-primary; +@link-hover-color: darken(@link-color, 15%); // Typography // ------------------------- -@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; -@serifFontFamily: Georgia, "Times New Roman", Times, serif; -@monoFontFamily: Monaco, Menlo, Consolas, "Courier New", monospace; -@baseFontSize: 14px; -@baseFontFamily: @sansFontFamily; -@baseLineHeight: 20px; -@altFontFamily: @serifFontFamily; +@font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif; +@font-family-serif: Georgia, "Times New Roman", Times, serif; +@font-family-monospace: Monaco, Menlo, Consolas, "Courier New", monospace; +@font-family-base: @font-family-sans-serif; -@headingsFontFamily: inherit; // empty to use BS default, @baseFontFamily -@headingsFontWeight: bold; // instead of browser default, bold -@headingsColor: inherit; // empty to use BS default, @textColor +@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 -// Component sizing +@headings-font-family: @font-family-base; +@headings-font-weight: 500; +@headings-line-height: 1.1; + + +// Components // ------------------------- -// Based on 14px font-size and 20px line-height +// Based on 14px font-size and 1.428 line-height (~20px to start) + +@padding-base-vertical: 8px; +@padding-base-horizontal: 12px; + +@padding-large-vertical: 14px; +@padding-large-horizontal: 16px; -@fontSizeLarge: @baseFontSize * 1.25; // ~18px -@fontSizeSmall: @baseFontSize * 0.85; // ~12px -@fontSizeMini: @baseFontSize * 0.75; // ~11px +@padding-small-vertical: 5px; +@padding-small-horizontal: 10px; -@paddingLarge: 11px 19px; // 44px -@paddingSmall: 2px 10px; // 26px -@paddingMini: 0 6px; // 22px +@border-radius-base: 4px; +@border-radius-large: 6px; +@border-radius-small: 3px; -@baseBorderRadius: 4px; -@borderRadiusLarge: 6px; -@borderRadiusSmall: 3px; +@component-active-bg: @brand-primary; // Tables // ------------------------- -@tableBackground: transparent; // overall background-color -@tableBackgroundAccent: #f9f9f9; // for striping -@tableBackgroundHover: #f5f5f5; // for hover -@tableBorder: #ddd; // table and cell border + +@table-bg: transparent; // overall background-color +@table-bg-accent: #f9f9f9; // for striping +@table-bg-hover: #f5f5f5; // for hover + +@table-border-color: #ddd; // table and cell border + // Buttons // ------------------------- -@btnBackground: @white; -@btnBackgroundHighlight: darken(@white, 10%); -@btnBorder: #ccc; -@btnPrimaryBackground: @linkColor; -@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 20%); +@btn-default-color: #fff; +@btn-default-bg: #474949; +@btn-default-border: @btn-default-bg; + +@btn-primary-color: @btn-default-color; +@btn-primary-bg: @brand-primary; +@btn-primary-border: @btn-primary-bg; -@btnInfoBackground: #5bc0de; -@btnInfoBackgroundHighlight: #2f96b4; +@btn-success-color: @btn-default-color; +@btn-success-bg: @brand-success; +@btn-success-border: @btn-success-bg; -@btnSuccessBackground: #62c462; -@btnSuccessBackgroundHighlight: #51a351; +@btn-warning-color: @btn-default-color; +@btn-warning-bg: @brand-warning; +@btn-warning-border: @btn-warning-bg; -@btnWarningBackground: lighten(@orange, 15%); -@btnWarningBackgroundHighlight: @orange; +@btn-danger-color: @btn-default-color; +@btn-danger-bg: @brand-danger; +@btn-danger-border: @btn-danger-bg; -@btnDangerBackground: #ee5f5b; -@btnDangerBackgroundHighlight: #bd362f; +@btn-info-color: @btn-default-color; +@btn-info-bg: @brand-info; +@btn-info-border: @btn-info-bg; -@btnInverseBackground: #444; -@btnInverseBackgroundHighlight: @grayDarker; // Forms // ------------------------- -@inputBackground: @white; -@inputBorder: #ccc; -@inputBorderRadius: @baseBorderRadius; -@inputDisabledBackground: @grayLighter; -@formActionsBackground: #f5f5f5; -@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border + +@input-bg: #fff; +@input-bg-disabled: @gray-lighter; + +@input-border: #ccc; +@input-border-radius: @border-radius-base; + +@input-color-placeholder: @gray-light; + +@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); +@input-height-large: (ceil(@font-size-large * @line-height-base) + (@padding-large-vertical * 2) + 2); +@input-height-small: (ceil(@font-size-small * @line-height-base) + (@padding-small-vertical * 2) + 2); // Dropdowns // ------------------------- -@dropdownBackground: @white; -@dropdownBorder: rgba(0,0,0,.2); -@dropdownDividerTop: #e5e5e5; -@dropdownDividerBottom: @white; -@dropdownLinkColor: @grayDark; -@dropdownLinkColorHover: @white; -@dropdownLinkColorActive: @white; +@dropdown-bg: #fff; +@dropdown-border: rgba(0,0,0,.15); +@dropdown-divider-top: #e5e5e5; +@dropdown-divider-bottom: #fff; -@dropdownLinkBackgroundActive: @linkColor; -@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; +@dropdown-link-active-color: #fff; +@dropdown-link-active-bg: @component-active-bg; +@dropdown-link-color: @gray-dark; +@dropdown-link-hover-color: #fff; +@dropdown-link-hover-bg: @dropdown-link-active-bg; // COMPONENT VARIABLES @@ -141,161 +157,272 @@ // ------------------------- // Used for a bird's eye view of components dependent on the z-axis // Try to avoid customizing these :) -@zindexDropdown: 1000; -@zindexPopover: 1010; -@zindexTooltip: 1030; -@zindexFixedNavbar: 1030; -@zindexModalBackdrop: 1040; -@zindexModal: 1050; +@zindex-dropdown: 1000; +@zindex-popover: 1010; +@zindex-tooltip: 1030; +@zindex-navbar-fixed: 1030; +@zindex-modal-background: 1040; +@zindex-modal: 1050; -// Sprite icons path + +// Glyphicons font path // ------------------------- -@iconSpritePath: "../img/glyphicons-halflings.png"; -@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; +@glyphicons-font-path: "../fonts"; -// Input placeholder text color +// Navbar // ------------------------- -@placeholderText: @grayLight; +// Basics of a navbar +@navbar-height: 50px; +@navbar-color: #777; +@navbar-bg: #eee; + +// Navbar links +@navbar-link-color: #777; +@navbar-link-hover-color: #333; +@navbar-link-hover-bg: transparent; +@navbar-link-active-color: #555; +@navbar-link-active-bg: darken(@navbar-bg, 10%); +@navbar-link-disabled-color: #ccc; +@navbar-link-disabled-bg: transparent; + +// Navbar brand label +@navbar-brand-color: @navbar-link-color; +@navbar-brand-hover-color: darken(@navbar-link-color, 10%); +@navbar-brand-hover-bg: transparent; -// Hr border color -// ------------------------- -@hrBorder: @grayLighter; +// Inverted navbar +@navbar-inverse-color: @gray-light; +@navbar-inverse-bg: #222; + +// Inverted navbar links +@navbar-inverse-link-color: @gray-light; +@navbar-inverse-link-hover-color: #fff; +@navbar-inverse-link-hover-bg: transparent; +@navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; +@navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); +@navbar-inverse-link-disabled-color: #444; +@navbar-inverse-link-disabled-bg: transparent; + +// Inverted navbar brand label +@navbar-inverse-brand-color: @navbar-inverse-link-color; +@navbar-inverse-brand-hover-color: #fff; +@navbar-inverse-brand-hover-bg: transparent; + +// Inverted navbar search +// Normal navbar needs no special styles or vars +@navbar-inverse-search-bg: lighten(@navbar-inverse-bg, 25%); +@navbar-inverse-search-bg-focus: #fff; +@navbar-inverse-search-border: @navbar-inverse-bg; +@navbar-inverse-search-placeholder-color: #ccc; -// Horizontal forms & lists +// Pagination // ------------------------- -@horizontalComponentOffset: 180px; +@pagination-bg: #fff; +@pagination-border: #ddd; +@pagination-active-bg: #f5f5f5; -// Wells + +// Jumbotron // ------------------------- -@wellBackground: #f5f5f5; +@jumbotron-bg: @gray-lighter; +@jumbotron-heading-color: inherit; +@jumbotron-lead-color: inherit; -// Navbar + +// Form states and alerts // ------------------------- -@navbarCollapseWidth: 979px; -@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; -@navbarHeight: 40px; -@navbarBackgroundHighlight: #ffffff; -@navbarBackground: darken(@navbarBackgroundHighlight, 5%); -@navbarBorder: darken(@navbarBackground, 12%); +@state-warning-text: #c09853; +@state-warning-bg: #fcf8e3; +@state-warning-border: darken(spin(@state-warning-bg, -10), 3%); -@navbarText: #777; -@navbarLinkColor: #777; -@navbarLinkColorHover: @grayDark; -@navbarLinkColorActive: @gray; -@navbarLinkBackgroundHover: transparent; -@navbarLinkBackgroundActive: darken(@navbarBackground, 5%); +@state-danger-text: #b94a48; +@state-danger-bg: #f2dede; +@state-danger-border: darken(spin(@state-danger-bg, -10), 3%); -@navbarBrandColor: @navbarLinkColor; +@state-success-text: #468847; +@state-success-bg: #dff0d8; +@state-success-border: darken(spin(@state-success-bg, -10), 5%); -// Inverted navbar -@navbarInverseBackground: #111111; -@navbarInverseBackgroundHighlight: #222222; -@navbarInverseBorder: #252525; +@state-info-text: #3a87ad; +@state-info-bg: #d9edf7; +@state-info-border: darken(spin(@state-info-bg, -10), 7%); -@navbarInverseText: @grayLight; -@navbarInverseLinkColor: @grayLight; -@navbarInverseLinkColorHover: @white; -@navbarInverseLinkColorActive: @navbarInverseLinkColorHover; -@navbarInverseLinkBackgroundHover: transparent; -@navbarInverseLinkBackgroundActive: @navbarInverseBackground; -@navbarInverseSearchBackground: lighten(@navbarInverseBackground, 25%); -@navbarInverseSearchBackgroundFocus: @white; -@navbarInverseSearchBorder: @navbarInverseBackground; -@navbarInverseSearchPlaceholderColor: #ccc; +// Tooltips and popovers +// ------------------------- +@tooltip-color: #fff; +@tooltip-bg: rgba(0,0,0,.9); +@tooltip-arrow-width: 5px; +@tooltip-arrow-color: @tooltip-bg; -@navbarInverseBrandColor: @navbarInverseLinkColor; +@popover-bg: #fff; +@popover-arrow-width: 10px; +@popover-arrow-color: #fff; +@popover-title-bg: darken(@popover-bg, 3%); +// Special enhancement for popovers +@popover-arrow-outer-width: (@popover-arrow-width + 1); +@popover-arrow-outer-color: rgba(0,0,0,.25); -// Pagination + +// Labels // ------------------------- -@paginationBackground: #fff; -@paginationBorder: #ddd; -@paginationActiveBackground: #f5f5f5; +@label-success-bg: @brand-success; +@label-info-bg: @brand-info; +@label-warning-bg: @brand-warning; +@label-danger-bg: @brand-danger; -// Hero unit +// Modals // ------------------------- -@heroUnitBackground: @grayLighter; -@heroUnitHeadingColor: inherit; -@heroUnitLeadColor: inherit; +@modal-inner-padding: 20px; +@modal-title-padding: 15px; +@modal-title-line-height: @line-height-base; -// Form states and alerts +// Alerts // ------------------------- -@warningText: #c09853; -@warningBackground: #fcf8e3; -@warningBorder: darken(spin(@warningBackground, -10), 3%); +@alert-bg: @state-warning-bg; +@alert-text: @state-warning-text; +@alert-border: @state-warning-border; +@alert-border-radius: @border-radius-base; -@errorText: #b94a48; -@errorBackground: #f2dede; -@errorBorder: darken(spin(@errorBackground, -10), 3%); +@alert-success-bg: @state-success-bg; +@alert-success-text: @state-success-text; +@alert-success-border: @state-success-border; -@successText: #468847; -@successBackground: #dff0d8; -@successBorder: darken(spin(@successBackground, -10), 5%); +@alert-danger-bg: @state-danger-bg; +@alert-danger-text: @state-danger-text; +@alert-danger-border: @state-danger-border; -@infoText: #3a87ad; -@infoBackground: #d9edf7; -@infoBorder: darken(spin(@infoBackground, -10), 7%); +@alert-info-bg: @state-info-bg; +@alert-info-text: @state-info-text; +@alert-info-border: @state-info-border; -// Tooltips and popovers +// Progress bars // ------------------------- -@tooltipColor: #fff; -@tooltipBackground: #000; -@tooltipArrowWidth: 5px; -@tooltipArrowColor: @tooltipBackground; +@progress-bg: #f5f5f5; +@progress-bar-bg: @brand-primary; +@progress-bar-success-bg: @brand-success; +@progress-bar-warning-bg: @brand-warning; +@progress-bar-danger-bg: @brand-danger; +@progress-bar-info-bg: @brand-info; -@popoverBackground: #fff; -@popoverArrowWidth: 10px; -@popoverArrowColor: #fff; -@popoverTitleBackground: darken(@popoverBackground, 3%); -// Special enhancement for popovers -@popoverArrowOuterWidth: @popoverArrowWidth + 1; -@popoverArrowOuterColor: rgba(0,0,0,.25); +// List group +// ------------------------- +@list-group-bg: #fff; +@list-group-border: #ddd; +@list-group-border-radius: @border-radius-base; + +@list-group-hover-bg: #f5f5f5; +@list-group-active-color: #fff; +@list-group-active-bg: @component-active-bg; +@list-group-active-border: @list-group-active-bg; +// Panels +// ------------------------- +@panel-bg: #fff; +@panel-border: #ddd; +@panel-border-radius: @border-radius-base; +@panel-heading-bg: #f5f5f5; +@panel-footer-bg: #f5f5f5; +@panel-primary-text: #fff; +@panel-primary-border: @brand-primary; +@panel-primary-heading-bg: @brand-primary; -// GRID -// -------------------------------------------------- +@panel-success-text: @state-success-text; +@panel-success-border: @state-success-border; +@panel-success-heading-bg: @state-success-bg; + +@panel-warning-text: @state-warning-text; +@panel-warning-border: @state-warning-border; +@panel-warning-heading-bg: @state-warning-bg; + +@panel-danger-text: @state-danger-text; +@panel-danger-border: @state-danger-border; +@panel-danger-heading-bg: @state-danger-bg; +@panel-info-text: @state-info-text; +@panel-info-border: @state-info-border; +@panel-info-heading-bg: @state-info-bg; -// Default 940px grid + +// Thumbnails // ------------------------- -@gridColumns: 12; -@gridColumnWidth: 60px; -@gridGutterWidth: 20px; -@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); +@thumbnail-caption-color: @text-color; +@thumbnail-bg: @body-bg; +@thumbnail-border: #ddd; +@thumbnail-border-radius: @border-radius-base; -// 1200px min -@gridColumnWidth1200: 70px; -@gridGutterWidth1200: 30px; -@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); -// 768px-979px -@gridColumnWidth768: 42px; -@gridGutterWidth768: 20px; -@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); +// Wells +// ------------------------- +@well-bg: #f5f5f5; -// Fluid grid +// Miscellaneous // ------------------------- -@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); -@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); -// 1200px min -@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); -@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); +// Hr border color +@hr-border: @gray-lighter; + +// Horizontal forms & lists +@component-offset-horizontal: 180px; + + +// Media queries breakpoints +// -------------------------------------------------- + +// Tiny screen / phone +@screen-tiny: 480px; +@screen-phone: @screen-tiny; + +// Small screen / tablet +@screen-small: 768px; +@screen-tablet: @screen-small; + +// Medium screen / desktop +@screen-medium: 992px; +@screen-desktop: @screen-medium; + +// So media queries don't overlap when required, provide a maximum +@screen-small-max: (@screen-medium - 1); +@screen-tablet-max: @screen-small-max; + +// Large screen / wide desktop +@screen-large: 1200px; +@screen-large-desktop: @screen-large; + + +// Container sizes +// -------------------------------------------------- + +// Small screen / tablet +@container-tablet: 728px; + +// Medium screen / desktop +@container-desktop: 940px; + +// Large screen / wide desktop +@container-large-desktop: 1170px; + + +// Grid system +// -------------------------------------------------- -// 768px-979px -@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); -@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); +// Number of columns in the grid system +@grid-columns: 12; +// Padding, to be divided by two and applied to the left and right of all columns +@grid-gutter-width: 30px; +// Point at which the navbar stops collapsing +@grid-float-breakpoint: @screen-tablet; diff --git a/less/wells.less b/less/wells.less index 84a744b1c5c8fdaa26e39ca3283d699ad1cbc5df..6a909f44b48928ed683f6ec7b8b798ad0ed67fbe 100644 --- a/less/wells.less +++ b/less/wells.less @@ -8,9 +8,9 @@ min-height: 20px; padding: 19px; margin-bottom: 20px; - background-color: @wellBackground; - border: 1px solid darken(@wellBackground, 7%); - .border-radius(@baseBorderRadius); + background-color: @well-bg; + border: 1px solid darken(@well-bg, 7%); + border-radius: @border-radius-base; .box-shadow(inset 0 1px 1px rgba(0,0,0,.05)); blockquote { border-color: #ddd; @@ -21,9 +21,9 @@ // Sizes .well-large { padding: 24px; - .border-radius(@borderRadiusLarge); + border-radius: @border-radius-large; } .well-small { padding: 9px; - .border-radius(@borderRadiusSmall); + border-radius: @border-radius-small; } diff --git a/package.json b/package.json index e52483651e9d1939d03007b85ed26c687914f5e8..8d3f14160f8b9f1cd24734965593e2d821f27a5a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "bootstrap" , "description": "Sleek, intuitive, and powerful front-end framework for faster and easier web development." - , "version": "2.3.1" + , "version": "3.0.0" , "keywords": ["bootstrap", "css"] , "homepage": "http://twitter.github.com/bootstrap/" , "author": "Twitter Inc." @@ -18,9 +18,8 @@ ] , "devDependencies": { "uglify-js": "1.3.4" - , "jshint": "0.9.1" - , "recess": "1.1.6" + , "jshint": "2.1.2" + , "recess": "1.1.7" , "connect": "2.1.3" - , "hogan.js": "2.0.0" } }