From 7bbd121f6fb5fe2e3921b6297d1fd3a212b9b6db Mon Sep 17 00:00:00 2001 From: Rogerio Prado de Jesus Date: Sat, 7 Jan 2012 14:40:42 -0200 Subject: [PATCH] First commit --- .gitignore | 3 + LICENSE | 176 ++ README.md | 105 + assets/css/bootstrap.css | 2469 +++++++++++++++++++ assets/css/bootstrap.min.css | 356 +++ assets/css/docs.css | 317 +++ assets/ico/bootstrap-apple-114x114.png | Bin 0 -> 6828 bytes assets/ico/bootstrap-apple-57x57.png | Bin 0 -> 3923 bytes assets/ico/bootstrap-apple-72x72.png | Bin 0 -> 4905 bytes assets/ico/favicon.ico | Bin 0 -> 1150 bytes assets/img/bird.png | Bin 0 -> 4434 bytes assets/img/browsers.png | Bin 0 -> 21805 bytes assets/img/example-diagram-01.png | Bin 0 -> 1641 bytes assets/img/example-diagram-02.png | Bin 0 -> 1742 bytes assets/img/example-diagram-03.png | Bin 0 -> 1428 bytes assets/img/grid-18px.png | Bin 0 -> 1118 bytes assets/img/twitter-logo-no-bird.png | Bin 0 -> 1509 bytes assets/js/application.js | 52 + assets/js/bootstrap-alerts.js | 113 + assets/js/bootstrap-buttons.js | 62 + assets/js/bootstrap-dropdown.js | 55 + assets/js/bootstrap-modal.js | 260 ++ assets/js/bootstrap-popover.js | 86 + assets/js/bootstrap-scrollspy.js | 107 + assets/js/bootstrap-tabs.js | 80 + assets/js/bootstrap-twipsy.js | 310 +++ assets/js/google-code-prettify/prettify.css | 94 + assets/js/google-code-prettify/prettify.js | 28 + assets/js/tests/index.html | 40 + assets/js/tests/unit/bootstrap-alerts.js | 41 + assets/js/tests/unit/bootstrap-buttons.js | 42 + assets/js/tests/unit/bootstrap-dropdown.js | 52 + assets/js/tests/unit/bootstrap-modal.js | 151 ++ assets/js/tests/unit/bootstrap-popover.js | 76 + assets/js/tests/unit/bootstrap-scrollspy.js | 31 + assets/js/tests/unit/bootstrap-tabs.js | 77 + assets/js/tests/unit/bootstrap-twipsy.js | 81 + assets/js/tests/vendor/qunit.css | 232 ++ assets/js/tests/vendor/qunit.js | 1510 ++++++++++++ index.html | 79 + original_index.html | 2037 +++++++++++++++ original_javascript.html | 798 ++++++ 42 files changed, 9920 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/css/bootstrap.css create mode 100644 assets/css/bootstrap.min.css create mode 100644 assets/css/docs.css create mode 100644 assets/ico/bootstrap-apple-114x114.png create mode 100644 assets/ico/bootstrap-apple-57x57.png create mode 100644 assets/ico/bootstrap-apple-72x72.png create mode 100644 assets/ico/favicon.ico create mode 100644 assets/img/bird.png create mode 100644 assets/img/browsers.png create mode 100644 assets/img/example-diagram-01.png create mode 100644 assets/img/example-diagram-02.png create mode 100644 assets/img/example-diagram-03.png create mode 100644 assets/img/grid-18px.png create mode 100644 assets/img/twitter-logo-no-bird.png create mode 100644 assets/js/application.js create mode 100644 assets/js/bootstrap-alerts.js create mode 100644 assets/js/bootstrap-buttons.js create mode 100644 assets/js/bootstrap-dropdown.js create mode 100644 assets/js/bootstrap-modal.js create mode 100644 assets/js/bootstrap-popover.js create mode 100644 assets/js/bootstrap-scrollspy.js create mode 100644 assets/js/bootstrap-tabs.js create mode 100644 assets/js/bootstrap-twipsy.js create mode 100644 assets/js/google-code-prettify/prettify.css create mode 100644 assets/js/google-code-prettify/prettify.js create mode 100644 assets/js/tests/index.html create mode 100644 assets/js/tests/unit/bootstrap-alerts.js create mode 100644 assets/js/tests/unit/bootstrap-buttons.js create mode 100644 assets/js/tests/unit/bootstrap-dropdown.js create mode 100644 assets/js/tests/unit/bootstrap-modal.js create mode 100644 assets/js/tests/unit/bootstrap-popover.js create mode 100644 assets/js/tests/unit/bootstrap-scrollspy.js create mode 100644 assets/js/tests/unit/bootstrap-tabs.js create mode 100644 assets/js/tests/unit/bootstrap-twipsy.js create mode 100644 assets/js/tests/vendor/qunit.css create mode 100644 assets/js/tests/vendor/qunit.js create mode 100644 index.html create mode 100644 original_index.html create mode 100644 original_javascript.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa611d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +*~ +.DS_Store +thumbs.db diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2bb9ad2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,176 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..e05a25f --- /dev/null +++ b/README.md @@ -0,0 +1,105 @@ +TWITTER BOOTSTRAP +================= + +Bootstrap is Twitter's toolkit for kickstarting CSS for websites, apps, and more. It includes base CSS styles for typography, forms, buttons, tables, grids, navigation, alerts, and more. + +To get started -- checkout http://twitter.github.com/bootstrap! + + +Usage +----- + +You can use Twitter Bootstrap in one of two ways: just drop the compiled CSS into any new project and start cranking, or run LESS on your site and compile on the fly like a boss. + +Here's what the LESS version looks like: + +``` html + + +``` + +Or if you prefer, the standard css way: + +``` html + +``` + +For more info, refer to the docs! + + +Versioning +---------- + +For transparency and insight into our release cycle, and for striving to maintain backwards compatibility, Bootstrap will be maintained under the Semantic Versioning guidelines as much as possible. + +Releases will be numbered with the follow format: + +`..` + +And constructed with the following guidelines: + +* Breaking backwards compatibility bumps the major +* New additions without breaking backwards compatibility bumps the minor +* Bug fixes and misc changes bump the patch + +For more information on SemVer, please visit http://semver.org/. + + +Bug tracker +----------- + +Have a bug? Please create an issue here on GitHub! + +https://github.com/twitter/bootstrap/issues + + +Twitter account +--------------- + +Keep up to date on announcements and more by following Bootstrap on Twitter, @TwBootstrap. + + +Mailing list +------------ + +Have a question? Ask on our mailing list! + +twitter-bootstrap@googlegroups.com + +http://groups.google.com/group/twitter-bootstrap + + +Developers +---------- + +We have included a makefile with convenience methods for working with the bootstrap library. + ++ **build** - `make build` +This will run the less compiler on the bootstrap lib and generate a bootstrap.css and bootstrap.min.css file. +The lessc compiler is required for this command to run. + ++ **watch** - `make watch` +This is a convenience method for watching your less files and automatically building them whenever you save. +Watchr is required for this command to run. + + +Authors +------- + +**Mark Otto** + ++ http://twitter.com/mdo ++ http://github.com/markdotto + +**Jacob Thornton** + ++ http://twitter.com/fat ++ http://github.com/fat + + +License +--------------------- + +Copyright 2011 Twitter, Inc. + +Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0 \ No newline at end of file diff --git a/assets/css/bootstrap.css b/assets/css/bootstrap.css new file mode 100644 index 0000000..af65005 --- /dev/null +++ b/assets/css/bootstrap.css @@ -0,0 +1,2469 @@ +/*! + * Bootstrap v1.4.0 + * + * Copyright 2011 Twitter, Inc + * Licensed under the Apache License v2.0 + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Designed and built with all the love in the world @twitter by @mdo and @fat. + * Date: Thu Nov 3 17:06:17 PDT 2011 + */ +/* Reset.less + * Props to Eric Meyer (meyerweb.com) for his CSS reset file. We're using an adapted version here that cuts out some of the reset HTML elements we will never need here (i.e., dfn, samp, etc). + * ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- */ +html, body { + margin: 0; + padding: 0; +} +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +cite, +code, +del, +dfn, +em, +img, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +dd, +dl, +dt, +li, +ol, +ul, +fieldset, +form, +label, +legend, +button, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + font-weight: normal; + font-style: normal; + font-size: 100%; + line-height: 1; + font-family: inherit; +} +table { + border-collapse: collapse; + border-spacing: 0; +} +ol, ul { + list-style: none; +} +q:before, +q:after, +blockquote:before, +blockquote:after { + content: ""; +} +html { + overflow-y: scroll; + font-size: 100%; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +a:focus { + outline: thin dotted; +} +a:hover, a:active { + outline: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +nav, +section { + display: block; +} +audio, canvas, video { + display: inline-block; + *display: inline; + *zoom: 1; +} +audio:not([controls]) { + display: none; +} +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sup { + top: -0.5em; +} +sub { + bottom: -0.25em; +} +img { + border: 0; + -ms-interpolation-mode: bicubic; +} +button, +input, +select, +textarea { + font-size: 100%; + margin: 0; + vertical-align: baseline; + *vertical-align: middle; +} +button, input { + line-height: normal; + *overflow: visible; +} +button::-moz-focus-inner, input::-moz-focus-inner { + border: 0; + padding: 0; +} +button, +input[type="button"], +input[type="reset"], +input[type="submit"] { + cursor: pointer; + -webkit-appearance: button; +} +input[type="search"] { + -webkit-appearance: textfield; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +textarea { + overflow: auto; + vertical-align: top; +} +/* Variables.less + * Variables to customize the look and feel of Bootstrap + * ----------------------------------------------------- */ +/* Mixins.less + * Snippets of reusable CSS to develop faster and keep code readable + * ----------------------------------------------------------------- */ +/* + * Scaffolding + * Basic and global styles for generating a grid system, structural layout, and page templates + * ------------------------------------------------------------------------------------------- */ +body { + background-color: #ffffff; + margin: 0; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: 18px; + color: #404040; +} +.container { + width: 940px; + margin-left: auto; + margin-right: auto; + zoom: 1; +} +.container:before, .container:after { + display: table; + content: ""; + zoom: 1; +} +.container:after { + clear: both; +} +.container-fluid { + position: relative; + min-width: 940px; + padding-left: 20px; + padding-right: 20px; + zoom: 1; +} +.container-fluid:before, .container-fluid:after { + display: table; + content: ""; + zoom: 1; +} +.container-fluid:after { + clear: both; +} +.container-fluid > .sidebar { + position: absolute; + top: 0; + left: 20px; + width: 220px; +} +.container-fluid > .content { + margin-left: 240px; +} +a { + color: #0069d6; + text-decoration: none; + line-height: inherit; + font-weight: inherit; +} +a:hover { + color: #00438a; + text-decoration: underline; +} +.pull-right { + float: right; +} +.pull-left { + float: left; +} +.hide { + display: none; +} +.show { + display: block; +} +.row { + zoom: 1; + margin-left: -20px; +} +.row:before, .row:after { + display: table; + content: ""; + zoom: 1; +} +.row:after { + clear: both; +} +.row > [class*="span"] { + display: inline; + float: left; + margin-left: 20px; +} +.span1 { + width: 40px; +} +.span2 { + width: 100px; +} +.span3 { + width: 160px; +} +.span4 { + width: 220px; +} +.span5 { + width: 280px; +} +.span6 { + width: 340px; +} +.span7 { + width: 400px; +} +.span8 { + width: 460px; +} +.span9 { + width: 520px; +} +.span10 { + width: 580px; +} +.span11 { + width: 640px; +} +.span12 { + width: 700px; +} +.span13 { + width: 760px; +} +.span14 { + width: 820px; +} +.span15 { + width: 880px; +} +.span16 { + width: 940px; +} +.span17 { + width: 1000px; +} +.span18 { + width: 1060px; +} +.span19 { + width: 1120px; +} +.span20 { + width: 1180px; +} +.span21 { + width: 1240px; +} +.span22 { + width: 1300px; +} +.span23 { + width: 1360px; +} +.span24 { + width: 1420px; +} +.row > .offset1 { + margin-left: 80px; +} +.row > .offset2 { + margin-left: 140px; +} +.row > .offset3 { + margin-left: 200px; +} +.row > .offset4 { + margin-left: 260px; +} +.row > .offset5 { + margin-left: 320px; +} +.row > .offset6 { + margin-left: 380px; +} +.row > .offset7 { + margin-left: 440px; +} +.row > .offset8 { + margin-left: 500px; +} +.row > .offset9 { + margin-left: 560px; +} +.row > .offset10 { + margin-left: 620px; +} +.row > .offset11 { + margin-left: 680px; +} +.row > .offset12 { + margin-left: 740px; +} +.span-one-third { + width: 300px; +} +.span-two-thirds { + width: 620px; +} +.offset-one-third { + margin-left: 340px; +} +.offset-two-thirds { + margin-left: 660px; +} +/* Typography.less + * Headings, body text, lists, code, and more for a versatile and durable typography system + * ---------------------------------------------------------------------------------------- */ +p { + font-size: 13px; + font-weight: normal; + line-height: 18px; + margin-bottom: 9px; +} +p small { + font-size: 11px; + color: #bfbfbf; +} +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: bold; + color: #404040; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small { + color: #bfbfbf; +} +h1 { + margin-bottom: 18px; + font-size: 30px; + line-height: 36px; +} +h1 small { + font-size: 18px; +} +h2 { + font-size: 24px; + line-height: 36px; +} +h2 small { + font-size: 14px; +} +h3, +h4, +h5, +h6 { + line-height: 36px; +} +h3 { + font-size: 18px; +} +h3 small { + font-size: 14px; +} +h4 { + font-size: 16px; +} +h4 small { + font-size: 12px; +} +h5 { + font-size: 14px; +} +h6 { + font-size: 13px; + color: #bfbfbf; + text-transform: uppercase; +} +ul, ol { + margin: 0 0 18px 25px; +} +ul ul, +ul ol, +ol ol, +ol ul { + margin-bottom: 0; +} +ul { + list-style: disc; +} +ol { + list-style: decimal; +} +li { + line-height: 18px; + color: #808080; +} +ul.unstyled { + list-style: none; + margin-left: 0; +} +dl { + margin-bottom: 18px; +} +dl dt, dl dd { + line-height: 18px; +} +dl dt { + font-weight: bold; +} +dl dd { + margin-left: 9px; +} +hr { + margin: 20px 0 19px; + border: 0; + border-bottom: 1px solid #eee; +} +strong { + font-style: inherit; + font-weight: bold; +} +em { + font-style: italic; + font-weight: inherit; + line-height: inherit; +} +.muted { + color: #bfbfbf; +} +blockquote { + margin-bottom: 18px; + border-left: 5px solid #eee; + padding-left: 15px; +} +blockquote p { + font-size: 14px; + font-weight: 300; + line-height: 18px; + margin-bottom: 0; +} +blockquote small { + display: block; + font-size: 12px; + font-weight: 300; + line-height: 18px; + color: #bfbfbf; +} +blockquote small:before { + content: '\2014 \00A0'; +} +address { + display: block; + line-height: 18px; + margin-bottom: 18px; +} +code, pre { + padding: 0 3px 2px; + font-family: Monaco, Andale Mono, Courier New, monospace; + font-size: 12px; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +code { + background-color: #fee9cc; + color: rgba(0, 0, 0, 0.75); + padding: 1px 3px; +} +pre { + background-color: #f5f5f5; + display: block; + padding: 8.5px; + margin: 0 0 18px; + line-height: 18px; + font-size: 12px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} +/* Forms.less + * Base styles for various input types, form layouts, and states + * ------------------------------------------------------------- */ +form { + margin-bottom: 18px; +} +fieldset { + margin-bottom: 18px; + padding-top: 18px; +} +fieldset legend { + display: block; + padding-left: 150px; + font-size: 19.5px; + line-height: 1; + color: #404040; + *padding: 0 0 5px 145px; + /* IE6-7 */ + + *line-height: 1.5; + /* IE6-7 */ + +} +form .clearfix { + margin-bottom: 18px; + zoom: 1; +} +form .clearfix:before, form .clearfix:after { + display: table; + content: ""; + zoom: 1; +} +form .clearfix:after { + clear: both; +} +label, +input, +select, +textarea { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 13px; + font-weight: normal; + line-height: normal; +} +label { + padding-top: 6px; + font-size: 13px; + line-height: 18px; + float: left; + width: 130px; + text-align: right; + color: #404040; +} +form .input { + margin-left: 150px; +} +input[type=checkbox], input[type=radio] { + cursor: pointer; +} +input, +textarea, +select, +.uneditable-input { + display: inline-block; + width: 210px; + height: 18px; + padding: 4px; + font-size: 13px; + line-height: 18px; + color: #808080; + border: 1px solid #ccc; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +select { + padding: initial; +} +input[type=checkbox], input[type=radio] { + width: auto; + height: auto; + padding: 0; + margin: 3px 0; + *margin-top: 0; + /* IE6-7 */ + + line-height: normal; + border: none; +} +input[type=file] { + background-color: #ffffff; + padding: initial; + border: initial; + line-height: initial; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +input[type=button], input[type=reset], input[type=submit] { + width: auto; + height: auto; +} +select, input[type=file] { + height: 27px; + *height: auto; + line-height: 27px; + *margin-top: 4px; + /* For IE7, add top margin to align select with labels */ + +} +select[multiple] { + height: inherit; + background-color: #ffffff; +} +textarea { + height: auto; +} +.uneditable-input { + background-color: #ffffff; + display: block; + border-color: #eee; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); + cursor: not-allowed; +} +:-moz-placeholder { + color: #bfbfbf; +} +::-webkit-input-placeholder { + color: #bfbfbf; +} +input, textarea { + -webkit-transform-style: preserve-3d; + -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; + -moz-transition: border linear 0.2s, box-shadow linear 0.2s; + -ms-transition: border linear 0.2s, box-shadow linear 0.2s; + -o-transition: border linear 0.2s, box-shadow linear 0.2s; + transition: border linear 0.2s, box-shadow linear 0.2s; + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1); +} +input:focus, textarea:focus { + outline: 0; + border-color: rgba(82, 168, 236, 0.8); + -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + -moz-box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); + box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1), 0 0 8px rgba(82, 168, 236, 0.6); +} +input[type=file]:focus, input[type=checkbox]:focus, select:focus { + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + outline: 1px dotted #666; +} +form .clearfix.error > label, form .clearfix.error .help-block, form .clearfix.error .help-inline { + color: #b94a48; +} +form .clearfix.error input, form .clearfix.error textarea { + color: #b94a48; + border-color: #ee5f5b; +} +form .clearfix.error input:focus, form .clearfix.error textarea:focus { + border-color: #e9322d; + -webkit-box-shadow: 0 0 6px #f8b9b7; + -moz-box-shadow: 0 0 6px #f8b9b7; + box-shadow: 0 0 6px #f8b9b7; +} +form .clearfix.error .input-prepend .add-on, form .clearfix.error .input-append .add-on { + color: #b94a48; + background-color: #fce6e6; + border-color: #b94a48; +} +form .clearfix.warning > label, form .clearfix.warning .help-block, form .clearfix.warning .help-inline { + color: #c09853; +} +form .clearfix.warning input, form .clearfix.warning textarea { + color: #c09853; + border-color: #ccae64; +} +form .clearfix.warning input:focus, form .clearfix.warning textarea:focus { + border-color: #be9a3f; + -webkit-box-shadow: 0 0 6px #e5d6b1; + -moz-box-shadow: 0 0 6px #e5d6b1; + box-shadow: 0 0 6px #e5d6b1; +} +form .clearfix.warning .input-prepend .add-on, form .clearfix.warning .input-append .add-on { + color: #c09853; + background-color: #d2b877; + border-color: #c09853; +} +form .clearfix.success > label, form .clearfix.success .help-block, form .clearfix.success .help-inline { + color: #468847; +} +form .clearfix.success input, form .clearfix.success textarea { + color: #468847; + border-color: #57a957; +} +form .clearfix.success input:focus, form .clearfix.success textarea:focus { + border-color: #458845; + -webkit-box-shadow: 0 0 6px #9acc9a; + -moz-box-shadow: 0 0 6px #9acc9a; + box-shadow: 0 0 6px #9acc9a; +} +form .clearfix.success .input-prepend .add-on, form .clearfix.success .input-append .add-on { + color: #468847; + background-color: #bcddbc; + border-color: #468847; +} +.input-mini, +input.mini, +textarea.mini, +select.mini { + width: 60px; +} +.input-small, +input.small, +textarea.small, +select.small { + width: 90px; +} +.input-medium, +input.medium, +textarea.medium, +select.medium { + width: 150px; +} +.input-large, +input.large, +textarea.large, +select.large { + width: 210px; +} +.input-xlarge, +input.xlarge, +textarea.xlarge, +select.xlarge { + width: 270px; +} +.input-xxlarge, +input.xxlarge, +textarea.xxlarge, +select.xxlarge { + width: 530px; +} +textarea.xxlarge { + overflow-y: auto; +} +input.span1, textarea.span1 { + display: inline-block; + float: none; + width: 30px; + margin-left: 0; +} +input.span2, textarea.span2 { + display: inline-block; + float: none; + width: 90px; + margin-left: 0; +} +input.span3, textarea.span3 { + display: inline-block; + float: none; + width: 150px; + margin-left: 0; +} +input.span4, textarea.span4 { + display: inline-block; + float: none; + width: 210px; + margin-left: 0; +} +input.span5, textarea.span5 { + display: inline-block; + float: none; + width: 270px; + margin-left: 0; +} +input.span6, textarea.span6 { + display: inline-block; + float: none; + width: 330px; + margin-left: 0; +} +input.span7, textarea.span7 { + display: inline-block; + float: none; + width: 390px; + margin-left: 0; +} +input.span8, textarea.span8 { + display: inline-block; + float: none; + width: 450px; + margin-left: 0; +} +input.span9, textarea.span9 { + display: inline-block; + float: none; + width: 510px; + margin-left: 0; +} +input.span10, textarea.span10 { + display: inline-block; + float: none; + width: 570px; + margin-left: 0; +} +input.span11, textarea.span11 { + display: inline-block; + float: none; + width: 630px; + margin-left: 0; +} +input.span12, textarea.span12 { + display: inline-block; + float: none; + width: 690px; + margin-left: 0; +} +input.span13, textarea.span13 { + display: inline-block; + float: none; + width: 750px; + margin-left: 0; +} +input.span14, textarea.span14 { + display: inline-block; + float: none; + width: 810px; + margin-left: 0; +} +input.span15, textarea.span15 { + display: inline-block; + float: none; + width: 870px; + margin-left: 0; +} +input.span16, textarea.span16 { + display: inline-block; + float: none; + width: 930px; + margin-left: 0; +} +input[disabled], +select[disabled], +textarea[disabled], +input[readonly], +select[readonly], +textarea[readonly] { + background-color: #f5f5f5; + border-color: #ddd; + cursor: not-allowed; +} +.actions { + background: #f5f5f5; + margin-top: 18px; + margin-bottom: 18px; + padding: 17px 20px 18px 150px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; +} +.actions .secondary-action { + float: right; +} +.actions .secondary-action a { + line-height: 30px; +} +.actions .secondary-action a:hover { + text-decoration: underline; +} +.help-inline, .help-block { + font-size: 13px; + line-height: 18px; + color: #bfbfbf; +} +.help-inline { + padding-left: 5px; + *position: relative; + /* IE6-7 */ + + *top: -5px; + /* IE6-7 */ + +} +.help-block { + display: block; + max-width: 600px; +} +.inline-inputs { + color: #808080; +} +.inline-inputs span { + padding: 0 2px 0 1px; +} +.input-prepend input, .input-append input { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; +} +.input-prepend .add-on, .input-append .add-on { + position: relative; + background: #f5f5f5; + border: 1px solid #ccc; + z-index: 2; + float: left; + display: block; + width: auto; + min-width: 16px; + height: 18px; + padding: 4px 4px 4px 5px; + margin-right: -1px; + font-weight: normal; + line-height: 18px; + color: #bfbfbf; + text-align: center; + text-shadow: 0 1px 0 #ffffff; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-prepend .active, .input-append .active { + background: #a9dba9; + border-color: #46a546; +} +.input-prepend .add-on { + *margin-top: 1px; + /* IE6-7 */ + +} +.input-append input { + float: left; + -webkit-border-radius: 3px 0 0 3px; + -moz-border-radius: 3px 0 0 3px; + border-radius: 3px 0 0 3px; +} +.input-append .add-on { + -webkit-border-radius: 0 3px 3px 0; + -moz-border-radius: 0 3px 3px 0; + border-radius: 0 3px 3px 0; + margin-right: 0; + margin-left: -1px; +} +.inputs-list { + margin: 0 0 5px; + width: 100%; +} +.inputs-list li { + display: block; + padding: 0; + width: 100%; +} +.inputs-list label { + display: block; + float: none; + width: auto; + padding: 0; + margin-left: 20px; + line-height: 18px; + text-align: left; + white-space: normal; +} +.inputs-list label strong { + color: #808080; +} +.inputs-list label small { + font-size: 11px; + font-weight: normal; +} +.inputs-list .inputs-list { + margin-left: 25px; + margin-bottom: 10px; + padding-top: 0; +} +.inputs-list:first-child { + padding-top: 6px; +} +.inputs-list li + li { + padding-top: 2px; +} +.inputs-list input[type=radio], .inputs-list input[type=checkbox] { + margin-bottom: 0; + margin-left: -20px; + float: left; +} +.form-stacked { + padding-left: 20px; +} +.form-stacked fieldset { + padding-top: 9px; +} +.form-stacked legend { + padding-left: 0; +} +.form-stacked label { + display: block; + float: none; + width: auto; + font-weight: bold; + text-align: left; + line-height: 20px; + padding-top: 0; +} +.form-stacked .clearfix { + margin-bottom: 9px; +} +.form-stacked .clearfix div.input { + margin-left: 0; +} +.form-stacked .inputs-list { + margin-bottom: 0; +} +.form-stacked .inputs-list li { + padding-top: 0; +} +.form-stacked .inputs-list li label { + font-weight: normal; + padding-top: 0; +} +.form-stacked div.clearfix.error { + padding-top: 10px; + padding-bottom: 10px; + padding-left: 10px; + margin-top: 0; + margin-left: -10px; +} +.form-stacked .actions { + margin-left: -20px; + padding-left: 20px; +} +/* + * Tables.less + * Tables for, you guessed it, tabular data + * ---------------------------------------- */ +table { + width: 100%; + margin-bottom: 18px; + padding: 0; + font-size: 13px; + border-collapse: collapse; +} +table th, table td { + padding: 10px 10px 9px; + line-height: 18px; + text-align: left; +} +table th { + padding-top: 9px; + font-weight: bold; + vertical-align: middle; +} +table td { + vertical-align: top; + border-top: 1px solid #ddd; +} +table tbody th { + border-top: 1px solid #ddd; + vertical-align: top; +} +.condensed-table th, .condensed-table td { + padding: 5px 5px 4px; +} +.bordered-table { + border: 1px solid #ddd; + border-collapse: separate; + *border-collapse: collapse; + /* IE7, collapse table to remove spacing */ + + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.bordered-table th + th, .bordered-table td + td, .bordered-table th + td { + border-left: 1px solid #ddd; +} +.bordered-table thead tr:first-child th:first-child, .bordered-table tbody tr:first-child td:first-child { + -webkit-border-radius: 4px 0 0 0; + -moz-border-radius: 4px 0 0 0; + border-radius: 4px 0 0 0; +} +.bordered-table thead tr:first-child th:last-child, .bordered-table tbody tr:first-child td:last-child { + -webkit-border-radius: 0 4px 0 0; + -moz-border-radius: 0 4px 0 0; + border-radius: 0 4px 0 0; +} +.bordered-table tbody tr:last-child td:first-child { + -webkit-border-radius: 0 0 0 4px; + -moz-border-radius: 0 0 0 4px; + border-radius: 0 0 0 4px; +} +.bordered-table tbody tr:last-child td:last-child { + -webkit-border-radius: 0 0 4px 0; + -moz-border-radius: 0 0 4px 0; + border-radius: 0 0 4px 0; +} +table .span1 { + width: 20px; +} +table .span2 { + width: 60px; +} +table .span3 { + width: 100px; +} +table .span4 { + width: 140px; +} +table .span5 { + width: 180px; +} +table .span6 { + width: 220px; +} +table .span7 { + width: 260px; +} +table .span8 { + width: 300px; +} +table .span9 { + width: 340px; +} +table .span10 { + width: 380px; +} +table .span11 { + width: 420px; +} +table .span12 { + width: 460px; +} +table .span13 { + width: 500px; +} +table .span14 { + width: 540px; +} +table .span15 { + width: 580px; +} +table .span16 { + width: 620px; +} +.zebra-striped tbody tr:nth-child(odd) td, .zebra-striped tbody tr:nth-child(odd) th { + background-color: #f9f9f9; +} +.zebra-striped tbody tr:hover td, .zebra-striped tbody tr:hover th { + background-color: #f5f5f5; +} +table .header { + cursor: pointer; +} +table .header:after { + content: ""; + float: right; + margin-top: 7px; + border-width: 0 4px 4px; + border-style: solid; + border-color: #000 transparent; + visibility: hidden; +} +table .headerSortUp, table .headerSortDown { + background-color: rgba(141, 192, 219, 0.25); + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); +} +table .header:hover:after { + visibility: visible; +} +table .headerSortDown:after, table .headerSortDown:hover:after { + visibility: visible; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .headerSortUp:after { + border-bottom: none; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #000; + visibility: visible; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + filter: alpha(opacity=60); + -khtml-opacity: 0.6; + -moz-opacity: 0.6; + opacity: 0.6; +} +table .blue { + color: #049cdb; + border-bottom-color: #049cdb; +} +table .headerSortUp.blue, table .headerSortDown.blue { + background-color: #ade6fe; +} +table .green { + color: #46a546; + border-bottom-color: #46a546; +} +table .headerSortUp.green, table .headerSortDown.green { + background-color: #cdeacd; +} +table .red { + color: #9d261d; + border-bottom-color: #9d261d; +} +table .headerSortUp.red, table .headerSortDown.red { + background-color: #f4c8c5; +} +table .yellow { + color: #ffc40d; + border-bottom-color: #ffc40d; +} +table .headerSortUp.yellow, table .headerSortDown.yellow { + background-color: #fff6d9; +} +table .orange { + color: #f89406; + border-bottom-color: #f89406; +} +table .headerSortUp.orange, table .headerSortDown.orange { + background-color: #fee9cc; +} +table .purple { + color: #7a43b6; + border-bottom-color: #7a43b6; +} +table .headerSortUp.purple, table .headerSortDown.purple { + background-color: #e2d5f0; +} +/* Patterns.less + * Repeatable UI elements outside the base styles provided from the scaffolding + * ---------------------------------------------------------------------------- */ +.topbar { + height: 40px; + position: fixed; + top: 0; + left: 0; + right: 0; + z-index: 10000; + overflow: visible; +} +.topbar a { + color: #bfbfbf; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} +.topbar h3 a:hover, .topbar .brand:hover, .topbar ul .active > a { + background-color: #333; + background-color: rgba(255, 255, 255, 0.05); + color: #ffffff; + text-decoration: none; +} +.topbar h3 { + position: relative; +} +.topbar h3 a, .topbar .brand { + float: left; + display: block; + padding: 8px 20px 12px; + margin-left: -20px; + color: #ffffff; + font-size: 20px; + font-weight: 200; + line-height: 1; +} +.topbar p { + margin: 0; + line-height: 40px; +} +.topbar p a:hover { + background-color: transparent; + color: #ffffff; +} +.topbar form { + float: left; + margin: 5px 0 0 0; + position: relative; + filter: alpha(opacity=100); + -khtml-opacity: 1; + -moz-opacity: 1; + opacity: 1; +} +.topbar form.pull-right { + float: right; +} +.topbar input { + background-color: #444; + background-color: rgba(255, 255, 255, 0.3); + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: normal; + font-weight: 13px; + line-height: 1; + padding: 4px 9px; + color: #ffffff; + color: rgba(255, 255, 255, 0.75); + border: 1px solid #111; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.25); + -webkit-transform-style: preserve-3d; + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} +.topbar input:-moz-placeholder { + color: #e6e6e6; +} +.topbar input::-webkit-input-placeholder { + color: #e6e6e6; +} +.topbar input:hover { + background-color: #bfbfbf; + background-color: rgba(255, 255, 255, 0.5); + color: #ffffff; +} +.topbar input:focus, .topbar input.focused { + outline: 0; + background-color: #ffffff; + color: #404040; + text-shadow: 0 1px 0 #ffffff; + border: 0; + padding: 5px 10px; + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); +} +.topbar-inner, .topbar .fill { + background-color: #222; + background-color: #222222; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222)); + background-image: -moz-linear-gradient(top, #333333, #222222); + background-image: -ms-linear-gradient(top, #333333, #222222); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222)); + background-image: -webkit-linear-gradient(top, #333333, #222222); + background-image: -o-linear-gradient(top, #333333, #222222); + background-image: linear-gradient(top, #333333, #222222); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); + -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); +} +.topbar div > ul, .nav { + display: block; + float: left; + margin: 0 10px 0 0; + position: relative; + left: 0; +} +.topbar div > ul > li, .nav > li { + display: block; + float: left; +} +.topbar div > ul a, .nav a { + display: block; + float: none; + padding: 10px 10px 11px; + line-height: 19px; + text-decoration: none; +} +.topbar div > ul a:hover, .nav a:hover { + color: #ffffff; + text-decoration: none; +} +.topbar div > ul .active > a, .nav .active > a { + background-color: #222; + background-color: rgba(0, 0, 0, 0.5); +} +.topbar div > ul.secondary-nav, .nav.secondary-nav { + float: right; + margin-left: 10px; + margin-right: 0; +} +.topbar div > ul.secondary-nav .menu-dropdown, +.nav.secondary-nav .menu-dropdown, +.topbar div > ul.secondary-nav .dropdown-menu, +.nav.secondary-nav .dropdown-menu { + right: 0; + border: 0; +} +.topbar div > ul a.menu:hover, +.nav a.menu:hover, +.topbar div > ul li.open .menu, +.nav li.open .menu, +.topbar div > ul .dropdown-toggle:hover, +.nav .dropdown-toggle:hover, +.topbar div > ul .dropdown.open .dropdown-toggle, +.nav .dropdown.open .dropdown-toggle { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown, +.nav .menu-dropdown, +.topbar div > ul .dropdown-menu, +.nav .dropdown-menu { + background-color: #333; +} +.topbar div > ul .menu-dropdown a.menu, +.nav .menu-dropdown a.menu, +.topbar div > ul .dropdown-menu a.menu, +.nav .dropdown-menu a.menu, +.topbar div > ul .menu-dropdown .dropdown-toggle, +.nav .menu-dropdown .dropdown-toggle, +.topbar div > ul .dropdown-menu .dropdown-toggle, +.nav .dropdown-menu .dropdown-toggle { + color: #ffffff; +} +.topbar div > ul .menu-dropdown a.menu.open, +.nav .menu-dropdown a.menu.open, +.topbar div > ul .dropdown-menu a.menu.open, +.nav .dropdown-menu a.menu.open, +.topbar div > ul .menu-dropdown .dropdown-toggle.open, +.nav .menu-dropdown .dropdown-toggle.open, +.topbar div > ul .dropdown-menu .dropdown-toggle.open, +.nav .dropdown-menu .dropdown-toggle.open { + background: #444; + background: rgba(255, 255, 255, 0.05); +} +.topbar div > ul .menu-dropdown li a, +.nav .menu-dropdown li a, +.topbar div > ul .dropdown-menu li a, +.nav .dropdown-menu li a { + color: #999; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); +} +.topbar div > ul .menu-dropdown li a:hover, +.nav .menu-dropdown li a:hover, +.topbar div > ul .dropdown-menu li a:hover, +.nav .dropdown-menu li a:hover { + background-color: #191919; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919)); + background-image: -moz-linear-gradient(top, #292929, #191919); + background-image: -ms-linear-gradient(top, #292929, #191919); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919)); + background-image: -webkit-linear-gradient(top, #292929, #191919); + background-image: -o-linear-gradient(top, #292929, #191919); + background-image: linear-gradient(top, #292929, #191919); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0); + color: #ffffff; +} +.topbar div > ul .menu-dropdown .active a, +.nav .menu-dropdown .active a, +.topbar div > ul .dropdown-menu .active a, +.nav .dropdown-menu .active a { + color: #ffffff; +} +.topbar div > ul .menu-dropdown .divider, +.nav .menu-dropdown .divider, +.topbar div > ul .dropdown-menu .divider, +.nav .dropdown-menu .divider { + background-color: #222; + border-color: #444; +} +.topbar ul .menu-dropdown li a, .topbar ul .dropdown-menu li a { + padding: 4px 15px; +} +li.menu, .dropdown { + position: relative; +} +a.menu:after, .dropdown-toggle:after { + width: 0; + height: 0; + display: inline-block; + content: "↓"; + text-indent: -99999px; + vertical-align: top; + margin-top: 8px; + margin-left: 4px; + border-left: 4px solid transparent; + border-right: 4px solid transparent; + border-top: 4px solid #ffffff; + filter: alpha(opacity=50); + -khtml-opacity: 0.5; + -moz-opacity: 0.5; + opacity: 0.5; +} +.menu-dropdown, .dropdown-menu { + background-color: #ffffff; + float: left; + display: none; + position: absolute; + top: 40px; + z-index: 900; + min-width: 160px; + max-width: 220px; + _width: 160px; + margin-left: 0; + margin-right: 0; + padding: 6px 0; + zoom: 1; + border-color: #999; + border-color: rgba(0, 0, 0, 0.2); + border-style: solid; + border-width: 0 1px 1px; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.menu-dropdown li, .dropdown-menu li { + float: none; + display: block; + background-color: none; +} +.menu-dropdown .divider, .dropdown-menu .divider { + height: 1px; + margin: 5px 0; + overflow: hidden; + background-color: #eee; + border-bottom: 1px solid #ffffff; +} +.topbar .dropdown-menu a, .dropdown-menu a { + display: block; + padding: 4px 15px; + clear: both; + font-weight: normal; + line-height: 18px; + color: #808080; + text-shadow: 0 1px 0 #ffffff; +} +.topbar .dropdown-menu a:hover, +.dropdown-menu a:hover, +.topbar .dropdown-menu a.hover, +.dropdown-menu a.hover { + background-color: #dddddd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd)); + background-image: -moz-linear-gradient(top, #eeeeee, #dddddd); + background-image: -ms-linear-gradient(top, #eeeeee, #dddddd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd)); + background-image: -webkit-linear-gradient(top, #eeeeee, #dddddd); + background-image: -o-linear-gradient(top, #eeeeee, #dddddd); + background-image: linear-gradient(top, #eeeeee, #dddddd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0); + color: #404040; + text-decoration: none; + -webkit-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + -moz-box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.025), inset 0 -1px rgba(0, 0, 0, 0.025); +} +.open .menu, +.dropdown.open .menu, +.open .dropdown-toggle, +.dropdown.open .dropdown-toggle { + color: #ffffff; + background: #ccc; + background: rgba(0, 0, 0, 0.3); +} +.open .menu-dropdown, +.dropdown.open .menu-dropdown, +.open .dropdown-menu, +.dropdown.open .dropdown-menu { + display: block; +} +.tabs, .pills { + margin: 0 0 18px; + padding: 0; + list-style: none; + zoom: 1; +} +.tabs:before, +.pills:before, +.tabs:after, +.pills:after { + display: table; + content: ""; + zoom: 1; +} +.tabs:after, .pills:after { + clear: both; +} +.tabs > li, .pills > li { + float: left; +} +.tabs > li > a, .pills > li > a { + display: block; +} +.tabs { + border-color: #ddd; + border-style: solid; + border-width: 0 0 1px; +} +.tabs > li { + position: relative; + margin-bottom: -1px; +} +.tabs > li > a { + padding: 0 15px; + margin-right: 2px; + line-height: 34px; + border: 1px solid transparent; + -webkit-border-radius: 4px 4px 0 0; + -moz-border-radius: 4px 4px 0 0; + border-radius: 4px 4px 0 0; +} +.tabs > li > a:hover { + text-decoration: none; + background-color: #eee; + border-color: #eee #eee #ddd; +} +.tabs .active > a, .tabs .active > a:hover { + color: #808080; + background-color: #ffffff; + border: 1px solid #ddd; + border-bottom-color: transparent; + cursor: default; +} +.tabs .menu-dropdown, .tabs .dropdown-menu { + top: 35px; + border-width: 1px; + -webkit-border-radius: 0 6px 6px 6px; + -moz-border-radius: 0 6px 6px 6px; + border-radius: 0 6px 6px 6px; +} +.tabs a.menu:after, .tabs .dropdown-toggle:after { + border-top-color: #999; + margin-top: 15px; + margin-left: 5px; +} +.tabs li.open.menu .menu, .tabs .open.dropdown .dropdown-toggle { + border-color: #999; +} +.tabs li.open a.menu:after, .tabs .dropdown.open .dropdown-toggle:after { + border-top-color: #555; +} +.pills a { + margin: 5px 3px 5px 0; + padding: 0 15px; + line-height: 30px; + text-shadow: 0 1px 1px #ffffff; + -webkit-border-radius: 15px; + -moz-border-radius: 15px; + border-radius: 15px; +} +.pills a:hover { + color: #ffffff; + text-decoration: none; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #00438a; +} +.pills .active a { + color: #ffffff; + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.25); + background-color: #0069d6; +} +.pills-vertical > li { + float: none; +} +.tab-content > .tab-pane, .pill-content > .pill-pane { + display: none; +} +.tab-content > .active, .pill-content > .active { + display: block; +} +.breadcrumb { + padding: 7px 14px; + margin: 0 0 18px; + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5)); + background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); + background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); + background-image: linear-gradient(top, #ffffff, #f5f5f5); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); + border: 1px solid #ddd; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; +} +.breadcrumb li { + display: inline; + text-shadow: 0 1px 0 #ffffff; +} +.breadcrumb .divider { + padding: 0 5px; + color: #bfbfbf; +} +.breadcrumb .active a { + color: #404040; +} +.hero-unit { + background-color: #f5f5f5; + margin-bottom: 30px; + padding: 60px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.hero-unit h1 { + margin-bottom: 0; + font-size: 60px; + line-height: 1; + letter-spacing: -1px; +} +.hero-unit p { + font-size: 18px; + font-weight: 200; + line-height: 27px; +} +footer { + margin-top: 17px; + padding-top: 17px; + border-top: 1px solid #eee; +} +.page-header { + margin-bottom: 17px; + border-bottom: 1px solid #ddd; + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.page-header h1 { + margin-bottom: 8px; +} +.btn.danger, +.alert-message.danger, +.btn.danger:hover, +.alert-message.danger:hover, +.btn.error, +.alert-message.error, +.btn.error:hover, +.alert-message.error:hover, +.btn.success, +.alert-message.success, +.btn.success:hover, +.alert-message.success:hover, +.btn.info, +.alert-message.info, +.btn.info:hover, +.alert-message.info:hover { + color: #ffffff; +} +.btn .close, .alert-message .close { + font-family: Arial, sans-serif; + line-height: 18px; +} +.btn.danger, +.alert-message.danger, +.btn.error, +.alert-message.error { + background-color: #c43c35; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35)); + background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35)); + background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); + background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); + background-image: linear-gradient(top, #ee5f5b, #c43c35); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #c43c35 #c43c35 #882a25; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.success, .alert-message.success { + background-color: #57a957; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957)); + background-image: -moz-linear-gradient(top, #62c462, #57a957); + background-image: -ms-linear-gradient(top, #62c462, #57a957); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957)); + background-image: -webkit-linear-gradient(top, #62c462, #57a957); + background-image: -o-linear-gradient(top, #62c462, #57a957); + background-image: linear-gradient(top, #62c462, #57a957); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #57a957 #57a957 #3d773d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.info, .alert-message.info { + background-color: #339bb9; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9)); + background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); + background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9)); + background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); + background-image: -o-linear-gradient(top, #5bc0de, #339bb9); + background-image: linear-gradient(top, #5bc0de, #339bb9); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #339bb9 #339bb9 #22697d; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transform-style: preserve-3d; + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; +} +.btn:hover { + background-position: 0 -15px; + color: #333; + text-decoration: none; +} +.btn:focus { + outline: 1px dotted #666; +} +.btn.primary { + color: #ffffff; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(top, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); +} +.btn.active, .btn :active { + -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.25), 0 1px 2px rgba(0, 0, 0, 0.05); +} +.btn.disabled { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn[disabled] { + cursor: default; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + filter: alpha(opacity=65); + -khtml-opacity: 0.65; + -moz-opacity: 0.65; + opacity: 0.65; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.btn.large { + font-size: 15px; + line-height: normal; + padding: 9px 14px 9px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; +} +.btn.small { + padding: 7px 9px 7px; + font-size: 11px; +} +:root .alert-message, :root .btn { + border-radius: 0 \0; +} +button.btn::-moz-focus-inner, input[type=submit].btn::-moz-focus-inner { + padding: 0; + border: 0; +} +.close { + float: right; + color: #000000; + font-size: 20px; + font-weight: bold; + line-height: 13.5px; + text-shadow: 0 1px 0 #ffffff; + filter: alpha(opacity=25); + -khtml-opacity: 0.25; + -moz-opacity: 0.25; + opacity: 0.25; +} +.close:hover { + color: #000000; + text-decoration: none; + filter: alpha(opacity=40); + -khtml-opacity: 0.4; + -moz-opacity: 0.4; + opacity: 0.4; +} +.alert-message { + position: relative; + padding: 7px 15px; + margin-bottom: 18px; + color: #404040; + background-color: #eedc94; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94)); + background-image: -moz-linear-gradient(top, #fceec1, #eedc94); + background-image: -ms-linear-gradient(top, #fceec1, #eedc94); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94)); + background-image: -webkit-linear-gradient(top, #fceec1, #eedc94); + background-image: -o-linear-gradient(top, #fceec1, #eedc94); + background-image: linear-gradient(top, #fceec1, #eedc94); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #eedc94 #eedc94 #e4c652; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); + border-width: 1px; + border-style: solid; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message .close { + margin-top: 1px; + *margin-top: 0; +} +.alert-message a { + font-weight: bold; + color: #404040; +} +.alert-message.danger p a, +.alert-message.error p a, +.alert-message.success p a, +.alert-message.info p a { + color: #ffffff; +} +.alert-message h5 { + line-height: 18px; +} +.alert-message p { + margin-bottom: 0; +} +.alert-message div { + margin-top: 5px; + margin-bottom: 2px; + line-height: 28px; +} +.alert-message .btn { + -webkit-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + -moz-box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); + box-shadow: 0 1px 0 rgba(255, 255, 255, 0.25); +} +.alert-message.block-message { + background-image: none; + background-color: #fdf5d9; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); + padding: 14px; + border-color: #fceec1; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; +} +.alert-message.block-message ul, .alert-message.block-message p { + margin-right: 30px; +} +.alert-message.block-message ul { + margin-bottom: 0; +} +.alert-message.block-message li { + color: #404040; +} +.alert-message.block-message .alert-actions { + margin-top: 5px; +} +.alert-message.block-message.error, .alert-message.block-message.success, .alert-message.block-message.info { + color: #404040; + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); +} +.alert-message.block-message.error { + background-color: #fddfde; + border-color: #fbc7c6; +} +.alert-message.block-message.success { + background-color: #d1eed1; + border-color: #bfe7bf; +} +.alert-message.block-message.info { + background-color: #ddf4fb; + border-color: #c6edf9; +} +.alert-message.block-message.danger p a, +.alert-message.block-message.error p a, +.alert-message.block-message.success p a, +.alert-message.block-message.info p a { + color: #404040; +} +.pagination { + height: 36px; + margin: 18px 0; +} +.pagination ul { + float: left; + margin: 0; + border: 1px solid #ddd; + border: 1px solid rgba(0, 0, 0, 0.15); + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); +} +.pagination li { + display: inline; +} +.pagination a { + float: left; + padding: 0 14px; + line-height: 34px; + border-right: 1px solid; + border-right-color: #ddd; + border-right-color: rgba(0, 0, 0, 0.15); + *border-right-color: #ddd; + /* IE6-7 */ + + text-decoration: none; +} +.pagination a:hover, .pagination .active a { + background-color: #c7eefe; +} +.pagination .disabled a, .pagination .disabled a:hover { + background-color: transparent; + color: #bfbfbf; +} +.pagination .next a { + border: 0; +} +.well { + background-color: #f5f5f5; + margin-bottom: 20px; + padding: 19px; + min-height: 20px; + border: 1px solid #eee; + border: 1px solid rgba(0, 0, 0, 0.05); + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, 0.15); +} +.modal-backdrop { + background-color: #000000; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 10000; +} +.modal-backdrop.fade { + opacity: 0; +} +.modal-backdrop, .modal-backdrop.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.modal { + position: fixed; + top: 50%; + left: 50%; + z-index: 11000; + width: 560px; + margin: -250px 0 0 -280px; + background-color: #ffffff; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, 0.3); + *border: 1px solid #999; + /* IE6-7 */ + + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.modal .close { + margin-top: 7px; +} +.modal.fade { + -webkit-transform-style: preserve-3d; + -webkit-transition: opacity .3s linear, top .3s ease-out; + -moz-transition: opacity .3s linear, top .3s ease-out; + -ms-transition: opacity .3s linear, top .3s ease-out; + -o-transition: opacity .3s linear, top .3s ease-out; + transition: opacity .3s linear, top .3s ease-out; + top: -25%; +} +.modal.fade.in { + top: 50%; +} +.modal-header { + border-bottom: 1px solid #eee; + padding: 5px 15px; +} +.modal-body { + padding: 15px; +} +.modal-body form { + margin-bottom: 0; +} +.modal-footer { + background-color: #f5f5f5; + padding: 14px 15px 15px; + border-top: 1px solid #ddd; + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; + -webkit-box-shadow: inset 0 1px 0 #ffffff; + -moz-box-shadow: inset 0 1px 0 #ffffff; + box-shadow: inset 0 1px 0 #ffffff; + zoom: 1; + margin-bottom: 0; +} +.modal-footer:before, .modal-footer:after { + display: table; + content: ""; + zoom: 1; +} +.modal-footer:after { + clear: both; +} +.modal-footer .btn { + float: right; + margin-left: 5px; +} +.modal .popover, .modal .twipsy { + z-index: 12000; +} +.twipsy { + display: block; + position: absolute; + visibility: visible; + padding: 5px; + font-size: 11px; + z-index: 1000; + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.fade.in { + filter: alpha(opacity=80); + -khtml-opacity: 0.8; + -moz-opacity: 0.8; + opacity: 0.8; +} +.twipsy.above .twipsy-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.twipsy.left .twipsy-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.twipsy.below .twipsy-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.twipsy.right .twipsy-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.twipsy-inner { + padding: 3px 8px; + background-color: #000000; + color: white; + text-align: center; + max-width: 200px; + text-decoration: none; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +.twipsy-arrow { + position: absolute; + width: 0; + height: 0; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + padding: 5px; + display: none; +} +.popover.above .arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-top: 5px solid #000000; +} +.popover.right .arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-right: 5px solid #000000; +} +.popover.below .arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-left: 5px solid transparent; + border-right: 5px solid transparent; + border-bottom: 5px solid #000000; +} +.popover.left .arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-top: 5px solid transparent; + border-bottom: 5px solid transparent; + border-left: 5px solid #000000; +} +.popover .arrow { + position: absolute; + width: 0; + height: 0; +} +.popover .inner { + background: #000000; + background: rgba(0, 0, 0, 0.8); + padding: 3px; + overflow: hidden; + width: 280px; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); + box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); +} +.popover .title { + background-color: #f5f5f5; + padding: 9px 15px; + line-height: 1; + -webkit-border-radius: 3px 3px 0 0; + -moz-border-radius: 3px 3px 0 0; + border-radius: 3px 3px 0 0; + border-bottom: 1px solid #eee; +} +.popover .content { + background-color: #ffffff; + padding: 14px; + -webkit-border-radius: 0 0 3px 3px; + -moz-border-radius: 0 0 3px 3px; + border-radius: 0 0 3px 3px; + -webkit-background-clip: padding-box; + -moz-background-clip: padding-box; + background-clip: padding-box; +} +.popover .content p, .popover .content ul, .popover .content ol { + margin-bottom: 0; +} +.fade { + -webkit-transform-style: preserve-3d; + -webkit-transition: opacity 0.15s linear; + -moz-transition: opacity 0.15s linear; + -ms-transition: opacity 0.15s linear; + -o-transition: opacity 0.15s linear; + transition: opacity 0.15s linear; + opacity: 0; +} +.fade.in { + opacity: 1; +} +.label { + padding: 1px 3px 2px; + font-size: 9.75px; + font-weight: bold; + color: #ffffff; + text-transform: uppercase; + white-space: nowrap; + background-color: #bfbfbf; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.label.important { + background-color: #c43c35; +} +.label.warning { + background-color: #f89406; +} +.label.success { + background-color: #46a546; +} +.label.notice { + background-color: #62cffc; +} +.media-grid { + margin-left: -20px; + margin-bottom: 0; + zoom: 1; +} +.media-grid:before, .media-grid:after { + display: table; + content: ""; + zoom: 1; +} +.media-grid:after { + clear: both; +} +.media-grid li { + display: inline; +} +.media-grid a { + float: left; + padding: 4px; + margin: 0 0 18px 20px; + border: 1px solid #ddd; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); +} +.media-grid a img { + display: block; +} +.media-grid a:hover { + border-color: #0069d6; + -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); + box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); +} diff --git a/assets/css/bootstrap.min.css b/assets/css/bootstrap.min.css new file mode 100644 index 0000000..75e85d3 --- /dev/null +++ b/assets/css/bootstrap.min.css @@ -0,0 +1,356 @@ +html,body{margin:0;padding:0;} +h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,cite,code,del,dfn,em,img,q,s,samp,small,strike,strong,sub,sup,tt,var,dd,dl,dt,li,ol,ul,fieldset,form,label,legend,button,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;border:0;font-weight:normal;font-style:normal;font-size:100%;line-height:1;font-family:inherit;} +table{border-collapse:collapse;border-spacing:0;} +ol,ul{list-style:none;} +q:before,q:after,blockquote:before,blockquote:after{content:"";} +html{overflow-y:scroll;font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} +a:focus{outline:thin dotted;} +a:hover,a:active{outline:0;} +article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} +audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} +audio:not([controls]){display:none;} +sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;} +sup{top:-0.5em;} +sub{bottom:-0.25em;} +img{border:0;-ms-interpolation-mode:bicubic;} +button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;} +button,input{line-height:normal;*overflow:visible;} +button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;} +button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} +input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} +input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;} +textarea{overflow:auto;vertical-align:top;} +body{background-color:#ffffff;margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;color:#404040;} +.container{width:940px;margin-left:auto;margin-right:auto;zoom:1;}.container:before,.container:after{display:table;content:"";zoom:1;} +.container:after{clear:both;} +.container-fluid{position:relative;min-width:940px;padding-left:20px;padding-right:20px;zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";zoom:1;} +.container-fluid:after{clear:both;} +.container-fluid>.sidebar{position:absolute;top:0;left:20px;width:220px;} +.container-fluid>.content{margin-left:240px;} +a{color:#0069d6;text-decoration:none;line-height:inherit;font-weight:inherit;}a:hover{color:#00438a;text-decoration:underline;} +.pull-right{float:right;} +.pull-left{float:left;} +.hide{display:none;} +.show{display:block;} +.row{zoom:1;margin-left:-20px;}.row:before,.row:after{display:table;content:"";zoom:1;} +.row:after{clear:both;} +.row>[class*="span"]{display:inline;float:left;margin-left:20px;} +.span1{width:40px;} +.span2{width:100px;} +.span3{width:160px;} +.span4{width:220px;} +.span5{width:280px;} +.span6{width:340px;} +.span7{width:400px;} +.span8{width:460px;} +.span9{width:520px;} +.span10{width:580px;} +.span11{width:640px;} +.span12{width:700px;} +.span13{width:760px;} +.span14{width:820px;} +.span15{width:880px;} +.span16{width:940px;} +.span17{width:1000px;} +.span18{width:1060px;} +.span19{width:1120px;} +.span20{width:1180px;} +.span21{width:1240px;} +.span22{width:1300px;} +.span23{width:1360px;} +.span24{width:1420px;} +.row >.offset1{margin-left:80px;} +.row >.offset2{margin-left:140px;} +.row >.offset3{margin-left:200px;} +.row >.offset4{margin-left:260px;} +.row >.offset5{margin-left:320px;} +.row >.offset6{margin-left:380px;} +.row >.offset7{margin-left:440px;} +.row >.offset8{margin-left:500px;} +.row >.offset9{margin-left:560px;} +.row >.offset10{margin-left:620px;} +.row >.offset11{margin-left:680px;} +.row >.offset12{margin-left:740px;} +.span-one-third{width:300px;} +.span-two-thirds{width:620px;} +.offset-one-third{margin-left:340px;} +.offset-two-thirds{margin-left:660px;} +p{font-size:13px;font-weight:normal;line-height:18px;margin-bottom:9px;}p small{font-size:11px;color:#bfbfbf;} +h1,h2,h3,h4,h5,h6{font-weight:bold;color:#404040;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{color:#bfbfbf;} +h1{margin-bottom:18px;font-size:30px;line-height:36px;}h1 small{font-size:18px;} +h2{font-size:24px;line-height:36px;}h2 small{font-size:14px;} +h3,h4,h5,h6{line-height:36px;} +h3{font-size:18px;}h3 small{font-size:14px;} +h4{font-size:16px;}h4 small{font-size:12px;} +h5{font-size:14px;} +h6{font-size:13px;color:#bfbfbf;text-transform:uppercase;} +ul,ol{margin:0 0 18px 25px;} +ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} +ul{list-style:disc;} +ol{list-style:decimal;} +li{line-height:18px;color:#808080;} +ul.unstyled{list-style:none;margin-left:0;} +dl{margin-bottom:18px;}dl dt,dl dd{line-height:18px;} +dl dt{font-weight:bold;} +dl dd{margin-left:9px;} +hr{margin:20px 0 19px;border:0;border-bottom:1px solid #eee;} +strong{font-style:inherit;font-weight:bold;} +em{font-style:italic;font-weight:inherit;line-height:inherit;} +.muted{color:#bfbfbf;} +blockquote{margin-bottom:18px;border-left:5px solid #eee;padding-left:15px;}blockquote p{font-size:14px;font-weight:300;line-height:18px;margin-bottom:0;} +blockquote small{display:block;font-size:12px;font-weight:300;line-height:18px;color:#bfbfbf;}blockquote small:before{content:'\2014 \00A0';} +address{display:block;line-height:18px;margin-bottom:18px;} +code,pre{padding:0 3px 2px;font-family:Monaco, Andale Mono, Courier New, monospace;font-size:12px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +code{background-color:#fee9cc;color:rgba(0, 0, 0, 0.75);padding:1px 3px;} +pre{background-color:#f5f5f5;display:block;padding:8.5px;margin:0 0 18px;line-height:18px;font-size:12px;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;white-space:pre;white-space:pre-wrap;word-wrap:break-word;} +form{margin-bottom:18px;} +fieldset{margin-bottom:18px;padding-top:18px;}fieldset legend{display:block;padding-left:150px;font-size:19.5px;line-height:1;color:#404040;*padding:0 0 5px 145px;*line-height:1.5;} +form .clearfix{margin-bottom:18px;zoom:1;}form .clearfix:before,form .clearfix:after{display:table;content:"";zoom:1;} +form .clearfix:after{clear:both;} +label,input,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:normal;} +label{padding-top:6px;font-size:13px;line-height:18px;float:left;width:130px;text-align:right;color:#404040;} +form .input{margin-left:150px;} +input[type=checkbox],input[type=radio]{cursor:pointer;} +input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;font-size:13px;line-height:18px;color:#808080;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} +select{padding:initial;} +input[type=checkbox],input[type=radio]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:none;} +input[type=file]{background-color:#ffffff;padding:initial;border:initial;line-height:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +input[type=button],input[type=reset],input[type=submit]{width:auto;height:auto;} +select,input[type=file]{height:27px;*height:auto;line-height:27px;*margin-top:4px;} +select[multiple]{height:inherit;background-color:#ffffff;} +textarea{height:auto;} +.uneditable-input{background-color:#ffffff;display:block;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} +:-moz-placeholder{color:#bfbfbf;} +::-webkit-input-placeholder{color:#bfbfbf;} +input,textarea{-webkit-transform-style:preserve-3d;-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1);} +input:focus,textarea:focus{outline:0;border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 3px rgba(0, 0, 0, 0.1),0 0 8px rgba(82, 168, 236, 0.6);} +input[type=file]:focus,input[type=checkbox]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:1px dotted #666;} +form .clearfix.error>label,form .clearfix.error .help-block,form .clearfix.error .help-inline{color:#b94a48;} +form .clearfix.error input,form .clearfix.error textarea{color:#b94a48;border-color:#ee5f5b;}form .clearfix.error input:focus,form .clearfix.error textarea:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} +form .clearfix.error .input-prepend .add-on,form .clearfix.error .input-append .add-on{color:#b94a48;background-color:#fce6e6;border-color:#b94a48;} +form .clearfix.warning>label,form .clearfix.warning .help-block,form .clearfix.warning .help-inline{color:#c09853;} +form .clearfix.warning input,form .clearfix.warning textarea{color:#c09853;border-color:#ccae64;}form .clearfix.warning input:focus,form .clearfix.warning textarea:focus{border-color:#be9a3f;-webkit-box-shadow:0 0 6px #e5d6b1;-moz-box-shadow:0 0 6px #e5d6b1;box-shadow:0 0 6px #e5d6b1;} +form .clearfix.warning .input-prepend .add-on,form .clearfix.warning .input-append .add-on{color:#c09853;background-color:#d2b877;border-color:#c09853;} +form .clearfix.success>label,form .clearfix.success .help-block,form .clearfix.success .help-inline{color:#468847;} +form .clearfix.success input,form .clearfix.success textarea{color:#468847;border-color:#57a957;}form .clearfix.success input:focus,form .clearfix.success textarea:focus{border-color:#458845;-webkit-box-shadow:0 0 6px #9acc9a;-moz-box-shadow:0 0 6px #9acc9a;box-shadow:0 0 6px #9acc9a;} +form .clearfix.success .input-prepend .add-on,form .clearfix.success .input-append .add-on{color:#468847;background-color:#bcddbc;border-color:#468847;} +.input-mini,input.mini,textarea.mini,select.mini{width:60px;} +.input-small,input.small,textarea.small,select.small{width:90px;} +.input-medium,input.medium,textarea.medium,select.medium{width:150px;} +.input-large,input.large,textarea.large,select.large{width:210px;} +.input-xlarge,input.xlarge,textarea.xlarge,select.xlarge{width:270px;} +.input-xxlarge,input.xxlarge,textarea.xxlarge,select.xxlarge{width:530px;} +textarea.xxlarge{overflow-y:auto;} +input.span1,textarea.span1{display:inline-block;float:none;width:30px;margin-left:0;} +input.span2,textarea.span2{display:inline-block;float:none;width:90px;margin-left:0;} +input.span3,textarea.span3{display:inline-block;float:none;width:150px;margin-left:0;} +input.span4,textarea.span4{display:inline-block;float:none;width:210px;margin-left:0;} +input.span5,textarea.span5{display:inline-block;float:none;width:270px;margin-left:0;} +input.span6,textarea.span6{display:inline-block;float:none;width:330px;margin-left:0;} +input.span7,textarea.span7{display:inline-block;float:none;width:390px;margin-left:0;} +input.span8,textarea.span8{display:inline-block;float:none;width:450px;margin-left:0;} +input.span9,textarea.span9{display:inline-block;float:none;width:510px;margin-left:0;} +input.span10,textarea.span10{display:inline-block;float:none;width:570px;margin-left:0;} +input.span11,textarea.span11{display:inline-block;float:none;width:630px;margin-left:0;} +input.span12,textarea.span12{display:inline-block;float:none;width:690px;margin-left:0;} +input.span13,textarea.span13{display:inline-block;float:none;width:750px;margin-left:0;} +input.span14,textarea.span14{display:inline-block;float:none;width:810px;margin-left:0;} +input.span15,textarea.span15{display:inline-block;float:none;width:870px;margin-left:0;} +input.span16,textarea.span16{display:inline-block;float:none;width:930px;margin-left:0;} +input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} +.actions{background:#f5f5f5;margin-top:18px;margin-bottom:18px;padding:17px 20px 18px 150px;border-top:1px solid #ddd;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;}.actions .secondary-action{float:right;}.actions .secondary-action a{line-height:30px;}.actions .secondary-action a:hover{text-decoration:underline;} +.help-inline,.help-block{font-size:13px;line-height:18px;color:#bfbfbf;} +.help-inline{padding-left:5px;*position:relative;*top:-5px;} +.help-block{display:block;max-width:600px;} +.inline-inputs{color:#808080;}.inline-inputs span{padding:0 2px 0 1px;} +.input-prepend input,.input-append input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} +.input-prepend .add-on,.input-append .add-on{position:relative;background:#f5f5f5;border:1px solid #ccc;z-index:2;float:left;display:block;width:auto;min-width:16px;height:18px;padding:4px 4px 4px 5px;margin-right:-1px;font-weight:normal;line-height:18px;color:#bfbfbf;text-align:center;text-shadow:0 1px 0 #ffffff;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-prepend .active,.input-append .active{background:#a9dba9;border-color:#46a546;} +.input-prepend .add-on{*margin-top:1px;} +.input-append input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} +.input-append .add-on{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;margin-right:0;margin-left:-1px;} +.inputs-list{margin:0 0 5px;width:100%;}.inputs-list li{display:block;padding:0;width:100%;} +.inputs-list label{display:block;float:none;width:auto;padding:0;margin-left:20px;line-height:18px;text-align:left;white-space:normal;}.inputs-list label strong{color:#808080;} +.inputs-list label small{font-size:11px;font-weight:normal;} +.inputs-list .inputs-list{margin-left:25px;margin-bottom:10px;padding-top:0;} +.inputs-list:first-child{padding-top:6px;} +.inputs-list li+li{padding-top:2px;} +.inputs-list input[type=radio],.inputs-list input[type=checkbox]{margin-bottom:0;margin-left:-20px;float:left;} +.form-stacked{padding-left:20px;}.form-stacked fieldset{padding-top:9px;} +.form-stacked legend{padding-left:0;} +.form-stacked label{display:block;float:none;width:auto;font-weight:bold;text-align:left;line-height:20px;padding-top:0;} +.form-stacked .clearfix{margin-bottom:9px;}.form-stacked .clearfix div.input{margin-left:0;} +.form-stacked .inputs-list{margin-bottom:0;}.form-stacked .inputs-list li{padding-top:0;}.form-stacked .inputs-list li label{font-weight:normal;padding-top:0;} +.form-stacked div.clearfix.error{padding-top:10px;padding-bottom:10px;padding-left:10px;margin-top:0;margin-left:-10px;} +.form-stacked .actions{margin-left:-20px;padding-left:20px;} +table{width:100%;margin-bottom:18px;padding:0;font-size:13px;border-collapse:collapse;}table th,table td{padding:10px 10px 9px;line-height:18px;text-align:left;} +table th{padding-top:9px;font-weight:bold;vertical-align:middle;} +table td{vertical-align:top;border-top:1px solid #ddd;} +table tbody th{border-top:1px solid #ddd;vertical-align:top;} +.condensed-table th,.condensed-table td{padding:5px 5px 4px;} +.bordered-table{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapse;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.bordered-table th+th,.bordered-table td+td,.bordered-table th+td{border-left:1px solid #ddd;} +.bordered-table thead tr:first-child th:first-child,.bordered-table tbody tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} +.bordered-table thead tr:first-child th:last-child,.bordered-table tbody tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} +.bordered-table tbody tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} +.bordered-table tbody tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} +table .span1{width:20px;} +table .span2{width:60px;} +table .span3{width:100px;} +table .span4{width:140px;} +table .span5{width:180px;} +table .span6{width:220px;} +table .span7{width:260px;} +table .span8{width:300px;} +table .span9{width:340px;} +table .span10{width:380px;} +table .span11{width:420px;} +table .span12{width:460px;} +table .span13{width:500px;} +table .span14{width:540px;} +table .span15{width:580px;} +table .span16{width:620px;} +.zebra-striped tbody tr:nth-child(odd) td,.zebra-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} +.zebra-striped tbody tr:hover td,.zebra-striped tbody tr:hover th{background-color:#f5f5f5;} +table .header{cursor:pointer;}table .header:after{content:"";float:right;margin-top:7px;border-width:0 4px 4px;border-style:solid;border-color:#000 transparent;visibility:hidden;} +table .headerSortUp,table .headerSortDown{background-color:rgba(141, 192, 219, 0.25);text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);} +table .header:hover:after{visibility:visible;} +table .headerSortDown:after,table .headerSortDown:hover:after{visibility:visible;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} +table .headerSortUp:after{border-bottom:none;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000;visibility:visible;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;filter:alpha(opacity=60);-khtml-opacity:0.6;-moz-opacity:0.6;opacity:0.6;} +table .blue{color:#049cdb;border-bottom-color:#049cdb;} +table .headerSortUp.blue,table .headerSortDown.blue{background-color:#ade6fe;} +table .green{color:#46a546;border-bottom-color:#46a546;} +table .headerSortUp.green,table .headerSortDown.green{background-color:#cdeacd;} +table .red{color:#9d261d;border-bottom-color:#9d261d;} +table .headerSortUp.red,table .headerSortDown.red{background-color:#f4c8c5;} +table .yellow{color:#ffc40d;border-bottom-color:#ffc40d;} +table .headerSortUp.yellow,table .headerSortDown.yellow{background-color:#fff6d9;} +table .orange{color:#f89406;border-bottom-color:#f89406;} +table .headerSortUp.orange,table .headerSortDown.orange{background-color:#fee9cc;} +table .purple{color:#7a43b6;border-bottom-color:#7a43b6;} +table .headerSortUp.purple,table .headerSortDown.purple{background-color:#e2d5f0;} +.topbar{height:40px;position:fixed;top:0;left:0;right:0;z-index:10000;overflow:visible;}.topbar a{color:#bfbfbf;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} +.topbar h3 a:hover,.topbar .brand:hover,.topbar ul .active>a{background-color:#333;background-color:rgba(255, 255, 255, 0.05);color:#ffffff;text-decoration:none;} +.topbar h3{position:relative;} +.topbar h3 a,.topbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;color:#ffffff;font-size:20px;font-weight:200;line-height:1;} +.topbar p{margin:0;line-height:40px;}.topbar p a:hover{background-color:transparent;color:#ffffff;} +.topbar form{float:left;margin:5px 0 0 0;position:relative;filter:alpha(opacity=100);-khtml-opacity:1;-moz-opacity:1;opacity:1;} +.topbar form.pull-right{float:right;} +.topbar input{background-color:#444;background-color:rgba(255, 255, 255, 0.3);font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:normal;font-weight:13px;line-height:1;padding:4px 9px;color:#ffffff;color:rgba(255, 255, 255, 0.75);border:1px solid #111;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.25);-webkit-transform-style:preserve-3d;-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.topbar input:-moz-placeholder{color:#e6e6e6;} +.topbar input::-webkit-input-placeholder{color:#e6e6e6;} +.topbar input:hover{background-color:#bfbfbf;background-color:rgba(255, 255, 255, 0.5);color:#ffffff;} +.topbar input:focus,.topbar input.focused{outline:0;background-color:#ffffff;color:#404040;text-shadow:0 1px 0 #ffffff;border:0;padding:5px 10px;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);} +.topbar-inner,.topbar .fill{background-color:#222;background-color:#222222;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#333333), to(#222222));background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #333333), color-stop(100%, #222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} +.topbar div>ul,.nav{display:block;float:left;margin:0 10px 0 0;position:relative;left:0;}.topbar div>ul>li,.nav>li{display:block;float:left;} +.topbar div>ul a,.nav a{display:block;float:none;padding:10px 10px 11px;line-height:19px;text-decoration:none;}.topbar div>ul a:hover,.nav a:hover{color:#ffffff;text-decoration:none;} +.topbar div>ul .active>a,.nav .active>a{background-color:#222;background-color:rgba(0, 0, 0, 0.5);} +.topbar div>ul.secondary-nav,.nav.secondary-nav{float:right;margin-left:10px;margin-right:0;}.topbar div>ul.secondary-nav .menu-dropdown,.nav.secondary-nav .menu-dropdown,.topbar div>ul.secondary-nav .dropdown-menu,.nav.secondary-nav .dropdown-menu{right:0;border:0;} +.topbar div>ul a.menu:hover,.nav a.menu:hover,.topbar div>ul li.open .menu,.nav li.open .menu,.topbar div>ul .dropdown-toggle:hover,.nav .dropdown-toggle:hover,.topbar div>ul .dropdown.open .dropdown-toggle,.nav .dropdown.open .dropdown-toggle{background:#444;background:rgba(255, 255, 255, 0.05);} +.topbar div>ul .menu-dropdown,.nav .menu-dropdown,.topbar div>ul .dropdown-menu,.nav .dropdown-menu{background-color:#333;}.topbar div>ul .menu-dropdown a.menu,.nav .menu-dropdown a.menu,.topbar div>ul .dropdown-menu a.menu,.nav .dropdown-menu a.menu,.topbar div>ul .menu-dropdown .dropdown-toggle,.nav .menu-dropdown .dropdown-toggle,.topbar div>ul .dropdown-menu .dropdown-toggle,.nav .dropdown-menu .dropdown-toggle{color:#ffffff;}.topbar div>ul .menu-dropdown a.menu.open,.nav .menu-dropdown a.menu.open,.topbar div>ul .dropdown-menu a.menu.open,.nav .dropdown-menu a.menu.open,.topbar div>ul .menu-dropdown .dropdown-toggle.open,.nav .menu-dropdown .dropdown-toggle.open,.topbar div>ul .dropdown-menu .dropdown-toggle.open,.nav .dropdown-menu .dropdown-toggle.open{background:#444;background:rgba(255, 255, 255, 0.05);} +.topbar div>ul .menu-dropdown li a,.nav .menu-dropdown li a,.topbar div>ul .dropdown-menu li a,.nav .dropdown-menu li a{color:#999;text-shadow:0 1px 0 rgba(0, 0, 0, 0.5);}.topbar div>ul .menu-dropdown li a:hover,.nav .menu-dropdown li a:hover,.topbar div>ul .dropdown-menu li a:hover,.nav .dropdown-menu li a:hover{background-color:#191919;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#292929), to(#191919));background-image:-moz-linear-gradient(top, #292929, #191919);background-image:-ms-linear-gradient(top, #292929, #191919);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #191919));background-image:-webkit-linear-gradient(top, #292929, #191919);background-image:-o-linear-gradient(top, #292929, #191919);background-image:linear-gradient(top, #292929, #191919);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#191919', GradientType=0);color:#ffffff;} +.topbar div>ul .menu-dropdown .active a,.nav .menu-dropdown .active a,.topbar div>ul .dropdown-menu .active a,.nav .dropdown-menu .active a{color:#ffffff;} +.topbar div>ul .menu-dropdown .divider,.nav .menu-dropdown .divider,.topbar div>ul .dropdown-menu .divider,.nav .dropdown-menu .divider{background-color:#222;border-color:#444;} +.topbar ul .menu-dropdown li a,.topbar ul .dropdown-menu li a{padding:4px 15px;} +li.menu,.dropdown{position:relative;} +a.menu:after,.dropdown-toggle:after{width:0;height:0;display:inline-block;content:"↓";text-indent:-99999px;vertical-align:top;margin-top:8px;margin-left:4px;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #ffffff;filter:alpha(opacity=50);-khtml-opacity:0.5;-moz-opacity:0.5;opacity:0.5;} +.menu-dropdown,.dropdown-menu{background-color:#ffffff;float:left;display:none;position:absolute;top:40px;z-index:900;min-width:160px;max-width:220px;_width:160px;margin-left:0;margin-right:0;padding:6px 0;zoom:1;border-color:#999;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:0 1px 1px;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);box-shadow:0 2px 4px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.menu-dropdown li,.dropdown-menu li{float:none;display:block;background-color:none;} +.menu-dropdown .divider,.dropdown-menu .divider{height:1px;margin:5px 0;overflow:hidden;background-color:#eee;border-bottom:1px solid #ffffff;} +.topbar .dropdown-menu a,.dropdown-menu a{display:block;padding:4px 15px;clear:both;font-weight:normal;line-height:18px;color:#808080;text-shadow:0 1px 0 #ffffff;}.topbar .dropdown-menu a:hover,.dropdown-menu a:hover,.topbar .dropdown-menu a.hover,.dropdown-menu a.hover{background-color:#dddddd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#eeeeee), to(#dddddd));background-image:-moz-linear-gradient(top, #eeeeee, #dddddd);background-image:-ms-linear-gradient(top, #eeeeee, #dddddd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #eeeeee), color-stop(100%, #dddddd));background-image:-webkit-linear-gradient(top, #eeeeee, #dddddd);background-image:-o-linear-gradient(top, #eeeeee, #dddddd);background-image:linear-gradient(top, #eeeeee, #dddddd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#eeeeee', endColorstr='#dddddd', GradientType=0);color:#404040;text-decoration:none;-webkit-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 0 rgba(0, 0, 0, 0.025),inset 0 -1px rgba(0, 0, 0, 0.025);} +.open .menu,.dropdown.open .menu,.open .dropdown-toggle,.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} +.open .menu-dropdown,.dropdown.open .menu-dropdown,.open .dropdown-menu,.dropdown.open .dropdown-menu{display:block;} +.tabs,.pills{margin:0 0 18px;padding:0;list-style:none;zoom:1;}.tabs:before,.pills:before,.tabs:after,.pills:after{display:table;content:"";zoom:1;} +.tabs:after,.pills:after{clear:both;} +.tabs>li,.pills>li{float:left;}.tabs>li>a,.pills>li>a{display:block;} +.tabs{border-color:#ddd;border-style:solid;border-width:0 0 1px;}.tabs>li{position:relative;margin-bottom:-1px;}.tabs>li>a{padding:0 15px;margin-right:2px;line-height:34px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.tabs>li>a:hover{text-decoration:none;background-color:#eee;border-color:#eee #eee #ddd;} +.tabs .active>a,.tabs .active>a:hover{color:#808080;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} +.tabs .menu-dropdown,.tabs .dropdown-menu{top:35px;border-width:1px;-webkit-border-radius:0 6px 6px 6px;-moz-border-radius:0 6px 6px 6px;border-radius:0 6px 6px 6px;} +.tabs a.menu:after,.tabs .dropdown-toggle:after{border-top-color:#999;margin-top:15px;margin-left:5px;} +.tabs li.open.menu .menu,.tabs .open.dropdown .dropdown-toggle{border-color:#999;} +.tabs li.open a.menu:after,.tabs .dropdown.open .dropdown-toggle:after{border-top-color:#555;} +.pills a{margin:5px 3px 5px 0;padding:0 15px;line-height:30px;text-shadow:0 1px 1px #ffffff;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;}.pills a:hover{color:#ffffff;text-decoration:none;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#00438a;} +.pills .active a{color:#ffffff;text-shadow:0 1px 1px rgba(0, 0, 0, 0.25);background-color:#0069d6;} +.pills-vertical>li{float:none;} +.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} +.tab-content>.active,.pill-content>.active{display:block;} +.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#f5f5f5;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ffffff), to(#f5f5f5));background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ffffff), color-stop(100%, #f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} +.breadcrumb .divider{padding:0 5px;color:#bfbfbf;} +.breadcrumb .active a{color:#404040;} +.hero-unit{background-color:#f5f5f5;margin-bottom:30px;padding:60px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} +.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} +footer{margin-top:17px;padding-top:17px;border-top:1px solid #eee;} +.page-header{margin-bottom:17px;border-bottom:1px solid #ddd;-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);box-shadow:0 1px 0 rgba(255, 255, 255, 0.5);}.page-header h1{margin-bottom:8px;} +.btn.danger,.alert-message.danger,.btn.danger:hover,.alert-message.danger:hover,.btn.error,.alert-message.error,.btn.error:hover,.alert-message.error:hover,.btn.success,.alert-message.success,.btn.success:hover,.alert-message.success:hover,.btn.info,.alert-message.info,.btn.info:hover,.alert-message.info:hover{color:#ffffff;} +.btn .close,.alert-message .close{font-family:Arial,sans-serif;line-height:18px;} +.btn.danger,.alert-message.danger,.btn.error,.alert-message.error{background-color:#c43c35;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#ee5f5b), to(#c43c35));background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #ee5f5b), color-stop(100%, #c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#c43c35 #c43c35 #882a25;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn.success,.alert-message.success{background-color:#57a957;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#62c462), to(#57a957));background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #62c462), color-stop(100%, #57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#57a957 #57a957 #3d773d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn.info,.alert-message.info{background-color:#339bb9;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#5bc0de), to(#339bb9));background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #5bc0de), color-stop(100%, #339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#339bb9 #339bb9 #22697d;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn{cursor:pointer;display:inline-block;background-color:#e6e6e6;background-repeat:no-repeat;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);padding:5px 14px 6px;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);color:#333;font-size:13px;line-height:normal;border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-webkit-transform-style:preserve-3d;-webkit-transition:0.1s linear all;-moz-transition:0.1s linear all;-ms-transition:0.1s linear all;-o-transition:0.1s linear all;transition:0.1s linear all;}.btn:hover{background-position:0 -15px;color:#333;text-decoration:none;} +.btn:focus{outline:1px dotted #666;} +.btn.primary{color:#ffffff;background-color:#0064cd;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd));background-image:-moz-linear-gradient(top, #049cdb, #0064cd);background-image:-ms-linear-gradient(top, #049cdb, #0064cd);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd));background-image:-webkit-linear-gradient(top, #049cdb, #0064cd);background-image:-o-linear-gradient(top, #049cdb, #0064cd);background-image:linear-gradient(top, #049cdb, #0064cd);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#0064cd #0064cd #003f81;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);} +.btn.active,.btn :active{-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.25),0 1px 2px rgba(0, 0, 0, 0.05);} +.btn.disabled{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn[disabled]{cursor:default;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=65);-khtml-opacity:0.65;-moz-opacity:0.65;opacity:0.65;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} +.btn.large{font-size:15px;line-height:normal;padding:9px 14px 9px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;} +.btn.small{padding:7px 9px 7px;font-size:11px;} +:root .alert-message,:root .btn{border-radius:0 \0;} +button.btn::-moz-focus-inner,input[type=submit].btn::-moz-focus-inner{padding:0;border:0;} +.close{float:right;color:#000000;font-size:20px;font-weight:bold;line-height:13.5px;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=25);-khtml-opacity:0.25;-moz-opacity:0.25;opacity:0.25;}.close:hover{color:#000000;text-decoration:none;filter:alpha(opacity=40);-khtml-opacity:0.4;-moz-opacity:0.4;opacity:0.4;} +.alert-message{position:relative;padding:7px 15px;margin-bottom:18px;color:#404040;background-color:#eedc94;background-repeat:repeat-x;background-image:-khtml-gradient(linear, left top, left bottom, from(#fceec1), to(#eedc94));background-image:-moz-linear-gradient(top, #fceec1, #eedc94);background-image:-ms-linear-gradient(top, #fceec1, #eedc94);background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fceec1), color-stop(100%, #eedc94));background-image:-webkit-linear-gradient(top, #fceec1, #eedc94);background-image:-o-linear-gradient(top, #fceec1, #eedc94);background-image:linear-gradient(top, #fceec1, #eedc94);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fceec1', endColorstr='#eedc94', GradientType=0);text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);border-color:#eedc94 #eedc94 #e4c652;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);border-width:1px;border-style:solid;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.25);}.alert-message .close{margin-top:1px;*margin-top:0;} +.alert-message a{font-weight:bold;color:#404040;} +.alert-message.danger p a,.alert-message.error p a,.alert-message.success p a,.alert-message.info p a{color:#ffffff;} +.alert-message h5{line-height:18px;} +.alert-message p{margin-bottom:0;} +.alert-message div{margin-top:5px;margin-bottom:2px;line-height:28px;} +.alert-message .btn{-webkit-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);-moz-box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);box-shadow:0 1px 0 rgba(255, 255, 255, 0.25);} +.alert-message.block-message{background-image:none;background-color:#fdf5d9;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);padding:14px;border-color:#fceec1;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;}.alert-message.block-message ul,.alert-message.block-message p{margin-right:30px;} +.alert-message.block-message ul{margin-bottom:0;} +.alert-message.block-message li{color:#404040;} +.alert-message.block-message .alert-actions{margin-top:5px;} +.alert-message.block-message.error,.alert-message.block-message.success,.alert-message.block-message.info{color:#404040;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} +.alert-message.block-message.error{background-color:#fddfde;border-color:#fbc7c6;} +.alert-message.block-message.success{background-color:#d1eed1;border-color:#bfe7bf;} +.alert-message.block-message.info{background-color:#ddf4fb;border-color:#c6edf9;} +.alert-message.block-message.danger p a,.alert-message.block-message.error p a,.alert-message.block-message.success p a,.alert-message.block-message.info p a{color:#404040;} +.pagination{height:36px;margin:18px 0;}.pagination ul{float:left;margin:0;border:1px solid #ddd;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} +.pagination li{display:inline;} +.pagination a{float:left;padding:0 14px;line-height:34px;border-right:1px solid;border-right-color:#ddd;border-right-color:rgba(0, 0, 0, 0.15);*border-right-color:#ddd;text-decoration:none;} +.pagination a:hover,.pagination .active a{background-color:#c7eefe;} +.pagination .disabled a,.pagination .disabled a:hover{background-color:transparent;color:#bfbfbf;} +.pagination .next a{border:0;} +.well{background-color:#f5f5f5;margin-bottom:20px;padding:19px;min-height:20px;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} +.modal-backdrop{background-color:#000000;position:fixed;top:0;left:0;right:0;bottom:0;z-index:10000;}.modal-backdrop.fade{opacity:0;} +.modal-backdrop,.modal-backdrop.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} +.modal{position:fixed;top:50%;left:50%;z-index:11000;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal .close{margin-top:7px;} +.modal.fade{-webkit-transform-style:preserve-3d;-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} +.modal.fade.in{top:50%;} +.modal-header{border-bottom:1px solid #eee;padding:5px 15px;} +.modal-body{padding:15px;} +.modal-body form{margin-bottom:0;} +.modal-footer{background-color:#f5f5f5;padding:14px 15px 15px;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;zoom:1;margin-bottom:0;}.modal-footer:before,.modal-footer:after{display:table;content:"";zoom:1;} +.modal-footer:after{clear:both;} +.modal-footer .btn{float:right;margin-left:5px;} +.modal .popover,.modal .twipsy{z-index:12000;} +.twipsy{display:block;position:absolute;visibility:visible;padding:5px;font-size:11px;z-index:1000;filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;}.twipsy.fade.in{filter:alpha(opacity=80);-khtml-opacity:0.8;-moz-opacity:0.8;opacity:0.8;} +.twipsy.above .twipsy-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.twipsy.left .twipsy-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.twipsy.below .twipsy-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.twipsy.right .twipsy-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.twipsy-inner{padding:3px 8px;background-color:#000000;color:white;text-align:center;max-width:200px;text-decoration:none;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} +.twipsy-arrow{position:absolute;width:0;height:0;} +.popover{position:absolute;top:0;left:0;z-index:1000;padding:5px;display:none;}.popover.above .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} +.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} +.popover.below .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} +.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} +.popover .arrow{position:absolute;width:0;height:0;} +.popover .inner{background:#000000;background:rgba(0, 0, 0, 0.8);padding:3px;overflow:hidden;width:280px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} +.popover .title{background-color:#f5f5f5;padding:9px 15px;line-height:1;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;border-bottom:1px solid #eee;} +.popover .content{background-color:#ffffff;padding:14px;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover .content p,.popover .content ul,.popover .content ol{margin-bottom:0;} +.fade{-webkit-transform-style:preserve-3d;-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} +.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;white-space:nowrap;background-color:#bfbfbf;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;}.label.important{background-color:#c43c35;} +.label.warning{background-color:#f89406;} +.label.success{background-color:#46a546;} +.label.notice{background-color:#62cffc;} +.media-grid{margin-left:-20px;margin-bottom:0;zoom:1;}.media-grid:before,.media-grid:after{display:table;content:"";zoom:1;} +.media-grid:after{clear:both;} +.media-grid li{display:inline;} +.media-grid a{float:left;padding:4px;margin:0 0 18px 20px;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);}.media-grid a img{display:block;} +.media-grid a:hover{border-color:#0069d6;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} diff --git a/assets/css/docs.css b/assets/css/docs.css new file mode 100644 index 0000000..fb727a9 --- /dev/null +++ b/assets/css/docs.css @@ -0,0 +1,317 @@ +/* Add additional stylesheets below +-------------------------------------------------- */ +/* + Bootstrap's documentation styles + Special styles for presenting Bootstrap's documentation and examples +*/ + +/* Body and structure +-------------------------------------------------- */ +body { + background-color: #fff; + position: relative; +} +section { + padding-top: 60px; +} +section > .row { + margin-bottom: 10px; +} + + +/* Jumbotrons +-------------------------------------------------- */ +.jumbotron { + min-width: 940px; + padding-top: 40px; +} +.jumbotron .inner { + background: transparent url(../img/grid-18px.png) top center; + padding: 45px 0; + -webkit-box-shadow: inset 0 10px 30px rgba(0,0,0,.3); + -moz-box-shadow: inset 0 10px 30px rgba(0,0,0,.3); +/* box-shadow: inset 0 10px 30px rgba(0,0,0,.3); +*/} +.jumbotron h1, +.jumbotron p { + margin-bottom: 9px; + color: #fff; + text-align: center; + text-shadow: 0 1px 1px rgba(0,0,0,.3); +} +.jumbotron h1 { + font-size: 54px; + line-height: 1; + text-shadow: 0 1px 2px rgba(0,0,0,.5); +} +.jumbotron p { + font-weight: 300; +} +.jumbotron .lead { + font-size: 20px; + line-height: 27px; +} +.jumbotron p a { + color: #fff; + font-weight: bold; +} + +/* Specific jumbotrons +------------------------- */ +/* main docs page */ +.masthead { + background-color: #049cd9; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, left top, left bottom, from(#004D9F), to(#049cd9)); + background-image: -webkit-linear-gradient(#004D9F, #049cd9); + background-image: -moz-linear-gradient(#004D9F, #049cd9); + background-image: -o-linear-gradient(top, #004D9F, #049cd9); + background-image: -khtml-gradient(linear, left top, left bottom, from(#004D9F), to(#049cd9)); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#004D9F', endColorstr='#049cd9', GradientType=0); /* IE8 and down */ +} +/* supporting docs pages */ +.subhead { + background-color: #767d80; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, left top, left bottom, from(#565d60), to(#767d80)); + background-image: -webkit-linear-gradient(#565d60, #767d80); + background-image: -moz-linear-gradient(#565d60, #767d80); + background-image: -o-linear-gradient(top, #565d60, #767d80); + background-image: -khtml-gradient(linear, left top, left bottom, from(#565d60), to(#767d80)); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#565d60', endColorstr='#767d80', GradientType=0); /* IE8 and down */ +} +.subhead .inner { + padding: 36px 0 27px; +} +.subhead h1, +.subhead p { + text-align: left; +} +.subhead h1 { + font-size: 40px; +} +.subhead p a { + font-weight: normal; +} + + +/* Footer +-------------------------------------------------- */ +.footer { + background-color: #eee; + min-width: 940px; + padding: 30px 0; + text-shadow: 0 1px 0 #fff; + border-top: 1px solid #e5e5e5; + -webkit-box-shadow: inset 0 5px 15px rgba(0,0,0,.025); + -moz-box-shadow: inset 0 5px 15px rgba(0,0,0,.025); +/* box-shadow: inset 0 5px 15px rgba(0,0,0,.025); +*/} +.footer p { + color: #555; +} + + +/* Quickstart section for getting le code +-------------------------------------------------- */ +.quickstart { + background-color: #f5f5f5; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#f9f9f9), to(#f5f5f5)); + background-image: -moz-linear-gradient(#f9f9f9, #f5f5f5); + background-image: -ms-linear-gradient(#f9f9f9, #f5f5f5); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #f9f9f9), color-stop(100%, #f5f5f5)); + background-image: -webkit-linear-gradient(#f9f9f9, #f5f5f5); + background-image: -o-linear-gradient(#f9f9f9, #f5f5f5); + -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#f5f5f5', GradientType=0)"; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#f5f5f5', GradientType=0); + background-image: linear-gradient(#f9f9f9, #f5f5f5); + border-top: 1px solid #fff; + border-bottom: 1px solid #eee; +} +.quickstart .container { + margin-bottom: 0; +} +.quickstart .row { + margin: 0 -20px; + -webkit-box-shadow: 1px 0 0 #f9f9f9; + -moz-box-shadow: 1px 0 0 #f9f9f9; + box-shadow: 1px 0 0 #f9f9f9; +} +.quickstart [class*="span"] { + width: 285px; + height: 117px; + margin-left: 0; + padding: 17px 20px 26px; + border-left: 1px solid #eee; + -webkit-box-shadow: inset 1px 0 0 #f9f9f9; + -moz-box-shadow: inset 1px 0 0 #f9f9f9; + box-shadow: inset 1px 0 0 #f9f9f9; +} +.quickstart [class*="span"]:last-child { + border-right: 1px solid #eee; + width: 286px; +} +.quickstart h6, +.quickstart p { + line-height: 18px; + text-align: center; + margin-bottom: 9px; + color: #333; +} +.quickstart .current-version, +.quickstart .current-version a { + color: #999; +} +.quickstart h6 { + color: #999; +} +.quickstart textarea { + display: block; + width: 275px; + height: auto; + margin: 0 0 9px; + line-height: 21px; + white-space: nowrap; + overflow: hidden; +} + + +/* Special grid styles +-------------------------------------------------- */ +.show-grid { + margin-top: 10px; + margin-bottom: 10px; +} +.show-grid [class*="span"] { + background: #eee; + text-align: center; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + min-height: 30px; + line-height: 30px; +} +.show-grid:hover [class*="span"] { + background: #ddd; +} +.show-grid .show-grid { + margin-top: 0; + margin-bottom: 0; +} +.show-grid .show-grid [class*="span"] { + background-color: #ccc; +} + + +/* Render mini layout previews +-------------------------------------------------- */ +.mini-layout { + border: 1px solid #ddd; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.075); + -moz-box-shadow: 0 1px 2px rgba(0,0,0,.075); + box-shadow: 0 1px 2px rgba(0,0,0,.075); +} +.mini-layout { + height: 240px; + margin-bottom: 20px; + padding: 9px; +} +.mini-layout div { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} +.mini-layout .mini-layout-body { + background-color: #dceaf4; + margin: 0 auto; + width: 240px; + height: 240px; +} +.mini-layout.fluid .mini-layout-sidebar, +.mini-layout.fluid .mini-layout-header, +.mini-layout.fluid .mini-layout-body { + float: left; +} +.mini-layout.fluid .mini-layout-sidebar { + background-color: #bbd8e9; + width: 90px; + height: 240px; +} +.mini-layout.fluid .mini-layout-body { + width: 300px; + margin-left: 10px; +} + + +/* Topbar special styles +-------------------------------------------------- */ +.topbar-wrapper { + position: relative; + height: 40px; + margin: 5px 0 15px; +} +.topbar-wrapper .topbar { + position: absolute; + margin: 0 -20px; +} +.topbar-wrapper .topbar .topbar-inner { + padding-left: 20px; + padding-right: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} + +/* Topbar in js docs +------------------------- */ +#bootstrap-js .topbar-wrapper { + z-index: 1; +} +#bootstrap-js .topbar-wrapper .topbar { + position: absolute; + margin: 0 -20px; +} +#bootstrap-js .topbar-wrapper .topbar .topbar-inner { + padding-left: 20px; + padding-right: 20px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; +} +#bootstrap-js .topbar-wrapper .container { + width: auto; +} + + +/* Popover docs +-------------------------------------------------- */ +.popover-well { + min-height: 160px; +} +.popover-well .popover { + display: block; +} +.popover-well .popover-wrapper { + width: 50%; + height: 160px; + float: left; + margin-left: 55px; + position: relative; +} +.popover-well .popover-menu-wrapper { + height: 80px; +} +img.large-bird { + margin: 5px 0 0 310px; + opacity: .1; +} + +/* Pretty Print +-------------------------------------------------- */ +pre.prettyprint { + overflow: hidden; +} \ No newline at end of file diff --git a/assets/ico/bootstrap-apple-114x114.png b/assets/ico/bootstrap-apple-114x114.png new file mode 100644 index 0000000000000000000000000000000000000000..c434d9713d4e240356cac05b880c36c8319209dc GIT binary patch literal 6828 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 V=ICE2+W1^7d;{|3cK*;oJo literal 0 HcmV?d00001 diff --git a/assets/ico/bootstrap-apple-72x72.png b/assets/ico/bootstrap-apple-72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..c4bfb622cfcc162cd541cc564537e6ee71a4c191 GIT binary patch literal 4905 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 j8C^DPf93|)WN)qZOU)>1g4uAbR=0TbrLNM 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 Y^Q^Ub`tV@r&%YdQ`#ey!h(l@r1Ll6X%K!iX literal 0 HcmV?d00001 diff --git a/assets/img/browsers.png b/assets/img/browsers.png new file mode 100644 index 0000000000000000000000000000000000000000..369a7f838fbc8bb95f38ee576f9409276aea488f GIT binary patch literal 21805 zcmbTdWmFtdw3kGE#l zn)*?7_O9)+>eM+^kt#~kD2RlJ5D*Y3vN95C5D<{~|Hd5fu>a1gX|!(tE(BmnZLqqd zCD_Bn#R5Xq+|ks6T-M&i%0kV;#N5ky%t8PH0@~W1_S|FL2Rr*Ze|dWkCU4Z2qOPq2jxF)F6NeeY7$ca zOV>Y0kkT3qcH(1Y_3-du@nC0hbg^Ou@$&Mr0@+yE*qHxOFuQs=fK5D^9bBpYM}mZf ztC@?96WGSlf&4!bO-vo#z=D+jEd6g6?41-9|F>WV*Z&o$e<5S_G;v}Du>e`^?f>J~ ze^I-F)hzyRGyad%u3x>JELhbnTpit9%>L!WlInk$|HbbAUD1CC|5?MQ>|*mTDJFIj zj%IH577k!p2|>z#cUa7A%=x5vxTQcKZVn(f8<2|!1mfWaN%3-Var1KU072~BV*exK z|HKOdadLC=a*9iEiE@HKl0Z=&4lYR^5VttH1P@4(jrV_eWgT3>CJts6|D)IDpWgq) zEB61&%O~z)VFGq^`ReFs_dgY&V(kcabhUPLA{STZWC4*YnwZ%*{0H-&1pT+a5*98t z?iS`!E{^u({}o|AoBx9aQeyvKp8q$m`Tw7&vHmlL^*`nD|0tLLLH(=2{|x_k@&5z< zcl%g4{OcK)f6Z~bgMI$5J@sTIM8A5jpLf9p>T9eCeQdIIIb1P!StTckkQb9<>XL&o zzLOW;B2fM*yA>CGs-ueVf5DOvk@$jvmB5l9MxM}q>ekrRl940S^1kDGnX|P{ulLLIXs>bT^wLSU%updA@??cw}vQ*1p$F)&iuWhI9YBn}4cB{wp>=O+F>-1TwDPJmep5WS1VFWf9;9&3$UZ7uCo$&l0_5QYy(@2kQ5_^VF!kvMc$gl>C#iKg8Rx@ zUnNYu&2@jHmHDwmyDyF=2;L8ZhWp`j)%Cd7(9qxuMQ}WTCj2IByHeA2dNV>6|Ly}h z!7NWsm=~K=zpX8=3_aH3mS0#=&>ZrE^_p zm2n$S?QBa0`03$CJz#_PWX&F-t3HjO(>*tumfEu$vmM5o3i-4d8M@FH{Lq)sNkU*) z2KABM4w@P&Z1E}jW>ev5hyHvJK$r=%e5+41azX;z^A@V+_v8^`S@oFUL5Z(Wq~lq9 z*qz`)%nCbjCuG6(k>x|?*MRJrI|e1?m){m3j;_n_usfh6CrFfzX_BUdRxZIX#HjpF zt=L~&!40(~Qm2)2Dej`m^j-*2SxkSq>8=I@!f${o>5Cro!uv~zgD z%-M|a z?%KHQxauAtdvvS$$ZNa(eJW|ue|wzOa4@U(CxUgrjK8I@5|*>c)oK2XAxZqXPL(^Q z^$WJjju(EztOPDIqaDZ^|F0pev9+#f$+6JOagISO5cO(!iPr1-A=m#cFTA;+g#MP& z?P=z!{dZbG&%V+G(+3ii!fujLOof2oi)6F0Q~j$q)-B(m!z^A0bg9N<5 zISk!af*J`JEc*3@cag9#IcS1`FSkUsOD=aC*zZ_y`LhNP2^J2Tbb-n^8(hyF5kd`| z%k#hWe}Xm=4Ipz<*+J(ga4yD_xd)pj^wKV_O?U8U>qi-zV4Qn}0%cs_#eWX(u7?FL|3(cvej z$ENPv4Qd{*%%LV#=)N~MH>=3YPXLlM1HA5+w6waPen$(Ejof#;8;*6UPZJAw{9Sgl zx<<`$xob*r>Ns(ZsjVOlDa_2Es~zi`^eU<2{o?88pg>>OC;o0)^pT*w(?_hmJbCn9 zwji8IAyRPsW5{|P2P&g0hv#kB+xMzaK!J#H@6T0d$i1VRy8w@Kz{Vu6K_0`0n!$Sy zX78f!eunaa6457)hfUve9ly;<#&E5+^+=10f7B_jsNgm*hSp1qnoQlFl?a{dt*SxWnm#F}JFcYQD=q||F3e~8$9`qH(x?cA~$ zdD8SXw!`KW>LR+ZFT}=5Ph4&{>TkZRi3he6%KS(H-@1~Eo|)AR+!rf|34@(C%hOZ&w2zf^ zkeQI4j*d=0WHM>JHZpXv)$0j9ayW)E^-05N`za}K_vXd-dJg0Ib+0(@_0*N${oEQL zbvOHRe@5ne*>>!$yvX@kDw585Kl#T>sm)3MLwV)fe)rAMqCEWHt1$6#R%R9n*+c3l zsL=9E?ZBj)=LA_IjeEP1$>o*Zcn->&$gG0cJfz6`5DIf*L}L9`19GJt098WaO30uw zpP3CZHP~)vBiygHCpNrRZnv11tFsHq^Ura39n;^HZRb06q^cf&>nmX*EU)(4UL;{)kG3_K~@UIZbaOAmAJktp$qZP%7;w|4d z#KDI`dxNt=k{plbEuXQ>0Aw~!BMMm8XpW+$BMHcuj{%==s)qHLnVR-sk3_av1(m)! zYD^i>FZ=DlsjKd3p5Cpbh0mww*gcHt4ZLr`OBLErsAVy>rFme0T-h}7Ev*i&r8aw- zCPah2mEBH*#LLuvfhu%*%drx3?HJle-|-#GR~kS#yo&h|4z?n_IS7x7>)CaAcXYHE z`M!|I)R4mrNC-_D+cUx+Z#WKCho#zcd-Zv#eHpwQUXI7o&-H&fol(f*y10zQqSb74 zr~d8C!Od;<83fH!7a+X8z9FgxA60nWY>xV%gBK(R#Fub(2Fc0GiLfCK{hbW7IV)v; z{r42|dVLq}`K&GSo7!?-!@n zI~9&@;>OM`9>3RGmF*9K>=y{{>2A0&qz@u@ol;S25w`jv7(8I4xk$kWr2u4Od{-m~ z>iuvc;1|J(VtxlzXxAC{UIq~n&^|TB&j9OY_kzgD`6)ipc>?gBZ$4xz{A2|=xtLe; ztow03_V{N|yMb(fP_T8xjq%pku>2B%<7puQb1ETuYIDUDo~^mE?03*d?XHLma@yl2 z&wO7x8hcz=lGM+tSF8J$fZxlHP?M`eFukclE7(|Lr!3*EhEAx484}T?(2aGg1&$GsSjl!0Gq_T^tSaFaF zF(h~y1$y~?b9*lS{k!MMZ#!9i(s|++A2c2m0U#2;7rvqQo{wz=e#Sd&Nc#hSs#9fH zmn~*^m(pmzn;^$<0nFTFC;D3xo+=!$mH{JUY_fMBKH=z&%-%RXlQ5zRvr3X z?{F+pz0acqbwu^S0ZgC&F>Tmyciza($WD7g16PI=^Ofj_IHkXT)1%72Ln`VJz!4_t zkgu8Bt+$>AeEvPi>y~6=5Yk=wFpJ;K5L#&d_{%M-h$fr6!#zn^K8KYRQ=q!^;YX}N?L=r*xemb4_J+QTWO zCWF55Ywqe#hiQZqCz#XCOvfL7+n7{S@Q&f~^IQ}=o_Vk!sN(64`!md9-u=Kx-%ENd zl=W?91OfOlL58fJ3|79?shkT{}1j2<)T*lb5~AVyDz4~a{1 zVoObeaO7m{O~AKOZlClqWDn|OMP%#qzt10iCocv$udLe3rO4TIPS5Kr-I~tRyvJ`h zi|Wb-yY3y%t=*)yE7b$3Q(0aOn|0Q4#uWR9 zsk9aE^7ge=wod`XG4jTICMb@>}TYm4TL3#Sjp@FOv|aeGH-uLS_C zNBY<_3d3@~mjAJ7nH@(qd?gmHCV5;HQx=CyCX-#A#?Q{Xtp5MzsAp8lr*;m;Yx7kx& zAcf<(vQ2`4V>SfEYbdL4fy?vlVHLc-Wqr`w!-nJjl9tgSlll0MF%BCBAi8Q@twG6I zeGz#rdUDmv>sV72uEp%`h?&?LpD{@` zY%!*Smpey6SkV9NX#$m0z;lzFY6D$`N-DorIw(L6l^Dmroa6b+{2@jt?@2k9oqM?r zKjynCehq|g5dQX58~j+k9XfsKUFv0*l%LHpY;Zb(8}h`h3_F~VPy8jCdJ8>N`d6{z zZm#$dNa<4^-;dAk(3F-_p1V!N;tk|tLLy+%xX4DpRR6GWcU%b);NAKa%XN9O(|ZD8 ziiA*Ig9g{I+p{Tw9aA3=z2V&Q9zE*DpYV`3StRPxnM)Sa2mG8cJI%V*{(}T4mz73t z`WeCEv0s;W%3i2gcq0cpd{#A;Ct$+K5&(o|i$2A7BP(=2OT$HK^8&O||6b-imFBTP zfccF9c3*6?eSe;V=DQT~^?Y@-WvHqiM%{s-fHpp#TSgw(?^5ruK4q{uWOS280q%6} zEiwu}dfQ26{smYuOa@hDJTr$;yX+vKnabg61f7O}Bq;W&4lv;E$kbDdYIIng>^oIv6BgmhwQx6K$_Eysp1#v)3N%G53Z4<-(y;*F@=f`hwfe2=1C z0mTgm>PW#E#2Z!#1`LeEYZ z4lgy5pDyJ$e;f>>CJ)Y@%wi#u{N<+S!<=OLGyBBO ze`0!K3!||+hSy+>dB@uG_x6g^k^k*ktk^tG`4N`~LvS+|93ae5 zl?R5xNhPgeWO}o^zWy~JDMHzixY3DPCg?5rjY}Y8JcqTg^YRNmoCi4{`Vs0Db!@?R zw_ZwL-7@DCwJ(2fGvZb+X#I2LuS0bVmZ2Q~88ARVhuj*e3_Ya1=1JhSq( zM@D!XM3{3QTkE$URdUSK6%@LW!DKqEf5ey}{Lj;6YaGf`EPXwAyESFXew9IkD{o%J2$)u zj>;s4MEGHuUFm(0$g%VNg>hs(RsJ&fb?mE$w9bzj#puDd_`nRL9J&~m@zUA7H5d+r z)l95Rx^vhn4tm5tMtujuoltWQsDVN}H%QNNi<=KfP?T_A0b0Dtpmz}cl)$Jax#(2v zceOXCqvM1_#z7;^$NgXQ<~N<;yG(cFx~v5NVT5{tP^V3Uj^m(4`O?i>ml5j_`Rl@0 zm%DGYLQJcZCQKM_2Bxnh-R7^PXrk=lHTkHRuDqjuER#DfD(NAtkMB_4dFvSqU1t^9 zUprCVxfRQK+PgkvRr4Gx3=@nP*X?lGfuf-xyvu0gTDPDb<-|*x3Fw7WUYjay47pXJ zyJM0Xq9rMY@g{v-P)N>Ai@Df*MvOsv6gl>#srYXCjIyHc2G$?LK>{S`WU4oT(uL)} z%FeE^H!El^y#%m3S4Zbi^`o8e@PjJk%$8!! z1NZ@lr>h%hq5H;omNS`=*gD@0O@Z_c5YJxE&5`W1Z-K@08(=g_>5bG&BP7Fk)sH2x z5flT6NwC@#j@T@z-I#r?)cVwQ4LrQSw7W7UU}5JwdwBOI9oybq=uX-RtznILdYy#5 zsI5l*iX0SWnx4@aWqIwBsDN~`x)%76>h4Lqm~Z`u=cnH*M86+YyyjRR$H68s8xIsp z4Uk$|KswIBBtyRl6^O+mv=2#-|JOB&wVX%Ce**?@hXX3T0zC!29ydvH4A3r&+F5K6 z=A-9;stA9-^|H%JD@YHI^*Q(F+A-(7(QU$PDD)9&D0E4G-AW|%3*XPYFG%Lv>tQl8 z7xlhOe(&M2y|;5_tZA%OfQ#<*vd>1lrWig)q`TmIqNic$O~W+BH+vHK|;jT>f;u2bwtg=YQMfkQ=_E66R!CegTDO zPo{T;$gH725fEsS)~~5t+R$FN`F;^#tdXQli0;~Q2D{To6l42i2o=U3_Q`$KR0{6- ztxv7zkJ9xx0>(PGEYIqdILI~2@ux zX~m!YIUnrydwud@w^9(74j|;`zewk@fWoXiESR45q?N~|q#sS?iK+f;W~B~8sTWz9 z$h%^%Ig+KzBZtL5s|n|Ie0P%PO%I4=9iD!lqJs|uc}&~=)ai)xP?5Jq0w`zxo8;!b z9dLrfj7aVE^u3q9h^Y~kN#O_DmO4`y@A-oXVKS9cQ>u3oP%hK)2&(417^pif_Avy! zc!O!D4hrn)35JJdzBD`B<^w84u2&KA6@+7k-%J)$PK)K#WGNGZ7F)kYu(n;Sx5c6vyngJw-)iC36#9EV|D<)Vj!8+$ zp6dN>Reh#;@WbB{Vj2=~22bmXhv#>gF=QazVGcG=s;n_iig*=l$Uu^6K!k-rHrD?9 z6V~?gmfwK);;hy7M)6PxoMZdQqI|->*#5zZ(mMZB41`6*uwx$0)MX!$PvX|;?z23z~n2U47xtw+^eu^3NX5qt1 z>eqqO(Z1!h=nL08PbQjL1TMC@1d#JnQV(E)t3j*8^rP;nG*wR5W1cq%<}A5F26beO zN_jjWVOG{FSIh#J_q_pQ+h~A7x(M4yXbUQ}ilHEGQVsxjERs4Sh?;Xr0Opd^^ov^m z-;NtI*Tk&jqquEsn+0<=xjZeeT$yxyF~eic7=r*>LKn-vYn<6*?3iknfoZN3_I8_v zvU*NMW7`al_Pm8M#ZT7uyzQbma@n{l&dk3I^(ZN8#)b5m-{#G?Mh|FCb_1|wjzbv@OO;zLX#S6y3+N?MBa!VAa5&%#TdCJe*uSI>;vB@H zNrB^<247ON^*wh?sMq=714*nMqMh?H=cRk8zEivk44x#R|KLg5`gUX8m^M!1T4NRo zW|Qp$xlnc6cOY;%9tuO?aR(uR(n_=7^^@csI;?f~rIC|qjk>(oB`ZoFJWM1N+Q^2- zpE23O)4#BRKh4Fv-Txk_{t^3wzA)1t2uQi3P|7YY4=@PoPo77#iquFf=2nI32K(p6B3=U1NG^3aexvTE^aCsoZ3PqR?GCcGSd z;p#%3_(h8|*191BjZ($TKFtVvL_=%ussrwNB-Y?0s*>1qb)EP@N0HO0@sSU9;c1{$ zsk6QX&E+&U0kInr4l;U56oSeMf@T6TnFR1v@?S#VLs(5G>$h8Z8;_WfU_(-J1`Wla zq2Xbm%IR1S?FKJdgBRqXmniN=;ay!ytEq96wkzLaI$Zmg$@Ctj99}RHwT9?=3M&v`Z{}j zDf3PEh$dnfN8YpSude_>5e_^$HsK(OjAulS)x?{gRg#2J%CT(->S}1+cOvck6$746 z+Gh;%S9ycFkwWB<w6;nlbMF>!cw)cCAdo!x@ z8t3)FNU5Wb4(mNs^9|V5qr3dmeo+)G&o%1#K&D?HvA_H@87RMOJAr^afnj&oss&Ty z#m2)Bt5Eh0BfhSQE_x>Iq+U700R_KJRp2T{ML z|4QH?%(Bi`YB9(Dz9W^|FB+0;;&YQ@GPgr@-un{uR~t{L zjh#El+w~KOg?Ktie~pN>-m851^+g_de^B8B`~GjiQNq*)iU4Qt1D?-=xK~7;UzQ>i zHAPrjmmgSnMNavO_AfqT`3&d-22VG~w~5E8CatbAgt97d)?(uvyKbf+XGQhGc?FuJ zR`6nWN80;0R7eGj#LW?Qu)ILn;Vg|MvDNN82Mmj_+$KUrRm=@o z$G$kPVW3HGb)s_v#CI}8VesW&t*>`Yay?qeRIA)$8t*|6W*(yp>C(P*T|1c?!Y{N532 z$D)sZ+v6z&m6+Ft4@qq@?ObI@3vq{GidkIMn|n@^X0{>oQBW--A;JB=ztB^(3`C)( zI20fJzmGDMF~KGu*xXXbmcNHA=JKHJ%)jT09#EIEdzeyWlLAtbw70K`vNZ!(m(dPP z&wkAG@1b5_ne6^h010MMs{p9$I_B1i#6|r{U0hu}Z%OpbyPT7_oZF4M!U^YkYDsTY(zU%2Z3@rE;<#)L;)eAFtS_SqDIb9>{2P!{ z7F0F|A-HB>zH#P!Ks&JkNLfV|u_)C+#eIA+l=lH2cf8i5{){B|nDT_WZ6A)=$r&XG z$>-_iHIFa%4&~h5)BQWmB>B`VLq-gkZD*QsRLA@6oJMDgQm<5@o?30)lr`fq-OfZ9 zD+MR?5i!sVCcO#S_$w?Rrox=|{Qtd8YRCDPPa5g537JT8;%X^_pyN`|AA z4GZxDk*dlfKcIzAXE=`ShiB9>7(2KHipWZf2N1K5`)YgCp(#!oP^VEVjB`5O_T^F3 z9(vhPVLm>rvWl>f&hUS4;V&R3prMyV4tauxtA3~pbLN=3l?Bv)NxHbWAck;taRDsk zb>7dx1`7UM$e-6%!gy4VJX&JgAkRQ>W3pr9Js%|h@|R1>8aP-msGES#k0qreWErQr zrv*1h2tcuC_gse@pzVta1NjxLo)1oUv@L4#a&oQwIMs>%)E;F^l35V66F2nFX39kF zU=@Ar6+MqSs09Y*CPYBL!~8kKcr1rhsAz4~zwB?C4llrLt*Z-R_J>!?4lT6jv7W?- z!aMrwe|GWW5qIoc5!dW?I!g}OyaIDa;XC$osL{W9wTEJ?Y2<2GQOhcrVIWy_B;pZy zs}uLgsA%Pu?#H!N+xJPQZ`3y$;_PXVr$@ycIg`Qk89(Pn8z0>c-yy>sqCEG;k&wa! z#==09uS&%TSZF-g%WD=qpM3^SsY)TDxSlJibRaxay2@VlDf_TqS6zud{5^%aYHOHe z8K(2G)Xyu2Xk$?gil)+3j=QkL-CM)R0rBtPC@A;pFlVr2?55Boax);J9(&mE&7aky z+g;iwY4$+w6gRP`*22C?$AS=Zu{pL{)z?`R!LkbS?Yaco`aG6gY~EV;C#kTCf8_5` zrE~J7*KB8i`$0~yDU>dp5wLtfw%5O}-+2_N6$niKeQ(c*B%tqrp6`^gxU@7BD3vK> zGyW?c5m;H+LTFMNg2P@tnK0#Ms)<=?OzT7eyRd;H{@yG~T?ngB$p~XQ&;q9{J@WyT z-BSepE@bL-iEr9q46ukUwD^iFl>2oJAvRDuR;tYzLcV5k61`$t9;ObhUM^HNN%AKb zGi0-QNbY%vU>cwhv#1B5sBIwBy$^0~p)wA(m6~YUV@m~(wPX4QSYHB~wWvLHjU+ot zz9RqTY%)KhJex8#Y z9=YF{zK0;v#5;$1$(~&IHMyyd4@3!vZxSI(sA(M=Dx+a*uNKAE>6d_x`GtekMLJl1 z`EE8?Hg}dH!(-_OSo#Z)G|ehzt|1N| zi7Ii*=Yz#i&kq?H1k}9xcEtB;=SJqA{zd@>Z{|bhBtjgmWAwy=i=&a=D`rV8ndv-n ziAro8*}IS>LYE{)R==f%R^s#w=I?|7|MZ_M5D#x<=P3jB98tx0q#Ne^Avk!H;Kp_h zyx}wi?~tIPvfO+RJ2Eh7&JLUwe+=~I#Vr@{_GYehalLj23v?NyioL+zXEF{*`N-07!Mevc2gCE}n*))}Jk{<#f)M@!Hq7sh6o!C=KIj(u@{@_S zux<+1m`u(6PgxGgS_g}sBor6om>0-Z>j@_FLKLo#-}m}e3EdX?@xGd#^TXb@hJ+t{ znYmo*?d0al-LtJ0#AGwFG9WElZqF!BG4_u0_>tkmTi6(r$b#>$vpltg(oD?ix5zzt z`U}rWY=GtH`iDLI2q${bv0cb>7_1qC*koiyT_1L+%vWs>AFrU&{E@hp2dQ1Bah{IV z-s8fKxy1DNVL#TQyqMtuPVV1UjaCKCgHy@#%U5T^mDS%*v%%#TIY!a?~PsNplP zV?*=jC@@`IbvT=qh2*5lvz&aO%wfdOeL{s9Pa!GyOh+Y;H0DP zCX=GmD@0QSWc?K`Xxp=hs(&~|HRP)RB`wxHy366-tHj{qHyYMm#=$6e(2gNS>D#LFcoNbMTaAyZfk zCsFJto1iKc4lt|VsjgI+*)hdID5i3#n#lrl2AJk4Er<=*JWbN8T&G|pQ0NKMh2Wx1 zl4Mufr8j?2czG4O&01tWofa8tOi{}G`*5)<8~~j2Nn%xM%#H4A2tCE@2cd*)A^dt6 zZoBGN-wkuHLVcw!J!rkIXe*(1-t;uhLrW&+b7(Ub7%QhokLbJcfUz~XUfVo5#iVPY(zNt}(f|3nY1akVR z)ln$zs+FP@X7^GkuB;}wh+>#O#R7wLS!XbhmXO^R&;|;92tfk1SrBSS3%mwE4Wg>Y zfEs@CNtwJ0o1xk8*(D`>p(A)KAC9dB!Po&HB8!|1mxo9* zk$%QCe=8|LUV>{G??Y<~U2PD}S^I?si%*p^|H8%{(;;BYCm34bCKh}MkyKZ|+)FTq zUW&_e^Hu

1v{3Kv06q9#=y#$bQx7Fh+Hhp_H(ct+HF_yeiqt)zDCALcABfXETn< z0yiJE?ZIRqy+GiQmIaM0|I3WRTthLRk%DS7xBn?0DbLU_7OXoWewOL9o(-kX)`1*N zi_qL~buW>VSn-wl z;}mZkz{fFyb=L$FRFh>rT@&&wz(M+;Opzhyf8b6~0WL~iGz}BKrgKhm8Vr-bEuD^G zX}3bn>VphprfTF>NSLGM2DClwgKkDVsT+uA09N_XEUl42)2ZvuxqgheN0;Kxko773 za_7ogzXMvd_EMw}9F81J)aV#nB54kCRCy!r0FMK>Wce)f#*GLn^VDgwnBVHDsi}g* zs?iiX)Ndq^_2S~Y4m9T@@4#yTBxJ3T0K=oC6k{H1g#p%NBN79rF@^(kVpW-qQOiwl zcaqJYO=9L{aT6m|rD9AeVyX+$39lxRriP`bJ{VFJn|ymZoLR3?CQ|WIc1q+i3V#me zZB~zeJsQPRH(qd0dpg-r#Uu7I;9F?>|6p?3qb*Clf7UoxK{GKN@;z{HkfyVclCul8 zmYq?MpzL@db^ZG%yX%1WOZHcs;3Bk!3Zm6$pf1|@qsY#=7B>5@l`i6_P7``th zwK)t$wQiU}A@}g5au=2+Ts`C~%bGdcBS0pgWS#i{i#Q^@IG+V1-v4YnupnqxNAVvY z?Q?kNX|$=UBmCT038Q6X4c68V`$9viF!tCxM;N4@6vmeD>}O6Dl!9rYO5&YyHox~P zV{Lv?eg?p(SA-oqSV+dJzzpwL4$^0S`Kz1SRYeV6y%?S~6?oXX%*PVbhx8Ce@8!`( z1q(>n(ZhX-Gu%vlwAIgI5w&fPfdE7?=s`odq^FnSNl`u*o4sKx8wUy`DMKwXC2@QP1W6#s%2vza%{(Mke_5B$l zwCwJOA)6nVe#t+Q@NP(NsJuIG_X16g=a1cX_fBA>48N})qD+G$==BT2%p5u@ac!GQ zeHVf1o06+AO3=?eYRj~N;hWZ6(INP`Oz1WmWl#F z8s`G4sq}V@f?Q8-SmaWJ!AxH*jj85D4Dr0NTwSd8 z|JZo7zD{X+lCae(vFcPTilqve3fG-L7cFA&jjSB4Nw1{+<%VburquNDxK13!XC7ZojpZ3pYuR=ebVjP(!ucor+#Pf#F`Y};|PEA z)sHm6Bvzi`XsTt+le)CGs_*QFm#f(gPfzJrw#e=6+<5)K%A>J^<}LZ})oL6%RknX0 zRSV~Y1`xkz*v9Gma~Dg%AbYH~tA{6F)5xmXYjGov!0!ERQ~7-&o>3GM-m0Nk2zfy< zCZ1H&g7#97W4*nA+GP$k7=f3mh8)WKoMh8zh-|AM5angIPF{gg4hjvI_Pa8i8e5k!@#IQ8J< z57^aj^2+h_nAkQV`^alt+1)uQDBX`mw?02RV(}zaNjD#R;tn_0876ei(^<0qUeU#2 z?OjpZ*hhm^P3kgXDch{R9>Yln4>aKC|8rY;YpT|Jx)(Dv`VdAm`am|e7;^+h`q+N= zV9N7{%zUNt^z`B0tKPHsgp|E#>RF{A<=~Vy`&m+e5DTEG)nSpP?NV0(i@8hJTn~!%ZAKrECw_`QzOh zeLgyq_#DbEn_QI4q05J0a8bS-;`_8VOu@}QKV_`I66y0f6UxAi9-|Wi<(+7 zk&Q_mTe@z^+B3oT<09Owi`Xdw^g3`Ii3j6KVdMa?dov!rN7O|kRC2V0HFdhkWAHD9 z4g#C5Uvia{q{g#CinF?E&^*EATDT8+sd z1l;+w5(>HMdGr008SPLZ%rUGtSyL<)iB~xIuY9|YaInPB`|rbVdr1=$XFuS_(DT5Uswbd@FLu7nQDG>8@Ypg=&*r8)eE2X8 zn8dY1M|)a{$#VcaOv=}_^MlYqY<5tvlwp#E1txRMzPgo1{wQz6b)eX71kL5JmwPR) ztkXlGHKLl`<2-36`0{Qz&I}IU10e{>Eyg{rjY7BM^zV=CC$Fn1&Hg+KY)SPbvB~kD zCE-QI3CyED=Q}9oU~!$IKl3iCvke091DFC-?D$6;2|{m7uQ9v>mqj zl0o?VQzkg;=tC!7gkX`DeC5*v9BmJo5xzb7{wdl9TK7fgzJBt6u5BQJPR& z>VnEbw&k%~B(z7_L5^^K$cYNjxPj1&V`Ku zY%Z2OXb;^(%)=CSLOIs(an_BDN!#B1PWwkg0ugWve4MBTWv>zUopM5!+f}$3L5am7 z)dcFq<{U=>b?}vXm9Nu_$E3$0_hm^nj@x#@ZF38*5F{iQ=^QqQ|F)2a{%oG}XL2n$ zaG^Tp(stI+#v*Aers2y9YJg-IDx4l~&I3{^l=ir>s@fS6-y&wFDsr~)`rPia65<*y5Ev?o zV19^(LDDD5)93!Q8bqNs#r!cFV>Z3}?_-nd!0t(AYmnH)A`~p}=P*)LNe4?ey54Vg zcmcP@?O1aHz!CT2)IpyWG_-NK zd|n9`^Gd^76wqa(PyszM9renkf5XhsT6Rlws+)1F*?T%F3ZdUgHr+0~)}dxe@3jD8 zpur4jhT&7MPT<(mF|H%9Bpj)8JzJJtTdtkw;0I`iNw*D)^>0^%V7;I=x&X@YbZ(%$ zG6O)RE^AszZ0S30Uv5yWr^8NGx|v>Vq}fXt256(j)?%?CGT+vL&rYDnjQr>0+u_pn zP8?SV_u1U_k)ERi|8b}5w0THvQxi_3<&;>^OwgK4q57TENbRJ%G;mU5!OWV)?^`F< z%ujzfWp_Su&6w~!4IZ=Qg!NxZ)N{n9NPLV@7Rgi3lgUeAD`miNN3S@nSo1lZrH+NW zuLp-X|6WN=cRt<)B&H}~P*CofQl87B1FH~8u_WK2U>{79=#^??RBW+Xgzp|Be1F%U zB#pnBDUm6MnR3tSo%Cflc0LK$Di2m}*8|O=C~&{Iv?>~#MC+J^9F1>%pt{~RWA-7& zg}R=bQ;RcP>Nb!i2fxesCKOI*QVQ@K5`f`-;x8OR5(sUH0{OOves!o zg1Mxzh!4Yix@?Vjt``xVOx?ivr6z;v%twTCC^ZqMTA0lsRwG!JK!H^^mYZ5JnW-zaRh^FGq5A1gxj z@9!a_w{t6DpQFhP_IjHIK=TLOp$4Z)rf$8_W04_61$l-lelzz%83T+!j|tod;dD@0 zWp=GeLlR(*I;_r2rEj|bI~gGg-6;nb8&otZ=`t8u zGc0Ad)sEA~+h%R!z?GSqnaiJ=gJrlKZ#9$o-Q&VNn>Y@1Bw3v5L;*|)W;_WTr^TyB z3Q4ggw{>W7Md%xsKWN8%TI1!f|3wib9^$pimk_-IH{P2aWxay}K0gvd32}Uy_Wed! zll=>Ng>@|)n8MKXXP?CR+CZ+?-RDFIkZz>NSiMCYwm7h<# zH4FMIyPqNFpfj7YODDQcvc#@bHj)X-_=QCv=amP*eyi_94G zQ@3e$pX|lKa^K^3-Rb3~?TTbS?-(^Fwe&fhC!;NQR5;@75eRlEnVLywVJr;#JpH=@&)xyUM zqc11!1CDEF_@bk0O&=ZUh^Kl78GLK4LXb#U#1ZV@_8L_0?^Qemdy@&hvPZ$8^ck6w z-j>qvckjhIsa{993&+Gw3hSVXI$ca4yTuotFx2#8wSOCdGgBgTHLg-`1;z|kI^H>e zk?qU1t;aUYw9momBs%=;QO!4lnXmfXYqa99pnVa7+o?Kp{zxQsv90b&jC^2GqKAu7!Pdpj4-5D+w(O!ihxW%UfXR^kL;s@pZ zY_f!HSzM$S6dXNgfr$A8Wd!J8-milWf8gmivC&^_j_O97 zSA6jo{#dJJ1sqLY8YV3!pV^g)zSGG3)?w+DLTB<_n6a9SM?EgAckSQ$63M*i(@cK` zima+7`NuMwMKL0a5nB``ZGz%JG>DsVFlyAXl#7O1q_X|yP`Y|>YJxew`l~Ls33glZ z?eMEBSG}4hQ2w4;f^Vcdjnl~i_m}mm%7VSkco@I5>&uZn|Lx3Y@JrkMC?na88=5UR z>d=4YjixE{YbEDqwYOQe+M7vLVEc&zLsDYF2+;qnx5>X3+VO(+t7d%r{|aIgo$Q%0 z11yDeXI$s2DgQQPXOM^7tz^0(aLF8sYHcTLzVDT_yXbtQx-Zhgc4N&OCBhoNWLq58 zm0{+BkqfKY&onGiO}07Nyp@$=J*tq15bwFhLEqP`m>@EuI_431Fa(z zq(z$Vxn@P%t;8^q`&x9}$r+5Qk~~rz^jin&n+I22d|UYU$ID)`+nobE!OYXX8E4}!!-*#1mOYjwF{d5Ge14Kc}v zQ^)(@Cn$enhlscORlY@tlPA^LkgypjBJ00A5XbCdA6x_|jSUU>>&lggMk4U~d^mVu zUtJ=R_`~sg0`U#6j8jRK6{gL)U}$ehksKo_RO*J3NJF-g@R+q{iy@hu;+fa7`98B! zc0t3~Tn&>7(*!^|Uvt7NXF94P+(QzXSg74gEHkR}+9c_C8{d%4HE|NOWD2Pc4K^>3 zJGTHonzj)>L^|I2P4_oXIqg^-j*3^%QxH`G7&UB4X^|N{3~BzZUtPYYa?JY2)zac? z%!1rm^2m}#LjjAdTno|VsV+LD_R)eF;~q_aa_c%#=8I*Zrj=ZKz&}HDxP}-IvcW}B zM*>V*9eUp*D0ReMel7fH^rK0{PHs(#$~HDxWBN!1knL^YEJNq7Z#f!(VT?x>@MSia z`_+*ZQ?i#oaB!gyMs+PjYWUWV^4;PQ6OmnV|F%coy0g2jzm7S38O7E)M-t4sul(Q% zuBKl?&r0}V$yiqABkP+K0mx!cCuaB>XmCr`s%RSr6J7Pt0QC~6xH*GS6r$ORlP?Wu zYDw08@1Yi^mHS75y$s#Qb?estYWqO_=fg*`33l7sU6qQ5W%uN_IUm`@){VqJ%d8D$>W*+NG8eL5xZy@@7y1zepI z$NW++{5kpP>F&lefBh@!cI<%NW=C^lbF!(a>0WAE+wnGP@d4xD`aXOqmn~|vy!|xh z(R3h*zE-mO1bi$JPEF`glk8yIo|0suer3s(s`Z>sv2{^wZ*UR)eRT9n2oE?Bi{>Gf zbWxvE9}z=QlL8X`tkN0ao>)Wogp5S81A&P^&fEYdjgP`L&=u)y41MO5M~wr=9MRCz zPJt{oF_&4Q8Zp6zujUj+I578b+C6)Z|v&US?N^G8paP`tIqb{uB zXCBF6?iP|IVU+A=`t0E}3m>CuU$yX&xB3y9w%*|q5!{osxl0?Yz0Cy?-~`euCHeWm{v=Su}oR_UpC$D4H+~IIM7$X6~7k zD=4@)xSwZw>AH)DomGWEMe)(ZW^Bbt-|M77OJI|9lGb*kwKcx`r;pd){M|5>ZTxxV%9Vd%wRy*qM0)hmN3oqihVAf}lb45ul|g(yH;g6DI9z1ibxG#VTLv;V zyUd?`emlmM(QI}R5Rxc;hVJ%+N*51g1ZZ}j>xf}RpdWLp^Wn?MB%SY(krj< zM8v-SJ~THsK1$cJad?ppsP3{7mRt)x7J z(XGQ6^3@FgZpe3|Wxyy?n!%JjL!gp0BSn1Ud-j}GhQNi@CSE=x|H|vmoU#um@R3U4 zu1+OYS0LNDYRLFv6k{adu+8(DQ(T(dvAv65wc>$ivyHBGWTXUV5*&EnfHYKQ!L* z$g8PM;L9;ae_v{9+MLqT^7}5haM{8X4UXQvUaYwGTAY6R0(d-L8i*?T`v-6+qF`6r zg~KTsouZT9Y`zyaUoN4ejmG_DMP${fNnJDvX9$Cs>`0?B;6gArk9P=jCO`hf6L@{~ z8xRH7W`zK><(2Nv&Ks#|4Wrm5?#%jf0N*<=58oJ|!4lKVv~L#04deiY)h>8~cIrDb zj4V5C)Sou)BINa5xV12Adzf32nofNd?v}`O*5eUUcIfGp6;_PJ=>Ocu=231FLkbo-$o-TP*I!+ZFVj463@Vn*XC;A&bQP3I z2$p!@^q74o*$fUe66tDD(s>x0Ck%)hD?yln-gq576TtXcUd;Of3bS;<%o8<=xI?= zQPDT&%sFW>bGot(*(xe4u>8Ucaq_%*$ji@%jev&91y&eJC5@mmC!ZB(XKQ#^fo+@J z1{%+NFfl;dyKf&}diiCnd-F~1m-6|2e3$w|hY!8l(%8rbvMjG6 zZ@O$2m>vkp#Nw(@E(h@Uy#p_OX?4T*V3sK8W@%NU05CHJH5{;qw=NLVUEj+93^k%g zo_gSYqZbRm^~|KOC-~pPd7dB{5EZeW%U$% zOb==ki+Rqq+wGs9He<%c#f3#qR{V*TPZ&3D92T5WD=UMan2DW$M3UsJ%3cNs z9=2OSS9dqxE%L3m-$vbz?MSOC^79K|Bkj=M*%?2$Z{Jg0?d|_de^xiz;9|9f86&?1 zFoo!{s`irGj*`0#TfSn3lw_mOc+B%w_$ItT1<` z5Ms;VsV(Qu;LXfaLJmRt*9imd0- z`8LeIz6uK`2a&^=Ogv>e=2`JOwr4z(PHeHF%_>gC{3$G8!?W*grf*ernoE%!UP2J9 z3{klXuJA#1)rOvRcW(g8v1Z`XYcbG1OXBLs2QXif1wA!e&|*%$Xd3*BnJ);Y5yGW>A7(b>Zvtz4**nhszZwi_m9iya-eVMGXwEz8+3n zGo!s3fEgxp26CzM^9hW1CS$G74B&sC(|9m~^=ZtSr^X2Zm?NwuD`CWBMxke3{@9#J zMbn(Qf$^fpUb)Dlw|MQUF#QoYlNxp=-%}mI>wA;zbYX4x7Wq z_g(7k?$(={n-3h?yZ5E;?(P@pd$&;=`#+|3I4xgH24onc$){gbd@6{!7mt%>jLo%q z8N#H9?#s-lrlUJu zn=?fV35NCrKeLU@Y*_EvhnP) zS*1@N4X~U@fU%58!0KCOP^xo)DHqyt)>1!a);L^tmM|BGhB)7m)UZlx3jg5ROrMk+ z5`1h0wZR!n=;f$U_g4ih3dmSmz17G47BkgPD8L-iP-aeS*5S0QsGQXrvz9a=pQXrhX$pXC@OQw3u*vMireP*`{hv60C+xw(bGV2+Jt-+H`mIB9U&9d@4g!lEzncpL-a zaJs*%tGlhEW6$Bkhd0Cr2U+$iV`m*7v+T>TOs_Tg3M{Z;uY=SvrOWb!DHl#~Pn%Za zC`r=jqd}N1^ocH)P2~GpMUqK9tl5&f+rd(`ji{<7I>JI|Z+onJOMSfQtq|&Igtb}& zj#;)I>v_=fpJ}7i7L&=ef1a%)A+Xf*|3CJwW+j0r3g7wB87D)dG$H$C7E0kF2wX)k z5p8;eUZkh!1=_TTmbI)!G!RshAf$w$<>G7`dm%S}hR4|m}mw-fKK#&w*llvk{?|WRDcIpk&EPqxiZv<=#z@{`n zRpPHbqw8nD&wwVv00v|=^)H&1(3-BGmFG6Hh)9uBF==soQC@Z|TRbn|+!J<_tP4uh z1OTyM(LeiYaBKp3Oq4W)5wHHR$|tl>Qq}6EF7)j%$+o(bDH(purD=1hN43(JY7k?l zU?~8F4n&lsTL*aZ+8;|2gr6F!>|>pzi(;4>lNC!moa zaPv^88WgR>T7D?N76ikD_5l0L2c|AHPa-m3*m*BG2t)p{)dpWJIQpW+<>vD`;sEn2 zW#BEqf1}Dg*Dr#)VZbB9@&XJSKQi#NxNK1{>2pxw#sP*KH*PaGk>3Jt+_+84egqf* X($g=_6}I?+00000NkvXXu0mjfJ28C? literal 0 HcmV?d00001 diff --git a/assets/img/example-diagram-01.png b/assets/img/example-diagram-01.png new file mode 100644 index 0000000000000000000000000000000000000000..0cece3b3eadb7de46b803b42b42304093ae268c5 GIT binary patch literal 1641 zcmeAS@N?(olHy`uVBq!ia0vp^mw>p3gAGV>%6>lzq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfeCihD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Keo`G(%ftjI#nTejE ziGihwrH+D;fuVuEp^?6Uxvrssm8rRvfuRBvC;@FNN=dT{a&d#&1?1T(Wt5Z@Sn2DR zmzV368|&p4rRy77T3YHG80i}s=>k>g7FXt#Bv$C=6)VF`a7isrF3Kz@$;{7F0GXJW zlwVq6s|0i@#0$9vzP@mS^NOJX1q?F%io^naLp=li++2{qz^aQ&f>IIAz^b}9q_QAY zKPa_0zqBYB7$0fMFwMZQ!*3BtA<#8e{zaLylcOS(cjOR+OKs01jcROe`*NGdFib_PK?N zlarf)p{22fnW=@TrGXMuZwfh~rVn(CJ}7x0B^Q_wFb#s3@Wc<~z_U+k9x%@o0W*i0 zug_}+2BztrE{-7;x8B^b_PY}x((rI+$`hfB3W^t(p3#b651l61+2Q`J(Pe7x0ke!3 zHeE)%i=?HBbpjPU43Ct*sZQVLzpLZikB<79ie)!*%B-2$ZW=QQ2yt+>uz;`=lOm&2 z(^-$$>ob`ke6U#K1O~-}Y-hx~TQv_{nDEG?@Z95?{^A^!4cpAl`Ob;2^$0Jlo55KV z_5Xoo_h;3uxxdZtS(*s{$Uki>crc;;Uk{TJ#0n=SxN(gW96S_MKo}&2Rk{JJL_i3l z1j&I+iXh#X(x*5wGkFY7Y~p`;OD18$?8-emJ1!rw>@7}F+px{Pu>^IYml`Ggj`lgFnA8HpE1&bD970JTU#`~E*RF#Evl36JKy`6ck^=#zJc z6Ts@~_2zjbY-L_OSM*rSnzDuo2eQ&z4aHZ>M!aQ!ios;h9L-`6v)*tkG7-dzc#BZk zkQuhS-uBfhc^_5nGdDJ`Pt*&pv8z&YT&8|$%6b`9yUwy#b>1_5-x`1Q|DxDjIj7ko z{_&gslC#S#_zUH@=libPd8KH7^7+)&&u-dJ+}CR}^_579V9upqB9$U|W9Dh0U#TnTc67-GbLXS>f2P*tMUHx3v IIVCg!09710q5uE@ literal 0 HcmV?d00001 diff --git a/assets/img/example-diagram-02.png b/assets/img/example-diagram-02.png new file mode 100644 index 0000000000000000000000000000000000000000..557edd3112250f67e8491d68ab97acb31105c27d GIT binary patch literal 1742 zcmbVNdrT8|9Iuav#mAhQi756cW@ZL@cP)KFm6q$R)fHIFlx+;D?X^8=d-ZyKAeIP2 zjTtz}43bURCN3jUAWYCKR8Thq&P>FpI2)dl$J13ZXJm+WCmg<2B@q$ z6Q;p*hV0!}v3Le!o*7R~qtetLNc4o2qx0KvJXSmH&0xfD_Skj$EQ|tnVkX=sWe?Ri zvH{#6WpC%JA+PXR9tj=5icvbiW3|{E5|5NU6<0#b z{$r30OqozwQg(n;nmPqYBuEV4bD$VKB!B@yEC-H-#IfRNfD6G82y;P57z0BRzEA?e z!1TkW(MW?)qCwDUEc#2zHdB;c0)lS0o8#tj2+{y%3MXuUKca3Y;iRN&nrR>ft6i;r71-vOE)-od(4(`1Fb4vyR)1bo)(%R8 z{YPU~Ye#Cf9RoF(gK(01x*x`&Hv{<%X*QB%5~rJ@vmk`tX~k@m3X!sD4aa~R z=n{z_7#7AtLM|i_!LVE|QYc^<0-=1Fh^tTpW6b6&Ld0T)Tmd044}oC?Bu7z!LIm?f zGKCP0g?K?O02K<+nVE|axg3RHF;67mi}+%QJ?(4wKUD*1 zGN6AvW{gYlh@L^e_-gp+k5|_Rv(a~kq%TKgA?p%@F?U>r$WlG+{eRZ%S}6;=IP$6V z++snnw8=SJooVbCi<39L_0LPeY(9&X&XVfjL4!F>Os^>gI; z%;@v?1}q`01NU3Hdg9*->ppa=XEd_9-gooYzCq8KNmh^cX?k>4ZA%X}+3n3Zw*RuX zr0pBux*n(VLD$x@MTO6v@Aa@NO`^Qfd7GCOSH2ZlX%r3j=CKYoZ)?a3iSnMEv+Q+9 zKdl7izA0MEmILc&RdeP9C{EFwnMS}q;3Jskkg4-~RiVVy@u#@6(H_NY$S-l|cajYwCh44%>Ng&!-)C- literal 0 HcmV?d00001 diff --git a/assets/img/example-diagram-03.png b/assets/img/example-diagram-03.png new file mode 100644 index 0000000000000000000000000000000000000000..acf819d408cdd36bdfaa1a14657fadc9a6146be0 GIT binary patch literal 1428 zcmb_cUuYaf9NwN%+iHoFg0*PeZ1Nz|yPes)z1v-LO>S>@y%X;mE{7%$hVJc7a@%D8 zWOtLhODi;?6{;5Mi--^^N}mLYk43KfLX2Ze^Vrc#3lRU04r$G)`A-k%uZ$b+~r zJF_#t@B4o9&2RR^K>m%LJNE7%2x4b8BNcG}J#HUu+lt@YUw(KQcQ5+#kUwaT`W4kh zL`t_yh|HSm7%CuDuT6f3dI{pGvQZrJhjMQTnr%kZASO~Z9gHT3-oC1%YU9W!OK8ln zlGNI{3lwSSN$MRo2Xamtm5t1diw0-%MQvtW<8`WUKiOLqFoB7Dm8_Z*mM2t`RGnAA z<6xSm$a;uBo}?N{4dn*NwCy62jexKQ;*gBTA}|K{7{8BX00cB-Xpjg)Ag~DmK(hHz zSk2W(g@U9sweVMxD*L`8&~&9ziBzHy+a04J&+{~3Xod;nh_F|)e60kmlb`>IEKegXZHM%!qwSaT3v zK%PD2YWO@xyIWxF-R43;AkIcO;2QW))CtMfrc7k{St&{3m56TW*dh)G22|^i&iV~MO80AuOLWzNB3!Ak(U$r#U(lxMd z6U%Li71AzJecLVC_C%`!2FkW?du7`p(}QdTk~vi~tY9WMpvHbBkbP> zn+%jhLfN=;P7*~0Kt9UFS&roa)x_%m#WflyLkH!tp#{@q7!&!5!S7T(R5R_}-S^qu3$!oT$wuo~~;mX-R`A+YuZL#OVwKoq; z{`Ei!ot`Fp`ZHut5ZyqCp*mvr6wx(%sy}lSw_v#uvVkzvX1OiH|0&SY|5u8e2&8`N z`UMT||MAd+g+E5DpHIeeKV0rc9p4;Ye*0GDp}J?}+sPyIzdl;|^33~F%h%>VTsb^a zS-AHITXl)=Eal<+6Xvzy)#1`o$vV@wwz&66=H~Guk59Z>ySn?<*`GeW%Rc^i@q-tp oZ*Ki;HTrDR>A;xJQ+=W5h>O>S(pSmzcY^<9R?bUbiwEca1_@Ha#{d8T literal 0 HcmV?d00001 diff --git a/assets/img/grid-18px.png b/assets/img/grid-18px.png new file mode 100644 index 0000000000000000000000000000000000000000..68f9fe1b70c40b25278613599bb593a0cb6acc0b GIT binary patch literal 1118 zcmaJ=O=uHA6y8=^`a>>O0;Uv}tsscmosCJ;U7EIOw$-3pN*ZWdMBMI9nx);Hb$4o# z3RbNs9t0`atHC0A(O!BJ6|Gw9L82gNj~)twVh>*Q_zA-Ag+PZ~xWYVspGL7bOgdvfZuV7d; zS<|Vci6o56DHg}Gz`arxD9itc8b%H6-~`-@_n*Q}GH*dH0Ub1NtE6!0Zr7D1#%!oy zWG4}tt7dU5gD`S3$f9H8A(p3QMb%B$Qew!m7&jfPm@14*5r$~6x~_=;#KI)cVL=!f z;`w1P6bi)zDI5-mc!>ufP~}QUoj0I~t6Xi5+gq3GHiKai&l0rt^H3YHkwKR(E$a1S z3DwoBaJBle^wi~YBpA*u?O&y?nn?e+%Ua`-O|A8zN&4L;joozk!zOtY#kdqr=C;3m ze%^W&92kE8@`>lu;&t!t>e<$z25s9H(gupFxpN~7YEu;9%(ULceR75QZg>Ji06mhF-@t2k&3;wPZ1?@s<*@gWfShf4Z7Z^ok zbwy)|Z^cC8JDPq+=gN3<^HAH+!VVl}?s?63=gypS=6cEg8%@RfGui*F$w6w++w9q3 zv)L>j1t6CvmzI{s&&+8#xmX`h`YHDgK z1qhj^2u-uGu`zCAZE$d~p7?}Az(n{Q+2`iwrq0jLzaSr7U0si8Gk6mJ`8ymRAMc)> zo!N-?_V!lL%REI33k#nLa}#ZEZ;uk6;W+0JK3Zrgd!y0#J8wTUH1x42@e?VON~K!Z zjedT9T2Jo&sHmtF{y88Z;6RLn@J&xo>!j?VAI?7q1qB6r`UET4QMy+1^75jXqdYx5 zwMfV)E~z0iIk45Bvp{Y|uLre)z5xz1WDlh9a7W%L-;tgpjO_6cSPuWO1;iK6a-eIp zTCH=CYfDN>vLYiR)d2DmyjT2g$;imi6%`f5lZ+M!ax0S&=;YScR$X^@_bX;=0lN#l z#j&xm)y~e&Ri=KW_4f8gCnhFliLr5hOUGgXJh?sAgyI7DsMxE&`FE5W578WLvPg*$4`N(WGuZZ=ChxpkJ zofKL#0WG#DwqCD)>PiG{)V&8U0I6FK04lRniM+w)kSnA0JF(HhXAx1?B zW5letZhBl1tRvuGC2^Cn@y`~Eg|KUG8y-+$tYCL)Mf}H7x^_FTxw-lKwY9Z2wOTE% z@u*gsg3QX>pd9!Ty6yP#q2b}-nY=6^A>lq`BWxE{@G=z3$9Q4M9f&Nq~CTPS9V#)ywKrrw#G) z;y#Yd^9*2fTp7@$C8WC8jTh3i9suf4`nZVfD*%`xa zBK73tq{G|WyVMnys;VlQ?#@v3Qa0VqRQa?7|hZ#MJ_7G@8p8s0Wq16C3bybmXbJ&jN6>6J3)d z8SEDEB6&29iHW&Vir^$1v9ZC`91IKn(#j*Bj`Scua}%>r_Pk3yu6H{Ej~|N@mxA?F zh2H`F=H%m;@FgFxG3|~l34H_0R`0Mou1R#QYN!8yOpjVW?*sMM51hW9>9)JTVqkjW z`7T~iq4-+DpUL5$U6tw=k=>QC-9O2j{7iV$WOh67O}k') + .appendTo(document.body) + + if ( this.settings.backdrop != 'static' ) { + this.$backdrop.click($.proxy(this.hide, this)) + } + + if ( doAnimate ) { + this.$backdrop[0].offsetWidth // force reflow + } + + this.$backdrop.addClass('in') + + doAnimate ? + this.$backdrop.one(transitionEnd, callback) : + callback() + + } else if ( !this.isShown && this.$backdrop ) { + this.$backdrop.removeClass('in') + + $.support.transition && this.$element.hasClass('fade')? + this.$backdrop.one(transitionEnd, $.proxy(removeBackdrop, this)) : + removeBackdrop.call(this) + + } else if ( callback ) { + callback() + } + } + + function removeBackdrop() { + this.$backdrop.remove() + this.$backdrop = null + } + + function escape() { + var that = this + if ( this.isShown && this.settings.keyboard ) { + $(document).bind('keyup.modal', function ( e ) { + if ( e.which == 27 ) { + that.hide() + } + }) + } else if ( !this.isShown ) { + $(document).unbind('keyup.modal') + } + } + + + /* MODAL PLUGIN DEFINITION + * ======================= */ + + $.fn.modal = function ( options ) { + var modal = this.data('modal') + + if (!modal) { + + if (typeof options == 'string') { + options = { + show: /show|toggle/.test(options) + } + } + + return this.each(function () { + $(this).data('modal', new Modal(this, options)) + }) + } + + if ( options === true ) { + return modal + } + + if ( typeof options == 'string' ) { + modal[options]() + } else if ( modal ) { + modal.toggle() + } + + return this + } + + $.fn.modal.Modal = Modal + + $.fn.modal.defaults = { + backdrop: false + , keyboard: false + , show: false + } + + + /* MODAL DATA- IMPLEMENTATION + * ========================== */ + + $(document).ready(function () { + $('body').delegate('[data-controls-modal]', 'click', function (e) { + e.preventDefault() + var $this = $(this).data('show', true) + $('#' + $this.attr('data-controls-modal')).modal( $this.data() ) + }) + }) + +}( window.jQuery || window.ender ); diff --git a/assets/js/bootstrap-popover.js b/assets/js/bootstrap-popover.js new file mode 100644 index 0000000..cf6dadf --- /dev/null +++ b/assets/js/bootstrap-popover.js @@ -0,0 +1,86 @@ +/* =========================================================== + * bootstrap-popover.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#popover + * =========================================================== + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * =========================================================== */ + + +!function( $ ) { + + "use strict" + + var Popover = function ( element, options ) { + this.$element = $(element) + this.options = options + this.enabled = true + this.fixTitle() + } + + /* NOTE: POPOVER EXTENDS BOOTSTRAP-TWIPSY.js + ========================================= */ + + Popover.prototype = $.extend({}, $.fn.twipsy.Twipsy.prototype, { + + setContent: function () { + var $tip = this.tip() + $tip.find('.title')[this.options.html ? 'html' : 'text'](this.getTitle()) + $tip.find('.content p')[this.options.html ? 'html' : 'text'](this.getContent()) + $tip[0].className = 'popover' + } + + , hasContent: function () { + return this.getTitle() || this.getContent() + } + + , getContent: function () { + var content + , $e = this.$element + , o = this.options + + if (typeof this.options.content == 'string') { + content = this.options.content + } else if (typeof this.options.content == 'function') { + content = this.options.content.call(this.$element[0]) + } + return content + } + + , tip: function() { + if (!this.$tip) { + this.$tip = $('

') + .html(this.options.template) + } + return this.$tip + } + + }) + + + /* POPOVER PLUGIN DEFINITION + * ======================= */ + + $.fn.popover = function (options) { + if (typeof options == 'object') options = $.extend({}, $.fn.popover.defaults, options) + $.fn.twipsy.initWith.call(this, options, Popover, 'popover') + return this + } + + $.fn.popover.defaults = $.extend({} , $.fn.twipsy.defaults, { + placement: 'right' + , template: '

' + }) + +}( window.jQuery || window.ender ); \ No newline at end of file diff --git a/assets/js/bootstrap-scrollspy.js b/assets/js/bootstrap-scrollspy.js new file mode 100644 index 0000000..efbc432 --- /dev/null +++ b/assets/js/bootstrap-scrollspy.js @@ -0,0 +1,107 @@ +/* ============================================================= + * bootstrap-scrollspy.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#scrollspy + * ============================================================= + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================== */ + + +!function ( $ ) { + + "use strict" + + var $window = $(window) + + function ScrollSpy( topbar, selector ) { + var processScroll = $.proxy(this.processScroll, this) + this.$topbar = $(topbar) + this.selector = selector || 'li > a' + this.refresh() + this.$topbar.delegate(this.selector, 'click', processScroll) + $window.scroll(processScroll) + this.processScroll() + } + + ScrollSpy.prototype = { + + refresh: function () { + this.targets = this.$topbar.find(this.selector).map(function () { + var href = $(this).attr('href') + return /^#\w/.test(href) && $(href).length ? href : null + }) + + this.offsets = $.map(this.targets, function (id) { + return $(id).offset().top + }) + } + + , processScroll: function () { + var scrollTop = $window.scrollTop() + 10 + , offsets = this.offsets + , targets = this.targets + , activeTarget = this.activeTarget + , i + + for (i = offsets.length; i--;) { + activeTarget != targets[i] + && scrollTop >= offsets[i] + && (!offsets[i + 1] || scrollTop <= offsets[i + 1]) + && this.activateButton( targets[i] ) + } + } + + , activateButton: function (target) { + this.activeTarget = target + + this.$topbar + .find(this.selector).parent('.active') + .removeClass('active') + + this.$topbar + .find(this.selector + '[href="' + target + '"]') + .parent('li') + .addClass('active') + } + + } + + /* SCROLLSPY PLUGIN DEFINITION + * =========================== */ + + $.fn.scrollSpy = function( options ) { + var scrollspy = this.data('scrollspy') + + if (!scrollspy) { + return this.each(function () { + $(this).data('scrollspy', new ScrollSpy( this, options )) + }) + } + + if ( options === true ) { + return scrollspy + } + + if ( typeof options == 'string' ) { + scrollspy[options]() + } + + return this + } + + $(document).ready(function () { + $('body').scrollSpy('[data-scrollspy] li > a') + }) + +}( window.jQuery || window.ender ); \ No newline at end of file diff --git a/assets/js/bootstrap-tabs.js b/assets/js/bootstrap-tabs.js new file mode 100644 index 0000000..a3c7ee1 --- /dev/null +++ b/assets/js/bootstrap-tabs.js @@ -0,0 +1,80 @@ +/* ======================================================== + * bootstrap-tabs.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#tabs + * ======================================================== + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================== */ + + +!function( $ ){ + + "use strict" + + function activate ( element, container ) { + container + .find('> .active') + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if ( element.parent('.dropdown-menu') ) { + element.closest('li.dropdown').addClass('active') + } + } + + function tab( e ) { + var $this = $(this) + , $ul = $this.closest('ul:not(.dropdown-menu)') + , href = $this.attr('href') + , previous + , $href + + if ( /^#\w+/.test(href) ) { + e.preventDefault() + + if ( $this.parent('li').hasClass('active') ) { + return + } + + previous = $ul.find('.active a').last()[0] + $href = $(href) + + activate($this.parent('li'), $ul) + activate($href, $href.parent()) + + $this.trigger({ + type: 'change' + , relatedTarget: previous + }) + } + } + + + /* TABS/PILLS PLUGIN DEFINITION + * ============================ */ + + $.fn.tabs = $.fn.pills = function ( selector ) { + return this.each(function () { + $(this).delegate(selector || '.tabs li > a, .pills > li > a', 'click', tab) + }) + } + + $(document).ready(function () { + $('body').tabs('ul[data-tabs] li > a, ul[data-pills] > li > a') + }) + +}( window.jQuery || window.ender ); diff --git a/assets/js/bootstrap-twipsy.js b/assets/js/bootstrap-twipsy.js new file mode 100644 index 0000000..7f8ad0f --- /dev/null +++ b/assets/js/bootstrap-twipsy.js @@ -0,0 +1,310 @@ +/* ========================================================== + * bootstrap-twipsy.js v1.4.0 + * http://twitter.github.com/bootstrap/javascript.html#twipsy + * Adapted from the original jQuery.tipsy by Jason Frame + * ========================================================== + * Copyright 2011 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ========================================================== */ + + +!function( $ ) { + + "use strict" + + /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) + * ======================================================= */ + + var transitionEnd + + $(document).ready(function () { + + $.support.transition = (function () { + var thisBody = document.body || document.documentElement + , thisStyle = thisBody.style + , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined + return support + })() + + // set CSS transition event type + if ( $.support.transition ) { + transitionEnd = "TransitionEnd" + if ( $.browser.webkit ) { + transitionEnd = "webkitTransitionEnd" + } else if ( $.browser.mozilla ) { + transitionEnd = "transitionend" + } else if ( $.browser.opera ) { + transitionEnd = "oTransitionEnd" + } + } + + }) + + + /* TWIPSY PUBLIC CLASS DEFINITION + * ============================== */ + + var Twipsy = function ( element, options ) { + this.$element = $(element) + this.options = options + this.enabled = true + this.fixTitle() + } + + Twipsy.prototype = { + + show: function() { + var pos + , actualWidth + , actualHeight + , placement + , $tip + , tp + + if (this.hasContent() && this.enabled) { + $tip = this.tip() + this.setContent() + + if (this.options.animate) { + $tip.addClass('fade') + } + + $tip + .remove() + .css({ top: 0, left: 0, display: 'block' }) + .prependTo(document.body) + + pos = $.extend({}, this.$element.offset(), { + width: this.$element[0].offsetWidth + , height: this.$element[0].offsetHeight + }) + + actualWidth = $tip[0].offsetWidth + actualHeight = $tip[0].offsetHeight + + placement = maybeCall(this.options.placement, this, [ $tip[0], this.$element[0] ]) + + switch (placement) { + case 'below': + tp = {top: pos.top + pos.height + this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'above': + tp = {top: pos.top - actualHeight - this.options.offset, left: pos.left + pos.width / 2 - actualWidth / 2} + break + case 'left': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth - this.options.offset} + break + case 'right': + tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width + this.options.offset} + break + } + + $tip + .css(tp) + .addClass(placement) + .addClass('in') + } + } + + , setContent: function () { + var $tip = this.tip() + $tip.find('.twipsy-inner')[this.options.html ? 'html' : 'text'](this.getTitle()) + $tip[0].className = 'twipsy' + } + + , hide: function() { + var that = this + , $tip = this.tip() + + $tip.removeClass('in') + + function removeElement () { + $tip.remove() + } + + $.support.transition && this.$tip.hasClass('fade') ? + $tip.bind(transitionEnd, removeElement) : + removeElement() + } + + , fixTitle: function() { + var $e = this.$element + if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { + $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') + } + } + + , hasContent: function () { + return this.getTitle() + } + + , getTitle: function() { + var title + , $e = this.$element + , o = this.options + + this.fixTitle() + + if (typeof o.title == 'string') { + title = $e.attr(o.title == 'title' ? 'data-original-title' : o.title) + } else if (typeof o.title == 'function') { + title = o.title.call($e[0]) + } + + title = ('' + title).replace(/(^\s*|\s*$)/, "") + + return title || o.fallback + } + + , tip: function() { + if (!this.$tip) { + this.$tip = $('
').html(this.options.template) + } + return this.$tip + } + + , validate: function() { + if (!this.$element[0].parentNode) { + this.hide() + this.$element = null + this.options = null + } + } + + , enable: function() { + this.enabled = true + } + + , disable: function() { + this.enabled = false + } + + , toggleEnabled: function() { + this.enabled = !this.enabled + } + + } + + + /* TWIPSY PRIVATE METHODS + * ====================== */ + + function maybeCall ( thing, ctx, args ) { + return typeof thing == 'function' ? thing.apply(ctx, args) : thing + } + + /* TWIPSY PLUGIN DEFINITION + * ======================== */ + + $.fn.twipsy = function (options) { + $.fn.twipsy.initWith.call(this, options, Twipsy, 'twipsy') + return this + } + + $.fn.twipsy.initWith = function (options, Constructor, name) { + var twipsy + , binder + , eventIn + , eventOut + + if (options === true) { + return this.data(name) + } else if (typeof options == 'string') { + twipsy = this.data(name) + if (twipsy) { + twipsy[options]() + } + return this + } + + options = $.extend({}, $.fn[name].defaults, options) + + function get(ele) { + var twipsy = $.data(ele, name) + + if (!twipsy) { + twipsy = new Constructor(ele, $.fn.twipsy.elementOptions(ele, options)) + $.data(ele, name, twipsy) + } + + return twipsy + } + + function enter() { + var twipsy = get(this) + twipsy.hoverState = 'in' + + if (options.delayIn == 0) { + twipsy.show() + } else { + twipsy.fixTitle() + setTimeout(function() { + if (twipsy.hoverState == 'in') { + twipsy.show() + } + }, options.delayIn) + } + } + + function leave() { + var twipsy = get(this) + twipsy.hoverState = 'out' + if (options.delayOut == 0) { + twipsy.hide() + } else { + setTimeout(function() { + if (twipsy.hoverState == 'out') { + twipsy.hide() + } + }, options.delayOut) + } + } + + if (!options.live) { + this.each(function() { + get(this) + }) + } + + if (options.trigger != 'manual') { + binder = options.live ? 'live' : 'bind' + eventIn = options.trigger == 'hover' ? 'mouseenter' : 'focus' + eventOut = options.trigger == 'hover' ? 'mouseleave' : 'blur' + this[binder](eventIn, enter)[binder](eventOut, leave) + } + + return this + } + + $.fn.twipsy.Twipsy = Twipsy + + $.fn.twipsy.defaults = { + animate: true + , delayIn: 0 + , delayOut: 0 + , fallback: '' + , placement: 'above' + , html: false + , live: false + , offset: 0 + , title: 'title' + , trigger: 'hover' + , template: '
' + } + + $.fn.twipsy.elementOptions = function(ele, options) { + return $.extend({}, options, $(ele).data()) + } + +}( window.jQuery || window.ender ); \ No newline at end of file diff --git a/assets/js/google-code-prettify/prettify.css b/assets/js/google-code-prettify/prettify.css new file mode 100644 index 0000000..f9fd622 --- /dev/null +++ b/assets/js/google-code-prettify/prettify.css @@ -0,0 +1,94 @@ +.com { color: #93a1a1; } +.lit { color: #195f91; } +.pun, .opn, .clo { color: #93a1a1; } +.fun { color: #dc322f; } +.str, .atv { color: #268bd2; } +.kwd, .tag { color: #195f91; } +.typ, .atn, .dec, .var { color: #CB4B16; } +.pln { color: #93a1a1; } +.prettyprint { + background-color: #fefbf3; + padding: 9px; + border: 1px solid rgba(0,0,0,.2); + -webkit-box-shadow: 0 1px 2px rgba(0,0,0,.1); + -moz-box-shadow: 0 1px 2px rgba(0,0,0,.1); + box-shadow: 0 1px 2px rgba(0,0,0,.1); +} + +/* Specify class=linenums on a pre to get line numbering */ +ol.linenums { + margin: 0 0 0 40px; +} +/* IE indents via margin-left */ +ol.linenums li { + padding: 0 5px; + color: rgba(0,0,0,.15); + line-height: 20px; + -webkit-border-radius: 2px; + -moz-border-radius: 2px; + border-radius: 2px; +} +/* Alternate shading for lines */ +li.L1, li.L3, li.L5, li.L7, li.L9 { } + +/* +$base03: #002b36; +$base02: #073642; +$base01: #586e75; +$base00: #657b83; +$base0: #839496; +$base1: #93a1a1; +$base2: #eee8d5; +$base3: #fdf6e3; +$yellow: #b58900; +$orange: #cb4b16; +$red: #dc322f; +$magenta: #d33682; +$violet: #6c71c4; +$blue: #268bd2; +$cyan: #2aa198; +$green: #859900; +*/ + + +/* +#1d1f21 Background +#282a2e Current Line +#373b41 Selection +#c5c8c6 Foreground +#969896 Comment +#cc6666 Red +#de935f Orange +#f0c674 Yellow +#b5bd68 Green +#8abeb7 Aqua +#81a2be Blue +#b294bb Purple +*/ + + +/* DARK THEME */ +/* ---------- */ + +.prettyprint-dark { + background-color: #1d1f21; + border: 0; + padding: 10px; +} +.prettyprint-dark .linenums li { + color: #444; +} +.prettyprint-dark .linenums li:hover { + background-color: #282a2e; +} +/* tags in html */ +.prettyprint-dark .kwd, +.prettyprint-dark .tag { color: #cc6666; } +/* html attr */ +.prettyprint-dark .typ, +.prettyprint-dark .atn, +.prettyprint-dark .dec, +.prettyprint-dark .var { color: #de935f; } +/* html attr values */ +.prettyprint-dark .str, +.prettyprint-dark .atv { color: #b5bd68; } diff --git a/assets/js/google-code-prettify/prettify.js b/assets/js/google-code-prettify/prettify.js new file mode 100644 index 0000000..eef5ad7 --- /dev/null +++ b/assets/js/google-code-prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p + + + Bootstrap Plugin Test Suite + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

Bootstrap Plugin Test Suite

+

+

+
    +
    +
    + + \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-alerts.js b/assets/js/tests/unit/bootstrap-alerts.js new file mode 100644 index 0000000..152d97a --- /dev/null +++ b/assets/js/tests/unit/bootstrap-alerts.js @@ -0,0 +1,41 @@ +$(function () { + + module("bootstrap-alerts") + + test("should be defined on jquery object", function () { + ok($(document.body).alert, 'alert method is defined') + }) + + test("should return element", function () { + ok($(document.body).alert()[0] == document.body, 'document.body returned') + }) + + test("should fade element out on clicking .close", function () { + var alertHTML = '
    ' + + '×' + + '

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

    ' + + '
    ' + , alert = $(alertHTML).alert() + + alert.find('.close').click() + + ok(!alert.hasClass('in'), 'remove .in class on .close click') + }) + + test("should remove element when clicking .close", function () { + $.support.transition = false + + var alertHTML = '
    ' + + '×' + + '

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

    ' + + '
    ' + , alert = $(alertHTML).appendTo('#qunit-runoff').alert() + + ok($('#qunit-runoff').find('.alert-message').length, 'element added to dom') + + alert.find('.close').click() + + ok(!$('#qunit-runoff').find('.alert-message').length, 'element removed from dom') + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-buttons.js b/assets/js/tests/unit/bootstrap-buttons.js new file mode 100644 index 0000000..9784f52 --- /dev/null +++ b/assets/js/tests/unit/bootstrap-buttons.js @@ -0,0 +1,42 @@ +$(function () { + + module("bootstrap-buttons") + + test("should be defined on jquery object", function () { + ok($(document.body).button, 'tabs method is defined') + }) + + test("should return element", function () { + ok($(document.body).button()[0] == document.body, 'document.body returned') + }) + + test("should return set state to loading", function () { + var btn = $('') + equals(btn.html(), 'mdo', 'btn text equals mdo') + btn.button('loading') + equals(btn.html(), 'fat', 'btn text equals fat') + ok(btn.attr('disabled'), 'btn is disabled') + ok(btn.hasClass('disabled'), 'btn has disabled class') + }) + + test("should return reset state", function () { + var btn = $('') + equals(btn.html(), 'mdo', 'btn text equals mdo') + btn.button('loading') + equals(btn.html(), 'fat', 'btn text equals fat') + ok(btn.attr('disabled'), 'btn is disabled') + ok(btn.hasClass('disabled'), 'btn is disabled') + btn.button('reset') + equals(btn.html(), 'mdo', 'btn text equals mdo') + ok(!btn.attr('disabled'), 'btn is not disabled') + ok(!btn.hasClass('disabled'), 'btn does not have disabled class') + }) + + test("should toggle active", function () { + var btn = $('') + ok(!btn.hasClass('active'), 'btn does not have active class') + btn.button('toggle') + ok(btn.hasClass('active'), 'btn has class active') + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-dropdown.js b/assets/js/tests/unit/bootstrap-dropdown.js new file mode 100644 index 0000000..2c2acb9 --- /dev/null +++ b/assets/js/tests/unit/bootstrap-dropdown.js @@ -0,0 +1,52 @@ +$(function () { + + module("bootstrap-dropdowns") + + test("should be defined on jquery object", function () { + ok($(document.body).dropdown, 'dropdown method is defined') + }) + + test("should return element", function () { + ok($(document.body).dropdown()[0] == document.body, 'document.body returned') + }) + + test("should add class open to menu if clicked", function () { + var dropdownHTML = '' + , dropdown = $(dropdownHTML).dropdown() + + dropdown.find('.dropdown-toggle').click() + ok(dropdown.find('.dropdown').hasClass('open'), 'open class added on click') + }) + + test("should remove open class if body clicked", function () { + var dropdownHTML = '' + , dropdown = $(dropdownHTML).dropdown().appendTo('#qunit-runoff') + + dropdown.find('.dropdown-toggle').click() + ok(dropdown.find('.dropdown').hasClass('open'), 'open class added on click') + $('body').click() + ok(!dropdown.find('.dropdown').hasClass('open'), 'open class removed') + dropdown.remove() + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-modal.js b/assets/js/tests/unit/bootstrap-modal.js new file mode 100644 index 0000000..e96f678 --- /dev/null +++ b/assets/js/tests/unit/bootstrap-modal.js @@ -0,0 +1,151 @@ +$(function () { + + module("bootstrap-modal") + + test("should be defined on jquery object", function () { + var div = $("") + ok(div.modal, 'modal method is defined') + }) + + test("should return element", function () { + var div = $("") + ok(div.modal() == div, 'div element returned') + }) + + test("should expose defaults var for settings", function () { + ok($.fn.modal.defaults, 'default object exposed') + }) + + test("should insert into dom when show method is called", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal() + .bind("shown", function () { + ok($('#modal-test').length, 'modal insterted into dom') + start() + div.remove() + }) + .modal("show") + }) + + test("should hide modal when hide is called", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal() + .bind("shown", function () { + ok($('#modal-test').is(":visible"), 'modal visible') + ok($('#modal-test').length, 'modal insterted into dom') + div.modal("hide") + }) + .bind("hidden", function() { + ok(!$('#modal-test').is(":visible"), 'modal hidden') + start() + div.remove() + }) + .modal("show") + }) + + test("should toggle when toggle is called", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal() + .bind("shown", function () { + ok($('#modal-test').is(":visible"), 'modal visible') + ok($('#modal-test').length, 'modal insterted into dom') + div.modal("toggle") + }) + .bind("hidden", function() { + ok(!$('#modal-test').is(":visible"), 'modal hidden') + start() + div.remove() + }) + .modal("toggle") + }) + + test("should remove from dom when click .close", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal() + .bind("shown", function () { + ok($('#modal-test').is(":visible"), 'modal visible') + ok($('#modal-test').length, 'modal insterted into dom') + div.find('.close').click() + }) + .bind("hidden", function() { + ok(!$('#modal-test').is(":visible"), 'modal hidden') + start() + div.remove() + }) + .modal("toggle") + }) + + test("should add backdrop when desired", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal({ backdrop:true }) + .bind("shown", function () { + equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom') + start() + div.remove() + $('.modal-backdrop').remove() + }) + .modal("show") + }) + + test("should not add backdrop when not desired", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal({backdrop:false}) + .bind("shown", function () { + equal($('.modal-backdrop').length, 0, 'modal backdrop not inserted into dom') + start() + div.remove() + }) + .modal("show") + }) + + test("should close backdrop when clicked", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal({backdrop:true}) + .bind("shown", function () { + equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom') + $('.modal-backdrop').click() + equal($('.modal-backdrop').length, 0, 'modal backdrop removed from dom') + start() + div.remove() + }) + .modal("show") + }) + + test("should not close backdrop when click disabled", function () { + stop() + $.support.transition = false + var div = $("") + div + .modal({backdrop: 'static'}) + .bind("shown", function () { + equal($('.modal-backdrop').length, 1, 'modal backdrop inserted into dom') + $('.modal-backdrop').click() + equal($('.modal-backdrop').length, 1, 'modal backdrop still in dom') + start() + div.remove() + $('.modal-backdrop').remove() + }) + .modal("show") + }) +}) diff --git a/assets/js/tests/unit/bootstrap-popover.js b/assets/js/tests/unit/bootstrap-popover.js new file mode 100644 index 0000000..3e13d2f --- /dev/null +++ b/assets/js/tests/unit/bootstrap-popover.js @@ -0,0 +1,76 @@ +$(function () { + + module("bootstrap-popover") + + test("should be defined on jquery object", function () { + var div = $('
    ') + ok(div.popover, 'popover method is defined') + }) + + test("should return element", function () { + var div = $('
    ') + ok(div.popover() == div, 'document.body returned') + }) + + test("should render popover element", function () { + $.support.transition = false + var popover = $('@mdo') + .appendTo('#qunit-runoff') + .popover() + .popover('show') + + ok($('.popover').length, 'popover was inserted') + popover.popover('hide') + ok(!$(".popover").length, 'popover removed') + $('#qunit-runoff').empty() + }) + + test("should store popover instance in popover data object", function () { + $.support.transition = false + var popover = $('@mdo') + .popover() + + ok(!!popover.data('popover'), 'popover instance exists') + }) + + test("should get title and content from options", function () { + $.support.transition = false + var popover = $('@fat') + .appendTo('#qunit-runoff') + .popover({ + title: function () { + return '@fat' + } + , content: function () { + return 'loves writing tests (╯°□°)╯︵ ┻━┻' + } + }) + + popover.popover('show') + + ok($('.popover').length, 'popover was inserted') + equals($('.popover .title').text(), '@fat', 'title correctly inserted') + equals($('.popover .content').text(), 'loves writing tests (╯°□°)╯︵ ┻━┻', 'content correctly inserted') + + popover.popover('hide') + ok(!$('.popover').length, 'popover was removed') + $('#qunit-runoff').empty() + }) + + test("should get title and content from attributes", function () { + $.support.transition = false + var popover = $('@mdo') + .appendTo('#qunit-runoff') + .popover() + .popover('show') + + ok($('.popover').length, 'popover was inserted') + equals($('.popover .title').text(), '@mdo', 'title correctly inserted') + equals($('.popover .content').text(), "loves data attributes (づ。◕‿‿◕。)づ ︵ ┻━┻", 'content correctly inserted') + + popover.popover('hide') + ok(!$('.popover').length, 'popover was removed') + $('#qunit-runoff').empty() + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-scrollspy.js b/assets/js/tests/unit/bootstrap-scrollspy.js new file mode 100644 index 0000000..b9b3090 --- /dev/null +++ b/assets/js/tests/unit/bootstrap-scrollspy.js @@ -0,0 +1,31 @@ +$(function () { + + module("bootstrap-scrollspy") + + test("should be defined on jquery object", function () { + ok($(document.body).scrollspy, 'scrollspy method is defined') + }) + + test("should return element", function () { + ok($(document.body).scrollspy()[0] == document.body, 'document.body returned') + }) + + test("should switch active class on scroll", function () { + var sectionHTML = '
    ' + , $section = $(sectionHTML).append('#qunit-runoff') + , topbarHTML ='
    ' + + '
    ' + + '
    ' + + '

    Bootstrap

    ' + + '' + + '
    ' + + '
    ' + + '
    ' + , $topbar = $(topbarHTML).topbar() + + ok(topbar.find('.active', true) + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-tabs.js b/assets/js/tests/unit/bootstrap-tabs.js new file mode 100644 index 0000000..1d024ec --- /dev/null +++ b/assets/js/tests/unit/bootstrap-tabs.js @@ -0,0 +1,77 @@ +$(function () { + + module("bootstrap-tabs") + + test("should be defined on jquery object", function () { + ok($(document.body).tabs, 'tabs method is defined') + }) + + test("should return element", function () { + ok($(document.body).tabs()[0] == document.body, 'document.body returned') + }) + + test("should activate element by tab id", function () { + var $tabsHTML = $('') + + + $('
    ').appendTo("#qunit-runoff") + + $tabsHTML.tabs().find('a').last().click() + equals($("#qunit-runoff").find('.active').attr('id'), "profile") + + $tabsHTML.tabs().find('a').first().click() + equals($("#qunit-runoff").find('.active').attr('id'), "home") + + $("#qunit-runoff").empty() + }) + + test("should activate element by pill id", function () { + var $pillsHTML = $('') + + + $('
    ').appendTo("#qunit-runoff") + + $pillsHTML.pills().find('a').last().click() + equals($("#qunit-runoff").find('.active').attr('id'), "profile") + + $pillsHTML.pills().find('a').first().click() + equals($("#qunit-runoff").find('.active').attr('id'), "home") + + $("#qunit-runoff").empty() + }) + + test( "should trigger change event on activate", function () { + var $tabsHTML = $('') + , $target + , count = 0 + , relatedTarget + , target + + $tabsHTML + .tabs() + .bind( "change", function (e) { + target = e.target + relatedTarget = e.relatedTarget + count++ + }) + + $target = $tabsHTML + .find('a') + .last() + .click() + + equals(relatedTarget, $tabsHTML.find('a').first()[0]) + equals(target, $target[0]) + equals(count, 1) + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/unit/bootstrap-twipsy.js b/assets/js/tests/unit/bootstrap-twipsy.js new file mode 100644 index 0000000..0400069 --- /dev/null +++ b/assets/js/tests/unit/bootstrap-twipsy.js @@ -0,0 +1,81 @@ +$(function () { + + module("bootstrap-twipsy") + + test("should be defined on jquery object", function () { + var div = $("
    ") + ok(div.twipsy, 'popover method is defined') + }) + + test("should return element", function () { + var div = $("
    ") + ok(div.twipsy() == div, 'document.body returned') + }) + + test("should expose default settings", function () { + ok(!!$.fn.twipsy.defaults, 'defaults is defined') + }) + + test("should remove title attribute", function () { + var twipsy = $('').twipsy() + ok(!twipsy.attr('title'), 'title tag was removed') + }) + + test("should add data attribute for referencing original title", function () { + var twipsy = $('').twipsy() + equals(twipsy.attr('data-original-title'), 'Another twipsy', 'original title preserved in data attribute') + }) + + test("should place tooltips relative to placement option", function () { + $.support.transition = false + var twipsy = $('') + .appendTo('#qunit-runoff') + .twipsy({placement: 'below'}) + .twipsy('show') + + ok($(".twipsy").hasClass('fade below in'), 'has correct classes applied') + twipsy.twipsy('hide') + ok(!$(".twipsy").length, 'twipsy removed') + $('#qunit-runoff').empty() + }) + + test("should add a fallback in cases where elements have no title tag", function () { + $.support.transition = false + var twipsy = $('') + .appendTo('#qunit-runoff') + .twipsy({fallback: '@fat'}) + .twipsy('show') + + equals($(".twipsy").text(), "@fat", 'has correct default text') + twipsy.twipsy('hide') + ok(!$(".twipsy").length, 'twipsy removed') + $('#qunit-runoff').empty() + }) + + test("should not allow html entities", function () { + $.support.transition = false + var twipsy = $('') + .appendTo('#qunit-runoff') + .twipsy() + .twipsy('show') + + ok(!$('.twipsy b').length, 'b tag was not inserted') + twipsy.twipsy('hide') + ok(!$(".twipsy").length, 'twipsy removed') + $('#qunit-runoff').empty() + }) + + test("should allow html entities if html option set to true", function () { + $.support.transition = false + var twipsy = $('') + .appendTo('#qunit-runoff') + .twipsy({html: true}) + .twipsy('show') + + ok($('.twipsy b').length, 'b tag was inserted') + twipsy.twipsy('hide') + ok(!$(".twipsy").length, 'twipsy removed') + $('#qunit-runoff').empty() + }) + +}) \ No newline at end of file diff --git a/assets/js/tests/vendor/qunit.css b/assets/js/tests/vendor/qunit.css new file mode 100644 index 0000000..c8eb02f --- /dev/null +++ b/assets/js/tests/vendor/qunit.css @@ -0,0 +1,232 @@ +/** + * QUnit - A JavaScript Unit Testing Framework + * + * http://docs.jquery.com/QUnit + * + * Copyright (c) 2011 John Resig, Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * or GPL (GPL-LICENSE.txt) licenses. + */ + +/** Font Family and Sizes */ + +#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult { + font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif; +} + +#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; } +#qunit-tests { font-size: smaller; } + + +/** Resets */ + +#qunit-tests, #qunit-tests ol, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult { + margin: 0; + padding: 0; +} + + +/** Header */ + +#qunit-header { + padding: 0.5em 0 0.5em 1em; + + color: #8699a4; + background-color: #0d3349; + + font-size: 1.5em; + line-height: 1em; + font-weight: normal; + + border-radius: 15px 15px 0 0; + -moz-border-radius: 15px 15px 0 0; + -webkit-border-top-right-radius: 15px; + -webkit-border-top-left-radius: 15px; +} + +#qunit-header a { + text-decoration: none; + color: #c2ccd1; +} + +#qunit-header a:hover, +#qunit-header a:focus { + color: #fff; +} + +#qunit-banner { + height: 5px; +} + +#qunit-testrunner-toolbar { + padding: 0.5em 0 0.5em 2em; + color: #5E740B; + background-color: #eee; +} + +#qunit-userAgent { + padding: 0.5em 0 0.5em 2.5em; + background-color: #2b81af; + color: #fff; + text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px; +} + + +/** Tests: Pass/Fail */ + +#qunit-tests { + list-style-position: inside; +} + +#qunit-tests li { + padding: 0.4em 0.5em 0.4em 2.5em; + border-bottom: 1px solid #fff; + list-style-position: inside; +} + +#qunit-tests.hidepass li.pass, #qunit-tests.hidepass li.running { + display: none; +} + +#qunit-tests li strong { + cursor: pointer; +} + +#qunit-tests li a { + padding: 0.5em; + color: #c2ccd1; + text-decoration: none; +} +#qunit-tests li a:hover, +#qunit-tests li a:focus { + color: #000; +} + +#qunit-tests ol { + margin-top: 0.5em; + padding: 0.5em; + + background-color: #fff; + + border-radius: 15px; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + + box-shadow: inset 0px 2px 13px #999; + -moz-box-shadow: inset 0px 2px 13px #999; + -webkit-box-shadow: inset 0px 2px 13px #999; +} + +#qunit-tests table { + border-collapse: collapse; + margin-top: .2em; +} + +#qunit-tests th { + text-align: right; + vertical-align: top; + padding: 0 .5em 0 0; +} + +#qunit-tests td { + vertical-align: top; +} + +#qunit-tests pre { + margin: 0; + white-space: pre-wrap; + word-wrap: break-word; +} + +#qunit-tests del { + background-color: #e0f2be; + color: #374e0c; + text-decoration: none; +} + +#qunit-tests ins { + background-color: #ffcaca; + color: #500; + text-decoration: none; +} + +/*** Test Counts */ + +#qunit-tests b.counts { color: black; } +#qunit-tests b.passed { color: #5E740B; } +#qunit-tests b.failed { color: #710909; } + +#qunit-tests li li { + margin: 0.5em; + padding: 0.4em 0.5em 0.4em 0.5em; + background-color: #fff; + border-bottom: none; + list-style-position: inside; +} + +/*** Passing Styles */ + +#qunit-tests li li.pass { + color: #5E740B; + background-color: #fff; + border-left: 26px solid #C6E746; +} + +#qunit-tests .pass { color: #528CE0; background-color: #D2E0E6; } +#qunit-tests .pass .test-name { color: #366097; } + +#qunit-tests .pass .test-actual, +#qunit-tests .pass .test-expected { color: #999999; } + +#qunit-banner.qunit-pass { background-color: #C6E746; } + +/*** Failing Styles */ + +#qunit-tests li li.fail { + color: #710909; + background-color: #fff; + border-left: 26px solid #EE5757; + white-space: pre; +} + +#qunit-tests > li:last-child { + border-radius: 0 0 15px 15px; + -moz-border-radius: 0 0 15px 15px; + -webkit-border-bottom-right-radius: 15px; + -webkit-border-bottom-left-radius: 15px; +} + +#qunit-tests .fail { color: #000000; background-color: #EE5757; } +#qunit-tests .fail .test-name, +#qunit-tests .fail .module-name { color: #000000; } + +#qunit-tests .fail .test-actual { color: #EE5757; } +#qunit-tests .fail .test-expected { color: green; } + +#qunit-banner.qunit-fail { background-color: #EE5757; } + + +/** Result */ + +#qunit-testresult { + padding: 0.5em 0.5em 0.5em 2.5em; + + color: #2b81af; + background-color: #D2E0E6; + + border-bottom: 1px solid white; +} + +/** Fixture */ + +#qunit-fixture { + position: absolute; + top: -10000px; + left: -10000px; +} + +/** Runoff */ + +#qunit-runoff { + display:none; +} \ No newline at end of file diff --git a/assets/js/tests/vendor/qunit.js b/assets/js/tests/vendor/qunit.js new file mode 100644 index 0000000..9047f97 --- /dev/null +++ b/assets/js/tests/vendor/qunit.js @@ -0,0 +1,1510 @@ +/** + * QUnit - A JavaScript Unit Testing Framework + * + * http://docs.jquery.com/QUnit + * + * Copyright (c) 2011 John Resig, Jörn Zaefferer + * Dual licensed under the MIT (MIT-LICENSE.txt) + * or GPL (GPL-LICENSE.txt) licenses. + */ + +(function(window) { + +var defined = { + setTimeout: typeof window.setTimeout !== "undefined", + sessionStorage: (function() { + try { + return !!sessionStorage.getItem; + } catch(e) { + return false; + } + })() +}; + +var testId = 0; + +var Test = function(name, testName, expected, testEnvironmentArg, async, callback) { + this.name = name; + this.testName = testName; + this.expected = expected; + this.testEnvironmentArg = testEnvironmentArg; + this.async = async; + this.callback = callback; + this.assertions = []; +}; +Test.prototype = { + init: function() { + var tests = id("qunit-tests"); + if (tests) { + var b = document.createElement("strong"); + b.innerHTML = "Running " + this.name; + var li = document.createElement("li"); + li.appendChild( b ); + li.className = "running"; + li.id = this.id = "test-output" + testId++; + tests.appendChild( li ); + } + }, + setup: function() { + if (this.module != config.previousModule) { + if ( config.previousModule ) { + QUnit.moduleDone( { + name: config.previousModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + } ); + } + config.previousModule = this.module; + config.moduleStats = { all: 0, bad: 0 }; + QUnit.moduleStart( { + name: this.module + } ); + } + + config.current = this; + this.testEnvironment = extend({ + setup: function() {}, + teardown: function() {} + }, this.moduleTestEnvironment); + if (this.testEnvironmentArg) { + extend(this.testEnvironment, this.testEnvironmentArg); + } + + QUnit.testStart( { + name: this.testName + } ); + + // allow utility functions to access the current test environment + // TODO why?? + QUnit.current_testEnvironment = this.testEnvironment; + + try { + if ( !config.pollution ) { + saveGlobal(); + } + + this.testEnvironment.setup.call(this.testEnvironment); + } catch(e) { + QUnit.ok( false, "Setup failed on " + this.testName + ": " + e.message ); + } + }, + run: function() { + if ( this.async ) { + QUnit.stop(); + } + + if ( config.notrycatch ) { + this.callback.call(this.testEnvironment); + return; + } + try { + this.callback.call(this.testEnvironment); + } catch(e) { + fail("Test " + this.testName + " died, exception and test follows", e, this.callback); + QUnit.ok( false, "Died on test #" + (this.assertions.length + 1) + ": " + e.message + " - " + QUnit.jsDump.parse(e) ); + // else next test will carry the responsibility + saveGlobal(); + + // Restart the tests if they're blocking + if ( config.blocking ) { + start(); + } + } + }, + teardown: function() { + try { + this.testEnvironment.teardown.call(this.testEnvironment); + checkPollution(); + } catch(e) { + QUnit.ok( false, "Teardown failed on " + this.testName + ": " + e.message ); + } + }, + finish: function() { + if ( this.expected && this.expected != this.assertions.length ) { + QUnit.ok( false, "Expected " + this.expected + " assertions, but " + this.assertions.length + " were run" ); + } + + var good = 0, bad = 0, + tests = id("qunit-tests"); + + config.stats.all += this.assertions.length; + config.moduleStats.all += this.assertions.length; + + if ( tests ) { + var ol = document.createElement("ol"); + + for ( var i = 0; i < this.assertions.length; i++ ) { + var assertion = this.assertions[i]; + + var li = document.createElement("li"); + li.className = assertion.result ? "pass" : "fail"; + li.innerHTML = assertion.message || (assertion.result ? "okay" : "failed"); + ol.appendChild( li ); + + if ( assertion.result ) { + good++; + } else { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + + // store result when possible + if ( QUnit.config.reorder && defined.sessionStorage ) { + if (bad) { + sessionStorage.setItem("qunit-" + this.module + "-" + this.testName, bad); + } else { + sessionStorage.removeItem("qunit-" + this.module + "-" + this.testName); + } + } + + if (bad == 0) { + ol.style.display = "none"; + } + + var b = document.createElement("strong"); + b.innerHTML = this.name + " (" + bad + ", " + good + ", " + this.assertions.length + ")"; + + var a = document.createElement("a"); + a.innerHTML = "Rerun"; + a.href = QUnit.url({ filter: getText([b]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); + + addEvent(b, "click", function() { + var next = b.nextSibling.nextSibling, + display = next.style.display; + next.style.display = display === "none" ? "block" : "none"; + }); + + addEvent(b, "dblclick", function(e) { + var target = e && e.target ? e.target : window.event.srcElement; + if ( target.nodeName.toLowerCase() == "span" || target.nodeName.toLowerCase() == "b" ) { + target = target.parentNode; + } + if ( window.location && target.nodeName.toLowerCase() === "strong" ) { + window.location = QUnit.url({ filter: getText([target]).replace(/\([^)]+\)$/, "").replace(/(^\s*|\s*$)/g, "") }); + } + }); + + var li = id(this.id); + li.className = bad ? "fail" : "pass"; + li.removeChild( li.firstChild ); + li.appendChild( b ); + li.appendChild( a ); + li.appendChild( ol ); + + } else { + for ( var i = 0; i < this.assertions.length; i++ ) { + if ( !this.assertions[i].result ) { + bad++; + config.stats.bad++; + config.moduleStats.bad++; + } + } + } + + try { + QUnit.reset(); + } catch(e) { + fail("reset() failed, following Test " + this.testName + ", exception and reset fn follows", e, QUnit.reset); + } + + QUnit.testDone( { + name: this.testName, + failed: bad, + passed: this.assertions.length - bad, + total: this.assertions.length + } ); + }, + + queue: function() { + var test = this; + synchronize(function() { + test.init(); + }); + function run() { + // each of these can by async + synchronize(function() { + test.setup(); + }); + synchronize(function() { + test.run(); + }); + synchronize(function() { + test.teardown(); + }); + synchronize(function() { + test.finish(); + }); + } + // defer when previous test run passed, if storage is available + var bad = QUnit.config.reorder && defined.sessionStorage && +sessionStorage.getItem("qunit-" + this.module + "-" + this.testName); + if (bad) { + run(); + } else { + synchronize(run); + }; + } + +}; + +var QUnit = { + + // call on start of module test to prepend name to all tests + module: function(name, testEnvironment) { + config.currentModule = name; + config.currentModuleTestEnviroment = testEnvironment; + }, + + asyncTest: function(testName, expected, callback) { + if ( arguments.length === 2 ) { + callback = expected; + expected = 0; + } + + QUnit.test(testName, expected, callback, true); + }, + + test: function(testName, expected, callback, async) { + var name = '' + testName + '', testEnvironmentArg; + + if ( arguments.length === 2 ) { + callback = expected; + expected = null; + } + // is 2nd argument a testEnvironment? + if ( expected && typeof expected === 'object') { + testEnvironmentArg = expected; + expected = null; + } + + if ( config.currentModule ) { + name = '' + config.currentModule + ": " + name; + } + + if ( !validTest(config.currentModule + ": " + testName) ) { + return; + } + + var test = new Test(name, testName, expected, testEnvironmentArg, async, callback); + test.module = config.currentModule; + test.moduleTestEnvironment = config.currentModuleTestEnviroment; + test.queue(); + }, + + /** + * Specify the number of expected assertions to gurantee that failed test (no assertions are run at all) don't slip through. + */ + expect: function(asserts) { + config.current.expected = asserts; + }, + + /** + * Asserts true. + * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" ); + */ + ok: function(a, msg) { + a = !!a; + var details = { + result: a, + message: msg + }; + msg = escapeHtml(msg); + QUnit.log(details); + config.current.assertions.push({ + result: a, + message: msg + }); + }, + + /** + * Checks that the first two arguments are equal, with an optional message. + * Prints out both actual and expected values. + * + * Prefered to ok( actual == expected, message ) + * + * @example equal( format("Received {0} bytes.", 2), "Received 2 bytes." ); + * + * @param Object actual + * @param Object expected + * @param String message (optional) + */ + equal: function(actual, expected, message) { + QUnit.push(expected == actual, actual, expected, message); + }, + + notEqual: function(actual, expected, message) { + QUnit.push(expected != actual, actual, expected, message); + }, + + deepEqual: function(actual, expected, message) { + QUnit.push(QUnit.equiv(actual, expected), actual, expected, message); + }, + + notDeepEqual: function(actual, expected, message) { + QUnit.push(!QUnit.equiv(actual, expected), actual, expected, message); + }, + + strictEqual: function(actual, expected, message) { + QUnit.push(expected === actual, actual, expected, message); + }, + + notStrictEqual: function(actual, expected, message) { + QUnit.push(expected !== actual, actual, expected, message); + }, + + raises: function(block, expected, message) { + var actual, ok = false; + + if (typeof expected === 'string') { + message = expected; + expected = null; + } + + try { + block(); + } catch (e) { + actual = e; + } + + if (actual) { + // we don't want to validate thrown error + if (!expected) { + ok = true; + // expected is a regexp + } else if (QUnit.objectType(expected) === "regexp") { + ok = expected.test(actual); + // expected is a constructor + } else if (actual instanceof expected) { + ok = true; + // expected is a validation function which returns true is validation passed + } else if (expected.call({}, actual) === true) { + ok = true; + } + } + + QUnit.ok(ok, message); + }, + + start: function() { + config.semaphore--; + if (config.semaphore > 0) { + // don't start until equal number of stop-calls + return; + } + if (config.semaphore < 0) { + // ignore if start is called more often then stop + config.semaphore = 0; + } + // A slight delay, to avoid any current callbacks + if ( defined.setTimeout ) { + window.setTimeout(function() { + if (config.semaphore > 0) { + return; + } + if ( config.timeout ) { + clearTimeout(config.timeout); + } + + config.blocking = false; + process(); + }, 13); + } else { + config.blocking = false; + process(); + } + }, + + stop: function(timeout) { + config.semaphore++; + config.blocking = true; + + if ( timeout && defined.setTimeout ) { + clearTimeout(config.timeout); + config.timeout = window.setTimeout(function() { + QUnit.ok( false, "Test timed out" ); + QUnit.start(); + }, timeout); + } + } +}; + +// Backwards compatibility, deprecated +QUnit.equals = QUnit.equal; +QUnit.same = QUnit.deepEqual; + +// Maintain internal state +var config = { + // The queue of tests to run + queue: [], + + // block until document ready + blocking: true, + + // when enabled, show only failing tests + // gets persisted through sessionStorage and can be changed in UI via checkbox + hidepassed: false, + + // by default, run previously failed tests first + // very useful in combination with "Hide passed tests" checked + reorder: true, + + // by default, modify document.title when suite is done + altertitle: true, + + urlConfig: ['noglobals', 'notrycatch'] +}; + +// Load paramaters +(function() { + var location = window.location || { search: "", protocol: "file:" }, + params = location.search.slice( 1 ).split( "&" ), + length = params.length, + urlParams = {}, + current; + + if ( params[ 0 ] ) { + for ( var i = 0; i < length; i++ ) { + current = params[ i ].split( "=" ); + current[ 0 ] = decodeURIComponent( current[ 0 ] ); + // allow just a key to turn on a flag, e.g., test.html?noglobals + current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true; + urlParams[ current[ 0 ] ] = current[ 1 ]; + } + } + + QUnit.urlParams = urlParams; + config.filter = urlParams.filter; + + // Figure out if we're running the tests from a server or not + QUnit.isLocal = !!(location.protocol === 'file:'); +})(); + +// Expose the API as global variables, unless an 'exports' +// object exists, in that case we assume we're in CommonJS +if ( typeof exports === "undefined" || typeof require === "undefined" ) { + extend(window, QUnit); + window.QUnit = QUnit; +} else { + extend(exports, QUnit); + exports.QUnit = QUnit; +} + +// define these after exposing globals to keep them in these QUnit namespace only +extend(QUnit, { + config: config, + + // Initialize the configuration options + init: function() { + extend(config, { + stats: { all: 0, bad: 0 }, + moduleStats: { all: 0, bad: 0 }, + started: +new Date, + updateRate: 1000, + blocking: false, + autostart: true, + autorun: false, + filter: "", + queue: [], + semaphore: 0 + }); + + var tests = id( "qunit-tests" ), + banner = id( "qunit-banner" ), + result = id( "qunit-testresult" ); + + if ( tests ) { + tests.innerHTML = ""; + } + + if ( banner ) { + banner.className = ""; + } + + if ( result ) { + result.parentNode.removeChild( result ); + } + + if ( tests ) { + result = document.createElement( "p" ); + result.id = "qunit-testresult"; + result.className = "result"; + tests.parentNode.insertBefore( result, tests ); + result.innerHTML = 'Running...
     '; + } + }, + + /** + * Resets the test setup. Useful for tests that modify the DOM. + * + * If jQuery is available, uses jQuery's html(), otherwise just innerHTML. + */ + reset: function() { + if ( window.jQuery ) { + jQuery( "#qunit-fixture" ).html( config.fixture ); + } else { + var main = id( 'qunit-fixture' ); + if ( main ) { + main.innerHTML = config.fixture; + } + } + }, + + /** + * Trigger an event on an element. + * + * @example triggerEvent( document.body, "click" ); + * + * @param DOMElement elem + * @param String type + */ + triggerEvent: function( elem, type, event ) { + if ( document.createEvent ) { + event = document.createEvent("MouseEvents"); + event.initMouseEvent(type, true, true, elem.ownerDocument.defaultView, + 0, 0, 0, 0, 0, false, false, false, false, 0, null); + elem.dispatchEvent( event ); + + } else if ( elem.fireEvent ) { + elem.fireEvent("on"+type); + } + }, + + // Safe object type checking + is: function( type, obj ) { + return QUnit.objectType( obj ) == type; + }, + + objectType: function( obj ) { + if (typeof obj === "undefined") { + return "undefined"; + + // consider: typeof null === object + } + if (obj === null) { + return "null"; + } + + var type = Object.prototype.toString.call( obj ) + .match(/^\[object\s(.*)\]$/)[1] || ''; + + switch (type) { + case 'Number': + if (isNaN(obj)) { + return "nan"; + } else { + return "number"; + } + case 'String': + case 'Boolean': + case 'Array': + case 'Date': + case 'RegExp': + case 'Function': + return type.toLowerCase(); + } + if (typeof obj === "object") { + return "object"; + } + return undefined; + }, + + push: function(result, actual, expected, message) { + var details = { + result: result, + message: message, + actual: actual, + expected: expected + }; + + message = escapeHtml(message) || (result ? "okay" : "failed"); + message = '' + message + ""; + expected = escapeHtml(QUnit.jsDump.parse(expected)); + actual = escapeHtml(QUnit.jsDump.parse(actual)); + var output = message + ''; + if (actual != expected) { + output += ''; + output += ''; + } + if (!result) { + var source = sourceFromStacktrace(); + if (source) { + details.source = source; + output += ''; + } + } + output += "
    Expected:
    ' + expected + '
    Result:
    ' + actual + '
    Diff:
    ' + QUnit.diff(expected, actual) +'
    Source:
    ' + escapeHtml(source) + '
    "; + + QUnit.log(details); + + config.current.assertions.push({ + result: !!result, + message: output + }); + }, + + url: function( params ) { + params = extend( extend( {}, QUnit.urlParams ), params ); + var querystring = "?", + key; + for ( key in params ) { + querystring += encodeURIComponent( key ) + "=" + + encodeURIComponent( params[ key ] ) + "&"; + } + return window.location.pathname + querystring.slice( 0, -1 ); + }, + + extend: extend, + id: id, + addEvent: addEvent, + + // Logging callbacks; all receive a single argument with the listed properties + // run test/logs.html for any related changes + begin: function() {}, + // done: { failed, passed, total, runtime } + done: function() {}, + // log: { result, actual, expected, message } + log: function() {}, + // testStart: { name } + testStart: function() {}, + // testDone: { name, failed, passed, total } + testDone: function() {}, + // moduleStart: { name } + moduleStart: function() {}, + // moduleDone: { name, failed, passed, total } + moduleDone: function() {} +}); + +if ( typeof document === "undefined" || document.readyState === "complete" ) { + config.autorun = true; +} + +QUnit.load = function() { + QUnit.begin({}); + + // Initialize the config, saving the execution queue + var oldconfig = extend({}, config); + QUnit.init(); + extend(config, oldconfig); + + config.blocking = false; + + var urlConfigHtml = '', len = config.urlConfig.length; + for ( var i = 0, val; i < len, val = config.urlConfig[i]; i++ ) { + config[val] = QUnit.urlParams[val]; + urlConfigHtml += ''; + } + + var userAgent = id("qunit-userAgent"); + if ( userAgent ) { + userAgent.innerHTML = navigator.userAgent; + } + var banner = id("qunit-header"); + if ( banner ) { + banner.innerHTML = ' ' + banner.innerHTML + ' ' + urlConfigHtml; + addEvent( banner, "change", function( event ) { + var params = {}; + params[ event.target.name ] = event.target.checked ? true : undefined; + window.location = QUnit.url( params ); + }); + } + + var toolbar = id("qunit-testrunner-toolbar"); + if ( toolbar ) { + var filter = document.createElement("input"); + filter.type = "checkbox"; + filter.id = "qunit-filter-pass"; + addEvent( filter, "click", function() { + var ol = document.getElementById("qunit-tests"); + if ( filter.checked ) { + ol.className = ol.className + " hidepass"; + } else { + var tmp = " " + ol.className.replace( /[\n\t\r]/g, " " ) + " "; + ol.className = tmp.replace(/ hidepass /, " "); + } + if ( defined.sessionStorage ) { + if (filter.checked) { + sessionStorage.setItem("qunit-filter-passed-tests", "true"); + } else { + sessionStorage.removeItem("qunit-filter-passed-tests"); + } + } + }); + if ( config.hidepassed || defined.sessionStorage && sessionStorage.getItem("qunit-filter-passed-tests") ) { + filter.checked = true; + var ol = document.getElementById("qunit-tests"); + ol.className = ol.className + " hidepass"; + } + toolbar.appendChild( filter ); + + var label = document.createElement("label"); + label.setAttribute("for", "qunit-filter-pass"); + label.innerHTML = "Hide passed tests"; + toolbar.appendChild( label ); + } + + var main = id('qunit-fixture'); + if ( main ) { + config.fixture = main.innerHTML; + } + + if (config.autostart) { + QUnit.start(); + } +}; + +addEvent(window, "load", QUnit.load); + +function done() { + config.autorun = true; + + // Log the last module results + if ( config.currentModule ) { + QUnit.moduleDone( { + name: config.currentModule, + failed: config.moduleStats.bad, + passed: config.moduleStats.all - config.moduleStats.bad, + total: config.moduleStats.all + } ); + } + + var banner = id("qunit-banner"), + tests = id("qunit-tests"), + runtime = +new Date - config.started, + passed = config.stats.all - config.stats.bad, + html = [ + 'Tests completed in ', + runtime, + ' milliseconds.
    ', + '', + passed, + ' tests of ', + config.stats.all, + ' passed, ', + config.stats.bad, + ' failed.' + ].join(''); + + if ( banner ) { + banner.className = (config.stats.bad ? "qunit-fail" : "qunit-pass"); + } + + if ( tests ) { + id( "qunit-testresult" ).innerHTML = html; + } + + if ( config.altertitle && typeof document !== "undefined" && document.title ) { + // show ✖ for good, ✔ for bad suite result in title + // use escape sequences in case file gets loaded with non-utf-8-charset + document.title = [ + (config.stats.bad ? "\u2716" : "\u2714"), + document.title.replace(/^[\u2714\u2716] /i, "") + ].join(" "); + } + + QUnit.done( { + failed: config.stats.bad, + passed: passed, + total: config.stats.all, + runtime: runtime + } ); +} + +function validTest( name ) { + var filter = config.filter, + run = false; + + if ( !filter ) { + return true; + } + + var not = filter.charAt( 0 ) === "!"; + if ( not ) { + filter = filter.slice( 1 ); + } + + if ( name.indexOf( filter ) !== -1 ) { + return !not; + } + + if ( not ) { + run = true; + } + + return run; +} + +// so far supports only Firefox, Chrome and Opera (buggy) +// could be extended in the future to use something like https://github.com/csnover/TraceKit +function sourceFromStacktrace() { + try { + throw new Error(); + } catch ( e ) { + if (e.stacktrace) { + // Opera + return e.stacktrace.split("\n")[6]; + } else if (e.stack) { + // Firefox, Chrome + return e.stack.split("\n")[4]; + } else if (e.sourceURL) { + // Safari, PhantomJS + // TODO sourceURL points at the 'throw new Error' line above, useless + //return e.sourceURL + ":" + e.line; + } + } +} + +function escapeHtml(s) { + if (!s) { + return ""; + } + s = s + ""; + return s.replace(/[\&"<>\\]/g, function(s) { + switch(s) { + case "&": return "&"; + case "\\": return "\\\\"; + case '"': return '\"'; + case "<": return "<"; + case ">": return ">"; + default: return s; + } + }); +} + +function synchronize( callback ) { + config.queue.push( callback ); + + if ( config.autorun && !config.blocking ) { + process(); + } +} + +function process() { + var start = (new Date()).getTime(); + + while ( config.queue.length && !config.blocking ) { + if ( config.updateRate <= 0 || (((new Date()).getTime() - start) < config.updateRate) ) { + config.queue.shift()(); + } else { + window.setTimeout( process, 13 ); + break; + } + } + if (!config.blocking && !config.queue.length) { + done(); + } +} + +function saveGlobal() { + config.pollution = []; + + if ( config.noglobals ) { + for ( var key in window ) { + config.pollution.push( key ); + } + } +} + +function checkPollution( name ) { + var old = config.pollution; + saveGlobal(); + + var newGlobals = diff( config.pollution, old ); + if ( newGlobals.length > 0 ) { + ok( false, "Introduced global variable(s): " + newGlobals.join(", ") ); + } + + var deletedGlobals = diff( old, config.pollution ); + if ( deletedGlobals.length > 0 ) { + ok( false, "Deleted global variable(s): " + deletedGlobals.join(", ") ); + } +} + +// returns a new Array with the elements that are in a but not in b +function diff( a, b ) { + var result = a.slice(); + for ( var i = 0; i < result.length; i++ ) { + for ( var j = 0; j < b.length; j++ ) { + if ( result[i] === b[j] ) { + result.splice(i, 1); + i--; + break; + } + } + } + return result; +} + +function fail(message, exception, callback) { + if ( typeof console !== "undefined" && console.error && console.warn ) { + console.error(message); + console.error(exception); + console.warn(callback.toString()); + + } else if ( window.opera && opera.postError ) { + opera.postError(message, exception, callback.toString); + } +} + +function extend(a, b) { + for ( var prop in b ) { + if ( b[prop] === undefined ) { + delete a[prop]; + } else { + a[prop] = b[prop]; + } + } + + return a; +} + +function addEvent(elem, type, fn) { + if ( elem.addEventListener ) { + elem.addEventListener( type, fn, false ); + } else if ( elem.attachEvent ) { + elem.attachEvent( "on" + type, fn ); + } else { + fn(); + } +} + +function id(name) { + return !!(typeof document !== "undefined" && document && document.getElementById) && + document.getElementById( name ); +} + +// Test for equality any JavaScript type. +// Discussions and reference: http://philrathe.com/articles/equiv +// Test suites: http://philrathe.com/tests/equiv +// Author: Philippe Rathé +QUnit.equiv = function () { + + var innerEquiv; // the real equiv function + var callers = []; // stack to decide between skip/abort functions + var parents = []; // stack to avoiding loops from circular referencing + + // Call the o related callback with the given arguments. + function bindCallbacks(o, callbacks, args) { + var prop = QUnit.objectType(o); + if (prop) { + if (QUnit.objectType(callbacks[prop]) === "function") { + return callbacks[prop].apply(callbacks, args); + } else { + return callbacks[prop]; // or undefined + } + } + } + + var callbacks = function () { + + // for string, boolean, number and null + function useStrictEquality(b, a) { + if (b instanceof a.constructor || a instanceof b.constructor) { + // to catch short annotaion VS 'new' annotation of a + // declaration + // e.g. var i = 1; + // var j = new Number(1); + return a == b; + } else { + return a === b; + } + } + + return { + "string" : useStrictEquality, + "boolean" : useStrictEquality, + "number" : useStrictEquality, + "null" : useStrictEquality, + "undefined" : useStrictEquality, + + "nan" : function(b) { + return isNaN(b); + }, + + "date" : function(b, a) { + return QUnit.objectType(b) === "date" + && a.valueOf() === b.valueOf(); + }, + + "regexp" : function(b, a) { + return QUnit.objectType(b) === "regexp" + && a.source === b.source && // the regex itself + a.global === b.global && // and its modifers + // (gmi) ... + a.ignoreCase === b.ignoreCase + && a.multiline === b.multiline; + }, + + // - skip when the property is a method of an instance (OOP) + // - abort otherwise, + // initial === would have catch identical references anyway + "function" : function() { + var caller = callers[callers.length - 1]; + return caller !== Object && typeof caller !== "undefined"; + }, + + "array" : function(b, a) { + var i, j, loop; + var len; + + // b could be an object literal here + if (!(QUnit.objectType(b) === "array")) { + return false; + } + + len = a.length; + if (len !== b.length) { // safe and faster + return false; + } + + // track reference to avoid circular references + parents.push(a); + for (i = 0; i < len; i++) { + loop = false; + for (j = 0; j < parents.length; j++) { + if (parents[j] === a[i]) { + loop = true;// dont rewalk array + } + } + if (!loop && !innerEquiv(a[i], b[i])) { + parents.pop(); + return false; + } + } + parents.pop(); + return true; + }, + + "object" : function(b, a) { + var i, j, loop; + var eq = true; // unless we can proove it + var aProperties = [], bProperties = []; // collection of + // strings + + // comparing constructors is more strict than using + // instanceof + if (a.constructor !== b.constructor) { + return false; + } + + // stack constructor before traversing properties + callers.push(a.constructor); + // track reference to avoid circular references + parents.push(a); + + for (i in a) { // be strict: don't ensures hasOwnProperty + // and go deep + loop = false; + for (j = 0; j < parents.length; j++) { + if (parents[j] === a[i]) + loop = true; // don't go down the same path + // twice + } + aProperties.push(i); // collect a's properties + + if (!loop && !innerEquiv(a[i], b[i])) { + eq = false; + break; + } + } + + callers.pop(); // unstack, we are done + parents.pop(); + + for (i in b) { + bProperties.push(i); // collect b's properties + } + + // Ensures identical properties name + return eq + && innerEquiv(aProperties.sort(), bProperties + .sort()); + } + }; + }(); + + innerEquiv = function() { // can take multiple arguments + var args = Array.prototype.slice.apply(arguments); + if (args.length < 2) { + return true; // end transition + } + + return (function(a, b) { + if (a === b) { + return true; // catch the most you can + } else if (a === null || b === null || typeof a === "undefined" + || typeof b === "undefined" + || QUnit.objectType(a) !== QUnit.objectType(b)) { + return false; // don't lose time with error prone cases + } else { + return bindCallbacks(a, callbacks, [ b, a ]); + } + + // apply transition with (1..n) arguments + })(args[0], args[1]) + && arguments.callee.apply(this, args.splice(1, + args.length - 1)); + }; + + return innerEquiv; + +}(); + +/** + * jsDump Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | + * http://flesler.blogspot.com Licensed under BSD + * (http://www.opensource.org/licenses/bsd-license.php) Date: 5/15/2008 + * + * @projectDescription Advanced and extensible data dumping for Javascript. + * @version 1.0.0 + * @author Ariel Flesler + * @link {http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html} + */ +QUnit.jsDump = (function() { + function quote( str ) { + return '"' + str.toString().replace(/"/g, '\\"') + '"'; + }; + function literal( o ) { + return o + ''; + }; + function join( pre, arr, post ) { + var s = jsDump.separator(), + base = jsDump.indent(), + inner = jsDump.indent(1); + if ( arr.join ) + arr = arr.join( ',' + s + inner ); + if ( !arr ) + return pre + post; + return [ pre, inner + arr, base + post ].join(s); + }; + function array( arr, stack ) { + var i = arr.length, ret = Array(i); + this.up(); + while ( i-- ) + ret[i] = this.parse( arr[i] , undefined , stack); + this.down(); + return join( '[', ret, ']' ); + }; + + var reName = /^function (\w+)/; + + var jsDump = { + parse:function( obj, type, stack ) { //type is used mostly internally, you can fix a (custom)type in advance + stack = stack || [ ]; + var parser = this.parsers[ type || this.typeOf(obj) ]; + type = typeof parser; + var inStack = inArray(obj, stack); + if (inStack != -1) { + return 'recursion('+(inStack - stack.length)+')'; + } + //else + if (type == 'function') { + stack.push(obj); + var res = parser.call( this, obj, stack ); + stack.pop(); + return res; + } + // else + return (type == 'string') ? parser : this.parsers.error; + }, + typeOf:function( obj ) { + var type; + if ( obj === null ) { + type = "null"; + } else if (typeof obj === "undefined") { + type = "undefined"; + } else if (QUnit.is("RegExp", obj)) { + type = "regexp"; + } else if (QUnit.is("Date", obj)) { + type = "date"; + } else if (QUnit.is("Function", obj)) { + type = "function"; + } else if (typeof obj.setInterval !== undefined && typeof obj.document !== "undefined" && typeof obj.nodeType === "undefined") { + type = "window"; + } else if (obj.nodeType === 9) { + type = "document"; + } else if (obj.nodeType) { + type = "node"; + } else if (typeof obj === "object" && typeof obj.length === "number" && obj.length >= 0) { + type = "array"; + } else { + type = typeof obj; + } + return type; + }, + separator:function() { + return this.multiline ? this.HTML ? '
    ' : '\n' : this.HTML ? ' ' : ' '; + }, + indent:function( extra ) {// extra can be a number, shortcut for increasing-calling-decreasing + if ( !this.multiline ) + return ''; + var chr = this.indentChar; + if ( this.HTML ) + chr = chr.replace(/\t/g,' ').replace(/ /g,' '); + return Array( this._depth_ + (extra||0) ).join(chr); + }, + up:function( a ) { + this._depth_ += a || 1; + }, + down:function( a ) { + this._depth_ -= a || 1; + }, + setParser:function( name, parser ) { + this.parsers[name] = parser; + }, + // The next 3 are exposed so you can use them + quote:quote, + literal:literal, + join:join, + // + _depth_: 1, + // This is the list of parsers, to modify them, use jsDump.setParser + parsers:{ + window: '[Window]', + document: '[Document]', + error:'[ERROR]', //when no parser is found, shouldn't happen + unknown: '[Unknown]', + 'null':'null', + 'undefined':'undefined', + 'function':function( fn ) { + var ret = 'function', + name = 'name' in fn ? fn.name : (reName.exec(fn)||[])[1];//functions never have name in IE + if ( name ) + ret += ' ' + name; + ret += '('; + + ret = [ ret, QUnit.jsDump.parse( fn, 'functionArgs' ), '){'].join(''); + return join( ret, QUnit.jsDump.parse(fn,'functionCode'), '}' ); + }, + array: array, + nodelist: array, + arguments: array, + object:function( map, stack ) { + var ret = [ ]; + QUnit.jsDump.up(); + for ( var key in map ) { + var val = map[key]; + ret.push( QUnit.jsDump.parse(key,'key') + ': ' + QUnit.jsDump.parse(val, undefined, stack)); + } + QUnit.jsDump.down(); + return join( '{', ret, '}' ); + }, + node:function( node ) { + var open = QUnit.jsDump.HTML ? '<' : '<', + close = QUnit.jsDump.HTML ? '>' : '>'; + + var tag = node.nodeName.toLowerCase(), + ret = open + tag; + + for ( var a in QUnit.jsDump.DOMAttrs ) { + var val = node[QUnit.jsDump.DOMAttrs[a]]; + if ( val ) + ret += ' ' + a + '=' + QUnit.jsDump.parse( val, 'attribute' ); + } + return ret + close + open + '/' + tag + close; + }, + functionArgs:function( fn ) {//function calls it internally, it's the arguments part of the function + var l = fn.length; + if ( !l ) return ''; + + var args = Array(l); + while ( l-- ) + args[l] = String.fromCharCode(97+l);//97 is 'a' + return ' ' + args.join(', ') + ' '; + }, + key:quote, //object calls it internally, the key part of an item in a map + functionCode:'[code]', //function calls it internally, it's the content of the function + attribute:quote, //node calls it internally, it's an html attribute value + string:quote, + date:quote, + regexp:literal, //regex + number:literal, + 'boolean':literal + }, + DOMAttrs:{//attributes to dump from nodes, name=>realName + id:'id', + name:'name', + 'class':'className' + }, + HTML:false,//if true, entities are escaped ( <, >, \t, space and \n ) + indentChar:' ',//indentation unit + multiline:true //if true, items in a collection, are separated by a \n, else just a space. + }; + + return jsDump; +})(); + +// from Sizzle.js +function getText( elems ) { + var ret = "", elem; + + for ( var i = 0; elems[i]; i++ ) { + elem = elems[i]; + + // Get the text from text nodes and CDATA nodes + if ( elem.nodeType === 3 || elem.nodeType === 4 ) { + ret += elem.nodeValue; + + // Traverse everything else, except comment nodes + } else if ( elem.nodeType !== 8 ) { + ret += getText( elem.childNodes ); + } + } + + return ret; +}; + +//from jquery.js +function inArray( elem, array ) { + if ( array.indexOf ) { + return array.indexOf( elem ); + } + + for ( var i = 0, length = array.length; i < length; i++ ) { + if ( array[ i ] === elem ) { + return i; + } + } + + return -1; +} + +/* + * Javascript Diff Algorithm + * By John Resig (http://ejohn.org/) + * Modified by Chu Alan "sprite" + * + * Released under the MIT license. + * + * More Info: + * http://ejohn.org/projects/javascript-diff-algorithm/ + * + * Usage: QUnit.diff(expected, actual) + * + * QUnit.diff("the quick brown fox jumped over", "the quick fox jumps over") == "the quick brown fox jumped jumps over" + */ +QUnit.diff = (function() { + function diff(o, n) { + var ns = {}; + var os = {}; + + for (var i = 0; i < n.length; i++) { + if (ns[n[i]] == null) + ns[n[i]] = { + rows: [], + o: null + }; + ns[n[i]].rows.push(i); + } + + for (var i = 0; i < o.length; i++) { + if (os[o[i]] == null) + os[o[i]] = { + rows: [], + n: null + }; + os[o[i]].rows.push(i); + } + + for (var i in ns) { + if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) { + n[ns[i].rows[0]] = { + text: n[ns[i].rows[0]], + row: os[i].rows[0] + }; + o[os[i].rows[0]] = { + text: o[os[i].rows[0]], + row: ns[i].rows[0] + }; + } + } + + for (var i = 0; i < n.length - 1; i++) { + if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null && + n[i + 1] == o[n[i].row + 1]) { + n[i + 1] = { + text: n[i + 1], + row: n[i].row + 1 + }; + o[n[i].row + 1] = { + text: o[n[i].row + 1], + row: i + 1 + }; + } + } + + for (var i = n.length - 1; i > 0; i--) { + if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null && + n[i - 1] == o[n[i].row - 1]) { + n[i - 1] = { + text: n[i - 1], + row: n[i].row - 1 + }; + o[n[i].row - 1] = { + text: o[n[i].row - 1], + row: i - 1 + }; + } + } + + return { + o: o, + n: n + }; + } + + return function(o, n) { + o = o.replace(/\s+$/, ''); + n = n.replace(/\s+$/, ''); + var out = diff(o == "" ? [] : o.split(/\s+/), n == "" ? [] : n.split(/\s+/)); + + var str = ""; + + var oSpace = o.match(/\s+/g); + if (oSpace == null) { + oSpace = [" "]; + } + else { + oSpace.push(" "); + } + var nSpace = n.match(/\s+/g); + if (nSpace == null) { + nSpace = [" "]; + } + else { + nSpace.push(" "); + } + + if (out.n.length == 0) { + for (var i = 0; i < out.o.length; i++) { + str += '' + out.o[i] + oSpace[i] + ""; + } + } + else { + if (out.n[0].text == null) { + for (n = 0; n < out.o.length && out.o[n].text == null; n++) { + str += '' + out.o[n] + oSpace[n] + ""; + } + } + + for (var i = 0; i < out.n.length; i++) { + if (out.n[i].text == null) { + str += '' + out.n[i] + nSpace[i] + ""; + } + else { + var pre = ""; + + for (n = out.n[i].row + 1; n < out.o.length && out.o[n].text == null; n++) { + pre += '' + out.o[n] + oSpace[n] + ""; + } + str += " " + out.n[i].text + nSpace[i] + pre; + } + } + } + + return str; + }; +})(); + +})(this); \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..3e4d7ff --- /dev/null +++ b/index.html @@ -0,0 +1,79 @@ + + + + + Bootstrap, from Twitter + + + + + + + + + + + + + + + + + + + +
    +
    +
    + Project name + +
    +
    +
    + +
    + + +
    +

    Hello, world!

    +

    Vestibulum id ligula porta felis euismod semper. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.

    +

    Learn more »

    +
    + + +
    +
    +

    Heading

    +

    Etiam porta sem malesuada magna mollis euismod. Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Aenean eu leo quam. Pellentesque ornare sem lacinia quam venenatis vestibulum. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit.

    +

    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 »

    +
    +
    + +
    +

    © Company 2011

    +
    + +
    + + + diff --git a/original_index.html b/original_index.html new file mode 100644 index 0000000..5cdf64a --- /dev/null +++ b/original_index.html @@ -0,0 +1,2037 @@ + + + + + Bootstrap, from Twitter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +

    Bootstrap, from Twitter

    +

    + Bootstrap is a toolkit from Twitter designed to kickstart development of webapps and sites.
    + It includes base CSS and HTML for typography, forms, buttons, tables, grids, navigation, and more.
    +

    +

    Nerd alert: Bootstrap is built with Less and was designed to work out of the gate with modern browsers in mind.

    +
    +
    +
    + + +
    +
    +
    +
    +
    Hotlink the CSS
    +

    For the quickest and easiest start, just copy this snippet into your webpage.

    +
    + +
    +
    +
    +
    Use it with Less
    +

    A fan of using Less? No problem, just clone the repo and add these lines:

    +
    + +
    +
    +
    +
    Fork on GitHub
    +

    Download, fork, pull, file issues, and more with the official Bootstrap repo on Github.

    +

    Bootstrap on GitHub »

    +

    Currently v1.3.0

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

    History

    +

    Engineers at Twitter have historically used almost any library they were familiar with to meet front-end requirements. Bootstrap began as an answer to the challenges that presented. With the help of many awesome folks, Bootstrap has grown significantly.

    +

    Read more on dev.twitter.com ›

    +

    + + +

    +
    +
    +

    Browser support

    +

    Bootstrap is tested and supported in major modern browsers like Chrome, Safari, Internet Explorer, and Firefox.

    + Tested and supported in Chrome, Safari, Internet Explorer, and Firefox +
      +
    • Latest Safari
    • +
    • Latest Google Chrome
    • +
    • Firefox 4+
    • +
    • Internet Explorer 7+
    • +
    • Opera 11
    • +
    +
    +
    +

    What's included

    +

    Bootstrap comes complete with compiled CSS, uncompiled, and example templates.

    + +
    +
    + +
    +
    +

    Quick-start examples

    +

    Need some quick templates? Check out these basic examples we've put together:

    +
      +
    • + Simple three-column layout with hero unit +
    • +
    • + Fluid layout with static sidebar +
    • +
    • + Simple hanging container for apps +
    • +
    +
    +
    +
    + + + + +
    + +
    +
    +

    Default grid

    +

    The default grid system provided as part of Bootstrap is a 940px wide 16-column grid. It’s a flavor of the popular 960 grid system, but without the additional margin/padding on the left and right sides.

    +
    +
    +

    Example grid markup

    +

    As shown here, a basic layout can be created with two "columns," each spanning a number of the 16 foundational columns we defined as part of our grid system. See the examples below for more variations.

    +
    +<div class="row">
    +  <div class="span6">
    +    ...
    +  </div>
    +  <div class="span10">
    +    ...
    +  </div>
    +</div>
    +
    +
    +
    +
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    1
    +
    +
    +
    2
    +
    2
    +
    2
    +
    2
    +
    2
    +
    2
    +
    2
    +
    2
    +
    +
    +
    3
    +
    3
    +
    3
    +
    3
    +
    3
    +
    1
    +
    +
    +
    4
    +
    4
    +
    4
    +
    4
    +
    +
    +
    1/3
    +
    1/3
    +
    1/3
    +
    +
    +
    1/3
    +
    2/3
    +
    +
    +
    4
    +
    6
    +
    6
    +
    +
    +
    8
    +
    8
    +
    +
    +
    5
    +
    11
    +
    +
    +
    16
    +
    + +
    + +

    Offsetting columns

    +
    +
    4
    +
    8 offset 4
    +
    +
    +
    1/3 offset 2/3s
    +
    +
    +
    4 offset 4
    +
    4 offset 4
    +
    +
    +
    5 offset 3
    +
    5 offset 3
    +
    +
    +
    10 offset 6
    +
    + +
    + +
    +
    +

    Nesting columns

    +

    Nest your content if you must by creating a .row within an existing column.

    +
    +
    +

    Example of nested columns

    +
    +
    + Level 1 of column +
    +
    + Level 2 +
    +
    + Level 2 +
    +
    +
    +
    +
    +<div class="row">
    +  <div class="span12">
    +    Level 1 of column
    +    <div class="row">
    +      <div class="span6">
    +        Level 2
    +      </div>
    +      <div class="span6">
    +        Level 2
    +      </div>
    +    </div>
    +  </div>
    +</div>
    +
    +
    +
    + +
    + +
    +
    +

    Roll your own grid

    +

    Built into Bootstrap are a handful of variables for customizing the default 940px grid system. With a bit of customization, you can modify the size of columns, their gutters, and the container they reside in.

    +
    +
    +

    Inside the grid

    +

    The variables needed to modify the grid system currently all reside in variables.less.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    VariableDefault valueDescription
    @gridColumns16The number of columns within the grid
    @gridColumnWidth40pxThe width of each column within the grid
    @gridGutterWidth20pxThe negative space between each column
    @siteWidthComputed sum of all columns and guttersWe use some basic match to count the number of columns and gutters and set the width of the .fixed-container() mixin.
    +

    Now to customize

    +

    Modifying the grid means changing the three @grid-* variables and recompiling the Less files.

    +

    Bootstrap comes equipped to handle a grid system with up to 24 columns; the default is just 16. Here's how your grid variables would look customized to a 24-column grid.

    +
    @gridColumns:       24;
    +@gridColumnWidth:   20px;
    +@gridGutterWidth:   20px;
    +

    Once recompiled, you'll be set!

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

    Fixed layout

    +

    The default and simple 940px-wide, centered layout for just about any website or page provided by a single <div.container>.

    +
    +
    +
    +
    +<body>
    +  <div class="container">
    +    ...
    +  </div>
    +</body>
    +
    +
    +
    +

    Fluid layout

    +

    An alternative, flexible fluid page structure with min- and max-widths and a left-hand sidebar. Great for apps and docs.

    +
    +
    +
    +
    +
    +<body>
    +  <div class="container-fluid">
    +    <div class="sidebar">
    +      ...
    +    </div>
    +    <div class="content">
    +      ...
    +    </div>
    +  </div>
    +</body>
    +
    +
    +
    +
    + + + + +
    + + + +
    +
    +

    Headings & copy

    +

    A standard typographic hierarchy for structuring your webpages.

    +

    The entire typographic grid is based on two Less variables in our variables.less file: @basefont and @baseline. The first is the base font-size used throughout and the second is the base line-height.

    +

    We use those variables, and some math, to create the margins, paddings, and line-heights of all our type and more.

    +
    +
    +

    h1. Heading 1

    +

    h2. Heading 2

    +

    h3. Heading 3

    +

    h4. Heading 4

    +
    h5. Heading 5
    +
    h6. Heading 6
    +
    +
    +

    Example paragraph

    +

    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 ut id elit.

    +

    Example heading Has sub-heading…

    +
    +
    + + +
    +
    +

    Misc. elements

    +

    Using emphasis, addresses, & abbreviations

    +

    + <strong> + <em> + <address> + <abbr> +

    +
    +
    +

    When to use

    +

    Emphasis tags (<strong> and <em>) should be used to indicate additional importance or emphasis of a word or phrase relative to its surrounding copy. Use <strong> for importance and <em> for stress emphasis.

    +

    Emphasis in a paragraph

    +

    Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Maecenas faucibus mollis interdum. Nulla vitae elit libero, a pharetra augue.

    +

    Note: It's still okay to use <b> and <i> tags in HTML5 and they don't have to be styled bold and italic, respectively (although if there is a more semantic element, use it). <b> is meant to highlight words or phrases without conveying additional importance, while <i> is mostly for voice, technical terms, etc.

    +

    Addresses

    +

    The <address> element is used for contact information for its nearest ancestor, or the entire body of work. Here are two examples of how it could be used:

    + +
    +
    +
    + Twitter, Inc.
    + 795 Folsom Ave, Suite 600
    + San Francisco, CA 94107
    + P: (123) 456-7890 +
    +
    +
    +
    + Full Name
    + first.last@gmail.com +
    +
    +
    + +

    Note: Each line in an <address> must end with a line-break (<br />) or be wrapped in a block-level tag (e.g., <p>) to properly structure the content.

    +

    Abbreviations

    +

    For abbreviations and acronyms, use the <abbr> tag (<acronym> is deprecated in HTML5). Put the shorthand form within the tag and set a title for the complete name.

    +
    +
    + + +
    +
    +

    Blockquotes

    +

    + <blockquote> + <p> + <small> +

    +
    +
    +

    How to quote

    +

    To include a blockquote, wrap <blockquote> around <p> and <small> tags. Use the <small> element to cite your source and you'll get an em dash &mdash; before it.

    +
    +

    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.

    + Dr. Julius Hibbert +
    +
    +<blockquote>
    +  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante venenatis dapibus posuere velit aliquet.</p>
    +  <small>Dr. Julius Hibbert</small>
    +</blockquote>
    +
    +
    +
    + +

    Lists

    +
    +
    +

    Unordered <ul>

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

    Unstyled <ul.unstyled>

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

    Ordered <ol>

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

    Description dl

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

    Code

    +

    + <code> + <pre> +

    +

    Pimp your code in style with two simple tags. For even more awesomeness through javascript, drop in Google's code prettify library and you're set.

    +
    +
    +

    Presenting code

    +

    Code, blocks of or just snippets inline, can be displayed with style just by wrapping in the right tag. For blocks of code spanning multiple lines, use the <pre> element. For inline code, use the <code> element.

    + + + + + + + + + + + + + + + + + + + + + +
    ElementResult
    <code>In a line of text like this, your wrapped code will look like this <html> element.
    <pre> +
    <div>
    +  <h1>Heading</h1>
    +  <p>Something right here...</p>
    +</div>
    +

    Note: Be sure to keep code within <pre> tags as close to the left as possible; it will render all tabs.

    +
    <pre class="prettyprint"> +

    Using the google-code-prettify library, your blocks of code get a slightly different visual style and automatic syntax highlighting.

    +
    <div>
    +  <h1>Heading</h1>
    +  <p>Something right here...</p>
    +</div>
    +

    Download google-code-prettify and view the readme for how to use.

    +
    +
    +
    + + +
    +
    +

    Inline labels

    +

    + <span class="label"> +

    +

    Call attention to or flag any phrase in your body text.

    +
    +
    +

    Label anything

    +

    Ever needed one of those fancy New! or Important flags when writing code? Well, now you have them. Here's what's included by default:

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    LabelResult
    + <span class="label">Default</span> + + Default +
    + <span class="label success">New</span> + + New +
    + <span class="label warning">Warning</span> + + Warning +
    + <span class="label important">Important</span> + + Important +
    + <span class="label notice">Notice</span> + + Notice +
    +
    +
    + +
    + + + + +
    + + +
    +
    +

    Media grid

    +

    Display thumbnails of varying sizes on pages with a low HTML footprint and minimal styles.

    +
    +
    +

    Example thumbnails

    +

    Thumbnails in the .media-grid can be any size, but they work best when mapped directly to the built-in Bootstrap grid system. Image widths like 90, 210, and 330 combine with a few pixels of padding to equal the .span2, .span4, and .span6 column sizes.

    +

    Large

    + +

    Medium

    + +

    Small

    + +

    Coding them

    +

    Media grids are easy to use and rather simple on the markup side. Their dimensions are purely based on the size of the images included.

    +
    +<ul class="media-grid">
    +  <li>
    +    <a href="#">
    +      <img class="thumbnail" src="http://placehold.it/330x230" alt="">
    +    </a>
    +  </li>
    +  <li>
    +    <a href="#">
    +      <img class="thumbnail" src="http://placehold.it/330x230" alt="">
    +    </a>
    +  </li>
    +</ul>
    +
    +
    +
    +
    + + + + +
    + + +
    +
    +

    Building tables

    +

    + <table> + <thead> + <tbody> + <tr> + <th> + <td> + <colspan> + <caption> +

    +

    Tables are great—for a lot of things. Great tables, however, need a bit of markup love to be useful, scalable, and readable (at the code level). Here are a few tips to help.

    +

    Always wrap your column headers in a <thead> such that hierarchy is <thead> > <tr> > <th>.

    +

    Similar to the column headers, all your table’s body content should be wrapped in a <tbody> so your hierarchy is <tbody> > <tr> > <td>.

    +
    +
    +

    Example: Default table styles

    +

    All tables will be automatically styled with only the essential borders to ensure readability and maintain structure. No need to add extra classes or attributes.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameLanguage
    1SomeOneEnglish
    2JoeSixpackEnglish
    3StuDentCode
    +
    +<table>
    +  ...
    +</table>
    +

    Example: Condensed table

    +

    For tables that require more data in tighter spaces, use the condensed flavor that cuts padding in half. It can also be used in conjunction with borders and zebra-stripes, just like the default table styles.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameLanguage
    1SomeOneEnglish
    2JoeSixpackEnglish
    3StuDentCode
    + +

    Example: Bordered table

    +

    Make your tables look just a wee bit sleeker by rounding their corners and adding borders on all sides.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameLanguage
    1SomeOneEnglish
    2JoeSixpackEnglish
    3StuDentCode
    +
    +<table class="bordered-table">
    +  ...
    +</table>
    +

    Example: Zebra-striped

    +

    Get a little fancy with your tables by adding zebra-striping—just add the .zebra-striped class.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameLanguage
    1SomeOneEnglish
    2JoeSixpackEnglish
    3StuDentCode
    + span 4 columns +
    + span 2 columns + + span 2 columns +
    +

    Note: Zebra-striping is a progressive enhancement not available for older browsers like IE8 and below.

    +
    +<table class="zebra-striped">
    +  ...
    +</table>
    +

    Example: Zebra-striped w/ TableSorter.js

    +

    Taking the previous example, we improve the usefulness of our tables by providing sorting functionality via jQuery and the Tablesorter plugin. Click any column’s header to change the sort.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    #First NameLast NameLanguage
    1YourOneEnglish
    2JoeSixpackEnglish
    3StuDentCode
    +
    +<script src="js/jquery/jquery.tablesorter.min.js"></script>
    +<script >
    +  $(function() {
    +    $("table#sortTableExample").tablesorter({ sortList: [[1,0]] });
    +  });
    +</script>
    +<table class="zebra-striped">
    +  ...
    +</table>
    +
    +
    +
    + + + + +
    + +
    +
    +

    Default styles

    +

    All forms are given default styles to present them in a readable and scalable way. Styles are provided for text inputs, select lists, textareas, radio buttons and checkboxes, and buttons.

    +
    +
    +
    +
    + Example form legend +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + Some value here +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + + Small snippet of help text +
    +
    +
    + +
    + + Success! +
    +
    +
    + +
    + + Ruh roh! +
    +
    +
    +
    + Example form legend +
    + +
    +
    + @ + +
    + Here's some help text +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    + +
    + +
    +
    +
    +
    + Example form legend +
    + +
    +
      +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    • + +
    • +
    + + Note: Labels surround all the options for much larger click areas and a more usable form. + +
    +
    +
    + +
    +
    + + + to + + + All times are shown as Pacific Standard Time (GMT -08:00). +
    +
    +
    +
    + +
    + + + Block of help text to describe the field above if need be. + +
    +
    +
    + +
    +
      +
    • + +
    • +
    • + +
    • +
    +
    +
    +
    +   +
    +
    +
    +
    +
    + +
    + +
    +
    +

    Stacked forms

    +

    Add .form-stacked to your form’s HTML and you’ll have labels on top of their fields instead of to their left. This works great if your forms are short or you have two columns of inputs for heavier forms.

    +
    +
    +
    +
    + Example form legend +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + Example form legend +
    + +
    + + Small snippet of help text +
    +
    +
    + +
    +
      +
    • + +
    • +
    • + +
    • +
    + + Note: Labels surround all the options for much larger click areas and a more usable form. + +
    +
    +
    +
    +   +
    +
    +
    +
    + +
    +
    +

    Form field sizes

    +

    Customize any form input, select, or textarea width by adding just a few classes to your markup.

    +

    As of v1.3.0, we have added the grid-based sizing classes for form elements. Please use the these over the existing .mini, .small, etc classes.

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

    Buttons

    +

    As a convention, buttons are used for actions while links are used for objects. For instance, "Download" could be a button and "recent activity" could be a link.

    +

    All buttons default to a light gray style, but a number of functional classes can be applied for different color styles. These classes include a blue .primary class, a light-blue .info class, a green .success class, and a red .danger class.

    +
    +
    +

    Example buttons

    +

    Button styles can be applied to anything with the .btn applied. Typically you’ll want to apply these to only <a>, <button>, and select <input> elements. Here’s how it looks:

    +
    +      +
    +

    Alternate sizes

    +

    Fancy larger or smaller buttons? Have at it!

    + + +

    Disabled state

    +

    For buttons that are not active or are disabled by the app for one reason or another, use the disabled state. That’s .disabled for links and :disabled for <button> elements.

    +

    Links

    + +

    Buttons

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

    Basic alerts

    +

    .alert-message

    +

    One-line messages for highlighting the failure, possible failure, or success of an action. Particularly useful for forms.

    +

    Get the javascript »

    +
    +
    +
    + × +

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

    +
    +
    + × +

    Oh snap! Change this and that and try again.

    +
    +
    + × +

    Well done! You successfully read this alert message.

    +
    +
    + × +

    Heads up! This is an alert that needs your attention, but it’s not a huge priority just yet.

    +
    + +

    Example code

    +
    +<div class="alert-message warning">
    +  <a class="close" href="#">×</a>
    +  <p><strong>Holy guacamole!</strong> Best check yo self, you’re not looking too good.</p>
    +</div>
    +
    +
    +
    + +
    +
    +

    Block messages

    +

    .alert-message.block-message

    +

    For messages that require a bit of explanation, we have paragraph style alerts. These are perfect for bubbling up longer error messages, warning a user of a pending action, or just presenting information for more emphasis on the page.

    +

    Get the javascript »

    +
    +
    +
    + × +

    Holy guacamole! This is a warning! Best check yo self, you’re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.

    + +
    +
    + × +

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

    Well done! You successfully read this alert message. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Maecenas faucibus mollis interdum.

    + +
    +
    + × +

    Heads up! This is an alert that needs your attention, but it’s not a huge priority just yet.

    + +
    + +

    Example code

    +
    +<div class="alert-message block-message warning">
    +  <a class="close" href="#">×</a>
    +  <p><strong>Holy guacamole! This is a warning!</strong> Best check yo self, you’re not looking too good. Nulla vitae elit libero, a pharetra augue. Praesent commodo cursus magna, vel scelerisque nisl consectetur et.</p>
    +  <div class="alert-actions">
    +    <a class="btn small" href="#">Take this action</a> <a class="btn small" href="#">Or do this</a>
    +  </div>
    +</div>
    +
    +
    +
    +
    + + + +
    + +
    +
    +

    Modals

    +

    Modals—dialogs or lightboxes—are great for contextual actions in situations where it’s important that the background context be maintained.

    +

    Get the javascript »

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

    Tooltips

    +

    Twipsies are super useful for aiding a confused user and pointing them in the right direction.

    +

    Get the javascript »

    +
    +
    +
    +
    +

    +Lorem ipsum dolar sit amet illo error ipsum veritatis aut iste perspiciatis iste voluptas natus illo quasi odit aut natus consequuntur consequuntur, aut natus illo voluptatem odit perspiciatis laudantium rem doloremque totam voluptas. Voluptasdicta eaque beatae aperiam ut enim voluptatem explicabo explicabo, voluptas quia odit fugit accusantium totam totam architecto explicabo sit quasi fugit fugit, totam doloremque unde sunt sed dicta quae accusantium fugit voluptas nemo voluptas voluptatem rem quae aut veritatis quasi quae. +

    +
    +
    +
    +
    + + +
    +
    +

    Popovers

    +

    Use popovers to provide subtextual information to a page without affecting layout.

    +

    Get the javascript »

    +
    +
    +
    +
    +
    +
    +
    +

    Popover Title

    +
    +

    Etiam porta sem malesuada magna mollis euismod. Maecenas faucibus mollis interdum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

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

    Getting started

    +

    Integrating javascript with the Bootstrap library is super easy. Below we go over the basics and provide you with some awesome plugins to get you started!

    +

    View javascript docs »

    +
    +
    +

    What's included

    +

    Bring some of Bootstrap's primary components to life with new custom plugins that work with jQuery and Ender. We encourage you to extend and modify them to fit your specific development needs.

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    FileDescription
    bootstrap-modal.jsOur Modal plugin is a super slim take on the traditional modal js plugin! We took special care to include only the bare functionality that we require at twitter.
    bootstrap-alerts.jsThe alert plugin is a super tiny class for adding close functionality to alerts.
    bootstrap-dropdown.jsThis plugin is for adding dropdown interaction to the bootstrap topbar or tabbed navigations.
    bootstrap-scrollspy.jsThe ScrollSpy plugin is for adding an auto updating nav based on scroll position to the bootstrap topbar.
    bootstrap-buttons.jsThe ScrollSpy plugin is for adding an auto updating nav based on scroll position to the bootstrap topbar.
    bootstrap-tabs.jsThis plugin adds quick, dynamic tab and pill functionality for cycling through local content.
    bootstrap-twipsy.jsBased on the excellent jQuery.tipsy plugin written by Jason Frame; twipsy is an updated version, which doesn't rely on images, uses css3 for animations, and data-attributes for local title storage!
    bootstrap-popover.jsThe popover plugin provides a simple interface for adding popovers to your application. It extends the boostrap-twipsy.js plugin, so be sure to grab that file as well when including popovers in your project!
    +

    Is javascript necessary?

    +

    Nope! Bootstrap is designed first and foremost to be a CSS library. This javascript provides a basic interactive layer on top of the included styles.

    +

    However, for those who do need javascript, we've provided the plugins above to help you understand how to integrate Bootstrap with javascript and to give you a quick, lightweight option for the basic functionality right away.

    +

    For more information and to see some live demos, please refer to our plugin documentation page.

    +
    +
    + + + +
    + +
    +
    +

    Bootstrap was built from Preboot, an open-source pack of mixins and variables to be used in conjunction with Less, a CSS preprocessor for faster and easier web development.

    +

    Check out how we used Preboot in Bootstrap and how you can make use of it should you choose to run Less on your next project.

    +
    +
    +

    How to use it

    +

    Use this option to make full use of Bootstrap’s Less variables, mixins, and nesting in CSS via javascript in your browser.

    +
    +<link rel="stylesheet/less" href="less/bootstrap.less" media="all" />
    +<script src="js/less-1.1.3.min.js"></script>
    +

    Not feeling the .js solution? Try the Less Mac app or use Node.js to compile when you deploy your code.

    + +

    What’s included

    +

    Here are some of the highlights of what’s included in Twitter Bootstrap as part of Bootstrap. Head over to the Bootstrap website or Github project page to download and learn more.

    +

    Variables

    +

    Variables in Less are perfect for maintaining and updating your CSS headache free. When you want to change a color value or a frequently used value, update it in one spot and you’re set.

    +
    +// Links
    +@linkColor:         #8b59c2;
    +@linkColorHover:    darken(@linkColor, 10);
    +
    +// Grays
    +@black:             #000;
    +@grayDark:          lighten(@black, 25%);
    +@gray:              lighten(@black, 50%);
    +@grayLight:         lighten(@black, 70%);
    +@grayLighter:       lighten(@black, 90%);
    +@white:             #fff;
    +
    +// Accent Colors
    +@blue:              #08b5fb;
    +@green:             #46a546;
    +@red:               #9d261d;
    +@yellow:            #ffc40d;
    +@orange:            #f89406;
    +@pink:              #c3325f;
    +@purple:            #7a43b6;
    +
    +// Baseline grid
    +@basefont:          13px;
    +@baseline:          18px;
    +
    + +

    Commenting

    +

    Less also provides another style of commenting in addition to CSS’s normal /* ... */ syntax.

    +
    +// This is a comment
    +/* This is also a comment */
    +
    + +

    Mixins up the wazoo

    +

    Mixins are basically includes or partials for CSS, allowing you to combine a block of code into one. They’re great for vendor prefixed properties like box-shadow, cross-browser gradients, font stacks, and more. Below is a sample of the mixins that are included with Bootstrap.

    +

    Font stacks

    +
    +#font {
    +  .shorthand(@weight: normal, @size: 14px, @lineHeight: 20px) {
    +    font-size: @size;
    +    font-weight: @weight;
    +    line-height: @lineHeight;
    +  }
    +  .sans-serif(@weight: normal, @size: 14px, @lineHeight: 20px) {
    +    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    +    font-size: @size;
    +    font-weight: @weight;
    +    line-height: @lineHeight;
    +  }
    +  ...
    +}
    +
    +

    Gradients

    +
    +#gradient {
    +  ...
    +  .vertical (@startColor: #555, @endColor: #333) {
    +    background-color: @endColor;
    +    background-repeat: repeat-x;
    +    background-image: -khtml-gradient(linear, left top, left bottom, from(@startColor), to(@endColor)); // Konqueror
    +    background-image: -moz-linear-gradient(@startColor, @endColor); // FF 3.6+
    +    background-image: -ms-linear-gradient(@startColor, @endColor); // IE10
    +    background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, @startColor), color-stop(100%, @endColor)); // Safari 4+, Chrome 2+
    +    background-image: -webkit-linear-gradient(@startColor, @endColor); // Safari 5.1+, Chrome 10+
    +    background-image: -o-linear-gradient(@startColor, @endColor); // Opera 11.10
    +    background-image: linear-gradient(@startColor, @endColor); // The standard
    +  }
    +  ...
    +}
    +
    + +

    Operations

    +

    Get fancy and perform some math to generate flexible and powerful mixins like the one below.

    +
    +// Griditude
    +@gridColumns:       16;
    +@gridColumnWidth:   40px;
    +@gridGutterWidth:   20px;
    +@siteWidth:         (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1));
    +
    +// Make some columns
    +.columns(@columnSpan: 1) {
    +  width: (@gridColumnWidth * @columnSpan) + (@gridGutterWidth * (@columnSpan - 1));
    +}
    +
    + +

    Compiling Less

    +

    After modifying the .less files in /lib/, you'll need to recompile them in order to regenerate the bootstrap-*.*.*.css and bootstrap-*.*.*.min.css files. If you're submitting a pull request to GitHub, you must always recompile.

    +

    Ways to compile

    + + + + + + + + + + + + + + + + + + + + + + + + +
    MethodSteps
    Node with makefile +

    Install the less command line compiler with npm by running the following command:

    +
    $ npm install lessc
    +

    Once installed just run make from the root of your bootstrap directory and you're all set.

    +

    Additionally, if you have watchr installed, you may run make watch to have bootstrap automatically rebuilt every time you edit a file in the bootstrap lib (this isn't required, just a convenience method).

    +
    Javascript +

    Download the latest Less.js and include the path to it (and Bootstrap) in the head.

    +
    +<link rel="stylesheet/less" href="/path/to/bootstrap.less">
    +<script src="/path/to/less.js"></script>
    +
    +

    To recompile the .less files, just save them and reload your page. Less.js compiles them and stores them in local storage.

    +
    Command line +

    If you already have the less command line tool installed, simply run the following command:

    +
    $ lessc ./lib/bootstrap.less > bootstrap.css
    +

    Be sure to include --compress in that command if you're trying to save some bytes!

    +
    Less Mac app +

    The unofficial Mac app watches directories of .less files and compiles the code to local files after every save of a watched .less file.

    +

    If you like, you can toggle preferences in the app for automatic minifying and which directory the compiled files end up in.

    +
    +
    +
    + +
    + + + +
    + + + + + diff --git a/original_javascript.html b/original_javascript.html new file mode 100644 index 0000000..1d6aef8 --- /dev/null +++ b/original_javascript.html @@ -0,0 +1,798 @@ + + + + + Bootstrap, from Twitter + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    +

    Javascript for Bootstrap

    +

    + Bring Bootstrap's components to life with new, custom plugins that work with jQuery and Ender. +

    +

    ← Back to Bootstrap home

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

    This plugin is for adding the scrollspy (auto updating nav) interaction to the bootstrap topbar.

    + Download +
    +
    +

    Using bootstrap-scrollspy.js

    +
    $('#topbar').scrollSpy()
    +

    Markup

    +

    To easily add scrollspy behavior to your nav, just add the data-scrollspy attribute to the .topbar. +

    <div class="topbar" data-scrollspy="scrollspy" >...</div>
    +

    Methods

    +

    $().scrollSpy()

    +

    + Auto activates navigation buttons by users scroll position. +

    +
    $('body > .topbar').scrollSpy()
    +

    Notice Topbar anchor tags 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>. +

    +

    .scrollSpy('refresh')

    +

    The scrollspy caches nav buttons and section coordinates for performance. If you need to update this cache (likely if you have dynamic content) just call this refresh method. If you used the data attribute to define your scrollspy, just call refresh on the body.

    +
    $('body').scrollSpy('refresh')
    +

    Demo

    +

    Checkout the the topbar navigation on this page.

    +
    +
    +
    + + + +
    + +
    +
    +

    This plugin offers additional functionality for managing button state.

    + Download +
    +
    +

    Using bootstrap-buttons.js

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

    Methods

    +

    $().button('toggle')

    +

    Toggles push state. Gives btn the look that it's been activated.

    +

    Notice You can enable auto toggling of a button by using the data-toggle attribute.

    +
    <button class="btn" data-toggle="toggle" >...</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 class="btn" data-loading-text="loading stuff..." >...</button>
    +

    $().button('reset')

    +

    Resets button state - swaps text to original text.

    +

    $().button(string)

    +

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

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

    Demo

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

    This plugin adds quick, dynamic tab and pill functionality.

    + Download +
    +
    +

    Using bootstrap-tabs.js

    +
    $('.tabs').tabs()
    +

    Markup

    +

    You can activate a tab or pill navigation without writing any javascript by simply giving them a data-tabs or data-pills attribute.

    +
     <ul class="tabs" data-tabs="tabs" >...</ul>
    +

    Methods

    +

    $().tabs or $().pills

    +

    + Activates tab and pill functionality for a given container. Tab links should reference id's in the document. +

    +
    +<ul class="tabs">
    +  <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="pill-content">
    +  <div class="active" id="home">...</div>
    +  <div id="profile">...</div>
    +  <div id="messages">...</div>
    +  <div id="settings">...</div>
    +</div>
    +
    +<script>
    +  $(function () {
    +    $('.tabs').tabs()
    +  })
    +</script>
    +

    +

    Events

    + + + + + + + + + + + + + +
    EventDescription
    changeThis event fires on tab change. Use event.target and event.relatedTarget to target the active tab and the previous active tab respectively.
    + +
    +$('#.tabs').bind('change', function (e) {
    +  e.target // activated tab
    +  e.relatedTarget // previous tab
    +})
    +

    Demo

    + +
    +
    +

    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.

    +
    +
    +

    Banksy do proident, brooklyn photo booth delectus sunt artisan sed organic exercitation eiusmod four loko. Quis tattooed iphone esse aliqua. Master cleanse vero fixie mcsweeney's. Ethical portland aute, irony food truck pitchfork lomo eu anim. Aesthetic blog DIY, ethical beard leggings tofu consequat whatever cardigan nostrud. Helvetica you probably haven't heard of them carles, marfa veniam occaecat lomo before they sold out in shoreditch scenester sustainable thundercats. Consectetur tofu craft beer, mollit brunch fap echo park pitchfork mustache dolor.

    +
    +
    +

    Sunt qui biodiesel mollit officia, fanny pack put a bird on it thundercats seitan squid ad wolf bicycle rights blog. Et aute readymade farm-to-table carles 8-bit, nesciunt nulla etsy adipisicing organic ea. Master cleanse mollit high life, next level Austin nesciunt american apparel twee mustache adipisicing reprehenderit hoodie portland irony. Aliqua tofu quinoa +1 commodo eiusmod. High life williamsburg cupidatat twee homo leggings. Four loko vinyl DIY consectetur nisi, marfa retro keffiyeh vegan. Fanny pack viral retro consectetur gentrify fap.

    +
    +
    +

    Etsy mixtape wayfarers, ethical wes anderson tofu before they sold out mcsweeney's organic lomo retro fanny pack lo-fi farm-to-table readymade. Messenger bag gentrify pitchfork tattooed craft beer, iphone skateboard locavore carles etsy salvia banksy hoodie helvetica. DIY synth PBR banksy irony. Leggings gentrify squid 8-bit cred pitchfork. Williamsburg banh mi whatever gluten-free, carles pitchfork biodiesel fixie etsy retro mlkshk vice blog. Scenester cred you probably haven't heard of them, vinyl craft beer blog stumptown. Pitchfork sustainable tofu synth chambray yr.

    +
    +
    +

    Trust fund seitan letterpress, keytar raw denim keffiyeh etsy art party before they sold out master cleanse gluten-free squid scenester freegan cosby sweater. Fanny pack portland seitan DIY, art party locavore wolf cliche high life echo park Austin. Cred vinyl keffiyeh DIY salvia PBR, banh mi before they sold out farm-to-table VHS viral locavore cosby sweater. Lomo wolf viral, mustache readymade thundercats keffiyeh craft beer marfa ethical. Wolf salvia freegan, sartorial keffiyeh echo park vegan.

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

    Based on the excellent jQuery.tipsy plugin written by Jason Frame; twipsy is an updated version, which doesn't rely on images, uses css3 for animations, and data-attributes for title storage!

    + Download +
    +
    +

    Using bootstrap-twipsy.js

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

    Options

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    animatebooleantrueapply a css fade transition to the tooltip
    delayInnumber0delay before showing tooltip (ms)
    delayOutnumber0delay before hiding tooltip (ms)
    fallbackstring''text to use when no tooltip title is present
    placementstring'above'how to position the tooltip - above | below | left | right
    htmlbooleanfalseallows html content within tooltip
    livebooleanfalseuse event delegation instead of individual event handlers
    offsetnumber0pixel offset of tooltip from target element
    titlestring, function'title'attribute or method for retrieving title text
    triggerstring'hover'how tooltip is triggered - hover | focus | manual
    templatestring[default markup]The html template used for rendering a twipsy.
    +

    Notice Individual twipsy instance options can alternatively be specified through the use of data attributes.

    +
    <a href="#" data-placement="below" rel='twipsy' title='Some title text'>text</a>
    +

    Methods

    +

    $().twipsy(options)

    +

    Attaches a twipsy handler to an element collection.

    +

    .twipsy('show')

    +

    Reveals an elements twipsy.

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

    .twipsy('hide')

    +

    Hides an elements twipsy.

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

    .twipsy(true)

    +

    Returns an elements twipsy class instance.

    +
    $('#element').twipsy(true)
    +

    Notice Alternatively, this can be retrieved with $().data('twipsy').

    +

    Demo

    +
    +

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

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

    The popover plugin provides a simple interface for adding popovers to your application. It extends the bootstrap-twipsy.js plugin, so be sure to grab that file as well when including popovers in your project!

    +

    Notice You must include the bootstrap-twipsy.js file before bootstrap-popover.js.

    + Download +
    +
    +

    Using bootstrap-popover.js

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

    Options

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    animatebooleantrueapply a css fade transition to the tooltip
    delayInnumber0delay before showing tooltip (ms)
    delayOutnumber0delay before hiding tooltip (ms)
    fallbackstring''text to use when no tooltip title is present
    placementstring'right'how to position the tooltip - above | below | left | right
    htmlbooleanfalseallows html content within tooltip
    livebooleanfalseuse event delegation instead of individual event handlers
    offsetnumber0pixel offset of tooltip from target element
    titlestring, function'title'attribute or method for retrieving title text
    contentstring, function'data-content'a string or method for retrieving content text. if none are provided, content will be sourced from a data-content attribute.
    triggerstring'hover'how tooltip is triggered - hover | focus | manual
    templatestring[default markup]The html template used for rendering a popover.
    +

    Notice Individual popover instance options can alternatively be specified through the use of data attributes.

    +
    <a data-placement="below" href="#" class="btn danger" rel="popover">text</a>
    +

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

    Demo

    + hover for popover + +
    +
    +
    + + + + +
    + +
    +
    +

    The alert plugin is a super tiny class for adding close functionality to alerts.

    + Download +
    +
    +

    Using bootstrap-alerts.js

    +
    $(".alert-message").alert()
    +

    Markup

    +

    Just add a data-alert attribute to your alert messages to automatically give them close functionality.

    +

    Options

    + + + + + + + + + + + + + + + + + +
    Nametypedefaultdescription
    selectorstring'.close'What selector to target for closing an alert.
    + +

    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-message").alert('close')
    +

    Demo

    +
    + × +

    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.

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