From df6551e2d2ecad50105b0ba5bf1348477ce22314 Mon Sep 17 00:00:00 2001 From: alexisjanvier Date: Mon, 28 Sep 2015 12:06:48 +0200 Subject: [PATCH 1/5] Prepare files for DocGenerator middleware --- src/Stack/DocGenerator/DocGenerator.php | 35 + src/Stack/DocGenerator/src/css/bootstrap.css | 6331 ++++++ src/Stack/DocGenerator/src/doc.html | 32 + src/Stack/DocGenerator/src/js/doc.js | 91 + .../DocGenerator/src/js/react-bootstrap.js | 5424 +++++ .../src/js/react-jsx-transformer.js | 15199 +++++++++++++ src/Stack/DocGenerator/src/js/react.js | 18116 ++++++++++++++++ 7 files changed, 45228 insertions(+) create mode 100644 src/Stack/DocGenerator/DocGenerator.php create mode 100644 src/Stack/DocGenerator/src/css/bootstrap.css create mode 100644 src/Stack/DocGenerator/src/doc.html create mode 100644 src/Stack/DocGenerator/src/js/doc.js create mode 100644 src/Stack/DocGenerator/src/js/react-bootstrap.js create mode 100644 src/Stack/DocGenerator/src/js/react-jsx-transformer.js create mode 100644 src/Stack/DocGenerator/src/js/react.js diff --git a/src/Stack/DocGenerator/DocGenerator.php b/src/Stack/DocGenerator/DocGenerator.php new file mode 100644 index 0000000..54a6600 --- /dev/null +++ b/src/Stack/DocGenerator/DocGenerator.php @@ -0,0 +1,35 @@ +app = $app; + $this->definition = $request->attributes->get('raml.config'); + } + + public function handle(Request $request, $type = HttpKernelInterface::MASTER_REQUEST, $catch = true) + { + $response = $this->app->handle($request, $type, $catch); + // Render twig views/doc.html.twig, genereted with webpack from src, with definition as parameter + $response = new Response('API DOCUMENTATION'); + return $response; + } + + /** + * {@inheritdoc} + */ + public function terminate(Request $request, Response $response) + { + $this->kernel->terminate($request, $response); + } +} diff --git a/src/Stack/DocGenerator/src/css/bootstrap.css b/src/Stack/DocGenerator/src/css/bootstrap.css new file mode 100644 index 0000000..3c503e6 --- /dev/null +++ b/src/Stack/DocGenerator/src/css/bootstrap.css @@ -0,0 +1,6331 @@ +/*! + * Bootstrap v3.3.1 (http://getbootstrap.com) + * Copyright 2011-2014 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ +html { + font-family: sans-serif; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} +body { + margin: 0; +} +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} +audio, +canvas, +progress, +video { + display: inline-block; + vertical-align: baseline; +} +audio:not([controls]) { + display: none; + height: 0; +} +[hidden], +template { + display: none; +} +a { + background-color: transparent; +} +a:active, +a:hover { + outline: 0; +} +abbr[title] { + border-bottom: 1px dotted; +} +b, +strong { + font-weight: bold; +} +dfn { + font-style: italic; +} +h1 { + margin: .67em 0; + font-size: 2em; +} +mark { + color: #000; + background: #ff0; +} +small { + font-size: 80%; +} +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} +sup { + top: -.5em; +} +sub { + bottom: -.25em; +} +img { + border: 0; +} +svg:not(:root) { + overflow: hidden; +} +figure { + margin: 1em 40px; +} +hr { + height: 0; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +pre { + overflow: auto; +} +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} +button, +input, +optgroup, +select, +textarea { + margin: 0; + font: inherit; + color: inherit; +} +button { + overflow: visible; +} +button, +select { + text-transform: none; +} +button, +html input[type="button"], +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; + cursor: pointer; +} +button[disabled], +html input[disabled] { + cursor: default; +} +button::-moz-focus-inner, +input::-moz-focus-inner { + padding: 0; + border: 0; +} +input { + line-height: normal; +} +input[type="checkbox"], +input[type="radio"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + padding: 0; +} +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} +input[type="search"] { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + -webkit-appearance: textfield; +} +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +fieldset { + padding: .35em .625em .75em; + margin: 0 2px; + border: 1px solid #c0c0c0; +} +legend { + padding: 0; + border: 0; +} +textarea { + overflow: auto; +} +optgroup { + font-weight: bold; +} +table { + border-spacing: 0; + border-collapse: collapse; +} +td, +th { + padding: 0; +} +/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */ +@media print { + *, + *:before, + *:after { + color: #000 !important; + text-shadow: none !important; + background: transparent !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; + } + a, + a:visited { + text-decoration: underline; + } + a[href]:after { + content: " (" attr(href) ")"; + } + abbr[title]:after { + content: " (" attr(title) ")"; + } + a[href^="#"]:after, + a[href^="javascript:"]:after { + content: ""; + } + pre, + blockquote { + border: 1px solid #999; + + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + img { + max-width: 100% !important; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + select { + background: #fff !important; + } + .navbar { + display: none; + } + .btn > .caret, + .dropup > .btn > .caret { + border-top-color: #000 !important; + } + .label { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #ddd !important; + } +} +@font-face { + font-family: 'Glyphicons Halflings'; + + src: url('../fonts/glyphicons-halflings-regular.eot'); + src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg'); +} +.glyphicon { + position: relative; + top: 1px; + display: inline-block; + font-family: 'Glyphicons Halflings'; + font-style: normal; + font-weight: normal; + line-height: 1; + + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.glyphicon-asterisk:before { + content: "\2a"; +} +.glyphicon-plus:before { + content: "\2b"; +} +.glyphicon-euro:before, +.glyphicon-eur:before { + content: "\20ac"; +} +.glyphicon-minus:before { + content: "\2212"; +} +.glyphicon-cloud:before { + content: "\2601"; +} +.glyphicon-envelope:before { + content: "\2709"; +} +.glyphicon-pencil:before { + content: "\270f"; +} +.glyphicon-glass:before { + content: "\e001"; +} +.glyphicon-music:before { + content: "\e002"; +} +.glyphicon-search:before { + content: "\e003"; +} +.glyphicon-heart:before { + content: "\e005"; +} +.glyphicon-star:before { + content: "\e006"; +} +.glyphicon-star-empty:before { + content: "\e007"; +} +.glyphicon-user:before { + content: "\e008"; +} +.glyphicon-film:before { + content: "\e009"; +} +.glyphicon-th-large:before { + content: "\e010"; +} +.glyphicon-th:before { + content: "\e011"; +} +.glyphicon-th-list:before { + content: "\e012"; +} +.glyphicon-ok:before { + content: "\e013"; +} +.glyphicon-remove:before { + content: "\e014"; +} +.glyphicon-zoom-in:before { + content: "\e015"; +} +.glyphicon-zoom-out:before { + content: "\e016"; +} +.glyphicon-off:before { + content: "\e017"; +} +.glyphicon-signal:before { + content: "\e018"; +} +.glyphicon-cog:before { + content: "\e019"; +} +.glyphicon-trash:before { + content: "\e020"; +} +.glyphicon-home:before { + content: "\e021"; +} +.glyphicon-file:before { + content: "\e022"; +} +.glyphicon-time:before { + content: "\e023"; +} +.glyphicon-road:before { + content: "\e024"; +} +.glyphicon-download-alt:before { + content: "\e025"; +} +.glyphicon-download:before { + content: "\e026"; +} +.glyphicon-upload:before { + content: "\e027"; +} +.glyphicon-inbox:before { + content: "\e028"; +} +.glyphicon-play-circle:before { + content: "\e029"; +} +.glyphicon-repeat:before { + content: "\e030"; +} +.glyphicon-refresh:before { + content: "\e031"; +} +.glyphicon-list-alt:before { + content: "\e032"; +} +.glyphicon-lock:before { + content: "\e033"; +} +.glyphicon-flag:before { + content: "\e034"; +} +.glyphicon-headphones:before { + content: "\e035"; +} +.glyphicon-volume-off:before { + content: "\e036"; +} +.glyphicon-volume-down:before { + content: "\e037"; +} +.glyphicon-volume-up:before { + content: "\e038"; +} +.glyphicon-qrcode:before { + content: "\e039"; +} +.glyphicon-barcode:before { + content: "\e040"; +} +.glyphicon-tag:before { + content: "\e041"; +} +.glyphicon-tags:before { + content: "\e042"; +} +.glyphicon-book:before { + content: "\e043"; +} +.glyphicon-bookmark:before { + content: "\e044"; +} +.glyphicon-print:before { + content: "\e045"; +} +.glyphicon-camera:before { + content: "\e046"; +} +.glyphicon-font:before { + content: "\e047"; +} +.glyphicon-bold:before { + content: "\e048"; +} +.glyphicon-italic:before { + content: "\e049"; +} +.glyphicon-text-height:before { + content: "\e050"; +} +.glyphicon-text-width:before { + content: "\e051"; +} +.glyphicon-align-left:before { + content: "\e052"; +} +.glyphicon-align-center:before { + content: "\e053"; +} +.glyphicon-align-right:before { + content: "\e054"; +} +.glyphicon-align-justify:before { + content: "\e055"; +} +.glyphicon-list:before { + content: "\e056"; +} +.glyphicon-indent-left:before { + content: "\e057"; +} +.glyphicon-indent-right:before { + content: "\e058"; +} +.glyphicon-facetime-video:before { + content: "\e059"; +} +.glyphicon-picture:before { + content: "\e060"; +} +.glyphicon-map-marker:before { + content: "\e062"; +} +.glyphicon-adjust:before { + content: "\e063"; +} +.glyphicon-tint:before { + content: "\e064"; +} +.glyphicon-edit:before { + content: "\e065"; +} +.glyphicon-share:before { + content: "\e066"; +} +.glyphicon-check:before { + content: "\e067"; +} +.glyphicon-move:before { + content: "\e068"; +} +.glyphicon-step-backward:before { + content: "\e069"; +} +.glyphicon-fast-backward:before { + content: "\e070"; +} +.glyphicon-backward:before { + content: "\e071"; +} +.glyphicon-play:before { + content: "\e072"; +} +.glyphicon-pause:before { + content: "\e073"; +} +.glyphicon-stop:before { + content: "\e074"; +} +.glyphicon-forward:before { + content: "\e075"; +} +.glyphicon-fast-forward:before { + content: "\e076"; +} +.glyphicon-step-forward:before { + content: "\e077"; +} +.glyphicon-eject:before { + content: "\e078"; +} +.glyphicon-chevron-left:before { + content: "\e079"; +} +.glyphicon-chevron-right:before { + content: "\e080"; +} +.glyphicon-plus-sign:before { + content: "\e081"; +} +.glyphicon-minus-sign:before { + content: "\e082"; +} +.glyphicon-remove-sign:before { + content: "\e083"; +} +.glyphicon-ok-sign:before { + content: "\e084"; +} +.glyphicon-question-sign:before { + content: "\e085"; +} +.glyphicon-info-sign:before { + content: "\e086"; +} +.glyphicon-screenshot:before { + content: "\e087"; +} +.glyphicon-remove-circle:before { + content: "\e088"; +} +.glyphicon-ok-circle:before { + content: "\e089"; +} +.glyphicon-ban-circle:before { + content: "\e090"; +} +.glyphicon-arrow-left:before { + content: "\e091"; +} +.glyphicon-arrow-right:before { + content: "\e092"; +} +.glyphicon-arrow-up:before { + content: "\e093"; +} +.glyphicon-arrow-down:before { + content: "\e094"; +} +.glyphicon-share-alt:before { + content: "\e095"; +} +.glyphicon-resize-full:before { + content: "\e096"; +} +.glyphicon-resize-small:before { + content: "\e097"; +} +.glyphicon-exclamation-sign:before { + content: "\e101"; +} +.glyphicon-gift:before { + content: "\e102"; +} +.glyphicon-leaf:before { + content: "\e103"; +} +.glyphicon-fire:before { + content: "\e104"; +} +.glyphicon-eye-open:before { + content: "\e105"; +} +.glyphicon-eye-close:before { + content: "\e106"; +} +.glyphicon-warning-sign:before { + content: "\e107"; +} +.glyphicon-plane:before { + content: "\e108"; +} +.glyphicon-calendar:before { + content: "\e109"; +} +.glyphicon-random:before { + content: "\e110"; +} +.glyphicon-comment:before { + content: "\e111"; +} +.glyphicon-magnet:before { + content: "\e112"; +} +.glyphicon-chevron-up:before { + content: "\e113"; +} +.glyphicon-chevron-down:before { + content: "\e114"; +} +.glyphicon-retweet:before { + content: "\e115"; +} +.glyphicon-shopping-cart:before { + content: "\e116"; +} +.glyphicon-folder-close:before { + content: "\e117"; +} +.glyphicon-folder-open:before { + content: "\e118"; +} +.glyphicon-resize-vertical:before { + content: "\e119"; +} +.glyphicon-resize-horizontal:before { + content: "\e120"; +} +.glyphicon-hdd:before { + content: "\e121"; +} +.glyphicon-bullhorn:before { + content: "\e122"; +} +.glyphicon-bell:before { + content: "\e123"; +} +.glyphicon-certificate:before { + content: "\e124"; +} +.glyphicon-thumbs-up:before { + content: "\e125"; +} +.glyphicon-thumbs-down:before { + content: "\e126"; +} +.glyphicon-hand-right:before { + content: "\e127"; +} +.glyphicon-hand-left:before { + content: "\e128"; +} +.glyphicon-hand-up:before { + content: "\e129"; +} +.glyphicon-hand-down:before { + content: "\e130"; +} +.glyphicon-circle-arrow-right:before { + content: "\e131"; +} +.glyphicon-circle-arrow-left:before { + content: "\e132"; +} +.glyphicon-circle-arrow-up:before { + content: "\e133"; +} +.glyphicon-circle-arrow-down:before { + content: "\e134"; +} +.glyphicon-globe:before { + content: "\e135"; +} +.glyphicon-wrench:before { + content: "\e136"; +} +.glyphicon-tasks:before { + content: "\e137"; +} +.glyphicon-filter:before { + content: "\e138"; +} +.glyphicon-briefcase:before { + content: "\e139"; +} +.glyphicon-fullscreen:before { + content: "\e140"; +} +.glyphicon-dashboard:before { + content: "\e141"; +} +.glyphicon-paperclip:before { + content: "\e142"; +} +.glyphicon-heart-empty:before { + content: "\e143"; +} +.glyphicon-link:before { + content: "\e144"; +} +.glyphicon-phone:before { + content: "\e145"; +} +.glyphicon-pushpin:before { + content: "\e146"; +} +.glyphicon-usd:before { + content: "\e148"; +} +.glyphicon-gbp:before { + content: "\e149"; +} +.glyphicon-sort:before { + content: "\e150"; +} +.glyphicon-sort-by-alphabet:before { + content: "\e151"; +} +.glyphicon-sort-by-alphabet-alt:before { + content: "\e152"; +} +.glyphicon-sort-by-order:before { + content: "\e153"; +} +.glyphicon-sort-by-order-alt:before { + content: "\e154"; +} +.glyphicon-sort-by-attributes:before { + content: "\e155"; +} +.glyphicon-sort-by-attributes-alt:before { + content: "\e156"; +} +.glyphicon-unchecked:before { + content: "\e157"; +} +.glyphicon-expand:before { + content: "\e158"; +} +.glyphicon-collapse-down:before { + content: "\e159"; +} +.glyphicon-collapse-up:before { + content: "\e160"; +} +.glyphicon-log-in:before { + content: "\e161"; +} +.glyphicon-flash:before { + content: "\e162"; +} +.glyphicon-log-out:before { + content: "\e163"; +} +.glyphicon-new-window:before { + content: "\e164"; +} +.glyphicon-record:before { + content: "\e165"; +} +.glyphicon-save:before { + content: "\e166"; +} +.glyphicon-open:before { + content: "\e167"; +} +.glyphicon-saved:before { + content: "\e168"; +} +.glyphicon-import:before { + content: "\e169"; +} +.glyphicon-export:before { + content: "\e170"; +} +.glyphicon-send:before { + content: "\e171"; +} +.glyphicon-floppy-disk:before { + content: "\e172"; +} +.glyphicon-floppy-saved:before { + content: "\e173"; +} +.glyphicon-floppy-remove:before { + content: "\e174"; +} +.glyphicon-floppy-save:before { + content: "\e175"; +} +.glyphicon-floppy-open:before { + content: "\e176"; +} +.glyphicon-credit-card:before { + content: "\e177"; +} +.glyphicon-transfer:before { + content: "\e178"; +} +.glyphicon-cutlery:before { + content: "\e179"; +} +.glyphicon-header:before { + content: "\e180"; +} +.glyphicon-compressed:before { + content: "\e181"; +} +.glyphicon-earphone:before { + content: "\e182"; +} +.glyphicon-phone-alt:before { + content: "\e183"; +} +.glyphicon-tower:before { + content: "\e184"; +} +.glyphicon-stats:before { + content: "\e185"; +} +.glyphicon-sd-video:before { + content: "\e186"; +} +.glyphicon-hd-video:before { + content: "\e187"; +} +.glyphicon-subtitles:before { + content: "\e188"; +} +.glyphicon-sound-stereo:before { + content: "\e189"; +} +.glyphicon-sound-dolby:before { + content: "\e190"; +} +.glyphicon-sound-5-1:before { + content: "\e191"; +} +.glyphicon-sound-6-1:before { + content: "\e192"; +} +.glyphicon-sound-7-1:before { + content: "\e193"; +} +.glyphicon-copyright-mark:before { + content: "\e194"; +} +.glyphicon-registration-mark:before { + content: "\e195"; +} +.glyphicon-cloud-download:before { + content: "\e197"; +} +.glyphicon-cloud-upload:before { + content: "\e198"; +} +.glyphicon-tree-conifer:before { + content: "\e199"; +} +.glyphicon-tree-deciduous:before { + content: "\e200"; +} +* { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +*:before, +*:after { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +html { + font-size: 10px; + + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.42857143; + color: #333; + background-color: #fff; +} +input, +button, +select, +textarea { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} +a { + color: #337ab7; + text-decoration: none; +} +a:hover, +a:focus { + color: #23527c; + text-decoration: underline; +} +a:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +figure { + margin: 0; +} +img { + vertical-align: middle; +} +.img-responsive, +.thumbnail > img, +.thumbnail a > img, +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + display: block; + max-width: 100%; + height: auto; +} +.img-rounded { + border-radius: 6px; +} +.img-thumbnail { + display: inline-block; + max-width: 100%; + height: auto; + padding: 4px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: all .2s ease-in-out; + -o-transition: all .2s ease-in-out; + transition: all .2s ease-in-out; +} +.img-circle { + border-radius: 50%; +} +hr { + margin-top: 20px; + margin-bottom: 20px; + border: 0; + border-top: 1px solid #eee; +} +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + margin: 0; + overflow: visible; + clip: auto; +} +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + font-family: inherit; + font-weight: 500; + line-height: 1.1; + color: inherit; +} +h1 small, +h2 small, +h3 small, +h4 small, +h5 small, +h6 small, +.h1 small, +.h2 small, +.h3 small, +.h4 small, +.h5 small, +.h6 small, +h1 .small, +h2 .small, +h3 .small, +h4 .small, +h5 .small, +h6 .small, +.h1 .small, +.h2 .small, +.h3 .small, +.h4 .small, +.h5 .small, +.h6 .small { + font-weight: normal; + line-height: 1; + color: #777; +} +h1, +.h1, +h2, +.h2, +h3, +.h3 { + margin-top: 20px; + margin-bottom: 10px; +} +h1 small, +.h1 small, +h2 small, +.h2 small, +h3 small, +.h3 small, +h1 .small, +.h1 .small, +h2 .small, +.h2 .small, +h3 .small, +.h3 .small { + font-size: 65%; +} +h4, +.h4, +h5, +.h5, +h6, +.h6 { + margin-top: 10px; + margin-bottom: 10px; +} +h4 small, +.h4 small, +h5 small, +.h5 small, +h6 small, +.h6 small, +h4 .small, +.h4 .small, +h5 .small, +.h5 .small, +h6 .small, +.h6 .small { + font-size: 75%; +} +h1, +.h1 { + font-size: 36px; +} +h2, +.h2 { + font-size: 30px; +} +h3, +.h3 { + font-size: 24px; +} +h4, +.h4 { + font-size: 18px; +} +h5, +.h5 { + font-size: 14px; +} +h6, +.h6 { + font-size: 12px; +} +p { + margin: 0 0 10px; +} +.lead { + margin-bottom: 20px; + font-size: 16px; + font-weight: 300; + line-height: 1.4; +} +@media (min-width: 768px) { + .lead { + font-size: 21px; + } +} +small, +.small { + font-size: 85%; +} +mark, +.mark { + padding: .2em; + background-color: #fcf8e3; +} +.text-left { + text-align: left; +} +.text-right { + text-align: right; +} +.text-center { + text-align: center; +} +.text-justify { + text-align: justify; +} +.text-nowrap { + white-space: nowrap; +} +.text-lowercase { + text-transform: lowercase; +} +.text-uppercase { + text-transform: uppercase; +} +.text-capitalize { + text-transform: capitalize; +} +.text-muted { + color: #777; +} +.text-primary { + color: #337ab7; +} +a.text-primary:hover { + color: #286090; +} +.text-success { + color: #3c763d; +} +a.text-success:hover { + color: #2b542c; +} +.text-info { + color: #31708f; +} +a.text-info:hover { + color: #245269; +} +.text-warning { + color: #8a6d3b; +} +a.text-warning:hover { + color: #66512c; +} +.text-danger { + color: #a94442; +} +a.text-danger:hover { + color: #843534; +} +.bg-primary { + color: #fff; + background-color: #337ab7; +} +a.bg-primary:hover { + background-color: #286090; +} +.bg-success { + background-color: #dff0d8; +} +a.bg-success:hover { + background-color: #c1e2b3; +} +.bg-info { + background-color: #d9edf7; +} +a.bg-info:hover { + background-color: #afd9ee; +} +.bg-warning { + background-color: #fcf8e3; +} +a.bg-warning:hover { + background-color: #f7ecb5; +} +.bg-danger { + background-color: #f2dede; +} +a.bg-danger:hover { + background-color: #e4b9b9; +} +.page-header { + padding-bottom: 9px; + margin: 40px 0 20px; + border-bottom: 1px solid #eee; +} +ul, +ol { + margin-top: 0; + margin-bottom: 10px; +} +ul ul, +ol ul, +ul ol, +ol ol { + margin-bottom: 0; +} +.list-unstyled { + padding-left: 0; + list-style: none; +} +.list-inline { + padding-left: 0; + margin-left: -5px; + list-style: none; +} +.list-inline > li { + display: inline-block; + padding-right: 5px; + padding-left: 5px; +} +dl { + margin-top: 0; + margin-bottom: 20px; +} +dt, +dd { + line-height: 1.42857143; +} +dt { + font-weight: bold; +} +dd { + margin-left: 0; +} +@media (min-width: 768px) { + .dl-horizontal dt { + float: left; + width: 160px; + overflow: hidden; + clear: left; + text-align: right; + text-overflow: ellipsis; + white-space: nowrap; + } + .dl-horizontal dd { + margin-left: 180px; + } +} +abbr[title], +abbr[data-original-title] { + cursor: help; + border-bottom: 1px dotted #777; +} +.initialism { + font-size: 90%; + text-transform: uppercase; +} +blockquote { + padding: 10px 20px; + margin: 0 0 20px; + font-size: 17.5px; + border-left: 5px solid #eee; +} +blockquote p:last-child, +blockquote ul:last-child, +blockquote ol:last-child { + margin-bottom: 0; +} +blockquote footer, +blockquote small, +blockquote .small { + display: block; + font-size: 80%; + line-height: 1.42857143; + color: #777; +} +blockquote footer:before, +blockquote small:before, +blockquote .small:before { + content: '\2014 \00A0'; +} +.blockquote-reverse, +blockquote.pull-right { + padding-right: 15px; + padding-left: 0; + text-align: right; + border-right: 5px solid #eee; + border-left: 0; +} +.blockquote-reverse footer:before, +blockquote.pull-right footer:before, +.blockquote-reverse small:before, +blockquote.pull-right small:before, +.blockquote-reverse .small:before, +blockquote.pull-right .small:before { + content: ''; +} +.blockquote-reverse footer:after, +blockquote.pull-right footer:after, +.blockquote-reverse small:after, +blockquote.pull-right small:after, +.blockquote-reverse .small:after, +blockquote.pull-right .small:after { + content: '\00A0 \2014'; +} +address { + margin-bottom: 20px; + font-style: normal; + line-height: 1.42857143; +} +code, +kbd, +pre, +samp { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; +} +code { + padding: 2px 4px; + font-size: 90%; + color: #c7254e; + background-color: #f9f2f4; + border-radius: 4px; +} +kbd { + padding: 2px 4px; + font-size: 90%; + color: #fff; + background-color: #333; + border-radius: 3px; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25); +} +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: bold; + -webkit-box-shadow: none; + box-shadow: none; +} +pre { + display: block; + padding: 9.5px; + margin: 0 0 10px; + font-size: 13px; + line-height: 1.42857143; + color: #333; + word-break: break-all; + word-wrap: break-word; + background-color: #f5f5f5; + border: 1px solid #ccc; + border-radius: 4px; +} +pre code { + padding: 0; + font-size: inherit; + color: inherit; + white-space: pre-wrap; + background-color: transparent; + border-radius: 0; +} +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} +.container { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +@media (min-width: 768px) { + .container { + width: 750px; + } +} +@media (min-width: 992px) { + .container { + width: 970px; + } +} +@media (min-width: 1200px) { + .container { + width: 1170px; + } +} +.container-fluid { + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} +.row { + margin-right: -15px; + margin-left: -15px; +} +.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} +.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 { + float: left; +} +.col-xs-12 { + width: 100%; +} +.col-xs-11 { + width: 91.66666667%; +} +.col-xs-10 { + width: 83.33333333%; +} +.col-xs-9 { + width: 75%; +} +.col-xs-8 { + width: 66.66666667%; +} +.col-xs-7 { + width: 58.33333333%; +} +.col-xs-6 { + width: 50%; +} +.col-xs-5 { + width: 41.66666667%; +} +.col-xs-4 { + width: 33.33333333%; +} +.col-xs-3 { + width: 25%; +} +.col-xs-2 { + width: 16.66666667%; +} +.col-xs-1 { + width: 8.33333333%; +} +.col-xs-pull-12 { + right: 100%; +} +.col-xs-pull-11 { + right: 91.66666667%; +} +.col-xs-pull-10 { + right: 83.33333333%; +} +.col-xs-pull-9 { + right: 75%; +} +.col-xs-pull-8 { + right: 66.66666667%; +} +.col-xs-pull-7 { + right: 58.33333333%; +} +.col-xs-pull-6 { + right: 50%; +} +.col-xs-pull-5 { + right: 41.66666667%; +} +.col-xs-pull-4 { + right: 33.33333333%; +} +.col-xs-pull-3 { + right: 25%; +} +.col-xs-pull-2 { + right: 16.66666667%; +} +.col-xs-pull-1 { + right: 8.33333333%; +} +.col-xs-pull-0 { + right: auto; +} +.col-xs-push-12 { + left: 100%; +} +.col-xs-push-11 { + left: 91.66666667%; +} +.col-xs-push-10 { + left: 83.33333333%; +} +.col-xs-push-9 { + left: 75%; +} +.col-xs-push-8 { + left: 66.66666667%; +} +.col-xs-push-7 { + left: 58.33333333%; +} +.col-xs-push-6 { + left: 50%; +} +.col-xs-push-5 { + left: 41.66666667%; +} +.col-xs-push-4 { + left: 33.33333333%; +} +.col-xs-push-3 { + left: 25%; +} +.col-xs-push-2 { + left: 16.66666667%; +} +.col-xs-push-1 { + left: 8.33333333%; +} +.col-xs-push-0 { + left: auto; +} +.col-xs-offset-12 { + margin-left: 100%; +} +.col-xs-offset-11 { + margin-left: 91.66666667%; +} +.col-xs-offset-10 { + margin-left: 83.33333333%; +} +.col-xs-offset-9 { + margin-left: 75%; +} +.col-xs-offset-8 { + margin-left: 66.66666667%; +} +.col-xs-offset-7 { + margin-left: 58.33333333%; +} +.col-xs-offset-6 { + margin-left: 50%; +} +.col-xs-offset-5 { + margin-left: 41.66666667%; +} +.col-xs-offset-4 { + margin-left: 33.33333333%; +} +.col-xs-offset-3 { + margin-left: 25%; +} +.col-xs-offset-2 { + margin-left: 16.66666667%; +} +.col-xs-offset-1 { + margin-left: 8.33333333%; +} +.col-xs-offset-0 { + margin-left: 0; +} +@media (min-width: 768px) { + .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 { + float: left; + } + .col-sm-12 { + width: 100%; + } + .col-sm-11 { + width: 91.66666667%; + } + .col-sm-10 { + width: 83.33333333%; + } + .col-sm-9 { + width: 75%; + } + .col-sm-8 { + width: 66.66666667%; + } + .col-sm-7 { + width: 58.33333333%; + } + .col-sm-6 { + width: 50%; + } + .col-sm-5 { + width: 41.66666667%; + } + .col-sm-4 { + width: 33.33333333%; + } + .col-sm-3 { + width: 25%; + } + .col-sm-2 { + width: 16.66666667%; + } + .col-sm-1 { + width: 8.33333333%; + } + .col-sm-pull-12 { + right: 100%; + } + .col-sm-pull-11 { + right: 91.66666667%; + } + .col-sm-pull-10 { + right: 83.33333333%; + } + .col-sm-pull-9 { + right: 75%; + } + .col-sm-pull-8 { + right: 66.66666667%; + } + .col-sm-pull-7 { + right: 58.33333333%; + } + .col-sm-pull-6 { + right: 50%; + } + .col-sm-pull-5 { + right: 41.66666667%; + } + .col-sm-pull-4 { + right: 33.33333333%; + } + .col-sm-pull-3 { + right: 25%; + } + .col-sm-pull-2 { + right: 16.66666667%; + } + .col-sm-pull-1 { + right: 8.33333333%; + } + .col-sm-pull-0 { + right: auto; + } + .col-sm-push-12 { + left: 100%; + } + .col-sm-push-11 { + left: 91.66666667%; + } + .col-sm-push-10 { + left: 83.33333333%; + } + .col-sm-push-9 { + left: 75%; + } + .col-sm-push-8 { + left: 66.66666667%; + } + .col-sm-push-7 { + left: 58.33333333%; + } + .col-sm-push-6 { + left: 50%; + } + .col-sm-push-5 { + left: 41.66666667%; + } + .col-sm-push-4 { + left: 33.33333333%; + } + .col-sm-push-3 { + left: 25%; + } + .col-sm-push-2 { + left: 16.66666667%; + } + .col-sm-push-1 { + left: 8.33333333%; + } + .col-sm-push-0 { + left: auto; + } + .col-sm-offset-12 { + margin-left: 100%; + } + .col-sm-offset-11 { + margin-left: 91.66666667%; + } + .col-sm-offset-10 { + margin-left: 83.33333333%; + } + .col-sm-offset-9 { + margin-left: 75%; + } + .col-sm-offset-8 { + margin-left: 66.66666667%; + } + .col-sm-offset-7 { + margin-left: 58.33333333%; + } + .col-sm-offset-6 { + margin-left: 50%; + } + .col-sm-offset-5 { + margin-left: 41.66666667%; + } + .col-sm-offset-4 { + margin-left: 33.33333333%; + } + .col-sm-offset-3 { + margin-left: 25%; + } + .col-sm-offset-2 { + margin-left: 16.66666667%; + } + .col-sm-offset-1 { + margin-left: 8.33333333%; + } + .col-sm-offset-0 { + margin-left: 0; + } +} +@media (min-width: 992px) { + .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 { + float: left; + } + .col-md-12 { + width: 100%; + } + .col-md-11 { + width: 91.66666667%; + } + .col-md-10 { + width: 83.33333333%; + } + .col-md-9 { + width: 75%; + } + .col-md-8 { + width: 66.66666667%; + } + .col-md-7 { + width: 58.33333333%; + } + .col-md-6 { + width: 50%; + } + .col-md-5 { + width: 41.66666667%; + } + .col-md-4 { + width: 33.33333333%; + } + .col-md-3 { + width: 25%; + } + .col-md-2 { + width: 16.66666667%; + } + .col-md-1 { + width: 8.33333333%; + } + .col-md-pull-12 { + right: 100%; + } + .col-md-pull-11 { + right: 91.66666667%; + } + .col-md-pull-10 { + right: 83.33333333%; + } + .col-md-pull-9 { + right: 75%; + } + .col-md-pull-8 { + right: 66.66666667%; + } + .col-md-pull-7 { + right: 58.33333333%; + } + .col-md-pull-6 { + right: 50%; + } + .col-md-pull-5 { + right: 41.66666667%; + } + .col-md-pull-4 { + right: 33.33333333%; + } + .col-md-pull-3 { + right: 25%; + } + .col-md-pull-2 { + right: 16.66666667%; + } + .col-md-pull-1 { + right: 8.33333333%; + } + .col-md-pull-0 { + right: auto; + } + .col-md-push-12 { + left: 100%; + } + .col-md-push-11 { + left: 91.66666667%; + } + .col-md-push-10 { + left: 83.33333333%; + } + .col-md-push-9 { + left: 75%; + } + .col-md-push-8 { + left: 66.66666667%; + } + .col-md-push-7 { + left: 58.33333333%; + } + .col-md-push-6 { + left: 50%; + } + .col-md-push-5 { + left: 41.66666667%; + } + .col-md-push-4 { + left: 33.33333333%; + } + .col-md-push-3 { + left: 25%; + } + .col-md-push-2 { + left: 16.66666667%; + } + .col-md-push-1 { + left: 8.33333333%; + } + .col-md-push-0 { + left: auto; + } + .col-md-offset-12 { + margin-left: 100%; + } + .col-md-offset-11 { + margin-left: 91.66666667%; + } + .col-md-offset-10 { + margin-left: 83.33333333%; + } + .col-md-offset-9 { + margin-left: 75%; + } + .col-md-offset-8 { + margin-left: 66.66666667%; + } + .col-md-offset-7 { + margin-left: 58.33333333%; + } + .col-md-offset-6 { + margin-left: 50%; + } + .col-md-offset-5 { + margin-left: 41.66666667%; + } + .col-md-offset-4 { + margin-left: 33.33333333%; + } + .col-md-offset-3 { + margin-left: 25%; + } + .col-md-offset-2 { + margin-left: 16.66666667%; + } + .col-md-offset-1 { + margin-left: 8.33333333%; + } + .col-md-offset-0 { + margin-left: 0; + } +} +@media (min-width: 1200px) { + .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 { + float: left; + } + .col-lg-12 { + width: 100%; + } + .col-lg-11 { + width: 91.66666667%; + } + .col-lg-10 { + width: 83.33333333%; + } + .col-lg-9 { + width: 75%; + } + .col-lg-8 { + width: 66.66666667%; + } + .col-lg-7 { + width: 58.33333333%; + } + .col-lg-6 { + width: 50%; + } + .col-lg-5 { + width: 41.66666667%; + } + .col-lg-4 { + width: 33.33333333%; + } + .col-lg-3 { + width: 25%; + } + .col-lg-2 { + width: 16.66666667%; + } + .col-lg-1 { + width: 8.33333333%; + } + .col-lg-pull-12 { + right: 100%; + } + .col-lg-pull-11 { + right: 91.66666667%; + } + .col-lg-pull-10 { + right: 83.33333333%; + } + .col-lg-pull-9 { + right: 75%; + } + .col-lg-pull-8 { + right: 66.66666667%; + } + .col-lg-pull-7 { + right: 58.33333333%; + } + .col-lg-pull-6 { + right: 50%; + } + .col-lg-pull-5 { + right: 41.66666667%; + } + .col-lg-pull-4 { + right: 33.33333333%; + } + .col-lg-pull-3 { + right: 25%; + } + .col-lg-pull-2 { + right: 16.66666667%; + } + .col-lg-pull-1 { + right: 8.33333333%; + } + .col-lg-pull-0 { + right: auto; + } + .col-lg-push-12 { + left: 100%; + } + .col-lg-push-11 { + left: 91.66666667%; + } + .col-lg-push-10 { + left: 83.33333333%; + } + .col-lg-push-9 { + left: 75%; + } + .col-lg-push-8 { + left: 66.66666667%; + } + .col-lg-push-7 { + left: 58.33333333%; + } + .col-lg-push-6 { + left: 50%; + } + .col-lg-push-5 { + left: 41.66666667%; + } + .col-lg-push-4 { + left: 33.33333333%; + } + .col-lg-push-3 { + left: 25%; + } + .col-lg-push-2 { + left: 16.66666667%; + } + .col-lg-push-1 { + left: 8.33333333%; + } + .col-lg-push-0 { + left: auto; + } + .col-lg-offset-12 { + margin-left: 100%; + } + .col-lg-offset-11 { + margin-left: 91.66666667%; + } + .col-lg-offset-10 { + margin-left: 83.33333333%; + } + .col-lg-offset-9 { + margin-left: 75%; + } + .col-lg-offset-8 { + margin-left: 66.66666667%; + } + .col-lg-offset-7 { + margin-left: 58.33333333%; + } + .col-lg-offset-6 { + margin-left: 50%; + } + .col-lg-offset-5 { + margin-left: 41.66666667%; + } + .col-lg-offset-4 { + margin-left: 33.33333333%; + } + .col-lg-offset-3 { + margin-left: 25%; + } + .col-lg-offset-2 { + margin-left: 16.66666667%; + } + .col-lg-offset-1 { + margin-left: 8.33333333%; + } + .col-lg-offset-0 { + margin-left: 0; + } +} +table { + background-color: transparent; +} +caption { + padding-top: 8px; + padding-bottom: 8px; + color: #777; + text-align: left; +} +th { + text-align: left; +} +.table { + width: 100%; + max-width: 100%; + margin-bottom: 20px; +} +.table > thead > tr > th, +.table > tbody > tr > th, +.table > tfoot > tr > th, +.table > thead > tr > td, +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px; + line-height: 1.42857143; + vertical-align: top; + border-top: 1px solid #ddd; +} +.table > thead > tr > th { + vertical-align: bottom; + border-bottom: 2px solid #ddd; +} +.table > caption + thead > tr:first-child > th, +.table > colgroup + thead > tr:first-child > th, +.table > thead:first-child > tr:first-child > th, +.table > caption + thead > tr:first-child > td, +.table > colgroup + thead > tr:first-child > td, +.table > thead:first-child > tr:first-child > td { + border-top: 0; +} +.table > tbody + tbody { + border-top: 2px solid #ddd; +} +.table .table { + background-color: #fff; +} +.table-condensed > thead > tr > th, +.table-condensed > tbody > tr > th, +.table-condensed > tfoot > tr > th, +.table-condensed > thead > tr > td, +.table-condensed > tbody > tr > td, +.table-condensed > tfoot > tr > td { + padding: 5px; +} +.table-bordered { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > tbody > tr > th, +.table-bordered > tfoot > tr > th, +.table-bordered > thead > tr > td, +.table-bordered > tbody > tr > td, +.table-bordered > tfoot > tr > td { + border: 1px solid #ddd; +} +.table-bordered > thead > tr > th, +.table-bordered > thead > tr > td { + border-bottom-width: 2px; +} +.table-striped > tbody > tr:nth-child(odd) { + background-color: #f9f9f9; +} +.table-hover > tbody > tr:hover { + background-color: #f5f5f5; +} +table col[class*="col-"] { + position: static; + display: table-column; + float: none; +} +table td[class*="col-"], +table th[class*="col-"] { + position: static; + display: table-cell; + float: none; +} +.table > thead > tr > td.active, +.table > tbody > tr > td.active, +.table > tfoot > tr > td.active, +.table > thead > tr > th.active, +.table > tbody > tr > th.active, +.table > tfoot > tr > th.active, +.table > thead > tr.active > td, +.table > tbody > tr.active > td, +.table > tfoot > tr.active > td, +.table > thead > tr.active > th, +.table > tbody > tr.active > th, +.table > tfoot > tr.active > th { + background-color: #f5f5f5; +} +.table-hover > tbody > tr > td.active:hover, +.table-hover > tbody > tr > th.active:hover, +.table-hover > tbody > tr.active:hover > td, +.table-hover > tbody > tr:hover > .active, +.table-hover > tbody > tr.active:hover > th { + background-color: #e8e8e8; +} +.table > thead > tr > td.success, +.table > tbody > tr > td.success, +.table > tfoot > tr > td.success, +.table > thead > tr > th.success, +.table > tbody > tr > th.success, +.table > tfoot > tr > th.success, +.table > thead > tr.success > td, +.table > tbody > tr.success > td, +.table > tfoot > tr.success > td, +.table > thead > tr.success > th, +.table > tbody > tr.success > th, +.table > tfoot > tr.success > th { + background-color: #dff0d8; +} +.table-hover > tbody > tr > td.success:hover, +.table-hover > tbody > tr > th.success:hover, +.table-hover > tbody > tr.success:hover > td, +.table-hover > tbody > tr:hover > .success, +.table-hover > tbody > tr.success:hover > th { + background-color: #d0e9c6; +} +.table > thead > tr > td.info, +.table > tbody > tr > td.info, +.table > tfoot > tr > td.info, +.table > thead > tr > th.info, +.table > tbody > tr > th.info, +.table > tfoot > tr > th.info, +.table > thead > tr.info > td, +.table > tbody > tr.info > td, +.table > tfoot > tr.info > td, +.table > thead > tr.info > th, +.table > tbody > tr.info > th, +.table > tfoot > tr.info > th { + background-color: #d9edf7; +} +.table-hover > tbody > tr > td.info:hover, +.table-hover > tbody > tr > th.info:hover, +.table-hover > tbody > tr.info:hover > td, +.table-hover > tbody > tr:hover > .info, +.table-hover > tbody > tr.info:hover > th { + background-color: #c4e3f3; +} +.table > thead > tr > td.warning, +.table > tbody > tr > td.warning, +.table > tfoot > tr > td.warning, +.table > thead > tr > th.warning, +.table > tbody > tr > th.warning, +.table > tfoot > tr > th.warning, +.table > thead > tr.warning > td, +.table > tbody > tr.warning > td, +.table > tfoot > tr.warning > td, +.table > thead > tr.warning > th, +.table > tbody > tr.warning > th, +.table > tfoot > tr.warning > th { + background-color: #fcf8e3; +} +.table-hover > tbody > tr > td.warning:hover, +.table-hover > tbody > tr > th.warning:hover, +.table-hover > tbody > tr.warning:hover > td, +.table-hover > tbody > tr:hover > .warning, +.table-hover > tbody > tr.warning:hover > th { + background-color: #faf2cc; +} +.table > thead > tr > td.danger, +.table > tbody > tr > td.danger, +.table > tfoot > tr > td.danger, +.table > thead > tr > th.danger, +.table > tbody > tr > th.danger, +.table > tfoot > tr > th.danger, +.table > thead > tr.danger > td, +.table > tbody > tr.danger > td, +.table > tfoot > tr.danger > td, +.table > thead > tr.danger > th, +.table > tbody > tr.danger > th, +.table > tfoot > tr.danger > th { + background-color: #f2dede; +} +.table-hover > tbody > tr > td.danger:hover, +.table-hover > tbody > tr > th.danger:hover, +.table-hover > tbody > tr.danger:hover > td, +.table-hover > tbody > tr:hover > .danger, +.table-hover > tbody > tr.danger:hover > th { + background-color: #ebcccc; +} +.table-responsive { + min-height: .01%; + overflow-x: auto; +} +@media screen and (max-width: 767px) { + .table-responsive { + width: 100%; + margin-bottom: 15px; + overflow-y: hidden; + -ms-overflow-style: -ms-autohiding-scrollbar; + border: 1px solid #ddd; + } + .table-responsive > .table { + margin-bottom: 0; + } + .table-responsive > .table > thead > tr > th, + .table-responsive > .table > tbody > tr > th, + .table-responsive > .table > tfoot > tr > th, + .table-responsive > .table > thead > tr > td, + .table-responsive > .table > tbody > tr > td, + .table-responsive > .table > tfoot > tr > td { + white-space: nowrap; + } + .table-responsive > .table-bordered { + border: 0; + } + .table-responsive > .table-bordered > thead > tr > th:first-child, + .table-responsive > .table-bordered > tbody > tr > th:first-child, + .table-responsive > .table-bordered > tfoot > tr > th:first-child, + .table-responsive > .table-bordered > thead > tr > td:first-child, + .table-responsive > .table-bordered > tbody > tr > td:first-child, + .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; + } + .table-responsive > .table-bordered > thead > tr > th:last-child, + .table-responsive > .table-bordered > tbody > tr > th:last-child, + .table-responsive > .table-bordered > tfoot > tr > th:last-child, + .table-responsive > .table-bordered > thead > tr > td:last-child, + .table-responsive > .table-bordered > tbody > tr > td:last-child, + .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; + } + .table-responsive > .table-bordered > tbody > tr:last-child > th, + .table-responsive > .table-bordered > tfoot > tr:last-child > th, + .table-responsive > .table-bordered > tbody > tr:last-child > td, + .table-responsive > .table-bordered > tfoot > tr:last-child > td { + border-bottom: 0; + } +} +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} +legend { + display: block; + width: 100%; + padding: 0; + margin-bottom: 20px; + font-size: 21px; + line-height: inherit; + color: #333; + border: 0; + border-bottom: 1px solid #e5e5e5; +} +label { + display: inline-block; + max-width: 100%; + margin-bottom: 5px; + font-weight: bold; +} +input[type="search"] { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +input[type="radio"], +input[type="checkbox"] { + margin: 4px 0 0; + margin-top: 1px \9; + line-height: normal; +} +input[type="file"] { + display: block; +} +input[type="range"] { + display: block; + width: 100%; +} +select[multiple], +select[size] { + height: auto; +} +input[type="file"]:focus, +input[type="radio"]:focus, +input[type="checkbox"]:focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +output { + display: block; + padding-top: 7px; + font-size: 14px; + line-height: 1.42857143; + color: #555; +} +.form-control { + display: block; + width: 100%; + height: 34px; + padding: 6px 12px; + font-size: 14px; + line-height: 1.42857143; + color: #555; + background-color: #fff; + background-image: none; + border: 1px solid #ccc; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s; + -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; + transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; +} +.form-control:focus { + border-color: #66afe9; + outline: 0; + -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); + box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6); +} +.form-control::-moz-placeholder { + color: #999; + opacity: 1; +} +.form-control:-ms-input-placeholder { + color: #999; +} +.form-control::-webkit-input-placeholder { + color: #999; +} +.form-control[disabled], +.form-control[readonly], +fieldset[disabled] .form-control { + cursor: not-allowed; + background-color: #eee; + opacity: 1; +} +textarea.form-control { + height: auto; +} +input[type="search"] { + -webkit-appearance: none; +} +@media screen and (-webkit-min-device-pixel-ratio: 0) { + input[type="date"], + input[type="time"], + input[type="datetime-local"], + input[type="month"] { + line-height: 34px; + } + input[type="date"].input-sm, + input[type="time"].input-sm, + input[type="datetime-local"].input-sm, + input[type="month"].input-sm { + line-height: 30px; + } + input[type="date"].input-lg, + input[type="time"].input-lg, + input[type="datetime-local"].input-lg, + input[type="month"].input-lg { + line-height: 46px; + } +} +.form-group { + margin-bottom: 15px; +} +.radio, +.checkbox { + position: relative; + display: block; + margin-top: 10px; + margin-bottom: 10px; +} +.radio label, +.checkbox label { + min-height: 20px; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + cursor: pointer; +} +.radio input[type="radio"], +.radio-inline input[type="radio"], +.checkbox input[type="checkbox"], +.checkbox-inline input[type="checkbox"] { + position: absolute; + margin-top: 4px \9; + margin-left: -20px; +} +.radio + .radio, +.checkbox + .checkbox { + margin-top: -5px; +} +.radio-inline, +.checkbox-inline { + display: inline-block; + padding-left: 20px; + margin-bottom: 0; + font-weight: normal; + vertical-align: middle; + cursor: pointer; +} +.radio-inline + .radio-inline, +.checkbox-inline + .checkbox-inline { + margin-top: 0; + margin-left: 10px; +} +input[type="radio"][disabled], +input[type="checkbox"][disabled], +input[type="radio"].disabled, +input[type="checkbox"].disabled, +fieldset[disabled] input[type="radio"], +fieldset[disabled] input[type="checkbox"] { + cursor: not-allowed; +} +.radio-inline.disabled, +.checkbox-inline.disabled, +fieldset[disabled] .radio-inline, +fieldset[disabled] .checkbox-inline { + cursor: not-allowed; +} +.radio.disabled label, +.checkbox.disabled label, +fieldset[disabled] .radio label, +fieldset[disabled] .checkbox label { + cursor: not-allowed; +} +.form-control-static { + padding-top: 7px; + padding-bottom: 7px; + margin-bottom: 0; +} +.form-control-static.input-lg, +.form-control-static.input-sm { + padding-right: 0; + padding-left: 0; +} +.input-sm, +.form-group-sm .form-control { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-sm, +select.form-group-sm .form-control { + height: 30px; + line-height: 30px; +} +textarea.input-sm, +textarea.form-group-sm .form-control, +select[multiple].input-sm, +select[multiple].form-group-sm .form-control { + height: auto; +} +.input-lg, +.form-group-lg .form-control { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-lg, +select.form-group-lg .form-control { + height: 46px; + line-height: 46px; +} +textarea.input-lg, +textarea.form-group-lg .form-control, +select[multiple].input-lg, +select[multiple].form-group-lg .form-control { + height: auto; +} +.has-feedback { + position: relative; +} +.has-feedback .form-control { + padding-right: 42.5px; +} +.form-control-feedback { + position: absolute; + top: 0; + right: 0; + z-index: 2; + display: block; + width: 34px; + height: 34px; + line-height: 34px; + text-align: center; + pointer-events: none; +} +.input-lg + .form-control-feedback { + width: 46px; + height: 46px; + line-height: 46px; +} +.input-sm + .form-control-feedback { + width: 30px; + height: 30px; + line-height: 30px; +} +.has-success .help-block, +.has-success .control-label, +.has-success .radio, +.has-success .checkbox, +.has-success .radio-inline, +.has-success .checkbox-inline, +.has-success.radio label, +.has-success.checkbox label, +.has-success.radio-inline label, +.has-success.checkbox-inline label { + color: #3c763d; +} +.has-success .form-control { + border-color: #3c763d; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-success .form-control:focus { + border-color: #2b542c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168; +} +.has-success .input-group-addon { + color: #3c763d; + background-color: #dff0d8; + border-color: #3c763d; +} +.has-success .form-control-feedback { + color: #3c763d; +} +.has-warning .help-block, +.has-warning .control-label, +.has-warning .radio, +.has-warning .checkbox, +.has-warning .radio-inline, +.has-warning .checkbox-inline, +.has-warning.radio label, +.has-warning.checkbox label, +.has-warning.radio-inline label, +.has-warning.checkbox-inline label { + color: #8a6d3b; +} +.has-warning .form-control { + border-color: #8a6d3b; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-warning .form-control:focus { + border-color: #66512c; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b; +} +.has-warning .input-group-addon { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #8a6d3b; +} +.has-warning .form-control-feedback { + color: #8a6d3b; +} +.has-error .help-block, +.has-error .control-label, +.has-error .radio, +.has-error .checkbox, +.has-error .radio-inline, +.has-error .checkbox-inline, +.has-error.radio label, +.has-error.checkbox label, +.has-error.radio-inline label, +.has-error.checkbox-inline label { + color: #a94442; +} +.has-error .form-control { + border-color: #a94442; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075); +} +.has-error .form-control:focus { + border-color: #843534; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483; +} +.has-error .input-group-addon { + color: #a94442; + background-color: #f2dede; + border-color: #a94442; +} +.has-error .form-control-feedback { + color: #a94442; +} +.has-feedback label ~ .form-control-feedback { + top: 25px; +} +.has-feedback label.sr-only ~ .form-control-feedback { + top: 0; +} +.help-block { + display: block; + margin-top: 5px; + margin-bottom: 10px; + color: #737373; +} +@media (min-width: 768px) { + .form-inline .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-static { + display: inline-block; + } + .form-inline .input-group { + display: inline-table; + vertical-align: middle; + } + .form-inline .input-group .input-group-addon, + .form-inline .input-group .input-group-btn, + .form-inline .input-group .form-control { + width: auto; + } + .form-inline .input-group > .form-control { + width: 100%; + } + .form-inline .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio, + .form-inline .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .form-inline .radio label, + .form-inline .checkbox label { + padding-left: 0; + } + .form-inline .radio input[type="radio"], + .form-inline .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .form-inline .has-feedback .form-control-feedback { + top: 0; + } +} +.form-horizontal .radio, +.form-horizontal .checkbox, +.form-horizontal .radio-inline, +.form-horizontal .checkbox-inline { + padding-top: 7px; + margin-top: 0; + margin-bottom: 0; +} +.form-horizontal .radio, +.form-horizontal .checkbox { + min-height: 27px; +} +.form-horizontal .form-group { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .form-horizontal .control-label { + padding-top: 7px; + margin-bottom: 0; + text-align: right; + } +} +.form-horizontal .has-feedback .form-control-feedback { + right: 15px; +} +@media (min-width: 768px) { + .form-horizontal .form-group-lg .control-label { + padding-top: 14.3px; + } +} +@media (min-width: 768px) { + .form-horizontal .form-group-sm .control-label { + padding-top: 6px; + } +} +.btn { + display: inline-block; + padding: 6px 12px; + margin-bottom: 0; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: center; + white-space: nowrap; + vertical-align: middle; + -ms-touch-action: manipulation; + touch-action: manipulation; + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.btn:focus, +.btn:active:focus, +.btn.active:focus, +.btn.focus, +.btn:active.focus, +.btn.active.focus { + outline: thin dotted; + outline: 5px auto -webkit-focus-ring-color; + outline-offset: -2px; +} +.btn:hover, +.btn:focus, +.btn.focus { + color: #333; + text-decoration: none; +} +.btn:active, +.btn.active { + background-image: none; + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn.disabled, +.btn[disabled], +fieldset[disabled] .btn { + pointer-events: none; + cursor: not-allowed; + filter: alpha(opacity=65); + -webkit-box-shadow: none; + box-shadow: none; + opacity: .65; +} +.btn-default { + color: #333; + background-color: #fff; + border-color: #ccc; +} +.btn-default:hover, +.btn-default:focus, +.btn-default.focus, +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + color: #333; + background-color: #e6e6e6; + border-color: #adadad; +} +.btn-default:active, +.btn-default.active, +.open > .dropdown-toggle.btn-default { + background-image: none; +} +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled.focus, +.btn-default[disabled].focus, +fieldset[disabled] .btn-default.focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fff; + border-color: #ccc; +} +.btn-default .badge { + color: #fff; + background-color: #333; +} +.btn-primary { + color: #fff; + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary:hover, +.btn-primary:focus, +.btn-primary.focus, +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + color: #fff; + background-color: #286090; + border-color: #204d74; +} +.btn-primary:active, +.btn-primary.active, +.open > .dropdown-toggle.btn-primary { + background-image: none; +} +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled.focus, +.btn-primary[disabled].focus, +fieldset[disabled] .btn-primary.focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #337ab7; + border-color: #2e6da4; +} +.btn-primary .badge { + color: #337ab7; + background-color: #fff; +} +.btn-success { + color: #fff; + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success:hover, +.btn-success:focus, +.btn-success.focus, +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + color: #fff; + background-color: #449d44; + border-color: #398439; +} +.btn-success:active, +.btn-success.active, +.open > .dropdown-toggle.btn-success { + background-image: none; +} +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled.focus, +.btn-success[disabled].focus, +fieldset[disabled] .btn-success.focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #5cb85c; + border-color: #4cae4c; +} +.btn-success .badge { + color: #5cb85c; + background-color: #fff; +} +.btn-info { + color: #fff; + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info:hover, +.btn-info:focus, +.btn-info.focus, +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + color: #fff; + background-color: #31b0d5; + border-color: #269abc; +} +.btn-info:active, +.btn-info.active, +.open > .dropdown-toggle.btn-info { + background-image: none; +} +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled.focus, +.btn-info[disabled].focus, +fieldset[disabled] .btn-info.focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #5bc0de; + border-color: #46b8da; +} +.btn-info .badge { + color: #5bc0de; + background-color: #fff; +} +.btn-warning { + color: #fff; + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning:hover, +.btn-warning:focus, +.btn-warning.focus, +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + color: #fff; + background-color: #ec971f; + border-color: #d58512; +} +.btn-warning:active, +.btn-warning.active, +.open > .dropdown-toggle.btn-warning { + background-image: none; +} +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled.focus, +.btn-warning[disabled].focus, +fieldset[disabled] .btn-warning.focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #f0ad4e; + border-color: #eea236; +} +.btn-warning .badge { + color: #f0ad4e; + background-color: #fff; +} +.btn-danger { + color: #fff; + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger:hover, +.btn-danger:focus, +.btn-danger.focus, +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + color: #fff; + background-color: #c9302c; + border-color: #ac2925; +} +.btn-danger:active, +.btn-danger.active, +.open > .dropdown-toggle.btn-danger { + background-image: none; +} +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled.focus, +.btn-danger[disabled].focus, +fieldset[disabled] .btn-danger.focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #d9534f; + border-color: #d43f3a; +} +.btn-danger .badge { + color: #d9534f; + background-color: #fff; +} +.btn-link { + font-weight: normal; + color: #337ab7; + border-radius: 0; +} +.btn-link, +.btn-link:active, +.btn-link.active, +.btn-link[disabled], +fieldset[disabled] .btn-link { + background-color: transparent; + -webkit-box-shadow: none; + box-shadow: none; +} +.btn-link, +.btn-link:hover, +.btn-link:focus, +.btn-link:active { + border-color: transparent; +} +.btn-link:hover, +.btn-link:focus { + color: #23527c; + text-decoration: underline; + background-color: transparent; +} +.btn-link[disabled]:hover, +fieldset[disabled] .btn-link:hover, +.btn-link[disabled]:focus, +fieldset[disabled] .btn-link:focus { + color: #777; + text-decoration: none; +} +.btn-lg, +.btn-group-lg > .btn { + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +.btn-sm, +.btn-group-sm > .btn { + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-xs, +.btn-group-xs > .btn { + padding: 1px 5px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +.btn-block { + display: block; + width: 100%; +} +.btn-block + .btn-block { + margin-top: 5px; +} +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} +.fade { + opacity: 0; + -webkit-transition: opacity .15s linear; + -o-transition: opacity .15s linear; + transition: opacity .15s linear; +} +.fade.in { + opacity: 1; +} +.collapse { + display: none; + visibility: hidden; +} +.collapse.in { + display: block; + visibility: visible; +} +tr.collapse.in { + display: table-row; +} +tbody.collapse.in { + display: table-row-group; +} +.collapsing { + position: relative; + height: 0; + overflow: hidden; + -webkit-transition-timing-function: ease; + -o-transition-timing-function: ease; + transition-timing-function: ease; + -webkit-transition-duration: .35s; + -o-transition-duration: .35s; + transition-duration: .35s; + -webkit-transition-property: height, visibility; + -o-transition-property: height, visibility; + transition-property: height, visibility; +} +.caret { + display: inline-block; + width: 0; + height: 0; + margin-left: 2px; + vertical-align: middle; + border-top: 4px solid; + border-right: 4px solid transparent; + border-left: 4px solid transparent; +} +.dropdown { + position: relative; +} +.dropdown-toggle:focus { + outline: 0; +} +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 160px; + padding: 5px 0; + margin: 2px 0 0; + font-size: 14px; + text-align: left; + list-style: none; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .15); + border-radius: 4px; + -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175); + box-shadow: 0 6px 12px rgba(0, 0, 0, .175); +} +.dropdown-menu.pull-right { + right: 0; + left: auto; +} +.dropdown-menu .divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.dropdown-menu > li > a { + display: block; + padding: 3px 20px; + clear: both; + font-weight: normal; + line-height: 1.42857143; + color: #333; + white-space: nowrap; +} +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus { + color: #262626; + text-decoration: none; + background-color: #f5f5f5; +} +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #fff; + text-decoration: none; + background-color: #337ab7; + outline: 0; +} +.dropdown-menu > .disabled > a, +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + color: #777; +} +.dropdown-menu > .disabled > a:hover, +.dropdown-menu > .disabled > a:focus { + text-decoration: none; + cursor: not-allowed; + background-color: transparent; + background-image: none; + filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); +} +.open > .dropdown-menu { + display: block; +} +.open > a { + outline: 0; +} +.dropdown-menu-right { + right: 0; + left: auto; +} +.dropdown-menu-left { + right: auto; + left: 0; +} +.dropdown-header { + display: block; + padding: 3px 20px; + font-size: 12px; + line-height: 1.42857143; + color: #777; + white-space: nowrap; +} +.dropdown-backdrop { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 990; +} +.pull-right > .dropdown-menu { + right: 0; + left: auto; +} +.dropup .caret, +.navbar-fixed-bottom .dropdown .caret { + content: ""; + border-top: 0; + border-bottom: 4px solid; +} +.dropup .dropdown-menu, +.navbar-fixed-bottom .dropdown .dropdown-menu { + top: auto; + bottom: 100%; + margin-bottom: 1px; +} +@media (min-width: 768px) { + .navbar-right .dropdown-menu { + right: 0; + left: auto; + } + .navbar-right .dropdown-menu-left { + right: auto; + left: 0; + } +} +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-block; + vertical-align: middle; +} +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + float: left; +} +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover, +.btn-group > .btn:focus, +.btn-group-vertical > .btn:focus, +.btn-group > .btn:active, +.btn-group-vertical > .btn:active, +.btn-group > .btn.active, +.btn-group-vertical > .btn.active { + z-index: 2; +} +.btn-group .btn + .btn, +.btn-group .btn + .btn-group, +.btn-group .btn-group + .btn, +.btn-group .btn-group + .btn-group { + margin-left: -1px; +} +.btn-toolbar { + margin-left: -5px; +} +.btn-toolbar .btn-group, +.btn-toolbar .input-group { + float: left; +} +.btn-toolbar > .btn, +.btn-toolbar > .btn-group, +.btn-toolbar > .input-group { + margin-left: 5px; +} +.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) { + border-radius: 0; +} +.btn-group > .btn:first-child { + margin-left: 0; +} +.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn:last-child:not(:first-child), +.btn-group > .dropdown-toggle:not(:first-child) { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group > .btn-group { + float: left; +} +.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group > .btn-group:first-child > .btn:last-child, +.btn-group > .btn-group:first-child > .dropdown-toggle { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.btn-group > .btn-group:last-child > .btn:first-child { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group .dropdown-toggle:active, +.btn-group.open .dropdown-toggle { + outline: 0; +} +.btn-group > .btn + .dropdown-toggle { + padding-right: 8px; + padding-left: 8px; +} +.btn-group > .btn-lg + .dropdown-toggle { + padding-right: 12px; + padding-left: 12px; +} +.btn-group.open .dropdown-toggle { + -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); + box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125); +} +.btn-group.open .dropdown-toggle.btn-link { + -webkit-box-shadow: none; + box-shadow: none; +} +.btn .caret { + margin-left: 0; +} +.btn-lg .caret { + border-width: 5px 5px 0; + border-bottom-width: 0; +} +.dropup .btn-lg .caret { + border-width: 0 5px 5px; +} +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group, +.btn-group-vertical > .btn-group > .btn { + display: block; + float: none; + width: 100%; + max-width: 100%; +} +.btn-group-vertical > .btn-group > .btn { + float: none; +} +.btn-group-vertical > .btn + .btn, +.btn-group-vertical > .btn + .btn-group, +.btn-group-vertical > .btn-group + .btn, +.btn-group-vertical > .btn-group + .btn-group { + margin-top: -1px; + margin-left: 0; +} +.btn-group-vertical > .btn:not(:first-child):not(:last-child) { + border-radius: 0; +} +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-left-radius: 4px; +} +.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn { + border-radius: 0; +} +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child, +.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle { + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child { + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.btn-group-justified { + display: table; + width: 100%; + table-layout: fixed; + border-collapse: separate; +} +.btn-group-justified > .btn, +.btn-group-justified > .btn-group { + display: table-cell; + float: none; + width: 1%; +} +.btn-group-justified > .btn-group .btn { + width: 100%; +} +.btn-group-justified > .btn-group .dropdown-menu { + left: auto; +} +[data-toggle="buttons"] > .btn input[type="radio"], +[data-toggle="buttons"] > .btn-group > .btn input[type="radio"], +[data-toggle="buttons"] > .btn input[type="checkbox"], +[data-toggle="buttons"] > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} +.input-group { + position: relative; + display: table; + border-collapse: separate; +} +.input-group[class*="col-"] { + float: none; + padding-right: 0; + padding-left: 0; +} +.input-group .form-control { + position: relative; + z-index: 2; + float: left; + width: 100%; + margin-bottom: 0; +} +.input-group-lg > .form-control, +.input-group-lg > .input-group-addon, +.input-group-lg > .input-group-btn > .btn { + height: 46px; + padding: 10px 16px; + font-size: 18px; + line-height: 1.33; + border-radius: 6px; +} +select.input-group-lg > .form-control, +select.input-group-lg > .input-group-addon, +select.input-group-lg > .input-group-btn > .btn { + height: 46px; + line-height: 46px; +} +textarea.input-group-lg > .form-control, +textarea.input-group-lg > .input-group-addon, +textarea.input-group-lg > .input-group-btn > .btn, +select[multiple].input-group-lg > .form-control, +select[multiple].input-group-lg > .input-group-addon, +select[multiple].input-group-lg > .input-group-btn > .btn { + height: auto; +} +.input-group-sm > .form-control, +.input-group-sm > .input-group-addon, +.input-group-sm > .input-group-btn > .btn { + height: 30px; + padding: 5px 10px; + font-size: 12px; + line-height: 1.5; + border-radius: 3px; +} +select.input-group-sm > .form-control, +select.input-group-sm > .input-group-addon, +select.input-group-sm > .input-group-btn > .btn { + height: 30px; + line-height: 30px; +} +textarea.input-group-sm > .form-control, +textarea.input-group-sm > .input-group-addon, +textarea.input-group-sm > .input-group-btn > .btn, +select[multiple].input-group-sm > .form-control, +select[multiple].input-group-sm > .input-group-addon, +select[multiple].input-group-sm > .input-group-btn > .btn { + height: auto; +} +.input-group-addon, +.input-group-btn, +.input-group .form-control { + display: table-cell; +} +.input-group-addon:not(:first-child):not(:last-child), +.input-group-btn:not(:first-child):not(:last-child), +.input-group .form-control:not(:first-child):not(:last-child) { + border-radius: 0; +} +.input-group-addon, +.input-group-btn { + width: 1%; + white-space: nowrap; + vertical-align: middle; +} +.input-group-addon { + padding: 6px 12px; + font-size: 14px; + font-weight: normal; + line-height: 1; + color: #555; + text-align: center; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 4px; +} +.input-group-addon.input-sm { + padding: 5px 10px; + font-size: 12px; + border-radius: 3px; +} +.input-group-addon.input-lg { + padding: 10px 16px; + font-size: 18px; + border-radius: 6px; +} +.input-group-addon input[type="radio"], +.input-group-addon input[type="checkbox"] { + margin-top: 0; +} +.input-group .form-control:first-child, +.input-group-addon:first-child, +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group > .btn, +.input-group-btn:first-child > .dropdown-toggle, +.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle), +.input-group-btn:last-child > .btn-group:not(:last-child) > .btn { + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} +.input-group-addon:first-child { + border-right: 0; +} +.input-group .form-control:last-child, +.input-group-addon:last-child, +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group > .btn, +.input-group-btn:last-child > .dropdown-toggle, +.input-group-btn:first-child > .btn:not(:first-child), +.input-group-btn:first-child > .btn-group:not(:first-child) > .btn { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.input-group-addon:last-child { + border-left: 0; +} +.input-group-btn { + position: relative; + font-size: 0; + white-space: nowrap; +} +.input-group-btn > .btn { + position: relative; +} +.input-group-btn > .btn + .btn { + margin-left: -1px; +} +.input-group-btn > .btn:hover, +.input-group-btn > .btn:focus, +.input-group-btn > .btn:active { + z-index: 2; +} +.input-group-btn:first-child > .btn, +.input-group-btn:first-child > .btn-group { + margin-right: -1px; +} +.input-group-btn:last-child > .btn, +.input-group-btn:last-child > .btn-group { + margin-left: -1px; +} +.nav { + padding-left: 0; + margin-bottom: 0; + list-style: none; +} +.nav > li { + position: relative; + display: block; +} +.nav > li > a { + position: relative; + display: block; + padding: 10px 15px; +} +.nav > li > a:hover, +.nav > li > a:focus { + text-decoration: none; + background-color: #eee; +} +.nav > li.disabled > a { + color: #777; +} +.nav > li.disabled > a:hover, +.nav > li.disabled > a:focus { + color: #777; + text-decoration: none; + cursor: not-allowed; + background-color: transparent; +} +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #eee; + border-color: #337ab7; +} +.nav .nav-divider { + height: 1px; + margin: 9px 0; + overflow: hidden; + background-color: #e5e5e5; +} +.nav > li > a > img { + max-width: none; +} +.nav-tabs { + border-bottom: 1px solid #ddd; +} +.nav-tabs > li { + float: left; + margin-bottom: -1px; +} +.nav-tabs > li > a { + margin-right: 2px; + line-height: 1.42857143; + border: 1px solid transparent; + border-radius: 4px 4px 0 0; +} +.nav-tabs > li > a:hover { + border-color: #eee #eee #ddd; +} +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover, +.nav-tabs > li.active > a:focus { + color: #555; + cursor: default; + background-color: #fff; + border: 1px solid #ddd; + border-bottom-color: transparent; +} +.nav-tabs.nav-justified { + width: 100%; + border-bottom: 0; +} +.nav-tabs.nav-justified > li { + float: none; +} +.nav-tabs.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-tabs.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-tabs.nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs.nav-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs.nav-justified > .active > a, +.nav-tabs.nav-justified > .active > a:hover, +.nav-tabs.nav-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs.nav-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs.nav-justified > .active > a, + .nav-tabs.nav-justified > .active > a:hover, + .nav-tabs.nav-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.nav-pills > li { + float: left; +} +.nav-pills > li > a { + border-radius: 4px; +} +.nav-pills > li + li { + margin-left: 2px; +} +.nav-pills > li.active > a, +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:focus { + color: #fff; + background-color: #337ab7; +} +.nav-stacked > li { + float: none; +} +.nav-stacked > li + li { + margin-top: 2px; + margin-left: 0; +} +.nav-justified { + width: 100%; +} +.nav-justified > li { + float: none; +} +.nav-justified > li > a { + margin-bottom: 5px; + text-align: center; +} +.nav-justified > .dropdown .dropdown-menu { + top: auto; + left: auto; +} +@media (min-width: 768px) { + .nav-justified > li { + display: table-cell; + width: 1%; + } + .nav-justified > li > a { + margin-bottom: 0; + } +} +.nav-tabs-justified { + border-bottom: 0; +} +.nav-tabs-justified > li > a { + margin-right: 0; + border-radius: 4px; +} +.nav-tabs-justified > .active > a, +.nav-tabs-justified > .active > a:hover, +.nav-tabs-justified > .active > a:focus { + border: 1px solid #ddd; +} +@media (min-width: 768px) { + .nav-tabs-justified > li > a { + border-bottom: 1px solid #ddd; + border-radius: 4px 4px 0 0; + } + .nav-tabs-justified > .active > a, + .nav-tabs-justified > .active > a:hover, + .nav-tabs-justified > .active > a:focus { + border-bottom-color: #fff; + } +} +.tab-content > .tab-pane { + display: none; + visibility: hidden; +} +.tab-content > .active { + display: block; + visibility: visible; +} +.nav-tabs .dropdown-menu { + margin-top: -1px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar { + position: relative; + min-height: 50px; + margin-bottom: 20px; + border: 1px solid transparent; +} +@media (min-width: 768px) { + .navbar { + border-radius: 4px; + } +} +@media (min-width: 768px) { + .navbar-header { + float: left; + } +} +.navbar-collapse { + padding-right: 15px; + padding-left: 15px; + overflow-x: visible; + -webkit-overflow-scrolling: touch; + border-top: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1); +} +.navbar-collapse.in { + overflow-y: auto; +} +@media (min-width: 768px) { + .navbar-collapse { + width: auto; + border-top: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-collapse.collapse { + display: block !important; + height: auto !important; + padding-bottom: 0; + overflow: visible !important; + visibility: visible !important; + } + .navbar-collapse.in { + overflow-y: visible; + } + .navbar-fixed-top .navbar-collapse, + .navbar-static-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + padding-right: 0; + padding-left: 0; + } +} +.navbar-fixed-top .navbar-collapse, +.navbar-fixed-bottom .navbar-collapse { + max-height: 340px; +} +@media (max-device-width: 480px) and (orientation: landscape) { + .navbar-fixed-top .navbar-collapse, + .navbar-fixed-bottom .navbar-collapse { + max-height: 200px; + } +} +.container > .navbar-header, +.container-fluid > .navbar-header, +.container > .navbar-collapse, +.container-fluid > .navbar-collapse { + margin-right: -15px; + margin-left: -15px; +} +@media (min-width: 768px) { + .container > .navbar-header, + .container-fluid > .navbar-header, + .container > .navbar-collapse, + .container-fluid > .navbar-collapse { + margin-right: 0; + margin-left: 0; + } +} +.navbar-static-top { + z-index: 1000; + border-width: 0 0 1px; +} +@media (min-width: 768px) { + .navbar-static-top { + border-radius: 0; + } +} +.navbar-fixed-top, +.navbar-fixed-bottom { + position: fixed; + right: 0; + left: 0; + z-index: 1030; +} +@media (min-width: 768px) { + .navbar-fixed-top, + .navbar-fixed-bottom { + border-radius: 0; + } +} +.navbar-fixed-top { + top: 0; + border-width: 0 0 1px; +} +.navbar-fixed-bottom { + bottom: 0; + margin-bottom: 0; + border-width: 1px 0 0; +} +.navbar-brand { + float: left; + height: 50px; + padding: 15px 15px; + font-size: 18px; + line-height: 20px; +} +.navbar-brand:hover, +.navbar-brand:focus { + text-decoration: none; +} +.navbar-brand > img { + display: block; +} +@media (min-width: 768px) { + .navbar > .container .navbar-brand, + .navbar > .container-fluid .navbar-brand { + margin-left: -15px; + } +} +.navbar-toggle { + position: relative; + float: right; + padding: 9px 10px; + margin-top: 8px; + margin-right: 15px; + margin-bottom: 8px; + background-color: transparent; + background-image: none; + border: 1px solid transparent; + border-radius: 4px; +} +.navbar-toggle:focus { + outline: 0; +} +.navbar-toggle .icon-bar { + display: block; + width: 22px; + height: 2px; + border-radius: 1px; +} +.navbar-toggle .icon-bar + .icon-bar { + margin-top: 4px; +} +@media (min-width: 768px) { + .navbar-toggle { + display: none; + } +} +.navbar-nav { + margin: 7.5px -15px; +} +.navbar-nav > li > a { + padding-top: 10px; + padding-bottom: 10px; + line-height: 20px; +} +@media (max-width: 767px) { + .navbar-nav .open .dropdown-menu { + position: static; + float: none; + width: auto; + margin-top: 0; + background-color: transparent; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } + .navbar-nav .open .dropdown-menu > li > a, + .navbar-nav .open .dropdown-menu .dropdown-header { + padding: 5px 15px 5px 25px; + } + .navbar-nav .open .dropdown-menu > li > a { + line-height: 20px; + } + .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-nav .open .dropdown-menu > li > a:focus { + background-image: none; + } +} +@media (min-width: 768px) { + .navbar-nav { + float: left; + margin: 0; + } + .navbar-nav > li { + float: left; + } + .navbar-nav > li > a { + padding-top: 15px; + padding-bottom: 15px; + } +} +.navbar-form { + padding: 10px 15px; + margin-top: 8px; + margin-right: -15px; + margin-bottom: 8px; + margin-left: -15px; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1); +} +@media (min-width: 768px) { + .navbar-form .form-group { + display: inline-block; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .navbar-form .form-control-static { + display: inline-block; + } + .navbar-form .input-group { + display: inline-table; + vertical-align: middle; + } + .navbar-form .input-group .input-group-addon, + .navbar-form .input-group .input-group-btn, + .navbar-form .input-group .form-control { + width: auto; + } + .navbar-form .input-group > .form-control { + width: 100%; + } + .navbar-form .control-label { + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio, + .navbar-form .checkbox { + display: inline-block; + margin-top: 0; + margin-bottom: 0; + vertical-align: middle; + } + .navbar-form .radio label, + .navbar-form .checkbox label { + padding-left: 0; + } + .navbar-form .radio input[type="radio"], + .navbar-form .checkbox input[type="checkbox"] { + position: relative; + margin-left: 0; + } + .navbar-form .has-feedback .form-control-feedback { + top: 0; + } +} +@media (max-width: 767px) { + .navbar-form .form-group { + margin-bottom: 5px; + } + .navbar-form .form-group:last-child { + margin-bottom: 0; + } +} +@media (min-width: 768px) { + .navbar-form { + width: auto; + padding-top: 0; + padding-bottom: 0; + margin-right: 0; + margin-left: 0; + border: 0; + -webkit-box-shadow: none; + box-shadow: none; + } +} +.navbar-nav > li > .dropdown-menu { + margin-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom-right-radius: 0; + border-bottom-left-radius: 0; +} +.navbar-btn { + margin-top: 8px; + margin-bottom: 8px; +} +.navbar-btn.btn-sm { + margin-top: 10px; + margin-bottom: 10px; +} +.navbar-btn.btn-xs { + margin-top: 14px; + margin-bottom: 14px; +} +.navbar-text { + margin-top: 15px; + margin-bottom: 15px; +} +@media (min-width: 768px) { + .navbar-text { + float: left; + margin-right: 15px; + margin-left: 15px; + } +} +@media (min-width: 768px) { + .navbar-left { + float: left !important; + } + .navbar-right { + float: right !important; + margin-right: -15px; + } + .navbar-right ~ .navbar-right { + margin-right: 0; + } +} +.navbar-default { + background-color: #f8f8f8; + border-color: #e7e7e7; +} +.navbar-default .navbar-brand { + color: #777; +} +.navbar-default .navbar-brand:hover, +.navbar-default .navbar-brand:focus { + color: #5e5e5e; + background-color: transparent; +} +.navbar-default .navbar-text { + color: #777; +} +.navbar-default .navbar-nav > li > a { + color: #777; +} +.navbar-default .navbar-nav > li > a:hover, +.navbar-default .navbar-nav > li > a:focus { + color: #333; + background-color: transparent; +} +.navbar-default .navbar-nav > .active > a, +.navbar-default .navbar-nav > .active > a:hover, +.navbar-default .navbar-nav > .active > a:focus { + color: #555; + background-color: #e7e7e7; +} +.navbar-default .navbar-nav > .disabled > a, +.navbar-default .navbar-nav > .disabled > a:hover, +.navbar-default .navbar-nav > .disabled > a:focus { + color: #ccc; + background-color: transparent; +} +.navbar-default .navbar-toggle { + border-color: #ddd; +} +.navbar-default .navbar-toggle:hover, +.navbar-default .navbar-toggle:focus { + background-color: #ddd; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #888; +} +.navbar-default .navbar-collapse, +.navbar-default .navbar-form { + border-color: #e7e7e7; +} +.navbar-default .navbar-nav > .open > a, +.navbar-default .navbar-nav > .open > a:hover, +.navbar-default .navbar-nav > .open > a:focus { + color: #555; + background-color: #e7e7e7; +} +@media (max-width: 767px) { + .navbar-default .navbar-nav .open .dropdown-menu > li > a { + color: #777; + } + .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus { + color: #333; + background-color: transparent; + } + .navbar-default .navbar-nav .open .dropdown-menu > .active > a, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #555; + background-color: #e7e7e7; + } + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #ccc; + background-color: transparent; + } +} +.navbar-default .navbar-link { + color: #777; +} +.navbar-default .navbar-link:hover { + color: #333; +} +.navbar-default .btn-link { + color: #777; +} +.navbar-default .btn-link:hover, +.navbar-default .btn-link:focus { + color: #333; +} +.navbar-default .btn-link[disabled]:hover, +fieldset[disabled] .navbar-default .btn-link:hover, +.navbar-default .btn-link[disabled]:focus, +fieldset[disabled] .navbar-default .btn-link:focus { + color: #ccc; +} +.navbar-inverse { + background-color: #222; + border-color: #080808; +} +.navbar-inverse .navbar-brand { + color: #9d9d9d; +} +.navbar-inverse .navbar-brand:hover, +.navbar-inverse .navbar-brand:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-text { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a { + color: #9d9d9d; +} +.navbar-inverse .navbar-nav > li > a:hover, +.navbar-inverse .navbar-nav > li > a:focus { + color: #fff; + background-color: transparent; +} +.navbar-inverse .navbar-nav > .active > a, +.navbar-inverse .navbar-nav > .active > a:hover, +.navbar-inverse .navbar-nav > .active > a:focus { + color: #fff; + background-color: #080808; +} +.navbar-inverse .navbar-nav > .disabled > a, +.navbar-inverse .navbar-nav > .disabled > a:hover, +.navbar-inverse .navbar-nav > .disabled > a:focus { + color: #444; + background-color: transparent; +} +.navbar-inverse .navbar-toggle { + border-color: #333; +} +.navbar-inverse .navbar-toggle:hover, +.navbar-inverse .navbar-toggle:focus { + background-color: #333; +} +.navbar-inverse .navbar-toggle .icon-bar { + background-color: #fff; +} +.navbar-inverse .navbar-collapse, +.navbar-inverse .navbar-form { + border-color: #101010; +} +.navbar-inverse .navbar-nav > .open > a, +.navbar-inverse .navbar-nav > .open > a:hover, +.navbar-inverse .navbar-nav > .open > a:focus { + color: #fff; + background-color: #080808; +} +@media (max-width: 767px) { + .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header { + border-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu .divider { + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a { + color: #9d9d9d; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus { + color: #fff; + background-color: transparent; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus { + color: #fff; + background-color: #080808; + } + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover, + .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus { + color: #444; + background-color: transparent; + } +} +.navbar-inverse .navbar-link { + color: #9d9d9d; +} +.navbar-inverse .navbar-link:hover { + color: #fff; +} +.navbar-inverse .btn-link { + color: #9d9d9d; +} +.navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link:focus { + color: #fff; +} +.navbar-inverse .btn-link[disabled]:hover, +fieldset[disabled] .navbar-inverse .btn-link:hover, +.navbar-inverse .btn-link[disabled]:focus, +fieldset[disabled] .navbar-inverse .btn-link:focus { + color: #444; +} +.breadcrumb { + padding: 8px 15px; + margin-bottom: 20px; + list-style: none; + background-color: #f5f5f5; + border-radius: 4px; +} +.breadcrumb > li { + display: inline-block; +} +.breadcrumb > li + li:before { + padding: 0 5px; + color: #ccc; + content: "/\00a0"; +} +.breadcrumb > .active { + color: #777; +} +.pagination { + display: inline-block; + padding-left: 0; + margin: 20px 0; + border-radius: 4px; +} +.pagination > li { + display: inline; +} +.pagination > li > a, +.pagination > li > span { + position: relative; + float: left; + padding: 6px 12px; + margin-left: -1px; + line-height: 1.42857143; + color: #337ab7; + text-decoration: none; + background-color: #fff; + border: 1px solid #ddd; +} +.pagination > li:first-child > a, +.pagination > li:first-child > span { + margin-left: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.pagination > li:last-child > a, +.pagination > li:last-child > span { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.pagination > li > a:hover, +.pagination > li > span:hover, +.pagination > li > a:focus, +.pagination > li > span:focus { + color: #23527c; + background-color: #eee; + border-color: #ddd; +} +.pagination > .active > a, +.pagination > .active > span, +.pagination > .active > a:hover, +.pagination > .active > span:hover, +.pagination > .active > a:focus, +.pagination > .active > span:focus { + z-index: 2; + color: #fff; + cursor: default; + background-color: #337ab7; + border-color: #337ab7; +} +.pagination > .disabled > span, +.pagination > .disabled > span:hover, +.pagination > .disabled > span:focus, +.pagination > .disabled > a, +.pagination > .disabled > a:hover, +.pagination > .disabled > a:focus { + color: #777; + cursor: not-allowed; + background-color: #fff; + border-color: #ddd; +} +.pagination-lg > li > a, +.pagination-lg > li > span { + padding: 10px 16px; + font-size: 18px; +} +.pagination-lg > li:first-child > a, +.pagination-lg > li:first-child > span { + border-top-left-radius: 6px; + border-bottom-left-radius: 6px; +} +.pagination-lg > li:last-child > a, +.pagination-lg > li:last-child > span { + border-top-right-radius: 6px; + border-bottom-right-radius: 6px; +} +.pagination-sm > li > a, +.pagination-sm > li > span { + padding: 5px 10px; + font-size: 12px; +} +.pagination-sm > li:first-child > a, +.pagination-sm > li:first-child > span { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; +} +.pagination-sm > li:last-child > a, +.pagination-sm > li:last-child > span { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; +} +.pager { + padding-left: 0; + margin: 20px 0; + text-align: center; + list-style: none; +} +.pager li { + display: inline; +} +.pager li > a, +.pager li > span { + display: inline-block; + padding: 5px 14px; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 15px; +} +.pager li > a:hover, +.pager li > a:focus { + text-decoration: none; + background-color: #eee; +} +.pager .next > a, +.pager .next > span { + float: right; +} +.pager .previous > a, +.pager .previous > span { + float: left; +} +.pager .disabled > a, +.pager .disabled > a:hover, +.pager .disabled > a:focus, +.pager .disabled > span { + color: #777; + cursor: not-allowed; + background-color: #fff; +} +.label { + display: inline; + padding: .2em .6em .3em; + font-size: 75%; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + border-radius: .25em; +} +a.label:hover, +a.label:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.label:empty { + display: none; +} +.btn .label { + position: relative; + top: -1px; +} +.label-default { + background-color: #777; +} +.label-default[href]:hover, +.label-default[href]:focus { + background-color: #5e5e5e; +} +.label-primary { + background-color: #337ab7; +} +.label-primary[href]:hover, +.label-primary[href]:focus { + background-color: #286090; +} +.label-success { + background-color: #5cb85c; +} +.label-success[href]:hover, +.label-success[href]:focus { + background-color: #449d44; +} +.label-info { + background-color: #5bc0de; +} +.label-info[href]:hover, +.label-info[href]:focus { + background-color: #31b0d5; +} +.label-warning { + background-color: #f0ad4e; +} +.label-warning[href]:hover, +.label-warning[href]:focus { + background-color: #ec971f; +} +.label-danger { + background-color: #d9534f; +} +.label-danger[href]:hover, +.label-danger[href]:focus { + background-color: #c9302c; +} +.badge { + display: inline-block; + min-width: 10px; + padding: 3px 7px; + font-size: 12px; + font-weight: bold; + line-height: 1; + color: #fff; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + background-color: #777; + border-radius: 10px; +} +.badge:empty { + display: none; +} +.btn .badge { + position: relative; + top: -1px; +} +.btn-xs .badge { + top: 0; + padding: 1px 5px; +} +a.badge:hover, +a.badge:focus { + color: #fff; + text-decoration: none; + cursor: pointer; +} +.list-group-item.active > .badge, +.nav-pills > .active > a > .badge { + color: #337ab7; + background-color: #fff; +} +.list-group-item > .badge { + float: right; +} +.list-group-item > .badge + .badge { + margin-right: 5px; +} +.nav-pills > li > a > .badge { + margin-left: 3px; +} +.jumbotron { + padding: 30px 15px; + margin-bottom: 30px; + color: inherit; + background-color: #eee; +} +.jumbotron h1, +.jumbotron .h1 { + color: inherit; +} +.jumbotron p { + margin-bottom: 15px; + font-size: 21px; + font-weight: 200; +} +.jumbotron > hr { + border-top-color: #d5d5d5; +} +.container .jumbotron, +.container-fluid .jumbotron { + border-radius: 6px; +} +.jumbotron .container { + max-width: 100%; +} +@media screen and (min-width: 768px) { + .jumbotron { + padding: 48px 0; + } + .container .jumbotron, + .container-fluid .jumbotron { + padding-right: 60px; + padding-left: 60px; + } + .jumbotron h1, + .jumbotron .h1 { + font-size: 63px; + } +} +.thumbnail { + display: block; + padding: 4px; + margin-bottom: 20px; + line-height: 1.42857143; + background-color: #fff; + border: 1px solid #ddd; + border-radius: 4px; + -webkit-transition: border .2s ease-in-out; + -o-transition: border .2s ease-in-out; + transition: border .2s ease-in-out; +} +.thumbnail > img, +.thumbnail a > img { + margin-right: auto; + margin-left: auto; +} +a.thumbnail:hover, +a.thumbnail:focus, +a.thumbnail.active { + border-color: #337ab7; +} +.thumbnail .caption { + padding: 9px; + color: #333; +} +.alert { + padding: 15px; + margin-bottom: 20px; + border: 1px solid transparent; + border-radius: 4px; +} +.alert h4 { + margin-top: 0; + color: inherit; +} +.alert .alert-link { + font-weight: bold; +} +.alert > p, +.alert > ul { + margin-bottom: 0; +} +.alert > p + p { + margin-top: 5px; +} +.alert-dismissable, +.alert-dismissible { + padding-right: 35px; +} +.alert-dismissable .close, +.alert-dismissible .close { + position: relative; + top: -2px; + right: -21px; + color: inherit; +} +.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.alert-success hr { + border-top-color: #c9e2b3; +} +.alert-success .alert-link { + color: #2b542c; +} +.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.alert-info hr { + border-top-color: #a6e1ec; +} +.alert-info .alert-link { + color: #245269; +} +.alert-warning { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.alert-warning hr { + border-top-color: #f7e1b5; +} +.alert-warning .alert-link { + color: #66512c; +} +.alert-danger { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.alert-danger hr { + border-top-color: #e4b9c0; +} +.alert-danger .alert-link { + color: #843534; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.progress { + height: 20px; + margin-bottom: 20px; + overflow: hidden; + background-color: #f5f5f5; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); + box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1); +} +.progress-bar { + float: left; + width: 0; + height: 100%; + font-size: 12px; + line-height: 20px; + color: #fff; + text-align: center; + background-color: #337ab7; + -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15); + -webkit-transition: width .6s ease; + -o-transition: width .6s ease; + transition: width .6s ease; +} +.progress-striped .progress-bar, +.progress-bar-striped { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + -webkit-background-size: 40px 40px; + background-size: 40px 40px; +} +.progress.active .progress-bar, +.progress-bar.active { + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; +} +.progress-bar-success { + background-color: #5cb85c; +} +.progress-striped .progress-bar-success { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-info { + background-color: #5bc0de; +} +.progress-striped .progress-bar-info { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-warning { + background-color: #f0ad4e; +} +.progress-striped .progress-bar-warning { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.progress-bar-danger { + background-color: #d9534f; +} +.progress-striped .progress-bar-danger { + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent); +} +.media { + margin-top: 15px; +} +.media:first-child { + margin-top: 0; +} +.media-right, +.media > .pull-right { + padding-left: 10px; +} +.media-left, +.media > .pull-left { + padding-right: 10px; +} +.media-left, +.media-right, +.media-body { + display: table-cell; + vertical-align: top; +} +.media-middle { + vertical-align: middle; +} +.media-bottom { + vertical-align: bottom; +} +.media-heading { + margin-top: 0; + margin-bottom: 5px; +} +.media-list { + padding-left: 0; + list-style: none; +} +.list-group { + padding-left: 0; + margin-bottom: 20px; +} +.list-group-item { + position: relative; + display: block; + padding: 10px 15px; + margin-bottom: -1px; + background-color: #fff; + border: 1px solid #ddd; +} +.list-group-item:first-child { + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} +.list-group-item:last-child { + margin-bottom: 0; + border-bottom-right-radius: 4px; + border-bottom-left-radius: 4px; +} +a.list-group-item { + color: #555; +} +a.list-group-item .list-group-item-heading { + color: #333; +} +a.list-group-item:hover, +a.list-group-item:focus { + color: #555; + text-decoration: none; + background-color: #f5f5f5; +} +.list-group-item.disabled, +.list-group-item.disabled:hover, +.list-group-item.disabled:focus { + color: #777; + cursor: not-allowed; + background-color: #eee; +} +.list-group-item.disabled .list-group-item-heading, +.list-group-item.disabled:hover .list-group-item-heading, +.list-group-item.disabled:focus .list-group-item-heading { + color: inherit; +} +.list-group-item.disabled .list-group-item-text, +.list-group-item.disabled:hover .list-group-item-text, +.list-group-item.disabled:focus .list-group-item-text { + color: #777; +} +.list-group-item.active, +.list-group-item.active:hover, +.list-group-item.active:focus { + z-index: 2; + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.list-group-item.active .list-group-item-heading, +.list-group-item.active:hover .list-group-item-heading, +.list-group-item.active:focus .list-group-item-heading, +.list-group-item.active .list-group-item-heading > small, +.list-group-item.active:hover .list-group-item-heading > small, +.list-group-item.active:focus .list-group-item-heading > small, +.list-group-item.active .list-group-item-heading > .small, +.list-group-item.active:hover .list-group-item-heading > .small, +.list-group-item.active:focus .list-group-item-heading > .small { + color: inherit; +} +.list-group-item.active .list-group-item-text, +.list-group-item.active:hover .list-group-item-text, +.list-group-item.active:focus .list-group-item-text { + color: #c7ddef; +} +.list-group-item-success { + color: #3c763d; + background-color: #dff0d8; +} +a.list-group-item-success { + color: #3c763d; +} +a.list-group-item-success .list-group-item-heading { + color: inherit; +} +a.list-group-item-success:hover, +a.list-group-item-success:focus { + color: #3c763d; + background-color: #d0e9c6; +} +a.list-group-item-success.active, +a.list-group-item-success.active:hover, +a.list-group-item-success.active:focus { + color: #fff; + background-color: #3c763d; + border-color: #3c763d; +} +.list-group-item-info { + color: #31708f; + background-color: #d9edf7; +} +a.list-group-item-info { + color: #31708f; +} +a.list-group-item-info .list-group-item-heading { + color: inherit; +} +a.list-group-item-info:hover, +a.list-group-item-info:focus { + color: #31708f; + background-color: #c4e3f3; +} +a.list-group-item-info.active, +a.list-group-item-info.active:hover, +a.list-group-item-info.active:focus { + color: #fff; + background-color: #31708f; + border-color: #31708f; +} +.list-group-item-warning { + color: #8a6d3b; + background-color: #fcf8e3; +} +a.list-group-item-warning { + color: #8a6d3b; +} +a.list-group-item-warning .list-group-item-heading { + color: inherit; +} +a.list-group-item-warning:hover, +a.list-group-item-warning:focus { + color: #8a6d3b; + background-color: #faf2cc; +} +a.list-group-item-warning.active, +a.list-group-item-warning.active:hover, +a.list-group-item-warning.active:focus { + color: #fff; + background-color: #8a6d3b; + border-color: #8a6d3b; +} +.list-group-item-danger { + color: #a94442; + background-color: #f2dede; +} +a.list-group-item-danger { + color: #a94442; +} +a.list-group-item-danger .list-group-item-heading { + color: inherit; +} +a.list-group-item-danger:hover, +a.list-group-item-danger:focus { + color: #a94442; + background-color: #ebcccc; +} +a.list-group-item-danger.active, +a.list-group-item-danger.active:hover, +a.list-group-item-danger.active:focus { + color: #fff; + background-color: #a94442; + border-color: #a94442; +} +.list-group-item-heading { + margin-top: 0; + margin-bottom: 5px; +} +.list-group-item-text { + margin-bottom: 0; + line-height: 1.3; +} +.panel { + margin-bottom: 20px; + background-color: #fff; + border: 1px solid transparent; + border-radius: 4px; + -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: 0 1px 1px rgba(0, 0, 0, .05); +} +.panel-body { + padding: 15px; +} +.panel-heading { + padding: 10px 15px; + border-bottom: 1px solid transparent; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel-heading > .dropdown .dropdown-toggle { + color: inherit; +} +.panel-title { + margin-top: 0; + margin-bottom: 0; + font-size: 16px; + color: inherit; +} +.panel-title > a { + color: inherit; +} +.panel-footer { + padding: 10px 15px; + background-color: #f5f5f5; + border-top: 1px solid #ddd; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .list-group, +.panel > .panel-collapse > .list-group { + margin-bottom: 0; +} +.panel > .list-group .list-group-item, +.panel > .panel-collapse > .list-group .list-group-item { + border-width: 1px 0; + border-radius: 0; +} +.panel > .list-group:first-child .list-group-item:first-child, +.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child { + border-top: 0; + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .list-group:last-child .list-group-item:last-child, +.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child { + border-bottom: 0; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-heading + .list-group .list-group-item:first-child { + border-top-width: 0; +} +.list-group + .panel-footer { + border-top-width: 0; +} +.panel > .table, +.panel > .table-responsive > .table, +.panel > .panel-collapse > .table { + margin-bottom: 0; +} +.panel > .table caption, +.panel > .table-responsive > .table caption, +.panel > .panel-collapse > .table caption { + padding-right: 15px; + padding-left: 15px; +} +.panel > .table:first-child, +.panel > .table-responsive:first-child > .table:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child { + border-top-left-radius: 3px; + border-top-right-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child { + border-top-left-radius: 3px; +} +.panel > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child, +.panel > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child, +.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child, +.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child { + border-top-right-radius: 3px; +} +.panel > .table:last-child, +.panel > .table-responsive:last-child > .table:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child { + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child { + border-bottom-left-radius: 3px; +} +.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child, +.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child, +.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child, +.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child { + border-bottom-right-radius: 3px; +} +.panel > .panel-body + .table, +.panel > .panel-body + .table-responsive, +.panel > .table + .panel-body, +.panel > .table-responsive + .panel-body { + border-top: 1px solid #ddd; +} +.panel > .table > tbody:first-child > tr:first-child th, +.panel > .table > tbody:first-child > tr:first-child td { + border-top: 0; +} +.panel > .table-bordered, +.panel > .table-responsive > .table-bordered { + border: 0; +} +.panel > .table-bordered > thead > tr > th:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:first-child, +.panel > .table-bordered > tbody > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child, +.panel > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child, +.panel > .table-bordered > thead > tr > td:first-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:first-child, +.panel > .table-bordered > tbody > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child, +.panel > .table-bordered > tfoot > tr > td:first-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child { + border-left: 0; +} +.panel > .table-bordered > thead > tr > th:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > th:last-child, +.panel > .table-bordered > tbody > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child, +.panel > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child, +.panel > .table-bordered > thead > tr > td:last-child, +.panel > .table-responsive > .table-bordered > thead > tr > td:last-child, +.panel > .table-bordered > tbody > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child, +.panel > .table-bordered > tfoot > tr > td:last-child, +.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child { + border-right: 0; +} +.panel > .table-bordered > thead > tr:first-child > td, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > td, +.panel > .table-bordered > tbody > tr:first-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td, +.panel > .table-bordered > thead > tr:first-child > th, +.panel > .table-responsive > .table-bordered > thead > tr:first-child > th, +.panel > .table-bordered > tbody > tr:first-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th { + border-bottom: 0; +} +.panel > .table-bordered > tbody > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td, +.panel > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td, +.panel > .table-bordered > tbody > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th, +.panel > .table-bordered > tfoot > tr:last-child > th, +.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th { + border-bottom: 0; +} +.panel > .table-responsive { + margin-bottom: 0; + border: 0; +} +.panel-group { + margin-bottom: 20px; +} +.panel-group .panel { + margin-bottom: 0; + border-radius: 4px; +} +.panel-group .panel + .panel { + margin-top: 5px; +} +.panel-group .panel-heading { + border-bottom: 0; +} +.panel-group .panel-heading + .panel-collapse > .panel-body, +.panel-group .panel-heading + .panel-collapse > .list-group { + border-top: 1px solid #ddd; +} +.panel-group .panel-footer { + border-top: 0; +} +.panel-group .panel-footer + .panel-collapse .panel-body { + border-bottom: 1px solid #ddd; +} +.panel-default { + border-color: #ddd; +} +.panel-default > .panel-heading { + color: #333; + background-color: #f5f5f5; + border-color: #ddd; +} +.panel-default > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ddd; +} +.panel-default > .panel-heading .badge { + color: #f5f5f5; + background-color: #333; +} +.panel-default > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ddd; +} +.panel-primary { + border-color: #337ab7; +} +.panel-primary > .panel-heading { + color: #fff; + background-color: #337ab7; + border-color: #337ab7; +} +.panel-primary > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #337ab7; +} +.panel-primary > .panel-heading .badge { + color: #337ab7; + background-color: #fff; +} +.panel-primary > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #337ab7; +} +.panel-success { + border-color: #d6e9c6; +} +.panel-success > .panel-heading { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} +.panel-success > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #d6e9c6; +} +.panel-success > .panel-heading .badge { + color: #dff0d8; + background-color: #3c763d; +} +.panel-success > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #d6e9c6; +} +.panel-info { + border-color: #bce8f1; +} +.panel-info > .panel-heading { + color: #31708f; + background-color: #d9edf7; + border-color: #bce8f1; +} +.panel-info > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #bce8f1; +} +.panel-info > .panel-heading .badge { + color: #d9edf7; + background-color: #31708f; +} +.panel-info > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #bce8f1; +} +.panel-warning { + border-color: #faebcc; +} +.panel-warning > .panel-heading { + color: #8a6d3b; + background-color: #fcf8e3; + border-color: #faebcc; +} +.panel-warning > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #faebcc; +} +.panel-warning > .panel-heading .badge { + color: #fcf8e3; + background-color: #8a6d3b; +} +.panel-warning > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #faebcc; +} +.panel-danger { + border-color: #ebccd1; +} +.panel-danger > .panel-heading { + color: #a94442; + background-color: #f2dede; + border-color: #ebccd1; +} +.panel-danger > .panel-heading + .panel-collapse > .panel-body { + border-top-color: #ebccd1; +} +.panel-danger > .panel-heading .badge { + color: #f2dede; + background-color: #a94442; +} +.panel-danger > .panel-footer + .panel-collapse > .panel-body { + border-bottom-color: #ebccd1; +} +.embed-responsive { + position: relative; + display: block; + height: 0; + padding: 0; + overflow: hidden; +} +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} +.embed-responsive.embed-responsive-16by9 { + padding-bottom: 56.25%; +} +.embed-responsive.embed-responsive-4by3 { + padding-bottom: 75%; +} +.well { + min-height: 20px; + padding: 19px; + margin-bottom: 20px; + background-color: #f5f5f5; + border: 1px solid #e3e3e3; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); + box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05); +} +.well blockquote { + border-color: #ddd; + border-color: rgba(0, 0, 0, .15); +} +.well-lg { + padding: 24px; + border-radius: 6px; +} +.well-sm { + padding: 9px; + border-radius: 3px; +} +.close { + float: right; + font-size: 21px; + font-weight: bold; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + filter: alpha(opacity=20); + opacity: .2; +} +.close:hover, +.close:focus { + color: #000; + text-decoration: none; + cursor: pointer; + filter: alpha(opacity=50); + opacity: .5; +} +button.close { + -webkit-appearance: none; + padding: 0; + cursor: pointer; + background: transparent; + border: 0; +} +.modal-open { + overflow: hidden; +} +.modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1040; + display: none; + overflow: hidden; + -webkit-overflow-scrolling: touch; + outline: 0; +} +.modal.fade .modal-dialog { + -webkit-transition: -webkit-transform .3s ease-out; + -o-transition: -o-transform .3s ease-out; + transition: transform .3s ease-out; + -webkit-transform: translate(0, -25%); + -ms-transform: translate(0, -25%); + -o-transform: translate(0, -25%); + transform: translate(0, -25%); +} +.modal.in .modal-dialog { + -webkit-transform: translate(0, 0); + -ms-transform: translate(0, 0); + -o-transform: translate(0, 0); + transform: translate(0, 0); +} +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} +.modal-dialog { + position: relative; + width: auto; + margin: 10px; +} +.modal-content { + position: relative; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #999; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + outline: 0; + -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5); + box-shadow: 0 3px 9px rgba(0, 0, 0, .5); +} +.modal-backdrop { + position: absolute; + top: 0; + right: 0; + left: 0; + background-color: #000; +} +.modal-backdrop.fade { + filter: alpha(opacity=0); + opacity: 0; +} +.modal-backdrop.in { + filter: alpha(opacity=50); + opacity: .5; +} +.modal-header { + min-height: 16.42857143px; + padding: 15px; + border-bottom: 1px solid #e5e5e5; +} +.modal-header .close { + margin-top: -2px; +} +.modal-title { + margin: 0; + line-height: 1.42857143; +} +.modal-body { + position: relative; + padding: 15px; +} +.modal-footer { + padding: 15px; + text-align: right; + border-top: 1px solid #e5e5e5; +} +.modal-footer .btn + .btn { + margin-bottom: 0; + margin-left: 5px; +} +.modal-footer .btn-group .btn + .btn { + margin-left: -1px; +} +.modal-footer .btn-block + .btn-block { + margin-left: 0; +} +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} +@media (min-width: 768px) { + .modal-dialog { + width: 600px; + margin: 30px auto; + } + .modal-content { + -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + box-shadow: 0 5px 15px rgba(0, 0, 0, .5); + } + .modal-sm { + width: 300px; + } +} +@media (min-width: 992px) { + .modal-lg { + width: 900px; + } +} +.tooltip { + position: absolute; + z-index: 1070; + display: block; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 12px; + font-weight: normal; + line-height: 1.4; + visibility: visible; + filter: alpha(opacity=0); + opacity: 0; +} +.tooltip.in { + filter: alpha(opacity=90); + opacity: .9; +} +.tooltip.top { + padding: 5px 0; + margin-top: -3px; +} +.tooltip.right { + padding: 0 5px; + margin-left: 3px; +} +.tooltip.bottom { + padding: 5px 0; + margin-top: 3px; +} +.tooltip.left { + padding: 0 5px; + margin-left: -3px; +} +.tooltip-inner { + max-width: 200px; + padding: 3px 8px; + color: #fff; + text-align: center; + text-decoration: none; + background-color: #000; + border-radius: 4px; +} +.tooltip-arrow { + position: absolute; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.tooltip.top .tooltip-arrow { + bottom: 0; + left: 50%; + margin-left: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-left .tooltip-arrow { + right: 5px; + bottom: 0; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.top-right .tooltip-arrow { + bottom: 0; + left: 5px; + margin-bottom: -5px; + border-width: 5px 5px 0; + border-top-color: #000; +} +.tooltip.right .tooltip-arrow { + top: 50%; + left: 0; + margin-top: -5px; + border-width: 5px 5px 5px 0; + border-right-color: #000; +} +.tooltip.left .tooltip-arrow { + top: 50%; + right: 0; + margin-top: -5px; + border-width: 5px 0 5px 5px; + border-left-color: #000; +} +.tooltip.bottom .tooltip-arrow { + top: 0; + left: 50%; + margin-left: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-left .tooltip-arrow { + top: 0; + right: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.tooltip.bottom-right .tooltip-arrow { + top: 0; + left: 5px; + margin-top: -5px; + border-width: 0 5px 5px; + border-bottom-color: #000; +} +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: none; + max-width: 276px; + padding: 1px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + font-weight: normal; + line-height: 1.42857143; + text-align: left; + white-space: normal; + background-color: #fff; + -webkit-background-clip: padding-box; + background-clip: padding-box; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, .2); + border-radius: 6px; + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2); + box-shadow: 0 5px 10px rgba(0, 0, 0, .2); +} +.popover.top { + margin-top: -10px; +} +.popover.right { + margin-left: 10px; +} +.popover.bottom { + margin-top: 10px; +} +.popover.left { + margin-left: -10px; +} +.popover-title { + padding: 8px 14px; + margin: 0; + font-size: 14px; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; + border-radius: 5px 5px 0 0; +} +.popover-content { + padding: 9px 14px; +} +.popover > .arrow, +.popover > .arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} +.popover > .arrow { + border-width: 11px; +} +.popover > .arrow:after { + content: ""; + border-width: 10px; +} +.popover.top > .arrow { + bottom: -11px; + left: 50%; + margin-left: -11px; + border-top-color: #999; + border-top-color: rgba(0, 0, 0, .25); + border-bottom-width: 0; +} +.popover.top > .arrow:after { + bottom: 1px; + margin-left: -10px; + content: " "; + border-top-color: #fff; + border-bottom-width: 0; +} +.popover.right > .arrow { + top: 50%; + left: -11px; + margin-top: -11px; + border-right-color: #999; + border-right-color: rgba(0, 0, 0, .25); + border-left-width: 0; +} +.popover.right > .arrow:after { + bottom: -10px; + left: 1px; + content: " "; + border-right-color: #fff; + border-left-width: 0; +} +.popover.bottom > .arrow { + top: -11px; + left: 50%; + margin-left: -11px; + border-top-width: 0; + border-bottom-color: #999; + border-bottom-color: rgba(0, 0, 0, .25); +} +.popover.bottom > .arrow:after { + top: 1px; + margin-left: -10px; + content: " "; + border-top-width: 0; + border-bottom-color: #fff; +} +.popover.left > .arrow { + top: 50%; + right: -11px; + margin-top: -11px; + border-right-width: 0; + border-left-color: #999; + border-left-color: rgba(0, 0, 0, .25); +} +.popover.left > .arrow:after { + right: 1px; + bottom: -10px; + content: " "; + border-right-width: 0; + border-left-color: #fff; +} +.carousel { + position: relative; +} +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} +.carousel-inner > .item { + position: relative; + display: none; + -webkit-transition: .6s ease-in-out left; + -o-transition: .6s ease-in-out left; + transition: .6s ease-in-out left; +} +.carousel-inner > .item > img, +.carousel-inner > .item > a > img { + line-height: 1; +} +@media all and (transform-3d), (-webkit-transform-3d) { + .carousel-inner > .item { + -webkit-transition: -webkit-transform .6s ease-in-out; + -o-transition: -o-transform .6s ease-in-out; + transition: transform .6s ease-in-out; + + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000; + perspective: 1000; + } + .carousel-inner > .item.next, + .carousel-inner > .item.active.right { + left: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + .carousel-inner > .item.prev, + .carousel-inner > .item.active.left { + left: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + .carousel-inner > .item.next.left, + .carousel-inner > .item.prev.right, + .carousel-inner > .item.active { + left: 0; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} +.carousel-inner > .active, +.carousel-inner > .next, +.carousel-inner > .prev { + display: block; +} +.carousel-inner > .active { + left: 0; +} +.carousel-inner > .next, +.carousel-inner > .prev { + position: absolute; + top: 0; + width: 100%; +} +.carousel-inner > .next { + left: 100%; +} +.carousel-inner > .prev { + left: -100%; +} +.carousel-inner > .next.left, +.carousel-inner > .prev.right { + left: 0; +} +.carousel-inner > .active.left { + left: -100%; +} +.carousel-inner > .active.right { + left: 100%; +} +.carousel-control { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 15%; + font-size: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); + filter: alpha(opacity=50); + opacity: .5; +} +.carousel-control.left { + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control.right { + right: 0; + left: auto; + background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5))); + background-image: linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1); + background-repeat: repeat-x; +} +.carousel-control:hover, +.carousel-control:focus { + color: #fff; + text-decoration: none; + filter: alpha(opacity=90); + outline: 0; + opacity: .9; +} +.carousel-control .icon-prev, +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-left, +.carousel-control .glyphicon-chevron-right { + position: absolute; + top: 50%; + z-index: 5; + display: inline-block; +} +.carousel-control .icon-prev, +.carousel-control .glyphicon-chevron-left { + left: 50%; + margin-left: -10px; +} +.carousel-control .icon-next, +.carousel-control .glyphicon-chevron-right { + right: 50%; + margin-right: -10px; +} +.carousel-control .icon-prev, +.carousel-control .icon-next { + width: 20px; + height: 20px; + margin-top: -10px; + font-family: serif; +} +.carousel-control .icon-prev:before { + content: '\2039'; +} +.carousel-control .icon-next:before { + content: '\203a'; +} +.carousel-indicators { + position: absolute; + bottom: 10px; + left: 50%; + z-index: 15; + width: 60%; + padding-left: 0; + margin-left: -30%; + text-align: center; + list-style: none; +} +.carousel-indicators li { + display: inline-block; + width: 10px; + height: 10px; + margin: 1px; + text-indent: -999px; + cursor: pointer; + background-color: #000 \9; + background-color: rgba(0, 0, 0, 0); + border: 1px solid #fff; + border-radius: 10px; +} +.carousel-indicators .active { + width: 12px; + height: 12px; + margin: 0; + background-color: #fff; +} +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, .6); +} +.carousel-caption .btn { + text-shadow: none; +} +@media screen and (min-width: 768px) { + .carousel-control .glyphicon-chevron-left, + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-prev, + .carousel-control .icon-next { + width: 30px; + height: 30px; + margin-top: -15px; + font-size: 30px; + } + .carousel-control .glyphicon-chevron-left, + .carousel-control .icon-prev { + margin-left: -15px; + } + .carousel-control .glyphicon-chevron-right, + .carousel-control .icon-next { + margin-right: -15px; + } + .carousel-caption { + right: 20%; + left: 20%; + padding-bottom: 30px; + } + .carousel-indicators { + bottom: 20px; + } +} +.clearfix:before, +.clearfix:after, +.dl-horizontal dd:before, +.dl-horizontal dd:after, +.container:before, +.container:after, +.container-fluid:before, +.container-fluid:after, +.row:before, +.row:after, +.form-horizontal .form-group:before, +.form-horizontal .form-group:after, +.btn-toolbar:before, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:before, +.btn-group-vertical > .btn-group:after, +.nav:before, +.nav:after, +.navbar:before, +.navbar:after, +.navbar-header:before, +.navbar-header:after, +.navbar-collapse:before, +.navbar-collapse:after, +.pager:before, +.pager:after, +.panel-body:before, +.panel-body:after, +.modal-footer:before, +.modal-footer:after { + display: table; + content: " "; +} +.clearfix:after, +.dl-horizontal dd:after, +.container:after, +.container-fluid:after, +.row:after, +.form-horizontal .form-group:after, +.btn-toolbar:after, +.btn-group-vertical > .btn-group:after, +.nav:after, +.navbar:after, +.navbar-header:after, +.navbar-collapse:after, +.pager:after, +.panel-body:after, +.modal-footer:after { + clear: both; +} +.center-block { + display: block; + margin-right: auto; + margin-left: auto; +} +.pull-right { + float: right !important; +} +.pull-left { + float: left !important; +} +.hide { + display: none !important; +} +.show { + display: block !important; +} +.invisible { + visibility: hidden; +} +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} +.hidden { + display: none !important; + visibility: hidden !important; +} +.affix { + position: fixed; +} +@-ms-viewport { + width: device-width; +} +.visible-xs, +.visible-sm, +.visible-md, +.visible-lg { + display: none !important; +} +.visible-xs-block, +.visible-xs-inline, +.visible-xs-inline-block, +.visible-sm-block, +.visible-sm-inline, +.visible-sm-inline-block, +.visible-md-block, +.visible-md-inline, +.visible-md-inline-block, +.visible-lg-block, +.visible-lg-inline, +.visible-lg-inline-block { + display: none !important; +} +@media (max-width: 767px) { + .visible-xs { + display: block !important; + } + table.visible-xs { + display: table; + } + tr.visible-xs { + display: table-row !important; + } + th.visible-xs, + td.visible-xs { + display: table-cell !important; + } +} +@media (max-width: 767px) { + .visible-xs-block { + display: block !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline { + display: inline !important; + } +} +@media (max-width: 767px) { + .visible-xs-inline-block { + display: inline-block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm { + display: block !important; + } + table.visible-sm { + display: table; + } + tr.visible-sm { + display: table-row !important; + } + th.visible-sm, + td.visible-sm { + display: table-cell !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-block { + display: block !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline { + display: inline !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .visible-sm-inline-block { + display: inline-block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md { + display: block !important; + } + table.visible-md { + display: table; + } + tr.visible-md { + display: table-row !important; + } + th.visible-md, + td.visible-md { + display: table-cell !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-block { + display: block !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline { + display: inline !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .visible-md-inline-block { + display: inline-block !important; + } +} +@media (min-width: 1200px) { + .visible-lg { + display: block !important; + } + table.visible-lg { + display: table; + } + tr.visible-lg { + display: table-row !important; + } + th.visible-lg, + td.visible-lg { + display: table-cell !important; + } +} +@media (min-width: 1200px) { + .visible-lg-block { + display: block !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline { + display: inline !important; + } +} +@media (min-width: 1200px) { + .visible-lg-inline-block { + display: inline-block !important; + } +} +@media (max-width: 767px) { + .hidden-xs { + display: none !important; + } +} +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm { + display: none !important; + } +} +@media (min-width: 992px) and (max-width: 1199px) { + .hidden-md { + display: none !important; + } +} +@media (min-width: 1200px) { + .hidden-lg { + display: none !important; + } +} +.visible-print { + display: none !important; +} +@media print { + .visible-print { + display: block !important; + } + table.visible-print { + display: table; + } + tr.visible-print { + display: table-row !important; + } + th.visible-print, + td.visible-print { + display: table-cell !important; + } +} +.visible-print-block { + display: none !important; +} +@media print { + .visible-print-block { + display: block !important; + } +} +.visible-print-inline { + display: none !important; +} +@media print { + .visible-print-inline { + display: inline !important; + } +} +.visible-print-inline-block { + display: none !important; +} +@media print { + .visible-print-inline-block { + display: inline-block !important; + } +} +@media print { + .hidden-print { + display: none !important; + } +} diff --git a/src/Stack/DocGenerator/src/doc.html b/src/Stack/DocGenerator/src/doc.html new file mode 100644 index 0000000..5efe6fa --- /dev/null +++ b/src/Stack/DocGenerator/src/doc.html @@ -0,0 +1,32 @@ + + + + + + + {{ apiName }} + + + + +
+
+
+

[ + base url: {{ baseUrl }}, + api version: {{ version }} + ]

+
+ + + + + + + diff --git a/src/Stack/DocGenerator/src/js/doc.js b/src/Stack/DocGenerator/src/js/doc.js new file mode 100644 index 0000000..7f0530c --- /dev/null +++ b/src/Stack/DocGenerator/src/js/doc.js @@ -0,0 +1,91 @@ + +var Accordion = ReactBootstrap.Accordion; +var Panel = ReactBootstrap.Panel; + +var EndpointTitle = React.createClass({ + displayName: 'Endpoints', + + render: function() { + var method = this.props['method'], + bsStyle = 'default'; + + if ('POST' === method) { + bsStyle = 'success'; + } + if ('PUT' === method) { + bsStyle = 'warning'; + } + if ('DELETE' === method) { + bsStyle = 'danger'; + } + if ('GET' === method) { + bsStyle = 'success'; + } + var bsClass = 'label label-' + bsStyle; + + return ( + { method } + ); + } +}); + +var Endpoints = React.createClass({ + displayName: 'Endpoints', + + render: function() { + var panels = this.props.endpoints.map(function(endpoint, i) { + var endpointKey = this.props.resourceKey + '-endpoint-' + (i + 1), + divStyle = { paddingLeft: '10px' }, + title = ( +
+
+ +
+
+ { endpoint.uri } +
+
{ endpoint.description }
+
+ ); + + return ( + + ... + + ); + }.bind(this)); + + return ( + + { panels } + + ); + } +}); + +var Resources = React.createClass({ + displayName: 'Resources', + + render: function() { + var panels = this.props.resources.map(function(resource, i) { + var resourceKey = 'resource-' + (i + 1), + title = ( +

{ resource.uri } { resource.description }

+ ); + + return ( + + + + ); + }); + + return ( + + { panels } + + ); + } +}); + +React.render(, document.getElementById('resources_container')); \ No newline at end of file diff --git a/src/Stack/DocGenerator/src/js/react-bootstrap.js b/src/Stack/DocGenerator/src/js/react-bootstrap.js new file mode 100644 index 0000000..653e8f1 --- /dev/null +++ b/src/Stack/DocGenerator/src/js/react-bootstrap.js @@ -0,0 +1,5424 @@ +(function (root, factory) { + if (typeof define === 'function' && define.amd) { + // AMD. + define(['react'], factory); + } else { + // Browser globals + root.ReactBootstrap = factory(root.React); + } +}(this, function (React) { + +/** + * almond 0.1.2 Copyright (c) 2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/almond for details + */ +//Going sloppy to avoid 'use strict' string cost, but strict practices should +//be followed. +/*jslint sloppy: true */ +/*global setTimeout: false */ + +var requirejs, require, define; +(function (undef) { + var defined = {}, + waiting = {}, + config = {}, + defining = {}, + aps = [].slice, + main, req; + + /** + * Given a relative module name, like ./something, normalize it to + * a real name that can be mapped to a path. + * @param {String} name the relative name + * @param {String} baseName a real name that the name arg is relative + * to. + * @returns {String} normalized name + */ + function normalize(name, baseName) { + var baseParts = baseName && baseName.split("/"), + map = config.map, + starMap = (map && map['*']) || {}, + nameParts, nameSegment, mapValue, foundMap, + foundI, foundStarMap, starI, i, j, part; + + //Adjust any relative paths. + if (name && name.charAt(0) === ".") { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + //Convert baseName to array, and lop off the last part, + //so that . matches that "directory" and not name of the baseName's + //module. For instance, baseName of "one/two/three", maps to + //"one/two/three.js", but we want the directory, "one/two" for + //this normalization. + baseParts = baseParts.slice(0, baseParts.length - 1); + + name = baseParts.concat(name.split("/")); + + //start trimDots + for (i = 0; (part = name[i]); i++) { + if (part === ".") { + name.splice(i, 1); + i -= 1; + } else if (part === "..") { + if (i === 1 && (name[2] === '..' || name[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + return true; + } else if (i > 0) { + name.splice(i - 1, 2); + i -= 2; + } + } + } + //end trimDots + + name = name.join("/"); + } + } + + //Apply map config if available. + if ((baseParts || starMap) && map) { + nameParts = name.split('/'); + + for (i = nameParts.length; i > 0; i -= 1) { + nameSegment = nameParts.slice(0, i).join("/"); + + if (baseParts) { + //Find the longest baseName segment match in the config. + //So, do joins on the biggest to smallest lengths of baseParts. + for (j = baseParts.length; j > 0; j -= 1) { + mapValue = map[baseParts.slice(0, j).join('/')]; + + //baseName segment has config, find if it has one for + //this name. + if (mapValue) { + mapValue = mapValue[nameSegment]; + if (mapValue) { + //Match, update name to the new value. + foundMap = mapValue; + foundI = i; + break; + } + } + } + } + + if (foundMap) { + break; + } + + //Check for a star map match, but just hold on to it, + //if there is a shorter segment match later in a matching + //config, then favor over this star map. + if (!foundStarMap && starMap && starMap[nameSegment]) { + foundStarMap = starMap[nameSegment]; + starI = i; + } + } + + if (!foundMap && foundStarMap) { + foundMap = foundStarMap; + foundI = starI; + } + + if (foundMap) { + nameParts.splice(0, foundI, foundMap); + name = nameParts.join('/'); + } + } + + return name; + } + + function makeRequire(relName, forceSync) { + return function () { + //A version of a require function that passes a moduleName + //value for items that may need to + //look up paths relative to the moduleName + return req.apply(undef, aps.call(arguments, 0).concat([relName, forceSync])); + }; + } + + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(depName) { + return function (value) { + defined[depName] = value; + }; + } + + function callDep(name) { + if (waiting.hasOwnProperty(name)) { + var args = waiting[name]; + delete waiting[name]; + defining[name] = true; + main.apply(undef, args); + } + + if (!defined.hasOwnProperty(name)) { + throw new Error('No ' + name); + } + return defined[name]; + } + + /** + * Makes a name map, normalizing the name, and using a plugin + * for normalization if necessary. Grabs a ref to plugin + * too, as an optimization. + */ + function makeMap(name, relName) { + var prefix, plugin, + index = name.indexOf('!'); + + if (index !== -1) { + prefix = normalize(name.slice(0, index), relName); + name = name.slice(index + 1); + plugin = callDep(prefix); + + //Normalize according + if (plugin && plugin.normalize) { + name = plugin.normalize(name, makeNormalize(relName)); + } else { + name = normalize(name, relName); + } + } else { + name = normalize(name, relName); + } + + //Using ridiculous property names for space reasons + return { + f: prefix ? prefix + '!' + name : name, //fullName + n: name, + p: plugin + }; + } + + function makeConfig(name) { + return function () { + return (config && config.config && config.config[name]) || {}; + }; + } + + main = function (name, deps, callback, relName) { + var args = [], + usingExports, + cjsModule, depName, ret, map, i; + + //Use name if no relName + relName = relName || name; + + //Call the callback to define the module, if necessary. + if (typeof callback === 'function') { + + //Pull out the defined dependencies and pass the ordered + //values to the callback. + //Default to [require, exports, module] if no deps + deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps; + for (i = 0; i < deps.length; i++) { + map = makeMap(deps[i], relName); + depName = map.f; + + //Fast path CommonJS standard dependencies. + if (depName === "require") { + args[i] = makeRequire(name); + } else if (depName === "exports") { + //CommonJS module spec 1.1 + args[i] = defined[name] = {}; + usingExports = true; + } else if (depName === "module") { + //CommonJS module spec 1.1 + cjsModule = args[i] = { + id: name, + uri: '', + exports: defined[name], + config: makeConfig(name) + }; + } else if (defined.hasOwnProperty(depName) || waiting.hasOwnProperty(depName)) { + args[i] = callDep(depName); + } else if (map.p) { + map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {}); + args[i] = defined[depName]; + } else if (!defining[depName]) { + throw new Error(name + ' missing ' + depName); + } + } + + ret = callback.apply(defined[name], args); + + if (name) { + //If setting exports via "module" is in play, + //favor that over return value and exports. After that, + //favor a non-undefined return value over exports use. + if (cjsModule && cjsModule.exports !== undef && + cjsModule.exports !== defined[name]) { + defined[name] = cjsModule.exports; + } else if (ret !== undef || !usingExports) { + //Use the return value from the function. + defined[name] = ret; + } + } + } else if (name) { + //May just be an object definition for the module. Only + //worry about defining if have a module name. + defined[name] = callback; + } + }; + + requirejs = require = req = function (deps, callback, relName, forceSync) { + if (typeof deps === "string") { + //Just return the module wanted. In this scenario, the + //deps arg is the module name, and second arg (if passed) + //is just the relName. + //Normalize module name, if it contains . or .. + return callDep(makeMap(deps, callback).f); + } else if (!deps.splice) { + //deps is a config object, not an array. + config = deps; + if (callback.splice) { + //callback is an array, which means it is a dependency list. + //Adjust args if there are dependencies + deps = callback; + callback = relName; + relName = null; + } else { + deps = undef; + } + } + + //Support require(['a']) + callback = callback || function () {}; + + //Simulate async callback; + if (forceSync) { + main(undef, deps, callback, relName); + } else { + setTimeout(function () { + main(undef, deps, callback, relName); + }, 15); + } + + return req; + }; + + /** + * Just drops the config on the floor, but returns req in case + * the config return value is used. + */ + req.config = function (cfg) { + config = cfg; + return req; + }; + + define = function (name, deps, callback) { + + //This module may not have dependencies + if (!deps.splice) { + //deps is not an array, so probably means + //an object literal or factory function for + //the value. Adjust args. + callback = deps; + deps = []; + } + + waiting[name] = [name, deps, callback]; + }; + + define.amd = { + jQuery: true + }; +}()); + +define("almond", function(){}); + +define('utils/joinClasses',['require','exports','module'],function (require, exports, module) {/** + * Copyright 2013-2014, Facebook, Inc. + * All rights reserved. + * + * This file contains an unmodified version of: + * https://github.com/facebook/react/blob/v0.12.0/src/utils/joinClasses.js + * + * This source code is licensed under the BSD-style license found here: + * https://github.com/facebook/react/blob/v0.12.0/LICENSE + * An additional grant of patent rights can be found here: + * https://github.com/facebook/react/blob/v0.12.0/PATENTS + */ + + + +/** + * Combines multiple className strings into one. + * http://jsperf.com/joinclasses-args-vs-array + * + * @param {...?string} classes + * @return {string} + */ +function joinClasses(className/*, ... */) { + if (!className) { + className = ''; + } + var nextClass; + var argLength = arguments.length; + if (argLength > 1) { + for (var ii = 1; ii < argLength; ii++) { + nextClass = arguments[ii]; + if (nextClass) { + className = (className ? className + ' ' : '') + nextClass; + } + } + } + return className; +} + +module.exports = joinClasses; + +}); + +define('utils/classSet',['require','exports','module'],function (require, exports, module) {/** + * Copyright 2013-2014, Facebook, Inc. + * All rights reserved. + * + * This file contains an unmodified version of: + * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/cx.js + * + * This source code is licensed under the BSD-style license found here: + * https://github.com/facebook/react/blob/v0.12.0/LICENSE + * An additional grant of patent rights can be found here: + * https://github.com/facebook/react/blob/v0.12.0/PATENTS + */ + +/** + * This function is used to mark string literals representing CSS class names + * so that they can be transformed statically. This allows for modularization + * and minification of CSS class names. + * + * In static_upstream, this function is actually implemented, but it should + * eventually be replaced with something more descriptive, and the transform + * that is used in the main stack should be ported for use elsewhere. + * + * @param string|object className to modularize, or an object of key/values. + * In the object case, the values are conditions that + * determine if the className keys should be included. + * @param [string ...] Variable list of classNames in the string case. + * @return string Renderable space-separated CSS className. + */ +function cx(classNames) { + if (typeof classNames == 'object') { + return Object.keys(classNames).filter(function(className) { + return classNames[className]; + }).join(' '); + } else { + return Array.prototype.join.call(arguments, ' '); + } +} + +module.exports = cx; +}); + +define('utils/Object.assign',['require','exports','module'],function (require, exports, module) {/** + * Copyright 2014, Facebook, Inc. + * All rights reserved. + * + * This file contains an unmodified version of: + * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/Object.assign.js + * + * This source code is licensed under the BSD-style license found here: + * https://github.com/facebook/react/blob/v0.12.0/LICENSE + * An additional grant of patent rights can be found here: + * https://github.com/facebook/react/blob/v0.12.0/PATENTS + */ + +// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign + +function assign(target, sources) { + if (target == null) { + throw new TypeError('Object.assign target cannot be null or undefined'); + } + + var to = Object(target); + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { + var nextSource = arguments[nextIndex]; + if (nextSource == null) { + continue; + } + + var from = Object(nextSource); + + // We don't currently support accessors nor proxies. Therefore this + // copy cannot throw. If we ever supported this then we must handle + // exceptions and side-effects. We don't support symbols so they won't + // be transferred. + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + } + + return to; +}; + +module.exports = assign; + +}); + +define('utils/cloneWithProps',['require','exports','module','react','./joinClasses','./Object.assign'],function (require, exports, module) {/** + * Copyright 2013-2014, Facebook, Inc. + * All rights reserved. + * + * This file contains modified versions of: + * https://github.com/facebook/react/blob/v0.12.0/src/utils/cloneWithProps.js + * https://github.com/facebook/react/blob/v0.12.0/src/core/ReactPropTransferer.js + * + * This source code is licensed under the BSD-style license found here: + * https://github.com/facebook/react/blob/v0.12.0/LICENSE + * An additional grant of patent rights can be found here: + * https://github.com/facebook/react/blob/v0.12.0/PATENTS + * + * TODO: This should be replaced as soon as cloneWithProps is available via + * the core React package or a separate package. + * @see https://github.com/facebook/react/issues/1906 + */ + +var React = require('react'); +var joinClasses = require('./joinClasses'); +var assign = require("./Object.assign"); + +/** + * Creates a transfer strategy that will merge prop values using the supplied + * `mergeStrategy`. If a prop was previously unset, this just sets it. + * + * @param {function} mergeStrategy + * @return {function} + */ +function createTransferStrategy(mergeStrategy) { + return function(props, key, value) { + if (!props.hasOwnProperty(key)) { + props[key] = value; + } else { + props[key] = mergeStrategy(props[key], value); + } + }; +} + +var transferStrategyMerge = createTransferStrategy(function(a, b) { + // `merge` overrides the first object's (`props[key]` above) keys using the + // second object's (`value`) keys. An object's style's existing `propA` would + // get overridden. Flip the order here. + return assign({}, b, a); +}); + +function emptyFunction() {} + +/** + * Transfer strategies dictate how props are transferred by `transferPropsTo`. + * NOTE: if you add any more exceptions to this list you should be sure to + * update `cloneWithProps()` accordingly. + */ +var TransferStrategies = { + /** + * Never transfer `children`. + */ + children: emptyFunction, + /** + * Transfer the `className` prop by merging them. + */ + className: createTransferStrategy(joinClasses), + /** + * Transfer the `style` prop (which is an object) by merging them. + */ + style: transferStrategyMerge +}; + +/** + * Mutates the first argument by transferring the properties from the second + * argument. + * + * @param {object} props + * @param {object} newProps + * @return {object} + */ +function transferInto(props, newProps) { + for (var thisKey in newProps) { + if (!newProps.hasOwnProperty(thisKey)) { + continue; + } + + var transferStrategy = TransferStrategies[thisKey]; + + if (transferStrategy && TransferStrategies.hasOwnProperty(thisKey)) { + transferStrategy(props, thisKey, newProps[thisKey]); + } else if (!props.hasOwnProperty(thisKey)) { + props[thisKey] = newProps[thisKey]; + } + } + return props; +} + +/** + * Merge two props objects using TransferStrategies. + * + * @param {object} oldProps original props (they take precedence) + * @param {object} newProps new props to merge in + * @return {object} a new object containing both sets of props merged. + */ +function mergeProps(oldProps, newProps) { + return transferInto(assign({}, oldProps), newProps); +} + + +var ReactPropTransferer = { + mergeProps: mergeProps +}; + +var CHILDREN_PROP = 'children'; + +/** + * Sometimes you want to change the props of a child passed to you. Usually + * this is to add a CSS class. + * + * @param {object} child child component you'd like to clone + * @param {object} props props you'd like to modify. They will be merged + * as if you used `transferPropsTo()`. + * @return {object} a clone of child with props merged in. + */ +function cloneWithProps(child, props) { + var newProps = ReactPropTransferer.mergeProps(props, child.props); + + // Use `child.props.children` if it is provided. + if (!newProps.hasOwnProperty(CHILDREN_PROP) && + child.props.hasOwnProperty(CHILDREN_PROP)) { + newProps.children = child.props.children; + } + + if (React.version.substr(0, 4) === '0.12'){ + var mockLegacyFactory = function(){}; + mockLegacyFactory.isReactLegacyFactory = true; + mockLegacyFactory.type = child.type; + + return React.createElement(mockLegacyFactory, newProps); + } + + // The current API doesn't retain _owner and _context, which is why this + // doesn't use ReactElement.cloneAndReplaceProps. + return React.createElement(child.type, newProps); +} + +module.exports = cloneWithProps; +}); + +define('constants',['require','exports','module'],function (require, exports, module) {module.exports = { + CLASSES: { + 'alert': 'alert', + 'button': 'btn', + 'button-group': 'btn-group', + 'button-toolbar': 'btn-toolbar', + 'column': 'col', + 'input-group': 'input-group', + 'form': 'form', + 'glyphicon': 'glyphicon', + 'label': 'label', + 'list-group-item': 'list-group-item', + 'panel': 'panel', + 'panel-group': 'panel-group', + 'progress-bar': 'progress-bar', + 'nav': 'nav', + 'navbar': 'navbar', + 'modal': 'modal', + 'row': 'row', + 'well': 'well' + }, + STYLES: { + 'default': 'default', + 'primary': 'primary', + 'success': 'success', + 'info': 'info', + 'warning': 'warning', + 'danger': 'danger', + 'link': 'link', + 'inline': 'inline', + 'tabs': 'tabs', + 'pills': 'pills' + }, + SIZES: { + 'large': 'lg', + 'medium': 'md', + 'small': 'sm', + 'xsmall': 'xs' + }, + GLYPHS: [ + 'asterisk', + 'plus', + 'euro', + 'minus', + 'cloud', + 'envelope', + 'pencil', + 'glass', + 'music', + 'search', + 'heart', + 'star', + 'star-empty', + 'user', + 'film', + 'th-large', + 'th', + 'th-list', + 'ok', + 'remove', + 'zoom-in', + 'zoom-out', + 'off', + 'signal', + 'cog', + 'trash', + 'home', + 'file', + 'time', + 'road', + 'download-alt', + 'download', + 'upload', + 'inbox', + 'play-circle', + 'repeat', + 'refresh', + 'list-alt', + 'lock', + 'flag', + 'headphones', + 'volume-off', + 'volume-down', + 'volume-up', + 'qrcode', + 'barcode', + 'tag', + 'tags', + 'book', + 'bookmark', + 'print', + 'camera', + 'font', + 'bold', + 'italic', + 'text-height', + 'text-width', + 'align-left', + 'align-center', + 'align-right', + 'align-justify', + 'list', + 'indent-left', + 'indent-right', + 'facetime-video', + 'picture', + 'map-marker', + 'adjust', + 'tint', + 'edit', + 'share', + 'check', + 'move', + 'step-backward', + 'fast-backward', + 'backward', + 'play', + 'pause', + 'stop', + 'forward', + 'fast-forward', + 'step-forward', + 'eject', + 'chevron-left', + 'chevron-right', + 'plus-sign', + 'minus-sign', + 'remove-sign', + 'ok-sign', + 'question-sign', + 'info-sign', + 'screenshot', + 'remove-circle', + 'ok-circle', + 'ban-circle', + 'arrow-left', + 'arrow-right', + 'arrow-up', + 'arrow-down', + 'share-alt', + 'resize-full', + 'resize-small', + 'exclamation-sign', + 'gift', + 'leaf', + 'fire', + 'eye-open', + 'eye-close', + 'warning-sign', + 'plane', + 'calendar', + 'random', + 'comment', + 'magnet', + 'chevron-up', + 'chevron-down', + 'retweet', + 'shopping-cart', + 'folder-close', + 'folder-open', + 'resize-vertical', + 'resize-horizontal', + 'hdd', + 'bullhorn', + 'bell', + 'certificate', + 'thumbs-up', + 'thumbs-down', + 'hand-right', + 'hand-left', + 'hand-up', + 'hand-down', + 'circle-arrow-right', + 'circle-arrow-left', + 'circle-arrow-up', + 'circle-arrow-down', + 'globe', + 'wrench', + 'tasks', + 'filter', + 'briefcase', + 'fullscreen', + 'dashboard', + 'paperclip', + 'heart-empty', + 'link', + 'phone', + 'pushpin', + 'usd', + 'gbp', + 'sort', + 'sort-by-alphabet', + 'sort-by-alphabet-alt', + 'sort-by-order', + 'sort-by-order-alt', + 'sort-by-attributes', + 'sort-by-attributes-alt', + 'unchecked', + 'expand', + 'collapse-down', + 'collapse-up', + 'log-in', + 'flash', + 'log-out', + 'new-window', + 'record', + 'save', + 'open', + 'saved', + 'import', + 'export', + 'send', + 'floppy-disk', + 'floppy-saved', + 'floppy-remove', + 'floppy-save', + 'floppy-open', + 'credit-card', + 'transfer', + 'cutlery', + 'header', + 'compressed', + 'earphone', + 'phone-alt', + 'tower', + 'stats', + 'sd-video', + 'hd-video', + 'subtitles', + 'sound-stereo', + 'sound-dolby', + 'sound-5-1', + 'sound-6-1', + 'sound-7-1', + 'copyright-mark', + 'registration-mark', + 'cloud-download', + 'cloud-upload', + 'tree-conifer', + 'tree-deciduous' + ] +}; + +}); + +define('BootstrapMixin',['require','exports','module','react','./constants'],function (require, exports, module) {var React = require('react'); +var constants = require('./constants'); + +var BootstrapMixin = { + propTypes: { + bsClass: React.PropTypes.oneOf(Object.keys(constants.CLASSES)), + bsStyle: React.PropTypes.oneOf(Object.keys(constants.STYLES)), + bsSize: React.PropTypes.oneOf(Object.keys(constants.SIZES)) + }, + + getBsClassSet: function () { + var classes = {}; + + var bsClass = this.props.bsClass && constants.CLASSES[this.props.bsClass]; + if (bsClass) { + classes[bsClass] = true; + + var prefix = bsClass + '-'; + + var bsSize = this.props.bsSize && constants.SIZES[this.props.bsSize]; + if (bsSize) { + classes[prefix + bsSize] = true; + } + + var bsStyle = this.props.bsStyle && constants.STYLES[this.props.bsStyle]; + if (this.props.bsStyle) { + classes[prefix + bsStyle] = true; + } + } + + return classes; + } +}; + +module.exports = BootstrapMixin; +}); + +define('utils/ValidComponentChildren',['require','exports','module','react'],function (require, exports, module) {var React = require('react'); + +/** + * Maps children that are typically specified as `props.children`, + * but only iterates over children that are "valid components". + * + * The mapFunction provided index will be normalised to the components mapped, + * so an invalid component would not increase the index. + * + * @param {?*} children Children tree container. + * @param {function(*, int)} mapFunction. + * @param {*} mapContext Context for mapFunction. + * @return {object} Object containing the ordered map of results. + */ +function mapValidComponents(children, func, context) { + var index = 0; + + return React.Children.map(children, function (child) { + if (React.isValidElement(child)) { + var lastIndex = index; + index++; + return func.call(context, child, lastIndex); + } + + return child; + }); +} + +/** + * Iterates through children that are typically specified as `props.children`, + * but only iterates over children that are "valid components". + * + * The provided forEachFunc(child, index) will be called for each + * leaf child with the index reflecting the position relative to "valid components". + * + * @param {?*} children Children tree container. + * @param {function(*, int)} forEachFunc. + * @param {*} forEachContext Context for forEachContext. + */ +function forEachValidComponents(children, func, context) { + var index = 0; + + return React.Children.forEach(children, function (child) { + if (React.isValidElement(child)) { + func.call(context, child, index); + index++; + } + }); +} + +/** + * Count the number of "valid components" in the Children container. + * + * @param {?*} children Children tree container. + * @returns {number} + */ +function numberOfValidComponents(children) { + var count = 0; + + React.Children.forEach(children, function (child) { + if (React.isValidElement(child)) { count++; } + }); + + return count; +} + +/** + * Determine if the Child container has one or more "valid components". + * + * @param {?*} children Children tree container. + * @returns {boolean} + */ +function hasValidComponent(children) { + var hasValid = false; + + React.Children.forEach(children, function (child) { + if (!hasValid && React.isValidElement(child)) { + hasValid = true; + } + }); + + return hasValid; +} + +module.exports = { + map: mapValidComponents, + forEach: forEachValidComponents, + numberOf: numberOfValidComponents, + hasValidComponent: hasValidComponent +}; +}); + +define('PanelGroup',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/cloneWithProps','./BootstrapMixin','./utils/ValidComponentChildren'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var BootstrapMixin = require('./BootstrapMixin'); +var ValidComponentChildren = require('./utils/ValidComponentChildren'); + +var PanelGroup = React.createClass({displayName: "PanelGroup", + mixins: [BootstrapMixin], + + propTypes: { + collapsable: React.PropTypes.bool, + activeKey: React.PropTypes.any, + defaultActiveKey: React.PropTypes.any, + onSelect: React.PropTypes.func + }, + + getDefaultProps: function () { + return { + bsClass: 'panel-group' + }; + }, + + getInitialState: function () { + var defaultActiveKey = this.props.defaultActiveKey; + + return { + activeKey: defaultActiveKey + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes)), onSelect: null}), + ValidComponentChildren.map(this.props.children, this.renderPanel) + ) + ); + }, + + renderPanel: function (child, index) { + var activeKey = + this.props.activeKey != null ? this.props.activeKey : this.state.activeKey; + + var props = { + bsStyle: child.props.bsStyle || this.props.bsStyle, + key: child.key ? child.key : index, + ref: child.ref + }; + + if (this.props.accordion) { + props.collapsable = true; + props.expanded = (child.props.eventKey === activeKey); + props.onSelect = this.handleSelect; + } + + return cloneWithProps( + child, + props + ); + }, + + shouldComponentUpdate: function() { + // Defer any updates to this component during the `onSelect` handler. + return !this._isChanging; + }, + + handleSelect: function (key) { + if (this.props.onSelect) { + this._isChanging = true; + this.props.onSelect(key); + this._isChanging = false; + } + + if (this.state.activeKey === key) { + key = null; + } + + this.setState({ + activeKey: key + }); + } +}); + +module.exports = PanelGroup; +}); + +define('Accordion',['require','exports','module','react','./PanelGroup'],function (require, exports, module) {var React = require('react'); +var PanelGroup = require('./PanelGroup'); + +var Accordion = React.createClass({displayName: "Accordion", + render: function () { + return ( + React.createElement(PanelGroup, React.__spread({}, this.props, {accordion: true}), + this.props.children + ) + ); + } +}); + +module.exports = Accordion; +}); + +define('utils/domUtils',['require','exports','module'],function (require, exports, module) { +/** + * Shortcut to compute element style + * + * @param {HTMLElement} elem + * @returns {CssStyle} + */ +function getComputedStyles(elem) { + return elem.ownerDocument.defaultView.getComputedStyle(elem, null); +} + +/** + * Get elements offset + * + * TODO: REMOVE JQUERY! + * + * @param {HTMLElement} DOMNode + * @returns {{top: number, left: number}} + */ +function getOffset(DOMNode) { + if (window.jQuery) { + return window.jQuery(DOMNode).offset(); + } + + var docElem = document.documentElement; + var box = { top: 0, left: 0 }; + + // If we don't have gBCR, just use 0,0 rather than error + // BlackBerry 5, iOS 3 (original iPhone) + if ( typeof DOMNode.getBoundingClientRect !== 'undefined' ) { + box = DOMNode.getBoundingClientRect(); + } + + return { + top: box.top + window.pageYOffset - docElem.clientTop, + left: box.left + window.pageXOffset - docElem.clientLeft + }; +} + +/** + * Get elements position + * + * TODO: REMOVE JQUERY! + * + * @param {HTMLElement} elem + * @param {HTMLElement?} offsetParent + * @returns {{top: number, left: number}} + */ +function getPosition(elem, offsetParent) { + if (window.jQuery) { + return window.jQuery(elem).position(); + } + + var offset, + parentOffset = {top: 0, left: 0}; + + // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent + if (getComputedStyles(elem).position === 'fixed' ) { + // We assume that getBoundingClientRect is available when computed position is fixed + offset = elem.getBoundingClientRect(); + + } else { + if (!offsetParent) { + // Get *real* offsetParent + offsetParent = offsetParent(elem); + } + + // Get correct offsets + offset = getOffset(elem); + if ( offsetParent.nodeName !== 'HTML') { + parentOffset = getOffset(offsetParent); + } + + // Add offsetParent borders + parentOffset.top += parseInt(getComputedStyles(offsetParent).borderTopWidth, 10); + parentOffset.left += parseInt(getComputedStyles(offsetParent).borderLeftWidth, 10); + } + + // Subtract parent offsets and element margins + return { + top: offset.top - parentOffset.top - parseInt(getComputedStyles(elem).marginTop, 10), + left: offset.left - parentOffset.left - parseInt(getComputedStyles(elem).marginLeft, 10) + }; +} + +/** + * Get parent element + * + * @param {HTMLElement?} elem + * @returns {HTMLElement} + */ +function offsetParent(elem) { + var docElem = document.documentElement; + var offsetParent = elem.offsetParent || docElem; + + while ( offsetParent && ( offsetParent.nodeName !== 'HTML' && + getComputedStyles(offsetParent).position === 'static' ) ) { + offsetParent = offsetParent.offsetParent; + } + + return offsetParent || docElem; +} + +module.exports = { + getComputedStyles: getComputedStyles, + getOffset: getOffset, + getPosition: getPosition, + offsetParent: offsetParent +}; +}); + +define('utils/EventListener',['require','exports','module'],function (require, exports, module) {/** + * Copyright 2013-2014 Facebook, Inc. + * + * This file contains a modified version of: + * https://github.com/facebook/react/blob/v0.12.0/src/vendor/stubs/EventListener.js + * + * 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. + * + * TODO: remove in favour of solution provided by: + * https://github.com/facebook/react/issues/285 + */ + +/** + * Does not take into account specific nature of platform. + */ +var EventListener = { + /** + * Listen to DOM events during the bubble phase. + * + * @param {DOMEventTarget} target DOM element to register listener on. + * @param {string} eventType Event type, e.g. 'click' or 'mouseover'. + * @param {function} callback Callback function. + * @return {object} Object with a `remove` method. + */ + listen: function(target, eventType, callback) { + if (target.addEventListener) { + target.addEventListener(eventType, callback, false); + return { + remove: function() { + target.removeEventListener(eventType, callback, false); + } + }; + } else if (target.attachEvent) { + target.attachEvent('on' + eventType, callback); + return { + remove: function() { + target.detachEvent('on' + eventType, callback); + } + }; + } + } +}; + +module.exports = EventListener; + +}); + +define('AffixMixin',['require','exports','module','react','./utils/domUtils','./utils/EventListener'],function (require, exports, module) {/* global window, document */ + +var React = require('react'); +var domUtils = require('./utils/domUtils'); +var EventListener = require('./utils/EventListener'); + +var AffixMixin = { + propTypes: { + offset: React.PropTypes.number, + offsetTop: React.PropTypes.number, + offsetBottom: React.PropTypes.number + }, + + getInitialState: function () { + return { + affixClass: 'affix-top' + }; + }, + + getPinnedOffset: function (DOMNode) { + if (this.pinnedOffset) { + return this.pinnedOffset; + } + + DOMNode.className = DOMNode.className.replace(/affix-top|affix-bottom|affix/, ''); + DOMNode.className += DOMNode.className.length ? ' affix' : 'affix'; + + this.pinnedOffset = domUtils.getOffset(DOMNode).top - window.pageYOffset; + + return this.pinnedOffset; + }, + + checkPosition: function () { + var DOMNode, scrollHeight, scrollTop, position, offsetTop, offsetBottom, + affix, affixType, affixPositionTop; + + // TODO: or not visible + if (!this.isMounted()) { + return; + } + + DOMNode = this.getDOMNode(); + scrollHeight = document.documentElement.offsetHeight; + scrollTop = window.pageYOffset; + position = domUtils.getOffset(DOMNode); + offsetTop; + offsetBottom; + + if (this.affixed === 'top') { + position.top += scrollTop; + } + + offsetTop = this.props.offsetTop != null ? + this.props.offsetTop : this.props.offset; + offsetBottom = this.props.offsetBottom != null ? + this.props.offsetBottom : this.props.offset; + + if (offsetTop == null && offsetBottom == null) { + return; + } + if (offsetTop == null) { + offsetTop = 0; + } + if (offsetBottom == null) { + offsetBottom = 0; + } + + if (this.unpin != null && (scrollTop + this.unpin <= position.top)) { + affix = false; + } else if (offsetBottom != null && (position.top + DOMNode.offsetHeight >= scrollHeight - offsetBottom)) { + affix = 'bottom'; + } else if (offsetTop != null && (scrollTop <= offsetTop)) { + affix = 'top'; + } else { + affix = false; + } + + if (this.affixed === affix) { + return; + } + + if (this.unpin != null) { + DOMNode.style.top = ''; + } + + affixType = 'affix' + (affix ? '-' + affix : ''); + + this.affixed = affix; + this.unpin = affix === 'bottom' ? + this.getPinnedOffset(DOMNode) : null; + + if (affix === 'bottom') { + DOMNode.className = DOMNode.className.replace(/affix-top|affix-bottom|affix/, 'affix-bottom'); + affixPositionTop = scrollHeight - offsetBottom - DOMNode.offsetHeight - domUtils.getOffset(DOMNode).top; + } + + this.setState({ + affixClass: affixType, + affixPositionTop: affixPositionTop + }); + }, + + checkPositionWithEventLoop: function () { + setTimeout(this.checkPosition, 0); + }, + + componentDidMount: function () { + this._onWindowScrollListener = + EventListener.listen(window, 'scroll', this.checkPosition); + this._onDocumentClickListener = + EventListener.listen(document, 'click', this.checkPositionWithEventLoop); + }, + + componentWillUnmount: function () { + if (this._onWindowScrollListener) { + this._onWindowScrollListener.remove(); + } + + if (this._onDocumentClickListener) { + this._onDocumentClickListener.remove(); + } + }, + + componentDidUpdate: function (prevProps, prevState) { + if (prevState.affixClass === this.state.affixClass) { + this.checkPositionWithEventLoop(); + } + } +}; + +module.exports = AffixMixin; +}); + +define('Affix',['require','exports','module','react','./utils/joinClasses','./AffixMixin','./utils/domUtils'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var AffixMixin = require('./AffixMixin'); +var domUtils = require('./utils/domUtils'); + +var Affix = React.createClass({displayName: "Affix", + statics: { + domUtils: domUtils + }, + + mixins: [AffixMixin], + + render: function () { + var holderStyle = {top: this.state.affixPositionTop}; + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, this.state.affixClass), style: holderStyle}), + this.props.children + ) + ); + } +}); + +module.exports = Affix; +}); + +define('Alert',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + + +var Alert = React.createClass({displayName: "Alert", + mixins: [BootstrapMixin], + + propTypes: { + onDismiss: React.PropTypes.func, + dismissAfter: React.PropTypes.number + }, + + getDefaultProps: function () { + return { + bsClass: 'alert', + bsStyle: 'info' + }; + }, + + renderDismissButton: function () { + return ( + React.createElement("button", { + type: "button", + className: "close", + onClick: this.props.onDismiss, + "aria-hidden": "true"}, + "×" + ) + ); + }, + + render: function () { + var classes = this.getBsClassSet(); + var isDismissable = !!this.props.onDismiss; + + classes['alert-dismissable'] = isDismissable; + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + isDismissable ? this.renderDismissButton() : null, + this.props.children + ) + ); + }, + + componentDidMount: function() { + if (this.props.dismissAfter && this.props.onDismiss) { + this.dismissTimer = setTimeout(this.props.onDismiss, this.props.dismissAfter); + } + }, + + componentWillUnmount: function() { + clearTimeout(this.dismissTimer); + } +}); + +module.exports = Alert; +}); + +define('Badge',['require','exports','module','react','./utils/joinClasses','./utils/ValidComponentChildren','./utils/classSet'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var classSet = require('./utils/classSet'); + +var Badge = React.createClass({displayName: "Badge", + propTypes: { + pullRight: React.PropTypes.bool + }, + + hasContent: function () { + return ValidComponentChildren.hasValidComponent(this.props.children) || + (typeof this.props.children === 'string') || + (typeof this.props.children === 'number') + }, + + render: function () { + var classes = { + 'pull-right': this.props.pullRight, + 'badge': this.hasContent() + }; + return ( + React.createElement("span", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = Badge; + +}); + +define('Button',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + +var Button = React.createClass({displayName: "Button", + mixins: [BootstrapMixin], + + propTypes: { + active: React.PropTypes.bool, + disabled: React.PropTypes.bool, + block: React.PropTypes.bool, + navItem: React.PropTypes.bool, + navDropdown: React.PropTypes.bool, + componentClass: React.PropTypes.node, + href: React.PropTypes.string, + target: React.PropTypes.string + }, + + getDefaultProps: function () { + return { + bsClass: 'button', + bsStyle: 'default', + type: 'button' + }; + }, + + render: function () { + var classes = this.props.navDropdown ? {} : this.getBsClassSet(); + var renderFuncName; + + classes['active'] = this.props.active; + classes['btn-block'] = this.props.block; + + if (this.props.navItem) { + return this.renderNavItem(classes); + } + + renderFuncName = this.props.href || this.props.target || this.props.navDropdown ? + 'renderAnchor' : 'renderButton'; + + return this[renderFuncName](classes); + }, + + renderAnchor: function (classes) { + + var Component = this.props.componentClass || 'a'; + var href = this.props.href || '#'; + classes['disabled'] = this.props.disabled; + + return ( + React.createElement(Component, React.__spread({}, + this.props, + {href: href, + className: joinClasses(this.props.className, classSet(classes)), + role: "button"}), + this.props.children + ) + ); + }, + + renderButton: function (classes) { + var Component = this.props.componentClass || 'button'; + + return ( + React.createElement(Component, React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + }, + + renderNavItem: function (classes) { + var liClasses = { + active: this.props.active + }; + + return ( + React.createElement("li", {className: classSet(liClasses)}, + this.renderAnchor(classes) + ) + ); + } +}); + +module.exports = Button; + +}); + +define('ButtonGroup',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin','./Button'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); +var Button = require('./Button'); + +var ButtonGroup = React.createClass({displayName: "ButtonGroup", + mixins: [BootstrapMixin], + + propTypes: { + vertical: React.PropTypes.bool, + justified: React.PropTypes.bool + }, + + getDefaultProps: function () { + return { + bsClass: 'button-group' + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + classes['btn-group'] = !this.props.vertical; + classes['btn-group-vertical'] = this.props.vertical; + classes['btn-group-justified'] = this.props.justified; + + return ( + React.createElement("div", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = ButtonGroup; +}); + +define('ButtonToolbar',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin','./Button'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); +var Button = require('./Button'); + +var ButtonToolbar = React.createClass({displayName: "ButtonToolbar", + mixins: [BootstrapMixin], + + getDefaultProps: function () { + return { + bsClass: 'button-toolbar' + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + + return ( + React.createElement("div", React.__spread({}, + this.props, + {role: "toolbar", + className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = ButtonToolbar; +}); + +define('Carousel',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/cloneWithProps','./BootstrapMixin','./utils/ValidComponentChildren'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); +var BootstrapMixin = require('./BootstrapMixin'); +var ValidComponentChildren = require('./utils/ValidComponentChildren'); + +var Carousel = React.createClass({displayName: "Carousel", + mixins: [BootstrapMixin], + + propTypes: { + slide: React.PropTypes.bool, + indicators: React.PropTypes.bool, + controls: React.PropTypes.bool, + pauseOnHover: React.PropTypes.bool, + wrap: React.PropTypes.bool, + onSelect: React.PropTypes.func, + onSlideEnd: React.PropTypes.func, + activeIndex: React.PropTypes.number, + defaultActiveIndex: React.PropTypes.number, + direction: React.PropTypes.oneOf(['prev', 'next']) + }, + + getDefaultProps: function () { + return { + slide: true, + interval: 5000, + pauseOnHover: true, + wrap: true, + indicators: true, + controls: true + }; + }, + + getInitialState: function () { + return { + activeIndex: this.props.defaultActiveIndex == null ? + 0 : this.props.defaultActiveIndex, + previousActiveIndex: null, + direction: null + }; + }, + + getDirection: function (prevIndex, index) { + if (prevIndex === index) { + return null; + } + + return prevIndex > index ? + 'prev' : 'next'; + }, + + componentWillReceiveProps: function (nextProps) { + var activeIndex = this.getActiveIndex(); + + if (nextProps.activeIndex != null && nextProps.activeIndex !== activeIndex) { + clearTimeout(this.timeout); + this.setState({ + previousActiveIndex: activeIndex, + direction: nextProps.direction != null ? + nextProps.direction : this.getDirection(activeIndex, nextProps.activeIndex) + }); + } + }, + + componentDidMount: function () { + this.waitForNext(); + }, + + componentWillUnmount: function() { + clearTimeout(this.timeout); + }, + + next: function (e) { + if (e) { + e.preventDefault(); + } + + var index = this.getActiveIndex() + 1; + var count = ValidComponentChildren.numberOf(this.props.children); + + if (index > count - 1) { + if (!this.props.wrap) { + return; + } + index = 0; + } + + this.handleSelect(index, 'next'); + }, + + prev: function (e) { + if (e) { + e.preventDefault(); + } + + var index = this.getActiveIndex() - 1; + + if (index < 0) { + if (!this.props.wrap) { + return; + } + index = ValidComponentChildren.numberOf(this.props.children) - 1; + } + + this.handleSelect(index, 'prev'); + }, + + pause: function () { + this.isPaused = true; + clearTimeout(this.timeout); + }, + + play: function () { + this.isPaused = false; + this.waitForNext(); + }, + + waitForNext: function () { + if (!this.isPaused && this.props.slide && this.props.interval && + this.props.activeIndex == null) { + this.timeout = setTimeout(this.next, this.props.interval); + } + }, + + handleMouseOver: function () { + if (this.props.pauseOnHover) { + this.pause(); + } + }, + + handleMouseOut: function () { + if (this.isPaused) { + this.play(); + } + }, + + render: function () { + var classes = { + carousel: true, + slide: this.props.slide + }; + + return ( + React.createElement("div", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes)), + onMouseOver: this.handleMouseOver, + onMouseOut: this.handleMouseOut}), + this.props.indicators ? this.renderIndicators() : null, + React.createElement("div", {className: "carousel-inner", ref: "inner"}, + ValidComponentChildren.map(this.props.children, this.renderItem) + ), + this.props.controls ? this.renderControls() : null + ) + ); + }, + + renderPrev: function () { + return ( + React.createElement("a", {className: "left carousel-control", href: "#prev", key: 0, onClick: this.prev}, + React.createElement("span", {className: "glyphicon glyphicon-chevron-left"}) + ) + ); + }, + + renderNext: function () { + return ( + React.createElement("a", {className: "right carousel-control", href: "#next", key: 1, onClick: this.next}, + React.createElement("span", {className: "glyphicon glyphicon-chevron-right"}) + ) + ); + }, + + renderControls: function () { + if (this.props.wrap) { + var activeIndex = this.getActiveIndex(); + var count = ValidComponentChildren.numberOf(this.props.children); + + return [ + (activeIndex !== 0) ? this.renderPrev() : null, + (activeIndex !== count - 1) ? this.renderNext() : null + ]; + } + + return [ + this.renderPrev(), + this.renderNext() + ]; + }, + + renderIndicator: function (child, index) { + var className = (index === this.getActiveIndex()) ? + 'active' : null; + + return ( + React.createElement("li", { + key: index, + className: className, + onClick: this.handleSelect.bind(this, index, null)}) + ); + }, + + renderIndicators: function () { + var indicators = []; + ValidComponentChildren + .forEach(this.props.children, function(child, index) { + indicators.push( + this.renderIndicator(child, index), + + // Force whitespace between indicator elements, bootstrap + // requires this for correct spacing of elements. + ' ' + ); + }, this); + + return ( + React.createElement("ol", {className: "carousel-indicators"}, + indicators + ) + ); + }, + + getActiveIndex: function () { + return this.props.activeIndex != null ? this.props.activeIndex : this.state.activeIndex; + }, + + handleItemAnimateOutEnd: function () { + this.setState({ + previousActiveIndex: null, + direction: null + }, function() { + this.waitForNext(); + + if (this.props.onSlideEnd) { + this.props.onSlideEnd(); + } + }); + }, + + renderItem: function (child, index) { + var activeIndex = this.getActiveIndex(); + var isActive = (index === activeIndex); + var isPreviousActive = this.state.previousActiveIndex != null && + this.state.previousActiveIndex === index && this.props.slide; + + return cloneWithProps( + child, + { + active: isActive, + ref: child.ref, + key: child.key ? child.key : index, + index: index, + animateOut: isPreviousActive, + animateIn: isActive && this.state.previousActiveIndex != null && this.props.slide, + direction: this.state.direction, + onAnimateOutEnd: isPreviousActive ? this.handleItemAnimateOutEnd: null + } + ); + }, + + handleSelect: function (index, direction) { + clearTimeout(this.timeout); + + var previousActiveIndex = this.getActiveIndex(); + direction = direction || this.getDirection(previousActiveIndex, index); + + if (this.props.onSelect) { + this.props.onSelect(index, direction); + } + + if (this.props.activeIndex == null && index !== previousActiveIndex) { + if (this.state.previousActiveIndex != null) { + // If currently animating don't activate the new index. + // TODO: look into queuing this canceled call and + // animating after the current animation has ended. + return; + } + + this.setState({ + activeIndex: index, + previousActiveIndex: previousActiveIndex, + direction: direction + }); + } + } +}); + +module.exports = Carousel; +}); + +define('utils/TransitionEvents',['require','exports','module'],function (require, exports, module) {/** + * Copyright 2013-2014, Facebook, Inc. + * All rights reserved. + * + * This file contains a modified version of: + * https://github.com/facebook/react/blob/v0.12.0/src/addons/transitions/ReactTransitionEvents.js + * + * This source code is licensed under the BSD-style license found here: + * https://github.com/facebook/react/blob/v0.12.0/LICENSE + * An additional grant of patent rights can be found here: + * https://github.com/facebook/react/blob/v0.12.0/PATENTS + */ + +var canUseDOM = !!( + typeof window !== 'undefined' && + window.document && + window.document.createElement + ); + +/** + * EVENT_NAME_MAP is used to determine which event fired when a + * transition/animation ends, based on the style property used to + * define that event. + */ +var EVENT_NAME_MAP = { + transitionend: { + 'transition': 'transitionend', + 'WebkitTransition': 'webkitTransitionEnd', + 'MozTransition': 'mozTransitionEnd', + 'OTransition': 'oTransitionEnd', + 'msTransition': 'MSTransitionEnd' + }, + + animationend: { + 'animation': 'animationend', + 'WebkitAnimation': 'webkitAnimationEnd', + 'MozAnimation': 'mozAnimationEnd', + 'OAnimation': 'oAnimationEnd', + 'msAnimation': 'MSAnimationEnd' + } +}; + +var endEvents = []; + +function detectEvents() { + var testEl = document.createElement('div'); + var style = testEl.style; + + // On some platforms, in particular some releases of Android 4.x, + // the un-prefixed "animation" and "transition" properties are defined on the + // style object but the events that fire will still be prefixed, so we need + // to check if the un-prefixed events are useable, and if not remove them + // from the map + if (!('AnimationEvent' in window)) { + delete EVENT_NAME_MAP.animationend.animation; + } + + if (!('TransitionEvent' in window)) { + delete EVENT_NAME_MAP.transitionend.transition; + } + + for (var baseEventName in EVENT_NAME_MAP) { + var baseEvents = EVENT_NAME_MAP[baseEventName]; + for (var styleName in baseEvents) { + if (styleName in style) { + endEvents.push(baseEvents[styleName]); + break; + } + } + } +} + +if (canUseDOM) { + detectEvents(); +} + +// We use the raw {add|remove}EventListener() call because EventListener +// does not know how to remove event listeners and we really should +// clean up. Also, these events are not triggered in older browsers +// so we should be A-OK here. + +function addEventListener(node, eventName, eventListener) { + node.addEventListener(eventName, eventListener, false); +} + +function removeEventListener(node, eventName, eventListener) { + node.removeEventListener(eventName, eventListener, false); +} + +var ReactTransitionEvents = { + addEndEventListener: function(node, eventListener) { + if (endEvents.length === 0) { + // If CSS transitions are not supported, trigger an "end animation" + // event immediately. + window.setTimeout(eventListener, 0); + return; + } + endEvents.forEach(function(endEvent) { + addEventListener(node, endEvent, eventListener); + }); + }, + + removeEndEventListener: function(node, eventListener) { + if (endEvents.length === 0) { + return; + } + endEvents.forEach(function(endEvent) { + removeEventListener(node, endEvent, eventListener); + }); + } +}; + +module.exports = ReactTransitionEvents; + +}); + +define('CarouselItem',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/TransitionEvents'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var TransitionEvents = require('./utils/TransitionEvents'); + +var CarouselItem = React.createClass({displayName: "CarouselItem", + propTypes: { + direction: React.PropTypes.oneOf(['prev', 'next']), + onAnimateOutEnd: React.PropTypes.func, + active: React.PropTypes.bool, + caption: React.PropTypes.node + }, + + getInitialState: function () { + return { + direction: null + }; + }, + + getDefaultProps: function () { + return { + animation: true + }; + }, + + handleAnimateOutEnd: function () { + if (this.props.onAnimateOutEnd && this.isMounted()) { + this.props.onAnimateOutEnd(this.props.index); + } + }, + + componentWillReceiveProps: function (nextProps) { + if (this.props.active !== nextProps.active) { + this.setState({ + direction: null + }); + } + }, + + componentDidUpdate: function (prevProps) { + if (!this.props.active && prevProps.active) { + TransitionEvents.addEndEventListener( + this.getDOMNode(), + this.handleAnimateOutEnd + ); + } + + if (this.props.active !== prevProps.active) { + setTimeout(this.startAnimation, 20); + } + }, + + startAnimation: function () { + if (!this.isMounted()) { + return; + } + + this.setState({ + direction: this.props.direction === 'prev' ? + 'right' : 'left' + }); + }, + + render: function () { + var classes = { + item: true, + active: (this.props.active && !this.props.animateIn) || this.props.animateOut, + next: this.props.active && this.props.animateIn && this.props.direction === 'next', + prev: this.props.active && this.props.animateIn && this.props.direction === 'prev' + }; + + if (this.state.direction && (this.props.animateIn || this.props.animateOut)) { + classes[this.state.direction] = true; + } + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children, + this.props.caption ? this.renderCaption() : null + ) + ); + }, + + renderCaption: function () { + return ( + React.createElement("div", {className: "carousel-caption"}, + this.props.caption + ) + ); + } +}); + +module.exports = CarouselItem; +}); + +define('Col',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./constants'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var constants = require('./constants'); + + +var Col = React.createClass({displayName: "Col", + propTypes: { + xs: React.PropTypes.number, + sm: React.PropTypes.number, + md: React.PropTypes.number, + lg: React.PropTypes.number, + xsOffset: React.PropTypes.number, + smOffset: React.PropTypes.number, + mdOffset: React.PropTypes.number, + lgOffset: React.PropTypes.number, + xsPush: React.PropTypes.number, + smPush: React.PropTypes.number, + mdPush: React.PropTypes.number, + lgPush: React.PropTypes.number, + xsPull: React.PropTypes.number, + smPull: React.PropTypes.number, + mdPull: React.PropTypes.number, + lgPull: React.PropTypes.number, + componentClass: React.PropTypes.node.isRequired + }, + + getDefaultProps: function () { + return { + componentClass: 'div' + }; + }, + + render: function () { + var ComponentClass = this.props.componentClass; + var classes = {}; + + Object.keys(constants.SIZES).forEach(function (key) { + var size = constants.SIZES[key]; + var prop = size; + var classPart = size + '-'; + + if (this.props[prop]) { + classes['col-' + classPart + this.props[prop]] = true; + } + + prop = size + 'Offset'; + classPart = size + '-offset-'; + if (this.props[prop]) { + classes['col-' + classPart + this.props[prop]] = true; + } + + prop = size + 'Push'; + classPart = size + '-push-'; + if (this.props[prop]) { + classes['col-' + classPart + this.props[prop]] = true; + } + + prop = size + 'Pull'; + classPart = size + '-pull-'; + if (this.props[prop]) { + classes['col-' + classPart + this.props[prop]] = true; + } + }, this); + + return ( + React.createElement(ComponentClass, React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = Col; +}); + +define('CollapsableMixin',['require','exports','module','react','./utils/TransitionEvents'],function (require, exports, module) {var React = require('react'); +var TransitionEvents = require('./utils/TransitionEvents'); + +var CollapsableMixin = { + + propTypes: { + collapsable: React.PropTypes.bool, + defaultExpanded: React.PropTypes.bool, + expanded: React.PropTypes.bool + }, + + getInitialState: function () { + return { + expanded: this.props.defaultExpanded != null ? this.props.defaultExpanded : null, + collapsing: false + }; + }, + + handleTransitionEnd: function () { + this._collapseEnd = true; + this.setState({ + collapsing: false + }); + }, + + componentWillReceiveProps: function (newProps) { + if (this.props.collapsable && newProps.expanded !== this.props.expanded) { + this._collapseEnd = false; + this.setState({ + collapsing: true + }); + } + }, + + _addEndTransitionListener: function () { + var node = this.getCollapsableDOMNode(); + + if (node) { + TransitionEvents.addEndEventListener( + node, + this.handleTransitionEnd + ); + } + }, + + _removeEndTransitionListener: function () { + var node = this.getCollapsableDOMNode(); + + if (node) { + TransitionEvents.removeEndEventListener( + node, + this.handleTransitionEnd + ); + } + }, + + componentDidMount: function () { + this._afterRender(); + }, + + componentWillUnmount: function () { + this._removeEndTransitionListener(); + }, + + componentWillUpdate: function (nextProps) { + var dimension = (typeof this.getCollapsableDimension === 'function') ? + this.getCollapsableDimension() : 'height'; + var node = this.getCollapsableDOMNode(); + + this._removeEndTransitionListener(); + }, + + componentDidUpdate: function (prevProps, prevState) { + this._afterRender(); + }, + + _afterRender: function () { + if (!this.props.collapsable) { + return; + } + + this._addEndTransitionListener(); + setTimeout(this._updateDimensionAfterRender, 0); + }, + + _updateDimensionAfterRender: function () { + var node = this.getCollapsableDOMNode(); + if (node) { + var dimension = (typeof this.getCollapsableDimension === 'function') ? + this.getCollapsableDimension() : 'height'; + node.style[dimension] = this.isExpanded() ? + this.getCollapsableDimensionValue() + 'px' : '0px'; + } + }, + + isExpanded: function () { + return (this.props.expanded != null) ? + this.props.expanded : this.state.expanded; + }, + + getCollapsableClassSet: function (className) { + var classes = {}; + + if (typeof className === 'string') { + className.split(' ').forEach(function (className) { + if (className) { + classes[className] = true; + } + }); + } + + classes.collapsing = this.state.collapsing; + classes.collapse = !this.state.collapsing; + classes['in'] = this.isExpanded() && !this.state.collapsing; + + return classes; + } +}; + +module.exports = CollapsableMixin; + +}); + +define('utils/createChainedFunction',['require','exports','module'],function (require, exports, module) {/** + * Safe chained function + * + * Will only create a new function if needed, + * otherwise will pass back existing functions or null. + * + * @param {function} one + * @param {function} two + * @returns {function|null} + */ +function createChainedFunction(one, two) { + var hasOne = typeof one === 'function'; + var hasTwo = typeof two === 'function'; + + if (!hasOne && !hasTwo) { return null; } + if (!hasOne) { return two; } + if (!hasTwo) { return one; } + + return function chainedFunction() { + one.apply(this, arguments); + two.apply(this, arguments); + }; +} + +module.exports = createChainedFunction; +}); + +define('DropdownStateMixin',['require','exports','module','react','./utils/EventListener'],function (require, exports, module) {var React = require('react'); +var EventListener = require('./utils/EventListener'); + +/** + * Checks whether a node is within + * a root nodes tree + * + * @param {DOMElement} node + * @param {DOMElement} root + * @returns {boolean} + */ +function isNodeInRoot(node, root) { + while (node) { + if (node === root) { + return true; + } + node = node.parentNode; + } + + return false; +} + +var DropdownStateMixin = { + getInitialState: function () { + return { + open: false + }; + }, + + setDropdownState: function (newState, onStateChangeComplete) { + if (newState) { + this.bindRootCloseHandlers(); + } else { + this.unbindRootCloseHandlers(); + } + + this.setState({ + open: newState + }, onStateChangeComplete); + }, + + handleDocumentKeyUp: function (e) { + if (e.keyCode === 27) { + this.setDropdownState(false); + } + }, + + handleDocumentClick: function (e) { + // If the click originated from within this component + // don't do anything. + if (isNodeInRoot(e.target, this.getDOMNode())) { + return; + } + + this.setDropdownState(false); + }, + + bindRootCloseHandlers: function () { + this._onDocumentClickListener = + EventListener.listen(document, 'click', this.handleDocumentClick); + this._onDocumentKeyupListener = + EventListener.listen(document, 'keyup', this.handleDocumentKeyUp); + }, + + unbindRootCloseHandlers: function () { + if (this._onDocumentClickListener) { + this._onDocumentClickListener.remove(); + } + + if (this._onDocumentKeyupListener) { + this._onDocumentKeyupListener.remove(); + } + }, + + componentWillUnmount: function () { + this.unbindRootCloseHandlers(); + } +}; + +module.exports = DropdownStateMixin; +}); + +define('DropdownMenu',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/cloneWithProps','./utils/createChainedFunction','./utils/ValidComponentChildren'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var createChainedFunction = require('./utils/createChainedFunction'); +var ValidComponentChildren = require('./utils/ValidComponentChildren'); + +var DropdownMenu = React.createClass({displayName: "DropdownMenu", + propTypes: { + pullRight: React.PropTypes.bool, + onSelect: React.PropTypes.func + }, + + render: function () { + var classes = { + 'dropdown-menu': true, + 'dropdown-menu-right': this.props.pullRight + }; + + return ( + React.createElement("ul", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes)), + role: "menu"}), + ValidComponentChildren.map(this.props.children, this.renderMenuItem) + ) + ); + }, + + renderMenuItem: function (child, index) { + return cloneWithProps( + child, + { + // Capture onSelect events + onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect), + + // Force special props to be transferred + key: child.key ? child.key : index, + ref: child.ref + } + ); + } +}); + +module.exports = DropdownMenu; +}); + +define('DropdownButton',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/cloneWithProps','./utils/createChainedFunction','./BootstrapMixin','./DropdownStateMixin','./Button','./ButtonGroup','./DropdownMenu','./utils/ValidComponentChildren'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var createChainedFunction = require('./utils/createChainedFunction'); +var BootstrapMixin = require('./BootstrapMixin'); +var DropdownStateMixin = require('./DropdownStateMixin'); +var Button = require('./Button'); +var ButtonGroup = require('./ButtonGroup'); +var DropdownMenu = require('./DropdownMenu'); +var ValidComponentChildren = require('./utils/ValidComponentChildren'); + + +var DropdownButton = React.createClass({displayName: "DropdownButton", + mixins: [BootstrapMixin, DropdownStateMixin], + + propTypes: { + pullRight: React.PropTypes.bool, + dropup: React.PropTypes.bool, + title: React.PropTypes.node, + href: React.PropTypes.string, + onClick: React.PropTypes.func, + onSelect: React.PropTypes.func, + navItem: React.PropTypes.bool + }, + + render: function () { + var className = 'dropdown-toggle'; + + var renderMethod = this.props.navItem ? + 'renderNavItem' : 'renderButtonGroup'; + + return this[renderMethod]([ + React.createElement(Button, React.__spread({}, + this.props, + {ref: "dropdownButton", + className: joinClasses(this.props.className, className), + onClick: this.handleDropdownClick, + key: 0, + navDropdown: this.props.navItem, + navItem: null, + title: null, + pullRight: null, + dropup: null}), + this.props.title, ' ', + React.createElement("span", {className: "caret"}) + ), + React.createElement(DropdownMenu, { + ref: "menu", + "aria-labelledby": this.props.id, + pullRight: this.props.pullRight, + key: 1}, + ValidComponentChildren.map(this.props.children, this.renderMenuItem) + ) + ]); + }, + + renderButtonGroup: function (children) { + var groupClasses = { + 'open': this.state.open, + 'dropup': this.props.dropup + }; + + return ( + React.createElement(ButtonGroup, { + bsSize: this.props.bsSize, + className: classSet(groupClasses)}, + children + ) + ); + }, + + renderNavItem: function (children) { + var classes = { + 'dropdown': true, + 'open': this.state.open, + 'dropup': this.props.dropup + }; + + return ( + React.createElement("li", {className: classSet(classes)}, + children + ) + ); + }, + + renderMenuItem: function (child, index) { + // Only handle the option selection if an onSelect prop has been set on the + // component or it's child, this allows a user not to pass an onSelect + // handler and have the browser preform the default action. + var handleOptionSelect = this.props.onSelect || child.props.onSelect ? + this.handleOptionSelect : null; + + return cloneWithProps( + child, + { + // Capture onSelect events + onSelect: createChainedFunction(child.props.onSelect, handleOptionSelect), + + // Force special props to be transferred + key: child.key ? child.key : index, + ref: child.ref + } + ); + }, + + handleDropdownClick: function (e) { + e.preventDefault(); + + this.setDropdownState(!this.state.open); + }, + + handleOptionSelect: function (key) { + if (this.props.onSelect) { + this.props.onSelect(key); + } + + this.setDropdownState(false); + } +}); + +module.exports = DropdownButton; +}); + +define('FadeMixin',['require','exports','module'],function (require, exports, module) {/*global document */ +// TODO: listen for onTransitionEnd to remove el +function getElementsAndSelf (root, classes){ + var els = root.querySelectorAll('.' + classes.join('.')); + + els = [].map.call(els, function(e){ return e; }); + + for(var i = 0; i < classes.length; i++){ + if( !root.className.match(new RegExp('\\b' + classes[i] + '\\b'))){ + return els; + } + } + els.unshift(root); + return els; +} + +module.exports = { + _fadeIn: function () { + var els; + + if (this.isMounted()) { + els = getElementsAndSelf(this.getDOMNode(), ['fade']); + + if (els.length) { + els.forEach(function (el) { + el.className += ' in'; + }); + } + } + }, + + _fadeOut: function () { + var els = getElementsAndSelf(this._fadeOutEl, ['fade', 'in']); + + if (els.length) { + els.forEach(function (el) { + el.className = el.className.replace(/\bin\b/, ''); + }); + } + + setTimeout(this._handleFadeOutEnd, 300); + }, + + _handleFadeOutEnd: function () { + if (this._fadeOutEl && this._fadeOutEl.parentNode) { + this._fadeOutEl.parentNode.removeChild(this._fadeOutEl); + } + }, + + componentDidMount: function () { + if (document.querySelectorAll) { + // Firefox needs delay for transition to be triggered + setTimeout(this._fadeIn, 20); + } + }, + + componentWillUnmount: function () { + var els = getElementsAndSelf(this.getDOMNode(), ['fade']), + container = (this.props.container && this.props.container.getDOMNode()) || document.body; + + if (els.length) { + this._fadeOutEl = document.createElement('div'); + container.appendChild(this._fadeOutEl); + this._fadeOutEl.appendChild(this.getDOMNode().cloneNode(true)); + // Firefox needs delay for transition to be triggered + setTimeout(this._fadeOut, 20); + } + } +}; + +}); + +define('Glyphicon',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin','./constants'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); +var constants = require('./constants'); + +var Glyphicon = React.createClass({displayName: "Glyphicon", + mixins: [BootstrapMixin], + + propTypes: { + glyph: React.PropTypes.oneOf(constants.GLYPHS).isRequired + }, + + getDefaultProps: function () { + return { + bsClass: 'glyphicon' + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + + classes['glyphicon-' + this.props.glyph] = true; + + return ( + React.createElement("span", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = Glyphicon; +}); + +define('Grid',['require','exports','module','react','./utils/joinClasses'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); + +var Grid = React.createClass({displayName: "Grid", + propTypes: { + fluid: React.PropTypes.bool, + componentClass: React.PropTypes.node.isRequired + }, + + getDefaultProps: function () { + return { + componentClass: 'div' + }; + }, + + render: function () { + var ComponentClass = this.props.componentClass; + var className = this.props.fluid ? 'container-fluid' : 'container'; + + return ( + React.createElement(ComponentClass, React.__spread({}, + this.props, + {className: joinClasses(this.props.className, className)}), + this.props.children + ) + ); + } +}); + +module.exports = Grid; +}); + +define('Input',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./Button'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var Button = require('./Button'); + +var Input = React.createClass({displayName: "Input", + propTypes: { + type: React.PropTypes.string, + label: React.PropTypes.node, + help: React.PropTypes.node, + addonBefore: React.PropTypes.node, + addonAfter: React.PropTypes.node, + buttonBefore: React.PropTypes.node, + buttonAfter: React.PropTypes.node, + bsStyle: function(props) { + if (props.type === 'submit') { + // Return early if `type=submit` as the `Button` component + // it transfers these props to has its own propType checks. + return; + } + + return React.PropTypes.oneOf(['success', 'warning', 'error']).apply(null, arguments); + }, + hasFeedback: React.PropTypes.bool, + groupClassName: React.PropTypes.string, + wrapperClassName: React.PropTypes.string, + labelClassName: React.PropTypes.string, + disabled: React.PropTypes.bool + }, + + getInputDOMNode: function () { + return this.refs.input.getDOMNode(); + }, + + getValue: function () { + if (this.props.type === 'static') { + return this.props.value; + } + else if (this.props.type) { + return this.getInputDOMNode().value; + } + else { + throw Error('Cannot use getValue without specifying input type.'); + } + }, + + getChecked: function () { + return this.getInputDOMNode().checked; + }, + + isCheckboxOrRadio: function () { + return this.props.type === 'radio' || this.props.type === 'checkbox'; + }, + + isFile: function () { + return this.props.type === 'file'; + }, + + renderInput: function () { + var input = null; + + if (!this.props.type) { + return this.props.children + } + + switch (this.props.type) { + case 'select': + input = ( + React.createElement("select", React.__spread({}, this.props, {className: joinClasses(this.props.className, 'form-control'), ref: "input", key: "input"}), + this.props.children + ) + ); + break; + case 'textarea': + input = React.createElement("textarea", React.__spread({}, this.props, {className: joinClasses(this.props.className, 'form-control'), ref: "input", key: "input"})); + break; + case 'static': + input = ( + React.createElement("p", React.__spread({}, this.props, {className: joinClasses(this.props.className, 'form-control-static'), ref: "input", key: "input"}), + this.props.value + ) + ); + break; + case 'submit': + input = ( + React.createElement(Button, React.__spread({}, this.props, {componentClass: "input", ref: "input", key: "input"})) + ); + break; + default: + var className = this.isCheckboxOrRadio() || this.isFile() ? '' : 'form-control'; + input = React.createElement("input", React.__spread({}, this.props, {className: joinClasses(this.props.className, className), ref: "input", key: "input"})); + } + + return input; + }, + + renderInputGroup: function (children) { + var addonBefore = this.props.addonBefore ? ( + React.createElement("span", {className: "input-group-addon", key: "addonBefore"}, + this.props.addonBefore + ) + ) : null; + + var addonAfter = this.props.addonAfter ? ( + React.createElement("span", {className: "input-group-addon", key: "addonAfter"}, + this.props.addonAfter + ) + ) : null; + + var buttonBefore = this.props.buttonBefore ? ( + React.createElement("span", {className: "input-group-btn"}, + this.props.buttonBefore + ) + ) : null; + + var buttonAfter = this.props.buttonAfter ? ( + React.createElement("span", {className: "input-group-btn"}, + this.props.buttonAfter + ) + ) : null; + + return addonBefore || addonAfter || buttonBefore || buttonAfter ? ( + React.createElement("div", {className: "input-group", key: "input-group"}, + addonBefore, + buttonBefore, + children, + addonAfter, + buttonAfter + ) + ) : children; + }, + + renderIcon: function () { + var classes = { + 'glyphicon': true, + 'form-control-feedback': true, + 'glyphicon-ok': this.props.bsStyle === 'success', + 'glyphicon-warning-sign': this.props.bsStyle === 'warning', + 'glyphicon-remove': this.props.bsStyle === 'error' + }; + + return this.props.hasFeedback ? ( + React.createElement("span", {className: classSet(classes), key: "icon"}) + ) : null; + }, + + renderHelp: function () { + return this.props.help ? ( + React.createElement("span", {className: "help-block", key: "help"}, + this.props.help + ) + ) : null; + }, + + renderCheckboxandRadioWrapper: function (children) { + var classes = { + 'checkbox': this.props.type === 'checkbox', + 'radio': this.props.type === 'radio' + }; + + return ( + React.createElement("div", {className: classSet(classes), key: "checkboxRadioWrapper"}, + children + ) + ); + }, + + renderWrapper: function (children) { + return this.props.wrapperClassName ? ( + React.createElement("div", {className: this.props.wrapperClassName, key: "wrapper"}, + children + ) + ) : children; + }, + + renderLabel: function (children) { + var classes = { + 'control-label': !this.isCheckboxOrRadio() + }; + classes[this.props.labelClassName] = this.props.labelClassName; + + return this.props.label ? ( + React.createElement("label", {htmlFor: this.props.id, className: classSet(classes), key: "label"}, + children, + this.props.label + ) + ) : children; + }, + + renderFormGroup: function (children) { + var classes = { + 'form-group': true, + 'has-feedback': this.props.hasFeedback, + 'has-success': this.props.bsStyle === 'success', + 'has-warning': this.props.bsStyle === 'warning', + 'has-error': this.props.bsStyle === 'error' + }; + classes[this.props.groupClassName] = this.props.groupClassName; + + return ( + React.createElement("div", {className: classSet(classes)}, + children + ) + ); + }, + + render: function () { + if (this.isCheckboxOrRadio()) { + return this.renderFormGroup( + this.renderWrapper([ + this.renderCheckboxandRadioWrapper( + this.renderLabel( + this.renderInput() + ) + ), + this.renderHelp() + ]) + ); + } + else { + return this.renderFormGroup([ + this.renderLabel(), + this.renderWrapper([ + this.renderInputGroup( + this.renderInput() + ), + this.renderIcon(), + this.renderHelp() + ]) + ]); + } + } +}); + +module.exports = Input; + +}); + +define('Interpolate',['require','exports','module','react','./utils/ValidComponentChildren','./utils/Object.assign'],function (require, exports, module) {// https://www.npmjs.org/package/react-interpolate-component + + +var React = require('react'); +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var assign = require('./utils/Object.assign'); + +var REGEXP = /\%\((.+?)\)s/; + +var Interpolate = React.createClass({ + displayName: 'Interpolate', + + propTypes: { + format: React.PropTypes.string + }, + + getDefaultProps: function() { + return { component: 'span' }; + }, + + render: function() { + var format = (ValidComponentChildren.hasValidComponent(this.props.children) || + (typeof this.props.children === 'string')) ? + this.props.children : this.props.format; + var parent = this.props.component; + var unsafe = this.props.unsafe === true; + var props = assign({}, this.props); + + delete props.children; + delete props.format; + delete props.component; + delete props.unsafe; + + if (unsafe) { + var content = format.split(REGEXP).reduce(function(memo, match, index) { + var html; + + if (index % 2 === 0) { + html = match; + } else { + html = props[match]; + delete props[match]; + } + + if (React.isValidElement(html)) { + throw new Error('cannot interpolate a React component into unsafe text'); + } + + memo += html; + + return memo; + }, ''); + + props.dangerouslySetInnerHTML = { __html: content }; + + return React.createElement(parent, props); + } else { + var kids = format.split(REGEXP).reduce(function(memo, match, index) { + var child; + + if (index % 2 === 0) { + if (match.length === 0) { + return memo; + } + + child = match; + } else { + child = props[match]; + delete props[match]; + } + + memo.push(child); + + return memo; + }, []); + + return React.createElement(parent, props, kids); + } + } +}); + +module.exports = Interpolate; + +}); + +define('Jumbotron',['require','exports','module','react','./utils/joinClasses'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); + +var Jumbotron = React.createClass({displayName: "Jumbotron", + + render: function () { + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, 'jumbotron')}), + this.props.children + ) + ); + } +}); + +module.exports = Jumbotron; +}); + +define('Label',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + +var Label = React.createClass({displayName: "Label", + mixins: [BootstrapMixin], + + getDefaultProps: function () { + return { + bsClass: 'label', + bsStyle: 'default' + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + + return ( + React.createElement("span", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = Label; +}); + +define('ListGroup',['require','exports','module','react','./utils/classSet','./utils/cloneWithProps','./utils/ValidComponentChildren','./utils/createChainedFunction'],function (require, exports, module) {var React = require('react'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var createChainedFunction = require('./utils/createChainedFunction'); + +var ListGroup = React.createClass({displayName: "ListGroup", + propTypes: { + onClick: React.PropTypes.func + }, + + render: function () { + return ( + React.createElement("div", {className: "list-group"}, + ValidComponentChildren.map(this.props.children, this.renderListItem) + ) + ); + }, + + renderListItem: function (child, index) { + return cloneWithProps(child, { + onClick: createChainedFunction(child.props.onClick, this.props.onClick), + ref: child.ref, + key: child.key ? child.key : index + }); + } +}); + +module.exports = ListGroup; + +}); + +define('ListGroupItem',['require','exports','module','react','./utils/joinClasses','./BootstrapMixin','./utils/classSet','./utils/cloneWithProps','./utils/ValidComponentChildren'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var BootstrapMixin = require('./BootstrapMixin'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); + +var ListGroupItem = React.createClass({displayName: "ListGroupItem", + mixins: [BootstrapMixin], + + propTypes: { + bsStyle: React.PropTypes.oneOf(['danger','info','success','warning']), + active: React.PropTypes.any, + disabled: React.PropTypes.any, + header: React.PropTypes.node, + onClick: React.PropTypes.func, + eventKey: React.PropTypes.any, + href: React.PropTypes.string, + target: React.PropTypes.string + }, + + getDefaultProps: function () { + return { + bsClass: 'list-group-item' + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + + classes['active'] = this.props.active; + classes['disabled'] = this.props.disabled; + + if (this.props.href || this.props.target || this.props.onClick) { + return this.renderAnchor(classes); + } else { + return this.renderSpan(classes); + } + }, + + renderSpan: function (classes) { + return ( + React.createElement("span", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.header ? this.renderStructuredContent() : this.props.children + ) + ); + }, + + renderAnchor: function (classes) { + return ( + React.createElement("a", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes)), + onClick: this.handleClick}), + this.props.header ? this.renderStructuredContent() : this.props.children + ) + ); + }, + + renderStructuredContent: function () { + var header; + if (React.isValidElement(this.props.header)) { + header = cloneWithProps(this.props.header, { + className: 'list-group-item-heading' + }); + } else { + header = ( + React.createElement("h4", {className: "list-group-item-heading"}, + this.props.header + ) + ); + } + + var content = ( + React.createElement("p", {className: "list-group-item-text"}, + this.props.children + ) + ); + + return { + header: header, + content: content + }; + }, + + handleClick: function (e) { + if (this.props.onClick) { + e.preventDefault(); + this.props.onClick(this.props.eventKey, this.props.href, this.props.target); + } + } +}); + +module.exports = ListGroupItem; + +}); + +define('MenuItem',['require','exports','module','react','./utils/joinClasses','./utils/classSet'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); + +var MenuItem = React.createClass({displayName: "MenuItem", + propTypes: { + header: React.PropTypes.bool, + divider: React.PropTypes.bool, + href: React.PropTypes.string, + title: React.PropTypes.string, + target: React.PropTypes.string, + onSelect: React.PropTypes.func, + eventKey: React.PropTypes.any + }, + + getDefaultProps: function () { + return { + href: '#' + }; + }, + + handleClick: function (e) { + if (this.props.onSelect) { + e.preventDefault(); + this.props.onSelect(this.props.eventKey, this.props.href, this.props.target); + } + }, + + renderAnchor: function () { + return ( + React.createElement("a", {onClick: this.handleClick, href: this.props.href, target: this.props.target, title: this.props.title, tabIndex: "-1"}, + this.props.children + ) + ); + }, + + render: function () { + var classes = { + 'dropdown-header': this.props.header, + 'divider': this.props.divider + }; + + var children = null; + if (this.props.header) { + children = this.props.children; + } else if (!this.props.divider) { + children = this.renderAnchor(); + } + + return ( + React.createElement("li", React.__spread({}, this.props, {role: "presentation", title: null, href: null, + className: joinClasses(this.props.className, classSet(classes))}), + children + ) + ); + } +}); + +module.exports = MenuItem; +}); + +define('Modal',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin','./FadeMixin','./utils/EventListener'],function (require, exports, module) {/* global document:false */ + +var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); +var FadeMixin = require('./FadeMixin'); +var EventListener = require('./utils/EventListener'); + + +// TODO: +// - aria-labelledby +// - Add `modal-body` div if only one child passed in that doesn't already have it +// - Tests + +var Modal = React.createClass({displayName: "Modal", + mixins: [BootstrapMixin, FadeMixin], + + propTypes: { + title: React.PropTypes.node, + backdrop: React.PropTypes.oneOf(['static', true, false]), + keyboard: React.PropTypes.bool, + closeButton: React.PropTypes.bool, + animation: React.PropTypes.bool, + onRequestHide: React.PropTypes.func.isRequired + }, + + getDefaultProps: function () { + return { + bsClass: 'modal', + backdrop: true, + keyboard: true, + animation: true, + closeButton: true + }; + }, + + render: function () { + var modalStyle = {display: 'block'}; + var dialogClasses = this.getBsClassSet(); + delete dialogClasses.modal; + dialogClasses['modal-dialog'] = true; + + var classes = { + modal: true, + fade: this.props.animation, + 'in': !this.props.animation || !document.querySelectorAll + }; + + var modal = ( + React.createElement("div", React.__spread({}, + this.props, + {title: null, + tabIndex: "-1", + role: "dialog", + style: modalStyle, + className: joinClasses(this.props.className, classSet(classes)), + onClick: this.props.backdrop === true ? this.handleBackdropClick : null, + ref: "modal"}), + React.createElement("div", {className: classSet(dialogClasses)}, + React.createElement("div", {className: "modal-content"}, + this.props.title ? this.renderHeader() : null, + this.props.children + ) + ) + ) + ); + + return this.props.backdrop ? + this.renderBackdrop(modal) : modal; + }, + + renderBackdrop: function (modal) { + var classes = { + 'modal-backdrop': true, + 'fade': this.props.animation + }; + + classes['in'] = !this.props.animation || !document.querySelectorAll; + + var onClick = this.props.backdrop === true ? + this.handleBackdropClick : null; + + return ( + React.createElement("div", null, + React.createElement("div", {className: classSet(classes), ref: "backdrop", onClick: onClick}), + modal + ) + ); + }, + + renderHeader: function () { + var closeButton; + if (this.props.closeButton) { + closeButton = ( + React.createElement("button", {type: "button", className: "close", "aria-hidden": "true", onClick: this.props.onRequestHide}, "×") + ); + } + + return ( + React.createElement("div", {className: "modal-header"}, + closeButton, + this.renderTitle() + ) + ); + }, + + renderTitle: function () { + return ( + React.isValidElement(this.props.title) ? + this.props.title : React.createElement("h4", {className: "modal-title"}, this.props.title) + ); + }, + + iosClickHack: function () { + // IOS only allows click events to be delegated to the document on elements + // it considers 'clickable' - anchors, buttons, etc. We fake a click handler on the + // DOM nodes themselves. Remove if handled by React: https://github.com/facebook/react/issues/1169 + this.refs.modal.getDOMNode().onclick = function () {}; + this.refs.backdrop.getDOMNode().onclick = function () {}; + }, + + componentDidMount: function () { + this._onDocumentKeyupListener = + EventListener.listen(document, 'keyup', this.handleDocumentKeyUp); + + var container = (this.props.container && this.props.container.getDOMNode()) || document.body; + container.className += container.className.length ? ' modal-open' : 'modal-open'; + + if (this.props.backdrop) { + this.iosClickHack(); + } + }, + + componentDidUpdate: function (prevProps) { + if (this.props.backdrop && this.props.backdrop !== prevProps.backdrop) { + this.iosClickHack(); + } + }, + + componentWillUnmount: function () { + this._onDocumentKeyupListener.remove(); + var container = (this.props.container && this.props.container.getDOMNode()) || document.body; + container.className = container.className.replace(/ ?modal-open/, ''); + }, + + handleBackdropClick: function (e) { + if (e.target !== e.currentTarget) { + return; + } + + this.props.onRequestHide(); + }, + + handleDocumentKeyUp: function (e) { + if (this.props.keyboard && e.keyCode === 27) { + this.props.onRequestHide(); + } + } +}); + +module.exports = Modal; + +}); + +define('Nav',['require','exports','module','react','./utils/joinClasses','./BootstrapMixin','./CollapsableMixin','./utils/classSet','./utils/domUtils','./utils/cloneWithProps','./utils/ValidComponentChildren','./utils/createChainedFunction'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var BootstrapMixin = require('./BootstrapMixin'); +var CollapsableMixin = require('./CollapsableMixin'); +var classSet = require('./utils/classSet'); +var domUtils = require('./utils/domUtils'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var createChainedFunction = require('./utils/createChainedFunction'); + + +var Nav = React.createClass({displayName: "Nav", + mixins: [BootstrapMixin, CollapsableMixin], + + propTypes: { + bsStyle: React.PropTypes.oneOf(['tabs','pills']), + stacked: React.PropTypes.bool, + justified: React.PropTypes.bool, + onSelect: React.PropTypes.func, + collapsable: React.PropTypes.bool, + expanded: React.PropTypes.bool, + navbar: React.PropTypes.bool, + eventKey: React.PropTypes.any, + right: React.PropTypes.bool + }, + + getDefaultProps: function () { + return { + bsClass: 'nav' + }; + }, + + getCollapsableDOMNode: function () { + return this.getDOMNode(); + }, + + getCollapsableDimensionValue: function () { + var node = this.refs.ul.getDOMNode(), + height = node.offsetHeight, + computedStyles = domUtils.getComputedStyles(node); + + return height + parseInt(computedStyles.marginTop, 10) + parseInt(computedStyles.marginBottom, 10); + }, + + render: function () { + var classes = this.props.collapsable ? this.getCollapsableClassSet() : {}; + + classes['navbar-collapse'] = this.props.collapsable; + + if (this.props.navbar && !this.props.collapsable) { + return (this.renderUl()); + } + + return ( + React.createElement("nav", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.renderUl() + ) + ); + }, + + renderUl: function () { + var classes = this.getBsClassSet(); + + classes['nav-stacked'] = this.props.stacked; + classes['nav-justified'] = this.props.justified; + classes['navbar-nav'] = this.props.navbar; + classes['pull-right'] = this.props.pullRight; + classes['navbar-right'] = this.props.right; + + return ( + React.createElement("ul", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes)), ref: "ul"}), + ValidComponentChildren.map(this.props.children, this.renderNavItem) + ) + ); + }, + + getChildActiveProp: function (child) { + if (child.props.active) { + return true; + } + if (this.props.activeKey != null) { + if (child.props.eventKey == this.props.activeKey) { + return true; + } + } + if (this.props.activeHref != null) { + if (child.props.href === this.props.activeHref) { + return true; + } + } + + return child.props.active; + }, + + renderNavItem: function (child, index) { + return cloneWithProps( + child, + { + active: this.getChildActiveProp(child), + activeKey: this.props.activeKey, + activeHref: this.props.activeHref, + onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect), + ref: child.ref, + key: child.key ? child.key : index, + navItem: true + } + ); + } +}); + +module.exports = Nav; + +}); + +define('Navbar',['require','exports','module','react','./utils/joinClasses','./BootstrapMixin','./utils/classSet','./utils/cloneWithProps','./utils/ValidComponentChildren','./utils/createChainedFunction','./Nav'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var BootstrapMixin = require('./BootstrapMixin'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var createChainedFunction = require('./utils/createChainedFunction'); +var Nav = require('./Nav'); + + +var Navbar = React.createClass({displayName: "Navbar", + mixins: [BootstrapMixin], + + propTypes: { + fixedTop: React.PropTypes.bool, + fixedBottom: React.PropTypes.bool, + staticTop: React.PropTypes.bool, + inverse: React.PropTypes.bool, + fluid: React.PropTypes.bool, + role: React.PropTypes.string, + componentClass: React.PropTypes.node.isRequired, + brand: React.PropTypes.node, + toggleButton: React.PropTypes.node, + onToggle: React.PropTypes.func, + navExpanded: React.PropTypes.bool, + defaultNavExpanded: React.PropTypes.bool + }, + + getDefaultProps: function () { + return { + bsClass: 'navbar', + bsStyle: 'default', + role: 'navigation', + componentClass: 'Nav' + }; + }, + + getInitialState: function () { + return { + navExpanded: this.props.defaultNavExpanded + }; + }, + + shouldComponentUpdate: function() { + // Defer any updates to this component during the `onSelect` handler. + return !this._isChanging; + }, + + handleToggle: function () { + if (this.props.onToggle) { + this._isChanging = true; + this.props.onToggle(); + this._isChanging = false; + } + + this.setState({ + navExpanded: !this.state.navExpanded + }); + }, + + isNavExpanded: function () { + return this.props.navExpanded != null ? this.props.navExpanded : this.state.navExpanded; + }, + + render: function () { + var classes = this.getBsClassSet(); + var ComponentClass = this.props.componentClass; + + classes['navbar-fixed-top'] = this.props.fixedTop; + classes['navbar-fixed-bottom'] = this.props.fixedBottom; + classes['navbar-static-top'] = this.props.staticTop; + classes['navbar-inverse'] = this.props.inverse; + + return ( + React.createElement(ComponentClass, React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + React.createElement("div", {className: this.props.fluid ? 'container-fluid' : 'container'}, + (this.props.brand || this.props.toggleButton || this.props.toggleNavKey) ? this.renderHeader() : null, + ValidComponentChildren.map(this.props.children, this.renderChild) + ) + ) + ); + }, + + renderChild: function (child, index) { + return cloneWithProps(child, { + navbar: true, + collapsable: this.props.toggleNavKey != null && this.props.toggleNavKey === child.props.eventKey, + expanded: this.props.toggleNavKey != null && this.props.toggleNavKey === child.props.eventKey && this.isNavExpanded(), + key: child.key ? child.key : index, + ref: child.ref + }); + }, + + renderHeader: function () { + var brand; + + if (this.props.brand) { + brand = React.isValidElement(this.props.brand) ? + cloneWithProps(this.props.brand, { + className: 'navbar-brand' + }) : React.createElement("span", {className: "navbar-brand"}, this.props.brand); + } + + return ( + React.createElement("div", {className: "navbar-header"}, + brand, + (this.props.toggleButton || this.props.toggleNavKey != null) ? this.renderToggleButton() : null + ) + ); + }, + + renderToggleButton: function () { + var children; + + if (React.isValidElement(this.props.toggleButton)) { + return cloneWithProps(this.props.toggleButton, { + className: 'navbar-toggle', + onClick: createChainedFunction(this.handleToggle, this.props.toggleButton.props.onClick) + }); + } + + children = (this.props.toggleButton != null) ? + this.props.toggleButton : [ + React.createElement("span", {className: "sr-only", key: 0}, "Toggle navigation"), + React.createElement("span", {className: "icon-bar", key: 1}), + React.createElement("span", {className: "icon-bar", key: 2}), + React.createElement("span", {className: "icon-bar", key: 3}) + ]; + + return ( + React.createElement("button", {className: "navbar-toggle", type: "button", onClick: this.handleToggle}, + children + ) + ); + } +}); + +module.exports = Navbar; + +}); + +define('NavItem',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + +var NavItem = React.createClass({displayName: "NavItem", + mixins: [BootstrapMixin], + + propTypes: { + onSelect: React.PropTypes.func, + active: React.PropTypes.bool, + disabled: React.PropTypes.bool, + href: React.PropTypes.string, + title: React.PropTypes.string, + eventKey: React.PropTypes.any, + target: React.PropTypes.string + }, + + getDefaultProps: function () { + return { + href: '#' + }; + }, + + render: function () { + var $__0= + + + + + + + this.props,disabled=$__0.disabled,active=$__0.active,href=$__0.href,title=$__0.title,target=$__0.target,children=$__0.children,props=(function(source, exclusion) {var rest = {};var hasOwn = Object.prototype.hasOwnProperty;if (source == null) {throw new TypeError();}for (var key in source) {if (hasOwn.call(source, key) && !hasOwn.call(exclusion, key)) {rest[key] = source[key];}}return rest;})($__0,{disabled:1,active:1,href:1,title:1,target:1,children:1}), + classes = { + 'active': active, + 'disabled': disabled + }; + + return ( + React.createElement("li", React.__spread({}, props, {className: joinClasses(props.className, classSet(classes))}), + React.createElement("a", { + href: href, + title: title, + target: target, + onClick: this.handleClick, + ref: "anchor"}, + children + ) + ) + ); + }, + + handleClick: function (e) { + if (this.props.onSelect) { + e.preventDefault(); + + if (!this.props.disabled) { + this.props.onSelect(this.props.eventKey, this.props.href, this.props.target); + } + } + } +}); + +module.exports = NavItem; +}); + +define('utils/CustomPropTypes',['require','exports','module','react'],function (require, exports, module) {var React = require('react'); + +var ANONYMOUS = '<>'; + +var CustomPropTypes = { + /** + * Checks whether a prop provides a DOM element + * + * The element can be provided in two forms: + * - Directly passed + * - Or passed an object which has a `getDOMNode` method which will return the required DOM element + * + * @param props + * @param propName + * @param componentName + * @returns {Error|undefined} + */ + mountable: createMountableChecker() +}; + +/** + * Create chain-able isRequired validator + * + * Largely copied directly from: + * https://github.com/facebook/react/blob/0.11-stable/src/core/ReactPropTypes.js#L94 + */ +function createChainableTypeChecker(validate) { + function checkType(isRequired, props, propName, componentName) { + componentName = componentName || ANONYMOUS; + if (props[propName] == null) { + if (isRequired) { + return new Error( + 'Required prop `' + propName + '` was not specified in ' + + '`' + componentName + '`.' + ); + } + } else { + return validate(props, propName, componentName); + } + } + + var chainedCheckType = checkType.bind(null, false); + chainedCheckType.isRequired = checkType.bind(null, true); + + return chainedCheckType; +} + +function createMountableChecker() { + function validate(props, propName, componentName) { + if (typeof props[propName] !== 'object' || + typeof props[propName].getDOMNode !== 'function' && props[propName].nodeType !== 1) { + return new Error( + 'Invalid prop `' + propName + '` supplied to ' + + '`' + componentName + '`, expected a DOM element or an object that has a `getDOMNode` method' + ); + } + } + + return createChainableTypeChecker(validate); +} + +module.exports = CustomPropTypes; +}); + +define('OverlayMixin',['require','exports','module','react','./utils/CustomPropTypes'],function (require, exports, module) {var React = require('react'); +var CustomPropTypes = require('./utils/CustomPropTypes'); + +module.exports = { + propTypes: { + container: CustomPropTypes.mountable + }, + + getDefaultProps: function () { + return { + container: { + // Provide `getDOMNode` fn mocking a React component API. The `document.body` + // reference needs to be contained within this function so that it is not accessed + // in environments where it would not be defined, e.g. nodejs. Equally this is needed + // before the body is defined where `document.body === null`, this ensures + // `document.body` is only accessed after componentDidMount. + getDOMNode: function getDOMNode() { + return document.body; + } + } + }; + }, + + componentWillUnmount: function () { + this._unrenderOverlay(); + if (this._overlayTarget) { + this.getContainerDOMNode() + .removeChild(this._overlayTarget); + this._overlayTarget = null; + } + }, + + componentDidUpdate: function () { + this._renderOverlay(); + }, + + componentDidMount: function () { + this._renderOverlay(); + }, + + _mountOverlayTarget: function () { + this._overlayTarget = document.createElement('div'); + this.getContainerDOMNode() + .appendChild(this._overlayTarget); + }, + + _renderOverlay: function () { + if (!this._overlayTarget) { + this._mountOverlayTarget(); + } + + // Save reference to help testing + this._overlayInstance = React.render(this.renderOverlay(), this._overlayTarget); + }, + + _unrenderOverlay: function () { + React.unmountComponentAtNode(this._overlayTarget); + this._overlayInstance = null; + }, + + getOverlayDOMNode: function () { + if (!this.isMounted()) { + throw new Error('getOverlayDOMNode(): A component must be mounted to have a DOM node.'); + } + + return this._overlayInstance.getDOMNode(); + }, + + getContainerDOMNode: function () { + return this.props.container.getDOMNode ? + this.props.container.getDOMNode() : this.props.container; + } +}; + +}); + +define('ModalTrigger',['require','exports','module','react','./OverlayMixin','./utils/cloneWithProps','./utils/createChainedFunction'],function (require, exports, module) {var React = require('react'); +var OverlayMixin = require('./OverlayMixin'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var createChainedFunction = require('./utils/createChainedFunction'); + +var ModalTrigger = React.createClass({displayName: "ModalTrigger", + mixins: [OverlayMixin], + + propTypes: { + modal: React.PropTypes.node.isRequired + }, + + getInitialState: function () { + return { + isOverlayShown: false + }; + }, + + show: function () { + this.setState({ + isOverlayShown: true + }); + }, + + hide: function () { + this.setState({ + isOverlayShown: false + }); + }, + + toggle: function () { + this.setState({ + isOverlayShown: !this.state.isOverlayShown + }); + }, + + renderOverlay: function () { + if (!this.state.isOverlayShown) { + return React.createElement("span", null); + } + + return cloneWithProps( + this.props.modal, + { + onRequestHide: this.hide + } + ); + }, + + render: function () { + var child = React.Children.only(this.props.children); + return cloneWithProps( + child, + { + onClick: createChainedFunction(child.props.onClick, this.toggle) + } + ); + } +}); + +module.exports = ModalTrigger; +}); + +define('OverlayTrigger',['require','exports','module','react','./OverlayMixin','./utils/domUtils','./utils/cloneWithProps','./utils/createChainedFunction','./utils/Object.assign'],function (require, exports, module) {var React = require('react'); +var OverlayMixin = require('./OverlayMixin'); +var domUtils = require('./utils/domUtils'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var createChainedFunction = require('./utils/createChainedFunction'); +var assign = require('./utils/Object.assign'); + +/** + * Check if value one is inside or equal to the of value + * + * @param {string} one + * @param {string|array} of + * @returns {boolean} + */ +function isOneOf(one, of) { + if (Array.isArray(of)) { + return of.indexOf(one) >= 0; + } + return one === of; +} + +var OverlayTrigger = React.createClass({displayName: "OverlayTrigger", + mixins: [OverlayMixin], + + propTypes: { + trigger: React.PropTypes.oneOfType([ + React.PropTypes.oneOf(['manual', 'click', 'hover', 'focus']), + React.PropTypes.arrayOf(React.PropTypes.oneOf(['click', 'hover', 'focus'])) + ]), + placement: React.PropTypes.oneOf(['top','right', 'bottom', 'left']), + delay: React.PropTypes.number, + delayShow: React.PropTypes.number, + delayHide: React.PropTypes.number, + defaultOverlayShown: React.PropTypes.bool, + overlay: React.PropTypes.node.isRequired + }, + + getDefaultProps: function () { + return { + placement: 'right', + trigger: ['hover', 'focus'] + }; + }, + + getInitialState: function () { + return { + isOverlayShown: this.props.defaultOverlayShown == null ? + false : this.props.defaultOverlayShown, + overlayLeft: null, + overlayTop: null + }; + }, + + show: function () { + this.setState({ + isOverlayShown: true + }, function() { + this.updateOverlayPosition(); + }); + }, + + hide: function () { + this.setState({ + isOverlayShown: false + }); + }, + + toggle: function () { + this.state.isOverlayShown ? + this.hide() : this.show(); + }, + + renderOverlay: function () { + if (!this.state.isOverlayShown) { + return React.createElement("span", null); + } + + return cloneWithProps( + this.props.overlay, + { + onRequestHide: this.hide, + placement: this.props.placement, + positionLeft: this.state.overlayLeft, + positionTop: this.state.overlayTop + } + ); + }, + + render: function () { + if (this.props.trigger === 'manual') { + return React.Children.only(this.props.children); + } + + var props = {}; + + if (isOneOf('click', this.props.trigger)) { + props.onClick = createChainedFunction(this.toggle, this.props.onClick); + } + + if (isOneOf('hover', this.props.trigger)) { + props.onMouseOver = createChainedFunction(this.handleDelayedShow, this.props.onMouseOver); + props.onMouseOut = createChainedFunction(this.handleDelayedHide, this.props.onMouseOut); + } + + if (isOneOf('focus', this.props.trigger)) { + props.onFocus = createChainedFunction(this.handleDelayedShow, this.props.onFocus); + props.onBlur = createChainedFunction(this.handleDelayedHide, this.props.onBlur); + } + + return cloneWithProps( + React.Children.only(this.props.children), + props + ); + }, + + componentWillUnmount: function() { + clearTimeout(this._hoverDelay); + }, + + componentDidMount: function() { + this.updateOverlayPosition(); + }, + + handleDelayedShow: function () { + if (this._hoverDelay != null) { + clearTimeout(this._hoverDelay); + this._hoverDelay = null; + return; + } + + var delay = this.props.delayShow != null ? + this.props.delayShow : this.props.delay; + + if (!delay) { + this.show(); + return; + } + + this._hoverDelay = setTimeout(function() { + this._hoverDelay = null; + this.show(); + }.bind(this), delay); + }, + + handleDelayedHide: function () { + if (this._hoverDelay != null) { + clearTimeout(this._hoverDelay); + this._hoverDelay = null; + return; + } + + var delay = this.props.delayHide != null ? + this.props.delayHide : this.props.delay; + + if (!delay) { + this.hide(); + return; + } + + this._hoverDelay = setTimeout(function() { + this._hoverDelay = null; + this.hide(); + }.bind(this), delay); + }, + + updateOverlayPosition: function () { + if (!this.isMounted()) { + return; + } + + var pos = this.calcOverlayPosition(); + + this.setState({ + overlayLeft: pos.left, + overlayTop: pos.top + }); + }, + + calcOverlayPosition: function () { + var childOffset = this.getPosition(); + + var overlayNode = this.getOverlayDOMNode(); + var overlayHeight = overlayNode.offsetHeight; + var overlayWidth = overlayNode.offsetWidth; + + switch (this.props.placement) { + case 'right': + return { + top: childOffset.top + childOffset.height / 2 - overlayHeight / 2, + left: childOffset.left + childOffset.width + }; + case 'left': + return { + top: childOffset.top + childOffset.height / 2 - overlayHeight / 2, + left: childOffset.left - overlayWidth + }; + case 'top': + return { + top: childOffset.top - overlayHeight, + left: childOffset.left + childOffset.width / 2 - overlayWidth / 2 + }; + case 'bottom': + return { + top: childOffset.top + childOffset.height, + left: childOffset.left + childOffset.width / 2 - overlayWidth / 2 + }; + default: + throw new Error('calcOverlayPosition(): No such placement of "' + this.props.placement + '" found.'); + } + }, + + getPosition: function () { + var node = this.getDOMNode(); + var container = this.getContainerDOMNode(); + + var offset = container.tagName == 'BODY' ? + domUtils.getOffset(node) : domUtils.getPosition(node, container); + + return assign({}, offset, { + height: node.offsetHeight, + width: node.offsetWidth + }); + } +}); + +module.exports = OverlayTrigger; +}); + +define('PageHeader',['require','exports','module','react','./utils/joinClasses'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); + +var PageHeader = React.createClass({displayName: "PageHeader", + + render: function () { + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, 'page-header')}), + React.createElement("h1", null, this.props.children) + ) + ); + } +}); + +module.exports = PageHeader; +}); + +define('Panel',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/cloneWithProps','./BootstrapMixin','./CollapsableMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var BootstrapMixin = require('./BootstrapMixin'); +var CollapsableMixin = require('./CollapsableMixin'); + +var Panel = React.createClass({displayName: "Panel", + mixins: [BootstrapMixin, CollapsableMixin], + + propTypes: { + onSelect: React.PropTypes.func, + header: React.PropTypes.node, + footer: React.PropTypes.node, + eventKey: React.PropTypes.any + }, + + getDefaultProps: function () { + return { + bsClass: 'panel', + bsStyle: 'default' + }; + }, + + handleSelect: function (e) { + if (this.props.onSelect) { + this._isChanging = true; + this.props.onSelect(this.props.eventKey); + this._isChanging = false; + } + + e.preventDefault(); + + this.setState({ + expanded: !this.state.expanded + }); + }, + + shouldComponentUpdate: function () { + return !this._isChanging; + }, + + getCollapsableDimensionValue: function () { + return this.refs.body.getDOMNode().offsetHeight; + }, + + getCollapsableDOMNode: function () { + if (!this.isMounted() || !this.refs || !this.refs.panel) { + return null; + } + + return this.refs.panel.getDOMNode(); + }, + + render: function () { + var classes = this.getBsClassSet(); + classes['panel'] = true; + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes)), + id: this.props.collapsable ? null : this.props.id, onSelect: null}), + this.renderHeading(), + this.props.collapsable ? this.renderCollapsableBody() : this.renderBody(), + this.renderFooter() + ) + ); + }, + + renderCollapsableBody: function () { + return ( + React.createElement("div", {className: classSet(this.getCollapsableClassSet('panel-collapse')), id: this.props.id, ref: "panel"}, + this.renderBody() + ) + ); + }, + + renderBody: function () { + return ( + React.createElement("div", {className: "panel-body", ref: "body"}, + this.props.children + ) + ); + }, + + renderHeading: function () { + var header = this.props.header; + + if (!header) { + return null; + } + + if (!React.isValidElement(header) || Array.isArray(header)) { + header = this.props.collapsable ? + this.renderCollapsableTitle(header) : header; + } else if (this.props.collapsable) { + header = cloneWithProps(header, { + className: 'panel-title', + children: this.renderAnchor(header.props.children) + }); + } else { + header = cloneWithProps(header, { + className: 'panel-title' + }); + } + + return ( + React.createElement("div", {className: "panel-heading"}, + header + ) + ); + }, + + renderAnchor: function (header) { + return ( + React.createElement("a", { + href: '#' + (this.props.id || ''), + className: this.isExpanded() ? null : 'collapsed', + onClick: this.handleSelect}, + header + ) + ); + }, + + renderCollapsableTitle: function (header) { + return ( + React.createElement("h4", {className: "panel-title"}, + this.renderAnchor(header) + ) + ); + }, + + renderFooter: function () { + if (!this.props.footer) { + return null; + } + + return ( + React.createElement("div", {className: "panel-footer"}, + this.props.footer + ) + ); + } +}); + +module.exports = Panel; +}); + +define('PageItem',['require','exports','module','react','./utils/joinClasses','./utils/classSet'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); + +var PageItem = React.createClass({displayName: "PageItem", + + propTypes: { + href: React.PropTypes.string, + target: React.PropTypes.string, + disabled: React.PropTypes.bool, + previous: React.PropTypes.bool, + next: React.PropTypes.bool, + onSelect: React.PropTypes.func, + eventKey: React.PropTypes.any + }, + + getDefaultProps: function () { + return { + href: '#' + }; + }, + + render: function () { + var classes = { + 'disabled': this.props.disabled, + 'previous': this.props.previous, + 'next': this.props.next + }; + + return ( + React.createElement("li", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, classSet(classes))}), + React.createElement("a", { + href: this.props.href, + title: this.props.title, + target: this.props.target, + onClick: this.handleSelect, + ref: "anchor"}, + this.props.children + ) + ) + ); + }, + + handleSelect: function (e) { + if (this.props.onSelect) { + e.preventDefault(); + + if (!this.props.disabled) { + this.props.onSelect(this.props.eventKey, this.props.href, this.props.target); + } + } + } +}); + +module.exports = PageItem; +}); + +define('Pager',['require','exports','module','react','./utils/joinClasses','./utils/cloneWithProps','./utils/ValidComponentChildren','./utils/createChainedFunction'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var createChainedFunction = require('./utils/createChainedFunction'); + +var Pager = React.createClass({displayName: "Pager", + + propTypes: { + onSelect: React.PropTypes.func + }, + + render: function () { + return ( + React.createElement("ul", React.__spread({}, + this.props, + {className: joinClasses(this.props.className, 'pager')}), + ValidComponentChildren.map(this.props.children, this.renderPageItem) + ) + ); + }, + + renderPageItem: function (child, index) { + return cloneWithProps( + child, + { + onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect), + ref: child.ref, + key: child.key ? child.key : index + } + ); + } +}); + +module.exports = Pager; +}); + +define('Popover',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + + +var Popover = React.createClass({displayName: "Popover", + mixins: [BootstrapMixin], + + propTypes: { + placement: React.PropTypes.oneOf(['top','right', 'bottom', 'left']), + positionLeft: React.PropTypes.number, + positionTop: React.PropTypes.number, + arrowOffsetLeft: React.PropTypes.number, + arrowOffsetTop: React.PropTypes.number, + title: React.PropTypes.node + }, + + getDefaultProps: function () { + return { + placement: 'right' + }; + }, + + render: function () { + var classes = {}; + classes['popover'] = true; + classes[this.props.placement] = true; + classes['in'] = this.props.positionLeft != null || this.props.positionTop != null; + + var style = {}; + style['left'] = this.props.positionLeft; + style['top'] = this.props.positionTop; + style['display'] = 'block'; + + var arrowStyle = {}; + arrowStyle['left'] = this.props.arrowOffsetLeft; + arrowStyle['top'] = this.props.arrowOffsetTop; + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes)), style: style, title: null}), + React.createElement("div", {className: "arrow", style: arrowStyle}), + this.props.title ? this.renderTitle() : null, + React.createElement("div", {className: "popover-content"}, + this.props.children + ) + ) + ); + }, + + renderTitle: function() { + return ( + React.createElement("h3", {className: "popover-title"}, this.props.title) + ); + } +}); + +module.exports = Popover; +}); + +define('ProgressBar',['require','exports','module','react','./utils/joinClasses','./Interpolate','./BootstrapMixin','./utils/classSet','./utils/cloneWithProps','./utils/ValidComponentChildren'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var Interpolate = require('./Interpolate'); +var BootstrapMixin = require('./BootstrapMixin'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); + + +var ProgressBar = React.createClass({displayName: "ProgressBar", + propTypes: { + min: React.PropTypes.number, + now: React.PropTypes.number, + max: React.PropTypes.number, + label: React.PropTypes.node, + srOnly: React.PropTypes.bool, + striped: React.PropTypes.bool, + active: React.PropTypes.bool + }, + + mixins: [BootstrapMixin], + + getDefaultProps: function () { + return { + bsClass: 'progress-bar', + min: 0, + max: 100 + }; + }, + + getPercentage: function (now, min, max) { + return Math.ceil((now - min) / (max - min) * 100); + }, + + render: function () { + var classes = { + progress: true + }; + + if (this.props.active) { + classes['progress-striped'] = true; + classes['active'] = true; + } else if (this.props.striped) { + classes['progress-striped'] = true; + } + + if (!ValidComponentChildren.hasValidComponent(this.props.children)) { + if (!this.props.isChild) { + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.renderProgressBar() + ) + ); + } else { + return ( + this.renderProgressBar() + ); + } + } else { + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + ValidComponentChildren.map(this.props.children, this.renderChildBar) + ) + ); + } + }, + + renderChildBar: function (child, index) { + return cloneWithProps(child, { + isChild: true, + key: child.key ? child.key : index, + ref: child.ref + }); + }, + + renderProgressBar: function () { + var percentage = this.getPercentage( + this.props.now, + this.props.min, + this.props.max + ); + + var label; + + if (typeof this.props.label === "string") { + label = this.renderLabel(percentage); + } else if (this.props.label) { + label = this.props.label; + } + + if (this.props.srOnly) { + label = this.renderScreenReaderOnlyLabel(label); + } + + var classes = this.getBsClassSet(); + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes)), role: "progressbar", + style: {width: percentage + '%'}, + "aria-valuenow": this.props.now, + "aria-valuemin": this.props.min, + "aria-valuemax": this.props.max}), + label + ) + ); + }, + + renderLabel: function (percentage) { + var InterpolateClass = this.props.interpolateClass || Interpolate; + + return ( + React.createElement(InterpolateClass, { + now: this.props.now, + min: this.props.min, + max: this.props.max, + percent: percentage, + bsStyle: this.props.bsStyle}, + this.props.label + ) + ); + }, + + renderScreenReaderOnlyLabel: function (label) { + return ( + React.createElement("span", {className: "sr-only"}, + label + ) + ); + } +}); + +module.exports = ProgressBar; + +}); + +define('Row',['require','exports','module','react','./utils/joinClasses'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); + +var Row = React.createClass({displayName: "Row", + propTypes: { + componentClass: React.PropTypes.node.isRequired + }, + + getDefaultProps: function () { + return { + componentClass: 'div' + }; + }, + + render: function () { + var ComponentClass = this.props.componentClass; + + return ( + React.createElement(ComponentClass, React.__spread({}, this.props, {className: joinClasses(this.props.className, 'row')}), + this.props.children + ) + ); + } +}); + +module.exports = Row; +}); + +define('SplitButton',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin','./DropdownStateMixin','./Button','./ButtonGroup','./DropdownMenu'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); +var DropdownStateMixin = require('./DropdownStateMixin'); +var Button = require('./Button'); +var ButtonGroup = require('./ButtonGroup'); +var DropdownMenu = require('./DropdownMenu'); + +var SplitButton = React.createClass({displayName: "SplitButton", + mixins: [BootstrapMixin, DropdownStateMixin], + + propTypes: { + pullRight: React.PropTypes.bool, + title: React.PropTypes.node, + href: React.PropTypes.string, + target: React.PropTypes.string, + dropdownTitle: React.PropTypes.node, + onClick: React.PropTypes.func, + onSelect: React.PropTypes.func, + disabled: React.PropTypes.bool + }, + + getDefaultProps: function () { + return { + dropdownTitle: 'Toggle dropdown' + }; + }, + + render: function () { + var groupClasses = { + 'open': this.state.open, + 'dropup': this.props.dropup + }; + + var button = ( + React.createElement(Button, React.__spread({}, + this.props, + {ref: "button", + onClick: this.handleButtonClick, + title: null, + id: null}), + this.props.title + ) + ); + + var dropdownButton = ( + React.createElement(Button, React.__spread({}, + this.props, + {ref: "dropdownButton", + className: joinClasses(this.props.className, 'dropdown-toggle'), + onClick: this.handleDropdownClick, + title: null, + href: null, + target: null, + id: null}), + React.createElement("span", {className: "sr-only"}, this.props.dropdownTitle), + React.createElement("span", {className: "caret"}) + ) + ); + + return ( + React.createElement(ButtonGroup, { + bsSize: this.props.bsSize, + className: classSet(groupClasses), + id: this.props.id}, + button, + dropdownButton, + React.createElement(DropdownMenu, { + ref: "menu", + onSelect: this.handleOptionSelect, + "aria-labelledby": this.props.id, + pullRight: this.props.pullRight}, + this.props.children + ) + ) + ); + }, + + handleButtonClick: function (e) { + if (this.state.open) { + this.setDropdownState(false); + } + + if (this.props.onClick) { + this.props.onClick(e, this.props.href, this.props.target); + } + }, + + handleDropdownClick: function (e) { + e.preventDefault(); + + this.setDropdownState(!this.state.open); + }, + + handleOptionSelect: function (key) { + if (this.props.onSelect) { + this.props.onSelect(key); + } + + this.setDropdownState(false); + } +}); + +module.exports = SplitButton; + +}); + +define('SubNav',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/cloneWithProps','./utils/ValidComponentChildren','./utils/createChainedFunction','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var createChainedFunction = require('./utils/createChainedFunction'); +var BootstrapMixin = require('./BootstrapMixin'); + + +var SubNav = React.createClass({displayName: "SubNav", + mixins: [BootstrapMixin], + + propTypes: { + onSelect: React.PropTypes.func, + active: React.PropTypes.bool, + disabled: React.PropTypes.bool, + href: React.PropTypes.string, + title: React.PropTypes.string, + text: React.PropTypes.node, + target: React.PropTypes.string + }, + + getDefaultProps: function () { + return { + bsClass: 'nav' + }; + }, + + handleClick: function (e) { + if (this.props.onSelect) { + e.preventDefault(); + + if (!this.props.disabled) { + this.props.onSelect(this.props.eventKey, this.props.href, this.props.target); + } + } + }, + + isActive: function () { + return this.isChildActive(this); + }, + + isChildActive: function (child) { + if (child.props.active) { + return true; + } + + if (this.props.activeKey != null && this.props.activeKey === child.props.eventKey) { + return true; + } + + if (this.props.activeHref != null && this.props.activeHref === child.props.href) { + return true; + } + + if (child.props.children) { + var isActive = false; + + ValidComponentChildren.forEach( + child.props.children, + function (child) { + if (this.isChildActive(child)) { + isActive = true; + } + }, + this + ); + + return isActive; + } + + return false; + }, + + getChildActiveProp: function (child) { + if (child.props.active) { + return true; + } + if (this.props.activeKey != null) { + if (child.props.eventKey == this.props.activeKey) { + return true; + } + } + if (this.props.activeHref != null) { + if (child.props.href === this.props.activeHref) { + return true; + } + } + + return child.props.active; + }, + + render: function () { + var classes = { + 'active': this.isActive(), + 'disabled': this.props.disabled + }; + + return ( + React.createElement("li", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + React.createElement("a", { + href: this.props.href, + title: this.props.title, + target: this.props.target, + onClick: this.handleClick, + ref: "anchor"}, + this.props.text + ), + React.createElement("ul", {className: "nav"}, + ValidComponentChildren.map(this.props.children, this.renderNavItem) + ) + ) + ); + }, + + renderNavItem: function (child, index) { + return cloneWithProps( + child, + { + active: this.getChildActiveProp(child), + onSelect: createChainedFunction(child.props.onSelect, this.props.onSelect), + ref: child.ref, + key: child.key ? child.key : index + } + ); + } +}); + +module.exports = SubNav; + +}); + +define('TabbedArea',['require','exports','module','react','./BootstrapMixin','./utils/cloneWithProps','./utils/ValidComponentChildren','./Nav','./NavItem'],function (require, exports, module) {var React = require('react'); +var BootstrapMixin = require('./BootstrapMixin'); +var cloneWithProps = require('./utils/cloneWithProps'); + +var ValidComponentChildren = require('./utils/ValidComponentChildren'); +var Nav = require('./Nav'); +var NavItem = require('./NavItem'); + +function getDefaultActiveKeyFromChildren(children) { + var defaultActiveKey; + + ValidComponentChildren.forEach(children, function(child) { + if (defaultActiveKey == null) { + defaultActiveKey = child.props.eventKey; + } + }); + + return defaultActiveKey; +} + +var TabbedArea = React.createClass({displayName: "TabbedArea", + mixins: [BootstrapMixin], + + propTypes: { + bsStyle: React.PropTypes.oneOf(['tabs','pills']), + animation: React.PropTypes.bool, + onSelect: React.PropTypes.func + }, + + getDefaultProps: function () { + return { + bsStyle: "tabs", + animation: true + }; + }, + + getInitialState: function () { + var defaultActiveKey = this.props.defaultActiveKey != null ? + this.props.defaultActiveKey : getDefaultActiveKeyFromChildren(this.props.children); + + // TODO: In __DEV__ mode warn via `console.warn` if no `defaultActiveKey` has + // been set by this point, invalid children or missing key properties are likely the cause. + + return { + activeKey: defaultActiveKey, + previousActiveKey: null + }; + }, + + componentWillReceiveProps: function (nextProps) { + if (nextProps.activeKey != null && nextProps.activeKey !== this.props.activeKey) { + this.setState({ + previousActiveKey: this.props.activeKey + }); + } + }, + + handlePaneAnimateOutEnd: function () { + this.setState({ + previousActiveKey: null + }); + }, + + render: function () { + var activeKey = + this.props.activeKey != null ? this.props.activeKey : this.state.activeKey; + + function renderTabIfSet(child) { + return child.props.tab != null ? this.renderTab(child) : null; + } + + var nav = ( + React.createElement(Nav, React.__spread({}, this.props, {activeKey: activeKey, onSelect: this.handleSelect, ref: "tabs"}), + ValidComponentChildren.map(this.props.children, renderTabIfSet, this) + ) + ); + + return ( + React.createElement("div", null, + nav, + React.createElement("div", {id: this.props.id, className: "tab-content", ref: "panes"}, + ValidComponentChildren.map(this.props.children, this.renderPane) + ) + ) + ); + }, + + getActiveKey: function () { + return this.props.activeKey != null ? this.props.activeKey : this.state.activeKey; + }, + + renderPane: function (child, index) { + var activeKey = this.getActiveKey(); + + return cloneWithProps( + child, + { + active: (child.props.eventKey === activeKey && + (this.state.previousActiveKey == null || !this.props.animation)), + ref: child.ref, + key: child.key ? child.key : index, + animation: this.props.animation, + onAnimateOutEnd: (this.state.previousActiveKey != null && + child.props.eventKey === this.state.previousActiveKey) ? this.handlePaneAnimateOutEnd: null + } + ); + }, + + renderTab: function (child) { + var key = child.props.eventKey; + return ( + React.createElement(NavItem, { + ref: 'tab' + key, + eventKey: key}, + child.props.tab + ) + ); + }, + + shouldComponentUpdate: function() { + // Defer any updates to this component during the `onSelect` handler. + return !this._isChanging; + }, + + handleSelect: function (key) { + if (this.props.onSelect) { + this._isChanging = true; + this.props.onSelect(key); + this._isChanging = false; + } else if (key !== this.getActiveKey()) { + this.setState({ + activeKey: key, + previousActiveKey: this.getActiveKey() + }); + } + } +}); + +module.exports = TabbedArea; +}); + +define('Table',['require','exports','module','react','./utils/joinClasses','./utils/classSet'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); + +var Table = React.createClass({displayName: "Table", + propTypes: { + striped: React.PropTypes.bool, + bordered: React.PropTypes.bool, + condensed: React.PropTypes.bool, + hover: React.PropTypes.bool, + responsive: React.PropTypes.bool + }, + + render: function () { + var classes = { + 'table': true, + 'table-striped': this.props.striped, + 'table-bordered': this.props.bordered, + 'table-condensed': this.props.condensed, + 'table-hover': this.props.hover + }; + var table = ( + React.createElement("table", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + + return this.props.responsive ? ( + React.createElement("div", {className: "table-responsive"}, + table + ) + ) : table; + } +}); + +module.exports = Table; +}); + +define('TabPane',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./utils/TransitionEvents'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var TransitionEvents = require('./utils/TransitionEvents'); + +var TabPane = React.createClass({displayName: "TabPane", + getDefaultProps: function () { + return { + animation: true + }; + }, + + getInitialState: function () { + return { + animateIn: false, + animateOut: false + }; + }, + + componentWillReceiveProps: function (nextProps) { + if (this.props.animation) { + if (!this.state.animateIn && nextProps.active && !this.props.active) { + this.setState({ + animateIn: true + }); + } else if (!this.state.animateOut && !nextProps.active && this.props.active) { + this.setState({ + animateOut: true + }); + } + } + }, + + componentDidUpdate: function () { + if (this.state.animateIn) { + setTimeout(this.startAnimateIn, 0); + } + if (this.state.animateOut) { + TransitionEvents.addEndEventListener( + this.getDOMNode(), + this.stopAnimateOut + ); + } + }, + + startAnimateIn: function () { + if (this.isMounted()) { + this.setState({ + animateIn: false + }); + } + }, + + stopAnimateOut: function () { + if (this.isMounted()) { + this.setState({ + animateOut: false + }); + + if (typeof this.props.onAnimateOutEnd === 'function') { + this.props.onAnimateOutEnd(); + } + } + }, + + render: function () { + var classes = { + 'tab-pane': true, + 'fade': true, + 'active': this.props.active || this.state.animateOut, + 'in': this.props.active && !this.state.animateIn + }; + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = TabPane; +}); + +define('Tooltip',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + + +var Tooltip = React.createClass({displayName: "Tooltip", + mixins: [BootstrapMixin], + + propTypes: { + placement: React.PropTypes.oneOf(['top','right', 'bottom', 'left']), + positionLeft: React.PropTypes.number, + positionTop: React.PropTypes.number, + arrowOffsetLeft: React.PropTypes.number, + arrowOffsetTop: React.PropTypes.number + }, + + getDefaultProps: function () { + return { + placement: 'right' + }; + }, + + render: function () { + var classes = {}; + classes['tooltip'] = true; + classes[this.props.placement] = true; + classes['in'] = this.props.positionLeft != null || this.props.positionTop != null; + + var style = {}; + style['left'] = this.props.positionLeft; + style['top'] = this.props.positionTop; + + var arrowStyle = {}; + arrowStyle['left'] = this.props.arrowOffsetLeft; + arrowStyle['top'] = this.props.arrowOffsetTop; + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes)), style: style}), + React.createElement("div", {className: "tooltip-arrow", style: arrowStyle}), + React.createElement("div", {className: "tooltip-inner"}, + this.props.children + ) + ) + ); + } +}); + +module.exports = Tooltip; +}); + +define('Well',['require','exports','module','react','./utils/joinClasses','./utils/classSet','./BootstrapMixin'],function (require, exports, module) {var React = require('react'); +var joinClasses = require('./utils/joinClasses'); +var classSet = require('./utils/classSet'); +var BootstrapMixin = require('./BootstrapMixin'); + +var Well = React.createClass({displayName: "Well", + mixins: [BootstrapMixin], + + getDefaultProps: function () { + return { + bsClass: 'well' + }; + }, + + render: function () { + var classes = this.getBsClassSet(); + + return ( + React.createElement("div", React.__spread({}, this.props, {className: joinClasses(this.props.className, classSet(classes))}), + this.props.children + ) + ); + } +}); + +module.exports = Well; +}); + +/*global define */ + +define('react-bootstrap',['require','./Accordion','./Affix','./AffixMixin','./Alert','./BootstrapMixin','./Badge','./Button','./ButtonGroup','./ButtonToolbar','./Carousel','./CarouselItem','./Col','./CollapsableMixin','./DropdownButton','./DropdownMenu','./DropdownStateMixin','./FadeMixin','./Glyphicon','./Grid','./Input','./Interpolate','./Jumbotron','./Label','./ListGroup','./ListGroupItem','./MenuItem','./Modal','./Nav','./Navbar','./NavItem','./ModalTrigger','./OverlayTrigger','./OverlayMixin','./PageHeader','./Panel','./PanelGroup','./PageItem','./Pager','./Popover','./ProgressBar','./Row','./SplitButton','./SubNav','./TabbedArea','./Table','./TabPane','./Tooltip','./Well'],function (require) { + + + return { + Accordion: require('./Accordion'), + Affix: require('./Affix'), + AffixMixin: require('./AffixMixin'), + Alert: require('./Alert'), + BootstrapMixin: require('./BootstrapMixin'), + Badge: require('./Badge'), + Button: require('./Button'), + ButtonGroup: require('./ButtonGroup'), + ButtonToolbar: require('./ButtonToolbar'), + Carousel: require('./Carousel'), + CarouselItem: require('./CarouselItem'), + Col: require('./Col'), + CollapsableMixin: require('./CollapsableMixin'), + DropdownButton: require('./DropdownButton'), + DropdownMenu: require('./DropdownMenu'), + DropdownStateMixin: require('./DropdownStateMixin'), + FadeMixin: require('./FadeMixin'), + Glyphicon: require('./Glyphicon'), + Grid: require('./Grid'), + Input: require('./Input'), + Interpolate: require('./Interpolate'), + Jumbotron: require('./Jumbotron'), + Label: require('./Label'), + ListGroup: require('./ListGroup'), + ListGroupItem: require('./ListGroupItem'), + MenuItem: require('./MenuItem'), + Modal: require('./Modal'), + Nav: require('./Nav'), + Navbar: require('./Navbar'), + NavItem: require('./NavItem'), + ModalTrigger: require('./ModalTrigger'), + OverlayTrigger: require('./OverlayTrigger'), + OverlayMixin: require('./OverlayMixin'), + PageHeader: require('./PageHeader'), + Panel: require('./Panel'), + PanelGroup: require('./PanelGroup'), + PageItem: require('./PageItem'), + Pager: require('./Pager'), + Popover: require('./Popover'), + ProgressBar: require('./ProgressBar'), + Row: require('./Row'), + SplitButton: require('./SplitButton'), + SubNav: require('./SubNav'), + TabbedArea: require('./TabbedArea'), + Table: require('./Table'), + TabPane: require('./TabPane'), + Tooltip: require('./Tooltip'), + Well: require('./Well') + }; +}); + + //Register in the values from the outer closure for common dependencies + //as local almond modules + define('react', function () { + return React; + }); + + //Use almond's special top-level, synchronous require to trigger factory + //functions, get the final module value, and export it as the public + //value. + return require('react-bootstrap'); +})); diff --git a/src/Stack/DocGenerator/src/js/react-jsx-transformer.js b/src/Stack/DocGenerator/src/js/react-jsx-transformer.js new file mode 100644 index 0000000..6bbe155 --- /dev/null +++ b/src/Stack/DocGenerator/src/js/react-jsx-transformer.js @@ -0,0 +1,15199 @@ +/** + * JSXTransformer v0.12.2 + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.JSXTransformer=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 1) { + source += ' (' + inlineScriptCount + ')'; + } + } else if (dummyAnchor) { + // Firefox has problems when the sourcemap source is a proper URL with a + // protocol and hostname, so use the pathname. We could use just the + // filename, but hopefully using the full path will prevent potential + // issues where the same filename exists in multiple directories. + dummyAnchor.href = url; + source = dummyAnchor.pathname.substr(1); + } + map.sources = [source]; + map.sourcesContent = [code]; + + return ( + transformed.code + + '\n//# sourceMappingURL=data:application/json;base64,' + + buffer.Buffer(JSON.stringify(map)).toString('base64') + ); +} + + +/** + * Appends a script element at the end of the with the content of code, + * after transforming it. + * + * @param {string} code The original source code + * @param {string?} url Where the code came from. null if inline + * @param {object?} options Options to pass to jstransform + * @internal + */ +function run(code, url, options) { + var scriptEl = document.createElement('script'); + scriptEl.text = transformCode(code, url, options); + headEl.appendChild(scriptEl); +} + +/** + * Load script from the provided url and pass the content to the callback. + * + * @param {string} url The location of the script src + * @param {function} callback Function to call with the content of url + * @internal + */ +function load(url, successCallback, errorCallback) { + var xhr; + xhr = window.ActiveXObject ? new window.ActiveXObject('Microsoft.XMLHTTP') + : new XMLHttpRequest(); + + // async, however scripts will be executed in the order they are in the + // DOM to mirror normal script loading. + xhr.open('GET', url, true); + if ('overrideMimeType' in xhr) { + xhr.overrideMimeType('text/plain'); + } + xhr.onreadystatechange = function() { + if (xhr.readyState === 4) { + if (xhr.status === 0 || xhr.status === 200) { + successCallback(xhr.responseText); + } else { + errorCallback(); + throw new Error("Could not load " + url); + } + } + }; + return xhr.send(null); +} + +/** + * Loop over provided script tags and get the content, via innerHTML if an + * inline script, or by using XHR. Transforms are applied if needed. The scripts + * are executed in the order they are found on the page. + * + * @param {array} scripts The + + + + + + From 68b66a11ed49b8554897bd0f399054c4b32e9e4d Mon Sep 17 00:00:00 2001 From: alexisjanvier Date: Wed, 30 Sep 2015 06:54:12 +0200 Subject: [PATCH 3/5] Update demo Stack --- examples/stack/composer.json | 8 ++- examples/stack/composer.lock | 117 ++++++++++++++++++++++++++++++++++- examples/stack/index.php | 13 ++-- makefile | 4 +- 4 files changed, 130 insertions(+), 12 deletions(-) diff --git a/examples/stack/composer.json b/examples/stack/composer.json index 720ecd8..4e2516b 100644 --- a/examples/stack/composer.json +++ b/examples/stack/composer.json @@ -9,10 +9,16 @@ "require": { "stack/builder": "^1.0", "stack/run": "^1.0", + "stack/url-map": "1.2.x-dev", "marmelab/microrest": "dev-stackphp", - "asm89/stack-cors": "dev-master" + "asm89/stack-cors": "dev-master", + "twig/twig": "~1.0" }, "scripts": { + "post-install-cmd": [ + "ln -s ../../vendor/marmelab/microrest/web/css css", + "ln -s ../../vendor/marmelab/microrest/web/js js" + ], "run": [ "echo 'Started web server on http://localhost:8888'", "php -S localhost:8888" diff --git a/examples/stack/composer.lock b/examples/stack/composer.lock index 9d4a41c..1e3af24 100644 --- a/examples/stack/composer.lock +++ b/examples/stack/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "4ba6c0aae562d6354fbe2c2d9b0a4da2", - "content-hash": "c6f9e945b18cc433df9795b56336d8fc", + "hash": "4f26e33efbe9608c3a065f1724fd6c9f", + "content-hash": "ad9d9aaaae37c5ceb219fc0364eda9ae", "packages": [ { "name": "alecsammon/php-raml-parser", @@ -694,7 +694,7 @@ }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/marmelab/microrest.php/zipball/ebeff83170d823df897e2e11562240c7f887bf02", + "url": "https://api.github.com/repos/marmelab/microrest.php/zipball/7e91a23b7a4ceb16530172b49179358bd47d779a", "reference": "080f8df637a4ff6fdd4728e3e30346d8f26c7af9", "shasum": "" }, @@ -2024,6 +2024,55 @@ ], "time": "2013-10-25 14:31:28" }, + { + "name": "stack/url-map", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/stackphp/url-map.git", + "reference": "0979bb2df3416ea65bcefe43bb251f53c5ca3559" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/stackphp/url-map/zipball/0979bb2df3416ea65bcefe43bb251f53c5ca3559", + "reference": "0979bb2df3416ea65bcefe43bb251f53c5ca3559", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/http-foundation": "~2.1", + "symfony/http-kernel": "~2.1" + }, + "require-dev": { + "phpunit/phpunit": "~3.7", + "silex/silex": "~1.0@dev", + "stack/builder": "~1.0@dev", + "stack/callable-http-kernel": "~1.0@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-0": { + "Stack\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Christoph Hochstrasser", + "email": "christoph.hochstrasser@gmail.com" + } + ], + "description": "URL Map middleware.", + "time": "2015-04-16 21:17:12" + }, { "name": "symfony/debug", "version": "v2.7.5", @@ -2389,12 +2438,74 @@ "description": "Symfony Yaml Component", "homepage": "https://symfony.com", "time": "2015-09-14 14:14:09" + }, + { + "name": "twig/twig", + "version": "v1.22.2", + "source": { + "type": "git", + "url": "https://github.com/twigphp/Twig.git", + "reference": "79249fc8c9ff62e41e217e0c630e2e00bcadda6a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/79249fc8c9ff62e41e217e0c630e2e00bcadda6a", + "reference": "79249fc8c9ff62e41e217e0c630e2e00bcadda6a", + "shasum": "" + }, + "require": { + "php": ">=5.2.7" + }, + "require-dev": { + "symfony/debug": "~2.7", + "symfony/phpunit-bridge": "~2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.22-dev" + } + }, + "autoload": { + "psr-0": { + "Twig_": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com", + "homepage": "http://fabien.potencier.org", + "role": "Lead Developer" + }, + { + "name": "Armin Ronacher", + "email": "armin.ronacher@active-4.com", + "role": "Project Founder" + }, + { + "name": "Twig Team", + "homepage": "http://twig.sensiolabs.org/contributors", + "role": "Contributors" + } + ], + "description": "Twig, the flexible, fast, and secure template language for PHP", + "homepage": "http://twig.sensiolabs.org", + "keywords": [ + "templating" + ], + "time": "2015-09-22 13:59:32" } ], "packages-dev": [], "aliases": [], "minimum-stability": "dev", "stability-flags": { + "stack/url-map": 20, "marmelab/microrest": 20, "asm89/stack-cors": 20 }, diff --git a/examples/stack/index.php b/examples/stack/index.php index 8586abe..6b2338e 100644 --- a/examples/stack/index.php +++ b/examples/stack/index.php @@ -4,6 +4,7 @@ use Asm89\Stack\Cors; use Marmelab\Microrest\Stack\RamlConfig\RamlConfig; use Marmelab\Microrest\Stack\RouteGenerator\RouteGenerator; +use Marmelab\Microrest\Stack\DocGenerator\DocGenerator; use Marmelab\Microrest\RouteBuilder; use Symfony\Component\HttpKernel\HttpKernelInterface; use Symfony\Component\HttpFoundation\Request; @@ -16,13 +17,8 @@ public function handle(Symfony\Component\HttpFoundation\Request $request, $type } } +$mainApp = new MainApp(); $stack = (new Stack\Builder()) - ->push(Cors::class, [ - 'allowedHeaders' => ['x-total-count'], - 'allowedMethods' => RouteBuilder::$validMethods, - 'allowedOrigins' => ['*'], - 'exposedHeaders' => true, - ]) ->push(RamlConfig::class, [ 'path' => __DIR__.'/api.raml', ]) @@ -31,8 +27,11 @@ public function handle(Symfony\Component\HttpFoundation\Request $request, $type 'driver' => 'pdo_sqlite', 'path' => __DIR__.'/app.db', ], + ]) + ->push('Stack\UrlMap', [ + "/doc" => new DocGenerator($mainApp) ]); -$app = $stack->resolve(new MainApp()); +$app = $stack->resolve($mainApp); Stack\run($app); diff --git a/makefile b/makefile index 419ac41..7daf542 100644 --- a/makefile +++ b/makefile @@ -4,12 +4,14 @@ install-demo: composer -d=examples/ng-admin install bower --config.cwd=./examples/ng-admin/web/admin install cp examples/ng-admin/app.db-dist examples/ng-admin/app.db + composer -d=examples/stack install + cp examples/ng-admin/app.db-dist examples/stack/app.db demo-ng-admin: composer -d=examples/ng-admin run demo-stack: - composer -d=examples/stack run + composer -d=examples/stack run install: composer install --dev --prefer-source From 041ee59becbdb701b56f9e500dd0cfca61cbebb0 Mon Sep 17 00:00:00 2001 From: alexisjanvier Date: Thu, 1 Oct 2015 06:42:54 +0200 Subject: [PATCH 4/5] Fix demo --- examples/stack/app.db.dist | Bin 0 -> 16384 bytes examples/stack/composer.json | 5 +++-- examples/stack/css/.dotforgit | 0 examples/stack/js/.dotforgit | 0 4 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 examples/stack/app.db.dist create mode 100644 examples/stack/css/.dotforgit create mode 100644 examples/stack/js/.dotforgit diff --git a/examples/stack/app.db.dist b/examples/stack/app.db.dist new file mode 100644 index 0000000000000000000000000000000000000000..e5bd0a1733ea8bdfe499b7a108b30e0e5077499b GIT binary patch literal 16384 zcmeI(!EVzq7zc2t%?J}}&85nz(>F~>3$*Gw7^hN^jR>lh4YCNa)08&eTB%K{#0XX5 zQi(fHz%%e5oF?%K@CMwmvjrGpJ8>EMTXh`U(P#U2`=a#VWq&LM9Vh8DlyslnW`@BY z6EVgdRZUfkVyTuw;_06piHNrM_xql^=e#RhcD-&acJpP1$#g1WnH8;hVYy=T z@+D_UCXasYr$K`xnp5Dt4jME}MJPpdq%!7wN9_$qC(D68r1g&usp6TTVcE8AELQWF zdPiA)DP1^AK6Lp(`nSEbnbD}zpJ)~(-A^Uicmv3N^5U03s}r?YT9%}?1a zdySu}cBN#p)ut4gq&#m|59XcXQ7WrQt+SL~j#6>H(wxpZDwx_|>#7K9p4+uNf(}|y z{SyDm_;+?p(lAO$!4U^f+2eTxV zI{!EL7p8tF5P$##AOHafKmY;|fB*y_009VGBZ0fd5;Gp%DHR_Nod4OOGe}!q{k_2x OF{Jjx25oM%AN&BW+|{N4 literal 0 HcmV?d00001 diff --git a/examples/stack/composer.json b/examples/stack/composer.json index 4e2516b..1b3fc36 100644 --- a/examples/stack/composer.json +++ b/examples/stack/composer.json @@ -16,8 +16,9 @@ }, "scripts": { "post-install-cmd": [ - "ln -s ../../vendor/marmelab/microrest/web/css css", - "ln -s ../../vendor/marmelab/microrest/web/js js" + "cd css && ln -s ../vendor/marmelab/microrest/web/css microrest", + "cd js && ln -s ../vendor/marmelab/microrest/web/js microrest", + "cp app.db.dist app.db" ], "run": [ "echo 'Started web server on http://localhost:8888'", diff --git a/examples/stack/css/.dotforgit b/examples/stack/css/.dotforgit new file mode 100644 index 0000000..e69de29 diff --git a/examples/stack/js/.dotforgit b/examples/stack/js/.dotforgit new file mode 100644 index 0000000..e69de29 From 2768bb3c41958520e0ac7cf33efc25a02800699d Mon Sep 17 00:00:00 2001 From: alexisjanvier Date: Thu, 1 Oct 2015 06:48:59 +0200 Subject: [PATCH 5/5] Set Cors mw --- examples/stack/index.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/examples/stack/index.php b/examples/stack/index.php index 6b2338e..7b5f0be 100644 --- a/examples/stack/index.php +++ b/examples/stack/index.php @@ -19,6 +19,12 @@ public function handle(Symfony\Component\HttpFoundation\Request $request, $type $mainApp = new MainApp(); $stack = (new Stack\Builder()) + ->push(Cors::class, [ + 'allowedHeaders' => ['x-total-count'], + 'allowedMethods' => RouteBuilder::$validMethods, + 'allowedOrigins' => ['*'], + 'exposedHeaders' => true, + ]) ->push(RamlConfig::class, [ 'path' => __DIR__.'/api.raml', ])