diff --git a/CHANGELOG.md b/CHANGELOG.md index f33f97937b..c7609beab8 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 diff --git a/Makefile b/Makefile index 7c95b19001..fb56a4b3cd 100644 --- a/Makefile +++ b/Makefile @@ -27,7 +27,7 @@ build: @cp js/tests/vendor/jquery.js docs/assets/js/ @echo " ${CHECK}" @printf "Compiling and minifying JavaScript..." - @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 + @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 @@ -72,7 +72,7 @@ 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 + 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 diff --git a/docs/_includes/footer.html b/docs/_includes/footer.html index 048f313596..8827ec2a75 100644 --- a/docs/_includes/footer.html +++ b/docs/_includes/footer.html @@ -2,19 +2,19 @@ ================================================== --> - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/docs/_site/assets/css/bootstrap.css b/docs/_site/assets/css/bootstrap.css new file mode 100644 index 0000000000..c92bd7f365 --- /dev/null +++ b/docs/_site/assets/css/bootstrap.css @@ -0,0 +1,5016 @@ +/*! + * Bootstrap v3.0.0 + * + * Copyright 2013 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world by @mdo and @fat. + */ + +/*! normalize.css v2.1.0 | MIT License | git.io/normalize */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +audio, +canvas, +video { + display: inline-block; +} + +audio:not([controls]) { + display: none; + height: 0; +} + +[hidden] { + display: none; +} + +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + margin: 0; +} + +a:focus { + outline: thin dotted; +} + +a:active, +a:hover { + outline: 0; +} + +h1 { + margin: 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; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +img { + border: 0; +} + +svg:not(:root) { + overflow: hidden; +} + +figure { + margin: 0; +} + +fieldset { + padding: 0.35em 0.625em 0.75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} + +legend { + padding: 0; + border: 0; +} + +button, +input, +select, +textarea { + margin: 0; + font-family: inherit; + font-size: 100%; +} + +button, +input { + line-height: normal; +} + +button, +select { + text-transform: none; +} + +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} + +button[disabled], +html input[disabled] { + cursor: default; +} + +input[type="checkbox"], +input[type="radio"] { + padding: 0; + box-sizing: border-box; +} + +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} + +textarea { + overflow: auto; + vertical-align: top; +} + +table { + border-collapse: collapse; + border-spacing: 0; +} + +@media print { + * { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + @page { + margin: 0.5cm; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + .navbar-toggle { + display: none; + } +} + +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html { + font-size: 62.5%; + -webkit-overflow-scrolling: touch; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +@media screen and (max-device-width: 480px) { + html { + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; + } +} + +body { + color: #333333; + background-color: #ffffff; +} + +body, +input, +button, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-size: 1.4rem; + line-height: 20px; +} + +a { + color: #428bca; + text-decoration: none; +} + +a:hover, +a:focus { + color: #2a6496; + text-decoration: underline; +} + +a:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +img { + width: auto\9; + height: auto; + max-width: 100%; + vertical-align: middle; +} + +.img-rounded { + border-radius: 6px; +} + +.img-circle { + border-radius: 500px; +} + +p { + margin: 0 0 10px; +} + +.lead { + margin-bottom: 20px; + font-size: 21px; + font-size: 2.1rem; + font-weight: 200; + line-height: 1.25; +} + +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-success { + color: #468847; +} + +a.text-success:hover, +a.text-success:focus { + color: #356635; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-center { + text-align: center; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 20px; + text-rendering: optimizelegibility; +} + +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; +} + +h1, +h2, +h3 { + margin-top: 20px; + margin-bottom: 10px; + line-height: 40px; +} + +h3 { + line-height: 30px; +} + +h4, +h5, +h6 { + margin-top: 10px; + margin-bottom: 10px; +} + +h1, +.h1 { + font-size: 38.5; + font-size: 4rem; +} + +h2, +.h2 { + font-size: 31.5; + font-size: 3rem; +} + +h3, +.h3 { + font-size: 24.5; + font-size: 2.5rem; +} + +h4, +.h4 { + font-size: 17.5; + font-size: 2rem; +} + +h5, +.h5 { + font-size: 14; + font-size: 1.6rem; +} + +h6, +.h6 { + font-size: 11.9; + font-size: 1.2rem; +} + +h1 small, +.h1 small { + font-size: 24.5; +} + +h2 small, +.h2 small { + font-size: 17.5; +} + +h3 small, +.h3 small { + font-size: 14; +} + +h4 small, +.h4 small { + font-size: 14; +} + +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + 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; +} + +li { + line-height: 20px; +} + +.list-unstyled, +.list-inline { + margin-left: 0; + list-style: none; +} + +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} + +dl { + margin-bottom: 20px; +} + +dt, +dd { + line-height: 20px; +} + +dt { + font-weight: bold; +} + +dd { + margin-left: 10px; +} + +.dl-horizontal:before, +.dl-horizontal:after { + display: table; + content: " "; +} + +.dl-horizontal:after { + clear: both; +} + +.dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; +} + +.dl-horizontal dd { + margin-left: 180px; +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px solid #eeeeee; + border-bottom: 1px solid #fff; + border-bottom: 1px solid rgba(255, 255, 255, 0.5); +} + +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #999999; +} + +abbr.initialism { + font-size: 90%; + text-transform: uppercase; +} + +blockquote { + padding: 0 0 0 15px; + margin: 0 0 20px; + border-left: 5px solid #eeeeee; +} + +blockquote p { + margin-bottom: 0; + font-size: 17.5; + font-weight: 300; + line-height: 1.25; +} + +blockquote small { + display: block; + line-height: 20px; + color: #999999; +} + +blockquote small:before { + content: '\2014 \00A0'; +} + +blockquote.pull-right { + float: right; + padding-right: 15px; + padding-left: 0; + border-right: 5px solid #eeeeee; + border-left: 0; +} + +blockquote.pull-right p, +blockquote.pull-right small { + text-align: right; +} + +blockquote.pull-right small:before { + content: ''; +} + +blockquote.pull-right small:after { + content: '\00A0 \2014'; +} + +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} + +address { + display: block; + margin-bottom: 20px; + font-style: normal; + line-height: 20px; +} + +code, +pre { + padding: 0 3px 2px; + font-family: Monaco, Menlo, Consolas, "Courier New", monospace; + font-size: 12; + color: #333333; + border-radius: 4px; +} + +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + white-space: nowrap; + background-color: #f9f2f4; +} + +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13; + 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); + border-radius: 4px; +} + +pre.prettyprint { + margin-bottom: 20px; +} + +pre code { + padding: 0; + color: inherit; + white-space: pre; + white-space: pre-wrap; + background-color: transparent; + border: 0; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container { + margin-right: auto; + margin-left: auto; +} + +.container:before, +.container:after { + display: table; + content: " "; +} + +.container:after { + clear: both; +} + +.row { + margin-right: -15px; + margin-left: -15px; +} + +.row:before, +.row:after { + display: table; + content: " "; +} + +.row:after { + clear: both; +} + +[class^="span"] { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +@media screen and (min-width: 768px) { + .container { + max-width: 728px; + } + [class^="span"] { + float: left; + } + .span12 { + width: 100%; + } + .span11 { + width: 91.66666666666666%; + } + .span10 { + width: 83.33333333333334%; + } + .span9 { + width: 75%; + } + .span8 { + width: 66.66666666666666%; + } + .span7 { + width: 58.333333333333336%; + } + .span6 { + width: 50%; + } + .span5 { + width: 41.66666666666667%; + } + .span4 { + width: 33.33333333333333%; + } + .span3 { + width: 25%; + } + .span2 { + width: 16.666666666666664%; + } + .span1 { + width: 8.333333333333332%; + } + .offset12 { + margin-left: 100%; + } + .offset11 { + margin-left: 91.66666666666666%; + } + .offset10 { + margin-left: 83.33333333333334%; + } + .offset9 { + margin-left: 75%; + } + .offset8 { + margin-left: 66.66666666666666%; + } + .offset7 { + margin-left: 58.333333333333336%; + } + .offset6 { + margin-left: 50%; + } + .offset5 { + margin-left: 41.66666666666667%; + } + .offset4 { + margin-left: 33.33333333333333%; + } + .offset3 { + margin-left: 25%; + } + .offset2 { + margin-left: 16.666666666666664%; + } + .offset1 { + margin-left: 8.333333333333332%; + } + .push12 { + left: 100%; + } + .push11 { + left: 91.66666666666666%; + } + .push10 { + left: 83.33333333333334%; + } + .push9 { + left: 75%; + } + .push8 { + left: 66.66666666666666%; + } + .push7 { + left: 58.333333333333336%; + } + .push6 { + left: 50%; + } + .push5 { + left: 41.66666666666667%; + } + .push4 { + left: 33.33333333333333%; + } + .push3 { + left: 25%; + } + .push2 { + left: 16.666666666666664%; + } + .push1 { + left: 8.333333333333332%; + } + .pull12 { + right: 100%; + } + .pull11 { + right: 91.66666666666666%; + } + .pull10 { + right: 83.33333333333334%; + } + .pull9 { + right: 75%; + } + .pull8 { + right: 66.66666666666666%; + } + .pull7 { + right: 58.333333333333336%; + } + .pull6 { + right: 50%; + } + .pull5 { + right: 41.66666666666667%; + } + .pull4 { + right: 33.33333333333333%; + } + .pull3 { + right: 25%; + } + .pull2 { + right: 16.666666666666664%; + } + .pull1 { + right: 8.333333333333332%; + } +} + +@media screen and (min-width: 992px) { + .container { + max-width: 940px; + } +} + +@media screen and (min-width: 1200px) { + .container { + max-width: 1170px; + } +} + +[class*="span"].pull-right { + float: right; +} + +table { + max-width: 100%; + background-color: transparent; + border-collapse: collapse; + border-spacing: 0; +} + +th { + text-align: left; +} + +.table { + width: 100%; + margin-bottom: 20px; +} + +.table th, +.table td { + padding: 8px; + line-height: 20px; + vertical-align: top; + border-top: 1px solid #dddddd; +} + +.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-left: 0; + 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 { + border-top-left-radius: 4px; +} + +.table-bordered thead:first-child tr:first-child > th:last-child, +.table-bordered tbody:first-child tr:first-child > td:last-child, +.table-bordered tbody:first-child tr:first-child > th:last-child { + border-top-right-radius: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:first-child, +.table-bordered tbody:last-child tr:last-child > td:first-child, +.table-bordered tbody:last-child tr:last-child > th:first-child, +.table-bordered tfoot:last-child tr:last-child > td:first-child, +.table-bordered tfoot:last-child tr:last-child > th:first-child { + border-bottom-left-radius: 4px; +} + +.table-bordered thead:last-child tr:last-child > th:last-child, +.table-bordered tbody:last-child tr:last-child > td:last-child, +.table-bordered tbody:last-child tr:last-child > th:last-child, +.table-bordered tfoot:last-child tr:last-child > td:last-child, +.table-bordered tfoot:last-child tr:last-child > th:last-child { + border-bottom-right-radius: 4px; +} + +.table-bordered tfoot + tbody:last-child tr:last-child > td:first-child { + border-bottom-left-radius: 0; +} + +.table-bordered tfoot + tbody:last-child tr:last-child > td:last-child { + border-bottom-right-radius: 0; +} + +.table-bordered caption + thead tr:first-child th:first-child, +.table-bordered 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; +} + +.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; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #f9f9f9; +} + +.table-hover > tbody > tr:hover > td, +.table-hover > tbody > tr:hover > th { + background-color: #f5f5f5; +} + +table col[class^="span"] { + display: table-column; + float: none; +} + +table td[class^="span"], +table th[class^="span"] { + display: table-cell; + float: none; +} + +.table > tbody > tr > td.success, +.table > tbody > tr > th.success, +.table > tbody > tr.success > td { + background-color: #dff0d8; +} + +.table > tbody > tr > td.error, +.table > tbody > tr > th.error, +.table > tbody > tr.error > td { + background-color: #f2dede; +} + +.table > tbody > tr > td.warning, +.table > tbody > tr > th.warning, +.table > tbody > tr.warning > td { + background-color: #fcf8e3; +} + +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td { + background-color: #d0e9c6; +} + +.table-hover > tbody > tr > td.error:hover, +.table-hover > tbody > tr > th.error:hover, +.table-hover > tbody > tr.error:hover > td { + background-color: #ebcccc; +} + +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td { + background-color: #faf2cc; +} + +form { + margin: 0; +} + +fieldset { + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21; + line-height: 40px; + color: #333333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} + +label { + display: inline-block; + margin-bottom: 5px; + font-weight: bold; +} + +select, +textarea, +input[type="text"], +input[type="password"], +input[type="datetime"], +input[type="datetime-local"], +input[type="date"], +input[type="month"], +input[type="time"], +input[type="week"], +input[type="number"], +input[type="email"], +input[type="url"], +input[type="search"], +input[type="tel"], +input[type="color"] { + display: inline-block; + min-height: 34px; + padding: 6px 9px; + font-size: 14; + line-height: 20px; + color: #555555; + vertical-align: middle; + background-color: #ffffff; + border: 1px solid #cccccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + -webkit-transition: border 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; +} + +input, +select, +textarea { + width: 100%; +} + +input[type="file"], +input[type="image"], +input[type="submit"], +input[type="reset"], +input[type="button"], +input[type="radio"], +input[type="checkbox"] { + width: auto; +} + +textarea { + height: auto; +} + +textarea:focus, +input[type="text"]:focus, +input[type="password"]:focus, +input[type="datetime"]:focus, +input[type="datetime-local"]:focus, +input[type="date"]:focus, +input[type="month"]:focus, +input[type="time"]:focus, +input[type="week"]:focus, +input[type="number"]:focus, +input[type="email"]:focus, +input[type="url"]:focus, +input[type="search"]:focus, +input[type="tel"]:focus, +input[type="color"]:focus { + border-color: rgba(82, 168, 236, 0.8); + outline: 0; + outline: thin dotted \9; + /* IE6-9 */ + + -webkit-box-shadow: 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: 0 0 8px rgba(82, 168, 236, 0.6); +} + +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + /* IE8-9 */ + + line-height: normal; +} + +select, +input[type="file"] { + height: 34px; + /* 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: 34px; +} + +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; +} + +input:-moz-placeholder, +textarea:-moz-placeholder { + color: #999999; +} + +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 { + display: block; + min-height: 20px; + padding-left: 20px; + margin-bottom: 10px; +} + +.radio label, +.checkbox label { + display: inline; + margin-bottom: 0; + font-weight: normal; +} + +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + float: left; + margin-left: -20px; +} + +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} + +.controls > .radio:first-child, +.controls > .checkbox:first-child { + padding-top: 5px; +} + +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-top: 5px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; +} + +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} + +select.input-large, +textarea.input-large, +input[type="text"].input-large, +input[type="password"].input-large, +input[type="datetime"].input-large, +input[type="datetime-local"].input-large, +input[type="date"].input-large, +input[type="month"].input-large, +input[type="time"].input-large, +input[type="week"].input-large, +input[type="number"].input-large, +input[type="email"].input-large, +input[type="url"].input-large, +input[type="search"].input-large, +input[type="tel"].input-large, +input[type="color"].input-large { + padding: 11px 14px; + font-size: 17.5; + 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: 26px; + padding: 2px 10px; + font-size: 11.9; + border-radius: 3px; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"] { + float: none; + margin-right: 0; + margin-left: 0; +} + +.input-append input[class*="span"], +.input-prepend input[class*="span"] { + display: inline-block; +} + +input[class*="span"], +select[class*="span"], +textarea[class*="span"] { + height: 34px; +} + +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly], +fieldset[disabled] input, +fieldset[disabled] select, +fieldset[disabled] textarea { + cursor: not-allowed; + background-color: #eeeeee; +} + +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"][readonly], +input[type="checkbox"][readonly], +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + background-color: transparent; +} + +.has-warning .control-label { + color: #c09853; +} + +.has-warning .input-with-feedback { + padding-right: 32px; + border-color: #c09853; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-warning .input-with-feedback:focus { + border-color: #a47e3c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #dbc59e; +} + +.has-error .control-label { + color: #b94a48; +} + +.has-error .input-with-feedback { + padding-right: 32px; + border-color: #b94a48; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-error .input-with-feedback:focus { + border-color: #953b39; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #d59392; +} + +.has-success .control-label { + color: #468847; +} + +.has-success .input-with-feedback { + padding-right: 32px; + border-color: #468847; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.has-success .input-with-feedback:focus { + border-color: #356635; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #7aba7b; +} + +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; + 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; +} + +.form-actions:before, +.form-actions:after { + display: table; + content: " "; +} + +.form-actions:after { + clear: both; +} + +.help-block, +.help-inline { + color: #737373; +} + +.help-block { + display: block; + margin-bottom: 10px; +} + +.help-inline { + display: inline-block; + padding-left: 5px; + vertical-align: middle; +} + +.input-group { + display: table; +} + +.input-group[class*="span"] { + float: none; + padding: 0; +} + +.input-group input, +.input-group select { + width: 100%; +} + +.input-group-addon, +.input-group-btn, +.input-group input { + display: table-cell; + margin: 0; + border-radius: 0; +} + +.input-group-addon.input-small, +.input-group-btn.input-small, +.input-group input.input-small { + border-radius: 0; +} + +.input-group-addon.input-large, +.input-group-btn.input-large, +.input-group input.input-large { + border-radius: 0; +} + +.input-group-addon, +.input-group-btn { + width: 1%; + vertical-align: middle; +} + +.input-group-addon { + padding: 6px 8px; + font-size: 14; + font-weight: normal; + line-height: 20px; + text-align: center; + text-shadow: 0 1px 0 #fff; + background-color: #eeeeee; + border: 1px solid #ccc; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.input-group-addon.input-small { + padding: 2px 10px; + font-size: 11.9; +} + +.input-group-addon.input-large { + padding: 11px 14px; + font-size: 17.5; +} + +.input-group input:first-child, +.input-group-addon:first-child { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.input-group input:first-child.input-small, +.input-group-addon:first-child.input-small { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.input-group input:first-child.input-large, +.input-group-addon:first-child.input-large { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.input-group-addon:first-child { + border-right: 0; +} + +.input-group input:last-child, +.input-group-addon:last-child { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.input-group input:last-child.input-small, +.input-group-addon:last-child.input-small { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.input-group input:last-child.input-large, +.input-group-addon:last-child.input-large { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.input-group-addon:last-child { + border-left: 0; +} + +.input-group-btn { + position: relative; + white-space: nowrap; +} + +.input-group-btn > .btn { + position: relative; + float: left; + border-radius: 0; +} + +.input-group-btn > .btn + .btn { + margin-left: -1px; +} + +.input-group-btn > .btn:hover, +.input-group-btn > .btn:active { + z-index: 2; +} + +.input-group-btn:first-child > .btn:first-child, +.input-group-btn:first-child > .dropdown-toggle:first-child { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.input-group-btn:first-child > .btn:first-child.btn-large, +.input-group-btn:first-child > .dropdown-toggle:first-child.btn-large { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.input-group-btn:first-child > .btn:first-child.btn-small, +.input-group-btn:first-child > .dropdown-toggle:first-child.btn-small { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.input-group-btn:last-child > .btn:last-child, +.input-group-btn:last-child > .dropdown-toggle { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.input-group-btn:last-child > .btn:last-child.btn-large, +.input-group-btn:last-child > .dropdown-toggle.btn-large { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.input-group-btn:last-child > .btn:last-child.btn-small, +.input-group-btn:last-child > .dropdown-toggle.btn-small { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +@media screen and (min-width: 768px) { + .form-horizontal .control-group { + position: relative; + margin-bottom: 20px; + } + .form-horizontal .control-group:before, + .form-horizontal .control-group:after { + display: table; + content: " "; + } + .form-horizontal .control-group:after { + clear: both; + } + .form-horizontal .control-group input, + .form-horizontal .control-group select, + .form-horizontal .control-group textarea { + margin-bottom: 0; + } + .form-horizontal .control-group > .control-label { + float: left; + width: 160px; + padding-top: 6px; + text-align: right; + } + .form-horizontal .control-group > .controls { + margin-left: 180px; + } +} + +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14; + font-weight: 500; + line-height: 20px; + text-align: center; + white-space: nowrap; + vertical-align: middle; + cursor: pointer; + border: 1px solid #a7a9aa; + border-radius: 4px; +} + +.btn:focus { + outline: thin dotted #333; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} + +.btn:hover, +.btn:focus { + color: #fff; + text-decoration: none; +} + +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: default; + opacity: 0.65; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-large { + padding: 11px 14px; + font-size: 17.5; + border-radius: 6px; +} + +.btn-small { + padding: 2px 10px; + font-size: 11.9; + border-radius: 3px; +} + +.btn-mini { + padding: 0 6px; + font-size: 10.5; + border-radius: 3px; +} + +.btn-block { + display: block; + width: 100%; + padding-right: 0; + padding-left: 0; +} + +.btn-block + .btn-block { + margin-top: 5px; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.btn { + color: #ffffff; + background-color: #a7a9aa; + border-color: #a7a9aa; +} + +.btn:hover, +.btn:focus, +.btn:active, +.btn.active { + background-color: #9a9c9d; + border-color: #8d9091; +} + +.btn.disabled:hover, +.btn[disabled]:hover, +fieldset[disabled] .btn:hover, +.btn.disabled:focus, +.btn[disabled]:focus, +fieldset[disabled] .btn:focus, +.btn.disabled:active, +.btn[disabled]:active, +fieldset[disabled] .btn:active, +.btn.disabled.active, +.btn[disabled].active, +fieldset[disabled] .btn.active { + background-color: #a7a9aa; + border-color: #a7a9aa; +} + +.btn-primary { + background-color: #428bca; + border-color: #428bca; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active { + background-color: #357ebd; + border-color: #3071a9; +} + +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #428bca; + border-color: #428bca; +} + +.btn-warning { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active { + background-color: #eea236; + border-color: #ec971f; +} + +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #f0ad4e; +} + +.btn-danger { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active { + background-color: #d43f3a; + border-color: #c9302c; +} + +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d9534f; +} + +.btn-success { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active { + background-color: #4cae4c; + border-color: #449d44; +} + +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #5cb85c; +} + +.btn-info { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active { + background-color: #46b8da; + border-color: #31b0d5; +} + +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #5bc0de; +} + +.btn-link, +.btn-link:active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + background-image: none; + -webkit-box-shadow: none; + box-shadow: none; +} + +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} + +.btn-link { + font-weight: normal; + color: #428bca; + cursor: pointer; + border-radius: 0; +} + +.btn-link:hover, +.btn-link:focus { + color: #2a6496; + text-decoration: underline; + background-color: transparent; +} + +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #333333; + text-decoration: none; +} + +.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; +} + +.fade.in { + opacity: 1; +} + +/*.collapse { + position: relative; + height: 0; + overflow: hidden; + .transition(height .35s ease); + &.in { + height: auto; + } +}*/ + +.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; +} + +.collapse.in { + height: auto; +} + +@font-face { + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + 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'); +} + +.glyphicon:before { + font-family: 'Glyphicons Halflings'; + font-style: normal; + line-height: 1; +} + +.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"; +} + +.dropup, +.dropdown { + position: relative; +} + +.dropdown-toggle:active, +.open .dropdown-toggle { + outline: 0; +} + +.caret { + display: inline-block; + width: 0; + height: 0; + vertical-align: top; + border-top: 4px solid #000; + border-right: 4px solid transparent; + border-left: 4px solid transparent; + content: ""; +} + +.dropdown .caret { + margin-top: 8px; + margin-left: 2px; +} + +.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; +} + +.dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 20px; + color: #333333; + white-space: nowrap; +} + +.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: -moz-linear-gradient(top, #428bca, #357ebd); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, #357ebd); + background-image: -o-linear-gradient(top, #428bca, #357ebd); + background-image: linear-gradient(to bottom, #428bca, #357ebd); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #ffffff; + text-decoration: none; + background-color: #357ebd; + background-image: -moz-linear-gradient(top, #428bca, #357ebd); + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#428bca), to(#357ebd)); + background-image: -webkit-linear-gradient(top, #428bca, #357ebd); + background-image: -o-linear-gradient(top, #428bca, #357ebd); + background-image: linear-gradient(to bottom, #428bca, #357ebd); + background-repeat: repeat-x; + outline: 0; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff428bca', endColorstr='#ff357ebd', GradientType=0); +} + +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #999999; +} + +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: default; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); +} + +.open > .dropdown-menu { + display: block; +} + +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} + +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + border-top: 0; + border-bottom: 4px solid #000; + content: ""; +} + +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu > .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; + border-top-left-radius: 0; +} + +.dropdown-submenu:hover > .dropdown-menu { + display: block; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; + margin-top: 0; + margin-bottom: -2px; + border-bottom-left-radius: 0; +} + +.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: " "; +} + +.dropdown-submenu:hover > a:after { + border-left-color: #ffffff; +} + +.dropdown-submenu.pull-left { + float: none; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; + border-top-right-radius: 0; +} + +.dropdown .dropdown-menu .nav-header { + padding-right: 20px; + padding-left: 20px; +} + +.typeahead { + z-index: 1051; +} + +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} + +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} + +.well-large { + padding: 24px; + border-radius: 6px; +} + +.well-small { + padding: 9px; + border-radius: 3px; +} + +.close { + float: right; + font-size: 20px; + font-weight: bold; + line-height: 20px; + color: #000; + text-shadow: 0 1px 0 #ffffff; + opacity: 0.2; + filter: alpha(opacity=20); +} + +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + opacity: 0.5; + filter: alpha(opacity=50); +} + +button.close { + padding: 0; + cursor: pointer; + background: transparent; + border: 0; + -webkit-appearance: none; +} + +.nav { + padding-left: 0; + margin-bottom: 0; + margin-left: 0; + list-style: none; +} + +.nav:before, +.nav:after { + display: table; + content: " "; +} + +.nav:after { + clear: both; +} + +.nav > li { + display: block; +} + +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} + +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eeeeee; +} + +.nav > .pull-right { + float: right; +} + +.nav-tabs { + border-bottom: 1px solid #ddd; +} + +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} + +.nav-tabs > li > a { + margin-right: 2px; + line-height: 20px; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} + +.nav-tabs > li > a:hover { + border-color: #eeeeee #eeeeee #dddddd; +} + +.nav-tabs > .active > a, +.nav-tabs > .active > a:hover, +.nav-tabs > .active > a:focus { + color: #555555; + cursor: default; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} + +.nav-pills > li { + float: left; +} + +.nav-pills > li > a { + border-radius: 5px; +} + +.nav-pills > li + li > a { + margin-left: 2px; +} + +.nav-pills > .active > a, +.nav-pills > .active > a:hover, +.nav-pills > .active > a:focus { + color: #fff; + background-color: #428bca; +} + +.nav-stacked > li { + float: none; +} + +.nav-stacked > li + li > a { + margin-top: 2px; + margin-left: 0; +} + +.nav-justified { + max-height: 40px; +} + +.nav-justified > li { + display: table-cell; + float: none; + width: 1%; + text-align: center; +} + +.nav-list > li > a { + margin-bottom: -1px; + border: 1px solid #e5e5e5; +} + +.nav-list > li:first-child > a { + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.nav-list > li:last-child > a { + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.nav-list > .active > a, +.nav-list > .active > a:hover, +.nav-list > .active > a:focus { + z-index: 2; + color: #fff; + background-color: #428bca; + border-color: #428bca; +} + +.nav > .disabled > a { + color: #999999; +} + +.nav > .disabled > a:hover, +.nav > .disabled > a:focus { + color: #999999; + text-decoration: none; + cursor: default; + background-color: transparent; +} + +.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; +} + +.nav li + .nav-header { + margin-top: 9px; +} + +.nav .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; + border-bottom: 1px solid #ffffff; +} + +.tabbable:before, +.tabbable:after { + display: table; + content: " "; +} + +.tabbable:after { + clear: both; +} + +.tab-content > .tab-pane, +.pill-content > .pill-pane { + display: none; +} + +.tab-content > .active, +.pill-content > .active { + display: block; +} + +/* +// Prevent IE8 from misplacing imgs +// See https://github.com/h5bp/html5-boilerplate/issues/984#issuecomment-3985989 +.nav > li > a > img { + max-width: none; +} + +// Dropdowns +// ------------------------- + +.nav-tabs .dropdown-menu { + // Remove the top rounded corners here since there is a hard edge above the menu + .border-top-radius(0); +} + +// Default dropdown links +// ------------------------- +// Make carets use linkColor to start +.nav .dropdown-toggle .caret { + border-top-color: @link-color; + border-bottom-color: @link-color; + margin-top: 8px; +} +.nav .dropdown-toggle:hover .caret { + border-top-color: @link-color-hover; + border-bottom-color: @link-color-hover; +} + +// 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 dropdown links +// ------------------------- +.nav > .dropdown.active > a:hover { + cursor: pointer; +} + +// Open dropdowns +// ------------------------- +.nav-tabs .open .dropdown-toggle, +.nav-pills .open .dropdown-toggle, +.nav > li.dropdown.open.active > a:hover { + color: #fff; + background-color: @grayLight; + border-color: @grayLight; +} +.nav li.dropdown.open .caret, +.nav li.dropdown.open.active .caret, +.nav li.dropdown.open a:hover .caret { + border-top-color: #fff; + border-bottom-color: #fff; + .opacity(1); +} + +// Dropdowns in stacked tabs +.tabs-stacked .open > a:hover { + border-color: @grayLight; +} + +*/ + +.navbar { + position: relative; + padding: 10px 15px; + background-color: #eeeeee; + border-radius: 4px; +} + +.navbar:before, +.navbar:after { + display: table; + content: " "; +} + +.navbar:after { + clear: both; +} + +.navbar .nav { + margin-top: 15px; +} + +.navbar .nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + line-height: 20px; + color: #777777; +} + +.navbar .nav > li > a:hover, +.navbar .nav > li > a:focus { + color: #333333; + background-color: transparent; +} + +.navbar .nav > .active > a, +.navbar .nav > .active > a:hover, +.navbar .nav > .active > a:focus { + color: #555555; + background-color: #d5d5d5; +} + +.navbar .nav > .disabled > a, +.navbar .nav > .disabled > a:hover, +.navbar .nav > .disabled > a:focus { + color: #cccccc; + background-color: transparent; +} + +.navbar-static-top { + border-radius: 0; +} + +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; + border-radius: 0; +} + +.navbar-fixed-top { + top: 0; +} + +.navbar-fixed-bottom { + bottom: 0; +} + +.navbar-brand { + display: block; + max-width: 200px; + padding: 7px 15px; + margin-right: auto; + margin-left: auto; + font-size: 18px; + font-weight: 500; + line-height: 20px; + color: #777777; + text-align: center; +} + +.navbar-brand:hover, +.navbar-brand:focus { + color: #5e5e5e; + text-decoration: none; + background-color: transparent; +} + +.navbar-toggle { + position: absolute; + top: 10px; + right: 10px; + padding: 8px 12px; + background-color: transparent; + border: 1px solid #ddd; + border-radius: 4px; +} + +.navbar-toggle:hover, +.navbar-toggle:focus { + background-color: #ddd; +} + +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + background-color: #ccc; + border-radius: 1px; +} + +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} + +.navbar .nav > .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e1e1e1; + border-bottom: 1px solid #fbfbfb; +} + +.navbar-form { + margin-top: 8px; + margin-bottom: 8px; +} + +.navbar .nav > li > .dropdown-menu { + margin-top: 0; + border-top-right-radius: 0; + border-top-left-radius: 0; +} + +.navbar-fixed-bottom .nav > li > .dropdown-menu { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} + +.navbar .nav li.dropdown > a:hover .caret, +.navbar .nav li.dropdown > a:focus .caret { + border-top-color: #333333; + border-bottom-color: #333333; +} + +.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: #d5d5d5; +} + +.navbar .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #777777; + border-bottom-color: #777777; +} + +.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; +} + +.navbar .pull-right > li > .dropdown-menu, +.navbar .nav > li > .dropdown-menu.pull-right { + right: 0; + left: auto; +} + +.navbar-inverse { + background-color: #222222; +} + +.navbar-inverse .navbar-brand { + color: #999999; +} + +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .navbar-text { + color: #999999; +} + +.navbar-inverse .nav > li > a { + color: #999999; +} + +.navbar-inverse .nav > li > a:hover, +.navbar-inverse .nav > li > a:focus { + color: #ffffff; + background-color: transparent; +} + +.navbar-inverse .nav > .active > a, +.navbar-inverse .nav > .active > a:hover, +.navbar-inverse .nav > .active > a:focus { + color: #ffffff; + background-color: #080808; +} + +.navbar-inverse .nav > .disabled > a, +.navbar-inverse .nav > .disabled > a:hover, +.navbar-inverse .nav > .disabled > a:focus { + color: #444444; + background-color: transparent; +} + +.navbar-inverse .navbar-toggle { + border-color: #333; +} + +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} + +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} + +.navbar-inverse .nav > .divider { + background-color: #151515; + border-bottom-color: #2f2f2f; +} + +.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: #080808; +} + +.navbar-inverse .nav li.dropdown > a:hover .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { + border-top-color: #999999; + border-bottom-color: #999999; +} + +.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; +} + +@media screen and (min-width: 768px) { + .navbar { + padding-top: 0; + padding-bottom: 0; + } + .navbar-brand { + float: left; + padding-top: 15px; + padding-bottom: 15px; + margin-left: -10px; + } + .navbar .nav { + float: left; + margin-top: 0; + } + .navbar .nav:before, + .navbar .nav:after { + display: table; + content: " "; + } + .navbar .nav:after { + clear: both; + } + .navbar .nav.pull-right { + float: right; + } + .navbar .nav > li { + float: left; + } + .navbar .nav > .divider { + width: 1px; + height: 30px; + margin: 10px 9px; + border-right: 1px solid #fbfbfb; + border-bottom: 0; + } + .navbar-inverse .nav > .divider { + border-right-color: #2f2f2f; + } + .navbar-toggle { + position: relative; + top: auto; + left: auto; + display: none; + } + .nav-collapse.collapse { + height: auto !important; + overflow: visible !important; + } +} + +/* + +// Janky solution for now to account for links outside the .nav +// ------------------------- +.navbar-link { + color: @navbar-link-color; + &:hover { + color: @navbar-link-color-hover; + } +} + +// 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 { + 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; + } + input[type="image"], + input[type="checkbox"], + input[type="radio"] { + margin-top: 3px; + } + .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 + } + } +} + +*/ + +.btn .caret { + border-top-color: #ffffff; +} + +.dropup .btn .caret { + border-bottom-color: #ffffff; +} + +.btn-group { + position: relative; + display: inline-block; + vertical-align: middle; +} + +.btn-group > .btn { + position: relative; + float: left; +} + +.btn-group > .btn + btn { + margin-left: -1px; +} + +.btn-group > .btn:hover, +.btn-group > .btn:active { + z-index: 2; +} + +.btn-toolbar:before, +.btn-toolbar:after { + display: table; + content: " "; +} + +.btn-toolbar:after { + clear: both; +} + +.btn-toolbar .btn-group { + float: left; +} + +.btn-toolbar > .btn + .btn, +.btn-toolbar > .btn-group + .btn, +.btn-toolbar > .btn + .btn-group, +.btn-toolbar > .btn-group + .btn-group { + margin-left: 5px; +} + +.btn-group > .btn { + position: relative; + border-radius: 0; +} + +.btn-group > .btn:first-child { + margin-left: 0; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.btn-group > .btn:last-child, +.btn-group > .dropdown-toggle { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.btn-group > .btn.large:first-child { + margin-left: 0; + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.btn-group > .btn.large:last-child, +.btn-group > .large.dropdown-toggle { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} + +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} + +.btn-group > .btn-mini + .dropdown-toggle { + padding-right: 5px; + padding-left: 5px; +} + +.btn-group > .btn-large + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn .caret { + margin-top: 8px; + margin-left: 0; +} + +.btn-large .caret { + border-width: 5px; +} + +.dropup .btn-large .caret { + border-bottom-width: 5px; +} + +.btn-group-vertical > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} + +.btn-group-vertical .btn:first-child { + border-radius: 0; + border-top-right-radius: 4px; + border-top-left-radius: 4px; +} + +.btn-group-vertical .btn:last-child { + border-radius: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} + +.btn-group-vertical .btn-large:first-child { + border-top-right-radius: 6px; + border-top-left-radius: 6px; +} + +.btn-group-vertical .btn-large:last-child { + border-bottom-right-radius: 6px; + border-bottom-left-radius: 6px; +} + +.btn-group-justified { + display: table; + width: 100%; +} + +.btn-group-justified .btn { + display: table-cell; + float: none; + width: 1%; +} + +.btn-group[data-toggle="buttons-radio"] > .btn > input[type="radio"], +.btn-group[data-toggle="buttons-checkbox"] > .btn > input[type="checkbox"] { + display: none; +} + +.breadcrumb { + padding: 8px 15px; + margin: 0 0 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} + +.breadcrumb > li { + display: inline-block; + text-shadow: 0 1px 0 #fff; +} + +.breadcrumb > li:after { + display: inline-block; + padding: 0 5px; + color: #ccc; + content: "\00a0 /"; +} + +.breadcrumb > .active { + color: #999999; +} + +.pagination { + display: inline-block; + margin: 20px 0; + border-radius: 4px; +} + +.pagination > li { + display: inline; +} + +.pagination > li > a, +.pagination > li > span { + float: left; + padding: 4px 12px; + line-height: 20px; + text-decoration: none; + background-color: #ffffff; + border: 1px solid #dddddd; + border-left-width: 0; +} + +.pagination > li > a:hover, +.pagination > li > a:focus, +.pagination > .active > a, +.pagination > .active > span { + background-color: #f5f5f5; +} + +.pagination > .active > a, +.pagination > .active > span { + color: #999999; + cursor: default; +} + +.pagination > .disabled > span, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #999999; + cursor: default; + background-color: #ffffff; +} + +.pagination > li:first-child > a, +.pagination > li:first-child > span { + border-left-width: 1px; + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} + +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} + +.pagination-large > li > a, +.pagination-large > li > span { + padding: 11px 14px; + font-size: 17.5; +} + +.pagination-large > li:first-child > a, +.pagination-large > li:first-child > span { + border-bottom-left-radius: 6px; + border-top-left-radius: 6px; +} + +.pagination-large > li:last-child > a, +.pagination-large > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} + +.pagination-mini > li:first-child > a, +.pagination-small > li:first-child > a, +.pagination-mini > li:first-child > span, +.pagination-small > li:first-child > span { + border-bottom-left-radius: 3px; + border-top-left-radius: 3px; +} + +.pagination-mini > li:last-child > a, +.pagination-small > li:last-child > a, +.pagination-mini > li:last-child > span, +.pagination-small > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} + +.pagination-small > li > a, +.pagination-small > li > span { + padding: 2px 10px; + font-size: 11.9; +} + +.pagination-mini > li > a, +.pagination-mini > li > span { + padding: 0 6px; + font-size: 10.5; +} + +.pager { + margin: 20px 0; + text-align: center; + list-style: none; +} + +.pager:before, +.pager:after { + display: table; + content: " "; +} + +.pager:after { + clear: both; +} + +.pager li { + display: inline; +} + +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} + +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #f5f5f5; +} + +.pager .next > a, +.pager .next > span { + float: right; +} + +.pager .previous > a, +.pager .previous > span { + float: left; +} + +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #999999; + cursor: default; + background-color: #fff; +} + +.modal-open { + overflow: hidden; +} + +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: auto; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; +} + +.modal.fade { + top: -25%; + -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; + -moz-transition: opacity 0.3s linear, top 0.3s ease-out; + -o-transition: opacity 0.3s linear, top 0.3s ease-out; + transition: opacity 0.3s linear, top 0.3s ease-out; +} + +.modal.fade.in { + top: 0; +} + +.modal-dialog { + position: relative; + top: 0; + right: 0; + left: 0; + z-index: 1050; + width: auto; + padding: 10px; +} + +.modal-content { + position: relative; + background-color: #fff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + outline: none; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} + +.modal-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.modal-backdrop.fade.in { + opacity: 0.5; + filter: alpha(opacity=50); +} + +.modal-header { + padding: 9px 15px; + border-bottom: 1px solid #e5e5e5; +} + +.modal-header .close { + margin-top: 2px; +} + +.modal-title { + margin: 0; + line-height: 30px; +} + +.modal-body { + position: relative; + padding: 20px; +} + +.modal-footer { + padding: 19px 20px 20px; + margin-top: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} + +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} + +.modal-footer:after { + clear: both; +} + +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} + +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} + +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} + +@media screen and (min-width: 768px) { + .modal-dialog { + right: auto; + left: 50%; + width: 560px; + padding-top: 30px; + padding-bottom: 30px; + margin-left: -280px; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5); + } +} + +.tooltip { + position: absolute; + z-index: 1030; + display: block; + font-size: 11px; + line-height: 1.4; + opacity: 0; + filter: alpha(opacity=0); + visibility: visible; +} + +.tooltip.in { + opacity: 1; + filter: alpha(opacity=100); +} + +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} + +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} + +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} + +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} + +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #ffffff; + text-align: center; + text-decoration: none; + background-color: rgba(0, 0, 0, 0.9); + border-radius: 4px; +} + +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-top-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 0; +} + +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-right-color: rgba(0, 0, 0, 0.9); + border-width: 5px 5px 5px 0; +} + +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-left-color: rgba(0, 0, 0, 0.9); + border-width: 5px 0 5px 5px; +} + +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-bottom-color: rgba(0, 0, 0, 0.9); + border-width: 0 5px 5px; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1010; + display: none; + max-width: 276px; + padding: 1px; + text-align: left; + white-space: normal; + background-color: #ffffff; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} + +.popover.top { + margin-top: -10px; +} + +.popover.right { + margin-left: 10px; +} + +.popover.bottom { + margin-top: 10px; +} + +.popover.left { + margin-left: -10px; +} + +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + font-weight: normal; + line-height: 18px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} + +.popover-title:empty { + display: none; +} + +.popover-content { + padding: 9px 14px; +} + +.popover .arrow, +.popover .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.popover .arrow { + border-width: 11px; +} + +.popover .arrow:after { + border-width: 10px; + content: ""; +} + +.popover.top .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, 0.25); + border-bottom-width: 0; +} + +.popover.top .arrow:after { + bottom: 1px; + margin-left: -10px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.popover.right .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, 0.25); + border-left-width: 0; +} + +.popover.right .arrow:after { + bottom: -10px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.popover.bottom .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, 0.25); + border-top-width: 0; +} + +.popover.bottom .arrow:after { + top: 1px; + margin-left: -10px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.popover.left .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, 0.25); + border-right-width: 0; +} + +.popover.left .arrow:after { + right: 1px; + bottom: -10px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.alert { + padding: 8px 35px 8px 14px; + 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 > a, +.alert > p > a { + font-weight: 500; + color: #a47e3c; +} + +.close { + position: relative; + top: -2px; + right: -21px; + line-height: 20px; + color: inherit; +} + +.alert-success { + color: #468847; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +.alert-success hr { + border-top-color: #c9e2b3; +} + +.alert-success > a, +.alert-success > p > a { + color: #356635; +} + +.alert-danger, +.alert-error { + color: #b94a48; + background-color: #f2dede; + border-color: #eed3d7; +} + +.alert-danger hr, +.alert-error hr { + border-top-color: #e6c1c7; +} + +.alert-danger > a, +.alert-error > a, +.alert-danger > p > a, +.alert-error > p > a { + color: #953b39; +} + +.alert-info { + color: #3a87ad; + background-color: #d9edf7; + border-color: #bce8f1; +} + +.alert-info hr { + border-top-color: #a6e1ec; +} + +.alert-info > a, +.alert-info > p > a { + color: #2d6987; +} + +.alert-block { + padding-top: 14px; + padding-bottom: 14px; +} + +.alert-block > p, +.alert-block > ul { + margin-bottom: 0; +} + +.alert-block p + p { + margin-top: 5px; +} + +.thumbnail, +.img-thumbnail { + padding: 4px; + line-height: 20px; + border: 1px solid #ddd; + 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: #428bca; +} + +.thumbnail > img { + display: block; + max-width: 100%; + margin-right: auto; + margin-left: auto; +} + +.thumbnail .caption { + padding: 9px; + color: #555555; +} + +.media, +.media-body { + overflow: hidden; + zoom: 1; +} + +.media, +.media .media { + margin-top: 15px; +} + +.media:first-child { + margin-top: 0; +} + +.media-object { + display: block; +} + +.media-heading { + margin: 0 0 5px; +} + +.media > .pull-left { + margin-right: 10px; +} + +.media > .pull-right { + margin-left: 10px; +} + +.media-list { + margin-left: 0; + list-style: none; +} + +.label { + 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: #999999; + border-radius: .25em; +} + +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.label-danger { + background-color: #d9534f; +} + +.label-danger[href] { + background-color: #c9302c; +} + +.label-warning { + background-color: #f0ad4e; +} + +.label-warning[href] { + background-color: #ec971f; +} + +.label-success { + background-color: #5cb85c; +} + +.label-success[href] { + background-color: #449d44; +} + +.label-info { + background-color: #5bc0de; +} + +.label-info[href] { + background-color: #31b0d5; +} + +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: middle; + background-color: #999999; + border-radius: 10px; +} + +.badge:empty { + display: none; +} + +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.btn-mini .badge { + top: 0; +} + +.nav-list > .active > a > .badge, +.nav-pills > .active > a > .badge { + color: #428bca; + background-color: #fff; +} + +.nav-pills > li > a > .badge { + margin-left: 3px; +} + +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-moz-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-ms-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +@-o-keyframes progress-bar-stripes { + from { + background-position: 0 0; + } + to { + background-position: 40px 0; + } +} + +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} + +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); +} + +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + color: #fff; + text-align: center; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + background-color: #428bca; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); + -webkit-transition: width 0.6s ease; + -moz-transition: width 0.6s ease; + -o-transition: width 0.6s ease; + transition: width 0.6s ease; +} + +.progress-striped .progress-bar { + background-color: #428bca; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -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; + -o-background-size: 40px 40px; + background-size: 40px 40px; +} + +.progress.active .progress-bar { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -moz-animation: progress-bar-stripes 2s linear infinite; + -ms-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} + +.progress-bar-danger { + background-color: #d9534f; +} + +.progress-striped .progress-bar-danger { + background-color: #d9534f; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -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-bar-success { + background-color: #5cb85c; +} + +.progress-striped .progress-bar-success { + background-color: #5cb85c; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -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-bar-warning { + background-color: #f0ad4e; +} + +.progress-striped .progress-bar-warning { + background-color: #f0ad4e; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -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-bar-info { + background-color: #5bc0de; +} + +.progress-striped .progress-bar-info { + background-color: #5bc0de; + background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -moz-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-image: -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); +} + +.accordion { + margin-bottom: 20px; +} + +.accordion-group { + margin-bottom: 2px; + border: 1px solid #e5e5e5; + border-radius: 4px; +} + +.accordion-heading { + border-bottom: 0; +} + +.accordion-heading .accordion-toggle { + display: block; + padding: 8px 15px; +} + +.accordion-toggle { + cursor: pointer; +} + +.accordion-inner { + padding: 9px 15px; + border-top: 1px solid #e5e5e5; +} + +.carousel { + position: relative; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: 0.6s ease-in-out left; + -moz-transition: 0.6s ease-in-out left; + -o-transition: 0.6s ease-in-out left; + transition: 0.6s ease-in-out left; +} + +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + line-height: 1; +} + +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} + +.carousel-inner > .active { + left: 0; +} + +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} + +.carousel-inner > .next { + left: 100%; +} + +.carousel-inner > .prev { + left: -100%; +} + +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} + +.carousel-inner > .active.left { + left: -100%; +} + +.carousel-inner > .active.right { + left: 100%; +} + +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); + opacity: 0.5; + filter: alpha(opacity=50); +} + +.carousel-control.left { + background-color: rgba(0, 0, 0, 0.0001); + background-color: transparent; + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.0001)); + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0.0001))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.0001)); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.0001)); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0.0001)); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); +} + +.carousel-control.right { + right: 0; + left: auto; + background-color: rgba(0, 0, 0, 0.5); + background-color: transparent; + background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.0001), rgba(0, 0, 0, 0.5)); + background-image: -webkit-gradient(linear, 0 0, 100% 0, from(rgba(0, 0, 0, 0.0001)), to(rgba(0, 0, 0, 0.5))); + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.0001), rgba(0, 0, 0, 0.5)); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.0001), rgba(0, 0, 0, 0.5)); + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.0001), rgba(0, 0, 0, 0.5)); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); +} + +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + opacity: 0.9; + filter: alpha(opacity=90); +} + +.carousel-control .glyphicon { + position: absolute; + top: 50%; + left: 50%; + z-index: 5; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -10px; + margin-left: -10px; +} + +.carousel-indicators { + position: absolute; + bottom: 20px; + left: 50%; + z-index: 5; + width: 100px; + margin: 0 0 0 -50px; + text-align: center; + list-style: none; +} + +.carousel-indicators li { + display: inline-block; + width: 8px; + height: 8px; + margin-right: 0; + margin-left: 0; + text-indent: -999px; + cursor: pointer; + border: 1px solid #fff; + border-radius: 5px; +} + +.carousel-indicators .active { + background-color: #fff; +} + +.carousel-caption { + position: absolute; + right: 20%; + bottom: 20px; + left: 20%; + display: none; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.6); +} + +@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: 0; + left: 0; + z-index: 10; + display: block; + max-width: 60%; + padding: 30px; + margin-right: 0; + margin-left: 0; + } +} + +.jumbotron { + padding: 30px; + margin-bottom: 30px; + font-size: 21px; + font-weight: 200; + line-height: 30px; + color: inherit; + background-color: #eeeeee; +} + +.jumbotron h1 { + line-height: 1; + color: inherit; +} + +.jumbotron p { + line-height: 1.4; +} + +@media screen and (min-width: 768px) { + .jumbotron { + padding: 50px 60px; + border-radius: 6px; + } + .jumbotron h1 { + font-size: 60px; + } +} + +.clearfix:before, +.clearfix:after { + display: table; + content: " "; +} + +.clearfix:after { + clear: both; +} + +.pull-right { + float: right; +} + +.pull-left { + float: left; +} + +.hide { + display: none !important; +} + +.show { + display: block !important; +} + +.invisible { + visibility: hidden; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.affix { + position: fixed; +} + +@-ms-viewport { + width: device-width; +} + +.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; + } +} diff --git a/docs/_site/assets/css/docs.css b/docs/_site/assets/css/docs.css new file mode 100644 index 0000000000..ca8fc006ec --- /dev/null +++ b/docs/_site/assets/css/docs.css @@ -0,0 +1,665 @@ +/* + * Bootstrap Documentation + * Special styles for presenting Bootstrap's documentation and code examples. + */ + + + +/* Key scaffolding +-------------------------------------------------- */ + +body { + padding-top: 54px; + position: relative; /* For scrollyspy */ + /* We add the padding to the body for >768px only */ +} + +/* */ +.bs-docs-footer { + padding-left: 15px; + padding-right: 15px; +} + + + +/* Sections +-------------------------------------------------- */ + +/* Padding for in-page bookmarks */ +section { + padding-top: 30px; +} + +/* Few stylistic typography tweaks */ +section > .page-header, +section > .lead { + color: #5a5a5a; +} +section > ul li { + margin-bottom: 5px; +} + + + +/* Navbar +-------------------------------------------------- */ + +.bs-docs-navbar { + background-color: #fff; + border-bottom: 1px solid #ccc; /* IE8 */ + border-bottom: 1px solid rgba(0,0,0,.1); +} +.bs-docs-navbar .nav > .active > a, +.bs-docs-navbar .nav > .active > a:hover { + font-weight: 500; + background-color: transparent; +} + + + +/* Jumbotrons +-------------------------------------------------- */ + +/* Base class */ +.bs-docs-jumbotron { + position: relative; + margin-bottom: 20px; + padding: 30px 15px; + color: #fff; + text-align: center; + background-color: #b94a48; +} +.bs-docs-jumbotron h1 { + font-size: 50px; +} + +/* Link styles (used on .masthead-links as well) */ +.bs-docs-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-docs-jumbotron a:hover { + color: #fff; +} + +/* Download button */ +.bs-docs-jumbotron .btn { + padding: 18px 24px; + font-size: 21px; + color: #b94a48; /* redeclare to override the `.jumbotron a` */ + background-color: #fff; +} +.bs-docs-jumbotron .btn, +.bs-docs-jumbotron .btn:hover, +.bs-docs-jumbotron .btn:active { + color: #b94a48; /* redeclare to override the `.jumbotron a` */ + background-color: #fff; + border-color: #fff; +} + +/* Masthead (docs home) +------------------------- */ +.masthead h1 { + line-height: 1; +} + +/* Textual links in masthead */ +.masthead-links { + margin: 20px 0; + list-style: none; +} +.masthead-links li { + display: inline; + padding: 0 10px; + color: rgba(255,255,255,.25); +} + + + +/* Marketing section of Overview +-------------------------------------------------- */ + +.bs-docs-marketing { + text-align: center; + color: #5a5a5a; +} +.bs-docs-marketing h1 { + margin: 60px 0 10px; + font-size: 50px; + line-height: 1; +} +.bs-docs-marketing h2 { + margin-bottom: 5px; +} +.bs-docs-marketing p { + font-size: 16px; + line-height: 1.4; +} +.bs-docs-marketing .marketing-byline { + margin-bottom: 40px; + font-size: 21px; + font-weight: 300; + line-height: 1.25; + color: #999; +} +.marketing-img { + display: block; + margin: 30px auto 10px; + max-height: 145px; +} + + + +/* Special grid styles +-------------------------------------------------- */ + +.show-grid { + margin-bottom: 15px; +} +.show-grid [class^="span"] { + padding-top: 10px; + padding-bottom: 10px; + background-color: #eee; + border: 1px solid #ddd; +} +.show-grid [class*="span"]:hover { + background-color: #ddd; +} + + + +/* Sidenav +-------------------------------------------------- */ + +/* Base styles are not affixable given mobile-first */ +.bs-docs-sidenav { + margin: 20px 0 0; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.bs-docs-sidenav.affix { + position: static; + top: 0; +} + +/* Chevrons within each link */ +.bs-docs-sidenav .glyphicon-chevron-right { + float: right; + margin-top: 1px; + margin-right: -6px; + opacity: .25; + color: #000; +} +.bs-docs-sidenav a:hover .glyphicon-chevron-right { + opacity: .5; +} +.bs-docs-sidenav .active .glyphicon-chevron-right, +.bs-docs-sidenav .active a:hover .glyphicon-chevron-right { + color: #fff; + opacity: 1; +} + + + +/* Bootstrap code examples +-------------------------------------------------- */ + +/* Base class */ +.bs-docs-example { + position: relative; + padding: 39px 14px 14px; + margin-bottom: -1px; + border: 1px solid #ddd; + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +/* Echo out a label for the example */ +.bs-docs-example:after { + content: "Example"; + position: absolute; + top: -1px; + left: -1px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + color: #9da0a4; + background-color: #f5f5f5; + border: 1px solid #ddd; + border-top-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +/* Tweak display of the examples */ +.bs-docs-example + .prettyprint, +.bs-docs-example + .highlight { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.prettyprint .linenums { + /*margin-left: 0;*/ +} + +/* Tweak content of examples for optimum awesome */ +.bs-docs-example > p:last-child, +.bs-docs-example > ul:last-child, +.bs-docs-example > ol:last-child, +.bs-docs-example > blockquote:last-child, +.bs-docs-example > input:last-child, +.bs-docs-example > select:last-child, +.bs-docs-example > textarea:last-child, +.bs-docs-example > .table:last-child, +.bs-docs-example > .jumbotron:last-child, +.bs-docs-example > .alert:last-child { + margin-bottom: 0; +} + +/* Typography */ +.bs-docs-example-type .table td { + color: #999; + vertical-align: middle; + border-color: ; +} +.bs-docs-example-type .table td, +.bs-docs-example-type .table th { + padding: 15px 0; + border-color: #eee; +} +.bs-docs-example-type .table tr:first-child td, +.bs-docs-example-type .table tr:first-child th { + border-top: 0; +} +.bs-docs-example-type h1, +.bs-docs-example-type h2, +.bs-docs-example-type h3, +.bs-docs-example-type h4, +.bs-docs-example-type h5, +.bs-docs-example-type h6 { + margin: 0; +} + + +/* Navbar examples */ +.bs-navbar-top-example, +.bs-navbar-bottom-example { + z-index: 1; + padding: 0; + height: 90px; + overflow: hidden; /* cut the drop shadows off */ +} +.bs-navbar-top-example .navbar-fixed-top, +.bs-navbar-bottom-example .navbar-fixed-bottom { + margin-left: 0; + margin-right: 0; +} +.bs-navbar-top-example { + -webkit-border-radius: 0 0 4px 4px; + -moz-border-radius: 0 0 4px 4px; + border-radius: 0 0 4px 4px; +} +.bs-navbar-top-example:after { + top: auto; + bottom: -1px; + -webkit-border-radius: 0 4px 0 4px; + -moz-border-radius: 0 4px 0 4px; + border-radius: 0 4px 0 4px; +} +.bs-navbar-bottom-example { + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.bs-navbar-bottom-example .navbar { + margin-bottom: 0; +} + +/* Example modals */ +.bs-docs-example-modal { + background-color: #f5f5f5; +} +.bs-docs-example-modal .modal { + position: relative; + top: auto; + right: auto; + left: auto; + bottom: auto; + z-index: 1; + display: block; +} +.bs-docs-example-modal .modal-dialog { + left: auto; + margin-left: auto; + margin-right: auto; +} + +/* Example dropdowns */ +.bs-docs-example > .dropdown > .dropdown-menu, +.bs-docs-example-submenu > .pull-left > .dropup > .dropdown-menu, +.bs-docs-example-submenu > .pull-left > .dropdown > .dropdown-menu { + position: static; + display: block; + margin-bottom: 5px; +} +.bs-docs-example-submenu { + min-height: 180px; +} +.bs-docs-example-submenu > .pull-left + .pull-left { + margin-left: 20px; +} + +/* Example tabbable tabs */ +.bs-docs-example-tabs .nav-tabs { + margin-bottom: 15px; +} + + +/* Example templates +-------------------------------------------------- */ + +.bs-docs-examples h4 { + margin-bottom: 5px; +} +.bs-docs-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; +} +.the-icons .glyphicon { + display: block; + margin: 5px auto; + vertical-align: middle; + margin-right: 3px; + font-size: 24px; +} +.the-icons li:hover { + background-color: rgba(255,0,0,.1); +} + + + +/* Responsive docs +-------------------------------------------------- */ + +/* Related: responsive utilities tables */ +.table code { + font-size: 13px; + font-weight: normal; +} + +/* Utility classes table +------------------------- */ +.responsive-utilities th small { + display: block; + font-weight: normal; + color: #999; +} +.responsive-utilities tbody th { + font-weight: normal; +} +.responsive-utilities td { + text-align: center; +} +.responsive-utilities td.is-visible { + color: #468847; + background-color: #dff0d8 !important; +} +.responsive-utilities td.is-hidden { + color: #ccc; + background-color: #f9f9f9 !important; +} + +/* Responsive tests +------------------------- */ +.responsive-utilities-test { + margin-top: 5px; + margin-left: 0; + list-style: none; + overflow: hidden; /* clear floats */ +} +.responsive-utilities-test li { + 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; +} +.responsive-utilities-test span { + color: #468847; + background-color: #dff0d8; + border: 1px solid #d6e9c6; +} + + + +/* Footer +-------------------------------------------------- */ + +.bs-docs-footer { + text-align: center; + padding: 30px 0; + margin-top: 100px; + border-top: 1px solid #e5e5e5; +} +.bs-docs-footer p { + margin-bottom: 0; + color: #777; +} +.footer-links { + margin: 10px 0; +} +.footer-links li { + display: inline; + padding: 0 2px; +} +.footer-links li:first-child { + padding-left: 0; +} + +/* Social proof buttons from GitHub & Twitter */ +.bs-docs-social { + margin-top: 10px; + margin-bottom: 20px; + text-align: center; +} +/* Quick links on Home */ +.bs-docs-social-buttons { + display: inline-block; + margin: 0; + padding: 0 10px; + list-style: none; +} +.bs-docs-social-buttons li { + display: inline-block; + padding: 5px 8px; + line-height: 1; +} +.bs-docs-social-buttons .twitter-follow-button { + width: 225px !important; +} +.bs-docs-social-buttons .twitter-share-button { + width: 98px !important; +} + + + +/* Misc docs stuff +-------------------------------------------------- */ + +/* 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); +} + +/* Scrollspy demo on fixed height div */ +.scrollspy-example { + position: relative; + height: 200px; + margin-top: 10px; + overflow: auto; +} + +.highlight { + padding: 9px 14px; + margin-bottom: 14px; + background-color: #f7f7f9; + border: 1px solid #e1e1e8; + border-radius: 4px; +} +.highlight pre { + padding: 0; + margin-bottom: 0; + background-color: transparent; + border: 0; +} +.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; +} + + + +/* Docs gallery +-------------------------------------------------- */ + +.bs-docs-gallery .thumbnail { + max-width: 400px; + margin: 0 auto 20px; +} + + +/* Responsive variations +-------------------------------------------------- */ + +/* Hide code snippets on mobile devices */ +@media screen and (max-width: 480px) { + .bs-docs-example { + border-radius: 4px; + } + .highlight { + display: none; + } +} + +/* Tablets and up */ +@media screen and (min-width: 768px) { + + /* Account for fixed navbar (which is static to start) */ + body { + padding-top: 50px; /* Default height of navbar */ + } + + /* Tweak display of docs jumbotrons */ + .masthead { + padding-top: 100px; + padding-bottom: 100px; + } + .masthead h1 { + font-size: 100px; + } + .masthead p { + font-size: 30px; + margin-left: 10%; + margin-right: 10%; + } + .subhead { + padding-top: 60px; + padding-bottom: 60px; + text-align: left; + } + + /* From here, start to affix the nav because we keep columns here */ + .bs-docs-sidenav.affix { + position: fixed; + top: 54px; + } + .bs-docs-sidenav { + width: 170px; + } + .bs-docs-sidenav.affix-bottom { + position: absolute; + top: auto; + bottom: 270px; + } +} + +/* Tablets/desktops and up */ +@media screen and (min-width: 992px) { + + /* Icons */ + .the-icons li { + width: 12.5%; + } + + .bs-docs-sidenav { + width: 220px; + } +} + +/* Large desktops and up */ +@media screen and (min-width: 1200px) { + .bs-docs-sidenav { + width: 260px; + } +} diff --git a/docs/_site/assets/css/pygments-manni.css b/docs/_site/assets/css/pygments-manni.css new file mode 100644 index 0000000000..1264b87f14 --- /dev/null +++ b/docs/_site/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/_site/assets/fonts/glyphiconshalflings-regular.eot b/docs/_site/assets/fonts/glyphiconshalflings-regular.eot new file mode 100755 index 0000000000..bd59ccd2d6 Binary files /dev/null and b/docs/_site/assets/fonts/glyphiconshalflings-regular.eot differ diff --git a/docs/_site/assets/fonts/glyphiconshalflings-regular.otf b/docs/_site/assets/fonts/glyphiconshalflings-regular.otf new file mode 100644 index 0000000000..b058f1cd1b Binary files /dev/null and b/docs/_site/assets/fonts/glyphiconshalflings-regular.otf differ diff --git a/docs/_site/assets/fonts/glyphiconshalflings-regular.svg b/docs/_site/assets/fonts/glyphiconshalflings-regular.svg new file mode 100755 index 0000000000..0fb4587352 --- /dev/null +++ b/docs/_site/assets/fonts/glyphiconshalflings-regular.svg @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/assets/fonts/glyphiconshalflings-regular.ttf b/docs/_site/assets/fonts/glyphiconshalflings-regular.ttf new file mode 100755 index 0000000000..c63c068feb Binary files /dev/null and b/docs/_site/assets/fonts/glyphiconshalflings-regular.ttf differ diff --git a/docs/_site/assets/fonts/glyphiconshalflings-regular.woff b/docs/_site/assets/fonts/glyphiconshalflings-regular.woff new file mode 100755 index 0000000000..4c778ffdc5 Binary files /dev/null and b/docs/_site/assets/fonts/glyphiconshalflings-regular.woff differ diff --git a/docs/_site/assets/ico/apple-touch-icon-114-precomposed.png b/docs/_site/assets/ico/apple-touch-icon-114-precomposed.png new file mode 100644 index 0000000000..790a64f758 Binary files /dev/null and b/docs/_site/assets/ico/apple-touch-icon-114-precomposed.png differ diff --git a/docs/_site/assets/ico/apple-touch-icon-144-precomposed.png b/docs/_site/assets/ico/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000000..6d0e463fd3 Binary files /dev/null and b/docs/_site/assets/ico/apple-touch-icon-144-precomposed.png differ diff --git a/docs/_site/assets/ico/apple-touch-icon-57-precomposed.png b/docs/_site/assets/ico/apple-touch-icon-57-precomposed.png new file mode 100644 index 0000000000..4936cca83c Binary files /dev/null and b/docs/_site/assets/ico/apple-touch-icon-57-precomposed.png differ diff --git a/docs/_site/assets/ico/apple-touch-icon-72-precomposed.png b/docs/_site/assets/ico/apple-touch-icon-72-precomposed.png new file mode 100644 index 0000000000..b1165bdbdd Binary files /dev/null and b/docs/_site/assets/ico/apple-touch-icon-72-precomposed.png differ diff --git a/docs/_site/assets/ico/favicon.ico b/docs/_site/assets/ico/favicon.ico new file mode 100644 index 0000000000..cb8dbdfc42 Binary files /dev/null and b/docs/_site/assets/ico/favicon.ico differ diff --git a/docs/_site/assets/ico/favicon.png b/docs/_site/assets/ico/favicon.png new file mode 100644 index 0000000000..073c13c0f6 Binary files /dev/null and b/docs/_site/assets/ico/favicon.png differ diff --git a/docs/_site/assets/img/bootstrap-docs-readme.png b/docs/_site/assets/img/bootstrap-docs-readme.png new file mode 100644 index 0000000000..36603bd3b4 Binary files /dev/null and b/docs/_site/assets/img/bootstrap-docs-readme.png differ diff --git a/docs/_site/assets/img/bs-docs-bootstrap-features.png b/docs/_site/assets/img/bs-docs-bootstrap-features.png new file mode 100644 index 0000000000..7cd8501ae1 Binary files /dev/null and b/docs/_site/assets/img/bs-docs-bootstrap-features.png differ diff --git a/docs/_site/assets/img/bs-docs-masthead-pattern.png b/docs/_site/assets/img/bs-docs-masthead-pattern.png new file mode 100644 index 0000000000..75c46a152d Binary files /dev/null and b/docs/_site/assets/img/bs-docs-masthead-pattern.png differ diff --git a/docs/_site/assets/img/bs-docs-responsive-illustrations.png b/docs/_site/assets/img/bs-docs-responsive-illustrations.png new file mode 100644 index 0000000000..77c8f18f5c Binary files /dev/null and b/docs/_site/assets/img/bs-docs-responsive-illustrations.png differ diff --git a/docs/_site/assets/img/bs-docs-twitter-github.png b/docs/_site/assets/img/bs-docs-twitter-github.png new file mode 100644 index 0000000000..06100f3989 Binary files /dev/null and b/docs/_site/assets/img/bs-docs-twitter-github.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-carousel.png b/docs/_site/assets/img/examples/bootstrap-example-carousel.png new file mode 100644 index 0000000000..725fe07b9e Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-carousel.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-fluid.png b/docs/_site/assets/img/examples/bootstrap-example-fluid.png new file mode 100644 index 0000000000..5f49a332f3 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-fluid.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-jumbotron-narrow.png b/docs/_site/assets/img/examples/bootstrap-example-jumbotron-narrow.png new file mode 100644 index 0000000000..4bca8cdafd Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-jumbotron-narrow.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-justified-nav.png b/docs/_site/assets/img/examples/bootstrap-example-justified-nav.png new file mode 100644 index 0000000000..3d1e233891 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-justified-nav.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-marketing.png b/docs/_site/assets/img/examples/bootstrap-example-marketing.png new file mode 100644 index 0000000000..206e26e342 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-marketing.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-navbar-fixed-top.png b/docs/_site/assets/img/examples/bootstrap-example-navbar-fixed-top.png new file mode 100644 index 0000000000..30bfebfba2 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-navbar-fixed-top.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-navbar-static-top.png b/docs/_site/assets/img/examples/bootstrap-example-navbar-static-top.png new file mode 100644 index 0000000000..a965782d44 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-navbar-static-top.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-navbar.png b/docs/_site/assets/img/examples/bootstrap-example-navbar.png new file mode 100644 index 0000000000..dd1f7df0d3 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-navbar.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-signin.png b/docs/_site/assets/img/examples/bootstrap-example-signin.png new file mode 100644 index 0000000000..b649a985dc Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-signin.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-starter.png b/docs/_site/assets/img/examples/bootstrap-example-starter.png new file mode 100644 index 0000000000..1bf4b85ece Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-starter.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-sticky-footer-navbar.png b/docs/_site/assets/img/examples/bootstrap-example-sticky-footer-navbar.png new file mode 100644 index 0000000000..4ad0e86819 Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-sticky-footer-navbar.png differ diff --git a/docs/_site/assets/img/examples/bootstrap-example-sticky-footer.png b/docs/_site/assets/img/examples/bootstrap-example-sticky-footer.png new file mode 100644 index 0000000000..fb80e7b92f Binary files /dev/null and b/docs/_site/assets/img/examples/bootstrap-example-sticky-footer.png differ diff --git a/docs/_site/assets/img/examples/browser-icon-chrome.png b/docs/_site/assets/img/examples/browser-icon-chrome.png new file mode 100644 index 0000000000..8c846c54e0 Binary files /dev/null and b/docs/_site/assets/img/examples/browser-icon-chrome.png differ diff --git a/docs/_site/assets/img/examples/browser-icon-firefox.png b/docs/_site/assets/img/examples/browser-icon-firefox.png new file mode 100644 index 0000000000..2af3cd8560 Binary files /dev/null and b/docs/_site/assets/img/examples/browser-icon-firefox.png differ diff --git a/docs/_site/assets/img/examples/browser-icon-safari.png b/docs/_site/assets/img/examples/browser-icon-safari.png new file mode 100644 index 0000000000..880e31daaa Binary files /dev/null and b/docs/_site/assets/img/examples/browser-icon-safari.png differ diff --git a/docs/_site/assets/img/examples/slide-01.jpg b/docs/_site/assets/img/examples/slide-01.jpg new file mode 100644 index 0000000000..bedab7d81c Binary files /dev/null and b/docs/_site/assets/img/examples/slide-01.jpg differ diff --git a/docs/_site/assets/img/examples/slide-02.jpg b/docs/_site/assets/img/examples/slide-02.jpg new file mode 100644 index 0000000000..4ed12cc07c Binary files /dev/null and b/docs/_site/assets/img/examples/slide-02.jpg differ diff --git a/docs/_site/assets/img/examples/slide-03.jpg b/docs/_site/assets/img/examples/slide-03.jpg new file mode 100644 index 0000000000..37415da3eb Binary files /dev/null and b/docs/_site/assets/img/examples/slide-03.jpg differ diff --git a/docs/_site/assets/img/grid-baseline-20px.png b/docs/_site/assets/img/grid-baseline-20px.png new file mode 100644 index 0000000000..ce8c69ca2d Binary files /dev/null and b/docs/_site/assets/img/grid-baseline-20px.png differ diff --git a/docs/_site/assets/js/README.md b/docs/_site/assets/js/README.md new file mode 100644 index 0000000000..66903c71a6 --- /dev/null +++ b/docs/_site/assets/js/README.md @@ -0,0 +1,106 @@ +## 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/_site/assets/js/application.js b/docs/_site/assets/js/application.js new file mode 100644 index 0000000000..4b0b59618e --- /dev/null +++ b/docs/_site/assets/js/application.js @@ -0,0 +1,156 @@ +// NOTICE!! DO NOT USE ANY OF THIS JAVASCRIPT +// IT'S ALL JUST JUNK FOR OUR DOCS! +// ++++++++++++++++++++++++++++++++++++++++++ + +!function ($) { + + $(function(){ + + var $window = $(window) + + // Disable certain links in docs + $('section [href^=#]').click(function (e) { + e.preventDefault() + }) + + // side bar + setTimeout(function () { + $('.bs-docs-sidenav').affix({ + offset: { + top: function () { return $window.width() <= 980 ? 290 : 210 } + , bottom: 270 + } + }) + }, 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 ($('#grid-system').length) { + $('#grid-system').tooltip({ + selector: '.show-grid > [class*="span"]' + , title: function () { return $(this).width() + 'px' } + }) + } + + // tooltip demo + $('.tooltip-demo').tooltip({ + selector: "a[data-toggle=tooltip]" + }) + + $('.tooltip-test').tooltip() + $('.popover-test').popover() + + // popover demo + $("a[data-toggle=popover]") + .popover() + .click(function(e) { + e.preventDefault() + }) + + // button state demo + $('#fat-btn') + .click(function () { + var btn = $(this) + btn.button('loading') + setTimeout(function () { + btn.button('reset') + }, 3000) + }) + + // carousel demo + $('.bs-docs-carousel-example').carousel() + + // javascript build logic + var inputsComponent = $("#components.download input") + , inputsPlugin = $("#plugins.download input") + , inputsVariables = $("#variables.download input") + + // toggle all plugin checkboxes + $('#components.download .toggle-all').on('click', function (e) { + e.preventDefault() + inputsComponent.attr('checked', !inputsComponent.is(':checked')) + }) + + $('#plugins.download .toggle-all').on('click', function (e) { + e.preventDefault() + inputsPlugin.attr('checked', !inputsPlugin.is(':checked')) + }) + + $('#variables.download .toggle-all').on('click', function (e) { + e.preventDefault() + inputsVariables.val('') + }) + + // request built javascript + $('.download-btn .btn').on('click', function () { + + var css = $("#components.download input:checked") + .map(function () { return this.value }) + .toArray() + , js = $("#plugins.download 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()) + }) + + $.ajax({ + type: 'POST' + , url: /\?dev/.test(window.location) ? 'http://localhost:3000' : 'http://bootstrap.herokuapp.com' + , dataType: 'jsonpi' + , params: { + js: js + , css: css + , vars: vars + , img: img + } + }) + }) + }) + +// Modified from the original jsonpi https://github.com/benvinegar/jquery-jsonpi +$.ajaxTransport('jsonpi', function(opts, originalOptions, jqXHR) { + var url = opts.url; + + return { + send: function(_, completeCallback) { + var name = 'jQuery_iframe_' + jQuery.now() + , iframe, form + + iframe = $(' + +
  • + +
  • +
  • + Follow @twbootstrap +
  • +
  • + Tweet +
  • + + + + +

    Designed and built with all the love in the world by @mdo and @fat.

    +

    Code licensed under Apache License v2.0, documentation under CC BY 3.0.

    +

    Glyphicons Free licensed under CC BY 3.0.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_site/css.html b/docs/_site/css.html new file mode 100644 index 0000000000..2af7388341 --- /dev/null +++ b/docs/_site/css.html @@ -0,0 +1,2671 @@ + + + + + + + + + + + + CSS · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    CSS

    +

    Fundamental HTML elements styled and enhanced with extensible classes.

    +
    +
    + + +
    + + +
    + +
    + + + + +
    + +

    Get the lowdown on the key pieces of Bootstrap's infrastructure, including our approach to better, faster, stronger web development.

    + +

    Requires HTML5 doctype

    +

    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.

    + +
    +
    <!DOCTYPE html>
    +<html lang="en">
    +  ...
    +</html>
    +
    + + +

    Mobile first

    +

    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, Bootstrap is mobile first. Mobile first styles can be found throughout the entire library instead of in separate files.

    +

    To ensure proper rendering and touch zooming, add the viewport meta tag to your <head>.

    + +
    +
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    +
    + + +

    Typography and links

    +

    Bootstrap sets basic global display, typography, and link styles. Specifically, we:

    +
      +
    • Remove margin on the body
    • +
    • Set background-color: white; on the body
    • +
    • Use the @font-family-base, @font-size-base, and @line-height-base attributes as our typographic base
    • +
    • Set the global link color via @link-color and apply link underlines only on :hover
    • +
    +

    These styles can be found within scaffolding.less.

    + +

    Normalize reset

    +

    For improved cross-browser rendering, we use Normalize, a project by Nicolas Gallagher and Jonathan Neal.

    + +
    + + + + + +
    + + + +

    Headings

    +

    All HTML headings, <h1> through <h6> are available.

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Bootstrap heading

    Semibold 38px

    Bootstrap heading

    Semibold 32px

    Bootstrap heading

    Semibold 24px

    Bootstrap heading

    Semibold 18px
    Bootstrap heading
    Semibold 16px
    Bootstrap heading
    Semibold 12px
    +
    + + + +

    Body copy

    +

    Bootstrap's global default font-size is 14px, with a line-height of 20px. This is applied to the <body> and all paragraphs. In addition, <p> (paragraphs) receive a bottom margin of half their line-height (10px by default).

    +
    +

    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.

    +

    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.

    +

    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>...</p>
    +
    + + + +

    Lead body copy

    +

    Make a paragraph stand out by adding .lead.

    +
    +

    Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.

    +
    +
    +
    <p class="lead">...</p>
    +
    + + + +

    Built with Less

    +

    The typographic scale is based on two LESS variables in variables.less: @font-size-base and @line-height-base. 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.

    + + + +

    Emphasis

    +

    Make use of HTML's default emphasis tags with lightweight styles.

    + +

    Small text

    +

    For de-emphasizing inline or blocks of text, use the small tag.

    +
    +

    This line of text is meant to be treated as fine print.

    +
    +
    +
    <small>This line of text is meant to be treated as fine print.</small>
    +
    + + + +

    Bold

    +

    For emphasizing a snippet of text with a heavier font-weight.

    +
    +

    The following snippet of text is rendered as bold text.

    +
    +
    +
    <strong>rendered as bold text</strong>
    +
    + + +

    Italics

    +

    For emphasizing a snippet of text with italics.

    +
    +

    The following snippet of text is rendered as italicized text.

    +
    +
    +
    <em>rendered as italicized text</em>
    +
    + + +

    Feel free to use <b> and <i> in HTML5. <b> is meant to highlight words or phrases without conveying additional importance while <i> is mostly for voice, technical terms, etc.

    + +

    Alignment classes

    +

    Easily realign text to components with text alignment classes.

    +
    +

    Left aligned text.

    +

    Center aligned text.

    +

    Right aligned text.

    +
    +
    +
    <p class="text-left">Left aligned text.</p>
    +<p class="text-center">Center aligned text.</p>
    +<p class="text-right">Right aligned text.</p>
    +
    + + +

    Emphasis classes

    +

    Convey meaning through color with a handful of emphasis utility classes.

    +
    +

    Fusce dapibus, tellus ac cursus commodo, tortor mauris nibh.

    +

    Etiam porta sem malesuada magna mollis euismod.

    +

    Donec ullamcorper nulla non metus auctor fringilla.

    +

    Duis mollis, est non commodo luctus, nisi erat porttitor ligula.

    +
    +
    +
    <p class="muted">...</p>
    +<p class="text-warning">...</p>
    +<p class="text-error">...</p>
    +<p class="text-success">...</p>
    +
    + + + + +

    Abbreviations

    +

    Stylized implementation of HTML's <abbr> element for abbreviations and acronyms to show the expanded version on hover. Abbreviations with a title attribute have a light dotted bottom border and a help cursor on hover, providing additional context on hover.

    + +

    Basic abbreviation

    +

    For expanded text on long hover of an abbreviation, include the title attribute with the <abbr> element.

    +
    +

    An abbreviation of the word attribute is attr.

    +
    +
    +
    <abbr title="attribute">attr</abbr>
    +
    + + +

    Initialism

    +

    Add .initialism to an abbreviation for a slightly smaller font-size.

    +
    +

    HTML is the best thing since sliced bread.

    +
    +
    +
    <abbr title="HyperText Markup Language" class="initialism">HTML</abbr>
    +
    + + + + +

    Addresses

    +

    Present contact information for the nearest ancestor or the entire body of work. Preserve formatting by ending all lines with <br>.

    +
    +
    + Twitter, Inc.
    + 795 Folsom Ave, Suite 600
    + San Francisco, CA 94107
    + P: (123) 456-7890 +
    +
    + Full Name
    + first.last@example.com +
    +
    +
    +
    <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>
    +
    + + + + +

    Blockquotes

    +

    For quoting blocks of content from another source within your document.

    + +

    Default blockquote

    +

    Wrap <blockquote> around any HTML as the quote. For straight quotes we recommend a <p>.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    +
    +
    +
    +
    <blockquote>
    +  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.</p>
    +</blockquote>
    +
    + + +

    Blockquote options

    +

    Style and content changes for simple variations on a standard blockquote.

    + +

    Naming a source

    +

    Add <small> tag for identifying the source. Wrap the name of the source work in <cite>.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    + Someone famous in Source Title +
    +
    +
    +
    <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>
    +
    + + +

    Alternate displays

    +

    Use .pull-right for a floated, right-aligned blockquote.

    +
    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.

    + Someone famous in Source Title +
    +
    +
    +
    <blockquote class="pull-right">
    +  ...
    +</blockquote>
    +
    + + + + +

    Lists

    + +

    Unordered

    +

    A list of items in which the order does not explicitly matter.

    +
    +
      +
    • Lorem ipsum dolor sit amet
    • +
    • Consectetur adipiscing elit
    • +
    • Integer molestie lorem at massa
    • +
    • Facilisis in pretium nisl aliquet
    • +
    • Nulla volutpat aliquam velit +
        +
      • Phasellus iaculis neque
      • +
      • Purus sodales ultricies
      • +
      • Vestibulum laoreet porttitor sem
      • +
      • Ac tristique libero volutpat at
      • +
      +
    • +
    • Faucibus porta lacus fringilla vel
    • +
    • Aenean sit amet erat nunc
    • +
    • Eget porttitor lorem
    • +
    +
    +
    +
    <ul>
    +  <li>...</li>
    +</ul>
    +
    + + +

    Ordered

    +

    A list of items in which the order does explicitly matter.

    +
    +
      +
    1. Lorem ipsum dolor sit amet
    2. +
    3. Consectetur adipiscing elit
    4. +
    5. Integer molestie lorem at massa
    6. +
    7. Facilisis in pretium nisl aliquet
    8. +
    9. Nulla volutpat aliquam velit
    10. +
    11. Faucibus porta lacus fringilla vel
    12. +
    13. Aenean sit amet erat nunc
    14. +
    15. Eget porttitor lorem
    16. +
    +
    +
    +
    <ol>
    +  <li>...</li>
    +</ol>
    +
    + + +

    Unstyled

    +

    Remove the default list-style and left padding on list items (immediate children only).

    +
    +
      +
    • Lorem ipsum dolor sit amet
    • +
    • Consectetur adipiscing elit
    • +
    • Integer molestie lorem at massa
    • +
    • Facilisis in pretium nisl aliquet
    • +
    • Nulla volutpat aliquam velit +
        +
      • Phasellus iaculis neque
      • +
      • Purus sodales ultricies
      • +
      • Vestibulum laoreet porttitor sem
      • +
      • Ac tristique libero volutpat at
      • +
      +
    • +
    • Faucibus porta lacus fringilla vel
    • +
    • Aenean sit amet erat nunc
    • +
    • Eget porttitor lorem
    • +
    +
    +
    +
    <ul class="list-unstyled">
    +  <li>...</li>
    +</ul>
    +
    + + +

    Inline

    +

    Place all list items on a single line with inline-block and some light padding.

    +
    +
      +
    • Lorem ipsum
    • +
    • Phasellus iaculis
    • +
    • Nulla volutpat
    • +
    +
    +
    +
    <ul class="list-inline">
    +  <li>...</li>
    +</ul>
    +
    + + +

    Description

    +

    A list of terms with their associated descriptions.

    +
    +
    +
    Description lists
    +
    A description list is perfect for defining terms.
    +
    Euismod
    +
    Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
    +
    Donec id elit non mi porta gravida at eget metus.
    +
    Malesuada porta
    +
    Etiam porta sem malesuada magna mollis euismod.
    +
    +
    +
    +
    <dl>
    +  <dt>...</dt>
    +  <dd>...</dd>
    +</dl>
    +
    + + +

    Horizontal description

    +

    Make terms and descriptions in <dl> line up side-by-side.

    +
    +
    +
    Description lists
    +
    A description list is perfect for defining terms.
    +
    Euismod
    +
    Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
    +
    Donec id elit non mi porta gravida at eget metus.
    +
    Malesuada porta
    +
    Etiam porta sem malesuada magna mollis euismod.
    +
    Felis euismod semper eget lacinia
    +
    Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.
    +
    +
    +
    +
    <dl class="dl-horizontal">
    +  <dt>...</dt>
    +  <dd>...</dd>
    +</dl>
    +
    + + +
    Auto-truncating
    +

    + Horizontal description lists will truncate terms that are too long to fit in the left column fix text-overflow. In narrower viewports, they will change to the default stacked layout. +

    +
    + + + + +
    + +

    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 predefined classes for this, as well as powerful mixins for generating semantic layouts.

    + +

    Grid example

    +

    On mobile devices, the grid starts out stacked. Above 768px, it becomes horizontal as media queries kick in to apply floats and widths. To create a basic grid layout, wrap a series of .span* elements within a .row. As this is a 12-column grid, each .span* 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.

    +
    +
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    +
    +
    4
    +
    4
    +
    4
    +
    +
    +
    6
    +
    6
    +
    +
    +
    +
    <div class="row">
    +  <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">
    +  <div class="span4">4</div>
    +  <div class="span4">4</div>
    +  <div class="span4">4</div>
    +</div>
    +<div class="row">
    +  <div class="span6">6</div>
    +  <div class="span6">6</div>
    +</div>
    +
    + + +

    Offsetting columns

    +

    Move columns to the right using .offset* classes. Each class increases the left margin of a column by a whole column. For example, .offset4 moves .span4 over four columns.

    +
    +
    +
    4
    +
    4 offset 4
    +
    +
    +
    3 offset 3
    +
    3 offset 3
    +
    +
    +
    6 offset 6
    +
    +
    +
    +
    <div class="row">
    +  <div class="span4">...</div>
    +  <div class="span4 offset4">...</div>
    +</div>
    +
    + + + +

    Nesting columns

    +

    To nest your content with the default grid, add a new .row and set of .span* columns within an existing .span* column. Nested rows should include a set of columns that add up to 12.

    +
    +
    + Level 1: 9 columns +
    +
    + Level 2: 6 columns +
    +
    + Level 2: 6 columns +
    +
    +
    +
    +
    +
    <div class="row">
    +  <div class="span9">
    +    Level 1: 9 columns
    +    <div class="row">
    +      <div class="span6">
    +        Level 2: 6 columns
    +      </div>
    +      <div class="span6">
    +        Level 2: 6 columns
    +      </div>
    +    </div>
    +  </div>
    +</div>
    +
    + + +

    Column ordering

    +

    Easily change the order of our built-in grid columns with .push* and .pull* modifier classes.

    +
    +
    9
    +
    3
    +
    + +
    +
    <div class="row show-grid">
    +  <div class="span9 push3">9</div>
    +  <div class="span3 pull9">3</div>
    +</div>
    +
    + + +

    LESS mixins and variables

    +

    In addition to prebuilt grid classes for fast layouts, Bootstrap includes LESS variables and mixins for quickly generating your own simple, semantic layouts.

    + +

    Variables

    +

    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.

    +
    +
    @grid-columns:              12;
    +@grid-gutter-width:         30px;
    +@grid-float-breakpoint:     768px;
    +
    + + +

    Mixins

    +

    Mixins are used in conjunction with the grid variables to generate semantic CSS for individual grid columns.

    +
    +
    // 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
    +  .clear_float();
    +}
    +
    +// 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));
    +  }
    +}
    +
    + + +

    Example usage

    +

    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.

    +
    +
    .wrapper {
    +  .make-row();
    +}
    +.content-main {
    +  .make-column(8);
    +}
    +.content-secondary {
    +  .make-column(3);
    +  .make-column-offset(1);
    +}
    +
    + +
    +
    <div class="wrapper">
    +  <div class="content-main">...</div>
    +  <div class="content-secondary">...</div>
    +</div>
    +
    + + + + +
    + + + + + + +
    + + +

    Inline

    +

    Wrap inline snippets of code with <code>.

    +
    + For example, <section> should be wrapped as inline. +
    +
    +
    For example, <code>&lt;section&gt;</code> should be wrapped as inline.
    +
    + + +

    Basic block

    +

    Use <pre> for multiple lines of code. Be sure to escape any angle brackets in the code for proper rendering.

    +
    +
    <p>Sample text here...</p>
    +
    +
    +
    <pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre>
    +
    + + +

    You may optionally add the .pre-scrollable class which will set a max-height of 350px and provide a y-axis scrollbar.

    +
    + + + + +
    + + +

    Default styles

    +

    For basic styling—light padding and only horizontal dividers—add the base class .table to any <table>. 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.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +
    +
    <table class="table">
    +  ...
    +</table>
    +
    + + + +

    Optional classes

    +

    Add any of the following classes to the .table base class.

    + +

    Striped

    +

    Use .table-striped to add zebra-striping to any table row within the <tbody> via the :nth-child CSS selector (not available in IE8).

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larrythe Bird@twitter
    +
    +
    +
    <table class="table table-striped">
    +  ...
    +</table>
    +
    + + +

    Bordered

    +

    Add .table-bordered for borders and rounded corners.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    MarkOtto@TwBootstrap
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +
    +
    <table class="table table-bordered">
    +  ...
    +</table>
    +
    + + +

    Hover rows

    +

    Add .table-hover to enable a hover state on table rows within a <tbody>.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +
    +
    <table class="table table-hover">
    +  ...
    +</table>
    +
    + + + +

    Condensed

    +

    Add .table-condensed to make tables more compact by cutting cell padding in half.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameUsername
    1MarkOtto@mdo
    2JacobThornton@fat
    3Larry the Bird@twitter
    +
    +
    +
    <table class="table table-condensed">
    +  ...
    +</table>
    +
    + + + + +

    Optional row classes

    +

    Use contextual classes to color table rows.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassDescription
    + .success + Indicates a successful or positive action.
    + .error + Indicates a dangerous or potentially negative action.
    + .warning + Indicates a warning that might need attention.
    + .info + Used as an alternative to the default styles.
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #ProductPayment TakenStatus
    1TB - Monthly01/04/2012Approved
    2TB - Monthly02/04/2012Declined
    3TB - Monthly03/04/2012Pending
    +
    +
    +
    ...
    +<tr class="success">
    +  <td>1</td>
    +  <td>TB - Monthly</td>
    +  <td>01/04/2012</td>
    +  <td>Approved</td>
    +</tr>
    +...
    +
    + + + + +

    Supported table markup

    +

    List of supported table HTML elements and how they should be used.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    TagDescription
    + <table> + + Wrapping element for displaying data in a tabular format +
    + <thead> + + Container element for table header rows (<tr>) to label table columns +
    + <tbody> + + Container element for table rows (<tr>) in the body of the table +
    + <tr> + + Container element for a set of table cells (<td> or <th>) that appears on a single row +
    + <td> + + Default table cell +
    + <th> + + Special table cell for column (or row, depending on scope and placement) labels +
    + <caption> + + Description or summary of what the table holds, especially useful for screen readers +
    +
    +
    <table>
    +  <caption>...</caption>
    +  <thead>
    +    <tr>
    +      <th>...</th>
    +      <th>...</th>
    +      <th>...</th>
    +    </tr>
    +  </thead>
    +  <tbody>
    +    <tr>
    +      <td>...</td>
    +      <td>...</td>
    +      <td>...</td>
    +    </tr>
    +  </tbody>
    +</table>
    +
    + + +
    + + + + +
    + + +

    Default styles

    +

    Individual form controls automatically receive some global styling. By default, inputs are set to width: 100%;.

    +
    +
    + Legend + + +

    Example block-level help text here.

    +
    + +
    + +
    +
    +
    +
    <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>
    +
    + + + +

    Optional layouts

    +

    Included with Bootstrap are optional form layouts for common use cases.

    + +

    Inline form

    +

    Add .form-inline for left-aligned labels and inline-block controls for a compact layout.

    +
    + + +
    + +
    + +
    +
    +
    <form class="form-inline">
    +  <input type="text" class="span3" placeholder="Email">
    +  <input type="password" class="span3" placeholder="Password">
    +  <div class="checkbox">
    +    <label>
    +      <input type="checkbox"> Remember me
    +    </label>
    +  </div>
    +  <button type="submit" class="btn">Sign in</button>
    +</form>
    +
    + + +

    Horizontal form

    +

    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:

    +
      +
    • Add .form-horizontal to the form
    • +
    • Wrap labels and controls in .control-group
    • +
    • Add .control-label to the label
    • +
    • Wrap any associated controls in .controls for proper alignment
    • +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    + +
    +
    +
    +
    +
    + +
    +
    +
    +
    +
    <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>
    +
    + + + +

    Supported form controls

    +

    Examples of standard form controls supported in an example form layout.

    + +

    Inputs

    +

    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.

    +

    Requires the use of a specified type at all times.

    +
    + +
    +
    +
    <input type="text" placeholder="Text input">
    +
    + + +

    Textarea

    +

    Form control which supports multiple lines of text. Change rows attribute as necessary.

    +
    + +
    +
    +
    <textarea rows="3"></textarea>
    +
    + + +

    Checkboxes and radios

    +

    Checkboxes are for selecting one or several options in a list while radios are for selecting one option from many.

    +

    Default (stacked)

    +
    +
    + +
    +
    +
    + +
    +
    + +
    +
    +
    +
    <div class="checkbox">
    +  <label>
    +    <input type="checkbox" value="">
    +    Option one is this and that&mdash;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&mdash;be sure to include why it's great
    +  </label>
    +</div>
    +
    + + +

    Inline checkboxes

    +

    Use .checkbox-inline or .radio-inline class to a series of checkboxes or radios for controls appear on the same line.

    +
    + + + +
    +
    +
    <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>
    +
    + + +

    Selects

    +

    Use the default option or specify a multiple="multiple" to show multiple options at once.

    +
    + +
    + +
    +
    +
    <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>
    +
    + + + + +

    Form control states

    +

    Provide feedback to users or visitors with basic feedback states on form controls and labels.

    + +

    Input focus

    +

    We remove the default outline styles on some form controls and apply a box-shadow in its place for :focus.

    +
    + +
    +
    +
    <input id="focusedInput" type="text" value="This is focused...">
    +
    + + +

    Invalid inputs

    +

    Style inputs via default browser functionality with :invalid. Specify a type, add the required attribute if the field is not optional, and (if applicable) specify a pattern.

    +

    This is not available in versions of Internet Explorer 7-9 due to lack of support for CSS pseudo selectors.

    +
    + +
    +
    +
    <input class="span3" type="email" placeholder="test@example.com" required>
    +
    + + +

    Disabled inputs

    +

    Add the disabled attribute on an input to prevent user input and trigger a slightly different look.

    +
    + +
    +
    +
    <input id="disabledInput" type="text" placeholder="Disabled input here..." disabled>
    +
    + + +

    Disabled fieldsets

    +

    Add the disabled attribute to a <fieldset> to disable all the controls within the <fieldset> at once. Link buttons (with the <a> element) will be aesthetically disabled, but you will need custom JavaScript to disable their behavior.

    +
    +
    +
    + +
    +
    + +
    +
    + +
    + +
    +
    +
    +
    <form class="form-inline">
    +  <fieldset disabled>
    +    <div>
    +      <input type="text" class="span4" placeholder="Disabled input">
    +    </div>
    +    <div>
    +      <select class="span4">
    +        <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>
    +
    + + +

    Validation states

    +

    Bootstrap includes validation styles for error, warning, info, and success messages. To use:

    +
      +
    • Add .has-warning, .has-error, or .has-success to the parent element
    • +
    • Add .input-with-feedback to the field(s) in question
    • +
    +

    Validation styles are applied on a per-input basis. With horizontal forms, the <label class="control-label"> will always be styled.

    + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    +
    <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>
    +
    + + + + +

    Extending form controls

    +

    Adding on top of existing browser controls, Bootstrap includes other useful form components.

    + +

    Input groups

    +

    Add text or buttons before, after, or on both sides of any text-based input. Use .input-group with a .add-on to prepend or append elements to an <input>.

    +

    Avoid using <select> elements here as they cannot be fully styled in WebKit browsers.

    +
    +
    + @ + +
    +
    +
    + + .00 +
    +
    +
    + $ + + .00 +
    +
    +
    +
    <div class="input-group span9">
    +  <span class="input-group-addon">@</span>
    +  <input type="text" placeholder="Username">
    +</div>
    +
    +<div class="input-group span6">
    +  <input type="text">
    +  <span class="input-group-addon">.00</span>
    +</div>
    +
    +<div class="input-group span3">
    +  <span class="input-group-addon">$</span>
    +  <input type="text">
    +  <span class="input-group-addon">.00</span>
    +</div>
    +
    + + +

    Optional sizes

    +

    Add the relative form sizing classes to the `.input-group-addon`.

    +
    +
    + @ + +
    +
    +
    + @ + +
    +
    +
    + @ + +
    +
    +
    +
    <div class="input-group span9">
    +  <span class="input-group-addon input-large">@</span>
    +  <input type="text" class="input-large" placeholder="Username">
    +</div>
    +
    +<div class="input-group span9">
    +  <span class="input-group-addon">@</span>
    +  <input type="text" placeholder="Username">
    +</div>
    +
    +<div class="input-group span9">
    +  <span class="input-group-addon input-small">@</span>
    +  <input type="text" class="input-small" placeholder="Username">
    +</div>
    +
    + + +

    Buttons instead of text

    +

    Buttons in input groups are a bit different and require one extra level of nesting. Instead of .input-group-addon, you'll need to use .input-group-btn to wrap the buttons. This is required due to default browser styles that cannot be overridden.

    +
    +
    + + + + +
    +
    +
    + + + + +
    +
    +
    +
    <div class="input-group span7">
    +  <span class="input-group-btn">
    +    <button class="btn" type="button">Go!</button>
    +  </span>
    +  <input type="text">
    +</div>
    +
    +<div class="input-group span7">
    +  <input type="text">
    +  <span class="input-group-btn">
    +    <button class="btn" type="button">Go!</button>
    +  </span>
    +</div>
    +
    + + +

    Button dropdowns

    +

    +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    <div class="input-group span7">
    +  <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 span7">
    +  <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 -->
    +
    + + +

    Segmented dropdown groups

    +
    +
    +
    + + + +
    + +
    + +
    + +
    + +
    + + + +
    +
    +
    +
    +
    <div class="input-group span7">
    +  <div class="input-group-btn">
    +    <!-- Button and dropdown menu -->
    +  </div>
    +  <input type="text">
    +</div>
    +
    +<div class="input-group span7">
    +  <input type="text">
    +  <div class="input-group-btn btn-group">
    +    <!-- Button and dropdown menu -->
    +  </div>
    +</div>
    +
    + + +

    Control sizing

    +

    Use relative sizing classes like .input-large or match your inputs to the grid column sizes using .span* classes.

    + +

    Relative sizing

    +

    Create larger or smaller form controls that match button 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">
    +
    + + +

    Column sizing

    +

    Use .span1 to .span12 for setting widths on inputs that match Bootstrap's grid system.

    +
    +
    + + + + + + +
    +
    +
    +
    <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>
    +
    + + +

    If you need multiple inputs on the same line, wrap them in the standard grid markup (with .row and .span* classes). Each input should have it's own column and will expand to fill the available width automatically.

    +
    +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    <div class="row">
    +  <div class="span4">
    +    <input type="text" placeholder=".span4">
    +  </div>
    +  <div class="span4">
    +    <input type="text" placeholder=".span4">
    +  </div>
    +  <div class="span4">
    +    <input type="text" placeholder=".span4">
    +  </div>
    +</div>
    +
    + + +

    Uneditable inputs

    +

    Present data in a form that's not editable without using actual form markup.

    +
    + Some value here +
    +
    +
    <span class="uneditable-input">Some value here</span>
    +
    + + +

    Form actions

    +

    End a form with a group of actions (buttons). When placed within a .form-horizontal, the buttons will automatically indent to line up with the form controls.

    +
    +
    + + +
    +
    +
    +
    <div class="form-actions">
    +  <button type="submit" class="btn btn-primary">Save changes</button>
    +  <button type="button" class="btn">Cancel</button>
    +</div>
    +
    + + +

    Help text

    +

    Inline and block level support for help text that appears around form controls.

    +

    Inline help

    +
    + Inline help text +
    +
    +
    <input type="text">
    +<span class="help-inline">Inline help text</span>
    +
    + + +

    Block help

    +
    + + A longer block of help text that breaks onto a new line and may extend beyond one line. +
    +
    +
    <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>
    +
    + + +
    + + + + +
    + + +

    Default buttons

    +

    Button styles can be applied to anything with the .btn class applied. However, typically you'll want to apply these to only <a> and <button> elements for the best rendering.

    +
    + + + + + + + +
    +
    +
    <!-- 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>
    +
    + + +

    Cross browser compatibility

    +

    IE9 doesn't crop background gradients on rounded corners, so we remove it. Related, IE9 jankifies disabled button elements, rendering text gray with a nasty text-shadow that we cannot fix.

    + + +

    Button sizes

    +

    Fancy larger or smaller buttons? Add .btn-large, .btn-small, or .btn-mini for additional sizes.

    +
    +

    + + +

    +

    + + +

    +

    + + +

    +

    + + +

    +
    +
    +
    <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>
    +
    + + +

    Create block level buttons—those that span the full width of a parent— by adding .btn-block.

    +
    +
    + + +
    +
    +
    +
    <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>
    +
    + + + +

    Disabled state

    +

    Make buttons look unclickable by fading them back 50%.

    + +

    Button element

    +

    Add the disabled attribute to <button> buttons.

    +

    + + +

    +
    +
    <button type="button" class="btn btn-large btn-primary disabled" disabled="disabled">Primary button</button>
    +<button type="button" class="btn btn-large" disabled="disabled">Button</button>
    +
    + + +

    Anchor element

    +

    Add the .disabled class to <a> buttons.

    +

    + Primary link + Link +

    +
    +
    <a href="#" class="btn btn-large btn-primary disabled">Primary link</a>
    +<a href="#" class="btn btn-large disabled">Link</a>
    +
    + +

    + We use .disabled as a utility class here, similar to the common .active class, so no prefix is required. Also, this class is only for aesthetic; you must use custom JavaScript to disable links here. +

    + + +

    One class, multiple tags

    +

    Use the .btn class on an <a>, <button>, or <input> element.

    +
    + Link + + + +
    +
    +
    <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">
    +
    + +

    As a best practice, we highly recommend matching using the <button< element whenever possible to ensure matching cross-browser rendering.

    + +
    + + + + +
    + + +

    Add classes to an <img> element to easily style images in any project. Rounded corners are not available in IE8.

    +
    + + + +
    +
    +
    <img src="..." class="img-rounded">
    +<img src="..." class="img-circle">
    +<img src="..." class="img-thumbnail">
    +
    + + +
    + + + + +
    + + +

    Included glyphs

    +

    Bootstrap comes with all 160 of Glyphicons Halflings set, all available in font formats for easy coloring, sizing, and placement.

    + +
      +
    • glyphicon-glass
    • +
    • glyphicon-music
    • +
    • glyphicon-search
    • +
    • glyphicon-envelope
    • +
    • glyphicon-heart
    • +
    • glyphicon-star
    • +
    • glyphicon-star-empty
    • +
    • glyphicon-user
    • +
    • glyphicon-film
    • +
    • glyphicon-th-large
    • +
    • glyphicon-th
    • +
    • glyphicon-th-list
    • +
    • glyphicon-ok
    • +
    • glyphicon-remove
    • +
    • glyphicon-zoom-in
    • +
    • glyphicon-zoom-out
    • +
    • glyphicon-off
    • +
    • glyphicon-signal
    • +
    • glyphicon-cog
    • +
    • glyphicon-trash
    • +
    • glyphicon-home
    • +
    • glyphicon-file
    • +
    • glyphicon-time
    • +
    • glyphicon-road
    • +
    • glyphicon-download-alt
    • +
    • glyphicon-download
    • +
    • glyphicon-upload
    • +
    • glyphicon-inbox
    • + +
    • glyphicon-play-circle
    • +
    • glyphicon-repeat
    • +
    • glyphicon-refresh
    • +
    • glyphicon-list-alt
    • +
    • glyphicon-lock
    • +
    • glyphicon-flag
    • +
    • glyphicon-headphones
    • +
    • glyphicon-volume-off
    • +
    • glyphicon-volume-down
    • +
    • glyphicon-volume-up
    • +
    • glyphicon-qrcode
    • +
    • glyphicon-barcode
    • +
    • glyphicon-tag
    • +
    • glyphicon-tags
    • +
    • glyphicon-book
    • +
    • glyphicon-bookmark
    • +
    • glyphicon-print
    • +
    • glyphicon-camera
    • +
    • glyphicon-font
    • +
    • glyphicon-bold
    • +
    • glyphicon-italic
    • +
    • glyphicon-text-height
    • +
    • glyphicon-text-width
    • +
    • glyphicon-align-left
    • +
    • glyphicon-align-center
    • +
    • glyphicon-align-right
    • +
    • glyphicon-align-justify
    • +
    • glyphicon-list
    • + +
    • glyphicon-indent-left
    • +
    • glyphicon-indent-right
    • +
    • glyphicon-facetime-video
    • +
    • glyphicon-picture
    • +
    • glyphicon-pencil
    • +
    • glyphicon-map-marker
    • +
    • glyphicon-adjust
    • +
    • glyphicon-tint
    • +
    • glyphicon-edit
    • +
    • glyphicon-share
    • +
    • glyphicon-check
    • +
    • glyphicon-move
    • +
    • glyphicon-step-backward
    • +
    • glyphicon-fast-backward
    • +
    • glyphicon-backward
    • +
    • glyphicon-play
    • +
    • glyphicon-pause
    • +
    • glyphicon-stop
    • +
    • glyphicon-forward
    • +
    • glyphicon-fast-forward
    • +
    • glyphicon-step-forward
    • +
    • glyphicon-eject
    • +
    • glyphicon-chevron-left
    • +
    • glyphicon-chevron-right
    • +
    • glyphicon-plus-sign
    • +
    • glyphicon-minus-sign
    • +
    • glyphicon-remove-sign
    • +
    • glyphicon-ok-sign
    • + +
    • glyphicon-question-sign
    • +
    • glyphicon-info-sign
    • +
    • glyphicon-screenshot
    • +
    • glyphicon-remove-circle
    • +
    • glyphicon-ok-circle
    • +
    • glyphicon-ban-circle
    • +
    • glyphicon-arrow-left
    • +
    • glyphicon-arrow-right
    • +
    • glyphicon-arrow-up
    • +
    • glyphicon-arrow-down
    • +
    • glyphicon-share-alt
    • +
    • glyphicon-resize-full
    • +
    • glyphicon-resize-small
    • +
    • glyphicon-plus
    • +
    • glyphicon-minus
    • +
    • glyphicon-asterisk
    • +
    • glyphicon-exclamation-sign
    • +
    • glyphicon-gift
    • +
    • glyphicon-leaf
    • +
    • glyphicon-fire
    • +
    • glyphicon-eye-open
    • +
    • glyphicon-eye-close
    • +
    • glyphicon-warning-sign
    • +
    • glyphicon-plane
    • +
    • glyphicon-calendar
    • +
    • glyphicon-random
    • +
    • glyphicon-comment
    • +
    • glyphicon-magnet
    • + +
    • glyphicon-chevron-up
    • +
    • glyphicon-chevron-down
    • +
    • glyphicon-retweet
    • +
    • glyphicon-shopping-cart
    • +
    • glyphicon-folder-close
    • +
    • glyphicon-folder-open
    • +
    • glyphicon-resize-vertical
    • +
    • glyphicon-resize-horizontal
    • +
    • glyphicon-hdd
    • +
    • glyphicon-bullhorn
    • +
    • glyphicon-bell
    • +
    • glyphicon-certificate
    • +
    • glyphicon-thumbs-up
    • +
    • glyphicon-thumbs-down
    • +
    • glyphicon-hand-right
    • +
    • glyphicon-hand-left
    • +
    • glyphicon-hand-up
    • +
    • glyphicon-hand-down
    • +
    • glyphicon-circle-arrow-right
    • +
    • glyphicon-circle-arrow-left
    • +
    • glyphicon-circle-arrow-up
    • +
    • glyphicon-circle-arrow-down
    • +
    • glyphicon-globe
    • +
    • glyphicon-wrench
    • +
    • glyphicon-tasks
    • +
    • glyphicon-filter
    • +
    • glyphicon-briefcase
    • +
    • glyphicon-fullscreen
    • + +
    • glyphicon-dashboard
    • +
    • glyphicon-paperclip
    • +
    • glyphicon-heart-empty
    • +
    • glyphicon-link
    • +
    • glyphicon-phone
    • +
    • glyphicon-pushpin
    • +
    • glyphicon-euro
    • +
    • glyphicon-usd
    • +
    • glyphicon-gbp
    • +
    • glyphicon-sort
    • +
    • glyphicon-sort-by-alphabet
    • +
    • glyphicon-sort-by-alphabet-alt
    • +
    • glyphicon-sort-by-order
    • +
    • glyphicon-sort-by-order-alt
    • +
    • glyphicon-sort-by-attributes
    • +
    • glyphicon-sort-by-attributes-alt
    • +
    • glyphicon-unchecked
    • +
    • glyphicon-expand
    • +
    • glyphicon-collapse
    • +
    • glyphicon-collapse-top
    • + +
    + +

    Glyphicons attribution

    +

    Glyphicons 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 Glyphicons whenever practical.

    + + +

    How to use

    +

    Add the appropriate class to any inline element. All icon classes are prefixed with glyphicon- for easy styling. To use, place the following code just about anywhere:

    +
    +
    <span class="glyphicon glyphicon-search"></span>
    +
    + +

    Want to change the icon color? Just change the color of the parent element.

    +

    When using beside strings of text, as in buttons or nav links, be sure to leave a space after the icon for proper spacing.

    + + +

    Icon examples

    +

    Use them in buttons, button groups for a toolbar, navigation, or prepended form inputs.

    + +

    Buttons

    + +
    Button group in a button toolbar
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    <div class="btn-toolbar">
    +  <div class="btn-group">
    +    <a class="btn" href="#"><span class="glyphicon glyphicon-align-left"></span></a>
    +    <a class="btn" href="#"><span class="glyphicon glyphicon-align-center"></span></a>
    +    <a class="btn" href="#"><span class="glyphicon glyphicon-align-right"></span></a>
    +    <a class="btn" href="#"><span class="glyphicon glyphicon-align-justify"></span></a>
    +  </div>
    +</div>
    +
    + + +
    Dropdown in a button group
    +
    + +
    +
    +
    <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="#"><span class="glyphicon glyphicon-"></span> Make admin</a></li>
    +  </ul>
    +</div>
    +
    + + +
    Large button
    +
    + Star +
    +
    +
    <a class="btn btn-large" href="#"><span class="glyphicon glyphicon-star"></span> Star</a>
    +
    + + +
    Small button
    +
    + +
    +
    +
    <a class="btn btn-small" href="#"><span class="glyphicon glyphicon-star"></span></a>
    +
    + + + +

    Navigation

    + +
    +
    <ul class="nav nav-list">
    +  <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>
    +
    + + +

    Form fields

    +
    +
    + +
    +
    + + +
    +
    +
    +
    +
    +
    <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="span2" id="inputIcon" type="text">
    +    </div>
    +  </div>
    +</div>
    +
    + + +
    + + + + +
    + +

    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.

    + +

    Responsive classes

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    ClassPhones 767px and belowTablets 979px to 768pxDesktops Default
    .visible-phoneVisible
    .visible-tabletVisible
    .visible-desktopVisible
    .hidden-phoneVisibleVisible
    .hidden-tabletVisibleVisible
    .hidden-desktopVisibleVisible
    + +

    Print classes

    + + + + + + + + + + + + + + + + + + + + +
    ClassBrowserPrint
    .visible-printVisible
    .hidden-printVisible
    + +

    When to use

    +

    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.

    + +

    Test case

    +

    Resize your browser or load on different devices to test the above classes.

    +

    Visible on...

    +

    Green checkmarks indicate that class is visible in your current viewport.

    +
      +
    • Phone✔ Phone
    • +
    • Tablet✔ Tablet
    • +
    • Desktop✔ Desktop
    • +
    +

    Hidden on...

    +

    Here, green checkmarks indicate that class is hidden in your current viewport.

    +
      +
    • Phone✔ Phone
    • +
    • Tablet✔ Tablet
    • +
    • Desktop✔ Desktop
    • +
    + +
    + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_site/customize.html b/docs/_site/customize.html new file mode 100644 index 0000000000..17812fc928 --- /dev/null +++ b/docs/_site/customize.html @@ -0,0 +1,542 @@ + + + + + + + + + + + + Customize and download · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Customize and download

    +

    Download Bootstrap or customize variables, components, JavaScript plugins, and more.

    +
    +
    + + +
    + + +
    + +
    + + + +
    +
    + +
    +
    +

    Scaffolding

    + + + + + +

    Base CSS

    + + + + + + + +
    +
    +

    Components

    + + + + + + + + + + + +

    JS Components

    + + + + + + +
    +
    +

    Miscellaneous

    + + + + +

    Responsive

    + + + + + +
    +
    +
    + +
    + +
    +
    + + + + + + + +
    +
    + + + + + + +
    +
    +

    Heads up!

    +

    All checked plugins will be compiled into a single file, bootstrap.js. All plugins require the latest version of jQuery to be included.

    +
    +
    +
    + + +
    + +
    +
    +

    Scaffolding

    + + + + + +

    Links

    + + + + + +

    Grid system

    + + + + + + + + + + + + + + + +
    +
    + +

    Typography

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Tables

    + + + + + + + + + +

    Forms

    + + + + + + + + + + + + + + + + + +
    +
    + +

    Form states & alerts

    + + + + + + + + + + + + + + + + + +

    Navbar

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    Dropdowns

    + + + + + + + + + + +
    +
    +
    + +
    + +
    + Customize and Download +

    What's included?

    +

    Downloads include compiled CSS, compiled and minified CSS, and compiled jQuery plugins, all nicely packed up into a zipball for your convenience.

    +
    +
    +
    + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_site/examples/carousel.html b/docs/_site/examples/carousel.html new file mode 100644 index 0000000000..2cc07b5e65 --- /dev/null +++ b/docs/_site/examples/carousel.html @@ -0,0 +1,491 @@ + + + + + + + + + + + + Carousel template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +
    + +

    Heading

    +

    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.

    +

    View details »

    +
    +
    + +

    Heading

    +

    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.

    +

    View details »

    +
    +
    + +

    Heading

    +

    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.

    +

    View details »

    +
    +
    + + + + +
    + +
    + +

    First featurette headling. It'll blow your mind.

    +

    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.

    +
    + +
    + +
    + +

    Oh yeah, it's that good. See for yourself.

    +

    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.

    +
    + +
    + +
    + +

    And lastly, this one. Checkmate.

    +

    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.

    +
    + +
    + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/grid.html b/docs/_site/examples/grid.html new file mode 100644 index 0000000000..727bbdef04 --- /dev/null +++ b/docs/_site/examples/grid.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + Grid template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +

    Default grid columns

    +
    +
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    +
    +
    4
    +
    4
    +
    4
    +
    +
    +
    6
    +
    6
    +
    +
    +
    12
    +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/jumbotron-narrow.html b/docs/_site/examples/jumbotron-narrow.html new file mode 100644 index 0000000000..a6ed7ca1cc --- /dev/null +++ b/docs/_site/examples/jumbotron-narrow.html @@ -0,0 +1,222 @@ + + + + + + + + + + + + Narrow page template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +

    Project name

    +
    + +
    +

    Jumbotron heading

    +

    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.

    +

    Sign up today

    +
    + +
    +
    +

    Subheading

    +

    Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

    + +

    Subheading

    +

    Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.

    + +

    Subheading

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    +
    + +
    +

    Subheading

    +

    Donec id elit non mi porta gravida at eget metus. Maecenas faucibus mollis interdum.

    + +

    Subheading

    +

    Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Cras mattis consectetur purus sit amet fermentum.

    + +

    Subheading

    +

    Maecenas sed diam eget risus varius blandit sit amet non magna.

    +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/jumbotron.html b/docs/_site/examples/jumbotron.html new file mode 100644 index 0000000000..5b7fa5eb52 --- /dev/null +++ b/docs/_site/examples/jumbotron.html @@ -0,0 +1,200 @@ + + + + + + + + + + + + Jumbotron template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    Hello, world!

    +

    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.

    +

    Learn more »

    +
    + +
    + + +
    +
    +

    Heading

    +

    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.

    +

    View details »

    +
    +
    +

    Heading

    +

    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.

    +

    View details »

    +
    +
    +

    Heading

    +

    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.

    +

    View details »

    +
    +
    + +
    + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/justified-nav.html b/docs/_site/examples/justified-nav.html new file mode 100644 index 0000000000..9dddee2d03 --- /dev/null +++ b/docs/_site/examples/justified-nav.html @@ -0,0 +1,234 @@ + + + + + + + + + + + + Justified nav template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +

    Project name

    + +
    + + +
    +

    Marketing stuff!

    +

    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.

    +

    Get started today

    +
    + + +
    + + +
    +
    +

    Heading

    +

    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.

    +

    View details »

    +
    +
    +

    Heading

    +

    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.

    +

    View details »

    +
    +
    +

    Heading

    +

    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.

    +

    View details »

    +
    +
    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/navbar-fixed-top.html b/docs/_site/examples/navbar-fixed-top.html new file mode 100644 index 0000000000..288a580b68 --- /dev/null +++ b/docs/_site/examples/navbar-fixed-top.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + Fixed navbar template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    Navbar example

    +

    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.

    +

    + View navbar docs » +

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/navbar-static-top.html b/docs/_site/examples/navbar-static-top.html new file mode 100644 index 0000000000..d202c07af5 --- /dev/null +++ b/docs/_site/examples/navbar-static-top.html @@ -0,0 +1,152 @@ + + + + + + + + + + + + Static navbar template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    +

    Navbar example

    +

    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.

    +

    + View navbar docs » +

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/navbar.html b/docs/_site/examples/navbar.html new file mode 100644 index 0000000000..d19e0dea2c --- /dev/null +++ b/docs/_site/examples/navbar.html @@ -0,0 +1,155 @@ + + + + + + + + + + + + Navbar template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +

    Navbar example

    +

    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.

    +

    + View navbar docs » +

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/signin.html b/docs/_site/examples/signin.html new file mode 100644 index 0000000000..4ddea343b4 --- /dev/null +++ b/docs/_site/examples/signin.html @@ -0,0 +1,156 @@ + + + + + + + + + + + + Sign in form template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/starter-template.html b/docs/_site/examples/starter-template.html new file mode 100644 index 0000000000..73144cea5c --- /dev/null +++ b/docs/_site/examples/starter-template.html @@ -0,0 +1,132 @@ + + + + + + + + + + + + Starter template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +

    Bootstrap starter template

    +

    Use this document as a way to quickly start any new project.
    All you get is this text and a mostly barebones HTML document.

    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/sticky-footer-navbar.html b/docs/_site/examples/sticky-footer-navbar.html new file mode 100644 index 0000000000..788a043539 --- /dev/null +++ b/docs/_site/examples/sticky-footer-navbar.html @@ -0,0 +1,205 @@ + + + + + + + + + + + + Sticky footer with navbar template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + +

    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 #wrap with padding-top: 60px; on the .container.

    +

    Back to the default sticky footer minus the navbar.

    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/examples/sticky-footer.html b/docs/_site/examples/sticky-footer.html new file mode 100644 index 0000000000..16b7baebc9 --- /dev/null +++ b/docs/_site/examples/sticky-footer.html @@ -0,0 +1,169 @@ + + + + + + + + + + + + Sticky footer template · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + +
    + +

    Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS.

    +

    Use the sticky footer with a fixed navbar if need be, too.

    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/_site/getting-started.html b/docs/_site/getting-started.html new file mode 100644 index 0000000000..81cf878451 --- /dev/null +++ b/docs/_site/getting-started.html @@ -0,0 +1,462 @@ + + + + + + + + + + + + Getting started · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Getting started

    +

    Overview of the project, its contents, and how to get started with a simple template.

    +
    +
    + + +
    + + +
    + +
    + + + + +
    + +

    Before downloading, be sure to have a code editor (we recommend Sublime Text 2) 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.

    + +
    +
    +

    Compiled

    +

    Fastest way to get started: get the compiled and minified versions of our CSS, JS, and images. No docs or original source files.

    +

    Download Bootstrap

    +
    +
    +

    Source

    +

    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.

    +

    Download Bootstrap source

    +
    +
    +

    Bower

    +

    Install and manage the original files for all CSS and JavaScript, along with a local copy of the docs, using Bower.

    +
    +
    bower install bootstrap
    +
    + +
    +
    +
    + + + + +
    + +

    Within the download you'll find the following file structure and contents, logically grouping common assets and providing both compiled and minified variations.

    +

    Once downloaded, unzip the compressed folder to see the structure of (the compiled) Bootstrap. You'll see something like this:

    + +
    +
    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
    +
    + + +

    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 (bootstrap.*), as well as compiled and minified CSS and JS (bootstrap.min.*). The image files are compressed using ImageOptim, a Mac app for compressing PNGs.

    +

    Please note that all JavaScript plugins require jQuery to be included.

    +
    + + + + +
    + +

    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 Bootstrap documentation.

    + +

    Docs sections

    +

    In addition to the getting started documentation you're reading now, the Bootstrap docs are broken into a few key pages.

    + +

    Core CSS

    +

    Global styles for the body, Normalize, links, grid system, tables, forms, buttons, icons, and more.

    +

    Components

    +

    Basic styles for common interface components like tabs and pills, navbar, alerts, page headers, and more. Head here to see what kind of custom components Bootstrap has to offer beyond basic HTML elements.

    +

    JavaScript plugins

    +

    Similar to Components, these JavaScript plugins are interactive components for things like tooltips, popovers, modals, and more.

    +
    + + + + +
    + +

    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 File structure.

    +

    Now, here's a look at a typical HTML file:

    + +
    +
    <!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>
    +
    + + +

    To make this a Bootstrapped template, just include the appropriate CSS and JS files:

    + +
    +
    <!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>
    +
    + + +

    And you're set! With those two files added, you can begin to develop any site or application with Bootstrap.

    + +
    + +

    Responsive features in IE8

    +

    Internet Explorer 8 lacks support for media queries, the method by which we deliver responsive CSS to folks. To enable that, you need to include a third party tool (which we include in the project repository) called Respond.js.

    +
    +<!--[if lt IE 9]>
    +  <script src="/assets/js/respond/respond.js"></script>
    +<![endif]-->
    +
    +
    + + + + +
    + +

    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.

    +
    +
    + + + +

    Starter template

    +

    A barebones HTML document with all the Bootstrap CSS and JavaScript included.

    +
    +
    + + + +

    Basic marketing site

    +

    Featuring a hero unit for a primary message and three supporting elements.

    +
    +
    + + + +

    Narrow marketing

    +

    Slim, lightweight marketing template for small projects or teams.

    +
    +
    + + + +

    Justified nav

    +

    Marketing page with equal-width navigation links in a modified navbar.

    +
    +
    + + + +

    Sign in

    +

    Barebones sign in form with custom, larger form controls and a flexible layout.

    +
    +
    + + + +

    Sticky footer

    +

    Pin a fixed-height footer to the bottom of the user's viewport.

    +
    +
    + + + +

    Sticky footer w/ navbar

    +

    Add a fixed navbar to the default sticky footer template.

    +
    +
    + + + +

    Carousel jumbotron

    +

    An interactive riff on the basic marketing site featuring a prominent carousel.

    +
    + + +
    + + + +

    Navbar

    +

    Basic template for showcasing how the navbar works.

    +
    +
    + + + +

    Static top navbar

    +

    Basic template for showcasing the static navbar variation.

    +
    +
    + + + +

    Fixed top navbar

    +

    Basic template for showcasing the fixed navbar variation.

    +
    +
    + + + +

    Grid examples

    +

    +
    +
    +
    + + + + + +
    + +

    Head to the docs for information, examples, and code snippets, or take the next leap and customize Bootstrap for any upcoming project.

    + Visit the Bootstrap docs + Customize Bootstrap +
    + + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_site/index.html b/docs/_site/index.html new file mode 100644 index 0000000000..60d0dbae6a --- /dev/null +++ b/docs/_site/index.html @@ -0,0 +1,243 @@ + + + + + + + + + + + + Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    Bootstrap

    +

    Sleek, intuitive, and powerful mobile-first front-end framework for faster and easier web development.

    +

    + Download Bootstrap +

    + +
    +
    + +
    + +
    + +

    Introducing Bootstrap.

    + + +
    +
    + +

    By nerds, for nerds.

    +

    Built at Twitter by @mdo and @fat, Bootstrap utilizes LESS CSS, is compiled via Node, and is managed through GitHub to help nerds do awesome stuff on the web.

    +
    +
    + +

    Made for everyone.

    +

    Bootstrap 3 has been rebuilt from the ground up to push the Web forward. It looks and behaves great on the latest smartphones, tablets, and desktops (including support for IE8+).

    +
    +
    + +

    Packed with features.

    +

    A 12-column responsive grid, dozens of components, JavaScript plugins, typography, form controls, and even a web-based Customizer to make Bootstrap your own.

    +
    +
    + +

    Built with Bootstrap.

    + + + +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_site/javascript.html b/docs/_site/javascript.html new file mode 100644 index 0000000000..802698df86 --- /dev/null +++ b/docs/_site/javascript.html @@ -0,0 +1,2126 @@ + + + + + + + + + + + + JavaScript plugins · Bootstrap + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +

    JavaScript

    +

    Bring Bootstrap's components to life—now with 13 custom jQuery plugins. +

    +
    + +
    + + +
    + +
    + + + +
    + + +

    Individual or compiled

    +

    Plugins can be included individually (though some have required dependencies), or all at once. Both bootstrap.js and bootstrap.min.js contain all plugins in a single file.

    + +

    Data attributes

    +

    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.

    + +

    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: +

    +
    $('body').off('.data-api')
    +
    + + +

    Alternatively, to target a specific plugin, just include the plugin's 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 Bootstrap plugins purely through the JavaScript API. All public APIs are 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 nothing (which initiates a plugin with default behavior):

    +
    +
    $("#myModal").modal()                      // initialized with defaults
    +$("#myModal").modal({ keyboard: false })   // initialized with no keyboard
    +$("#myModal").modal('show')                // initializes and invokes show immediately</p>
    +
    + + +

    Each plugin also exposes its raw constructor on a `Constructor` property: $.fn.popover.Constructor. If you'd like to get a particular plugin instance, retrieve it directly from an element: $('[rel=popover]').data('popover').

    + +

    No conflict

    +

    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 .noConflict on the plugin you wish to revert the value of.

    +
    +
    var bootstrapButton = $.fn.button.noConflict() // return $.fn.button to previously assigned value
    +$.fn.bootstrapBtn = bootstrapButton            // give $().bootstrapBtn the bootstrap functionality
    +
    + + + +

    Events

    +

    Bootstrap provides custom events for most plugin's unique actions. Generally, these come in an infinitive and past participle form - where the infinitive (ex. show) is triggered at the start of an event, and its past participle form (ex. shown) is trigger on the completion of an action.

    +

    All infinitive events provide preventDefault functionality. This provides the ability to stop the execution of an action before it starts.

    +
    +
    $('#myModal').on('show', function (e) {
    +    if (!data) return e.preventDefault() // stops modal from being shown
    +})
    +
    + + +
    + + + + +
    + +

    About transitions

    +

    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.

    +

    Use cases

    +

    A few examples of the transition plugin:

    +
      +
    • Sliding or fading in modals
    • +
    • Fading out tabs
    • +
    • Fading out alerts
    • +
    • Sliding carousel panes
    • +
    + + +
    + + + + +
    + + + +

    Examples

    +

    Modals are streamlined, but flexible, dialog prompts with the minimum required functionality and smart defaults.

    + +

    Static example

    +

    A rendered modal with header, body, and set of actions in the footer.

    +
    + +
    +
    +
    <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">&times;</button>
    +        <h4 class="modal-title">Modal title</h4>
    +      </div>
    +      <div class="modal-body">
    +        <p>One fine body&hellip;</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 -->
    +
    + + +

    Live demo

    +

    Toggle a modal via JavaScript by clicking the button below. It will slide down and fade in from the top of the page.

    + + + + +
    +
    <div class="modal">
    +  <!-- Button trigger modal -->
    +  <a data-toggle="modal" href="#myModal" class="btn btn-primary btn-large">Launch demo modal</a>
    +
    +  <!-- Modal -->
    +  <div class="modal-dialog">
    +    <div class="modal-content">
    +      <div class="modal-header">
    +        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</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 -->
    +
    + + + + +

    Usage

    + +

    Via data attributes

    +

    Activate a modal without writing JavaScript. Set data-toggle="modal" on a controller element, like a button, along with a data-target="#foo" or href="#foo" to target a specific modal to toggle.

    +
    +
    <button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
    +
    + + +

    Via JavaScript

    +

    Call a modal with id myModal with a single line of JavaScript:

    +
    +
    $('#myModal').modal(options)
    +
    + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-backdrop="".

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    backdropbooleantrueIncludes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click.
    keyboardbooleantrueCloses the modal when escape key is pressed
    showbooleantrueShows the modal when initialized.
    remotepathfalse

    If a remote url is provided, content will be loaded via jQuery's load method and injected into the .modal-body. If you're using the data api, you may alternatively use the href tag to specify the remote source. An example of this is shown below:

    +
    +
    <a data-toggle="modal" href="remote.html" data-target="#modal">Click me</a>
    +
    + +
    + +

    Methods

    + +

    .modal(options)

    +

    Activates your content as a modal. Accepts an optional options object.

    +
    +
    $('#myModal').modal({
    +  keyboard: false
    +})
    +
    + + +

    .modal('toggle')

    +

    Manually toggles a modal.

    +
    +
    $('#myModal').modal('toggle')
    +
    + + +

    .modal('show')

    +

    Manually opens a modal.

    +
    +
    $('#myModal').modal('show')
    +
    + + +

    .modal('hide')

    +

    Manually hides a modal.

    +
    +
    $('#myModal').modal('hide')
    +
    + + +

    Events

    +

    Bootstrap's modal class exposes a few events for hooking into modal functionality.

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventDescription
    showThis event fires immediately when the show instance method is called.
    shownThis event is fired when the modal has been made visible to the user (will wait for css transitions to complete).
    hideThis event is fired immediately when the hide instance method has been called.
    hiddenThis event is fired when the modal has finished being hidden from the user (will wait for css transitions to complete).
    +
    +
    $('#myModal').on('hidden', function () {
    +  // do something…
    +})
    +
    + +
    + + + + + + + + + +
    + + + +

    Example in navbar

    +

    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.

    +
    + +
    +

    @fat

    +

    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.

    +

    @mdo

    +

    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.

    +

    one

    +

    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.

    +

    two

    +

    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.

    +

    three

    +

    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.

    +

    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. +

    +
    +
    + + +
    + + +

    Usage

    + +

    Via data attributes

    +

    To easily add scrollspy behavior to your topbar navigation, just add data-spy="scroll" to the element you want to spy on (most typically this would be the body) and data-target=".navbar" to select which nav to use. You'll want to use scrollspy with a .nav component.

    +
    +
    <body data-spy="scroll" data-target=".navbar">
    +  ...
    +</body>
    +
    + + +

    Via JavaScript

    +

    Call the scrollspy via JavaScript:

    +
    +
    $('.navbar').scrollspy()
    +
    + + +
    + Heads up! + Navbar links must have resolvable id targets. For example, a <a href="#home">home</a> must correspond to something in the dom like <div id="home"></div>. +
    + +

    Methods

    +

    .scrollspy('refresh')

    +

    When using scrollspy in conjunction with adding or removing of elements from the DOM, you'll need to call the refresh method like so:

    +
    +
    $('[data-spy="scroll"]').each(function () {
    +  var $spy = $(this).scrollspy('refresh')
    +});
    +
    + + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-offset="".

    + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    offsetnumber10Pixels to offset from top when calculating position of scroll.
    + +

    Events

    + + + + + + + + + + + + + +
    EventDescription
    activateThis event fires whenever a new item becomes activated by the scrollspy.
    +
    + + + + +
    + + + +

    Example tabs

    +

    Add quick, dynamic tab functionality to transition through panes of local content, even via dropdown menus.

    +
    + +
    +
    +

    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.

    +
    +
    +

    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.

    +
    + + +
    +
    + + +
    + + +

    Usage

    +

    Enable tabbable tabs via JavaScript (each tab needs to be activated individually):

    +
    +
    $('#myTab a').click(function (e) {
    +  e.preventDefault();
    +  $(this).tab('show');
    +})
    +
    + + +

    You can activate individual tabs in several ways:

    +
    +
    $('#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)
    +
    + + +

    Markup

    +

    You can activate a tab or pill navigation without writing any JavaScript by simply specifying data-toggle="tab" or data-toggle="pill" on an element. Adding the nav and nav-tabs classes to the tab ul will apply the Bootstrap tab styling.

    +
    +
    <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>
    +
    + + +

    To make tabs fade in, add .fade to each .tab-pane.

    + +

    Methods

    +

    $().tab

    +

    + Activates a tab element and content container. Tab should have either a data-target or an href targeting a container node in the DOM. +

    +
    +
    <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>
    +
    + + +

    Events

    + + + + + + + + + + + + + + + + + +
    EventDescription
    showThis event fires on tab show, but before the new tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
    shownThis event fires on tab show after a tab has been shown. Use event.target and event.relatedTarget to target the active tab and the previous active tab (if available) respectively.
    +
    +
    $('a[data-toggle="tab"]').on('shown', function (e) {
    +  e.target // activated tab
    +  e.relatedTarget // previous tab
    +})
    +
    + +
    + + + +
    + + + +

    Examples

    +

    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.

    +

    Hover over the links below to see tooltips:

    +
    +

    Tight pants next level keffiyeh you probably 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 have 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 whatever keytar, scenester farm-to-table banksy Austin twitter handle freegan cred raw denim single-origin coffee viral. +

    +
    + +

    Four directions

    + + + +

    Tooltips in input groups

    +

    When using tooltips and popovers with the Bootstrap input groups, you'll have to set the container (documented below) option to avoid unwanted side effects.

    + +
    + + +

    Usage

    +

    Trigger the tooltip via JavaScript:

    +
    +
    $('#example').tooltip(options)
    +
    + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-animation="".

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    animationbooleantrueapply a css fade transition to the tooltip
    htmlbooleanfalseInsert html into the tooltip. If false, jquery's text method will be used to insert content into the dom. Use text if you're worried about XSS attacks.
    placementstring | function'top'how to position the tooltip - top | bottom | left | right
    selectorstringfalseIf a selector is provided, tooltip objects will be delegated to the specified targets.
    titlestring | function''default title value if `title` tag isn't present
    triggerstring'hover focus'how tooltip is triggered - click | hover | focus | manual. Note you case pass trigger multiple, space seperated, trigger types.
    delaynumber | object0 +

    delay showing and hiding the tooltip (ms) - does not apply to manual trigger type

    +

    If a number is supplied, delay is applied to both hide/show

    +

    Object structure is: delay: { show: 500, hide: 100 }

    +
    containerstring | falsefalse +

    Appends the tooltip to a specific element container: 'body'

    +
    +
    + Heads up! + Options for individual tooltips can alternatively be specified through the use of data attributes. +
    + +

    Markup

    +
    +
    <a href="#" data-toggle="tooltip" title="first tooltip">Hover over me</a>
    +
    + + +

    Methods

    + +

    $().tooltip(options)

    +

    Attaches a tooltip handler to an element collection.

    + +

    .tooltip('show')

    +

    Reveals an element's tooltip.

    +
    +
    $('#element').tooltip('show')
    +
    + + +

    .tooltip('hide')

    +

    Hides an element's tooltip.

    +
    +
    $('#element').tooltip('hide')
    +
    + + +

    .tooltip('toggle')

    +

    Toggles an element's tooltip.

    +
    +
    $('#element').tooltip('toggle')
    +
    + + +

    .tooltip('destroy')

    +

    Hides and destroys an element's tooltip.

    +
    +
    $('#element').tooltip('destroy')
    +
    + +
    + + + + +
    + + +

    Examples

    +

    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. Requires Tooltip to be included.

    + +

    Static popover

    +

    Four options are available: top, right, bottom, and left aligned.

    +
    +
    +
    +

    Popover top

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover right

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover bottom

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    Popover left

    +
    +

    Sed posuere consectetur est at lobortis. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum.

    +
    +
    + +
    +
    +

    No markup shown as popovers are generated from JavaScript and content within a data attribute.

    + +

    Live demo

    + + +

    Four directions

    + + + +
    + + +

    Usage

    +

    Enable popovers via JavaScript:

    +
    +
    $('#example').popover(options)
    +
    + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-animation="".

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    animationbooleantrueapply a css fade transition to the tooltip
    htmlbooleanfalseInsert html into the popover. If false, jquery's text method will be used to insert content into the dom. Use text if you're worried about XSS attacks.
    placementstring | function'right'how to position the popover - top | bottom | left | right
    selectorstringfalseif a selector is provided, tooltip objects will be delegated to the specified targets
    triggerstring'click'how popover is triggered - click | hover | focus | manual
    titlestring | function''default title value if `title` attribute isn't present
    contentstring | function''default content value if `data-content` attribute isn't present
    delaynumber | object0 +

    delay showing and hiding the popover (ms) - does not apply to manual trigger type

    +

    If a number is supplied, delay is applied to both hide/show

    +

    Object structure is: delay: { show: 500, hide: 100 }

    +
    containerstring | falsefalse +

    Appends the popover to a specific element container: 'body'

    +
    +
    + Heads up! + Options for individual popovers can alternatively be specified through the use of data attributes. +
    + +

    Markup

    +

    For performance reasons, the Tooltip and Popover data-apis are opt in. If you would like to use them just specify a selector option.

    + +

    Methods

    +

    $().popover(options)

    +

    Initializes popovers for an element collection.

    + +

    .popover('show')

    +

    Reveals an elements popover.

    +
    +
    $('#element').popover('show')
    +
    + + +

    .popover('hide')

    +

    Hides an elements popover.

    +
    +
    $('#element').popover('hide')
    +
    + + +

    .popover('toggle')

    +

    Toggles an elements popover.

    +
    +
    $('#element').popover('toggle')
    +
    + + +

    .popover('destroy')

    +

    Hides and destroys an element's popover.

    +
    +
    $('#element').popover('destroy')
    +
    + +
    + + + + +
    + + + +

    Example alerts

    +

    Add dismiss functionality to all alert messages with this plugin.

    +
    +
    + + Holy guacamole! Best check yo self, you're not looking too good. +
    +
    + +
    +
    + +

    Oh snap! You got an error!

    +

    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.

    +

    + Take this action Or do this +

    +
    +
    + + +
    + + +

    Usage

    +

    Enable dismissal of an alert via JavaScript:

    +
    +
    $(".alert").alert()
    +
    + + +

    Markup

    +

    Just add data-dismiss="alert" to your close button to automatically give an alert close functionality.

    +
    +
    <a class="close" data-dismiss="alert" href="#">&times;</a>
    +
    + + +

    Methods

    + +

    $().alert()

    +

    Wraps all alerts with close functionality. To have your alerts animate out when closed, make sure they have the .fade and .in class already applied to them.

    + +

    .alert('close')

    +

    Closes an alert.

    +
    +
    $(".alert").alert('close')
    +
    + + + +

    Events

    +

    Bootstrap's alert class exposes a few events for hooking into alert functionality.

    + + + + + + + + + + + + + + + + + +
    EventDescription
    closeThis event fires immediately when the close instance method is called.
    closedThis event is fired when the alert has been closed (will wait for css transitions to complete).
    +
    +
    $('#my-alert').bind('closed', function () {
    +  // do something…
    +})
    +
    + +
    + + + + +
    + + +

    Example uses

    +

    Do more with buttons. Control button states or create groups of buttons for more components like toolbars.

    + +

    Stateful

    +

    Add data-loading-text="Loading..." to use a loading state on a button.

    +
    + +
    +
    +
    <button type="button" id="fat-btn" data-loading-text="Loading..." class="btn btn-primary">
    +  Loading state
    +</button>
    +
    + + +

    Single toggle

    +

    Add data-toggle="button" to activate toggling on a single button.

    +
    + +
    +
    +
    <button type="button" class="btn btn-primary" data-toggle="button">Single toggle</button>
    +
    + + +

    Checkbox

    +

    Add data-toggle="buttons-checkbox" for checkbox style toggling on btn-group.

    +
    +
    + + + +
    +
    +
    +
    <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>
    +
    + + +

    Radio

    +

    Add data-toggle="buttons-radio" for radio style toggling on btn-group.

    +
    +
    + + + +
    +
    +
    +
    <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>
    +
    + + + +
    + + +

    Usage

    +

    Enable buttons via JavaScript:

    +
    +
    $('.nav-tabs').button()
    +
    + + +

    Markup

    +

    Data attributes are integral to the button plugin. Check out the example code below for the various markup types.

    + +

    Options

    +

    None

    + +

    Methods

    + +

    $().button('toggle')

    +

    Toggles push state. Gives the button the appearance that it has been activated.

    +
    + Heads up! + You can enable auto toggling of a button by using the data-toggle attribute. +
    +
    +
    <button type="button" class="btn" data-toggle="button">...</button>
    +
    + + +

    $().button('loading')

    +

    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 data-loading-text. +

    +
    +
    <button type="button" class="btn" data-loading-text="loading stuff...">...</button>
    +
    + + +
    + Heads up! + Firefox persists the disabled state across page loads. A workaround for this is to use autocomplete="off". +
    + +

    $().button('reset')

    +

    Resets button state - swaps text to original text.

    + +

    $().button(string)

    +

    Resets button state - swaps text to any data defined text state.

    +
    +
    <button type="button" class="btn" data-complete-text="finished!" >...</button>
    +<script>
    +  $('.btn').button('complete')
    +</script>
    +
    + +
    + + + + +
    + + +

    About

    +

    Get base styles and flexible support for collapsible components like accordions and navigation.

    +

    * Requires the Transitions plugin to be included.

    + +

    Example accordion

    +

    Using the collapse plugin, we built a simple accordion style widget:

    + +
    +
    +
    + +
    +
    + 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. +
    +
    +
    +
    + +
    +
    + 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. +
    +
    +
    +
    + +
    +
    + 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 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>
    +
    + + +

    You can also use the plugin without the accordion markup. Make a button toggle the expanding and collapsing of another element.

    +
    +
    <button type="button" class="btn btn-danger" data-toggle="collapse" data-target="#demo">
    +  simple collapsible
    +</button>
    +
    +<div id="demo" class="collapse in">...</div>
    +
    + + + +
    + + +

    Usage

    + +

    Via data attributes

    +

    Just add data-toggle="collapse" and a data-target to element to automatically assign control of a collapsible element. The data-target attribute accepts a css selector to apply the collapse to. Be sure to add the class collapse to the collapsible element. If you'd like it to default open, add the additional class in.

    +

    To add accordion-like group management to a collapsible control, add the data attribute data-parent="#selector". Refer to the demo to see this in action.

    + +

    Via JavaScript

    +

    Enable manually with:

    +
    +
    $(".collapse").collapse()
    +
    + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-parent="".

    + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    parentselectorfalseIf selector then all collapsible elements under the specified parent will be closed when this collapsible item is shown. (similar to traditional accordion behavior)
    togglebooleantrueToggles the collapsible element on invocation
    + + +

    Methods

    + +

    .collapse(options)

    +

    Activates your content as a collapsible element. Accepts an optional options object. +

    +
    $('#myCollapsible').collapse({
    +  toggle: false
    +})
    +
    + + +

    .collapse('toggle')

    +

    Toggles a collapsible element to shown or hidden.

    + +

    .collapse('show')

    +

    Shows a collapsible element.

    + +

    .collapse('hide')

    +

    Hides a collapsible element.

    + +

    Events

    +

    Bootstrap's collapse class exposes a few events for hooking into collapse functionality.

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    EventDescription
    showThis event fires immediately when the show instance method is called.
    shownThis event is fired when a collapse element has been made visible to the user (will wait for css transitions to complete).
    hide + This event is fired immediately when the hide method has been called. +
    hiddenThis event is fired when a collapse element has been hidden from the user (will wait for css transitions to complete).
    +
    +
    $('#myCollapsible').on('hidden', function () {
    +  // do something…
    +})
    +
    + +
    + + + + + + + + + +
    + + + +

    Example

    +

    A basic, easily extended plugin for quickly creating elegant typeaheads with any form text input.

    +
    + +
    +
    +
    <input type="text" data-provide="typeahead">
    +
    + + +

    You'll want to set autocomplete="off" to prevent default browser menus from appearing over the Bootstrap typeahead dropdown.

    + +
    + + +

    Usage

    + +

    Via data attributes

    +

    Add data attributes to register an element with typeahead functionality as shown in the example above.

    + +

    Via JavaScript

    +

    Call the typeahead manually with:

    +
    +
    $('.typeahead').typeahead()
    +
    + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-source="".

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    sourcearray, function[ ]The data source to query against. May be an array of strings or a function. The function is passed two arguments, the query value in the input field and the process callback. The function may be used synchronously by returning the data source directly or asynchronously via the process callback's single argument.
    itemsnumber8The max number of items to display in the dropdown.
    minLengthnumber1The minimum character length needed before triggering autocomplete suggestions
    matcherfunctioncase insensitiveThe method used to determine if a query matches an item. Accepts a single argument, the item against which to test the query. Access the current query with this.query. Return a boolean true if query is a match.
    sorterfunctionexact match,
    case sensitive,
    case insensitive
    Method used to sort autocomplete results. Accepts a single argument items and has the scope of the typeahead instance. Reference the current query with this.query.
    updaterfunctionreturns selected itemThe method used to return selected item. Accepts a single argument, the item and has the scope of the typeahead instance.
    highlighterfunctionhighlights all default matchesMethod used to highlight autocomplete results. Accepts a single argument item and has the scope of the typeahead instance. Should return html.
    + +

    Methods

    +

    .typeahead(options)

    +

    Initializes an input with a typeahead.

    +
    + + + + +
    + + +

    Example

    +

    The subnavigation on the left is a live demo of the affix plugin.

    + +
    + +

    Usage

    + +

    Via data attributes

    +

    To easily add affix behavior to any element, just add data-spy="affix" to the element you want to spy on. Then use offsets to define when to toggle the pinning of an element on and off.

    + +
    +
    <div data-spy="affix" data-offset-top="200">...</div>
    +
    + + +
    + Heads up! + You must manage the position of a pinned element and the behavior of its immediate parent. Position is controlled by affix, affix-top, and affix-bottom. 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. +
    + +

    Via JavaScript

    +

    Call the affix plugin via JavaScript:

    +
    +
    $('#navbar').affix()
    +
    + + +

    Methods

    +

    .affix('refresh')

    +

    When using affix in conjunction with adding or removing of elements from the DOM, you'll want to call the refresh method:

    +
    +
    $('[data-spy="affix"]').each(function () {
    +  $(this).affix('refresh')
    +});
    +
    + + +

    Options

    +

    Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-, as in data-offset-top="200".

    + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    offsetnumber | function | object10Pixels 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 offset: { x: 10 }. Use a function when you need to dynamically provide an offset (useful for some responsive designs).
    +
    + + + +
    +
    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/js/affix.js b/docs/assets/js/affix.js new file mode 100644 index 0000000000..c70718c6da --- /dev/null +++ b/docs/assets/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.bs-data-api', $.proxy(this.checkPosition, this)) + .on('click.bs-affix.bs-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/docs/assets/js/alert.js b/docs/assets/js/alert.js new file mode 100644 index 0000000000..9df950245c --- /dev/null +++ b/docs/assets/js/alert.js @@ -0,0 +1,96 @@ +/* ========================================================== + * Bootstrap: alert.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#alerts + * ========================================================== + * 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"; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.hasClass('alert') ? $this : $this.parent() + } + + $parent.trigger(e = $.Event('bs-close')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + $parent.trigger('bs-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) + var data = $this.data('bs-alert') + + if (!data) $this.data('bs-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.bs-alert.bs-data-api', dismiss, Alert.prototype.close) + +}(window.jQuery); diff --git a/docs/assets/js/bootstrap-affix.js b/docs/assets/js/bootstrap-affix.js index e9a7306549..26b5439eba 100644 --- a/docs/assets/js/bootstrap-affix.js +++ b/docs/assets/js/bootstrap-affix.js @@ -1,5 +1,5 @@ /* ========================================================== - * bootstrap-affix.js v3.0.0 + * affix.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#affix * ========================================================== * Copyright 2012 Twitter, Inc. @@ -18,77 +18,81 @@ * ========================================================== */ -!function ($) { +!function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ + // AFFIX CLASS DEFINITION + // ====================== var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) + this.options = $.extend({}, 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)) + .on('scroll.bs-affix.bs-data-api', $.proxy(this.checkPosition, this)) + .on('click.bs-affix.bs-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() - , 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 + 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 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 @@ -96,22 +100,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); diff --git a/docs/assets/js/bootstrap-alert.js b/docs/assets/js/bootstrap-alert.js index 7a9f62e2d4..7acee7f8f8 100644 --- a/docs/assets/js/bootstrap-alert.js +++ b/docs/assets/js/bootstrap-alert.js @@ -1,8 +1,8 @@ /* ========================================================== - * bootstrap-alert.js v3.0.0 + * 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. @@ -18,45 +18,41 @@ * ========================================================== */ -!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('bs-close')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { - $parent - .trigger('closed') - .remove() + $parent.trigger('bs-closed').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) }) } @@ -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.bs-data-api', dismiss, Alert.prototype.close) }(window.jQuery); diff --git a/docs/assets/js/bootstrap-button.js b/docs/assets/js/bootstrap-button.js index a42baf2a8a..119b89880b 100644 --- a/docs/assets/js/bootstrap-button.js +++ b/docs/assets/js/bootstrap-button.js @@ -1,8 +1,8 @@ /* ============================================================ - * bootstrap-button.js v3.0.0 + * 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. @@ -18,27 +18,29 @@ * ============================================================ */ -!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,10 +93,10 @@ } - /* BUTTON DATA-API - * =============== */ + // BUTTON DATA-API + // =============== - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + $(document).on('click.bs-button.bs-data-api', '[data-toggle^=button]', function (e) { var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') diff --git a/docs/assets/js/bootstrap-carousel.js b/docs/assets/js/bootstrap-carousel.js index 0dfb70f8d9..52f4468024 100644 --- a/docs/assets/js/bootstrap-carousel.js +++ b/docs/assets/js/bootstrap-carousel.js @@ -1,5 +1,5 @@ /* ========================================================== - * bootstrap-carousel.js v3.0.0 + * carousel.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#carousel * ========================================================== * Copyright 2012 Twitter, Inc. @@ -18,151 +18,151 @@ * ========================================================== */ -!function ($) { +!function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* CAROUSEL CLASS DEFINITION - * ========================= */ + // CAROUSEL CLASS DEFINITION + // ========================= var Carousel = function (element, options) { - this.$element = $(element) this.$indicators = this.$element.find('.carousel-indicators') - this.options = options + this.$element = $(element) + 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' + } - 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 + 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) } - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } + this.interval = clearInterval(this.interval) - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this + return this + } - if (pos > (this.$items.length - 1) || pos < 0) return + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } - if (activeIndex == pos) { - return this.pause().cycle() - } + 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 - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } + this.sliding = true - , 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 - } + isCycling && this.pause() - , next: function () { - if (this.sliding) return - return this.slide('next') - } + $next = $next.length ? $next : this.$element.find('.item')[fallback]() - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } + var e = $.Event('slide', { relatedTarget: $next[0], direction: direction }) - , 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 + if ($next.hasClass('active')) return - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction + 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 ($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 } + 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 + var $this = $(this) + var data = $this.data('carousel') + var options = $.extend({}, Carousel.DEFAULTS, typeof option == 'object' && option) + var 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]() @@ -170,30 +170,25 @@ }) } - $.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 - * ================= */ + // 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 + 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) diff --git a/docs/assets/js/bootstrap-collapse.js b/docs/assets/js/bootstrap-collapse.js index 7bd40c2339..37535550d3 100644 --- a/docs/assets/js/bootstrap-collapse.js +++ b/docs/assets/js/bootstrap-collapse.js @@ -1,5 +1,5 @@ /* ============================================================= - * bootstrap-collapse.js v3.0.0 + * collapse.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/bootstrap-dropdown.js b/docs/assets/js/bootstrap-dropdown.js index 0b1663f48f..23696a9d78 100644 --- a/docs/assets/js/bootstrap-dropdown.js +++ b/docs/assets/js/bootstrap-dropdown.js @@ -1,5 +1,5 @@ /* ============================================================ - * bootstrap-dropdown.js v3.0.0 + * dropdown.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/bootstrap-modal.js b/docs/assets/js/bootstrap-modal.js index 34249a4063..790f954c7a 100644 --- a/docs/assets/js/bootstrap-modal.js +++ b/docs/assets/js/bootstrap-modal.js @@ -1,5 +1,5 @@ /* ========================================================= - * bootstrap-modal.js v3.0.0 + * modal.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#modals * ========================================================= * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/bootstrap-popover.js b/docs/assets/js/bootstrap-popover.js index 6ebbab1e61..c48f78edfa 100644 --- a/docs/assets/js/bootstrap-popover.js +++ b/docs/assets/js/bootstrap-popover.js @@ -1,5 +1,5 @@ /* =========================================================== - * bootstrap-popover.js v3.0.0 + * popover.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#popovers * =========================================================== * Copyright 2012 Twitter, Inc. @@ -31,7 +31,7 @@ } - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js + /* NOTE: POPOVER EXTENDS tooltip.js ========================================== */ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { diff --git a/docs/assets/js/bootstrap-scrollspy.js b/docs/assets/js/bootstrap-scrollspy.js index e5f0c3c1a8..d080fd2db9 100644 --- a/docs/assets/js/bootstrap-scrollspy.js +++ b/docs/assets/js/bootstrap-scrollspy.js @@ -1,5 +1,5 @@ /* ============================================================= - * bootstrap-scrollspy.js v3.0.0 + * scrollspy.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#scrollspy * ============================================================= * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/bootstrap-tab.js b/docs/assets/js/bootstrap-tab.js index a7a6a83e58..b329582923 100644 --- a/docs/assets/js/bootstrap-tab.js +++ b/docs/assets/js/bootstrap-tab.js @@ -1,5 +1,5 @@ /* ======================================================== - * bootstrap-tab.js v3.0.0 + * tab.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#tabs * ======================================================== * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/bootstrap-tooltip.js b/docs/assets/js/bootstrap-tooltip.js index 03a65e7e1d..8388325a75 100644 --- a/docs/assets/js/bootstrap-tooltip.js +++ b/docs/assets/js/bootstrap-tooltip.js @@ -1,5 +1,5 @@ /* =========================================================== - * bootstrap-tooltip.js v3.0.0 + * tooltip.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#tooltips * Inspired by the original jQuery.tipsy by Jason Frame * =========================================================== diff --git a/docs/assets/js/bootstrap-transition.js b/docs/assets/js/bootstrap-transition.js index e1bc4021b8..f70cb9dd9e 100644 --- a/docs/assets/js/bootstrap-transition.js +++ b/docs/assets/js/bootstrap-transition.js @@ -1,8 +1,8 @@ /* =================================================== - * bootstrap-transition.js v3.0.0 + * 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. @@ -20,41 +20,31 @@ !function ($) { - "use strict"; // jshint ;_; + "use strict"; - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + /* CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) * ======================================================= */ - $(function () { + function transitionEnd() { + var el = document.createElement('bootstrap'); - $.support.transition = (function () { + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + }; - 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 + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] }; } + } + } - })() - - }) + $(function () { + $.support.transition = transitionEnd(); + }); }(window.jQuery); diff --git a/docs/assets/js/bootstrap-typeahead.js b/docs/assets/js/bootstrap-typeahead.js index a6bb0a09c2..51f02911de 100644 --- a/docs/assets/js/bootstrap-typeahead.js +++ b/docs/assets/js/bootstrap-typeahead.js @@ -1,5 +1,5 @@ /* ============================================================= - * bootstrap-typeahead.js v3.0.0 + * typeahead.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#typeahead * ============================================================= * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/bootstrap.js b/docs/assets/js/bootstrap.js index 8de108627f..62607d5884 100644 --- a/docs/assets/js/bootstrap.js +++ b/docs/assets/js/bootstrap.js @@ -1,8 +1,8 @@ /* =================================================== - * bootstrap-transition.js v3.0.0 + * 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. @@ -20,49 +20,39 @@ !function ($) { - "use strict"; // jshint ;_; + "use strict"; - /* CSS TRANSITION SUPPORT (http://www.modernizr.com/) + /* CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) * ======================================================= */ - $(function () { + function transitionEnd() { + var el = document.createElement('bootstrap'); - $.support.transition = (function () { + var transEndEventNames = { + 'WebkitTransition' : 'webkitTransitionEnd' + , 'MozTransition' : 'transitionend' + , 'OTransition' : 'oTransitionEnd otransitionend' + , 'transition' : 'transitionend' + }; - 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 + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] }; } + } + } - })() - - }) + $(function () { + $.support.transition = transitionEnd(); + }); }(window.jQuery); /* ========================================================== - * bootstrap-alert.js v3.0.0 + * 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. @@ -78,45 +68,41 @@ * ========================================================== */ -!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('bs-close')) if (e.isDefaultPrevented()) return $parent.removeClass('in') function removeElement() { - $parent - .trigger('closed') - .remove() + $parent.trigger('bs-closed').remove() } $.support.transition && $parent.hasClass('fade') ? @@ -125,16 +111,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) }) } @@ -151,17 +138,17 @@ } - /* ALERT DATA-API - * ============== */ + // ALERT DATA-API + // ============== */ - $(document).on('click.alert.data-api', dismiss, Alert.prototype.close) + $(document).on('click.bs-alert.bs-data-api', dismiss, Alert.prototype.close) }(window.jQuery); /* ============================================================ - * bootstrap-button.js v3.0.0 + * 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. @@ -177,27 +164,29 @@ * ============================================================ */ -!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]) @@ -205,46 +194,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 @@ -252,10 +239,10 @@ } - /* BUTTON DATA-API - * =============== */ + // BUTTON DATA-API + // =============== - $(document).on('click.button.data-api', '[data-toggle^=button]', function (e) { + $(document).on('click.bs-button.bs-data-api', '[data-toggle^=button]', function (e) { var $btn = $(e.target) if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') $btn.button('toggle') @@ -263,7 +250,7 @@ }(window.jQuery); /* ========================================================== - * bootstrap-carousel.js v3.0.0 + * Bootstrap: carousel.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#carousel * ========================================================== * Copyright 2012 Twitter, Inc. @@ -282,151 +269,151 @@ * ========================================================== */ -!function ($) { +!function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* 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' + } - 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 + 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) } - , getActiveIndex: function () { - this.$active = this.$element.find('.item.active') - this.$items = this.$active.parent().children() - return this.$items.index(this.$active) - } + this.interval = clearInterval(this.interval) - , to: function (pos) { - var activeIndex = this.getActiveIndex() - , that = this + return this + } - if (pos > (this.$items.length - 1) || pos < 0) return + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } - if (activeIndex == pos) { - return this.pause().cycle() - } + 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 - return this.slide(pos > activeIndex ? 'next' : 'prev', $(this.$items[pos])) - } + this.sliding = true - , 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 - } + isCycling && this.pause() - , next: function () { - if (this.sliding) return - return this.slide('next') - } + $next = $next.length ? $next : this.$element.find('.item')[fallback]() - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } + var e = $.Event('slide', { relatedTarget: $next[0], direction: direction }) - , 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 + if ($next.hasClass('active')) return - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - e = $.Event('slide', { - relatedTarget: $next[0] - , direction: direction + 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 ($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 } + 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 + var $this = $(this) + var data = $this.data('carousel') + var options = $.extend({}, Carousel.DEFAULTS, typeof option == 'object' && option) + var 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]() @@ -434,30 +421,25 @@ }) } - $.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 - * ================= */ + // 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 + 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) @@ -470,7 +452,7 @@ }(window.jQuery); /* ============================================================= - * bootstrap-collapse.js v3.0.0 + * Bootstrap: collapse.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. @@ -637,7 +619,7 @@ }(window.jQuery); /* ============================================================ - * bootstrap-dropdown.js v3.0.0 + * Bootstrap: dropdown.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#dropdowns * ============================================================ * Copyright 2012 Twitter, Inc. @@ -802,7 +784,7 @@ }(window.jQuery); /* ========================================================= - * bootstrap-modal.js v3.0.0 + * Bootstrap: modal.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#modals * ========================================================= * Copyright 2012 Twitter, Inc. @@ -1053,7 +1035,7 @@ }(window.jQuery); /* =========================================================== - * bootstrap-tooltip.js v3.0.0 + * Bootstrap: tooltip.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#tooltips * Inspired by the original jQuery.tipsy by Jason Frame * =========================================================== @@ -1414,7 +1396,7 @@ }(window.jQuery); /* =========================================================== - * bootstrap-popover.js v3.0.0 + * Bootstrap: popover.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#popovers * =========================================================== * Copyright 2012 Twitter, Inc. @@ -1446,7 +1428,7 @@ } - /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js + /* NOTE: POPOVER EXTENDS tooltip.js ========================================== */ Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, { @@ -1528,7 +1510,7 @@ }(window.jQuery); /* ============================================================= - * bootstrap-scrollspy.js v3.0.0 + * Bootstrap: scrollspy.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#scrollspy * ============================================================= * Copyright 2012 Twitter, Inc. @@ -1690,7 +1672,7 @@ }(window.jQuery); /* ======================================================== - * bootstrap-tab.js v3.0.0 + * Bootstrap: tab.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#tabs * ======================================================== * Copyright 2012 Twitter, Inc. @@ -1832,344 +1814,9 @@ $(this).tab('show') }) -}(window.jQuery); -/* ============================================================= - * bootstrap-typeahead.js v3.0.0 - * 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 '' + match + '' - }) - } - - , 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: '' - , item: '
  • ' - , 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); /* ========================================================== - * bootstrap-affix.js v3.0.0 + * Bootstrap: affix.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#affix * ========================================================== * Copyright 2012 Twitter, Inc. @@ -2188,77 +1835,81 @@ * ========================================================== */ -!function ($) { +!function ($) { "use strict"; - "use strict"; // jshint ;_; - - - /* AFFIX CLASS DEFINITION - * ====================== */ + // AFFIX CLASS DEFINITION + // ====================== var Affix = function (element, options) { - this.options = $.extend({}, $.fn.affix.defaults, options) + this.options = $.extend({}, 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)) + .on('scroll.bs-affix.bs-data-api', $.proxy(this.checkPosition, this)) + .on('click.bs-affix.bs-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() - , 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 + 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 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 @@ -2266,22 +1917,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); diff --git a/docs/assets/js/bootstrap.min.js b/docs/assets/js/bootstrap.min.js index 646b3bc734..1fac53a95b 100644 --- a/docs/assets/js/bootstrap.min.js +++ b/docs/assets/js/bootstrap.min.js @@ -3,4 +3,4 @@ * 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').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()})});var r=e(document.body).on("shown",".modal",function(){r.addClass("modal-open")}).on("hidden",".modal",function(){r.removeClass("modal-open")})}(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:'
    ',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:'

    '}),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).parents(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parents("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"+t+""})},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:'',item:'
  • ',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("bs-closed").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("bs-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("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.bs-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.bs-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",{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({},t.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.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').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()})});var r=e(document.body).on("shown",".modal",function(){r.addClass("modal-open")}).on("hidden",".modal",function(){r.removeClass("modal-open")})}(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:'
    ',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:'

    '}),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).parents(".active").removeClass("active"),r=this.selector+'[data-target="'+t+'"],'+this.selector+'[href="'+t+'"]',n=e(r).parents("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(n,r){this.options=e.extend({},t.DEFAULTS,r),this.$window=e(window).on("scroll.bs-affix.bs-data-api",e.proxy(this.checkPosition,this)).on("click.bs-affix.bs-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/button.js b/docs/assets/js/button.js new file mode 100644 index 0000000000..f43bba18f9 --- /dev/null +++ b/docs/assets/js/button.js @@ -0,0 +1,105 @@ +/* ============================================================ + * Bootstrap: button.js v3.0.0 + * http://twitter.github.com/bootstrap/javascript.html#buttons + * ============================================================ + * 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"; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + } + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (!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"]') + + if ($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) + 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.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document).on('click.bs-button.bs-data-api', '[data-toggle^=button]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + $btn.button('toggle') + }) + +}(window.jQuery); diff --git a/docs/assets/js/carousel.js b/docs/assets/js/carousel.js new file mode 100644 index 0000000000..b647ee9f15 --- /dev/null +++ b/docs/assets/js/carousel.js @@ -0,0 +1,202 @@ +/* ========================================================== + * 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', { 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('carousel') + var options = $.extend({}, Carousel.DEFAULTS, typeof option == 'object' && option) + var 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.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 + 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() + } + + e.preventDefault() + }) + +}(window.jQuery); diff --git a/js/bootstrap-collapse.js b/docs/assets/js/collapse.js similarity index 99% rename from js/bootstrap-collapse.js rename to docs/assets/js/collapse.js index 7bd40c2339..bdf9eb4c8e 100644 --- a/js/bootstrap-collapse.js +++ b/docs/assets/js/collapse.js @@ -1,5 +1,5 @@ /* ============================================================= - * bootstrap-collapse.js v3.0.0 + * Bootstrap: collapse.js v3.0.0 * http://twitter.github.com/bootstrap/javascript.html#collapse * ============================================================= * Copyright 2012 Twitter, Inc. diff --git a/docs/assets/js/dropdown.js b/docs/assets/js/dropdown.js new file mode 100644 index 0000000000..342625074e --- /dev/null +++ b/docs/assets/js/dropdown.js @@ -0,0 +1,165 @@ +/* ============================================================ + * 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"; // 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/modal.js b/docs/assets/js/modal.js new file mode 100644 index 0000000000..9c88188129 --- /dev/null +++ b/docs/assets/js/modal.js @@ -0,0 +1,251 @@ +/* ========================================================= + * 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"; // 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 = $('