diff --git a/.gitignore b/.gitignore
index e2fc76ff..12437187 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,4 +6,5 @@ Thumbs.db
.cache
/temp
dist
+www/dist
Frappe Accounting*
\ No newline at end of file
diff --git a/www/dist/css/style.css b/www/dist/css/style.css
deleted file mode 100644
index ff12696c..00000000
--- a/www/dist/css/style.css
+++ /dev/null
@@ -1,7519 +0,0 @@
-@charset "UTF-8";
-/*!
- * Bootstrap v4.0.0 (https://getbootstrap.com)
- * Copyright 2011-2018 The Bootstrap Authors
- * Copyright 2011-2018 Twitter, Inc.
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
- */
-*, *::before, *::after {
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-html {
- font-family: sans-serif;
- line-height: 1.15;
- -webkit-text-size-adjust: 100%;
- -ms-text-size-adjust: 100%;
- -ms-overflow-style: scrollbar;
- -webkit-tap-highlight-color: transparent; }
-@-ms-viewport {
- width: device-width; }
-article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
- display: block; }
-body {
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #212529;
- text-align: left;
- background-color: #fff; }
-[tabindex="-1"]:focus {
- outline: 0 !important; }
-hr {
- -webkit-box-sizing: content-box;
- box-sizing: content-box;
- height: 0;
- overflow: visible; }
-h1, h2, h3, h4, h5, h6 {
- margin-top: 0;
- margin-bottom: 0.5rem; }
-p {
- margin-top: 0;
- margin-bottom: 1rem; }
-abbr[title], abbr[data-original-title] {
- text-decoration: underline;
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
- cursor: help;
- border-bottom: 0; }
-address {
- margin-bottom: 1rem;
- font-style: normal;
- line-height: inherit; }
-ol, ul, dl {
- margin-top: 0;
- margin-bottom: 1rem; }
-ol ol, ul ul, ol ul, ul ol {
- margin-bottom: 0; }
-dt {
- font-weight: 700; }
-dd {
- margin-bottom: .5rem;
- margin-left: 0; }
-blockquote {
- margin: 0 0 1rem; }
-dfn {
- font-style: italic; }
-b, strong {
- font-weight: bolder; }
-small {
- font-size: 80%; }
-sub, sup {
- position: relative;
- font-size: 75%;
- line-height: 0;
- vertical-align: baseline; }
-sub {
- bottom: -.25em; }
-sup {
- top: -.5em; }
-a {
- color: #007bff;
- text-decoration: none;
- background-color: transparent;
- -webkit-text-decoration-skip: objects; }
-a:hover {
- color: #0056b3;
- text-decoration: underline; }
-a:not([href]):not([tabindex]) {
- color: inherit;
- text-decoration: none; }
-a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
- color: inherit;
- text-decoration: none; }
-a:not([href]):not([tabindex]):focus {
- outline: 0; }
-pre, code, kbd, samp {
- font-family: monospace, monospace;
- font-size: 1em; }
-pre {
- margin-top: 0;
- margin-bottom: 1rem;
- overflow: auto;
- -ms-overflow-style: scrollbar; }
-figure {
- margin: 0 0 1rem; }
-img {
- vertical-align: middle;
- border-style: none; }
-svg:not(:root) {
- overflow: hidden; }
-table {
- border-collapse: collapse; }
-caption {
- padding-top: 0.75rem;
- padding-bottom: 0.75rem;
- color: #6c757d;
- text-align: left;
- caption-side: bottom; }
-th {
- text-align: inherit; }
-label {
- display: inline-block;
- margin-bottom: .5rem; }
-button {
- border-radius: 0; }
-button:focus {
- outline: 1px dotted;
- outline: 5px auto -webkit-focus-ring-color; }
-input, button, select, optgroup, textarea {
- margin: 0;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit; }
-button, input {
- overflow: visible; }
-button, select {
- text-transform: none; }
-button, html [type="button"], [type="reset"], [type="submit"] {
- -webkit-appearance: button; }
-button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {
- padding: 0;
- border-style: none; }
-input[type="radio"], input[type="checkbox"] {
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- padding: 0; }
-input[type="date"], input[type="time"], input[type="datetime-local"], input[type="month"] {
- -webkit-appearance: listbox; }
-textarea {
- overflow: auto;
- resize: vertical; }
-fieldset {
- min-width: 0;
- padding: 0;
- margin: 0;
- border: 0; }
-legend {
- display: block;
- width: 100%;
- max-width: 100%;
- padding: 0;
- margin-bottom: .5rem;
- font-size: 1.5rem;
- line-height: inherit;
- color: inherit;
- white-space: normal; }
-progress {
- vertical-align: baseline; }
-[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {
- height: auto; }
-[type="search"] {
- outline-offset: -2px;
- -webkit-appearance: none; }
-[type="search"]::-webkit-search-cancel-button, [type="search"]::-webkit-search-decoration {
- -webkit-appearance: none; }
-::-webkit-file-upload-button {
- font: inherit;
- -webkit-appearance: button; }
-output {
- display: inline-block; }
-summary {
- display: list-item;
- cursor: pointer; }
-template {
- display: none; }
-[hidden] {
- display: none !important; }
-h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6 {
- margin-bottom: 0.5rem;
- font-family: inherit;
- font-weight: 500;
- line-height: 1.2;
- color: inherit; }
-h1, .h1 {
- font-size: 2.5rem; }
-h2, .h2 {
- font-size: 2rem; }
-h3, .h3 {
- font-size: 1.75rem; }
-h4, .h4 {
- font-size: 1.5rem; }
-h5, .h5 {
- font-size: 1.25rem; }
-h6, .h6 {
- font-size: 1rem; }
-.lead {
- font-size: 1.25rem;
- font-weight: 300; }
-.display-1 {
- font-size: 6rem;
- font-weight: 300;
- line-height: 1.2; }
-.display-2 {
- font-size: 5.5rem;
- font-weight: 300;
- line-height: 1.2; }
-.display-3 {
- font-size: 4.5rem;
- font-weight: 300;
- line-height: 1.2; }
-.display-4 {
- font-size: 3.5rem;
- font-weight: 300;
- line-height: 1.2; }
-hr {
- margin-top: 1rem;
- margin-bottom: 1rem;
- border: 0;
- border-top: 1px solid rgba(0, 0, 0, 0.1); }
-small, .small {
- font-size: 80%;
- font-weight: 400; }
-mark, .mark {
- padding: 0.2em;
- background-color: #fcf8e3; }
-.list-unstyled {
- padding-left: 0;
- list-style: none; }
-.list-inline {
- padding-left: 0;
- list-style: none; }
-.list-inline-item {
- display: inline-block; }
-.list-inline-item:not(:last-child) {
- margin-right: 0.5rem; }
-.initialism {
- font-size: 90%;
- text-transform: uppercase; }
-.blockquote {
- margin-bottom: 1rem;
- font-size: 1.25rem; }
-.blockquote-footer {
- display: block;
- font-size: 80%;
- color: #6c757d; }
-.blockquote-footer::before {
- content: "\2014 \00A0"; }
-.img-fluid {
- max-width: 100%;
- height: auto; }
-.img-thumbnail {
- padding: 0.25rem;
- background-color: #fff;
- border: 1px solid #dee2e6;
- border-radius: 0.25rem;
- max-width: 100%;
- height: auto; }
-.figure {
- display: inline-block; }
-.figure-img {
- margin-bottom: 0.5rem;
- line-height: 1; }
-.figure-caption {
- font-size: 90%;
- color: #6c757d; }
-code, kbd, pre, samp {
- font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }
-code {
- font-size: 87.5%;
- color: #e83e8c;
- word-break: break-word; }
-a > code {
- color: inherit; }
-kbd {
- padding: 0.2rem 0.4rem;
- font-size: 87.5%;
- color: #fff;
- background-color: #212529;
- border-radius: 0.2rem; }
-kbd kbd {
- padding: 0;
- font-size: 100%;
- font-weight: 700; }
-pre {
- display: block;
- font-size: 87.5%;
- color: #212529; }
-pre code {
- font-size: inherit;
- color: inherit;
- word-break: normal; }
-.pre-scrollable {
- max-height: 340px;
- overflow-y: scroll; }
-.container {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto; }
-@media (min-width: 576px) {
- .container {
- max-width: 540px; } }
-@media (min-width: 768px) {
- .container {
- max-width: 720px; } }
-@media (min-width: 992px) {
- .container {
- max-width: 960px; } }
-@media (min-width: 1200px) {
- .container {
- max-width: 1140px; } }
-.container-fluid {
- width: 100%;
- padding-right: 15px;
- padding-left: 15px;
- margin-right: auto;
- margin-left: auto; }
-.row {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- margin-right: -15px;
- margin-left: -15px; }
-.no-gutters {
- margin-right: 0;
- margin-left: 0; }
-.no-gutters > .col, .no-gutters > [class*="col-"] {
- padding-right: 0;
- padding-left: 0; }
-.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, .col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, .col-sm-auto, .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, .col-md, .col-md-auto, .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, .col-lg, .col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, .col-xl-auto {
- position: relative;
- width: 100%;
- min-height: 1px;
- padding-right: 15px;
- padding-left: 15px; }
-.col {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%; }
-.col-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none; }
-.col-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333%;
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
-.col-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66667%;
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
-.col-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%; }
-.col-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333%;
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
-.col-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66667%;
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
-.col-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%; }
-.col-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333%;
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
-.col-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66667%;
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
-.col-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%; }
-.col-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333%;
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
-.col-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66667%;
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
-.col-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%; }
-.order-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1; }
-.order-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13; }
-.order-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0; }
-.order-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1; }
-.order-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2; }
-.order-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3; }
-.order-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4; }
-.order-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5; }
-.order-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6; }
-.order-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7; }
-.order-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8; }
-.order-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9; }
-.order-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10; }
-.order-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11; }
-.order-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12; }
-.offset-1 {
- margin-left: 8.33333%; }
-.offset-2 {
- margin-left: 16.66667%; }
-.offset-3 {
- margin-left: 25%; }
-.offset-4 {
- margin-left: 33.33333%; }
-.offset-5 {
- margin-left: 41.66667%; }
-.offset-6 {
- margin-left: 50%; }
-.offset-7 {
- margin-left: 58.33333%; }
-.offset-8 {
- margin-left: 66.66667%; }
-.offset-9 {
- margin-left: 75%; }
-.offset-10 {
- margin-left: 83.33333%; }
-.offset-11 {
- margin-left: 91.66667%; }
-@media (min-width: 576px) {
- .col-sm {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%; }
- .col-sm-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none; }
- .col-sm-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333%;
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .col-sm-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66667%;
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .col-sm-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%; }
- .col-sm-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333%;
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .col-sm-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66667%;
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .col-sm-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%; }
- .col-sm-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333%;
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .col-sm-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66667%;
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .col-sm-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%; }
- .col-sm-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333%;
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .col-sm-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66667%;
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .col-sm-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%; }
- .order-sm-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1; }
- .order-sm-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13; }
- .order-sm-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0; }
- .order-sm-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1; }
- .order-sm-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2; }
- .order-sm-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3; }
- .order-sm-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4; }
- .order-sm-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5; }
- .order-sm-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6; }
- .order-sm-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7; }
- .order-sm-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8; }
- .order-sm-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9; }
- .order-sm-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10; }
- .order-sm-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11; }
- .order-sm-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12; }
- .offset-sm-0 {
- margin-left: 0; }
- .offset-sm-1 {
- margin-left: 8.33333%; }
- .offset-sm-2 {
- margin-left: 16.66667%; }
- .offset-sm-3 {
- margin-left: 25%; }
- .offset-sm-4 {
- margin-left: 33.33333%; }
- .offset-sm-5 {
- margin-left: 41.66667%; }
- .offset-sm-6 {
- margin-left: 50%; }
- .offset-sm-7 {
- margin-left: 58.33333%; }
- .offset-sm-8 {
- margin-left: 66.66667%; }
- .offset-sm-9 {
- margin-left: 75%; }
- .offset-sm-10 {
- margin-left: 83.33333%; }
- .offset-sm-11 {
- margin-left: 91.66667%; } }
-@media (min-width: 768px) {
- .col-md {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%; }
- .col-md-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none; }
- .col-md-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333%;
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .col-md-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66667%;
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .col-md-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%; }
- .col-md-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333%;
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .col-md-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66667%;
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .col-md-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%; }
- .col-md-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333%;
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .col-md-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66667%;
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .col-md-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%; }
- .col-md-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333%;
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .col-md-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66667%;
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .col-md-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%; }
- .order-md-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1; }
- .order-md-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13; }
- .order-md-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0; }
- .order-md-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1; }
- .order-md-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2; }
- .order-md-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3; }
- .order-md-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4; }
- .order-md-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5; }
- .order-md-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6; }
- .order-md-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7; }
- .order-md-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8; }
- .order-md-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9; }
- .order-md-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10; }
- .order-md-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11; }
- .order-md-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12; }
- .offset-md-0 {
- margin-left: 0; }
- .offset-md-1 {
- margin-left: 8.33333%; }
- .offset-md-2 {
- margin-left: 16.66667%; }
- .offset-md-3 {
- margin-left: 25%; }
- .offset-md-4 {
- margin-left: 33.33333%; }
- .offset-md-5 {
- margin-left: 41.66667%; }
- .offset-md-6 {
- margin-left: 50%; }
- .offset-md-7 {
- margin-left: 58.33333%; }
- .offset-md-8 {
- margin-left: 66.66667%; }
- .offset-md-9 {
- margin-left: 75%; }
- .offset-md-10 {
- margin-left: 83.33333%; }
- .offset-md-11 {
- margin-left: 91.66667%; } }
-@media (min-width: 992px) {
- .col-lg {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%; }
- .col-lg-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none; }
- .col-lg-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333%;
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .col-lg-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66667%;
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .col-lg-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%; }
- .col-lg-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333%;
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .col-lg-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66667%;
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .col-lg-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%; }
- .col-lg-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333%;
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .col-lg-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66667%;
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .col-lg-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%; }
- .col-lg-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333%;
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .col-lg-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66667%;
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .col-lg-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%; }
- .order-lg-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1; }
- .order-lg-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13; }
- .order-lg-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0; }
- .order-lg-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1; }
- .order-lg-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2; }
- .order-lg-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3; }
- .order-lg-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4; }
- .order-lg-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5; }
- .order-lg-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6; }
- .order-lg-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7; }
- .order-lg-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8; }
- .order-lg-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9; }
- .order-lg-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10; }
- .order-lg-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11; }
- .order-lg-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12; }
- .offset-lg-0 {
- margin-left: 0; }
- .offset-lg-1 {
- margin-left: 8.33333%; }
- .offset-lg-2 {
- margin-left: 16.66667%; }
- .offset-lg-3 {
- margin-left: 25%; }
- .offset-lg-4 {
- margin-left: 33.33333%; }
- .offset-lg-5 {
- margin-left: 41.66667%; }
- .offset-lg-6 {
- margin-left: 50%; }
- .offset-lg-7 {
- margin-left: 58.33333%; }
- .offset-lg-8 {
- margin-left: 66.66667%; }
- .offset-lg-9 {
- margin-left: 75%; }
- .offset-lg-10 {
- margin-left: 83.33333%; }
- .offset-lg-11 {
- margin-left: 91.66667%; } }
-@media (min-width: 1200px) {
- .col-xl {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- max-width: 100%; }
- .col-xl-auto {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- width: auto;
- max-width: none; }
- .col-xl-1 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 8.33333%;
- flex: 0 0 8.33333%;
- max-width: 8.33333%; }
- .col-xl-2 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 16.66667%;
- flex: 0 0 16.66667%;
- max-width: 16.66667%; }
- .col-xl-3 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 25%;
- flex: 0 0 25%;
- max-width: 25%; }
- .col-xl-4 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 33.33333%;
- flex: 0 0 33.33333%;
- max-width: 33.33333%; }
- .col-xl-5 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 41.66667%;
- flex: 0 0 41.66667%;
- max-width: 41.66667%; }
- .col-xl-6 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 50%;
- flex: 0 0 50%;
- max-width: 50%; }
- .col-xl-7 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 58.33333%;
- flex: 0 0 58.33333%;
- max-width: 58.33333%; }
- .col-xl-8 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 66.66667%;
- flex: 0 0 66.66667%;
- max-width: 66.66667%; }
- .col-xl-9 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 75%;
- flex: 0 0 75%;
- max-width: 75%; }
- .col-xl-10 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 83.33333%;
- flex: 0 0 83.33333%;
- max-width: 83.33333%; }
- .col-xl-11 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 91.66667%;
- flex: 0 0 91.66667%;
- max-width: 91.66667%; }
- .col-xl-12 {
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
- max-width: 100%; }
- .order-xl-first {
- -webkit-box-ordinal-group: 0;
- -ms-flex-order: -1;
- order: -1; }
- .order-xl-last {
- -webkit-box-ordinal-group: 14;
- -ms-flex-order: 13;
- order: 13; }
- .order-xl-0 {
- -webkit-box-ordinal-group: 1;
- -ms-flex-order: 0;
- order: 0; }
- .order-xl-1 {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1; }
- .order-xl-2 {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2; }
- .order-xl-3 {
- -webkit-box-ordinal-group: 4;
- -ms-flex-order: 3;
- order: 3; }
- .order-xl-4 {
- -webkit-box-ordinal-group: 5;
- -ms-flex-order: 4;
- order: 4; }
- .order-xl-5 {
- -webkit-box-ordinal-group: 6;
- -ms-flex-order: 5;
- order: 5; }
- .order-xl-6 {
- -webkit-box-ordinal-group: 7;
- -ms-flex-order: 6;
- order: 6; }
- .order-xl-7 {
- -webkit-box-ordinal-group: 8;
- -ms-flex-order: 7;
- order: 7; }
- .order-xl-8 {
- -webkit-box-ordinal-group: 9;
- -ms-flex-order: 8;
- order: 8; }
- .order-xl-9 {
- -webkit-box-ordinal-group: 10;
- -ms-flex-order: 9;
- order: 9; }
- .order-xl-10 {
- -webkit-box-ordinal-group: 11;
- -ms-flex-order: 10;
- order: 10; }
- .order-xl-11 {
- -webkit-box-ordinal-group: 12;
- -ms-flex-order: 11;
- order: 11; }
- .order-xl-12 {
- -webkit-box-ordinal-group: 13;
- -ms-flex-order: 12;
- order: 12; }
- .offset-xl-0 {
- margin-left: 0; }
- .offset-xl-1 {
- margin-left: 8.33333%; }
- .offset-xl-2 {
- margin-left: 16.66667%; }
- .offset-xl-3 {
- margin-left: 25%; }
- .offset-xl-4 {
- margin-left: 33.33333%; }
- .offset-xl-5 {
- margin-left: 41.66667%; }
- .offset-xl-6 {
- margin-left: 50%; }
- .offset-xl-7 {
- margin-left: 58.33333%; }
- .offset-xl-8 {
- margin-left: 66.66667%; }
- .offset-xl-9 {
- margin-left: 75%; }
- .offset-xl-10 {
- margin-left: 83.33333%; }
- .offset-xl-11 {
- margin-left: 91.66667%; } }
-.table {
- width: 100%;
- max-width: 100%;
- margin-bottom: 1rem;
- background-color: transparent; }
-.table th, .table td {
- padding: 0.75rem;
- vertical-align: top;
- border-top: 1px solid #dee2e6; }
-.table thead th {
- vertical-align: bottom;
- border-bottom: 2px solid #dee2e6; }
-.table tbody + tbody {
- border-top: 2px solid #dee2e6; }
-.table .table {
- background-color: #fff; }
-.table-sm th, .table-sm td {
- padding: 0.3rem; }
-.table-bordered {
- border: 1px solid #dee2e6; }
-.table-bordered th, .table-bordered td {
- border: 1px solid #dee2e6; }
-.table-bordered thead th, .table-bordered thead td {
- border-bottom-width: 2px; }
-.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(0, 0, 0, 0.05); }
-.table-hover tbody tr:hover {
- background-color: rgba(0, 0, 0, 0.075); }
-.table-primary, .table-primary > th, .table-primary > td {
- background-color: #b8daff; }
-.table-hover .table-primary:hover {
- background-color: #9fcdff; }
-.table-hover .table-primary:hover > td, .table-hover .table-primary:hover > th {
- background-color: #9fcdff; }
-.table-secondary, .table-secondary > th, .table-secondary > td {
- background-color: #d6d8db; }
-.table-hover .table-secondary:hover {
- background-color: #c8cbcf; }
-.table-hover .table-secondary:hover > td, .table-hover .table-secondary:hover > th {
- background-color: #c8cbcf; }
-.table-success, .table-success > th, .table-success > td {
- background-color: #c3e6cb; }
-.table-hover .table-success:hover {
- background-color: #b1dfbb; }
-.table-hover .table-success:hover > td, .table-hover .table-success:hover > th {
- background-color: #b1dfbb; }
-.table-info, .table-info > th, .table-info > td {
- background-color: #bee5eb; }
-.table-hover .table-info:hover {
- background-color: #abdde5; }
-.table-hover .table-info:hover > td, .table-hover .table-info:hover > th {
- background-color: #abdde5; }
-.table-warning, .table-warning > th, .table-warning > td {
- background-color: #ffeeba; }
-.table-hover .table-warning:hover {
- background-color: #ffe8a1; }
-.table-hover .table-warning:hover > td, .table-hover .table-warning:hover > th {
- background-color: #ffe8a1; }
-.table-danger, .table-danger > th, .table-danger > td {
- background-color: #f5c6cb; }
-.table-hover .table-danger:hover {
- background-color: #f1b0b7; }
-.table-hover .table-danger:hover > td, .table-hover .table-danger:hover > th {
- background-color: #f1b0b7; }
-.table-light, .table-light > th, .table-light > td {
- background-color: #fdfdfe; }
-.table-hover .table-light:hover {
- background-color: #ececf6; }
-.table-hover .table-light:hover > td, .table-hover .table-light:hover > th {
- background-color: #ececf6; }
-.table-dark, .table-dark > th, .table-dark > td {
- background-color: #c6c8ca; }
-.table-hover .table-dark:hover {
- background-color: #b9bbbe; }
-.table-hover .table-dark:hover > td, .table-hover .table-dark:hover > th {
- background-color: #b9bbbe; }
-.table-active, .table-active > th, .table-active > td {
- background-color: rgba(0, 0, 0, 0.075); }
-.table-hover .table-active:hover {
- background-color: rgba(0, 0, 0, 0.075); }
-.table-hover .table-active:hover > td, .table-hover .table-active:hover > th {
- background-color: rgba(0, 0, 0, 0.075); }
-.table .thead-dark th {
- color: #fff;
- background-color: #212529;
- border-color: #32383e; }
-.table .thead-light th {
- color: #495057;
- background-color: #e9ecef;
- border-color: #dee2e6; }
-.table-dark {
- color: #fff;
- background-color: #212529; }
-.table-dark th, .table-dark td, .table-dark thead th {
- border-color: #32383e; }
-.table-dark.table-bordered {
- border: 0; }
-.table-dark.table-striped tbody tr:nth-of-type(odd) {
- background-color: rgba(255, 255, 255, 0.05); }
-.table-dark.table-hover tbody tr:hover {
- background-color: rgba(255, 255, 255, 0.075); }
-@media (max-width: 575.98px) {
- .table-responsive-sm {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar; }
- .table-responsive-sm > .table-bordered {
- border: 0; } }
-@media (max-width: 767.98px) {
- .table-responsive-md {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar; }
- .table-responsive-md > .table-bordered {
- border: 0; } }
-@media (max-width: 991.98px) {
- .table-responsive-lg {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar; }
- .table-responsive-lg > .table-bordered {
- border: 0; } }
-@media (max-width: 1199.98px) {
- .table-responsive-xl {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar; }
- .table-responsive-xl > .table-bordered {
- border: 0; } }
-.table-responsive {
- display: block;
- width: 100%;
- overflow-x: auto;
- -webkit-overflow-scrolling: touch;
- -ms-overflow-style: -ms-autohiding-scrollbar; }
-.table-responsive > .table-bordered {
- border: 0; }
-.form-control {
- display: block;
- width: 100%;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 1.5;
- color: #495057;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- -webkit-transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
-.form-control::-ms-expand {
- background-color: transparent;
- border: 0; }
-.form-control:focus {
- color: #495057;
- background-color: #fff;
- border-color: #80bdff;
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
-.form-control::-webkit-input-placeholder {
- color: #6c757d;
- opacity: 1; }
-.form-control:-ms-input-placeholder {
- color: #6c757d;
- opacity: 1; }
-.form-control::-ms-input-placeholder {
- color: #6c757d;
- opacity: 1; }
-.form-control::placeholder {
- color: #6c757d;
- opacity: 1; }
-.form-control:disabled, .form-control[readonly] {
- background-color: #e9ecef;
- opacity: 1; }
-select.form-control:not([size]):not([multiple]) {
- height: calc(2.25rem + 2px); }
-select.form-control:focus::-ms-value {
- color: #495057;
- background-color: #fff; }
-.form-control-file, .form-control-range {
- display: block;
- width: 100%; }
-.col-form-label {
- padding-top: calc(0.375rem + 1px);
- padding-bottom: calc(0.375rem + 1px);
- margin-bottom: 0;
- font-size: inherit;
- line-height: 1.5; }
-.col-form-label-lg {
- padding-top: calc(0.5rem + 1px);
- padding-bottom: calc(0.5rem + 1px);
- font-size: 1.25rem;
- line-height: 1.5; }
-.col-form-label-sm {
- padding-top: calc(0.25rem + 1px);
- padding-bottom: calc(0.25rem + 1px);
- font-size: 0.875rem;
- line-height: 1.5; }
-.form-control-plaintext {
- display: block;
- width: 100%;
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- margin-bottom: 0;
- line-height: 1.5;
- background-color: transparent;
- border: solid transparent;
- border-width: 1px 0; }
-.form-control-plaintext.form-control-sm, .input-group-sm > .form-control-plaintext.form-control, .input-group-sm > .input-group-prepend > .form-control-plaintext.input-group-text, .input-group-sm > .input-group-append > .form-control-plaintext.input-group-text, .input-group-sm > .input-group-prepend > .form-control-plaintext.btn, .input-group-sm > .input-group-append > .form-control-plaintext.btn, .form-control-plaintext.form-control-lg, .input-group-lg > .form-control-plaintext.form-control, .input-group-lg > .input-group-prepend > .form-control-plaintext.input-group-text, .input-group-lg > .input-group-append > .form-control-plaintext.input-group-text, .input-group-lg > .input-group-prepend > .form-control-plaintext.btn, .input-group-lg > .input-group-append > .form-control-plaintext.btn {
- padding-right: 0;
- padding-left: 0; }
-.form-control-sm, .input-group-sm > .form-control, .input-group-sm > .input-group-prepend > .input-group-text, .input-group-sm > .input-group-append > .input-group-text, .input-group-sm > .input-group-prepend > .btn, .input-group-sm > .input-group-append > .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem; }
-select.form-control-sm:not([size]):not([multiple]), .input-group-sm > select.form-control:not([size]):not([multiple]), .input-group-sm > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), .input-group-sm > .input-group-append > select.input-group-text:not([size]):not([multiple]), .input-group-sm > .input-group-prepend > select.btn:not([size]):not([multiple]), .input-group-sm > .input-group-append > select.btn:not([size]):not([multiple]) {
- height: calc(1.8125rem + 2px); }
-.form-control-lg, .input-group-lg > .form-control, .input-group-lg > .input-group-prepend > .input-group-text, .input-group-lg > .input-group-append > .input-group-text, .input-group-lg > .input-group-prepend > .btn, .input-group-lg > .input-group-append > .btn {
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem; }
-select.form-control-lg:not([size]):not([multiple]), .input-group-lg > select.form-control:not([size]):not([multiple]), .input-group-lg > .input-group-prepend > select.input-group-text:not([size]):not([multiple]), .input-group-lg > .input-group-append > select.input-group-text:not([size]):not([multiple]), .input-group-lg > .input-group-prepend > select.btn:not([size]):not([multiple]), .input-group-lg > .input-group-append > select.btn:not([size]):not([multiple]) {
- height: calc(2.875rem + 2px); }
-.form-group {
- margin-bottom: 1rem; }
-.form-text {
- display: block;
- margin-top: 0.25rem; }
-.form-row {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- margin-right: -5px;
- margin-left: -5px; }
-.form-row > .col, .form-row > [class*="col-"] {
- padding-right: 5px;
- padding-left: 5px; }
-.form-check {
- position: relative;
- display: block;
- padding-left: 1.25rem; }
-.form-check-input {
- position: absolute;
- margin-top: 0.3rem;
- margin-left: -1.25rem; }
-.form-check-input:disabled ~ .form-check-label {
- color: #6c757d; }
-.form-check-label {
- margin-bottom: 0; }
-.form-check-inline {
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- padding-left: 0;
- margin-right: 0.75rem; }
-.form-check-inline .form-check-input {
- position: static;
- margin-top: 0;
- margin-right: 0.3125rem;
- margin-left: 0; }
-.valid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #28a745; }
-.valid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1;
- color: #fff;
- background-color: rgba(40, 167, 69, 0.8);
- border-radius: .2rem; }
-.was-validated .form-control:valid, .form-control.is-valid, .was-validated
-.custom-select:valid, .custom-select.is-valid {
- border-color: #28a745; }
-.was-validated .form-control:valid:focus, .form-control.is-valid:focus, .was-validated
- .custom-select:valid:focus, .custom-select.is-valid:focus {
- border-color: #28a745;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
-.was-validated .form-control:valid ~ .valid-feedback, .was-validated .form-control:valid ~ .valid-tooltip, .form-control.is-valid ~ .valid-feedback, .form-control.is-valid ~ .valid-tooltip, .was-validated
- .custom-select:valid ~ .valid-feedback, .was-validated
- .custom-select:valid ~ .valid-tooltip, .custom-select.is-valid ~ .valid-feedback, .custom-select.is-valid ~ .valid-tooltip {
- display: block; }
-.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {
- color: #28a745; }
-.was-validated .form-check-input:valid ~ .valid-feedback, .was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, .form-check-input.is-valid ~ .valid-tooltip {
- display: block; }
-.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label {
- color: #28a745; }
-.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before {
- background-color: #71dd8a; }
-.was-validated .custom-control-input:valid ~ .valid-feedback, .was-validated .custom-control-input:valid ~ .valid-tooltip, .custom-control-input.is-valid ~ .valid-feedback, .custom-control-input.is-valid ~ .valid-tooltip {
- display: block; }
-.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before {
- background-color: #34ce57; }
-.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before {
- -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
- box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
-.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label {
- border-color: #28a745; }
-.was-validated .custom-file-input:valid ~ .custom-file-label::before, .custom-file-input.is-valid ~ .custom-file-label::before {
- border-color: inherit; }
-.was-validated .custom-file-input:valid ~ .valid-feedback, .was-validated .custom-file-input:valid ~ .valid-tooltip, .custom-file-input.is-valid ~ .valid-feedback, .custom-file-input.is-valid ~ .valid-tooltip {
- display: block; }
-.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.25); }
-.invalid-feedback {
- display: none;
- width: 100%;
- margin-top: 0.25rem;
- font-size: 80%;
- color: #dc3545; }
-.invalid-tooltip {
- position: absolute;
- top: 100%;
- z-index: 5;
- display: none;
- max-width: 100%;
- padding: .5rem;
- margin-top: .1rem;
- font-size: .875rem;
- line-height: 1;
- color: #fff;
- background-color: rgba(220, 53, 69, 0.8);
- border-radius: .2rem; }
-.was-validated .form-control:invalid, .form-control.is-invalid, .was-validated
-.custom-select:invalid, .custom-select.is-invalid {
- border-color: #dc3545; }
-.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus, .was-validated
- .custom-select:invalid:focus, .custom-select.is-invalid:focus {
- border-color: #dc3545;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
-.was-validated .form-control:invalid ~ .invalid-feedback, .was-validated .form-control:invalid ~ .invalid-tooltip, .form-control.is-invalid ~ .invalid-feedback, .form-control.is-invalid ~ .invalid-tooltip, .was-validated
- .custom-select:invalid ~ .invalid-feedback, .was-validated
- .custom-select:invalid ~ .invalid-tooltip, .custom-select.is-invalid ~ .invalid-feedback, .custom-select.is-invalid ~ .invalid-tooltip {
- display: block; }
-.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {
- color: #dc3545; }
-.was-validated .form-check-input:invalid ~ .invalid-feedback, .was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, .form-check-input.is-invalid ~ .invalid-tooltip {
- display: block; }
-.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label {
- color: #dc3545; }
-.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before {
- background-color: #efa2a9; }
-.was-validated .custom-control-input:invalid ~ .invalid-feedback, .was-validated .custom-control-input:invalid ~ .invalid-tooltip, .custom-control-input.is-invalid ~ .invalid-feedback, .custom-control-input.is-invalid ~ .invalid-tooltip {
- display: block; }
-.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before {
- background-color: #e4606d; }
-.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before {
- -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
- box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
-.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label {
- border-color: #dc3545; }
-.was-validated .custom-file-input:invalid ~ .custom-file-label::before, .custom-file-input.is-invalid ~ .custom-file-label::before {
- border-color: inherit; }
-.was-validated .custom-file-input:invalid ~ .invalid-feedback, .was-validated .custom-file-input:invalid ~ .invalid-tooltip, .custom-file-input.is-invalid ~ .invalid-feedback, .custom-file-input.is-invalid ~ .invalid-tooltip {
- display: block; }
-.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.25); }
-.form-inline {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center; }
-.form-inline .form-check {
- width: 100%; }
-@media (min-width: 576px) {
- .form-inline label {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- margin-bottom: 0; }
- .form-inline .form-group {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-flex: 0;
- -ms-flex: 0 0 auto;
- flex: 0 0 auto;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- margin-bottom: 0; }
- .form-inline .form-control {
- display: inline-block;
- width: auto;
- vertical-align: middle; }
- .form-inline .form-control-plaintext {
- display: inline-block; }
- .form-inline .input-group {
- width: auto; }
- .form-inline .form-check {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- width: auto;
- padding-left: 0; }
- .form-inline .form-check-input {
- position: relative;
- margin-top: 0;
- margin-right: 0.25rem;
- margin-left: 0; }
- .form-inline .custom-control {
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center; }
- .form-inline .custom-control-label {
- margin-bottom: 0; } }
-.btn {
- display: inline-block;
- font-weight: 400;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- border: 1px solid transparent;
- padding: 0.375rem 0.75rem;
- font-size: 1rem;
- line-height: 1.5;
- border-radius: 0.25rem;
- -webkit-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, -webkit-box-shadow 0.15s ease-in-out; }
-.btn:hover, .btn:focus {
- text-decoration: none; }
-.btn:focus, .btn.focus {
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
-.btn.disabled, .btn:disabled {
- opacity: 0.65; }
-.btn:not(:disabled):not(.disabled) {
- cursor: pointer; }
-.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active {
- background-image: none; }
-a.btn.disabled, fieldset:disabled a.btn {
- pointer-events: none; }
-.btn-primary {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
-.btn-primary:hover {
- color: #fff;
- background-color: #0069d9;
- border-color: #0062cc; }
-.btn-primary:focus, .btn-primary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
-.btn-primary.disabled, .btn-primary:disabled {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
-.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle {
- color: #fff;
- background-color: #0062cc;
- border-color: #005cbf; }
-.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
-.btn-secondary {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
-.btn-secondary:hover {
- color: #fff;
- background-color: #5a6268;
- border-color: #545b62; }
-.btn-secondary:focus, .btn-secondary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
-.btn-secondary.disabled, .btn-secondary:disabled {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
-.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, .show > .btn-secondary.dropdown-toggle {
- color: #fff;
- background-color: #545b62;
- border-color: #4e555b; }
-.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-secondary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
-.btn-success {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
-.btn-success:hover {
- color: #fff;
- background-color: #218838;
- border-color: #1e7e34; }
-.btn-success:focus, .btn-success.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
-.btn-success.disabled, .btn-success:disabled {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
-.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle {
- color: #fff;
- background-color: #1e7e34;
- border-color: #1c7430; }
-.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
-.btn-info {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
-.btn-info:hover {
- color: #fff;
- background-color: #138496;
- border-color: #117a8b; }
-.btn-info:focus, .btn-info.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
-.btn-info.disabled, .btn-info:disabled {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
-.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle {
- color: #fff;
- background-color: #117a8b;
- border-color: #10707f; }
-.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
-.btn-warning {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
-.btn-warning:hover {
- color: #212529;
- background-color: #e0a800;
- border-color: #d39e00; }
-.btn-warning:focus, .btn-warning.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
-.btn-warning.disabled, .btn-warning:disabled {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
-.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle {
- color: #212529;
- background-color: #d39e00;
- border-color: #c69500; }
-.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
-.btn-danger {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
-.btn-danger:hover {
- color: #fff;
- background-color: #c82333;
- border-color: #bd2130; }
-.btn-danger:focus, .btn-danger.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
-.btn-danger.disabled, .btn-danger:disabled {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
-.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle {
- color: #fff;
- background-color: #bd2130;
- border-color: #b21f2d; }
-.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
-.btn-light {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
-.btn-light:hover {
- color: #212529;
- background-color: #e2e6ea;
- border-color: #dae0e5; }
-.btn-light:focus, .btn-light.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
-.btn-light.disabled, .btn-light:disabled {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
-.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, .show > .btn-light.dropdown-toggle {
- color: #212529;
- background-color: #dae0e5;
- border-color: #d3d9df; }
-.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, .show > .btn-light.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
-.btn-dark {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
-.btn-dark:hover {
- color: #fff;
- background-color: #23272b;
- border-color: #1d2124; }
-.btn-dark:focus, .btn-dark.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
-.btn-dark.disabled, .btn-dark:disabled {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
-.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, .show > .btn-dark.dropdown-toggle {
- color: #fff;
- background-color: #1d2124;
- border-color: #171a1d; }
-.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-dark.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
-.btn-outline-primary {
- color: #007bff;
- background-color: transparent;
- background-image: none;
- border-color: #007bff; }
-.btn-outline-primary:hover {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
-.btn-outline-primary:focus, .btn-outline-primary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
-.btn-outline-primary.disabled, .btn-outline-primary:disabled {
- color: #007bff;
- background-color: transparent; }
-.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, .show > .btn-outline-primary.dropdown-toggle {
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
-.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-primary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.5); }
-.btn-outline-secondary {
- color: #6c757d;
- background-color: transparent;
- background-image: none;
- border-color: #6c757d; }
-.btn-outline-secondary:hover {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
-.btn-outline-secondary:focus, .btn-outline-secondary.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
-.btn-outline-secondary.disabled, .btn-outline-secondary:disabled {
- color: #6c757d;
- background-color: transparent; }
-.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, .show > .btn-outline-secondary.dropdown-toggle {
- color: #fff;
- background-color: #6c757d;
- border-color: #6c757d; }
-.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-secondary.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(108, 117, 125, 0.5); }
-.btn-outline-success {
- color: #28a745;
- background-color: transparent;
- background-image: none;
- border-color: #28a745; }
-.btn-outline-success:hover {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
-.btn-outline-success:focus, .btn-outline-success.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
-.btn-outline-success.disabled, .btn-outline-success:disabled {
- color: #28a745;
- background-color: transparent; }
-.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, .show > .btn-outline-success.dropdown-toggle {
- color: #fff;
- background-color: #28a745;
- border-color: #28a745; }
-.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-success.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(40, 167, 69, 0.5); }
-.btn-outline-info {
- color: #17a2b8;
- background-color: transparent;
- background-image: none;
- border-color: #17a2b8; }
-.btn-outline-info:hover {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
-.btn-outline-info:focus, .btn-outline-info.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
-.btn-outline-info.disabled, .btn-outline-info:disabled {
- color: #17a2b8;
- background-color: transparent; }
-.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, .show > .btn-outline-info.dropdown-toggle {
- color: #fff;
- background-color: #17a2b8;
- border-color: #17a2b8; }
-.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-info.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(23, 162, 184, 0.5); }
-.btn-outline-warning {
- color: #ffc107;
- background-color: transparent;
- background-image: none;
- border-color: #ffc107; }
-.btn-outline-warning:hover {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
-.btn-outline-warning:focus, .btn-outline-warning.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
-.btn-outline-warning.disabled, .btn-outline-warning:disabled {
- color: #ffc107;
- background-color: transparent; }
-.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, .show > .btn-outline-warning.dropdown-toggle {
- color: #212529;
- background-color: #ffc107;
- border-color: #ffc107; }
-.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-warning.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(255, 193, 7, 0.5); }
-.btn-outline-danger {
- color: #dc3545;
- background-color: transparent;
- background-image: none;
- border-color: #dc3545; }
-.btn-outline-danger:hover {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
-.btn-outline-danger:focus, .btn-outline-danger.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
-.btn-outline-danger.disabled, .btn-outline-danger:disabled {
- color: #dc3545;
- background-color: transparent; }
-.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, .show > .btn-outline-danger.dropdown-toggle {
- color: #fff;
- background-color: #dc3545;
- border-color: #dc3545; }
-.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-danger.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(220, 53, 69, 0.5); }
-.btn-outline-light {
- color: #f8f9fa;
- background-color: transparent;
- background-image: none;
- border-color: #f8f9fa; }
-.btn-outline-light:hover {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
-.btn-outline-light:focus, .btn-outline-light.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
-.btn-outline-light.disabled, .btn-outline-light:disabled {
- color: #f8f9fa;
- background-color: transparent; }
-.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, .show > .btn-outline-light.dropdown-toggle {
- color: #212529;
- background-color: #f8f9fa;
- border-color: #f8f9fa; }
-.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-light.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(248, 249, 250, 0.5); }
-.btn-outline-dark {
- color: #343a40;
- background-color: transparent;
- background-image: none;
- border-color: #343a40; }
-.btn-outline-dark:hover {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
-.btn-outline-dark:focus, .btn-outline-dark.focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
-.btn-outline-dark.disabled, .btn-outline-dark:disabled {
- color: #343a40;
- background-color: transparent; }
-.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, .show > .btn-outline-dark.dropdown-toggle {
- color: #fff;
- background-color: #343a40;
- border-color: #343a40; }
-.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, .show > .btn-outline-dark.dropdown-toggle:focus {
- -webkit-box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5);
- box-shadow: 0 0 0 0.2rem rgba(52, 58, 64, 0.5); }
-.btn-link {
- font-weight: 400;
- color: #007bff;
- background-color: transparent; }
-.btn-link:hover {
- color: #0056b3;
- text-decoration: underline;
- background-color: transparent;
- border-color: transparent; }
-.btn-link:focus, .btn-link.focus {
- text-decoration: underline;
- border-color: transparent;
- -webkit-box-shadow: none;
- box-shadow: none; }
-.btn-link:disabled, .btn-link.disabled {
- color: #6c757d; }
-.btn-lg, .btn-group-lg > .btn {
- padding: 0.5rem 1rem;
- font-size: 1.25rem;
- line-height: 1.5;
- border-radius: 0.3rem; }
-.btn-sm, .btn-group-sm > .btn {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5;
- border-radius: 0.2rem; }
-.btn-block {
- display: block;
- width: 100%; }
-.btn-block + .btn-block {
- margin-top: 0.5rem; }
-input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block {
- width: 100%; }
-.fade {
- opacity: 0;
- -webkit-transition: opacity 0.15s linear;
- transition: opacity 0.15s linear; }
-.fade.show {
- opacity: 1; }
-.collapse {
- display: none; }
-.collapse.show {
- display: block; }
-tr.collapse.show {
- display: table-row; }
-tbody.collapse.show {
- display: table-row-group; }
-.collapsing {
- position: relative;
- height: 0;
- overflow: hidden;
- -webkit-transition: height 0.35s ease;
- transition: height 0.35s ease; }
-.dropup, .dropdown {
- position: relative; }
-.dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid;
- border-right: 0.3em solid transparent;
- border-bottom: 0;
- border-left: 0.3em solid transparent; }
-.dropdown-toggle:empty::after {
- margin-left: 0; }
-.dropdown-menu {
- position: absolute;
- top: 100%;
- left: 0;
- z-index: 1000;
- display: none;
- float: left;
- min-width: 10rem;
- padding: 0.5rem 0;
- margin: 0.125rem 0 0;
- font-size: 1rem;
- color: #212529;
- text-align: left;
- list-style: none;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.15);
- border-radius: 0.25rem; }
-.dropup .dropdown-menu {
- margin-top: 0;
- margin-bottom: 0.125rem; }
-.dropup .dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0;
- border-right: 0.3em solid transparent;
- border-bottom: 0.3em solid;
- border-left: 0.3em solid transparent; }
-.dropup .dropdown-toggle:empty::after {
- margin-left: 0; }
-.dropright .dropdown-menu {
- margin-top: 0;
- margin-left: 0.125rem; }
-.dropright .dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid transparent;
- border-bottom: 0.3em solid transparent;
- border-left: 0.3em solid; }
-.dropright .dropdown-toggle:empty::after {
- margin-left: 0; }
-.dropright .dropdown-toggle::after {
- vertical-align: 0; }
-.dropleft .dropdown-menu {
- margin-top: 0;
- margin-right: 0.125rem; }
-.dropleft .dropdown-toggle::after {
- display: inline-block;
- width: 0;
- height: 0;
- margin-left: 0.255em;
- vertical-align: 0.255em;
- content: ""; }
-.dropleft .dropdown-toggle::after {
- display: none; }
-.dropleft .dropdown-toggle::before {
- display: inline-block;
- width: 0;
- height: 0;
- margin-right: 0.255em;
- vertical-align: 0.255em;
- content: "";
- border-top: 0.3em solid transparent;
- border-right: 0.3em solid;
- border-bottom: 0.3em solid transparent; }
-.dropleft .dropdown-toggle:empty::after {
- margin-left: 0; }
-.dropleft .dropdown-toggle::before {
- vertical-align: 0; }
-.dropdown-divider {
- height: 0;
- margin: 0.5rem 0;
- overflow: hidden;
- border-top: 1px solid #e9ecef; }
-.dropdown-item {
- display: block;
- width: 100%;
- padding: 0.25rem 1.5rem;
- clear: both;
- font-weight: 400;
- color: #212529;
- text-align: inherit;
- white-space: nowrap;
- background-color: transparent;
- border: 0; }
-.dropdown-item:hover, .dropdown-item:focus {
- color: #16181b;
- text-decoration: none;
- background-color: #f8f9fa; }
-.dropdown-item.active, .dropdown-item:active {
- color: #fff;
- text-decoration: none;
- background-color: #007bff; }
-.dropdown-item.disabled, .dropdown-item:disabled {
- color: #6c757d;
- background-color: transparent; }
-.dropdown-menu.show {
- display: block; }
-.dropdown-header {
- display: block;
- padding: 0.5rem 1.5rem;
- margin-bottom: 0;
- font-size: 0.875rem;
- color: #6c757d;
- white-space: nowrap; }
-.btn-group, .btn-group-vertical {
- position: relative;
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- vertical-align: middle; }
-.btn-group > .btn, .btn-group-vertical > .btn {
- position: relative;
- -webkit-box-flex: 0;
- -ms-flex: 0 1 auto;
- flex: 0 1 auto; }
-.btn-group > .btn:hover, .btn-group-vertical > .btn:hover {
- z-index: 1; }
-.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active {
- z-index: 1; }
-.btn-group .btn + .btn, .btn-group .btn + .btn-group, .btn-group .btn-group + .btn, .btn-group .btn-group + .btn-group, .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-left: -1px; }
-.btn-toolbar {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start; }
-.btn-toolbar .input-group {
- width: auto; }
-.btn-group > .btn:first-child {
- margin-left: 0; }
-.btn-group > .btn:not(:last-child):not(.dropdown-toggle), .btn-group > .btn-group:not(:last-child) > .btn {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0; }
-.btn-group > .btn:not(:first-child), .btn-group > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0; }
-.dropdown-toggle-split {
- padding-right: 0.5625rem;
- padding-left: 0.5625rem; }
-.dropdown-toggle-split::after {
- margin-left: 0; }
-.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split {
- padding-right: 0.375rem;
- padding-left: 0.375rem; }
-.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split {
- padding-right: 0.75rem;
- padding-left: 0.75rem; }
-.btn-group-vertical {
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-align: start;
- -ms-flex-align: start;
- align-items: flex-start;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center; }
-.btn-group-vertical .btn, .btn-group-vertical .btn-group {
- width: 100%; }
-.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(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn {
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0; }
-.btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) > .btn {
- border-top-left-radius: 0;
- border-top-right-radius: 0; }
-.btn-group-toggle > .btn, .btn-group-toggle > .btn-group > .btn {
- margin-bottom: 0; }
-.btn-group-toggle > .btn input[type="radio"], .btn-group-toggle > .btn input[type="checkbox"], .btn-group-toggle > .btn-group > .btn input[type="radio"], .btn-group-toggle > .btn-group > .btn input[type="checkbox"] {
- position: absolute;
- clip: rect(0, 0, 0, 0);
- pointer-events: none; }
-.input-group {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-align: stretch;
- -ms-flex-align: stretch;
- align-items: stretch;
- width: 100%; }
-.input-group > .form-control, .input-group > .custom-select, .input-group > .custom-file {
- position: relative;
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- width: 1%;
- margin-bottom: 0; }
-.input-group > .form-control:focus, .input-group > .custom-select:focus, .input-group > .custom-file:focus {
- z-index: 3; }
-.input-group > .form-control + .form-control, .input-group > .form-control + .custom-select, .input-group > .form-control + .custom-file, .input-group > .custom-select + .form-control, .input-group > .custom-select + .custom-select, .input-group > .custom-select + .custom-file, .input-group > .custom-file + .form-control, .input-group > .custom-file + .custom-select, .input-group > .custom-file + .custom-file {
- margin-left: -1px; }
-.input-group > .form-control:not(:last-child), .input-group > .custom-select:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0; }
-.input-group > .form-control:not(:first-child), .input-group > .custom-select:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0; }
-.input-group > .custom-file {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center; }
-.input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label::before {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0; }
-.input-group > .custom-file:not(:first-child) .custom-file-label, .input-group > .custom-file:not(:first-child) .custom-file-label::before {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0; }
-.input-group-prepend, .input-group-append {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex; }
-.input-group-prepend .btn, .input-group-append .btn {
- position: relative;
- z-index: 2; }
-.input-group-prepend .btn + .btn, .input-group-prepend .btn + .input-group-text, .input-group-prepend .input-group-text + .input-group-text, .input-group-prepend .input-group-text + .btn, .input-group-append .btn + .btn, .input-group-append .btn + .input-group-text, .input-group-append .input-group-text + .input-group-text, .input-group-append .input-group-text + .btn {
- margin-left: -1px; }
-.input-group-prepend {
- margin-right: -1px; }
-.input-group-append {
- margin-left: -1px; }
-.input-group-text {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- padding: 0.375rem 0.75rem;
- margin-bottom: 0;
- font-size: 1rem;
- font-weight: 400;
- line-height: 1.5;
- color: #495057;
- text-align: center;
- white-space: nowrap;
- background-color: #e9ecef;
- border: 1px solid #ced4da;
- border-radius: 0.25rem; }
-.input-group-text input[type="radio"], .input-group-text input[type="checkbox"] {
- margin-top: 0; }
-.input-group > .input-group-prepend > .btn, .input-group > .input-group-prepend > .input-group-text, .input-group > .input-group-append:not(:last-child) > .btn, .input-group > .input-group-append:not(:last-child) > .input-group-text, .input-group > .input-group-append:last-child > .btn:not(:last-child):not(.dropdown-toggle), .input-group > .input-group-append:last-child > .input-group-text:not(:last-child) {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0; }
-.input-group > .input-group-append > .btn, .input-group > .input-group-append > .input-group-text, .input-group > .input-group-prepend:not(:first-child) > .btn, .input-group > .input-group-prepend:not(:first-child) > .input-group-text, .input-group > .input-group-prepend:first-child > .btn:not(:first-child), .input-group > .input-group-prepend:first-child > .input-group-text:not(:first-child) {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0; }
-.custom-control {
- position: relative;
- display: block;
- min-height: 1.5rem;
- padding-left: 1.5rem; }
-.custom-control-inline {
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- margin-right: 1rem; }
-.custom-control-input {
- position: absolute;
- z-index: -1;
- opacity: 0; }
-.custom-control-input:checked ~ .custom-control-label::before {
- color: #fff;
- background-color: #007bff; }
-.custom-control-input:focus ~ .custom-control-label::before {
- -webkit-box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
-.custom-control-input:active ~ .custom-control-label::before {
- color: #fff;
- background-color: #b3d7ff; }
-.custom-control-input:disabled ~ .custom-control-label {
- color: #6c757d; }
-.custom-control-input:disabled ~ .custom-control-label::before {
- background-color: #e9ecef; }
-.custom-control-label {
- margin-bottom: 0; }
-.custom-control-label::before {
- position: absolute;
- top: 0.25rem;
- left: 0;
- display: block;
- width: 1rem;
- height: 1rem;
- pointer-events: none;
- content: "";
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- background-color: #dee2e6; }
-.custom-control-label::after {
- position: absolute;
- top: 0.25rem;
- left: 0;
- display: block;
- width: 1rem;
- height: 1rem;
- content: "";
- background-repeat: no-repeat;
- background-position: center center;
- background-size: 50% 50%; }
-.custom-checkbox .custom-control-label::before {
- border-radius: 0.25rem; }
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::before {
- background-color: #007bff; }
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3E%3C/svg%3E"); }
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before {
- background-color: #007bff; }
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3E%3Cpath stroke='%23fff' d='M0 2h4'/%3E%3C/svg%3E"); }
-.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5); }
-.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5); }
-.custom-radio .custom-control-label::before {
- border-radius: 50%; }
-.custom-radio .custom-control-input:checked ~ .custom-control-label::before {
- background-color: #007bff; }
-.custom-radio .custom-control-input:checked ~ .custom-control-label::after {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3E%3Ccircle r='3' fill='%23fff'/%3E%3C/svg%3E"); }
-.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before {
- background-color: rgba(0, 123, 255, 0.5); }
-.custom-select {
- display: inline-block;
- width: 100%;
- height: calc(2.25rem + 2px);
- padding: 0.375rem 1.75rem 0.375rem 0.75rem;
- line-height: 1.5;
- color: #495057;
- vertical-align: middle;
- background: #fff url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right 0.75rem center;
- background-size: 8px 10px;
- border: 1px solid #ced4da;
- border-radius: 0.25rem;
- -webkit-appearance: none;
- -moz-appearance: none;
- appearance: none; }
-.custom-select:focus {
- border-color: #80bdff;
- outline: 0;
- -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5);
- box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 5px rgba(128, 189, 255, 0.5); }
-.custom-select:focus::-ms-value {
- color: #495057;
- background-color: #fff; }
-.custom-select[multiple], .custom-select[size]:not([size="1"]) {
- height: auto;
- padding-right: 0.75rem;
- background-image: none; }
-.custom-select:disabled {
- color: #6c757d;
- background-color: #e9ecef; }
-.custom-select::-ms-expand {
- opacity: 0; }
-.custom-select-sm {
- height: calc(1.8125rem + 2px);
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- font-size: 75%; }
-.custom-select-lg {
- height: calc(2.875rem + 2px);
- padding-top: 0.375rem;
- padding-bottom: 0.375rem;
- font-size: 125%; }
-.custom-file {
- position: relative;
- display: inline-block;
- width: 100%;
- height: calc(2.25rem + 2px);
- margin-bottom: 0; }
-.custom-file-input {
- position: relative;
- z-index: 2;
- width: 100%;
- height: calc(2.25rem + 2px);
- margin: 0;
- opacity: 0; }
-.custom-file-input:focus ~ .custom-file-control {
- border-color: #80bdff;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
-.custom-file-input:focus ~ .custom-file-control::before {
- border-color: #80bdff; }
-.custom-file-input:lang(en) ~ .custom-file-label::after {
- content: "Browse"; }
-.custom-file-label {
- position: absolute;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1;
- height: calc(2.25rem + 2px);
- padding: 0.375rem 0.75rem;
- line-height: 1.5;
- color: #495057;
- background-color: #fff;
- border: 1px solid #ced4da;
- border-radius: 0.25rem; }
-.custom-file-label::after {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- z-index: 3;
- display: block;
- height: calc(calc(2.25rem + 2px) - 1px * 2);
- padding: 0.375rem 0.75rem;
- line-height: 1.5;
- color: #495057;
- content: "Browse";
- background-color: #e9ecef;
- border-left: 1px solid #ced4da;
- border-radius: 0 0.25rem 0.25rem 0; }
-.nav {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none; }
-.nav-link {
- display: block;
- padding: 0.5rem 1rem; }
-.nav-link:hover, .nav-link:focus {
- text-decoration: none; }
-.nav-link.disabled {
- color: #6c757d; }
-.nav-tabs {
- border-bottom: 1px solid #dee2e6; }
-.nav-tabs .nav-item {
- margin-bottom: -1px; }
-.nav-tabs .nav-link {
- border: 1px solid transparent;
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem; }
-.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {
- border-color: #e9ecef #e9ecef #dee2e6; }
-.nav-tabs .nav-link.disabled {
- color: #6c757d;
- background-color: transparent;
- border-color: transparent; }
-.nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link {
- color: #495057;
- background-color: #fff;
- border-color: #dee2e6 #dee2e6 #fff; }
-.nav-tabs .dropdown-menu {
- margin-top: -1px;
- border-top-left-radius: 0;
- border-top-right-radius: 0; }
-.nav-pills .nav-link {
- border-radius: 0.25rem; }
-.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
- color: #fff;
- background-color: #007bff; }
-.nav-fill .nav-item {
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- text-align: center; }
-.nav-justified .nav-item {
- -ms-flex-preferred-size: 0;
- flex-basis: 0;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- text-align: center; }
-.tab-content > .tab-pane {
- display: none; }
-.tab-content > .active {
- display: block; }
-.navbar {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
- padding: 0.5rem 1rem; }
-.navbar > .container, .navbar > .container-fluid {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between; }
-.navbar-brand {
- display: inline-block;
- padding-top: 0.3125rem;
- padding-bottom: 0.3125rem;
- margin-right: 1rem;
- font-size: 1.25rem;
- line-height: inherit;
- white-space: nowrap; }
-.navbar-brand:hover, .navbar-brand:focus {
- text-decoration: none; }
-.navbar-nav {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0;
- list-style: none; }
-.navbar-nav .nav-link {
- padding-right: 0;
- padding-left: 0; }
-.navbar-nav .dropdown-menu {
- position: static;
- float: none; }
-.navbar-text {
- display: inline-block;
- padding-top: 0.5rem;
- padding-bottom: 0.5rem; }
-.navbar-collapse {
- -ms-flex-preferred-size: 100%;
- flex-basis: 100%;
- -webkit-box-flex: 1;
- -ms-flex-positive: 1;
- flex-grow: 1;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center; }
-.navbar-toggler {
- padding: 0.25rem 0.75rem;
- font-size: 1.25rem;
- line-height: 1;
- background-color: transparent;
- border: 1px solid transparent;
- border-radius: 0.25rem; }
-.navbar-toggler:hover, .navbar-toggler:focus {
- text-decoration: none; }
-.navbar-toggler:not(:disabled):not(.disabled) {
- cursor: pointer; }
-.navbar-toggler-icon {
- display: inline-block;
- width: 1.5em;
- height: 1.5em;
- vertical-align: middle;
- content: "";
- background: no-repeat center center;
- background-size: 100% 100%; }
-@media (max-width: 575.98px) {
- .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid {
- padding-right: 0;
- padding-left: 0; } }
-@media (min-width: 576px) {
- .navbar-expand-sm {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start; }
- .navbar-expand-sm .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row; }
- .navbar-expand-sm .navbar-nav .dropdown-menu {
- position: absolute; }
- .navbar-expand-sm .navbar-nav .dropdown-menu-right {
- right: 0;
- left: auto; }
- .navbar-expand-sm .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem; }
- .navbar-expand-sm > .container, .navbar-expand-sm > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap; }
- .navbar-expand-sm .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto; }
- .navbar-expand-sm .navbar-toggler {
- display: none; }
- .navbar-expand-sm .dropup .dropdown-menu {
- top: auto;
- bottom: 100%; } }
-@media (max-width: 767.98px) {
- .navbar-expand-md > .container, .navbar-expand-md > .container-fluid {
- padding-right: 0;
- padding-left: 0; } }
-@media (min-width: 768px) {
- .navbar-expand-md {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start; }
- .navbar-expand-md .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row; }
- .navbar-expand-md .navbar-nav .dropdown-menu {
- position: absolute; }
- .navbar-expand-md .navbar-nav .dropdown-menu-right {
- right: 0;
- left: auto; }
- .navbar-expand-md .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem; }
- .navbar-expand-md > .container, .navbar-expand-md > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap; }
- .navbar-expand-md .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto; }
- .navbar-expand-md .navbar-toggler {
- display: none; }
- .navbar-expand-md .dropup .dropdown-menu {
- top: auto;
- bottom: 100%; } }
-@media (max-width: 991.98px) {
- .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid {
- padding-right: 0;
- padding-left: 0; } }
-@media (min-width: 992px) {
- .navbar-expand-lg {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start; }
- .navbar-expand-lg .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row; }
- .navbar-expand-lg .navbar-nav .dropdown-menu {
- position: absolute; }
- .navbar-expand-lg .navbar-nav .dropdown-menu-right {
- right: 0;
- left: auto; }
- .navbar-expand-lg .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem; }
- .navbar-expand-lg > .container, .navbar-expand-lg > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap; }
- .navbar-expand-lg .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto; }
- .navbar-expand-lg .navbar-toggler {
- display: none; }
- .navbar-expand-lg .dropup .dropdown-menu {
- top: auto;
- bottom: 100%; } }
-@media (max-width: 1199.98px) {
- .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid {
- padding-right: 0;
- padding-left: 0; } }
-@media (min-width: 1200px) {
- .navbar-expand-xl {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start; }
- .navbar-expand-xl .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row; }
- .navbar-expand-xl .navbar-nav .dropdown-menu {
- position: absolute; }
- .navbar-expand-xl .navbar-nav .dropdown-menu-right {
- right: 0;
- left: auto; }
- .navbar-expand-xl .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem; }
- .navbar-expand-xl > .container, .navbar-expand-xl > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap; }
- .navbar-expand-xl .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto; }
- .navbar-expand-xl .navbar-toggler {
- display: none; }
- .navbar-expand-xl .dropup .dropdown-menu {
- top: auto;
- bottom: 100%; } }
-.navbar-expand {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row nowrap;
- flex-flow: row nowrap;
- -webkit-box-pack: start;
- -ms-flex-pack: start;
- justify-content: flex-start; }
-.navbar-expand > .container, .navbar-expand > .container-fluid {
- padding-right: 0;
- padding-left: 0; }
-.navbar-expand .navbar-nav {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row; }
-.navbar-expand .navbar-nav .dropdown-menu {
- position: absolute; }
-.navbar-expand .navbar-nav .dropdown-menu-right {
- right: 0;
- left: auto; }
-.navbar-expand .navbar-nav .nav-link {
- padding-right: 0.5rem;
- padding-left: 0.5rem; }
-.navbar-expand > .container, .navbar-expand > .container-fluid {
- -ms-flex-wrap: nowrap;
- flex-wrap: nowrap; }
-.navbar-expand .navbar-collapse {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important;
- -ms-flex-preferred-size: auto;
- flex-basis: auto; }
-.navbar-expand .navbar-toggler {
- display: none; }
-.navbar-expand .dropup .dropdown-menu {
- top: auto;
- bottom: 100%; }
-.navbar-light .navbar-brand {
- color: rgba(0, 0, 0, 0.9); }
-.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {
- color: rgba(0, 0, 0, 0.9); }
-.navbar-light .navbar-nav .nav-link {
- color: rgba(0, 0, 0, 0.5); }
-.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {
- color: rgba(0, 0, 0, 0.7); }
-.navbar-light .navbar-nav .nav-link.disabled {
- color: rgba(0, 0, 0, 0.3); }
-.navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .active > .nav-link, .navbar-light .navbar-nav .nav-link.show, .navbar-light .navbar-nav .nav-link.active {
- color: rgba(0, 0, 0, 0.9); }
-.navbar-light .navbar-toggler {
- color: rgba(0, 0, 0, 0.5);
- border-color: rgba(0, 0, 0, 0.1); }
-.navbar-light .navbar-toggler-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); }
-.navbar-light .navbar-text {
- color: rgba(0, 0, 0, 0.5); }
-.navbar-light .navbar-text a {
- color: rgba(0, 0, 0, 0.9); }
-.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus {
- color: rgba(0, 0, 0, 0.9); }
-.navbar-dark .navbar-brand {
- color: #fff; }
-.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {
- color: #fff; }
-.navbar-dark .navbar-nav .nav-link {
- color: rgba(255, 255, 255, 0.5); }
-.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {
- color: rgba(255, 255, 255, 0.75); }
-.navbar-dark .navbar-nav .nav-link.disabled {
- color: rgba(255, 255, 255, 0.25); }
-.navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .active > .nav-link, .navbar-dark .navbar-nav .nav-link.show, .navbar-dark .navbar-nav .nav-link.active {
- color: #fff; }
-.navbar-dark .navbar-toggler {
- color: rgba(255, 255, 255, 0.5);
- border-color: rgba(255, 255, 255, 0.1); }
-.navbar-dark .navbar-toggler-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E"); }
-.navbar-dark .navbar-text {
- color: rgba(255, 255, 255, 0.5); }
-.navbar-dark .navbar-text a {
- color: #fff; }
-.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus {
- color: #fff; }
-.card {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- min-width: 0;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: border-box;
- border: 1px solid rgba(0, 0, 0, 0.125);
- border-radius: 0.25rem; }
-.card > hr {
- margin-right: 0;
- margin-left: 0; }
-.card > .list-group:first-child .list-group-item:first-child {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem; }
-.card > .list-group:last-child .list-group-item:last-child {
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem; }
-.card-body {
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- padding: 1.25rem; }
-.card-title {
- margin-bottom: 0.75rem; }
-.card-subtitle {
- margin-top: -0.375rem;
- margin-bottom: 0; }
-.card-text:last-child {
- margin-bottom: 0; }
-.card-link:hover {
- text-decoration: none; }
-.card-link + .card-link {
- margin-left: 1.25rem; }
-.card-header {
- padding: 0.75rem 1.25rem;
- margin-bottom: 0;
- background-color: rgba(0, 0, 0, 0.03);
- border-bottom: 1px solid rgba(0, 0, 0, 0.125); }
-.card-header:first-child {
- border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; }
-.card-header + .list-group .list-group-item:first-child {
- border-top: 0; }
-.card-footer {
- padding: 0.75rem 1.25rem;
- background-color: rgba(0, 0, 0, 0.03);
- border-top: 1px solid rgba(0, 0, 0, 0.125); }
-.card-footer:last-child {
- border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); }
-.card-header-tabs {
- margin-right: -0.625rem;
- margin-bottom: -0.75rem;
- margin-left: -0.625rem;
- border-bottom: 0; }
-.card-header-pills {
- margin-right: -0.625rem;
- margin-left: -0.625rem; }
-.card-img-overlay {
- position: absolute;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- padding: 1.25rem; }
-.card-img {
- width: 100%;
- border-radius: calc(0.25rem - 1px); }
-.card-img-top {
- width: 100%;
- border-top-left-radius: calc(0.25rem - 1px);
- border-top-right-radius: calc(0.25rem - 1px); }
-.card-img-bottom {
- width: 100%;
- border-bottom-right-radius: calc(0.25rem - 1px);
- border-bottom-left-radius: calc(0.25rem - 1px); }
-.card-deck {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column; }
-.card-deck .card {
- margin-bottom: 15px; }
-@media (min-width: 576px) {
- .card-deck {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap;
- margin-right: -15px;
- margin-left: -15px; }
- .card-deck .card {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-flex: 1;
- -ms-flex: 1 0 0%;
- flex: 1 0 0%;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- margin-right: 15px;
- margin-bottom: 0;
- margin-left: 15px; } }
-.card-group {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column; }
-.card-group > .card {
- margin-bottom: 15px; }
-@media (min-width: 576px) {
- .card-group {
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-flow: row wrap;
- flex-flow: row wrap; }
- .card-group > .card {
- -webkit-box-flex: 1;
- -ms-flex: 1 0 0%;
- flex: 1 0 0%;
- margin-bottom: 0; }
- .card-group > .card + .card {
- margin-left: 0;
- border-left: 0; }
- .card-group > .card:first-child {
- border-top-right-radius: 0;
- border-bottom-right-radius: 0; }
- .card-group > .card:first-child .card-img-top, .card-group > .card:first-child .card-header {
- border-top-right-radius: 0; }
- .card-group > .card:first-child .card-img-bottom, .card-group > .card:first-child .card-footer {
- border-bottom-right-radius: 0; }
- .card-group > .card:last-child {
- border-top-left-radius: 0;
- border-bottom-left-radius: 0; }
- .card-group > .card:last-child .card-img-top, .card-group > .card:last-child .card-header {
- border-top-left-radius: 0; }
- .card-group > .card:last-child .card-img-bottom, .card-group > .card:last-child .card-footer {
- border-bottom-left-radius: 0; }
- .card-group > .card:only-child {
- border-radius: 0.25rem; }
- .card-group > .card:only-child .card-img-top, .card-group > .card:only-child .card-header {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem; }
- .card-group > .card:only-child .card-img-bottom, .card-group > .card:only-child .card-footer {
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem; }
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) {
- border-radius: 0; }
- .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-top, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-img-bottom, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-header, .card-group > .card:not(:first-child):not(:last-child):not(:only-child) .card-footer {
- border-radius: 0; } }
-.card-columns .card {
- margin-bottom: 0.75rem; }
-@media (min-width: 576px) {
- .card-columns {
- -webkit-column-count: 3;
- column-count: 3;
- -webkit-column-gap: 1.25rem;
- column-gap: 1.25rem; }
- .card-columns .card {
- display: inline-block;
- width: 100%; } }
-.breadcrumb {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -ms-flex-wrap: wrap;
- flex-wrap: wrap;
- padding: 0.75rem 1rem;
- margin-bottom: 1rem;
- list-style: none;
- background-color: #e9ecef;
- border-radius: 0.25rem; }
-.breadcrumb-item + .breadcrumb-item::before {
- display: inline-block;
- padding-right: 0.5rem;
- padding-left: 0.5rem;
- color: #6c757d;
- content: "/"; }
-.breadcrumb-item + .breadcrumb-item:hover::before {
- text-decoration: underline; }
-.breadcrumb-item + .breadcrumb-item:hover::before {
- text-decoration: none; }
-.breadcrumb-item.active {
- color: #6c757d; }
-.pagination {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- padding-left: 0;
- list-style: none;
- border-radius: 0.25rem; }
-.page-link {
- position: relative;
- display: block;
- padding: 0.5rem 0.75rem;
- margin-left: -1px;
- line-height: 1.25;
- color: #007bff;
- background-color: #fff;
- border: 1px solid #dee2e6; }
-.page-link:hover {
- color: #0056b3;
- text-decoration: none;
- background-color: #e9ecef;
- border-color: #dee2e6; }
-.page-link:focus {
- z-index: 2;
- outline: 0;
- -webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
- box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25); }
-.page-link:not(:disabled):not(.disabled) {
- cursor: pointer; }
-.page-item:first-child .page-link {
- margin-left: 0;
- border-top-left-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem; }
-.page-item:last-child .page-link {
- border-top-right-radius: 0.25rem;
- border-bottom-right-radius: 0.25rem; }
-.page-item.active .page-link {
- z-index: 1;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
-.page-item.disabled .page-link {
- color: #6c757d;
- pointer-events: none;
- cursor: auto;
- background-color: #fff;
- border-color: #dee2e6; }
-.pagination-lg .page-link {
- padding: 0.75rem 1.5rem;
- font-size: 1.25rem;
- line-height: 1.5; }
-.pagination-lg .page-item:first-child .page-link {
- border-top-left-radius: 0.3rem;
- border-bottom-left-radius: 0.3rem; }
-.pagination-lg .page-item:last-child .page-link {
- border-top-right-radius: 0.3rem;
- border-bottom-right-radius: 0.3rem; }
-.pagination-sm .page-link {
- padding: 0.25rem 0.5rem;
- font-size: 0.875rem;
- line-height: 1.5; }
-.pagination-sm .page-item:first-child .page-link {
- border-top-left-radius: 0.2rem;
- border-bottom-left-radius: 0.2rem; }
-.pagination-sm .page-item:last-child .page-link {
- border-top-right-radius: 0.2rem;
- border-bottom-right-radius: 0.2rem; }
-.badge {
- display: inline-block;
- padding: 0.25em 0.4em;
- font-size: 75%;
- font-weight: 700;
- line-height: 1;
- text-align: center;
- white-space: nowrap;
- vertical-align: baseline;
- border-radius: 0.25rem; }
-.badge:empty {
- display: none; }
-.btn .badge {
- position: relative;
- top: -1px; }
-.badge-pill {
- padding-right: 0.6em;
- padding-left: 0.6em;
- border-radius: 10rem; }
-.badge-primary {
- color: #fff;
- background-color: #007bff; }
-.badge-primary[href]:hover, .badge-primary[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #0062cc; }
-.badge-secondary {
- color: #fff;
- background-color: #6c757d; }
-.badge-secondary[href]:hover, .badge-secondary[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #545b62; }
-.badge-success {
- color: #fff;
- background-color: #28a745; }
-.badge-success[href]:hover, .badge-success[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #1e7e34; }
-.badge-info {
- color: #fff;
- background-color: #17a2b8; }
-.badge-info[href]:hover, .badge-info[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #117a8b; }
-.badge-warning {
- color: #212529;
- background-color: #ffc107; }
-.badge-warning[href]:hover, .badge-warning[href]:focus {
- color: #212529;
- text-decoration: none;
- background-color: #d39e00; }
-.badge-danger {
- color: #fff;
- background-color: #dc3545; }
-.badge-danger[href]:hover, .badge-danger[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #bd2130; }
-.badge-light {
- color: #212529;
- background-color: #f8f9fa; }
-.badge-light[href]:hover, .badge-light[href]:focus {
- color: #212529;
- text-decoration: none;
- background-color: #dae0e5; }
-.badge-dark {
- color: #fff;
- background-color: #343a40; }
-.badge-dark[href]:hover, .badge-dark[href]:focus {
- color: #fff;
- text-decoration: none;
- background-color: #1d2124; }
-.jumbotron {
- padding: 2rem 1rem;
- margin-bottom: 2rem;
- background-color: #e9ecef;
- border-radius: 0.3rem; }
-@media (min-width: 576px) {
- .jumbotron {
- padding: 4rem 2rem; } }
-.jumbotron-fluid {
- padding-right: 0;
- padding-left: 0;
- border-radius: 0; }
-.alert {
- position: relative;
- padding: 0.75rem 1.25rem;
- margin-bottom: 1rem;
- border: 1px solid transparent;
- border-radius: 0.25rem; }
-.alert-heading {
- color: inherit; }
-.alert-link {
- font-weight: 700; }
-.alert-dismissible {
- padding-right: 4rem; }
-.alert-dismissible .close {
- position: absolute;
- top: 0;
- right: 0;
- padding: 0.75rem 1.25rem;
- color: inherit; }
-.alert-primary {
- color: #004085;
- background-color: #cce5ff;
- border-color: #b8daff; }
-.alert-primary hr {
- border-top-color: #9fcdff; }
-.alert-primary .alert-link {
- color: #002752; }
-.alert-secondary {
- color: #383d41;
- background-color: #e2e3e5;
- border-color: #d6d8db; }
-.alert-secondary hr {
- border-top-color: #c8cbcf; }
-.alert-secondary .alert-link {
- color: #202326; }
-.alert-success {
- color: #155724;
- background-color: #d4edda;
- border-color: #c3e6cb; }
-.alert-success hr {
- border-top-color: #b1dfbb; }
-.alert-success .alert-link {
- color: #0b2e13; }
-.alert-info {
- color: #0c5460;
- background-color: #d1ecf1;
- border-color: #bee5eb; }
-.alert-info hr {
- border-top-color: #abdde5; }
-.alert-info .alert-link {
- color: #062c33; }
-.alert-warning {
- color: #856404;
- background-color: #fff3cd;
- border-color: #ffeeba; }
-.alert-warning hr {
- border-top-color: #ffe8a1; }
-.alert-warning .alert-link {
- color: #533f03; }
-.alert-danger {
- color: #721c24;
- background-color: #f8d7da;
- border-color: #f5c6cb; }
-.alert-danger hr {
- border-top-color: #f1b0b7; }
-.alert-danger .alert-link {
- color: #491217; }
-.alert-light {
- color: #818182;
- background-color: #fefefe;
- border-color: #fdfdfe; }
-.alert-light hr {
- border-top-color: #ececf6; }
-.alert-light .alert-link {
- color: #686868; }
-.alert-dark {
- color: #1b1e21;
- background-color: #d6d8d9;
- border-color: #c6c8ca; }
-.alert-dark hr {
- border-top-color: #b9bbbe; }
-.alert-dark .alert-link {
- color: #040505; }
-@-webkit-keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0; }
- to {
- background-position: 0 0; } }
-@keyframes progress-bar-stripes {
- from {
- background-position: 1rem 0; }
- to {
- background-position: 0 0; } }
-.progress {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- height: 1rem;
- overflow: hidden;
- font-size: 0.75rem;
- background-color: #e9ecef;
- border-radius: 0.25rem; }
-.progress-bar {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- color: #fff;
- text-align: center;
- background-color: #007bff;
- -webkit-transition: width 0.6s ease;
- transition: width 0.6s ease; }
-.progress-bar-striped {
- background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
- background-size: 1rem 1rem; }
-.progress-bar-animated {
- -webkit-animation: progress-bar-stripes 1s linear infinite;
- animation: progress-bar-stripes 1s linear infinite; }
-.media {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: start;
- -ms-flex-align: start;
- align-items: flex-start; }
-.media-body {
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1; }
-.list-group {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- padding-left: 0;
- margin-bottom: 0; }
-.list-group-item-action {
- width: 100%;
- color: #495057;
- text-align: inherit; }
-.list-group-item-action:hover, .list-group-item-action:focus {
- color: #495057;
- text-decoration: none;
- background-color: #f8f9fa; }
-.list-group-item-action:active {
- color: #212529;
- background-color: #e9ecef; }
-.list-group-item {
- position: relative;
- display: block;
- padding: 0.75rem 1.25rem;
- margin-bottom: -1px;
- background-color: #fff;
- border: 1px solid rgba(0, 0, 0, 0.125); }
-.list-group-item:first-child {
- border-top-left-radius: 0.25rem;
- border-top-right-radius: 0.25rem; }
-.list-group-item:last-child {
- margin-bottom: 0;
- border-bottom-right-radius: 0.25rem;
- border-bottom-left-radius: 0.25rem; }
-.list-group-item:hover, .list-group-item:focus {
- z-index: 1;
- text-decoration: none; }
-.list-group-item.disabled, .list-group-item:disabled {
- color: #6c757d;
- background-color: #fff; }
-.list-group-item.active {
- z-index: 2;
- color: #fff;
- background-color: #007bff;
- border-color: #007bff; }
-.list-group-flush .list-group-item {
- border-right: 0;
- border-left: 0;
- border-radius: 0; }
-.list-group-flush:first-child .list-group-item:first-child {
- border-top: 0; }
-.list-group-flush:last-child .list-group-item:last-child {
- border-bottom: 0; }
-.list-group-item-primary {
- color: #004085;
- background-color: #b8daff; }
-.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {
- color: #004085;
- background-color: #9fcdff; }
-.list-group-item-primary.list-group-item-action.active {
- color: #fff;
- background-color: #004085;
- border-color: #004085; }
-.list-group-item-secondary {
- color: #383d41;
- background-color: #d6d8db; }
-.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {
- color: #383d41;
- background-color: #c8cbcf; }
-.list-group-item-secondary.list-group-item-action.active {
- color: #fff;
- background-color: #383d41;
- border-color: #383d41; }
-.list-group-item-success {
- color: #155724;
- background-color: #c3e6cb; }
-.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {
- color: #155724;
- background-color: #b1dfbb; }
-.list-group-item-success.list-group-item-action.active {
- color: #fff;
- background-color: #155724;
- border-color: #155724; }
-.list-group-item-info {
- color: #0c5460;
- background-color: #bee5eb; }
-.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {
- color: #0c5460;
- background-color: #abdde5; }
-.list-group-item-info.list-group-item-action.active {
- color: #fff;
- background-color: #0c5460;
- border-color: #0c5460; }
-.list-group-item-warning {
- color: #856404;
- background-color: #ffeeba; }
-.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {
- color: #856404;
- background-color: #ffe8a1; }
-.list-group-item-warning.list-group-item-action.active {
- color: #fff;
- background-color: #856404;
- border-color: #856404; }
-.list-group-item-danger {
- color: #721c24;
- background-color: #f5c6cb; }
-.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {
- color: #721c24;
- background-color: #f1b0b7; }
-.list-group-item-danger.list-group-item-action.active {
- color: #fff;
- background-color: #721c24;
- border-color: #721c24; }
-.list-group-item-light {
- color: #818182;
- background-color: #fdfdfe; }
-.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {
- color: #818182;
- background-color: #ececf6; }
-.list-group-item-light.list-group-item-action.active {
- color: #fff;
- background-color: #818182;
- border-color: #818182; }
-.list-group-item-dark {
- color: #1b1e21;
- background-color: #c6c8ca; }
-.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {
- color: #1b1e21;
- background-color: #b9bbbe; }
-.list-group-item-dark.list-group-item-action.active {
- color: #fff;
- background-color: #1b1e21;
- border-color: #1b1e21; }
-.close {
- float: right;
- font-size: 1.5rem;
- font-weight: 700;
- line-height: 1;
- color: #000;
- text-shadow: 0 1px 0 #fff;
- opacity: .5; }
-.close:hover, .close:focus {
- color: #000;
- text-decoration: none;
- opacity: .75; }
-.close:not(:disabled):not(.disabled) {
- cursor: pointer; }
-button.close {
- padding: 0;
- background-color: transparent;
- border: 0;
- -webkit-appearance: none; }
-.modal-open {
- overflow: hidden; }
-.modal {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1050;
- display: none;
- overflow: hidden;
- outline: 0; }
-.modal-open .modal {
- overflow-x: hidden;
- overflow-y: auto; }
-.modal-dialog {
- position: relative;
- width: auto;
- margin: 0.5rem;
- pointer-events: none; }
-.modal.fade .modal-dialog {
- -webkit-transition: -webkit-transform 0.3s ease-out;
- transition: -webkit-transform 0.3s ease-out;
- transition: transform 0.3s ease-out;
- transition: transform 0.3s ease-out, -webkit-transform 0.3s ease-out;
- -webkit-transform: translate(0, -25%);
- transform: translate(0, -25%); }
-.modal.show .modal-dialog {
- -webkit-transform: translate(0, 0);
- transform: translate(0, 0); }
-.modal-dialog-centered {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- min-height: calc(100% - (0.5rem * 2)); }
-.modal-content {
- position: relative;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
- width: 100%;
- pointer-events: auto;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 0.3rem;
- outline: 0; }
-.modal-backdrop {
- position: fixed;
- top: 0;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1040;
- background-color: #000; }
-.modal-backdrop.fade {
- opacity: 0; }
-.modal-backdrop.show {
- opacity: 0.5; }
-.modal-header {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: start;
- -ms-flex-align: start;
- align-items: flex-start;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
- padding: 1rem;
- border-bottom: 1px solid #e9ecef;
- border-top-left-radius: 0.3rem;
- border-top-right-radius: 0.3rem; }
-.modal-header .close {
- padding: 1rem;
- margin: -1rem -1rem -1rem auto; }
-.modal-title {
- margin-bottom: 0;
- line-height: 1.5; }
-.modal-body {
- position: relative;
- -webkit-box-flex: 1;
- -ms-flex: 1 1 auto;
- flex: 1 1 auto;
- padding: 1rem; }
-.modal-footer {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: end;
- -ms-flex-pack: end;
- justify-content: flex-end;
- padding: 1rem;
- border-top: 1px solid #e9ecef; }
-.modal-footer > :not(:first-child) {
- margin-left: .25rem; }
-.modal-footer > :not(:last-child) {
- margin-right: .25rem; }
-.modal-scrollbar-measure {
- position: absolute;
- top: -9999px;
- width: 50px;
- height: 50px;
- overflow: scroll; }
-@media (min-width: 576px) {
- .modal-dialog {
- max-width: 500px;
- margin: 1.75rem auto; }
- .modal-dialog-centered {
- min-height: calc(100% - (1.75rem * 2)); }
- .modal-sm {
- max-width: 300px; } }
-@media (min-width: 992px) {
- .modal-lg {
- max-width: 800px; } }
-.tooltip {
- position: absolute;
- z-index: 1070;
- display: block;
- margin: 0;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- font-style: normal;
- font-weight: 400;
- line-height: 1.5;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: 0.875rem;
- word-wrap: break-word;
- opacity: 0; }
-.tooltip.show {
- opacity: 0.9; }
-.tooltip .arrow {
- position: absolute;
- display: block;
- width: 0.8rem;
- height: 0.4rem; }
-.tooltip .arrow::before {
- position: absolute;
- content: "";
- border-color: transparent;
- border-style: solid; }
-.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] {
- padding: 0.4rem 0; }
-.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow {
- bottom: 0; }
-.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before {
- top: 0;
- border-width: 0.4rem 0.4rem 0;
- border-top-color: #000; }
-.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] {
- padding: 0 0.4rem; }
-.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow {
- left: 0;
- width: 0.4rem;
- height: 0.8rem; }
-.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before {
- right: 0;
- border-width: 0.4rem 0.4rem 0.4rem 0;
- border-right-color: #000; }
-.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] {
- padding: 0.4rem 0; }
-.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow {
- top: 0; }
-.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before {
- bottom: 0;
- border-width: 0 0.4rem 0.4rem;
- border-bottom-color: #000; }
-.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] {
- padding: 0 0.4rem; }
-.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow {
- right: 0;
- width: 0.4rem;
- height: 0.8rem; }
-.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before {
- left: 0;
- border-width: 0.4rem 0 0.4rem 0.4rem;
- border-left-color: #000; }
-.tooltip-inner {
- max-width: 200px;
- padding: 0.25rem 0.5rem;
- color: #fff;
- text-align: center;
- background-color: #000;
- border-radius: 0.25rem; }
-.popover {
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1060;
- display: block;
- max-width: 276px;
- font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
- font-style: normal;
- font-weight: 400;
- line-height: 1.5;
- text-align: left;
- text-align: start;
- text-decoration: none;
- text-shadow: none;
- text-transform: none;
- letter-spacing: normal;
- word-break: normal;
- word-spacing: normal;
- white-space: normal;
- line-break: auto;
- font-size: 0.875rem;
- word-wrap: break-word;
- background-color: #fff;
- background-clip: padding-box;
- border: 1px solid rgba(0, 0, 0, 0.2);
- border-radius: 0.3rem; }
-.popover .arrow {
- position: absolute;
- display: block;
- width: 1rem;
- height: 0.5rem;
- margin: 0 0.3rem; }
-.popover .arrow::before, .popover .arrow::after {
- position: absolute;
- display: block;
- content: "";
- border-color: transparent;
- border-style: solid; }
-.bs-popover-top, .bs-popover-auto[x-placement^="top"] {
- margin-bottom: 0.5rem; }
-.bs-popover-top .arrow, .bs-popover-auto[x-placement^="top"] .arrow {
- bottom: calc((0.5rem + 1px) * -1); }
-.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before, .bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after {
- border-width: 0.5rem 0.5rem 0; }
-.bs-popover-top .arrow::before, .bs-popover-auto[x-placement^="top"] .arrow::before {
- bottom: 0;
- border-top-color: rgba(0, 0, 0, 0.25); }
-.bs-popover-top .arrow::after, .bs-popover-auto[x-placement^="top"] .arrow::after {
- bottom: 1px;
- border-top-color: #fff; }
-.bs-popover-right, .bs-popover-auto[x-placement^="right"] {
- margin-left: 0.5rem; }
-.bs-popover-right .arrow, .bs-popover-auto[x-placement^="right"] .arrow {
- left: calc((0.5rem + 1px) * -1);
- width: 0.5rem;
- height: 1rem;
- margin: 0.3rem 0; }
-.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before, .bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after {
- border-width: 0.5rem 0.5rem 0.5rem 0; }
-.bs-popover-right .arrow::before, .bs-popover-auto[x-placement^="right"] .arrow::before {
- left: 0;
- border-right-color: rgba(0, 0, 0, 0.25); }
-.bs-popover-right .arrow::after, .bs-popover-auto[x-placement^="right"] .arrow::after {
- left: 1px;
- border-right-color: #fff; }
-.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] {
- margin-top: 0.5rem; }
-.bs-popover-bottom .arrow, .bs-popover-auto[x-placement^="bottom"] .arrow {
- top: calc((0.5rem + 1px) * -1); }
-.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before, .bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after {
- border-width: 0 0.5rem 0.5rem 0.5rem; }
-.bs-popover-bottom .arrow::before, .bs-popover-auto[x-placement^="bottom"] .arrow::before {
- top: 0;
- border-bottom-color: rgba(0, 0, 0, 0.25); }
-.bs-popover-bottom .arrow::after, .bs-popover-auto[x-placement^="bottom"] .arrow::after {
- top: 1px;
- border-bottom-color: #fff; }
-.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before {
- position: absolute;
- top: 0;
- left: 50%;
- display: block;
- width: 1rem;
- margin-left: -0.5rem;
- content: "";
- border-bottom: 1px solid #f7f7f7; }
-.bs-popover-left, .bs-popover-auto[x-placement^="left"] {
- margin-right: 0.5rem; }
-.bs-popover-left .arrow, .bs-popover-auto[x-placement^="left"] .arrow {
- right: calc((0.5rem + 1px) * -1);
- width: 0.5rem;
- height: 1rem;
- margin: 0.3rem 0; }
-.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before, .bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after {
- border-width: 0.5rem 0 0.5rem 0.5rem; }
-.bs-popover-left .arrow::before, .bs-popover-auto[x-placement^="left"] .arrow::before {
- right: 0;
- border-left-color: rgba(0, 0, 0, 0.25); }
-.bs-popover-left .arrow::after, .bs-popover-auto[x-placement^="left"] .arrow::after {
- right: 1px;
- border-left-color: #fff; }
-.popover-header {
- padding: 0.5rem 0.75rem;
- margin-bottom: 0;
- font-size: 1rem;
- color: inherit;
- background-color: #f7f7f7;
- border-bottom: 1px solid #ebebeb;
- border-top-left-radius: calc(0.3rem - 1px);
- border-top-right-radius: calc(0.3rem - 1px); }
-.popover-header:empty {
- display: none; }
-.popover-body {
- padding: 0.5rem 0.75rem;
- color: #212529; }
-.carousel {
- position: relative; }
-.carousel-inner {
- position: relative;
- width: 100%;
- overflow: hidden; }
-.carousel-item {
- position: relative;
- display: none;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- width: 100%;
- -webkit-transition: -webkit-transform 0.6s ease;
- transition: -webkit-transform 0.6s ease;
- transition: transform 0.6s ease;
- transition: transform 0.6s ease, -webkit-transform 0.6s ease;
- -webkit-backface-visibility: hidden;
- backface-visibility: hidden;
- -webkit-perspective: 1000px;
- perspective: 1000px; }
-.carousel-item.active, .carousel-item-next, .carousel-item-prev {
- display: block; }
-.carousel-item-next, .carousel-item-prev {
- position: absolute;
- top: 0; }
-.carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right {
- -webkit-transform: translateX(0);
- transform: translateX(0); }
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-item-next.carousel-item-left, .carousel-item-prev.carousel-item-right {
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); } }
-.carousel-item-next, .active.carousel-item-right {
- -webkit-transform: translateX(100%);
- transform: translateX(100%); }
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-item-next, .active.carousel-item-right {
- -webkit-transform: translate3d(100%, 0, 0);
- transform: translate3d(100%, 0, 0); } }
-.carousel-item-prev, .active.carousel-item-left {
- -webkit-transform: translateX(-100%);
- transform: translateX(-100%); }
-@supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) {
- .carousel-item-prev, .active.carousel-item-left {
- -webkit-transform: translate3d(-100%, 0, 0);
- transform: translate3d(-100%, 0, 0); } }
-.carousel-control-prev, .carousel-control-next {
- position: absolute;
- top: 0;
- bottom: 0;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- width: 15%;
- color: #fff;
- text-align: center;
- opacity: 0.5; }
-.carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus {
- color: #fff;
- text-decoration: none;
- outline: 0;
- opacity: .9; }
-.carousel-control-prev {
- left: 0; }
-.carousel-control-next {
- right: 0; }
-.carousel-control-prev-icon, .carousel-control-next-icon {
- display: inline-block;
- width: 20px;
- height: 20px;
- background: transparent no-repeat center center;
- background-size: 100% 100%; }
-.carousel-control-prev-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); }
-.carousel-control-next-icon {
- background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); }
-.carousel-indicators {
- position: absolute;
- right: 0;
- bottom: 10px;
- left: 0;
- z-index: 15;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- padding-left: 0;
- margin-right: 15%;
- margin-left: 15%;
- list-style: none; }
-.carousel-indicators li {
- position: relative;
- -webkit-box-flex: 0;
- -ms-flex: 0 1 auto;
- flex: 0 1 auto;
- width: 30px;
- height: 3px;
- margin-right: 3px;
- margin-left: 3px;
- text-indent: -999px;
- background-color: rgba(255, 255, 255, 0.5); }
-.carousel-indicators li::before {
- position: absolute;
- top: -10px;
- left: 0;
- display: inline-block;
- width: 100%;
- height: 10px;
- content: ""; }
-.carousel-indicators li::after {
- position: absolute;
- bottom: -10px;
- left: 0;
- display: inline-block;
- width: 100%;
- height: 10px;
- content: ""; }
-.carousel-indicators .active {
- 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; }
-.align-baseline {
- vertical-align: baseline !important; }
-.align-top {
- vertical-align: top !important; }
-.align-middle {
- vertical-align: middle !important; }
-.align-bottom {
- vertical-align: bottom !important; }
-.align-text-bottom {
- vertical-align: text-bottom !important; }
-.align-text-top {
- vertical-align: text-top !important; }
-.bg-primary {
- background-color: #007bff !important; }
-a.bg-primary:hover, a.bg-primary:focus, button.bg-primary:hover, button.bg-primary:focus {
- background-color: #0062cc !important; }
-.bg-secondary {
- background-color: #6c757d !important; }
-a.bg-secondary:hover, a.bg-secondary:focus, button.bg-secondary:hover, button.bg-secondary:focus {
- background-color: #545b62 !important; }
-.bg-success {
- background-color: #28a745 !important; }
-a.bg-success:hover, a.bg-success:focus, button.bg-success:hover, button.bg-success:focus {
- background-color: #1e7e34 !important; }
-.bg-info {
- background-color: #17a2b8 !important; }
-a.bg-info:hover, a.bg-info:focus, button.bg-info:hover, button.bg-info:focus {
- background-color: #117a8b !important; }
-.bg-warning {
- background-color: #ffc107 !important; }
-a.bg-warning:hover, a.bg-warning:focus, button.bg-warning:hover, button.bg-warning:focus {
- background-color: #d39e00 !important; }
-.bg-danger {
- background-color: #dc3545 !important; }
-a.bg-danger:hover, a.bg-danger:focus, button.bg-danger:hover, button.bg-danger:focus {
- background-color: #bd2130 !important; }
-.bg-light {
- background-color: #f8f9fa !important; }
-a.bg-light:hover, a.bg-light:focus, button.bg-light:hover, button.bg-light:focus {
- background-color: #dae0e5 !important; }
-.bg-dark {
- background-color: #343a40 !important; }
-a.bg-dark:hover, a.bg-dark:focus, button.bg-dark:hover, button.bg-dark:focus {
- background-color: #1d2124 !important; }
-.bg-white {
- background-color: #fff !important; }
-.bg-transparent {
- background-color: transparent !important; }
-.border {
- border: 1px solid #dee2e6 !important; }
-.border-top {
- border-top: 1px solid #dee2e6 !important; }
-.border-right {
- border-right: 1px solid #dee2e6 !important; }
-.border-bottom {
- border-bottom: 1px solid #dee2e6 !important; }
-.border-left {
- border-left: 1px solid #dee2e6 !important; }
-.border-0 {
- border: 0 !important; }
-.border-top-0 {
- border-top: 0 !important; }
-.border-right-0 {
- border-right: 0 !important; }
-.border-bottom-0 {
- border-bottom: 0 !important; }
-.border-left-0 {
- border-left: 0 !important; }
-.border-primary {
- border-color: #007bff !important; }
-.border-secondary {
- border-color: #6c757d !important; }
-.border-success {
- border-color: #28a745 !important; }
-.border-info {
- border-color: #17a2b8 !important; }
-.border-warning {
- border-color: #ffc107 !important; }
-.border-danger {
- border-color: #dc3545 !important; }
-.border-light {
- border-color: #f8f9fa !important; }
-.border-dark {
- border-color: #343a40 !important; }
-.border-white {
- border-color: #fff !important; }
-.rounded {
- border-radius: 0.25rem !important; }
-.rounded-top {
- border-top-left-radius: 0.25rem !important;
- border-top-right-radius: 0.25rem !important; }
-.rounded-right {
- border-top-right-radius: 0.25rem !important;
- border-bottom-right-radius: 0.25rem !important; }
-.rounded-bottom {
- border-bottom-right-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important; }
-.rounded-left {
- border-top-left-radius: 0.25rem !important;
- border-bottom-left-radius: 0.25rem !important; }
-.rounded-circle {
- border-radius: 50% !important; }
-.rounded-0 {
- border-radius: 0 !important; }
-.clearfix::after {
- display: block;
- clear: both;
- content: ""; }
-.d-none {
- display: none !important; }
-.d-inline {
- display: inline !important; }
-.d-inline-block {
- display: inline-block !important; }
-.d-block {
- display: block !important; }
-.d-table {
- display: table !important; }
-.d-table-row {
- display: table-row !important; }
-.d-table-cell {
- display: table-cell !important; }
-.d-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important; }
-.d-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important; }
-@media (min-width: 576px) {
- .d-sm-none {
- display: none !important; }
- .d-sm-inline {
- display: inline !important; }
- .d-sm-inline-block {
- display: inline-block !important; }
- .d-sm-block {
- display: block !important; }
- .d-sm-table {
- display: table !important; }
- .d-sm-table-row {
- display: table-row !important; }
- .d-sm-table-cell {
- display: table-cell !important; }
- .d-sm-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important; }
- .d-sm-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important; } }
-@media (min-width: 768px) {
- .d-md-none {
- display: none !important; }
- .d-md-inline {
- display: inline !important; }
- .d-md-inline-block {
- display: inline-block !important; }
- .d-md-block {
- display: block !important; }
- .d-md-table {
- display: table !important; }
- .d-md-table-row {
- display: table-row !important; }
- .d-md-table-cell {
- display: table-cell !important; }
- .d-md-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important; }
- .d-md-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important; } }
-@media (min-width: 992px) {
- .d-lg-none {
- display: none !important; }
- .d-lg-inline {
- display: inline !important; }
- .d-lg-inline-block {
- display: inline-block !important; }
- .d-lg-block {
- display: block !important; }
- .d-lg-table {
- display: table !important; }
- .d-lg-table-row {
- display: table-row !important; }
- .d-lg-table-cell {
- display: table-cell !important; }
- .d-lg-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important; }
- .d-lg-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important; } }
-@media (min-width: 1200px) {
- .d-xl-none {
- display: none !important; }
- .d-xl-inline {
- display: inline !important; }
- .d-xl-inline-block {
- display: inline-block !important; }
- .d-xl-block {
- display: block !important; }
- .d-xl-table {
- display: table !important; }
- .d-xl-table-row {
- display: table-row !important; }
- .d-xl-table-cell {
- display: table-cell !important; }
- .d-xl-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important; }
- .d-xl-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important; } }
-@media print {
- .d-print-none {
- display: none !important; }
- .d-print-inline {
- display: inline !important; }
- .d-print-inline-block {
- display: inline-block !important; }
- .d-print-block {
- display: block !important; }
- .d-print-table {
- display: table !important; }
- .d-print-table-row {
- display: table-row !important; }
- .d-print-table-cell {
- display: table-cell !important; }
- .d-print-flex {
- display: -webkit-box !important;
- display: -ms-flexbox !important;
- display: flex !important; }
- .d-print-inline-flex {
- display: -webkit-inline-box !important;
- display: -ms-inline-flexbox !important;
- display: inline-flex !important; } }
-.embed-responsive {
- position: relative;
- display: block;
- width: 100%;
- padding: 0;
- overflow: hidden; }
-.embed-responsive::before {
- display: block;
- content: ""; }
-.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-21by9::before {
- padding-top: 42.85714%; }
-.embed-responsive-16by9::before {
- padding-top: 56.25%; }
-.embed-responsive-4by3::before {
- padding-top: 75%; }
-.embed-responsive-1by1::before {
- padding-top: 100%; }
-.flex-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important; }
-.flex-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important; }
-.flex-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important; }
-.flex-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important; }
-.flex-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important; }
-.flex-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important; }
-.flex-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important; }
-.justify-content-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important; }
-.justify-content-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important; }
-.justify-content-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important; }
-.justify-content-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important; }
-.justify-content-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important; }
-.align-items-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important; }
-.align-items-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important; }
-.align-items-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important; }
-.align-items-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important; }
-.align-items-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important; }
-.align-content-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important; }
-.align-content-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important; }
-.align-content-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important; }
-.align-content-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important; }
-.align-content-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important; }
-.align-content-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important; }
-.align-self-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important; }
-.align-self-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important; }
-.align-self-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important; }
-.align-self-center {
- -ms-flex-item-align: center !important;
- align-self: center !important; }
-.align-self-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important; }
-.align-self-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important; }
-@media (min-width: 576px) {
- .flex-sm-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important; }
- .flex-sm-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important; }
- .flex-sm-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important; }
- .flex-sm-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important; }
- .flex-sm-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important; }
- .flex-sm-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important; }
- .flex-sm-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important; }
- .justify-content-sm-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important; }
- .justify-content-sm-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important; }
- .justify-content-sm-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important; }
- .justify-content-sm-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important; }
- .justify-content-sm-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important; }
- .align-items-sm-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important; }
- .align-items-sm-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important; }
- .align-items-sm-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important; }
- .align-items-sm-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important; }
- .align-items-sm-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important; }
- .align-content-sm-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important; }
- .align-content-sm-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important; }
- .align-content-sm-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important; }
- .align-content-sm-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important; }
- .align-content-sm-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important; }
- .align-content-sm-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important; }
- .align-self-sm-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important; }
- .align-self-sm-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important; }
- .align-self-sm-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important; }
- .align-self-sm-center {
- -ms-flex-item-align: center !important;
- align-self: center !important; }
- .align-self-sm-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important; }
- .align-self-sm-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important; } }
-@media (min-width: 768px) {
- .flex-md-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important; }
- .flex-md-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important; }
- .flex-md-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important; }
- .flex-md-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important; }
- .flex-md-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important; }
- .flex-md-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important; }
- .flex-md-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important; }
- .justify-content-md-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important; }
- .justify-content-md-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important; }
- .justify-content-md-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important; }
- .justify-content-md-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important; }
- .justify-content-md-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important; }
- .align-items-md-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important; }
- .align-items-md-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important; }
- .align-items-md-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important; }
- .align-items-md-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important; }
- .align-items-md-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important; }
- .align-content-md-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important; }
- .align-content-md-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important; }
- .align-content-md-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important; }
- .align-content-md-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important; }
- .align-content-md-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important; }
- .align-content-md-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important; }
- .align-self-md-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important; }
- .align-self-md-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important; }
- .align-self-md-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important; }
- .align-self-md-center {
- -ms-flex-item-align: center !important;
- align-self: center !important; }
- .align-self-md-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important; }
- .align-self-md-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important; } }
-@media (min-width: 992px) {
- .flex-lg-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important; }
- .flex-lg-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important; }
- .flex-lg-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important; }
- .flex-lg-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important; }
- .flex-lg-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important; }
- .flex-lg-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important; }
- .flex-lg-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important; }
- .justify-content-lg-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important; }
- .justify-content-lg-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important; }
- .justify-content-lg-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important; }
- .justify-content-lg-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important; }
- .justify-content-lg-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important; }
- .align-items-lg-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important; }
- .align-items-lg-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important; }
- .align-items-lg-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important; }
- .align-items-lg-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important; }
- .align-items-lg-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important; }
- .align-content-lg-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important; }
- .align-content-lg-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important; }
- .align-content-lg-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important; }
- .align-content-lg-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important; }
- .align-content-lg-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important; }
- .align-content-lg-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important; }
- .align-self-lg-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important; }
- .align-self-lg-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important; }
- .align-self-lg-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important; }
- .align-self-lg-center {
- -ms-flex-item-align: center !important;
- align-self: center !important; }
- .align-self-lg-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important; }
- .align-self-lg-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important; } }
-@media (min-width: 1200px) {
- .flex-xl-row {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: row !important;
- flex-direction: row !important; }
- .flex-xl-column {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: normal !important;
- -ms-flex-direction: column !important;
- flex-direction: column !important; }
- .flex-xl-row-reverse {
- -webkit-box-orient: horizontal !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: row-reverse !important;
- flex-direction: row-reverse !important; }
- .flex-xl-column-reverse {
- -webkit-box-orient: vertical !important;
- -webkit-box-direction: reverse !important;
- -ms-flex-direction: column-reverse !important;
- flex-direction: column-reverse !important; }
- .flex-xl-wrap {
- -ms-flex-wrap: wrap !important;
- flex-wrap: wrap !important; }
- .flex-xl-nowrap {
- -ms-flex-wrap: nowrap !important;
- flex-wrap: nowrap !important; }
- .flex-xl-wrap-reverse {
- -ms-flex-wrap: wrap-reverse !important;
- flex-wrap: wrap-reverse !important; }
- .justify-content-xl-start {
- -webkit-box-pack: start !important;
- -ms-flex-pack: start !important;
- justify-content: flex-start !important; }
- .justify-content-xl-end {
- -webkit-box-pack: end !important;
- -ms-flex-pack: end !important;
- justify-content: flex-end !important; }
- .justify-content-xl-center {
- -webkit-box-pack: center !important;
- -ms-flex-pack: center !important;
- justify-content: center !important; }
- .justify-content-xl-between {
- -webkit-box-pack: justify !important;
- -ms-flex-pack: justify !important;
- justify-content: space-between !important; }
- .justify-content-xl-around {
- -ms-flex-pack: distribute !important;
- justify-content: space-around !important; }
- .align-items-xl-start {
- -webkit-box-align: start !important;
- -ms-flex-align: start !important;
- align-items: flex-start !important; }
- .align-items-xl-end {
- -webkit-box-align: end !important;
- -ms-flex-align: end !important;
- align-items: flex-end !important; }
- .align-items-xl-center {
- -webkit-box-align: center !important;
- -ms-flex-align: center !important;
- align-items: center !important; }
- .align-items-xl-baseline {
- -webkit-box-align: baseline !important;
- -ms-flex-align: baseline !important;
- align-items: baseline !important; }
- .align-items-xl-stretch {
- -webkit-box-align: stretch !important;
- -ms-flex-align: stretch !important;
- align-items: stretch !important; }
- .align-content-xl-start {
- -ms-flex-line-pack: start !important;
- align-content: flex-start !important; }
- .align-content-xl-end {
- -ms-flex-line-pack: end !important;
- align-content: flex-end !important; }
- .align-content-xl-center {
- -ms-flex-line-pack: center !important;
- align-content: center !important; }
- .align-content-xl-between {
- -ms-flex-line-pack: justify !important;
- align-content: space-between !important; }
- .align-content-xl-around {
- -ms-flex-line-pack: distribute !important;
- align-content: space-around !important; }
- .align-content-xl-stretch {
- -ms-flex-line-pack: stretch !important;
- align-content: stretch !important; }
- .align-self-xl-auto {
- -ms-flex-item-align: auto !important;
- align-self: auto !important; }
- .align-self-xl-start {
- -ms-flex-item-align: start !important;
- align-self: flex-start !important; }
- .align-self-xl-end {
- -ms-flex-item-align: end !important;
- align-self: flex-end !important; }
- .align-self-xl-center {
- -ms-flex-item-align: center !important;
- align-self: center !important; }
- .align-self-xl-baseline {
- -ms-flex-item-align: baseline !important;
- align-self: baseline !important; }
- .align-self-xl-stretch {
- -ms-flex-item-align: stretch !important;
- align-self: stretch !important; } }
-.float-left {
- float: left !important; }
-.float-right {
- float: right !important; }
-.float-none {
- float: none !important; }
-@media (min-width: 576px) {
- .float-sm-left {
- float: left !important; }
- .float-sm-right {
- float: right !important; }
- .float-sm-none {
- float: none !important; } }
-@media (min-width: 768px) {
- .float-md-left {
- float: left !important; }
- .float-md-right {
- float: right !important; }
- .float-md-none {
- float: none !important; } }
-@media (min-width: 992px) {
- .float-lg-left {
- float: left !important; }
- .float-lg-right {
- float: right !important; }
- .float-lg-none {
- float: none !important; } }
-@media (min-width: 1200px) {
- .float-xl-left {
- float: left !important; }
- .float-xl-right {
- float: right !important; }
- .float-xl-none {
- float: none !important; } }
-.position-static {
- position: static !important; }
-.position-relative {
- position: relative !important; }
-.position-absolute {
- position: absolute !important; }
-.position-fixed {
- position: fixed !important; }
-.position-sticky {
- position: -webkit-sticky !important;
- position: sticky !important; }
-.fixed-top {
- position: fixed;
- top: 0;
- right: 0;
- left: 0;
- z-index: 1030; }
-.fixed-bottom {
- position: fixed;
- right: 0;
- bottom: 0;
- left: 0;
- z-index: 1030; }
-@supports ((position: -webkit-sticky) or (position: sticky)) {
- .sticky-top {
- position: -webkit-sticky;
- position: sticky;
- top: 0;
- z-index: 1020; } }
-.sr-only {
- position: absolute;
- width: 1px;
- height: 1px;
- padding: 0;
- overflow: hidden;
- clip: rect(0, 0, 0, 0);
- white-space: nowrap;
- -webkit-clip-path: inset(50%);
- clip-path: inset(50%);
- border: 0; }
-.sr-only-focusable:active, .sr-only-focusable:focus {
- position: static;
- width: auto;
- height: auto;
- overflow: visible;
- clip: auto;
- white-space: normal;
- -webkit-clip-path: none;
- clip-path: none; }
-.w-25 {
- width: 25% !important; }
-.w-50 {
- width: 50% !important; }
-.w-75 {
- width: 75% !important; }
-.w-100 {
- width: 100% !important; }
-.h-25 {
- height: 25% !important; }
-.h-50 {
- height: 50% !important; }
-.h-75 {
- height: 75% !important; }
-.h-100 {
- height: 100% !important; }
-.mw-100 {
- max-width: 100% !important; }
-.mh-100 {
- max-height: 100% !important; }
-.m-0 {
- margin: 0 !important; }
-.mt-0, .my-0 {
- margin-top: 0 !important; }
-.mr-0, .mx-0 {
- margin-right: 0 !important; }
-.mb-0, .my-0 {
- margin-bottom: 0 !important; }
-.ml-0, .mx-0 {
- margin-left: 0 !important; }
-.m-1 {
- margin: 0.25rem !important; }
-.mt-1, .my-1 {
- margin-top: 0.25rem !important; }
-.mr-1, .mx-1 {
- margin-right: 0.25rem !important; }
-.mb-1, .my-1 {
- margin-bottom: 0.25rem !important; }
-.ml-1, .mx-1 {
- margin-left: 0.25rem !important; }
-.m-2 {
- margin: 0.5rem !important; }
-.mt-2, .my-2 {
- margin-top: 0.5rem !important; }
-.mr-2, .mx-2 {
- margin-right: 0.5rem !important; }
-.mb-2, .my-2 {
- margin-bottom: 0.5rem !important; }
-.ml-2, .mx-2 {
- margin-left: 0.5rem !important; }
-.m-3 {
- margin: 1rem !important; }
-.mt-3, .my-3 {
- margin-top: 1rem !important; }
-.mr-3, .mx-3 {
- margin-right: 1rem !important; }
-.mb-3, .my-3 {
- margin-bottom: 1rem !important; }
-.ml-3, .mx-3 {
- margin-left: 1rem !important; }
-.m-4 {
- margin: 1.5rem !important; }
-.mt-4, .my-4 {
- margin-top: 1.5rem !important; }
-.mr-4, .mx-4 {
- margin-right: 1.5rem !important; }
-.mb-4, .my-4 {
- margin-bottom: 1.5rem !important; }
-.ml-4, .mx-4 {
- margin-left: 1.5rem !important; }
-.m-5 {
- margin: 3rem !important; }
-.mt-5, .my-5 {
- margin-top: 3rem !important; }
-.mr-5, .mx-5 {
- margin-right: 3rem !important; }
-.mb-5, .my-5 {
- margin-bottom: 3rem !important; }
-.ml-5, .mx-5 {
- margin-left: 3rem !important; }
-.p-0 {
- padding: 0 !important; }
-.pt-0, .py-0 {
- padding-top: 0 !important; }
-.pr-0, .px-0 {
- padding-right: 0 !important; }
-.pb-0, .py-0 {
- padding-bottom: 0 !important; }
-.pl-0, .px-0 {
- padding-left: 0 !important; }
-.p-1 {
- padding: 0.25rem !important; }
-.pt-1, .py-1 {
- padding-top: 0.25rem !important; }
-.pr-1, .px-1 {
- padding-right: 0.25rem !important; }
-.pb-1, .py-1 {
- padding-bottom: 0.25rem !important; }
-.pl-1, .px-1 {
- padding-left: 0.25rem !important; }
-.p-2 {
- padding: 0.5rem !important; }
-.pt-2, .py-2 {
- padding-top: 0.5rem !important; }
-.pr-2, .px-2 {
- padding-right: 0.5rem !important; }
-.pb-2, .py-2 {
- padding-bottom: 0.5rem !important; }
-.pl-2, .px-2 {
- padding-left: 0.5rem !important; }
-.p-3 {
- padding: 1rem !important; }
-.pt-3, .py-3 {
- padding-top: 1rem !important; }
-.pr-3, .px-3 {
- padding-right: 1rem !important; }
-.pb-3, .py-3 {
- padding-bottom: 1rem !important; }
-.pl-3, .px-3 {
- padding-left: 1rem !important; }
-.p-4 {
- padding: 1.5rem !important; }
-.pt-4, .py-4 {
- padding-top: 1.5rem !important; }
-.pr-4, .px-4 {
- padding-right: 1.5rem !important; }
-.pb-4, .py-4 {
- padding-bottom: 1.5rem !important; }
-.pl-4, .px-4 {
- padding-left: 1.5rem !important; }
-.p-5 {
- padding: 3rem !important; }
-.pt-5, .py-5 {
- padding-top: 3rem !important; }
-.pr-5, .px-5 {
- padding-right: 3rem !important; }
-.pb-5, .py-5 {
- padding-bottom: 3rem !important; }
-.pl-5, .px-5 {
- padding-left: 3rem !important; }
-.m-auto {
- margin: auto !important; }
-.mt-auto, .my-auto {
- margin-top: auto !important; }
-.mr-auto, .mx-auto {
- margin-right: auto !important; }
-.mb-auto, .my-auto {
- margin-bottom: auto !important; }
-.ml-auto, .mx-auto {
- margin-left: auto !important; }
-@media (min-width: 576px) {
- .m-sm-0 {
- margin: 0 !important; }
- .mt-sm-0, .my-sm-0 {
- margin-top: 0 !important; }
- .mr-sm-0, .mx-sm-0 {
- margin-right: 0 !important; }
- .mb-sm-0, .my-sm-0 {
- margin-bottom: 0 !important; }
- .ml-sm-0, .mx-sm-0 {
- margin-left: 0 !important; }
- .m-sm-1 {
- margin: 0.25rem !important; }
- .mt-sm-1, .my-sm-1 {
- margin-top: 0.25rem !important; }
- .mr-sm-1, .mx-sm-1 {
- margin-right: 0.25rem !important; }
- .mb-sm-1, .my-sm-1 {
- margin-bottom: 0.25rem !important; }
- .ml-sm-1, .mx-sm-1 {
- margin-left: 0.25rem !important; }
- .m-sm-2 {
- margin: 0.5rem !important; }
- .mt-sm-2, .my-sm-2 {
- margin-top: 0.5rem !important; }
- .mr-sm-2, .mx-sm-2 {
- margin-right: 0.5rem !important; }
- .mb-sm-2, .my-sm-2 {
- margin-bottom: 0.5rem !important; }
- .ml-sm-2, .mx-sm-2 {
- margin-left: 0.5rem !important; }
- .m-sm-3 {
- margin: 1rem !important; }
- .mt-sm-3, .my-sm-3 {
- margin-top: 1rem !important; }
- .mr-sm-3, .mx-sm-3 {
- margin-right: 1rem !important; }
- .mb-sm-3, .my-sm-3 {
- margin-bottom: 1rem !important; }
- .ml-sm-3, .mx-sm-3 {
- margin-left: 1rem !important; }
- .m-sm-4 {
- margin: 1.5rem !important; }
- .mt-sm-4, .my-sm-4 {
- margin-top: 1.5rem !important; }
- .mr-sm-4, .mx-sm-4 {
- margin-right: 1.5rem !important; }
- .mb-sm-4, .my-sm-4 {
- margin-bottom: 1.5rem !important; }
- .ml-sm-4, .mx-sm-4 {
- margin-left: 1.5rem !important; }
- .m-sm-5 {
- margin: 3rem !important; }
- .mt-sm-5, .my-sm-5 {
- margin-top: 3rem !important; }
- .mr-sm-5, .mx-sm-5 {
- margin-right: 3rem !important; }
- .mb-sm-5, .my-sm-5 {
- margin-bottom: 3rem !important; }
- .ml-sm-5, .mx-sm-5 {
- margin-left: 3rem !important; }
- .p-sm-0 {
- padding: 0 !important; }
- .pt-sm-0, .py-sm-0 {
- padding-top: 0 !important; }
- .pr-sm-0, .px-sm-0 {
- padding-right: 0 !important; }
- .pb-sm-0, .py-sm-0 {
- padding-bottom: 0 !important; }
- .pl-sm-0, .px-sm-0 {
- padding-left: 0 !important; }
- .p-sm-1 {
- padding: 0.25rem !important; }
- .pt-sm-1, .py-sm-1 {
- padding-top: 0.25rem !important; }
- .pr-sm-1, .px-sm-1 {
- padding-right: 0.25rem !important; }
- .pb-sm-1, .py-sm-1 {
- padding-bottom: 0.25rem !important; }
- .pl-sm-1, .px-sm-1 {
- padding-left: 0.25rem !important; }
- .p-sm-2 {
- padding: 0.5rem !important; }
- .pt-sm-2, .py-sm-2 {
- padding-top: 0.5rem !important; }
- .pr-sm-2, .px-sm-2 {
- padding-right: 0.5rem !important; }
- .pb-sm-2, .py-sm-2 {
- padding-bottom: 0.5rem !important; }
- .pl-sm-2, .px-sm-2 {
- padding-left: 0.5rem !important; }
- .p-sm-3 {
- padding: 1rem !important; }
- .pt-sm-3, .py-sm-3 {
- padding-top: 1rem !important; }
- .pr-sm-3, .px-sm-3 {
- padding-right: 1rem !important; }
- .pb-sm-3, .py-sm-3 {
- padding-bottom: 1rem !important; }
- .pl-sm-3, .px-sm-3 {
- padding-left: 1rem !important; }
- .p-sm-4 {
- padding: 1.5rem !important; }
- .pt-sm-4, .py-sm-4 {
- padding-top: 1.5rem !important; }
- .pr-sm-4, .px-sm-4 {
- padding-right: 1.5rem !important; }
- .pb-sm-4, .py-sm-4 {
- padding-bottom: 1.5rem !important; }
- .pl-sm-4, .px-sm-4 {
- padding-left: 1.5rem !important; }
- .p-sm-5 {
- padding: 3rem !important; }
- .pt-sm-5, .py-sm-5 {
- padding-top: 3rem !important; }
- .pr-sm-5, .px-sm-5 {
- padding-right: 3rem !important; }
- .pb-sm-5, .py-sm-5 {
- padding-bottom: 3rem !important; }
- .pl-sm-5, .px-sm-5 {
- padding-left: 3rem !important; }
- .m-sm-auto {
- margin: auto !important; }
- .mt-sm-auto, .my-sm-auto {
- margin-top: auto !important; }
- .mr-sm-auto, .mx-sm-auto {
- margin-right: auto !important; }
- .mb-sm-auto, .my-sm-auto {
- margin-bottom: auto !important; }
- .ml-sm-auto, .mx-sm-auto {
- margin-left: auto !important; } }
-@media (min-width: 768px) {
- .m-md-0 {
- margin: 0 !important; }
- .mt-md-0, .my-md-0 {
- margin-top: 0 !important; }
- .mr-md-0, .mx-md-0 {
- margin-right: 0 !important; }
- .mb-md-0, .my-md-0 {
- margin-bottom: 0 !important; }
- .ml-md-0, .mx-md-0 {
- margin-left: 0 !important; }
- .m-md-1 {
- margin: 0.25rem !important; }
- .mt-md-1, .my-md-1 {
- margin-top: 0.25rem !important; }
- .mr-md-1, .mx-md-1 {
- margin-right: 0.25rem !important; }
- .mb-md-1, .my-md-1 {
- margin-bottom: 0.25rem !important; }
- .ml-md-1, .mx-md-1 {
- margin-left: 0.25rem !important; }
- .m-md-2 {
- margin: 0.5rem !important; }
- .mt-md-2, .my-md-2 {
- margin-top: 0.5rem !important; }
- .mr-md-2, .mx-md-2 {
- margin-right: 0.5rem !important; }
- .mb-md-2, .my-md-2 {
- margin-bottom: 0.5rem !important; }
- .ml-md-2, .mx-md-2 {
- margin-left: 0.5rem !important; }
- .m-md-3 {
- margin: 1rem !important; }
- .mt-md-3, .my-md-3 {
- margin-top: 1rem !important; }
- .mr-md-3, .mx-md-3 {
- margin-right: 1rem !important; }
- .mb-md-3, .my-md-3 {
- margin-bottom: 1rem !important; }
- .ml-md-3, .mx-md-3 {
- margin-left: 1rem !important; }
- .m-md-4 {
- margin: 1.5rem !important; }
- .mt-md-4, .my-md-4 {
- margin-top: 1.5rem !important; }
- .mr-md-4, .mx-md-4 {
- margin-right: 1.5rem !important; }
- .mb-md-4, .my-md-4 {
- margin-bottom: 1.5rem !important; }
- .ml-md-4, .mx-md-4 {
- margin-left: 1.5rem !important; }
- .m-md-5 {
- margin: 3rem !important; }
- .mt-md-5, .my-md-5 {
- margin-top: 3rem !important; }
- .mr-md-5, .mx-md-5 {
- margin-right: 3rem !important; }
- .mb-md-5, .my-md-5 {
- margin-bottom: 3rem !important; }
- .ml-md-5, .mx-md-5 {
- margin-left: 3rem !important; }
- .p-md-0 {
- padding: 0 !important; }
- .pt-md-0, .py-md-0 {
- padding-top: 0 !important; }
- .pr-md-0, .px-md-0 {
- padding-right: 0 !important; }
- .pb-md-0, .py-md-0 {
- padding-bottom: 0 !important; }
- .pl-md-0, .px-md-0 {
- padding-left: 0 !important; }
- .p-md-1 {
- padding: 0.25rem !important; }
- .pt-md-1, .py-md-1 {
- padding-top: 0.25rem !important; }
- .pr-md-1, .px-md-1 {
- padding-right: 0.25rem !important; }
- .pb-md-1, .py-md-1 {
- padding-bottom: 0.25rem !important; }
- .pl-md-1, .px-md-1 {
- padding-left: 0.25rem !important; }
- .p-md-2 {
- padding: 0.5rem !important; }
- .pt-md-2, .py-md-2 {
- padding-top: 0.5rem !important; }
- .pr-md-2, .px-md-2 {
- padding-right: 0.5rem !important; }
- .pb-md-2, .py-md-2 {
- padding-bottom: 0.5rem !important; }
- .pl-md-2, .px-md-2 {
- padding-left: 0.5rem !important; }
- .p-md-3 {
- padding: 1rem !important; }
- .pt-md-3, .py-md-3 {
- padding-top: 1rem !important; }
- .pr-md-3, .px-md-3 {
- padding-right: 1rem !important; }
- .pb-md-3, .py-md-3 {
- padding-bottom: 1rem !important; }
- .pl-md-3, .px-md-3 {
- padding-left: 1rem !important; }
- .p-md-4 {
- padding: 1.5rem !important; }
- .pt-md-4, .py-md-4 {
- padding-top: 1.5rem !important; }
- .pr-md-4, .px-md-4 {
- padding-right: 1.5rem !important; }
- .pb-md-4, .py-md-4 {
- padding-bottom: 1.5rem !important; }
- .pl-md-4, .px-md-4 {
- padding-left: 1.5rem !important; }
- .p-md-5 {
- padding: 3rem !important; }
- .pt-md-5, .py-md-5 {
- padding-top: 3rem !important; }
- .pr-md-5, .px-md-5 {
- padding-right: 3rem !important; }
- .pb-md-5, .py-md-5 {
- padding-bottom: 3rem !important; }
- .pl-md-5, .px-md-5 {
- padding-left: 3rem !important; }
- .m-md-auto {
- margin: auto !important; }
- .mt-md-auto, .my-md-auto {
- margin-top: auto !important; }
- .mr-md-auto, .mx-md-auto {
- margin-right: auto !important; }
- .mb-md-auto, .my-md-auto {
- margin-bottom: auto !important; }
- .ml-md-auto, .mx-md-auto {
- margin-left: auto !important; } }
-@media (min-width: 992px) {
- .m-lg-0 {
- margin: 0 !important; }
- .mt-lg-0, .my-lg-0 {
- margin-top: 0 !important; }
- .mr-lg-0, .mx-lg-0 {
- margin-right: 0 !important; }
- .mb-lg-0, .my-lg-0 {
- margin-bottom: 0 !important; }
- .ml-lg-0, .mx-lg-0 {
- margin-left: 0 !important; }
- .m-lg-1 {
- margin: 0.25rem !important; }
- .mt-lg-1, .my-lg-1 {
- margin-top: 0.25rem !important; }
- .mr-lg-1, .mx-lg-1 {
- margin-right: 0.25rem !important; }
- .mb-lg-1, .my-lg-1 {
- margin-bottom: 0.25rem !important; }
- .ml-lg-1, .mx-lg-1 {
- margin-left: 0.25rem !important; }
- .m-lg-2 {
- margin: 0.5rem !important; }
- .mt-lg-2, .my-lg-2 {
- margin-top: 0.5rem !important; }
- .mr-lg-2, .mx-lg-2 {
- margin-right: 0.5rem !important; }
- .mb-lg-2, .my-lg-2 {
- margin-bottom: 0.5rem !important; }
- .ml-lg-2, .mx-lg-2 {
- margin-left: 0.5rem !important; }
- .m-lg-3 {
- margin: 1rem !important; }
- .mt-lg-3, .my-lg-3 {
- margin-top: 1rem !important; }
- .mr-lg-3, .mx-lg-3 {
- margin-right: 1rem !important; }
- .mb-lg-3, .my-lg-3 {
- margin-bottom: 1rem !important; }
- .ml-lg-3, .mx-lg-3 {
- margin-left: 1rem !important; }
- .m-lg-4 {
- margin: 1.5rem !important; }
- .mt-lg-4, .my-lg-4 {
- margin-top: 1.5rem !important; }
- .mr-lg-4, .mx-lg-4 {
- margin-right: 1.5rem !important; }
- .mb-lg-4, .my-lg-4 {
- margin-bottom: 1.5rem !important; }
- .ml-lg-4, .mx-lg-4 {
- margin-left: 1.5rem !important; }
- .m-lg-5 {
- margin: 3rem !important; }
- .mt-lg-5, .my-lg-5 {
- margin-top: 3rem !important; }
- .mr-lg-5, .mx-lg-5 {
- margin-right: 3rem !important; }
- .mb-lg-5, .my-lg-5 {
- margin-bottom: 3rem !important; }
- .ml-lg-5, .mx-lg-5 {
- margin-left: 3rem !important; }
- .p-lg-0 {
- padding: 0 !important; }
- .pt-lg-0, .py-lg-0 {
- padding-top: 0 !important; }
- .pr-lg-0, .px-lg-0 {
- padding-right: 0 !important; }
- .pb-lg-0, .py-lg-0 {
- padding-bottom: 0 !important; }
- .pl-lg-0, .px-lg-0 {
- padding-left: 0 !important; }
- .p-lg-1 {
- padding: 0.25rem !important; }
- .pt-lg-1, .py-lg-1 {
- padding-top: 0.25rem !important; }
- .pr-lg-1, .px-lg-1 {
- padding-right: 0.25rem !important; }
- .pb-lg-1, .py-lg-1 {
- padding-bottom: 0.25rem !important; }
- .pl-lg-1, .px-lg-1 {
- padding-left: 0.25rem !important; }
- .p-lg-2 {
- padding: 0.5rem !important; }
- .pt-lg-2, .py-lg-2 {
- padding-top: 0.5rem !important; }
- .pr-lg-2, .px-lg-2 {
- padding-right: 0.5rem !important; }
- .pb-lg-2, .py-lg-2 {
- padding-bottom: 0.5rem !important; }
- .pl-lg-2, .px-lg-2 {
- padding-left: 0.5rem !important; }
- .p-lg-3 {
- padding: 1rem !important; }
- .pt-lg-3, .py-lg-3 {
- padding-top: 1rem !important; }
- .pr-lg-3, .px-lg-3 {
- padding-right: 1rem !important; }
- .pb-lg-3, .py-lg-3 {
- padding-bottom: 1rem !important; }
- .pl-lg-3, .px-lg-3 {
- padding-left: 1rem !important; }
- .p-lg-4 {
- padding: 1.5rem !important; }
- .pt-lg-4, .py-lg-4 {
- padding-top: 1.5rem !important; }
- .pr-lg-4, .px-lg-4 {
- padding-right: 1.5rem !important; }
- .pb-lg-4, .py-lg-4 {
- padding-bottom: 1.5rem !important; }
- .pl-lg-4, .px-lg-4 {
- padding-left: 1.5rem !important; }
- .p-lg-5 {
- padding: 3rem !important; }
- .pt-lg-5, .py-lg-5 {
- padding-top: 3rem !important; }
- .pr-lg-5, .px-lg-5 {
- padding-right: 3rem !important; }
- .pb-lg-5, .py-lg-5 {
- padding-bottom: 3rem !important; }
- .pl-lg-5, .px-lg-5 {
- padding-left: 3rem !important; }
- .m-lg-auto {
- margin: auto !important; }
- .mt-lg-auto, .my-lg-auto {
- margin-top: auto !important; }
- .mr-lg-auto, .mx-lg-auto {
- margin-right: auto !important; }
- .mb-lg-auto, .my-lg-auto {
- margin-bottom: auto !important; }
- .ml-lg-auto, .mx-lg-auto {
- margin-left: auto !important; } }
-@media (min-width: 1200px) {
- .m-xl-0 {
- margin: 0 !important; }
- .mt-xl-0, .my-xl-0 {
- margin-top: 0 !important; }
- .mr-xl-0, .mx-xl-0 {
- margin-right: 0 !important; }
- .mb-xl-0, .my-xl-0 {
- margin-bottom: 0 !important; }
- .ml-xl-0, .mx-xl-0 {
- margin-left: 0 !important; }
- .m-xl-1 {
- margin: 0.25rem !important; }
- .mt-xl-1, .my-xl-1 {
- margin-top: 0.25rem !important; }
- .mr-xl-1, .mx-xl-1 {
- margin-right: 0.25rem !important; }
- .mb-xl-1, .my-xl-1 {
- margin-bottom: 0.25rem !important; }
- .ml-xl-1, .mx-xl-1 {
- margin-left: 0.25rem !important; }
- .m-xl-2 {
- margin: 0.5rem !important; }
- .mt-xl-2, .my-xl-2 {
- margin-top: 0.5rem !important; }
- .mr-xl-2, .mx-xl-2 {
- margin-right: 0.5rem !important; }
- .mb-xl-2, .my-xl-2 {
- margin-bottom: 0.5rem !important; }
- .ml-xl-2, .mx-xl-2 {
- margin-left: 0.5rem !important; }
- .m-xl-3 {
- margin: 1rem !important; }
- .mt-xl-3, .my-xl-3 {
- margin-top: 1rem !important; }
- .mr-xl-3, .mx-xl-3 {
- margin-right: 1rem !important; }
- .mb-xl-3, .my-xl-3 {
- margin-bottom: 1rem !important; }
- .ml-xl-3, .mx-xl-3 {
- margin-left: 1rem !important; }
- .m-xl-4 {
- margin: 1.5rem !important; }
- .mt-xl-4, .my-xl-4 {
- margin-top: 1.5rem !important; }
- .mr-xl-4, .mx-xl-4 {
- margin-right: 1.5rem !important; }
- .mb-xl-4, .my-xl-4 {
- margin-bottom: 1.5rem !important; }
- .ml-xl-4, .mx-xl-4 {
- margin-left: 1.5rem !important; }
- .m-xl-5 {
- margin: 3rem !important; }
- .mt-xl-5, .my-xl-5 {
- margin-top: 3rem !important; }
- .mr-xl-5, .mx-xl-5 {
- margin-right: 3rem !important; }
- .mb-xl-5, .my-xl-5 {
- margin-bottom: 3rem !important; }
- .ml-xl-5, .mx-xl-5 {
- margin-left: 3rem !important; }
- .p-xl-0 {
- padding: 0 !important; }
- .pt-xl-0, .py-xl-0 {
- padding-top: 0 !important; }
- .pr-xl-0, .px-xl-0 {
- padding-right: 0 !important; }
- .pb-xl-0, .py-xl-0 {
- padding-bottom: 0 !important; }
- .pl-xl-0, .px-xl-0 {
- padding-left: 0 !important; }
- .p-xl-1 {
- padding: 0.25rem !important; }
- .pt-xl-1, .py-xl-1 {
- padding-top: 0.25rem !important; }
- .pr-xl-1, .px-xl-1 {
- padding-right: 0.25rem !important; }
- .pb-xl-1, .py-xl-1 {
- padding-bottom: 0.25rem !important; }
- .pl-xl-1, .px-xl-1 {
- padding-left: 0.25rem !important; }
- .p-xl-2 {
- padding: 0.5rem !important; }
- .pt-xl-2, .py-xl-2 {
- padding-top: 0.5rem !important; }
- .pr-xl-2, .px-xl-2 {
- padding-right: 0.5rem !important; }
- .pb-xl-2, .py-xl-2 {
- padding-bottom: 0.5rem !important; }
- .pl-xl-2, .px-xl-2 {
- padding-left: 0.5rem !important; }
- .p-xl-3 {
- padding: 1rem !important; }
- .pt-xl-3, .py-xl-3 {
- padding-top: 1rem !important; }
- .pr-xl-3, .px-xl-3 {
- padding-right: 1rem !important; }
- .pb-xl-3, .py-xl-3 {
- padding-bottom: 1rem !important; }
- .pl-xl-3, .px-xl-3 {
- padding-left: 1rem !important; }
- .p-xl-4 {
- padding: 1.5rem !important; }
- .pt-xl-4, .py-xl-4 {
- padding-top: 1.5rem !important; }
- .pr-xl-4, .px-xl-4 {
- padding-right: 1.5rem !important; }
- .pb-xl-4, .py-xl-4 {
- padding-bottom: 1.5rem !important; }
- .pl-xl-4, .px-xl-4 {
- padding-left: 1.5rem !important; }
- .p-xl-5 {
- padding: 3rem !important; }
- .pt-xl-5, .py-xl-5 {
- padding-top: 3rem !important; }
- .pr-xl-5, .px-xl-5 {
- padding-right: 3rem !important; }
- .pb-xl-5, .py-xl-5 {
- padding-bottom: 3rem !important; }
- .pl-xl-5, .px-xl-5 {
- padding-left: 3rem !important; }
- .m-xl-auto {
- margin: auto !important; }
- .mt-xl-auto, .my-xl-auto {
- margin-top: auto !important; }
- .mr-xl-auto, .mx-xl-auto {
- margin-right: auto !important; }
- .mb-xl-auto, .my-xl-auto {
- margin-bottom: auto !important; }
- .ml-xl-auto, .mx-xl-auto {
- margin-left: auto !important; } }
-.text-justify {
- text-align: justify !important; }
-.text-nowrap {
- white-space: nowrap !important; }
-.text-truncate {
- overflow: hidden;
- text-overflow: ellipsis;
- white-space: nowrap; }
-.text-left {
- text-align: left !important; }
-.text-right {
- text-align: right !important; }
-.text-center {
- text-align: center !important; }
-@media (min-width: 576px) {
- .text-sm-left {
- text-align: left !important; }
- .text-sm-right {
- text-align: right !important; }
- .text-sm-center {
- text-align: center !important; } }
-@media (min-width: 768px) {
- .text-md-left {
- text-align: left !important; }
- .text-md-right {
- text-align: right !important; }
- .text-md-center {
- text-align: center !important; } }
-@media (min-width: 992px) {
- .text-lg-left {
- text-align: left !important; }
- .text-lg-right {
- text-align: right !important; }
- .text-lg-center {
- text-align: center !important; } }
-@media (min-width: 1200px) {
- .text-xl-left {
- text-align: left !important; }
- .text-xl-right {
- text-align: right !important; }
- .text-xl-center {
- text-align: center !important; } }
-.text-lowercase {
- text-transform: lowercase !important; }
-.text-uppercase {
- text-transform: uppercase !important; }
-.text-capitalize {
- text-transform: capitalize !important; }
-.font-weight-light {
- font-weight: 300 !important; }
-.font-weight-normal {
- font-weight: 400 !important; }
-.font-weight-bold {
- font-weight: 700 !important; }
-.font-italic {
- font-style: italic !important; }
-.text-white {
- color: #fff !important; }
-.text-primary {
- color: #007bff !important; }
-a.text-primary:hover, a.text-primary:focus {
- color: #0062cc !important; }
-.text-secondary {
- color: #6c757d !important; }
-a.text-secondary:hover, a.text-secondary:focus {
- color: #545b62 !important; }
-.text-success {
- color: #28a745 !important; }
-a.text-success:hover, a.text-success:focus {
- color: #1e7e34 !important; }
-.text-info {
- color: #17a2b8 !important; }
-a.text-info:hover, a.text-info:focus {
- color: #117a8b !important; }
-.text-warning {
- color: #ffc107 !important; }
-a.text-warning:hover, a.text-warning:focus {
- color: #d39e00 !important; }
-.text-danger {
- color: #dc3545 !important; }
-a.text-danger:hover, a.text-danger:focus {
- color: #bd2130 !important; }
-.text-light {
- color: #f8f9fa !important; }
-a.text-light:hover, a.text-light:focus {
- color: #dae0e5 !important; }
-.text-dark {
- color: #343a40 !important; }
-a.text-dark:hover, a.text-dark:focus {
- color: #1d2124 !important; }
-.text-muted {
- color: #6c757d !important; }
-.text-hide {
- font: 0/0 a;
- color: transparent;
- text-shadow: none;
- background-color: transparent;
- border: 0; }
-.visible {
- visibility: visible !important; }
-.invisible {
- visibility: hidden !important; }
-@media print {
- *, *::before, *::after {
- text-shadow: none !important;
- -webkit-box-shadow: none !important;
- box-shadow: none !important; }
- a:not(.btn) {
- text-decoration: underline; }
- abbr[title]::after {
- content: " (" attr(title) ")"; }
- pre {
- white-space: pre-wrap !important; }
- pre, blockquote {
- border: 1px solid #999;
- page-break-inside: avoid; }
- thead {
- display: table-header-group; }
- tr, img {
- page-break-inside: avoid; }
- p, h2, h3 {
- orphans: 3;
- widows: 3; }
- h2, h3 {
- page-break-after: avoid; }
- @page {
- size: a3; }
- body {
- min-width: 992px !important; }
- .container {
- min-width: 992px !important; }
- .navbar {
- display: none; }
- .badge {
- 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; } }
-.awesomplete [hidden] {
- display: none; }
-.awesomplete .visually-hidden {
- position: absolute;
- clip: rect(0, 0, 0, 0); }
-.awesomplete {
- display: inline-block;
- position: relative; }
-.awesomplete > input {
- display: block; }
-.awesomplete > ul {
- position: absolute;
- left: 0;
- z-index: 1;
- min-width: 100%;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- list-style: none;
- padding: 0;
- margin: 0;
- background: #fff; }
-.awesomplete > ul:empty {
- display: none; }
-.awesomplete > ul {
- border-radius: .3em;
- margin: .2em 0 0;
- background: rgba(255, 255, 255, 0.9);
- background: -webkit-gradient(linear, left top, right bottom, from(white), to(rgba(255, 255, 255, 0.8)));
- background: linear-gradient(to bottom right, white, rgba(255, 255, 255, 0.8));
- border: 1px solid rgba(0, 0, 0, 0.3);
- -webkit-box-shadow: 0.05em 0.2em 0.6em rgba(0, 0, 0, 0.2);
- box-shadow: 0.05em 0.2em 0.6em rgba(0, 0, 0, 0.2);
- text-shadow: none; }
-@supports ((-webkit-transform: scale(0)) or (transform: scale(0))) {
- .awesomplete > ul {
- -webkit-transition: 0.3s cubic-bezier(0.4, 0.2, 0.5, 1.4);
- transition: 0.3s cubic-bezier(0.4, 0.2, 0.5, 1.4);
- -webkit-transform-origin: 1.43em -.43em;
- transform-origin: 1.43em -.43em; }
- .awesomplete > ul[hidden], .awesomplete > ul:empty {
- opacity: 0;
- -webkit-transform: scale(0);
- transform: scale(0);
- display: block;
- -webkit-transition-timing-function: ease;
- transition-timing-function: ease; } }
-/* Pointer */
-.awesomplete > ul:before {
- content: "";
- position: absolute;
- top: -.43em;
- left: 1em;
- width: 0;
- height: 0;
- padding: .4em;
- background: white;
- border: inherit;
- border-right: 0;
- border-bottom: 0;
- -webkit-transform: rotate(45deg);
- transform: rotate(45deg); }
-.awesomplete > ul > li {
- position: relative;
- padding: .2em .5em;
- cursor: pointer; }
-.awesomplete > ul > li:hover {
- background: #b8d3e0;
- color: black; }
-.awesomplete > ul > li[aria-selected="true"] {
- background: #3d6d8f;
- color: white; }
-.awesomplete mark {
- background: #eaff00; }
-.awesomplete li:hover mark {
- background: #b5d100; }
-.awesomplete li[aria-selected="true"] mark {
- background: #3d6b00;
- color: inherit; }
-.flatpickr-calendar {
- background: transparent;
- overflow: hidden;
- max-height: 0;
- opacity: 0;
- visibility: hidden;
- text-align: center;
- padding: 0;
- -webkit-animation: none;
- animation: none;
- direction: ltr;
- border: 0;
- display: none;
- font-size: 14px;
- line-height: 24px;
- border-radius: 5px;
- position: absolute;
- width: 307.875px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- background: #fff;
- -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0, 0, 0, 0.08);
- box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0, 0, 0, 0.08); }
-.flatpickr-calendar.open, .flatpickr-calendar.inline {
- opacity: 1;
- visibility: visible;
- overflow: visible;
- max-height: 640px; }
-.flatpickr-calendar.open {
- display: inline-block;
- z-index: 99999; }
-.flatpickr-calendar.animate.open {
- -webkit-animation: fpFadeInDown 200ms cubic-bezier(0.23, 1, 0.32, 1);
- animation: fpFadeInDown 200ms cubic-bezier(0.23, 1, 0.32, 1); }
-.flatpickr-calendar.inline {
- display: block;
- position: relative;
- top: 2px; }
-.flatpickr-calendar.static {
- position: absolute;
- top: calc(100% + 2px); }
-.flatpickr-calendar.static.open {
- z-index: 999;
- display: block; }
-.flatpickr-calendar.hasWeeks {
- width: auto; }
-.flatpickr-calendar .hasWeeks .dayContainer, .flatpickr-calendar .hasTime .dayContainer {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0; }
-.flatpickr-calendar .hasWeeks .dayContainer {
- border-left: 0; }
-.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time {
- height: 40px;
- border-top: 1px solid #e6e6e6; }
-.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
- height: auto; }
-.flatpickr-calendar:before, .flatpickr-calendar:after {
- position: absolute;
- display: block;
- pointer-events: none;
- border: solid transparent;
- content: '';
- height: 0;
- width: 0;
- left: 22px; }
-.flatpickr-calendar.rightMost:before, .flatpickr-calendar.rightMost:after {
- left: auto;
- right: 22px; }
-.flatpickr-calendar:before {
- border-width: 5px;
- margin: 0 -5px; }
-.flatpickr-calendar:after {
- border-width: 4px;
- margin: 0 -4px; }
-.flatpickr-calendar.arrowTop:before, .flatpickr-calendar.arrowTop:after {
- bottom: 100%; }
-.flatpickr-calendar.arrowTop:before {
- border-bottom-color: #e6e6e6; }
-.flatpickr-calendar.arrowTop:after {
- border-bottom-color: #fff; }
-.flatpickr-calendar.arrowBottom:before, .flatpickr-calendar.arrowBottom:after {
- top: 100%; }
-.flatpickr-calendar.arrowBottom:before {
- border-top-color: #e6e6e6; }
-.flatpickr-calendar.arrowBottom:after {
- border-top-color: #fff; }
-.flatpickr-calendar:focus {
- outline: 0; }
-.flatpickr-wrapper {
- position: relative;
- display: inline-block; }
-.flatpickr-month {
- background: transparent;
- color: rgba(0, 0, 0, 0.9);
- fill: rgba(0, 0, 0, 0.9);
- height: 28px;
- line-height: 1;
- text-align: center;
- position: relative;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- overflow: hidden; }
-.flatpickr-prev-month, .flatpickr-next-month {
- text-decoration: none;
- cursor: pointer;
- position: absolute;
- top: 0px;
- line-height: 16px;
- height: 28px;
- padding: 10px calc(3.57% - 1.5px);
- z-index: 3; }
-.flatpickr-prev-month i, .flatpickr-next-month i {
- position: relative; }
-.flatpickr-prev-month.flatpickr-prev-month, .flatpickr-next-month.flatpickr-prev-month {
- /*
- /*rtl:begin:ignore*/
- /*
- */
- left: 0;
- /*
- /*rtl:end:ignore*/
- /*
- */ }
-/*
- /*rtl:begin:ignore*/
-/*
- /*rtl:end:ignore*/
-.flatpickr-prev-month.flatpickr-next-month, .flatpickr-next-month.flatpickr-next-month {
- /*
- /*rtl:begin:ignore*/
- /*
- */
- right: 0;
- /*
- /*rtl:end:ignore*/
- /*
- */ }
-/*
- /*rtl:begin:ignore*/
-/*
- /*rtl:end:ignore*/
-.flatpickr-prev-month:hover, .flatpickr-next-month:hover {
- color: #959ea9; }
-.flatpickr-prev-month:hover svg, .flatpickr-next-month:hover svg {
- fill: #f64747; }
-.flatpickr-prev-month svg, .flatpickr-next-month svg {
- width: 14px;
- height: 14px; }
-.flatpickr-prev-month svg path, .flatpickr-next-month svg path {
- -webkit-transition: fill 0.1s;
- transition: fill 0.1s;
- fill: inherit; }
-.numInputWrapper {
- position: relative;
- height: auto; }
-.numInputWrapper input, .numInputWrapper span {
- display: inline-block; }
-.numInputWrapper input {
- width: 100%; }
-.numInputWrapper input::-ms-clear {
- display: none; }
-.numInputWrapper span {
- position: absolute;
- right: 0;
- width: 14px;
- padding: 0 4px 0 2px;
- height: 50%;
- line-height: 50%;
- opacity: 0;
- cursor: pointer;
- border: 1px solid rgba(57, 57, 57, 0.15);
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.numInputWrapper span:hover {
- background: rgba(0, 0, 0, 0.1); }
-.numInputWrapper span:active {
- background: rgba(0, 0, 0, 0.2); }
-.numInputWrapper span:after {
- display: block;
- content: "";
- position: absolute; }
-.numInputWrapper span.arrowUp {
- top: 0;
- border-bottom: 0; }
-.numInputWrapper span.arrowUp:after {
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-bottom: 4px solid rgba(57, 57, 57, 0.6);
- top: 26%; }
-.numInputWrapper span.arrowDown {
- top: 50%; }
-.numInputWrapper span.arrowDown:after {
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 4px solid rgba(57, 57, 57, 0.6);
- top: 40%; }
-.numInputWrapper span svg {
- width: inherit;
- height: auto; }
-.numInputWrapper span svg path {
- fill: rgba(0, 0, 0, 0.5); }
-.numInputWrapper:hover {
- background: rgba(0, 0, 0, 0.05); }
-.numInputWrapper:hover span {
- opacity: 1; }
-.flatpickr-current-month {
- font-size: 135%;
- line-height: inherit;
- font-weight: 300;
- color: inherit;
- position: absolute;
- width: 75%;
- left: 12.5%;
- padding: 6.16px 0 0 0;
- line-height: 1;
- height: 28px;
- display: inline-block;
- text-align: center;
- -webkit-transform: translate3d(0px, 0px, 0px);
- transform: translate3d(0px, 0px, 0px); }
-.flatpickr-current-month span.cur-month {
- font-family: inherit;
- font-weight: 700;
- color: inherit;
- display: inline-block;
- margin-left: 0.5ch;
- padding: 0; }
-.flatpickr-current-month span.cur-month:hover {
- background: rgba(0, 0, 0, 0.05); }
-.flatpickr-current-month .numInputWrapper {
- width: 6ch;
- width: 7ch\0;
- display: inline-block; }
-.flatpickr-current-month .numInputWrapper span.arrowUp:after {
- border-bottom-color: rgba(0, 0, 0, 0.9); }
-.flatpickr-current-month .numInputWrapper span.arrowDown:after {
- border-top-color: rgba(0, 0, 0, 0.9); }
-.flatpickr-current-month input.cur-year {
- background: transparent;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- color: inherit;
- cursor: text;
- padding: 0 0 0 0.5ch;
- margin: 0;
- display: inline-block;
- font-size: inherit;
- font-family: inherit;
- font-weight: 300;
- line-height: inherit;
- height: auto;
- border: 0;
- border-radius: 0;
- vertical-align: initial; }
-.flatpickr-current-month input.cur-year:focus {
- outline: 0; }
-.flatpickr-current-month input.cur-year[disabled], .flatpickr-current-month input.cur-year[disabled]:hover {
- font-size: 100%;
- color: rgba(0, 0, 0, 0.5);
- background: transparent;
- pointer-events: none; }
-.flatpickr-weekdays {
- background: transparent;
- text-align: center;
- overflow: hidden;
- width: 100%;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- height: 28px; }
-span.flatpickr-weekday {
- cursor: default;
- font-size: 90%;
- background: transparent;
- color: rgba(0, 0, 0, 0.54);
- line-height: 1;
- margin: 0;
- text-align: center;
- display: block;
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1;
- font-weight: bolder; }
-.dayContainer, .flatpickr-weeks {
- padding: 1px 0 0 0; }
-.flatpickr-days {
- position: relative;
- overflow: hidden;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- width: 307.875px; }
-.flatpickr-days:focus {
- outline: 0; }
-.dayContainer {
- padding: 0;
- outline: 0;
- text-align: left;
- width: 307.875px;
- min-width: 307.875px;
- max-width: 307.875px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- display: inline-block;
- display: -ms-flexbox;
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -ms-flex-wrap: wrap;
- -ms-flex-pack: justify;
- justify-content: space-around;
- -webkit-transform: translate3d(0px, 0px, 0px);
- transform: translate3d(0px, 0px, 0px);
- opacity: 1; }
-.flatpickr-day {
- background: none;
- border: 1px solid transparent;
- border-radius: 150px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- color: #393939;
- cursor: pointer;
- font-weight: 400;
- width: 14.2857143%;
- -ms-flex-preferred-size: 14.2857143%;
- flex-basis: 14.2857143%;
- max-width: 39px;
- height: 39px;
- line-height: 39px;
- margin: 0;
- display: inline-block;
- position: relative;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- text-align: center; }
-.flatpickr-day.inRange, .flatpickr-day.prevMonthDay.inRange, .flatpickr-day.nextMonthDay.inRange, .flatpickr-day.today.inRange, .flatpickr-day.prevMonthDay.today.inRange, .flatpickr-day.nextMonthDay.today.inRange, .flatpickr-day:hover, .flatpickr-day.prevMonthDay:hover, .flatpickr-day.nextMonthDay:hover, .flatpickr-day:focus, .flatpickr-day.prevMonthDay:focus, .flatpickr-day.nextMonthDay:focus {
- cursor: pointer;
- outline: 0;
- background: #e6e6e6;
- border-color: #e6e6e6; }
-.flatpickr-day.today {
- border-color: #959ea9; }
-.flatpickr-day.today:hover, .flatpickr-day.today:focus {
- border-color: #959ea9;
- background: #959ea9;
- color: #fff; }
-.flatpickr-day.selected, .flatpickr-day.startRange, .flatpickr-day.endRange, .flatpickr-day.selected.inRange, .flatpickr-day.startRange.inRange, .flatpickr-day.endRange.inRange, .flatpickr-day.selected:focus, .flatpickr-day.startRange:focus, .flatpickr-day.endRange:focus, .flatpickr-day.selected:hover, .flatpickr-day.startRange:hover, .flatpickr-day.endRange:hover, .flatpickr-day.selected.prevMonthDay, .flatpickr-day.startRange.prevMonthDay, .flatpickr-day.endRange.prevMonthDay, .flatpickr-day.selected.nextMonthDay, .flatpickr-day.startRange.nextMonthDay, .flatpickr-day.endRange.nextMonthDay {
- background: #569ff7;
- -webkit-box-shadow: none;
- box-shadow: none;
- color: #fff;
- border-color: #569ff7; }
-.flatpickr-day.selected.startRange, .flatpickr-day.startRange.startRange, .flatpickr-day.endRange.startRange {
- border-radius: 50px 0 0 50px; }
-.flatpickr-day.selected.endRange, .flatpickr-day.startRange.endRange, .flatpickr-day.endRange.endRange {
- border-radius: 0 50px 50px 0; }
-.flatpickr-day.selected.startRange + .endRange, .flatpickr-day.startRange.startRange + .endRange, .flatpickr-day.endRange.startRange + .endRange {
- -webkit-box-shadow: -10px 0 0 #569ff7;
- box-shadow: -10px 0 0 #569ff7; }
-.flatpickr-day.selected.startRange.endRange, .flatpickr-day.startRange.startRange.endRange, .flatpickr-day.endRange.startRange.endRange {
- border-radius: 50px; }
-.flatpickr-day.inRange {
- border-radius: 0;
- -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
- box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6; }
-.flatpickr-day.disabled, .flatpickr-day.disabled:hover, .flatpickr-day.prevMonthDay, .flatpickr-day.nextMonthDay, .flatpickr-day.notAllowed, .flatpickr-day.notAllowed.prevMonthDay, .flatpickr-day.notAllowed.nextMonthDay {
- color: rgba(57, 57, 57, 0.3);
- background: transparent;
- border-color: transparent;
- cursor: default; }
-.flatpickr-day.disabled, .flatpickr-day.disabled:hover {
- cursor: not-allowed;
- color: rgba(57, 57, 57, 0.1); }
-.flatpickr-day.week.selected {
- border-radius: 0;
- -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
- box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7; }
-.rangeMode .flatpickr-day {
- margin-top: 1px; }
-.flatpickr-weekwrapper {
- display: inline-block;
- float: left; }
-.flatpickr-weekwrapper .flatpickr-weeks {
- padding: 0 12px;
- -webkit-box-shadow: 1px 0 0 #e6e6e6;
- box-shadow: 1px 0 0 #e6e6e6; }
-.flatpickr-weekwrapper .flatpickr-weekday {
- float: none;
- width: 100%;
- line-height: 28px; }
-.flatpickr-weekwrapper span.flatpickr-day, .flatpickr-weekwrapper span.flatpickr-day:hover {
- display: block;
- width: 100%;
- max-width: none;
- color: rgba(57, 57, 57, 0.3);
- background: transparent;
- cursor: default;
- border: none; }
-.flatpickr-innerContainer {
- display: block;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- overflow: hidden; }
-.flatpickr-rContainer {
- display: inline-block;
- padding: 0;
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.flatpickr-time {
- text-align: center;
- outline: 0;
- display: block;
- height: 0;
- line-height: 40px;
- max-height: 40px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- overflow: hidden;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex; }
-.flatpickr-time:after {
- content: "";
- display: table;
- clear: both; }
-.flatpickr-time .numInputWrapper {
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1;
- width: 40%;
- height: 40px;
- float: left; }
-.flatpickr-time .numInputWrapper span.arrowUp:after {
- border-bottom-color: #393939; }
-.flatpickr-time .numInputWrapper span.arrowDown:after {
- border-top-color: #393939; }
-.flatpickr-time.hasSeconds .numInputWrapper {
- width: 26%; }
-.flatpickr-time.time24hr .numInputWrapper {
- width: 49%; }
-.flatpickr-time input {
- background: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
- border: 0;
- border-radius: 0;
- text-align: center;
- margin: 0;
- padding: 0;
- height: inherit;
- line-height: inherit;
- cursor: pointer;
- color: #393939;
- font-size: 14px;
- position: relative;
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.flatpickr-time input.flatpickr-hour {
- font-weight: bold; }
-.flatpickr-time input.flatpickr-minute, .flatpickr-time input.flatpickr-second {
- font-weight: 400; }
-.flatpickr-time input:focus {
- outline: 0;
- border: 0; }
-.flatpickr-time .flatpickr-time-separator, .flatpickr-time .flatpickr-am-pm {
- height: inherit;
- display: inline-block;
- float: left;
- line-height: inherit;
- color: #393939;
- font-weight: bold;
- width: 2%;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- align-self: center; }
-.flatpickr-time .flatpickr-am-pm {
- outline: 0;
- width: 18%;
- cursor: pointer;
- text-align: center;
- font-weight: 400; }
-.flatpickr-time .flatpickr-am-pm:hover, .flatpickr-time .flatpickr-am-pm:focus {
- background: #f0f0f0; }
-.flatpickr-input[readonly] {
- cursor: pointer; }
-@-webkit-keyframes fpFadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0); }
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); } }
-@keyframes fpFadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0); }
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); } }
-.flatpickr-calendar {
- background: transparent;
- overflow: hidden;
- max-height: 0;
- opacity: 0;
- visibility: hidden;
- text-align: center;
- padding: 0;
- -webkit-animation: none;
- animation: none;
- direction: ltr;
- border: 0;
- display: none;
- font-size: 14px;
- line-height: 24px;
- border-radius: 5px;
- position: absolute;
- width: 307.875px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- -ms-touch-action: manipulation;
- touch-action: manipulation;
- background: #fff;
- -webkit-box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0, 0, 0, 0.08);
- box-shadow: 1px 0 0 #eee, -1px 0 0 #eee, 0 1px 0 #eee, 0 -1px 0 #eee, 0 3px 13px rgba(0, 0, 0, 0.08); }
-.flatpickr-calendar.open, .flatpickr-calendar.inline {
- opacity: 1;
- visibility: visible;
- overflow: visible;
- max-height: 640px; }
-.flatpickr-calendar.open {
- display: inline-block;
- z-index: 99999; }
-.flatpickr-calendar.animate.open {
- -webkit-animation: fpFadeInDown 200ms cubic-bezier(0.23, 1, 0.32, 1);
- animation: fpFadeInDown 200ms cubic-bezier(0.23, 1, 0.32, 1); }
-.flatpickr-calendar.inline {
- display: block;
- position: relative;
- top: 2px; }
-.flatpickr-calendar.static {
- position: absolute;
- top: calc(100% + 2px); }
-.flatpickr-calendar.static.open {
- z-index: 999;
- display: block; }
-.flatpickr-calendar.hasWeeks {
- width: auto; }
-.flatpickr-calendar .hasWeeks .dayContainer, .flatpickr-calendar .hasTime .dayContainer {
- border-bottom: 0;
- border-bottom-right-radius: 0;
- border-bottom-left-radius: 0; }
-.flatpickr-calendar .hasWeeks .dayContainer {
- border-left: 0; }
-.flatpickr-calendar.showTimeInput.hasTime .flatpickr-time {
- height: 40px;
- border-top: 1px solid #eee; }
-.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
- height: auto; }
-.flatpickr-calendar:before, .flatpickr-calendar:after {
- position: absolute;
- display: block;
- pointer-events: none;
- border: solid transparent;
- content: '';
- height: 0;
- width: 0;
- left: 22px; }
-.flatpickr-calendar.rightMost:before, .flatpickr-calendar.rightMost:after {
- left: auto;
- right: 22px; }
-.flatpickr-calendar:before {
- border-width: 5px;
- margin: 0 -5px; }
-.flatpickr-calendar:after {
- border-width: 4px;
- margin: 0 -4px; }
-.flatpickr-calendar.arrowTop:before, .flatpickr-calendar.arrowTop:after {
- bottom: 100%; }
-.flatpickr-calendar.arrowTop:before {
- border-bottom-color: #eee; }
-.flatpickr-calendar.arrowTop:after {
- border-bottom-color: #fff; }
-.flatpickr-calendar.arrowBottom:before, .flatpickr-calendar.arrowBottom:after {
- top: 100%; }
-.flatpickr-calendar.arrowBottom:before {
- border-top-color: #eee; }
-.flatpickr-calendar.arrowBottom:after {
- border-top-color: #fff; }
-.flatpickr-calendar:focus {
- outline: 0; }
-.flatpickr-wrapper {
- position: relative;
- display: inline-block; }
-.flatpickr-month {
- background: transparent;
- color: #3c3f40;
- fill: #3c3f40;
- height: 28px;
- line-height: 1;
- text-align: center;
- position: relative;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- overflow: hidden; }
-.flatpickr-prev-month, .flatpickr-next-month {
- text-decoration: none;
- cursor: pointer;
- position: absolute;
- top: 0px;
- line-height: 16px;
- height: 28px;
- padding: 10px calc(3.57% - 1.5px);
- z-index: 3; }
-.flatpickr-prev-month i, .flatpickr-next-month i {
- position: relative; }
-.flatpickr-prev-month.flatpickr-prev-month, .flatpickr-next-month.flatpickr-prev-month {
- /*
- /*rtl:begin:ignore*/
- /*
- */
- left: 0;
- /*
- /*rtl:end:ignore*/
- /*
- */ }
-/*
- /*rtl:begin:ignore*/
-/*
- /*rtl:end:ignore*/
-.flatpickr-prev-month.flatpickr-next-month, .flatpickr-next-month.flatpickr-next-month {
- /*
- /*rtl:begin:ignore*/
- /*
- */
- right: 0;
- /*
- /*rtl:end:ignore*/
- /*
- */ }
-/*
- /*rtl:begin:ignore*/
-/*
- /*rtl:end:ignore*/
-.flatpickr-prev-month:hover, .flatpickr-next-month:hover {
- color: #f64747; }
-.flatpickr-prev-month:hover svg, .flatpickr-next-month:hover svg {
- fill: #f64747; }
-.flatpickr-prev-month svg, .flatpickr-next-month svg {
- width: 14px;
- height: 14px; }
-.flatpickr-prev-month svg path, .flatpickr-next-month svg path {
- -webkit-transition: fill 0.1s;
- transition: fill 0.1s;
- fill: inherit; }
-.numInputWrapper {
- position: relative;
- height: auto; }
-.numInputWrapper input, .numInputWrapper span {
- display: inline-block; }
-.numInputWrapper input {
- width: 100%; }
-.numInputWrapper input::-ms-clear {
- display: none; }
-.numInputWrapper span {
- position: absolute;
- right: 0;
- width: 14px;
- padding: 0 4px 0 2px;
- height: 50%;
- line-height: 50%;
- opacity: 0;
- cursor: pointer;
- border: 1px solid rgba(64, 72, 72, 0.15);
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.numInputWrapper span:hover {
- background: rgba(0, 0, 0, 0.1); }
-.numInputWrapper span:active {
- background: rgba(0, 0, 0, 0.2); }
-.numInputWrapper span:after {
- display: block;
- content: "";
- position: absolute; }
-.numInputWrapper span.arrowUp {
- top: 0;
- border-bottom: 0; }
-.numInputWrapper span.arrowUp:after {
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-bottom: 4px solid rgba(64, 72, 72, 0.6);
- top: 26%; }
-.numInputWrapper span.arrowDown {
- top: 50%; }
-.numInputWrapper span.arrowDown:after {
- border-left: 4px solid transparent;
- border-right: 4px solid transparent;
- border-top: 4px solid rgba(64, 72, 72, 0.6);
- top: 40%; }
-.numInputWrapper span svg {
- width: inherit;
- height: auto; }
-.numInputWrapper span svg path {
- fill: rgba(60, 63, 64, 0.5); }
-.numInputWrapper:hover {
- background: rgba(0, 0, 0, 0.05); }
-.numInputWrapper:hover span {
- opacity: 1; }
-.flatpickr-current-month {
- font-size: 135%;
- line-height: inherit;
- font-weight: 300;
- color: inherit;
- position: absolute;
- width: 75%;
- left: 12.5%;
- padding: 6.16px 0 0 0;
- line-height: 1;
- height: 28px;
- display: inline-block;
- text-align: center;
- -webkit-transform: translate3d(0px, 0px, 0px);
- transform: translate3d(0px, 0px, 0px); }
-.flatpickr-current-month span.cur-month {
- font-family: inherit;
- font-weight: 700;
- color: inherit;
- display: inline-block;
- margin-left: 0.5ch;
- padding: 0; }
-.flatpickr-current-month span.cur-month:hover {
- background: rgba(0, 0, 0, 0.05); }
-.flatpickr-current-month .numInputWrapper {
- width: 6ch;
- width: 7ch\0;
- display: inline-block; }
-.flatpickr-current-month .numInputWrapper span.arrowUp:after {
- border-bottom-color: #3c3f40; }
-.flatpickr-current-month .numInputWrapper span.arrowDown:after {
- border-top-color: #3c3f40; }
-.flatpickr-current-month input.cur-year {
- background: transparent;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- color: inherit;
- cursor: text;
- padding: 0 0 0 0.5ch;
- margin: 0;
- display: inline-block;
- font-size: inherit;
- font-family: inherit;
- font-weight: 300;
- line-height: inherit;
- height: auto;
- border: 0;
- border-radius: 0;
- vertical-align: initial; }
-.flatpickr-current-month input.cur-year:focus {
- outline: 0; }
-.flatpickr-current-month input.cur-year[disabled], .flatpickr-current-month input.cur-year[disabled]:hover {
- font-size: 100%;
- color: rgba(60, 63, 64, 0.5);
- background: transparent;
- pointer-events: none; }
-.flatpickr-weekdays {
- background: transparent;
- text-align: center;
- overflow: hidden;
- width: 100%;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- height: 28px; }
-span.flatpickr-weekday {
- cursor: default;
- font-size: 90%;
- background: transparent;
- color: rgba(0, 0, 0, 0.54);
- line-height: 1;
- margin: 0;
- text-align: center;
- display: block;
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1;
- font-weight: bolder; }
-.dayContainer, .flatpickr-weeks {
- padding: 1px 0 0 0; }
-.flatpickr-days {
- position: relative;
- overflow: hidden;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- width: 307.875px; }
-.flatpickr-days:focus {
- outline: 0; }
-.dayContainer {
- padding: 0;
- outline: 0;
- text-align: left;
- width: 307.875px;
- min-width: 307.875px;
- max-width: 307.875px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- display: inline-block;
- display: -ms-flexbox;
- display: -webkit-box;
- display: flex;
- flex-wrap: wrap;
- -ms-flex-wrap: wrap;
- -ms-flex-pack: justify;
- justify-content: space-around;
- -webkit-transform: translate3d(0px, 0px, 0px);
- transform: translate3d(0px, 0px, 0px);
- opacity: 1; }
-.flatpickr-day {
- background: none;
- border: 1px solid transparent;
- border-radius: 150px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- color: #404848;
- cursor: pointer;
- font-weight: 400;
- width: 14.2857143%;
- -ms-flex-preferred-size: 14.2857143%;
- flex-basis: 14.2857143%;
- max-width: 39px;
- height: 39px;
- line-height: 39px;
- margin: 0;
- display: inline-block;
- position: relative;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- text-align: center; }
-.flatpickr-day.inRange, .flatpickr-day.prevMonthDay.inRange, .flatpickr-day.nextMonthDay.inRange, .flatpickr-day.today.inRange, .flatpickr-day.prevMonthDay.today.inRange, .flatpickr-day.nextMonthDay.today.inRange, .flatpickr-day:hover, .flatpickr-day.prevMonthDay:hover, .flatpickr-day.nextMonthDay:hover, .flatpickr-day:focus, .flatpickr-day.prevMonthDay:focus, .flatpickr-day.nextMonthDay:focus {
- cursor: pointer;
- outline: 0;
- background: #e9e9e9;
- border-color: #e9e9e9; }
-.flatpickr-day.today {
- border-color: #f64747; }
-.flatpickr-day.today:hover, .flatpickr-day.today:focus {
- border-color: #f64747;
- background: #f64747;
- color: #fff; }
-.flatpickr-day.selected, .flatpickr-day.startRange, .flatpickr-day.endRange, .flatpickr-day.selected.inRange, .flatpickr-day.startRange.inRange, .flatpickr-day.endRange.inRange, .flatpickr-day.selected:focus, .flatpickr-day.startRange:focus, .flatpickr-day.endRange:focus, .flatpickr-day.selected:hover, .flatpickr-day.startRange:hover, .flatpickr-day.endRange:hover, .flatpickr-day.selected.prevMonthDay, .flatpickr-day.startRange.prevMonthDay, .flatpickr-day.endRange.prevMonthDay, .flatpickr-day.selected.nextMonthDay, .flatpickr-day.startRange.nextMonthDay, .flatpickr-day.endRange.nextMonthDay {
- background: #4f99ff;
- -webkit-box-shadow: none;
- box-shadow: none;
- color: #fff;
- border-color: #4f99ff; }
-.flatpickr-day.selected.startRange, .flatpickr-day.startRange.startRange, .flatpickr-day.endRange.startRange {
- border-radius: 50px 0 0 50px; }
-.flatpickr-day.selected.endRange, .flatpickr-day.startRange.endRange, .flatpickr-day.endRange.endRange {
- border-radius: 0 50px 50px 0; }
-.flatpickr-day.selected.startRange + .endRange, .flatpickr-day.startRange.startRange + .endRange, .flatpickr-day.endRange.startRange + .endRange {
- -webkit-box-shadow: -10px 0 0 #4f99ff;
- box-shadow: -10px 0 0 #4f99ff; }
-.flatpickr-day.selected.startRange.endRange, .flatpickr-day.startRange.startRange.endRange, .flatpickr-day.endRange.startRange.endRange {
- border-radius: 50px; }
-.flatpickr-day.inRange {
- border-radius: 0;
- -webkit-box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9;
- box-shadow: -5px 0 0 #e9e9e9, 5px 0 0 #e9e9e9; }
-.flatpickr-day.disabled, .flatpickr-day.disabled:hover, .flatpickr-day.prevMonthDay, .flatpickr-day.nextMonthDay, .flatpickr-day.notAllowed, .flatpickr-day.notAllowed.prevMonthDay, .flatpickr-day.notAllowed.nextMonthDay {
- color: rgba(64, 72, 72, 0.3);
- background: transparent;
- border-color: #e9e9e9;
- cursor: default; }
-.flatpickr-day.disabled, .flatpickr-day.disabled:hover {
- cursor: not-allowed;
- color: rgba(64, 72, 72, 0.1); }
-.flatpickr-day.week.selected {
- border-radius: 0;
- -webkit-box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff;
- box-shadow: -5px 0 0 #4f99ff, 5px 0 0 #4f99ff; }
-.rangeMode .flatpickr-day {
- margin-top: 1px; }
-.flatpickr-weekwrapper {
- display: inline-block;
- float: left; }
-.flatpickr-weekwrapper .flatpickr-weeks {
- padding: 0 12px;
- -webkit-box-shadow: 1px 0 0 #eee;
- box-shadow: 1px 0 0 #eee; }
-.flatpickr-weekwrapper .flatpickr-weekday {
- float: none;
- width: 100%;
- line-height: 28px; }
-.flatpickr-weekwrapper span.flatpickr-day, .flatpickr-weekwrapper span.flatpickr-day:hover {
- display: block;
- width: 100%;
- max-width: none;
- color: rgba(64, 72, 72, 0.3);
- background: transparent;
- cursor: default;
- border: none; }
-.flatpickr-innerContainer {
- display: block;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- overflow: hidden; }
-.flatpickr-rContainer {
- display: inline-block;
- padding: 0;
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.flatpickr-time {
- text-align: center;
- outline: 0;
- display: block;
- height: 0;
- line-height: 40px;
- max-height: 40px;
- -webkit-box-sizing: border-box;
- box-sizing: border-box;
- overflow: hidden;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex; }
-.flatpickr-time:after {
- content: "";
- display: table;
- clear: both; }
-.flatpickr-time .numInputWrapper {
- -webkit-box-flex: 1;
- -ms-flex: 1;
- flex: 1;
- width: 40%;
- height: 40px;
- float: left; }
-.flatpickr-time .numInputWrapper span.arrowUp:after {
- border-bottom-color: #404848; }
-.flatpickr-time .numInputWrapper span.arrowDown:after {
- border-top-color: #404848; }
-.flatpickr-time.hasSeconds .numInputWrapper {
- width: 26%; }
-.flatpickr-time.time24hr .numInputWrapper {
- width: 49%; }
-.flatpickr-time input {
- background: transparent;
- -webkit-box-shadow: none;
- box-shadow: none;
- border: 0;
- border-radius: 0;
- text-align: center;
- margin: 0;
- padding: 0;
- height: inherit;
- line-height: inherit;
- cursor: pointer;
- color: #404848;
- font-size: 14px;
- position: relative;
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.flatpickr-time input.flatpickr-hour {
- font-weight: bold; }
-.flatpickr-time input.flatpickr-minute, .flatpickr-time input.flatpickr-second {
- font-weight: 400; }
-.flatpickr-time input:focus {
- outline: 0;
- border: 0; }
-.flatpickr-time .flatpickr-time-separator, .flatpickr-time .flatpickr-am-pm {
- height: inherit;
- display: inline-block;
- float: left;
- line-height: inherit;
- color: #404848;
- font-weight: bold;
- width: 2%;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- -webkit-align-self: center;
- -ms-flex-item-align: center;
- align-self: center; }
-.flatpickr-time .flatpickr-am-pm {
- outline: 0;
- width: 18%;
- cursor: pointer;
- text-align: center;
- font-weight: 400; }
-.flatpickr-time .flatpickr-am-pm:hover, .flatpickr-time .flatpickr-am-pm:focus {
- background: #f3f3f3; }
-.flatpickr-input[readonly] {
- cursor: pointer; }
-@-webkit-keyframes fpFadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0); }
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); } }
-@keyframes fpFadeInDown {
- from {
- opacity: 0;
- -webkit-transform: translate3d(0, -20px, 0);
- transform: translate3d(0, -20px, 0); }
- to {
- opacity: 1;
- -webkit-transform: translate3d(0, 0, 0);
- transform: translate3d(0, 0, 0); } }
-.flatpickr-calendar {
- width: 307.875px; }
-.dayContainer {
- padding: 0;
- border-right: 0; }
-span.flatpickr-day, span.flatpickr-day.prevMonthDay, span.flatpickr-day.nextMonthDay {
- border-radius: 0 !important;
- border: 1px solid #e9e9e9;
- max-width: none;
- border-right-color: transparent; }
-span.flatpickr-day:nth-child(n+8), span.flatpickr-day.prevMonthDay:nth-child(n+8), span.flatpickr-day.nextMonthDay:nth-child(n+8) {
- border-top-color: transparent; }
-span.flatpickr-day:nth-child(7n-6), span.flatpickr-day.prevMonthDay:nth-child(7n-6), span.flatpickr-day.nextMonthDay:nth-child(7n-6) {
- border-left: 0; }
-span.flatpickr-day:nth-child(n+36), span.flatpickr-day.prevMonthDay:nth-child(n+36), span.flatpickr-day.nextMonthDay:nth-child(n+36) {
- border-bottom: 0; }
-span.flatpickr-day:nth-child(-n+7), span.flatpickr-day.prevMonthDay:nth-child(-n+7), span.flatpickr-day.nextMonthDay:nth-child(-n+7) {
- margin-top: 0; }
-span.flatpickr-day.today:not(.selected), span.flatpickr-day.prevMonthDay.today:not(.selected), span.flatpickr-day.nextMonthDay.today:not(.selected) {
- border-color: #e9e9e9;
- border-right-color: transparent;
- border-top-color: transparent;
- border-bottom-color: #f64747; }
-span.flatpickr-day.today:not(.selected):hover, span.flatpickr-day.prevMonthDay.today:not(.selected):hover, span.flatpickr-day.nextMonthDay.today:not(.selected):hover {
- border: 1px solid #f64747; }
-span.flatpickr-day.startRange, span.flatpickr-day.prevMonthDay.startRange, span.flatpickr-day.nextMonthDay.startRange, span.flatpickr-day.endRange, span.flatpickr-day.prevMonthDay.endRange, span.flatpickr-day.nextMonthDay.endRange {
- border-color: #4f99ff; }
-span.flatpickr-day.today, span.flatpickr-day.prevMonthDay.today, span.flatpickr-day.nextMonthDay.today, span.flatpickr-day.selected, span.flatpickr-day.prevMonthDay.selected, span.flatpickr-day.nextMonthDay.selected {
- z-index: 2; }
-.rangeMode .flatpickr-day {
- margin-top: -1px; }
-.flatpickr-weekwrapper .flatpickr-weeks {
- -webkit-box-shadow: none;
- box-shadow: none; }
-.flatpickr-weekwrapper span.flatpickr-day {
- border: 0;
- margin: -1px 0 0 -1px; }
-.hasWeeks .flatpickr-days {
- border-right: 0; }
-/* BASICS */
-.CodeMirror {
- /* Set height, width, borders, and global font properties here */
- font-family: monospace;
- height: 300px;
- color: black;
- direction: ltr; }
-/* PADDING */
-.CodeMirror-lines {
- padding: 4px 0;
- /* Vertical padding around content */ }
-.CodeMirror pre {
- padding: 0 4px;
- /* Horizontal padding of content */ }
-.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- background-color: white;
- /* The little square between H and V scrollbars */ }
-/* GUTTER */
-.CodeMirror-gutters {
- border-right: 1px solid #ddd;
- background-color: #f7f7f7;
- white-space: nowrap; }
-.CodeMirror-linenumber {
- padding: 0 3px 0 5px;
- min-width: 20px;
- text-align: right;
- color: #999;
- white-space: nowrap; }
-.CodeMirror-guttermarker {
- color: black; }
-.CodeMirror-guttermarker-subtle {
- color: #999; }
-/* CURSOR */
-.CodeMirror-cursor {
- border-left: 1px solid black;
- border-right: none;
- width: 0; }
-/* Shown when moving in bi-directional text */
-.CodeMirror div.CodeMirror-secondarycursor {
- border-left: 1px solid silver; }
-.cm-fat-cursor .CodeMirror-cursor {
- width: auto;
- border: 0 !important;
- background: #7e7; }
-.cm-fat-cursor div.CodeMirror-cursors {
- z-index: 1; }
-.cm-fat-cursor-mark {
- background-color: rgba(20, 255, 20, 0.5);
- -webkit-animation: blink 1.06s steps(1) infinite;
- animation: blink 1.06s steps(1) infinite; }
-.cm-animate-fat-cursor {
- width: auto;
- border: 0;
- -webkit-animation: blink 1.06s steps(1) infinite;
- animation: blink 1.06s steps(1) infinite;
- background-color: #7e7; }
-@-webkit-keyframes blink {
- 0% { }
- 50% {
- background-color: transparent; }
- 100% { } }
-@keyframes blink {
- 0% { }
- 50% {
- background-color: transparent; }
- 100% { } }
-/* Can style cursor different in overwrite (non-insert) mode */
-.cm-tab {
- display: inline-block;
- text-decoration: inherit; }
-.CodeMirror-rulers {
- position: absolute;
- left: 0;
- right: 0;
- top: -50px;
- bottom: -20px;
- overflow: hidden; }
-.CodeMirror-ruler {
- border-left: 1px solid #ccc;
- top: 0;
- bottom: 0;
- position: absolute; }
-/* DEFAULT THEME */
-.cm-s-default .cm-header {
- color: blue; }
-.cm-s-default .cm-quote {
- color: #090; }
-.cm-negative {
- color: #d44; }
-.cm-positive {
- color: #292; }
-.cm-header, .cm-strong {
- font-weight: bold; }
-.cm-em {
- font-style: italic; }
-.cm-link {
- text-decoration: underline; }
-.cm-strikethrough {
- text-decoration: line-through; }
-.cm-s-default .cm-keyword {
- color: #708; }
-.cm-s-default .cm-atom {
- color: #219; }
-.cm-s-default .cm-number {
- color: #164; }
-.cm-s-default .cm-def {
- color: #00f; }
-.cm-s-default .cm-variable-2 {
- color: #05a; }
-.cm-s-default .cm-variable-3, .cm-s-default .cm-type {
- color: #085; }
-.cm-s-default .cm-comment {
- color: #a50; }
-.cm-s-default .cm-string {
- color: #a11; }
-.cm-s-default .cm-string-2 {
- color: #f50; }
-.cm-s-default .cm-meta {
- color: #555; }
-.cm-s-default .cm-qualifier {
- color: #555; }
-.cm-s-default .cm-builtin {
- color: #30a; }
-.cm-s-default .cm-bracket {
- color: #997; }
-.cm-s-default .cm-tag {
- color: #170; }
-.cm-s-default .cm-attribute {
- color: #00c; }
-.cm-s-default .cm-hr {
- color: #999; }
-.cm-s-default .cm-link {
- color: #00c; }
-.cm-s-default .cm-error {
- color: #f00; }
-.cm-invalidchar {
- color: #f00; }
-.CodeMirror-composing {
- border-bottom: 2px solid; }
-/* Default styles for common addons */
-div.CodeMirror span.CodeMirror-matchingbracket {
- color: #0b0; }
-div.CodeMirror span.CodeMirror-nonmatchingbracket {
- color: #a22; }
-.CodeMirror-matchingtag {
- background: rgba(255, 150, 0, 0.3); }
-.CodeMirror-activeline-background {
- background: #e8f2ff; }
-/* STOP */
-/* The rest of this file contains styles related to the mechanics of
- the editor. You probably shouldn't touch them. */
-.CodeMirror {
- position: relative;
- overflow: hidden;
- background: white; }
-.CodeMirror-scroll {
- overflow: scroll !important;
- /* Things will break if this is overridden */
- /* 30px is the magic margin used to hide the element's real scrollbars */
- /* See overflow: hidden in .CodeMirror */
- margin-bottom: -30px;
- margin-right: -30px;
- padding-bottom: 30px;
- height: 100%;
- outline: none;
- /* Prevent dragging from highlighting the element */
- position: relative; }
-.CodeMirror-sizer {
- position: relative;
- border-right: 30px solid transparent; }
-/* The fake, visible scrollbars. Used to force redraw during scrolling
- before actual scrolling happens, thus preventing shaking and
- flickering artifacts. */
-.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {
- position: absolute;
- z-index: 6;
- display: none; }
-.CodeMirror-vscrollbar {
- right: 0;
- top: 0;
- overflow-x: hidden;
- overflow-y: scroll; }
-.CodeMirror-hscrollbar {
- bottom: 0;
- left: 0;
- overflow-y: hidden;
- overflow-x: scroll; }
-.CodeMirror-scrollbar-filler {
- right: 0;
- bottom: 0; }
-.CodeMirror-gutter-filler {
- left: 0;
- bottom: 0; }
-.CodeMirror-gutters {
- position: absolute;
- left: 0;
- top: 0;
- min-height: 100%;
- z-index: 3; }
-.CodeMirror-gutter {
- white-space: normal;
- height: 100%;
- display: inline-block;
- vertical-align: top;
- margin-bottom: -30px; }
-.CodeMirror-gutter-wrapper {
- position: absolute;
- z-index: 4;
- background: none !important;
- border: none !important; }
-.CodeMirror-gutter-background {
- position: absolute;
- top: 0;
- bottom: 0;
- z-index: 4; }
-.CodeMirror-gutter-elt {
- position: absolute;
- cursor: default;
- z-index: 4; }
-.CodeMirror-gutter-wrapper ::-moz-selection {
- background-color: transparent; }
-.CodeMirror-gutter-wrapper ::selection {
- background-color: transparent; }
-.CodeMirror-gutter-wrapper ::-moz-selection {
- background-color: transparent; }
-.CodeMirror-lines {
- cursor: text;
- min-height: 1px;
- /* prevents collapsing before first draw */ }
-.CodeMirror pre {
- /* Reset some styles that the rest of the page might have set */
- border-radius: 0;
- border-width: 0;
- background: transparent;
- font-family: inherit;
- font-size: inherit;
- margin: 0;
- white-space: pre;
- word-wrap: normal;
- line-height: inherit;
- color: inherit;
- z-index: 2;
- position: relative;
- overflow: visible;
- -webkit-tap-highlight-color: transparent;
- -webkit-font-variant-ligatures: contextual;
- font-variant-ligatures: contextual; }
-.CodeMirror-wrap pre {
- word-wrap: break-word;
- white-space: pre-wrap;
- word-break: normal; }
-.CodeMirror-linebackground {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- z-index: 0; }
-.CodeMirror-linewidget {
- position: relative;
- z-index: 2;
- padding: 0.1px;
- /* Force widget margins to stay inside of the container */ }
-.CodeMirror-rtl pre {
- direction: rtl; }
-.CodeMirror-code {
- outline: none; }
-/* Force content-box sizing for the elements where we expect it */
-.CodeMirror-scroll, .CodeMirror-sizer, .CodeMirror-gutter, .CodeMirror-gutters, .CodeMirror-linenumber {
- -webkit-box-sizing: content-box;
- box-sizing: content-box; }
-.CodeMirror-measure {
- position: absolute;
- width: 100%;
- height: 0;
- overflow: hidden;
- visibility: hidden; }
-.CodeMirror-cursor {
- position: absolute;
- pointer-events: none; }
-.CodeMirror-measure pre {
- position: static; }
-div.CodeMirror-cursors {
- visibility: hidden;
- position: relative;
- z-index: 3; }
-div.CodeMirror-dragcursors {
- visibility: visible; }
-.CodeMirror-focused div.CodeMirror-cursors {
- visibility: visible; }
-.CodeMirror-selected {
- background: #d9d9d9; }
-.CodeMirror-focused .CodeMirror-selected {
- background: #d7d4f0; }
-.CodeMirror-crosshair {
- cursor: crosshair; }
-.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection {
- background: #d7d4f0; }
-.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection {
- background: #d7d4f0; }
-.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection {
- background: #d7d4f0; }
-.cm-searching {
- background-color: #ffa;
- background-color: rgba(255, 255, 0, 0.4); }
-/* Used to force a border model for a node */
-.cm-force-border {
- padding-right: .1px; }
-@media print {
- /* Hide the cursor when printing */
- .CodeMirror div.CodeMirror-cursors {
- visibility: hidden; } }
-/* See issue #2901 */
-.cm-tab-wrap-hack:after {
- content: ''; }
-/* Help users use markselection to safely style text background */
-span.CodeMirror-selectedtext {
- background: none; }
-.indicator, .indicator-right {
- background: none;
- vertical-align: middle; }
-.indicator::before, .indicator-right::after {
- content: '';
- display: inline-block;
- height: 8px;
- width: 8px;
- border-radius: 8px;
- background: #dee2e6; }
-.indicator::before {
- margin: 0 0.5rem 0 0; }
-.indicator-right::after {
- margin: 0 0 0 0.5rem; }
-.indicator.grey::before, .indicator-right.grey::after {
- background: #dee2e6; }
-.indicator.blue::before, .indicator-right.blue::after {
- background: #007bff; }
-.indicator.red::before, .indicator-right.red::after {
- background: #dc3545; }
-.indicator.green::before, .indicator-right.green::after {
- background: #28a745; }
-.indicator.orange::before, .indicator-right.orange::after {
- background: #fd7e14; }
-.indicator.purple::before, .indicator-right.purple::after {
- background: #6f42c1; }
-.indicator.darkgrey::before, .indicator-right.darkgrey::after {
- background: #6c757d; }
-.indicator.black::before, .indicator-right.black::after {
- background: #343a40; }
-.indicator.yellow::before, .indicator-right.yellow::after {
- background: #ffc107; }
-.modal-header .indicator {
- float: left;
- margin-top: 7.5px;
- margin-right: 3px; }
-html {
- font-size: 12px; }
-.desk-body {
- border-left: 1px solid #dee2e6;
- min-height: 100vh; }
-.desk-center {
- border-left: 1px solid #dee2e6; }
-.hide {
- display: none !important; }
-.page {
- padding-bottom: 2rem; }
-.page .page-nav {
- padding: 0.5rem 1rem;
- background-color: #f8f9fa;
- border-bottom: 1px solid #dee2e6; }
-.page .page-nav .btn {
- margin-left: 0.5rem; }
-.page .page-title {
- font-weight: bold;
- padding: 2rem;
- padding-bottom: 0; }
-.page .page-links {
- padding: 1rem 2rem; }
-.page .page-error {
- text-align: center;
- padding: 200px 0px; }
-.form-body {
- padding: 1rem 2rem; }
-.form-body .form-check {
- margin-bottom: 0.5rem; }
-.form-body .form-check .form-check-input {
- margin-top: 0.25rem; }
-.form-body .form-check .form-check-label {
- margin-left: 0.25rem; }
-.form-body .form-control.font-weight-bold {
- background-color: lightyellow; }
-.form-body .alert {
- margin-top: 1rem; }
-.form-inline .form-group {
- margin-right: 1rem;
- margin-bottom: 1rem; }
-.list-search {
- padding: 1rem 2rem; }
-.list-body .list-row {
- padding: 0.5rem 2rem;
- border-bottom: 1px solid #e9ecef;
- cursor: pointer; }
-.list-body .list-row .checkbox {
- margin-right: 0.5rem; }
-.list-body .list-row a, .list-body .list-row a:hover, .list-body .list-row a:visited, .list-body .list-row a:active {
- color: #343a40; }
-.list-body .list-row:hover {
- background-color: #f8f9fa; }
-.list-body .list-row.active {
- background-color: #e9ecef; }
-.dropdown-item {
- padding: 0.5rem 1rem; }
-.bottom-right-float {
- position: fixed;
- margin-bottom: 0px;
- bottom: 1rem;
- right: 1rem;
- max-width: 200px;
- padding: 0.5rem 1rem; }
-.desk-menu {
- background-color: #e9ecef; }
-.desk-menu .list-row {
- border-bottom: 1px solid #e9ecef; }
-.desk-menu .list-row:hover {
- background-color: #dee2e6; }
-.desk-menu .list-row.active {
- background-color: #ced4da; }
-.print-page {
- padding: 3rem;
- line-height: 1.8; }
-.print-page td, .print-page th {
- padding: 0.5rem; }
-.table-page-wrapper {
- width: 100%;
- padding: 1rem 2rem; }
-.filter-toolbar {
- padding: 1rem 2rem; }
-.table-wrapper {
- margin-top: 2rem;
- margin-bottom: 2rem; }
-.table-toolbar {
- margin-top: 0.5rem; }
-.CodeMirror {
- font-family: "SFMono-Regular",Consolas,"Liberation Mono",Menlo,Courier,monospace;
- border: 1px solid #dee2e6;
- border-radius: 0.25rem;
- padding: 0.5rem; }
-.awesomplete {
- display: block; }
-.awesomplete ul {
- max-height: 150px;
- overflow: auto; }
-.awesomplete > ul > li {
- padding: .75rem .375rem; }
-.awesomplete > ul > li:hover {
- background: #dee2e6;
- color: #212529; }
-.awesomplete > ul > li[aria-selected="true"] {
- background: #dee2e6;
- color: #212529; }
-.awesomplete > ul > li[aria-selected="true"]:hover {
- background: #dee2e6;
- color: #212529; }
-.awesomplete li[aria-selected="true"] mark, .awesomplete li[aria-selected="false"] mark {
- background: inherit;
- color: inherit;
- padding: 0px; }
-mark {
- padding: none;
- background: inherit; }
-.align-right {
- text-align: right; }
-.align-center {
- text-align: center; }
-.btn-sm, .btn-group-sm > .btn {
- margin: 0.25rem; }
-.vertical-margin {
- margin: 1rem 0px; }
-.tree-body {
- padding: 1rem 2rem; }
-f-tree-node {
- --tree-node-hover: #f8f9fa; }
-.datatable *, .datatable *::after, .datatable *::before {
- -webkit-box-sizing: border-box;
- box-sizing: border-box; }
-.datatable {
- position: relative;
- overflow: auto; }
-.dt-header {
- border-collapse: collapse;
- border-bottom: 1px solid #d1d8dd;
- position: absolute;
- top: 0;
- left: 0;
- background-color: #fff; }
-.dt-body {
- border-collapse: collapse; }
-.dt-scrollable {
- max-height: 40vw;
- overflow: auto;
- border-bottom: 1px solid #d1d8dd; }
-.dt-scrollable--highlight-all {
- background-color: #fffce7; }
-.dt-scrollable__no-data {
- text-align: center;
- padding: 16px;
- padding: 1rem;
- border-left: 1px solid #d1d8dd;
- border-right: 1px solid #d1d8dd; }
-.dt-row--highlight {
- background-color: #fffce7; }
-.dt-row--unhighlight {
- background-color: #fff; }
-.dt-row--hide {
- display: none; }
-.dt-cell {
- border: 1px solid #d1d8dd;
- position: relative;
- outline: none;
- padding: 0; }
-.dt-cell__content {
- padding: 8px;
- padding: 0.5rem;
- border: 2px solid transparent;
- height: 100%;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
- text-overflow: ellipsis;
- white-space: nowrap;
- overflow: hidden; }
-.dt-cell__edit {
- display: none;
- padding: 8px;
- padding: 0.5rem;
- background-color: #fff;
- border: 2px solid #ffa00a;
- z-index: 1;
- height: 100%; }
-.dt-cell__resize-handle {
- opacity: 0;
- position: absolute;
- right: -3px;
- top: 0;
- width: 5px;
- height: 100%;
- cursor: col-resize;
- z-index: 1; }
-.dt-cell--editing .dt-cell__content {
- display: none; }
-.dt-cell--editing .dt-cell__edit {
- display: block; }
-.dt-cell--focus .dt-cell__content {
- border-color: #5292f7; }
-.dt-cell--highlight {
- background-color: #f5f7fa; }
-.dt-cell--dragging {
- background-color: #f5f7fa; }
-.dt-cell--header .dt-cell__content {
- padding-right: 16px;
- padding-right: 1rem;
- font-weight: bold; }
-.dt-cell--header:hover .dt-dropdown__toggle {
- opacity: 1; }
-.dt-cell--tree-close .dt-tree-node__toggle:before {
- content: '►'; }
-.dt-dropdown {
- position: absolute;
- right: 10px;
- display: -webkit-inline-box;
- display: -ms-inline-flexbox;
- display: inline-flex;
- vertical-align: top;
- text-align: left;
- font-weight: normal;
- cursor: pointer; }
-.dt-dropdown__toggle {
- opacity: 0; }
-.dt-dropdown__list {
- display: none;
- position: absolute;
- min-width: 128px;
- min-width: 8rem;
- top: 100%;
- right: 0;
- z-index: 1;
- background-color: #fff;
- border-radius: 3px;
- padding: 8px 0;
- padding: 0.5rem 0;
- -webkit-box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1);
- box-shadow: 0 2px 3px rgba(10, 10, 10, 0.1), 0 0 0 1px rgba(10, 10, 10, 0.1); }
-.dt-dropdown__list-item {
- padding: 8px 16px;
- padding: 0.5rem 1rem; }
-.dt-dropdown__list-item:hover {
- background-color: #f5f7fa; }
-.dt-dropdown--active .dt-dropdown__list {
- display: block; }
-.dt-tree-node {
- display: inline-block;
- position: relative; }
-.dt-tree-node__toggle {
- display: inline-block;
- position: absolute;
- font-size: 10px;
- padding: 0 4px;
- cursor: pointer; }
-.dt-tree-node__toggle:before {
- content: '▼'; }
-.dt-toast {
- position: absolute;
- bottom: 16px;
- bottom: 1rem;
- left: 50%;
- -webkit-transform: translateX(-50%);
- transform: translateX(-50%); }
-.dt-toast__message {
- display: inline-block;
- background-color: rgba(0, 0, 0, 0.8);
- color: #dfe2e5;
- border-radius: 3px;
- padding: 8px 16px;
- padding: 0.5rem 1rem; }
-.dt-input {
- outline: none;
- width: 100%;
- border: none;
- overflow: visible;
- font-family: inherit;
- font-size: inherit;
- line-height: inherit;
- margin: 0;
- padding: 0; }
-.dt-freeze {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: center;
- -ms-flex-pack: center;
- justify-content: center;
- -ms-flex-line-pack: center;
- align-content: center;
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- background-color: #f5f7fa;
- opacity: 0.5;
- font-size: 2em; }
-.dt-freeze__message {
- position: absolute;
- top: 50%;
- -webkit-transform: translateY(-50%);
- transform: translateY(-50%); }
-.dt-paste-target {
- position: fixed;
- left: -999em; }
-body.dt-resize {
- cursor: col-resize; }
-.dt-header {
- background-color: #e9ecef !important; }
-.dt-cell__edit {
- padding: 0px; }
-.dt-cell__edit input, .dt-cell__edit textarea {
- outline: none;
- border-radius: none;
- border: none;
- margin: none;
- padding: 0.5rem; }
-.dt-cell__edit input:focus, .dt-cell__edit textarea:focus {
- border: none;
- -webkit-box-shadow: none;
- box-shadow: none; }
-.dt-cell__edit .awesomplete > ul {
- position: fixed;
- left: auto;
- width: auto;
- min-width: 120px; }
-.dt-cell--highlight {
- background-color: #e9ecef; }
-.setup-container {
- margin: 40px auto;
- padding: 20px 0px;
- width: 450px;
- border: 1px solid #dee2e6;
- border-radius: 4px; }
-.setup-container h3 {
- text-align: center; }
-.setup-container .form-section {
- display: none; }
-.setup-container .form-section.active {
- display: block; }
-.setup-container .setup-link-area {
- margin: 0.25rem 2rem; }
-input[type=file] {
- width: 0.1px;
- height: 0.1px;
- opacity: 0;
- overflow: hidden;
- position: absolute;
- z-index: -1; }
-.was-validated input[type=file]:invalid + button {
- border-color: #dc3545; }
diff --git a/www/dist/js/bundle.js b/www/dist/js/bundle.js
deleted file mode 100644
index ac28bd50..00000000
--- a/www/dist/js/bundle.js
+++ /dev/null
@@ -1,67661 +0,0 @@
-var desk = (function () {
-'use strict';
-
-Array.prototype.equals = function( array ) {
- return this.length == array.length &&
- this.every( function(item,i) { return item == array[i] } );
-};
-
-var utils = {
- slug(str) {
- return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(letter, index) {
- return index == 0 ? letter.toLowerCase() : letter.toUpperCase();
- }).replace(/\s+/g, '');
- },
-
- getRandomString() {
- return Math.random().toString(36).substr(3);
- },
-
- async sleep(seconds) {
- return new Promise(resolve => {
- setTimeout(resolve, seconds * 1000);
- });
- },
-
- _(text, args) {
- // should return translated text
- return this.stringReplace(text, args);
- },
-
- stringReplace(str, args) {
- if (!Array.isArray(args)) {
- args = [args];
- }
-
- if(str==undefined) return str;
-
- let unkeyed_index = 0;
- return str.replace(/\{(\w*)\}/g, (match, key) => {
- if (key === '') {
- key = unkeyed_index;
- unkeyed_index++;
- }
- if (key == +key) {
- return args[key] !== undefined
- ? args[key]
- : match;
- }
- });
- },
-
- getQueryString(params) {
- if (!params) return '';
- let parts = [];
- for (let key in params) {
- if (key!=null && params[key]!=null) {
- parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(params[key]));
- }
- }
- return parts.join('&');
- },
-
- asyncHandler(fn) {
- return (req, res, next) => Promise.resolve(fn(req, res, next))
- .catch((err) => {
- console.log(err);
- // handle error
- res.status(err.status_code || 500).send({error: err.message});
- });
- },
-
- /**
- * Returns array from 0 to n - 1
- * @param {Number} n
- */
- range(n) {
- return Array.from(Array(4)).map((d, i) => i)
- },
-
- unique(list, key = it => it) {
- var seen = {};
- return list.filter(item => {
- var k = key(item);
- return seen.hasOwnProperty(k) ? false : (seen[k] = true);
- });
- }
-};
-
-const number_formats = {
- "#,###.##": { fraction_sep: ".", group_sep: ",", precision: 2 },
- "#.###,##": { fraction_sep: ",", group_sep: ".", precision: 2 },
- "# ###.##": { fraction_sep: ".", group_sep: " ", precision: 2 },
- "# ###,##": { fraction_sep: ",", group_sep: " ", precision: 2 },
- "#'###.##": { fraction_sep: ".", group_sep: "'", precision: 2 },
- "#, ###.##": { fraction_sep: ".", group_sep: ", ", precision: 2 },
- "#,##,###.##": { fraction_sep: ".", group_sep: ",", precision: 2 },
- "#,###.###": { fraction_sep: ".", group_sep: ",", precision: 3 },
- "#.###": { fraction_sep: "", group_sep: ".", precision: 0 },
- "#,###": { fraction_sep: "", group_sep: ",", precision: 0 },
-};
-
-var number_format = {
- // parse a formatted number string
- // from "4,555,000.34" -> 4555000.34
- parse_number(number, format='#,###.##') {
- if (!number) {
- return 0;
- }
- if (typeof number === 'number') {
- return number;
- }
- const info = this.get_format_info(format);
- return parseFloat(this.remove_separator(number, info.group_sep));
- },
-
- format_number(number, format = '#,###.##', precision = null) {
- if (!number) {
- number = 0;
- }
- let info = this.get_format_info(format);
- if (precision) {
- info.precision = precision;
- }
- let is_negative = false;
-
- number = this.parse_number(number);
- if (number < 0) {
- is_negative = true;
- }
- number = Math.abs(number);
- number = number.toFixed(info.precision);
-
- var parts = number.split('.');
-
- // get group position and parts
- var group_position = info.group_sep ? 3 : 0;
-
- if (group_position) {
- var integer = parts[0];
- var str = '';
- var offset = integer.length % group_position;
- for (var i = integer.length; i >= 0; i--) {
- var l = this.remove_separator(str, info.group_sep).length;
- if (format == "#,##,###.##" && str.indexOf(",") != -1) { // INR
- group_position = 2;
- l += 1;
- }
-
- str += integer.charAt(i);
-
- if (l && !((l + 1) % group_position) && i != 0) {
- str += info.group_sep;
- }
- }
- parts[0] = str.split("").reverse().join("");
- }
- if (parts[0] + "" == "") {
- parts[0] = "0";
- }
-
- // join decimal
- parts[1] = (parts[1] && info.fraction_sep) ? (info.fraction_sep + parts[1]) : "";
-
- // join
- return (is_negative ? "-" : "") + parts[0] + parts[1];
- },
-
- get_format_info(format) {
- let format_info = number_formats[format];
-
- if (!format_info) {
- throw `Unknown number format "${format}"`;
- }
-
- return format_info;
- },
-
- round(num, precision) {
- var is_negative = num < 0 ? true : false;
- var d = parseInt(precision || 0);
- var m = Math.pow(10, d);
- var n = +(d ? Math.abs(num) * m : Math.abs(num)).toFixed(8); // Avoid rounding errors
- var i = Math.floor(n), f = n - i;
- var r = ((!precision && f == 0.5) ? ((i % 2 == 0) ? i : i + 1) : Math.round(n));
- r = d ? r / m : r;
- return is_negative ? -r : r;
- },
-
- remove_separator(text, sep) {
- return text.replace(new RegExp(sep === "." ? "\\." : sep, "g"), '');
- }
-};
-
-var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
-
-function commonjsRequire () {
- throw new Error('Dynamic requires are not currently supported by rollup-plugin-commonjs');
-}
-
-function unwrapExports (x) {
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
-}
-
-function createCommonjsModule(fn, module) {
- return module = { exports: {} }, fn(module, module.exports), module.exports;
-}
-
-var showdown = createCommonjsModule(function (module) {
-/*! showdown v 1.8.6 - 22-12-2017 */
-(function(){
-/**
- * Created by Tivie on 13-07-2015.
- */
-
-function getDefaultOpts (simple) {
- var defaultOptions = {
- omitExtraWLInCodeBlocks: {
- defaultValue: false,
- describe: 'Omit the default extra whiteline added to code blocks',
- type: 'boolean'
- },
- noHeaderId: {
- defaultValue: false,
- describe: 'Turn on/off generated header id',
- type: 'boolean'
- },
- prefixHeaderId: {
- defaultValue: false,
- describe: 'Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic \'section-\' prefix',
- type: 'string'
- },
- rawPrefixHeaderId: {
- defaultValue: false,
- describe: 'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the " char is used in the prefix)',
- type: 'boolean'
- },
- ghCompatibleHeaderId: {
- defaultValue: false,
- describe: 'Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)',
- type: 'boolean'
- },
- rawHeaderId: {
- defaultValue: false,
- describe: 'Remove only spaces, \' and " from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids',
- type: 'boolean'
- },
- headerLevelStart: {
- defaultValue: false,
- describe: 'The header blocks level start',
- type: 'integer'
- },
- parseImgDimensions: {
- defaultValue: false,
- describe: 'Turn on/off image dimension parsing',
- type: 'boolean'
- },
- simplifiedAutoLink: {
- defaultValue: false,
- describe: 'Turn on/off GFM autolink style',
- type: 'boolean'
- },
- excludeTrailingPunctuationFromURLs: {
- defaultValue: false,
- describe: 'Excludes trailing punctuation from links generated with autoLinking',
- type: 'boolean'
- },
- literalMidWordUnderscores: {
- defaultValue: false,
- describe: 'Parse midword underscores as literal underscores',
- type: 'boolean'
- },
- literalMidWordAsterisks: {
- defaultValue: false,
- describe: 'Parse midword asterisks as literal asterisks',
- type: 'boolean'
- },
- strikethrough: {
- defaultValue: false,
- describe: 'Turn on/off strikethrough support',
- type: 'boolean'
- },
- tables: {
- defaultValue: false,
- describe: 'Turn on/off tables support',
- type: 'boolean'
- },
- tablesHeaderId: {
- defaultValue: false,
- describe: 'Add an id to table headers',
- type: 'boolean'
- },
- ghCodeBlocks: {
- defaultValue: true,
- describe: 'Turn on/off GFM fenced code blocks support',
- type: 'boolean'
- },
- tasklists: {
- defaultValue: false,
- describe: 'Turn on/off GFM tasklist support',
- type: 'boolean'
- },
- smoothLivePreview: {
- defaultValue: false,
- describe: 'Prevents weird effects in live previews due to incomplete input',
- type: 'boolean'
- },
- smartIndentationFix: {
- defaultValue: false,
- description: 'Tries to smartly fix indentation in es6 strings',
- type: 'boolean'
- },
- disableForced4SpacesIndentedSublists: {
- defaultValue: false,
- description: 'Disables the requirement of indenting nested sublists by 4 spaces',
- type: 'boolean'
- },
- simpleLineBreaks: {
- defaultValue: false,
- description: 'Parses simple line breaks as
(GFM Style)',
- type: 'boolean'
- },
- requireSpaceBeforeHeadingText: {
- defaultValue: false,
- description: 'Makes adding a space between `#` and the header text mandatory (GFM Style)',
- type: 'boolean'
- },
- ghMentions: {
- defaultValue: false,
- description: 'Enables github @mentions',
- type: 'boolean'
- },
- ghMentionsLink: {
- defaultValue: 'https://github.com/{u}',
- description: 'Changes the link generated by @mentions. Only applies if ghMentions option is enabled.',
- type: 'string'
- },
- encodeEmails: {
- defaultValue: true,
- description: 'Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities',
- type: 'boolean'
- },
- openLinksInNewWindow: {
- defaultValue: false,
- description: 'Open all links in new windows',
- type: 'boolean'
- },
- backslashEscapesHTMLTags: {
- defaultValue: false,
- description: 'Support for HTML Tag escaping. ex: \
tags around block-level tags. - text = showdown.subParser('hashHTMLBlocks')(text, options, globals); - text = showdown.subParser('paragraphs')(text, options, globals); - - text = globals.converter._dispatch('blockGamut.after', text, options, globals); - - return text; -}); - -showdown.subParser('blockQuotes', function (text, options, globals) { - text = globals.converter._dispatch('blockQuotes.before', text, options, globals); - - // add a couple extra lines after the text and endtext mark - text = text + '\n\n'; - - var rgx = /(^ {0,3}>[ \t]?.+\n(.+\n)*\n*)+/gm; - - if (options.splitAdjacentBlockquotes) { - rgx = /^ {0,3}>[\s\S]*?(?:\n\n)/gm; - } - - text = text.replace(rgx, function (bq) { - // attacklab: hack around Konqueror 3.5.4 bug: - // "----------bug".replace(/^-/g,"") == "bug" - bq = bq.replace(/^[ \t]*>[ \t]?/gm, ''); // trim one level of quoting - - // attacklab: clean up hack - bq = bq.replace(/¨0/g, ''); - - bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines - bq = showdown.subParser('githubCodeBlocks')(bq, options, globals); - bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse - - bq = bq.replace(/(^|\n)/g, '$1 '); - // These leading spaces screw with
content, so we need to fix that:
- bq = bq.replace(/(\s*[^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
- var pre = m1;
- // attacklab: hack around Konqueror 3.5.4 bug:
- pre = pre.replace(/^ /mg, '¨0');
- pre = pre.replace(/¨0/g, '');
- return pre;
- });
-
- return showdown.subParser('hashBlock')('\n' + bq + '\n
', options, globals);
- });
-
- text = globals.converter._dispatch('blockQuotes.after', text, options, globals);
- return text;
-});
-
-/**
- * Process Markdown `` blocks.
- */
-showdown.subParser('codeBlocks', function (text, options, globals) {
- text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
-
- // sentinel workarounds for lack of \A and \Z, safari\khtml bug
- text += '¨0';
-
- var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=¨0))/g;
- text = text.replace(pattern, function (wholeMatch, m1, m2) {
- var codeblock = m1,
- nextChar = m2,
- end = '\n';
-
- codeblock = showdown.subParser('outdent')(codeblock, options, globals);
- codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
- codeblock = showdown.subParser('detab')(codeblock, options, globals);
- codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
- codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
-
- if (options.omitExtraWLInCodeBlocks) {
- end = '';
- }
-
- codeblock = '' + codeblock + end + '
';
-
- return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar;
- });
-
- // strip sentinel
- text = text.replace(/¨0/, '');
-
- text = globals.converter._dispatch('codeBlocks.after', text, options, globals);
- return text;
-});
-
-/**
- *
- * * Backtick quotes are used for spans.
- *
- * * You can use multiple backticks as the delimiters if you want to
- * include literal backticks in the code span. So, this input:
- *
- * Just type ``foo `bar` baz`` at the prompt.
- *
- * Will translate to:
- *
- * Just type foo `bar` baz at the prompt.
- *
- * There's no arbitrary limit to the number of backticks you
- * can use as delimters. If you need three consecutive backticks
- * in your code, use four for delimiters, etc.
- *
- * * You can use spaces to get literal backticks at the edges:
- *
- * ... type `` `bar` `` ...
- *
- * Turns to:
- *
- * ... type `bar` ...
- */
-showdown.subParser('codeSpans', function (text, options, globals) {
- text = globals.converter._dispatch('codeSpans.before', text, options, globals);
-
- if (typeof(text) === 'undefined') {
- text = '';
- }
- text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm,
- function (wholeMatch, m1, m2, m3) {
- var c = m3;
- c = c.replace(/^([ \t]*)/g, ''); // leading whitespace
- c = c.replace(/[ \t]*$/g, ''); // trailing whitespace
- c = showdown.subParser('encodeCode')(c, options, globals);
- c = m1 + '' + c + '';
- c = showdown.subParser('hashHTMLSpans')(c, options, globals);
- return c;
- }
- );
-
- text = globals.converter._dispatch('codeSpans.after', text, options, globals);
- return text;
-});
-
-/**
- * Turn Markdown link shortcuts into XHTML tags.
- */
-showdown.subParser('completeHTMLDocument', function (text, options, globals) {
- if (!options.completeHTMLDocument) {
- return text;
- }
-
- text = globals.converter._dispatch('completeHTMLDocument.before', text, options, globals);
-
- var doctype = 'html',
- doctypeParsed = '\n',
- title = '',
- charset = '\n',
- lang = '',
- metadata = '';
-
- if (typeof globals.metadata.parsed.doctype !== 'undefined') {
- doctypeParsed = '\n';
- doctype = globals.metadata.parsed.doctype.toString().toLowerCase();
- if (doctype === 'html' || doctype === 'html5') {
- charset = '';
- }
- }
-
- for (var meta in globals.metadata.parsed) {
- if (globals.metadata.parsed.hasOwnProperty(meta)) {
- switch (meta.toLowerCase()) {
- case 'doctype':
- break;
-
- case 'title':
- title = '' + globals.metadata.parsed.title + ' \n';
- break;
-
- case 'charset':
- if (doctype === 'html' || doctype === 'html5') {
- charset = '\n';
- } else {
- charset = '\n';
- }
- break;
-
- case 'language':
- case 'lang':
- lang = ' lang="' + globals.metadata.parsed[meta] + '"';
- metadata += '\n';
- break;
-
- default:
- metadata += '\n';
- }
- }
- }
-
- text = doctypeParsed + '\n\n' + title + charset + metadata + '\n\n' + text.trim() + '\n\n';
-
- text = globals.converter._dispatch('completeHTMLDocument.after', text, options, globals);
- return text;
-});
-
-/**
- * Convert all tabs to spaces
- */
-showdown.subParser('detab', function (text, options, globals) {
- text = globals.converter._dispatch('detab.before', text, options, globals);
-
- // expand first n-1 tabs
- text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width
-
- // replace the nth with two sentinels
- text = text.replace(/\t/g, '¨A¨B');
-
- // use the sentinel to anchor our regex so it doesn't explode
- text = text.replace(/¨B(.+?)¨A/g, function (wholeMatch, m1) {
- var leadingText = m1,
- numSpaces = 4 - leadingText.length % 4; // g_tab_width
-
- // there *must* be a better way to do this:
- for (var i = 0; i < numSpaces; i++) {
- leadingText += ' ';
- }
-
- return leadingText;
- });
-
- // clean up sentinels
- text = text.replace(/¨A/g, ' '); // g_tab_width
- text = text.replace(/¨B/g, '');
-
- text = globals.converter._dispatch('detab.after', text, options, globals);
- return text;
-});
-
-showdown.subParser('ellipsis', function (text, options, globals) {
- text = globals.converter._dispatch('ellipsis.before', text, options, globals);
-
- text = text.replace(/\.\.\./g, '…');
-
- text = globals.converter._dispatch('ellipsis.after', text, options, globals);
-
- return text;
-});
-
-/**
- * These are all the transformations that occur *within* block-level
- * tags like paragraphs, headers, and list items.
- */
-showdown.subParser('emoji', function (text, options, globals) {
- if (!options.emoji) {
- return text;
- }
-
- text = globals.converter._dispatch('emoji.before', text, options, globals);
-
- var emojiRgx = /:([\S]+?):/g;
-
- text = text.replace(emojiRgx, function (wm, emojiCode) {
- if (showdown.helper.emojis.hasOwnProperty(emojiCode)) {
- return showdown.helper.emojis[emojiCode];
- }
- return wm;
- });
-
- text = globals.converter._dispatch('emoji.after', text, options, globals);
-
- return text;
-});
-
-/**
- * Smart processing for ampersands and angle brackets that need to be encoded.
- */
-showdown.subParser('encodeAmpsAndAngles', function (text, options, globals) {
- text = globals.converter._dispatch('encodeAmpsAndAngles.before', text, options, globals);
-
- // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin:
- // http://bumppo.net/projects/amputator/
- text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&');
-
- // Encode naked <'s
- text = text.replace(/<(?![a-z\/?$!])/gi, '<');
-
- // Encode <
- text = text.replace(/
- text = text.replace(/>/g, '>');
-
- text = globals.converter._dispatch('encodeAmpsAndAngles.after', text, options, globals);
- return text;
-});
-
-/**
- * Returns the string, with after processing the following backslash escape sequences.
- *
- * attacklab: The polite way to do this is with the new escapeCharacters() function:
- *
- * text = escapeCharacters(text,"\\",true);
- * text = escapeCharacters(text,"`*_{}[]()>#+-.!",true);
- *
- * ...but we're sidestepping its use of the (slow) RegExp constructor
- * as an optimization for Firefox. This function gets called a LOT.
- */
-showdown.subParser('encodeBackslashEscapes', function (text, options, globals) {
- text = globals.converter._dispatch('encodeBackslashEscapes.before', text, options, globals);
-
- text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback);
- text = text.replace(/\\([`*_{}\[\]()>#+.!~=|-])/g, showdown.helper.escapeCharactersCallback);
-
- text = globals.converter._dispatch('encodeBackslashEscapes.after', text, options, globals);
- return text;
-});
-
-/**
- * Encode/escape certain characters inside Markdown code runs.
- * The point is that in code, these characters are literals,
- * and lose their special Markdown meanings.
- */
-showdown.subParser('encodeCode', function (text, options, globals) {
- text = globals.converter._dispatch('encodeCode.before', text, options, globals);
-
- // Encode all ampersands; HTML entities are not
- // entities within a Markdown code span.
- text = text
- .replace(/&/g, '&')
- // Do the angle bracket song and dance:
- .replace(//g, '>')
- // Now, escape characters that are magic in Markdown:
- .replace(/([*_{}\[\]\\=~-])/g, showdown.helper.escapeCharactersCallback);
-
- text = globals.converter._dispatch('encodeCode.after', text, options, globals);
- return text;
-});
-
-/**
- * Within tags -- meaning between < and > -- encode [\ ` * _ ~ =] so they
- * don't conflict with their use in Markdown for code, italics and strong.
- */
-showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text, options, globals) {
- text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.before', text, options, globals);
-
- // Build a regex to find HTML tags.
- var tags = /<\/?[a-z\d_:-]+(?:[\s]+[\s\S]+?)?>/gi,
- comments = /-]|-[^>])(?:[^-]|-[^-])*)--)>/gi;
-
- text = text.replace(tags, function (wholeMatch) {
- return wholeMatch
- .replace(/(.)<\/?code>(?=.)/g, '$1`')
- .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
- });
-
- text = text.replace(comments, function (wholeMatch) {
- return wholeMatch
- .replace(/([\\`*_~=|])/g, showdown.helper.escapeCharactersCallback);
- });
-
- text = globals.converter._dispatch('escapeSpecialCharsWithinTagAttributes.after', text, options, globals);
- return text;
-});
-
-/**
- * Handle github codeblocks prior to running HashHTML so that
- * HTML contained within the codeblock gets escaped properly
- * Example:
- * ```ruby
- * def hello_world(x)
- * puts "Hello, #{x}"
- * end
- * ```
- */
-showdown.subParser('githubCodeBlocks', function (text, options, globals) {
- if (!options.ghCodeBlocks) {
- return text;
- }
-
- text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals);
-
- text += '¨0';
-
- text = text.replace(/(?:^|\n)(```+|~~~+)([^\s`~]*)\n([\s\S]*?)\n\1/g, function (wholeMatch, delim, language, codeblock) {
- var end = (options.omitExtraWLInCodeBlocks) ? '' : '\n';
-
- // First parse the github code block
- codeblock = showdown.subParser('encodeCode')(codeblock, options, globals);
- codeblock = showdown.subParser('detab')(codeblock, options, globals);
- codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
- codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace
-
- codeblock = '' + codeblock + end + '
';
-
- codeblock = showdown.subParser('hashBlock')(codeblock, options, globals);
-
- // Since GHCodeblocks can be false positives, we need to
- // store the primitive text and the parsed text in a global var,
- // and then return a token
- return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
- });
-
- // attacklab: strip sentinel
- text = text.replace(/¨0/, '');
-
- return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals);
-});
-
-showdown.subParser('hashBlock', function (text, options, globals) {
- text = globals.converter._dispatch('hashBlock.before', text, options, globals);
- text = text.replace(/(^\n+|\n+$)/g, '');
- text = '\n\n¨K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n';
- text = globals.converter._dispatch('hashBlock.after', text, options, globals);
- return text;
-});
-
-/**
- * Hash and escape elements that should not be parsed as markdown
- */
-showdown.subParser('hashCodeTags', function (text, options, globals) {
- text = globals.converter._dispatch('hashCodeTags.before', text, options, globals);
-
- var repFunc = function (wholeMatch, match, left, right) {
- var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
- return '¨C' + (globals.gHtmlSpans.push(codeblock) - 1) + 'C';
- };
-
- // Hash naked
- text = showdown.helper.replaceRecursiveRegExp(text, repFunc, ']*>', '', 'gim');
-
- text = globals.converter._dispatch('hashCodeTags.after', text, options, globals);
- return text;
-});
-
-showdown.subParser('hashElement', function (text, options, globals) {
- return function (wholeMatch, m1) {
- var blockText = m1;
-
- // Undo double lines
- blockText = blockText.replace(/\n\n/g, '\n');
- blockText = blockText.replace(/^\n/, '');
-
- // strip trailing blank lines
- blockText = blockText.replace(/\n+$/g, '');
-
- // Replace the element text with a marker ("¨KxK" where x is its key)
- blockText = '\n\n¨K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n';
-
- return blockText;
- };
-});
-
-showdown.subParser('hashHTMLBlocks', function (text, options, globals) {
- text = globals.converter._dispatch('hashHTMLBlocks.before', text, options, globals);
-
- var blockTags = [
- 'pre',
- 'div',
- 'h1',
- 'h2',
- 'h3',
- 'h4',
- 'h5',
- 'h6',
- 'blockquote',
- 'table',
- 'dl',
- 'ol',
- 'ul',
- 'script',
- 'noscript',
- 'form',
- 'fieldset',
- 'iframe',
- 'math',
- 'style',
- 'section',
- 'header',
- 'footer',
- 'nav',
- 'article',
- 'aside',
- 'address',
- 'audio',
- 'canvas',
- 'figure',
- 'hgroup',
- 'output',
- 'video',
- 'p'
- ],
- repFunc = function (wholeMatch, match, left, right) {
- var txt = wholeMatch;
- // check if this html element is marked as markdown
- // if so, it's contents should be parsed as markdown
- if (left.search(/\bmarkdown\b/) !== -1) {
- txt = left + globals.converter.makeHtml(match) + right;
- }
- return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
- };
-
- if (options.backslashEscapesHTMLTags) {
- // encode backslash escaped HTML tags
- text = text.replace(/\\<(\/?[^>]+?)>/g, function (wm, inside) {
- return '<' + inside + '>';
- });
- }
-
- // hash HTML Blocks
- for (var i = 0; i < blockTags.length; ++i) {
-
- var opTagPos,
- rgx1 = new RegExp('^ {0,3}(<' + blockTags[i] + '\\b[^>]*>)', 'im'),
- patLeft = '<' + blockTags[i] + '\\b[^>]*>',
- patRight = '' + blockTags[i] + '>';
- // 1. Look for the first position of the first opening HTML tag in the text
- while ((opTagPos = showdown.helper.regexIndexOf(text, rgx1)) !== -1) {
-
- // if the HTML tag is \ escaped, we need to escape it and break
-
-
- //2. Split the text in that position
- var subTexts = showdown.helper.splitAtIndex(text, opTagPos),
- //3. Match recursively
- newSubText1 = showdown.helper.replaceRecursiveRegExp(subTexts[1], repFunc, patLeft, patRight, 'im');
-
- // prevent an infinite loop
- if (newSubText1 === subTexts[1]) {
- break;
- }
- text = subTexts[0].concat(newSubText1);
- }
- }
- // HR SPECIAL CASE
- text = text.replace(/(\n {0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g,
- showdown.subParser('hashElement')(text, options, globals));
-
- // Special case for standalone HTML comments
- text = showdown.helper.replaceRecursiveRegExp(text, function (txt) {
- return '\n\n¨K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n';
- }, '^ {0,3}', 'gm');
-
- // PHP and ASP-style processor instructions (...?> and <%...%>)
- text = text.replace(/(?:\n\n)( {0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g,
- showdown.subParser('hashElement')(text, options, globals));
-
- text = globals.converter._dispatch('hashHTMLBlocks.after', text, options, globals);
- return text;
-});
-
-/**
- * Hash span elements that should not be parsed as markdown
- */
-showdown.subParser('hashHTMLSpans', function (text, options, globals) {
- text = globals.converter._dispatch('hashHTMLSpans.before', text, options, globals);
-
- function hashHTMLSpan (html) {
- return '¨C' + (globals.gHtmlSpans.push(html) - 1) + 'C';
- }
-
- // Hash Self Closing tags
- text = text.replace(/<[^>]+?\/>/gi, function (wm) {
- return hashHTMLSpan(wm);
- });
-
- // Hash tags without properties
- text = text.replace(/<([^>]+?)>[\s\S]*?<\/\1>/g, function (wm) {
- return hashHTMLSpan(wm);
- });
-
- // Hash tags with properties
- text = text.replace(/<([^>]+?)\s[^>]+?>[\s\S]*?<\/\1>/g, function (wm) {
- return hashHTMLSpan(wm);
- });
-
- // Hash self closing tags without />
- text = text.replace(/<[^>]+?>/gi, function (wm) {
- return hashHTMLSpan(wm);
- });
-
- /*showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi');*/
-
- text = globals.converter._dispatch('hashHTMLSpans.after', text, options, globals);
- return text;
-});
-
-/**
- * Unhash HTML spans
- */
-showdown.subParser('unhashHTMLSpans', function (text, options, globals) {
- text = globals.converter._dispatch('unhashHTMLSpans.before', text, options, globals);
-
- for (var i = 0; i < globals.gHtmlSpans.length; ++i) {
- var repText = globals.gHtmlSpans[i],
- // limiter to prevent infinite loop (assume 10 as limit for recurse)
- limit = 0;
-
- while (/¨C(\d+)C/.test(repText)) {
- var num = RegExp.$1;
- repText = repText.replace('¨C' + num + 'C', globals.gHtmlSpans[num]);
- if (limit === 10) {
- console.error('maximum nesting of 10 spans reached!!!');
- break;
- }
- ++limit;
- }
- text = text.replace('¨C' + i + 'C', repText);
- }
-
- text = globals.converter._dispatch('unhashHTMLSpans.after', text, options, globals);
- return text;
-});
-
-/**
- * Hash and escape elements that should not be parsed as markdown
- */
-showdown.subParser('hashPreCodeTags', function (text, options, globals) {
- text = globals.converter._dispatch('hashPreCodeTags.before', text, options, globals);
-
- var repFunc = function (wholeMatch, match, left, right) {
- // encode html entities
- var codeblock = left + showdown.subParser('encodeCode')(match, options, globals) + right;
- return '\n\n¨G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n';
- };
-
- // Hash
- text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^ {0,3}]*>\\s*]*>', '^ {0,3}\\s*
', 'gim');
-
- text = globals.converter._dispatch('hashPreCodeTags.after', text, options, globals);
- return text;
-});
-
-showdown.subParser('headers', function (text, options, globals) {
- text = globals.converter._dispatch('headers.before', text, options, globals);
-
- var headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart),
-
- // Set text-style headers:
- // Header 1
- // ========
- //
- // Header 2
- // --------
- //
- setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm,
- setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm;
-
- text = text.replace(setextRegexH1, function (wholeMatch, m1) {
-
- var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
- hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
- hLevel = headerLevelStart,
- hashBlock = '' + spanGamut + ' ';
- return showdown.subParser('hashBlock')(hashBlock, options, globals);
- });
-
- text = text.replace(setextRegexH2, function (matchFound, m1) {
- var spanGamut = showdown.subParser('spanGamut')(m1, options, globals),
- hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"',
- hLevel = headerLevelStart + 1,
- hashBlock = '' + spanGamut + ' ';
- return showdown.subParser('hashBlock')(hashBlock, options, globals);
- });
-
- // atx-style headers:
- // # Header 1
- // ## Header 2
- // ## Header 2 with closing hashes ##
- // ...
- // ###### Header 6
- //
- var atxStyle = (options.requireSpaceBeforeHeadingText) ? /^(#{1,6})[ \t]+(.+?)[ \t]*#*\n+/gm : /^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm;
-
- text = text.replace(atxStyle, function (wholeMatch, m1, m2) {
- var hText = m2;
- if (options.customizedHeaderId) {
- hText = m2.replace(/\s?\{([^{]+?)}\s*$/, '');
- }
-
- var span = showdown.subParser('spanGamut')(hText, options, globals),
- hID = (options.noHeaderId) ? '' : ' id="' + headerId(m2) + '"',
- hLevel = headerLevelStart - 1 + m1.length,
- header = '' + span + ' ';
-
- return showdown.subParser('hashBlock')(header, options, globals);
- });
-
- function headerId (m) {
- var title,
- prefix;
-
- // It is separate from other options to allow combining prefix and customized
- if (options.customizedHeaderId) {
- var match = m.match(/\{([^{]+?)}\s*$/);
- if (match && match[1]) {
- m = match[1];
- }
- }
-
- title = m;
-
- // Prefix id to prevent causing inadvertent pre-existing style matches.
- if (showdown.helper.isString(options.prefixHeaderId)) {
- prefix = options.prefixHeaderId;
- } else if (options.prefixHeaderId === true) {
- prefix = 'section-';
- } else {
- prefix = '';
- }
-
- if (!options.rawPrefixHeaderId) {
- title = prefix + title;
- }
-
- if (options.ghCompatibleHeaderId) {
- title = title
- .replace(/ /g, '-')
- // replace previously escaped chars (&, ¨ and $)
- .replace(/&/g, '')
- .replace(/¨T/g, '')
- .replace(/¨D/g, '')
- // replace rest of the chars (&~$ are repeated as they might have been escaped)
- // borrowed from github's redcarpet (some they should produce similar results)
- .replace(/[&+$,\/:;=?@"#{}|^¨~\[\]`\\*)(%.!'<>]/g, '')
- .toLowerCase();
- } else if (options.rawHeaderId) {
- title = title
- .replace(/ /g, '-')
- // replace previously escaped chars (&, ¨ and $)
- .replace(/&/g, '&')
- .replace(/¨T/g, '¨')
- .replace(/¨D/g, '$')
- // replace " and '
- .replace(/["']/g, '-')
- .toLowerCase();
- } else {
- title = title
- .replace(/[^\w]/g, '')
- .toLowerCase();
- }
-
- if (options.rawPrefixHeaderId) {
- title = prefix + title;
- }
-
- if (globals.hashLinkCounts[title]) {
- title = title + '-' + (globals.hashLinkCounts[title]++);
- } else {
- globals.hashLinkCounts[title] = 1;
- }
- return title;
- }
-
- text = globals.converter._dispatch('headers.after', text, options, globals);
- return text;
-});
-
-/**
- * Turn Markdown link shortcuts into XHTML tags.
- */
-showdown.subParser('horizontalRule', function (text, options, globals) {
- text = globals.converter._dispatch('horizontalRule.before', text, options, globals);
-
- var key = showdown.subParser('hashBlock')('
', options, globals);
- text = text.replace(/^ {0,2}( ?-){3,}[ \t]*$/gm, key);
- text = text.replace(/^ {0,2}( ?\*){3,}[ \t]*$/gm, key);
- text = text.replace(/^ {0,2}( ?_){3,}[ \t]*$/gm, key);
-
- text = globals.converter._dispatch('horizontalRule.after', text, options, globals);
- return text;
-});
-
-/**
- * Turn Markdown image shortcuts into
tags.
- */
-showdown.subParser('images', function (text, options, globals) {
- text = globals.converter._dispatch('images.before', text, options, globals);
-
- var inlineRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?([\S]+?(?:\([\S]*?\)[\S]*?)?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
- crazyRegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?<([^>]*)>(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(?:(["'])([^"]*?)\6))?[ \t]?\)/g,
- base64RegExp = /!\[([^\]]*?)][ \t]*()\([ \t]?(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(["'])([^"]*?)\6)?[ \t]?\)/g,
- referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[([\s\S]*?)]()()()()()/g,
- refShortcutRegExp = /!\[([^\[\]]+)]()()()()()/g;
-
- function writeImageTagBase64 (wholeMatch, altText, linkId, url, width, height, m5, title) {
- url = url.replace(/\s/g, '');
- return writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title);
- }
-
- function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) {
-
- var gUrls = globals.gUrls,
- gTitles = globals.gTitles,
- gDims = globals.gDimensions;
-
- linkId = linkId.toLowerCase();
-
- if (!title) {
- title = '';
- }
- // Special case for explicit empty url
- if (wholeMatch.search(/\(\s*>? ?(['"].*['"])?\)$/m) > -1) {
- url = '';
-
- } else if (url === '' || url === null) {
- if (linkId === '' || linkId === null) {
- // lower-case and turn embedded newlines into spaces
- linkId = altText.toLowerCase().replace(/ ?\n/g, ' ');
- }
- url = '#' + linkId;
-
- if (!showdown.helper.isUndefined(gUrls[linkId])) {
- url = gUrls[linkId];
- if (!showdown.helper.isUndefined(gTitles[linkId])) {
- title = gTitles[linkId];
- }
- if (!showdown.helper.isUndefined(gDims[linkId])) {
- width = gDims[linkId].width;
- height = gDims[linkId].height;
- }
- } else {
- return wholeMatch;
- }
- }
-
- altText = altText
- .replace(/"/g, '"')
- //altText = showdown.helper.escapeCharacters(altText, '*_', false);
- .replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
- //url = showdown.helper.escapeCharacters(url, '*_', false);
- url = url.replace(showdown.helper.regexes.asteriskDashAndColon, showdown.helper.escapeCharactersCallback);
- var result = '
';
-
- return result;
- }
-
- // First, handle reference-style labeled images: ![alt text][id]
- text = text.replace(referenceRegExp, writeImageTag);
-
- // Next, handle inline images: 
-
- // base64 encoded images
- text = text.replace(base64RegExp, writeImageTagBase64);
-
- // cases with crazy urls like ./image/cat1).png
- text = text.replace(crazyRegExp, writeImageTag);
-
- // normal cases
- text = text.replace(inlineRegExp, writeImageTag);
-
- // handle reference-style shortcuts: ![img text]
- text = text.replace(refShortcutRegExp, writeImageTag);
-
- text = globals.converter._dispatch('images.after', text, options, globals);
- return text;
-});
-
-showdown.subParser('italicsAndBold', function (text, options, globals) {
- text = globals.converter._dispatch('italicsAndBold.before', text, options, globals);
-
- // it's faster to have 3 separate regexes for each case than have just one
- // because of backtracing, in some cases, it could lead to an exponential effect
- // called "catastrophic backtrace". Ominous!
-
- function parseInside (txt, left, right) {
- /*
- if (options.simplifiedAutoLink) {
- txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
- }
- */
- return left + txt + right;
- }
-
- // Parse underscores
- if (options.literalMidWordUnderscores) {
- text = text.replace(/\b___(\S[\s\S]*)___\b/g, function (wm, txt) {
- return parseInside (txt, '', '');
- });
- text = text.replace(/\b__(\S[\s\S]*)__\b/g, function (wm, txt) {
- return parseInside (txt, '', '');
- });
- text = text.replace(/\b_(\S[\s\S]*?)_\b/g, function (wm, txt) {
- return parseInside (txt, '', '');
- });
- } else {
- text = text.replace(/___(\S[\s\S]*?)___/g, function (wm, m) {
- return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
- });
- text = text.replace(/__(\S[\s\S]*?)__/g, function (wm, m) {
- return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
- });
- text = text.replace(/_([^\s_][\s\S]*?)_/g, function (wm, m) {
- // !/^_[^_]/.test(m) - test if it doesn't start with __ (since it seems redundant, we removed it)
- return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
- });
- }
-
- // Now parse asterisks
- if (options.literalMidWordAsterisks) {
- text = text.replace(/([^*]|^)\B\*\*\*(\S[\s\S]+?)\*\*\*\B(?!\*)/g, function (wm, lead, txt) {
- return parseInside (txt, lead + '', '');
- });
- text = text.replace(/([^*]|^)\B\*\*(\S[\s\S]+?)\*\*\B(?!\*)/g, function (wm, lead, txt) {
- return parseInside (txt, lead + '', '');
- });
- text = text.replace(/([^*]|^)\B\*(\S[\s\S]+?)\*\B(?!\*)/g, function (wm, lead, txt) {
- return parseInside (txt, lead + '', '');
- });
- } else {
- text = text.replace(/\*\*\*(\S[\s\S]*?)\*\*\*/g, function (wm, m) {
- return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
- });
- text = text.replace(/\*\*(\S[\s\S]*?)\*\*/g, function (wm, m) {
- return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
- });
- text = text.replace(/\*([^\s*][\s\S]*?)\*/g, function (wm, m) {
- // !/^\*[^*]/.test(m) - test if it doesn't start with ** (since it seems redundant, we removed it)
- return (/\S$/.test(m)) ? parseInside (m, '', '') : wm;
- });
- }
-
-
- text = globals.converter._dispatch('italicsAndBold.after', text, options, globals);
- return text;
-});
-
-/**
- * Form HTML ordered (numbered) and unordered (bulleted) lists.
- */
-showdown.subParser('lists', function (text, options, globals) {
- function processListItems (listStr, trimTrailing) {
- // The $g_list_level global keeps track of when we're inside a list.
- // Each time we enter a list, we increment it; when we leave a list,
- // we decrement. If it's zero, we're not in a list anymore.
- //
- // We do this because when we're not inside a list, we want to treat
- // something like this:
- //
- // I recommend upgrading to version
- // 8. Oops, now this line is treated
- // as a sub-list.
- //
- // As a single paragraph, despite the fact that the second line starts
- // with a digit-period-space sequence.
- //
- // Whereas when we're inside a list (or sub-list), that line will be
- // treated as the start of a sub-list. What a kludge, huh? This is
- // an aspect of Markdown's syntax that's hard to parse perfectly
- // without resorting to mind-reading. Perhaps the solution is to
- // change the syntax rules such that sub-lists must start with a
- // starting cardinal number; e.g. "1." or "a.".
- globals.gListLevel++;
-
- // trim trailing blank lines:
- listStr = listStr.replace(/\n{2,}$/, '\n');
-
- // attacklab: add sentinel to emulate \z
- listStr += '¨0';
-
- var rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0| {0,3}([*+-]|\d+[.])[ \t]+))/gm,
- isParagraphed = (/\n[ \t]*\n(?!¨0)/.test(listStr));
-
- // Since version 1.5, nesting sublists requires 4 spaces (or 1 tab) indentation,
- // which is a syntax breaking change
- // activating this option reverts to old behavior
- if (options.disableForced4SpacesIndentedSublists) {
- rgx = /(\n)?(^ {0,3})([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(¨0|\2([*+-]|\d+[.])[ \t]+))/gm;
- }
-
- listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) {
- checked = (checked && checked.trim() !== '');
-
- var item = showdown.subParser('outdent')(m4, options, globals),
- bulletStyle = '';
-
- // Support for github tasklists
- if (taskbtn && options.tasklists) {
- bulletStyle = ' class="task-list-item" style="list-style-type: none;"';
- item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () {
- var otp = '';
- return otp;
- });
- }
-
- // ISSUE #312
- // This input: - - - a
- // causes trouble to the parser, since it interprets it as:
- // - a
- // instead of:
- // - - - a
- // So, to prevent it, we will put a marker (¨A)in the beginning of the line
- // Kind of hackish/monkey patching, but seems more effective than overcomplicating the list parser
- item = item.replace(/^([-*+]|\d\.)[ \t]+[\S\n ]*/g, function (wm2) {
- return '¨A' + wm2;
- });
-
- // m1 - Leading line or
- // Has a double return (multi paragraph) or
- // Has sublist
- if (m1 || (item.search(/\n{2,}/) > -1)) {
- item = showdown.subParser('githubCodeBlocks')(item, options, globals);
- item = showdown.subParser('blockGamut')(item, options, globals);
- } else {
- // Recursion for sub-lists:
- item = showdown.subParser('lists')(item, options, globals);
- item = item.replace(/\n$/, ''); // chomp(item)
- item = showdown.subParser('hashHTMLBlocks')(item, options, globals);
-
- // Colapse double linebreaks
- item = item.replace(/\n\n+/g, '\n\n');
- if (isParagraphed) {
- item = showdown.subParser('paragraphs')(item, options, globals);
- } else {
- item = showdown.subParser('spanGamut')(item, options, globals);
- }
- }
-
- // now we need to remove the marker (¨A)
- item = item.replace('¨A', '');
- // we can finally wrap the line in list item tags
- item = '' + item + ' \n';
-
- return item;
- });
-
- // attacklab: strip sentinel
- listStr = listStr.replace(/¨0/g, '');
-
- globals.gListLevel--;
-
- if (trimTrailing) {
- listStr = listStr.replace(/\s+$/, '');
- }
-
- return listStr;
- }
-
- function styleStartNumber (list, listType) {
- // check if ol and starts by a number different than 1
- if (listType === 'ol') {
- var res = list.match(/^ *(\d+)\./);
- if (res && res[1] !== '1') {
- return ' start="' + res[1] + '"';
- }
- }
- return '';
- }
-
- /**
- * Check and parse consecutive lists (better fix for issue #142)
- * @param {string} list
- * @param {string} listType
- * @param {boolean} trimTrailing
- * @returns {string}
- */
- function parseConsecutiveLists (list, listType, trimTrailing) {
- // check if we caught 2 or more consecutive lists by mistake
- // we use the counterRgx, meaning if listType is UL we look for OL and vice versa
- var olRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?\d+\.[ \t]/gm : /^ {0,3}\d+\.[ \t]/gm,
- ulRgx = (options.disableForced4SpacesIndentedSublists) ? /^ ?[*+-][ \t]/gm : /^ {0,3}[*+-][ \t]/gm,
- counterRxg = (listType === 'ul') ? olRgx : ulRgx,
- result = '';
-
- if (list.search(counterRxg) !== -1) {
- (function parseCL (txt) {
- var pos = txt.search(counterRxg),
- style = styleStartNumber(list, listType);
- if (pos !== -1) {
- // slice
- result += '\n\n<' + listType + style + '>\n' + processListItems(txt.slice(0, pos), !!trimTrailing) + '' + listType + '>\n';
-
- // invert counterType and listType
- listType = (listType === 'ul') ? 'ol' : 'ul';
- counterRxg = (listType === 'ul') ? olRgx : ulRgx;
-
- //recurse
- parseCL(txt.slice(pos));
- } else {
- result += '\n\n<' + listType + style + '>\n' + processListItems(txt, !!trimTrailing) + '' + listType + '>\n';
- }
- })(list);
- } else {
- var style = styleStartNumber(list, listType);
- result = '\n\n<' + listType + style + '>\n' + processListItems(list, !!trimTrailing) + '' + listType + '>\n';
- }
-
- return result;
- }
-
- /** Start of list parsing **/
- text = globals.converter._dispatch('lists.before', text, options, globals);
- // add sentinel to hack around khtml/safari bug:
- // http://bugs.webkit.org/show_bug.cgi?id=11231
- text += '¨0';
-
- if (globals.gListLevel) {
- text = text.replace(/^(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
- function (wholeMatch, list, m2) {
- var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
- return parseConsecutiveLists(list, listType, true);
- }
- );
- } else {
- text = text.replace(/(\n\n|^\n?)(( {0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(¨0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm,
- function (wholeMatch, m1, list, m3) {
- var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol';
- return parseConsecutiveLists(list, listType, false);
- }
- );
- }
-
- // strip sentinel
- text = text.replace(/¨0/, '');
- text = globals.converter._dispatch('lists.after', text, options, globals);
- return text;
-});
-
-/**
- * Parse metadata at the top of the document
- */
-showdown.subParser('metadata', function (text, options, globals) {
- if (!options.metadata) {
- return text;
- }
-
- text = globals.converter._dispatch('metadata.before', text, options, globals);
-
- function parseMetadataContents (content) {
- // raw is raw so it's not changed in any way
- globals.metadata.raw = content;
-
- // escape chars forbidden in html attributes
- // double quotes
- content = content
- // ampersand first
- .replace(/&/g, '&')
- // double quotes
- .replace(/"/g, '"');
-
- content = content.replace(/\n {4}/g, ' ');
- content.replace(/^([\S ]+): +([\s\S]+?)$/gm, function (wm, key, value) {
- globals.metadata.parsed[key] = value;
- return '';
- });
- }
-
- text = text.replace(/^\s*«««+(\S*?)\n([\s\S]+?)\n»»»+\n/, function (wholematch, format, content) {
- parseMetadataContents(content);
- return '¨M';
- });
-
- text = text.replace(/^\s*---+(\S*?)\n([\s\S]+?)\n---+\n/, function (wholematch, format, content) {
- if (format) {
- globals.metadata.format = format;
- }
- parseMetadataContents(content);
- return '¨M';
- });
-
- text = text.replace(/¨M/g, '');
-
- text = globals.converter._dispatch('metadata.after', text, options, globals);
- return text;
-});
-
-/**
- * Remove one level of line-leading tabs or spaces
- */
-showdown.subParser('outdent', function (text, options, globals) {
- text = globals.converter._dispatch('outdent.before', text, options, globals);
-
- // attacklab: hack around Konqueror 3.5.4 bug:
- // "----------bug".replace(/^-/g,"") == "bug"
- text = text.replace(/^(\t|[ ]{1,4})/gm, '¨0'); // attacklab: g_tab_width
-
- // attacklab: clean up hack
- text = text.replace(/¨0/g, '');
-
- text = globals.converter._dispatch('outdent.after', text, options, globals);
- return text;
-});
-
-/**
- *
- */
-showdown.subParser('paragraphs', function (text, options, globals) {
- text = globals.converter._dispatch('paragraphs.before', text, options, globals);
- // Strip leading and trailing lines:
- text = text.replace(/^\n+/g, '');
- text = text.replace(/\n+$/g, '');
-
- var grafs = text.split(/\n{2,}/g),
- grafsOut = [],
- end = grafs.length; // Wrap tags
-
- for (var i = 0; i < end; i++) {
- var str = grafs[i];
- // if this is an HTML marker, copy it
- if (str.search(/¨(K|G)(\d+)\1/g) >= 0) {
- grafsOut.push(str);
-
- // test for presence of characters to prevent empty lines being parsed
- // as paragraphs (resulting in undesired extra empty paragraphs)
- } else if (str.search(/\S/) >= 0) {
- str = showdown.subParser('spanGamut')(str, options, globals);
- str = str.replace(/^([ \t]*)/g, '
');
- str += '
';
- grafsOut.push(str);
- }
- }
-
- /** Unhashify HTML blocks */
- end = grafsOut.length;
- for (i = 0; i < end; i++) {
- var blockText = '',
- grafsOutIt = grafsOut[i],
- codeFlag = false;
- // if this is a marker for an html block...
- // use RegExp.test instead of string.search because of QML bug
- while (/¨(K|G)(\d+)\1/.test(grafsOutIt)) {
- var delim = RegExp.$1,
- num = RegExp.$2;
-
- if (delim === 'K') {
- blockText = globals.gHtmlBlocks[num];
- } else {
- // we need to check if ghBlock is a false positive
- if (codeFlag) {
- // use encoded version of all text
- blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text, options, globals);
- } else {
- blockText = globals.ghCodeBlocks[num].codeblock;
- }
- }
- blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs
-
- grafsOutIt = grafsOutIt.replace(/(\n\n)?¨(K|G)\d+\2(\n\n)?/, blockText);
- // Check if grafsOutIt is a pre->code
- if (/^]*>\s*]*>/.test(grafsOutIt)) {
- codeFlag = true;
- }
- }
- grafsOut[i] = grafsOutIt;
- }
- text = grafsOut.join('\n');
- // Strip leading and trailing lines:
- text = text.replace(/^\n+/g, '');
- text = text.replace(/\n+$/g, '');
- return globals.converter._dispatch('paragraphs.after', text, options, globals);
-});
-
-/**
- * Run extension
- */
-showdown.subParser('runExtension', function (ext, text, options, globals) {
- if (ext.filter) {
- text = ext.filter(text, globals.converter, options);
-
- } else if (ext.regex) {
- // TODO remove this when old extension loading mechanism is deprecated
- var re = ext.regex;
- if (!(re instanceof RegExp)) {
- re = new RegExp(re, 'g');
- }
- text = text.replace(re, ext.replace);
- }
-
- return text;
-});
-
-/**
- * These are all the transformations that occur *within* block-level
- * tags like paragraphs, headers, and list items.
- */
-showdown.subParser('spanGamut', function (text, options, globals) {
- text = globals.converter._dispatch('spanGamut.before', text, options, globals);
- text = showdown.subParser('codeSpans')(text, options, globals);
- text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals);
- text = showdown.subParser('encodeBackslashEscapes')(text, options, globals);
-
- // Process anchor and image tags. Images must come first,
- // because ![foo][f] looks like an anchor.
- text = showdown.subParser('images')(text, options, globals);
- text = showdown.subParser('anchors')(text, options, globals);
-
- // Make links out of things like ` `
- // Must come after anchors, because you can use < and >
- // delimiters in inline links like [this]().
- text = showdown.subParser('autoLinks')(text, options, globals);
- text = showdown.subParser('simplifiedAutoLinks')(text, options, globals);
- text = showdown.subParser('emoji')(text, options, globals);
- text = showdown.subParser('underline')(text, options, globals);
- text = showdown.subParser('italicsAndBold')(text, options, globals);
- text = showdown.subParser('strikethrough')(text, options, globals);
- text = showdown.subParser('ellipsis')(text, options, globals);
-
- // we need to hash HTML tags inside spans
- text = showdown.subParser('hashHTMLSpans')(text, options, globals);
-
- // now we encode amps and angles
- text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals);
-
- // Do hard breaks
- if (options.simpleLineBreaks) {
- // GFM style hard breaks
- // only add line breaks if the text does not contain a block (special case for lists)
- if (!/\n\n¨K/.test(text)) {
- text = text.replace(/\n+/g, '
\n');
- }
- } else {
- // Vanilla hard breaks
- text = text.replace(/ +\n/g, '
\n');
- }
-
- text = globals.converter._dispatch('spanGamut.after', text, options, globals);
- return text;
-});
-
-showdown.subParser('strikethrough', function (text, options, globals) {
- function parseInside (txt) {
- if (options.simplifiedAutoLink) {
- txt = showdown.subParser('simplifiedAutoLinks')(txt, options, globals);
- }
- return '' + txt + '';
- }
-
- if (options.strikethrough) {
- text = globals.converter._dispatch('strikethrough.before', text, options, globals);
- text = text.replace(/(?:~){2}([\s\S]+?)(?:~){2}/g, function (wm, txt) { return parseInside(txt); });
- text = globals.converter._dispatch('strikethrough.after', text, options, globals);
- }
-
- return text;
-});
-
-/**
- * Strips link definitions from text, stores the URLs and titles in
- * hash references.
- * Link defs are in the form: ^[id]: url "optional title"
- */
-showdown.subParser('stripLinkDefinitions', function (text, options, globals) {
- var regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*([^>\s]+)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=¨0))/gm,
- base64Regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*(data:.+?\/.+?;base64,[A-Za-z0-9+/=\n]+?)>?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n\n|(?=¨0)|(?=\n\[))/gm;
-
- // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
- text += '¨0';
-
- var replaceFunc = function (wholeMatch, linkId, url, width, height, blankLines, title) {
- linkId = linkId.toLowerCase();
- if (url.match(/^data:.+?\/.+?;base64,/)) {
- // remove newlines
- globals.gUrls[linkId] = url.replace(/\s/g, '');
- } else {
- globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url, options, globals); // Link IDs are case-insensitive
- }
-
- if (blankLines) {
- // Oops, found blank lines, so it's not a title.
- // Put back the parenthetical statement we stole.
- return blankLines + title;
-
- } else {
- if (title) {
- globals.gTitles[linkId] = title.replace(/"|'/g, '"');
- }
- if (options.parseImgDimensions && width && height) {
- globals.gDimensions[linkId] = {
- width: width,
- height: height
- };
- }
- }
- // Completely remove the definition from the text
- return '';
- };
-
- // first we try to find base64 link references
- text = text.replace(base64Regex, replaceFunc);
-
- text = text.replace(regex, replaceFunc);
-
- // attacklab: strip sentinel
- text = text.replace(/¨0/, '');
-
- return text;
-});
-
-showdown.subParser('tables', function (text, options, globals) {
- if (!options.tables) {
- return text;
- }
-
- var tableRgx = /^ {0,3}\|?.+\|.+\n {0,3}\|?[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:[-=]){2,}[\s\S]+?(?:\n\n|¨0)/gm,
- //singeColTblRgx = /^ {0,3}\|.+\|\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n(?: {0,3}\|.+\|\n)+(?:\n\n|¨0)/gm;
- singeColTblRgx = /^ {0,3}\|.+\|[ \t]*\n {0,3}\|[ \t]*:?[ \t]*(?:[-=]){2,}[ \t]*:?[ \t]*\|[ \t]*\n( {0,3}\|.+\|[ \t]*\n)*(?:\n|¨0)/gm;
-
- function parseStyles (sLine) {
- if (/^:[ \t]*--*$/.test(sLine)) {
- return ' style="text-align:left;"';
- } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) {
- return ' style="text-align:right;"';
- } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) {
- return ' style="text-align:center;"';
- } else {
- return '';
- }
- }
-
- function parseHeaders (header, style) {
- var id = '';
- header = header.trim();
- // support both tablesHeaderId and tableHeaderId due to error in documentation so we don't break backwards compatibility
- if (options.tablesHeaderId || options.tableHeaderId) {
- id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"';
- }
- header = showdown.subParser('spanGamut')(header, options, globals);
-
- return '' + header + ' \n';
- }
-
- function parseCells (cell, style) {
- var subText = showdown.subParser('spanGamut')(cell, options, globals);
- return '' + subText + ' \n';
- }
-
- function buildTable (headers, cells) {
- var tb = '\n\n\n',
- tblLgn = headers.length;
-
- for (var i = 0; i < tblLgn; ++i) {
- tb += headers[i];
- }
- tb += ' \n\n\n';
-
- for (i = 0; i < cells.length; ++i) {
- tb += '\n';
- for (var ii = 0; ii < tblLgn; ++ii) {
- tb += cells[i][ii];
- }
- tb += ' \n';
- }
- tb += '\n
\n';
- return tb;
- }
-
- function parseTable (rawTable) {
- var i, tableLines = rawTable.split('\n');
-
- for (i = 0; i < tableLines.length; ++i) {
- // strip wrong first and last column if wrapped tables are used
- if (/^ {0,3}\|/.test(tableLines[i])) {
- tableLines[i] = tableLines[i].replace(/^ {0,3}\|/, '');
- }
- if (/\|[ \t]*$/.test(tableLines[i])) {
- tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, '');
- }
- // parse code spans first, but we only support one line code spans
- tableLines[i] = showdown.subParser('codeSpans')(tableLines[i], options, globals);
- }
-
- var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}),
- rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}),
- rawCells = [],
- headers = [],
- styles = [],
- cells = [];
-
- tableLines.shift();
- tableLines.shift();
-
- for (i = 0; i < tableLines.length; ++i) {
- if (tableLines[i].trim() === '') {
- continue;
- }
- rawCells.push(
- tableLines[i]
- .split('|')
- .map(function (s) {
- return s.trim();
- })
- );
- }
-
- if (rawHeaders.length < rawStyles.length) {
- return rawTable;
- }
-
- for (i = 0; i < rawStyles.length; ++i) {
- styles.push(parseStyles(rawStyles[i]));
- }
-
- for (i = 0; i < rawHeaders.length; ++i) {
- if (showdown.helper.isUndefined(styles[i])) {
- styles[i] = '';
- }
- headers.push(parseHeaders(rawHeaders[i], styles[i]));
- }
-
- for (i = 0; i < rawCells.length; ++i) {
- var row = [];
- for (var ii = 0; ii < headers.length; ++ii) {
- if (showdown.helper.isUndefined(rawCells[i][ii])) {
-
- }
- row.push(parseCells(rawCells[i][ii], styles[ii]));
- }
- cells.push(row);
- }
-
- return buildTable(headers, cells);
- }
-
- text = globals.converter._dispatch('tables.before', text, options, globals);
-
- // find escaped pipe characters
- text = text.replace(/\\(\|)/g, showdown.helper.escapeCharactersCallback);
-
- // parse multi column tables
- text = text.replace(tableRgx, parseTable);
-
- // parse one column tables
- text = text.replace(singeColTblRgx, parseTable);
-
- text = globals.converter._dispatch('tables.after', text, options, globals);
-
- return text;
-});
-
-showdown.subParser('underline', function (text, options, globals) {
- if (!options.underline) {
- return text;
- }
-
- text = globals.converter._dispatch('underline.before', text, options, globals);
-
- if (options.literalMidWordUnderscores) {
- text = text.replace(/\b_?__(\S[\s\S]*)___?\b/g, function (wm, txt) {
- return '' + txt + '';
- });
- } else {
- text = text.replace(/_?__(\S[\s\S]*?)___?/g, function (wm, m) {
- return (/\S$/.test(m)) ? '' + m + '' : wm;
- });
- }
-
- // escape remaining underscores to prevent them being parsed by italic and bold
- text = text.replace(/(_)/g, showdown.helper.escapeCharactersCallback);
-
- text = globals.converter._dispatch('underline.after', text, options, globals);
-
- return text;
-});
-
-/**
- * Swap back in all the special characters we've hidden.
- */
-showdown.subParser('unescapeSpecialChars', function (text, options, globals) {
- text = globals.converter._dispatch('unescapeSpecialChars.before', text, options, globals);
-
- text = text.replace(/¨E(\d+)E/g, function (wholeMatch, m1) {
- var charCodeToReplace = parseInt(m1);
- return String.fromCharCode(charCodeToReplace);
- });
-
- text = globals.converter._dispatch('unescapeSpecialChars.after', text, options, globals);
- return text;
-});
-
-var root = this;
-
-// AMD Loader
-if (typeof undefined === 'function' && undefined.amd) {
- undefined(function () {
- return showdown;
- });
-
-// CommonJS/nodeJS Loader
-} else if ('object' !== 'undefined' && module.exports) {
- module.exports = showdown;
-
-// Regular Browser loader
-} else {
- root.showdown = showdown;
-}
-}).call(commonjsGlobal);
-
-
-});
-
-var moment = createCommonjsModule(function (module, exports) {
-//! moment.js
-//! version : 2.20.1
-//! authors : Tim Wood, Iskren Chernev, Moment.js contributors
-//! license : MIT
-//! momentjs.com
-
-(function (global, factory) {
- module.exports = factory();
-}(commonjsGlobal, (function () { var hookCallback;
-
-function hooks () {
- return hookCallback.apply(null, arguments);
-}
-
-// This is done to register the method called with moment()
-// without creating circular dependencies.
-function setHookCallback (callback) {
- hookCallback = callback;
-}
-
-function isArray(input) {
- return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';
-}
-
-function isObject(input) {
- // IE8 will treat undefined and null as object if it wasn't for
- // input != null
- return input != null && Object.prototype.toString.call(input) === '[object Object]';
-}
-
-function isObjectEmpty(obj) {
- if (Object.getOwnPropertyNames) {
- return (Object.getOwnPropertyNames(obj).length === 0);
- } else {
- var k;
- for (k in obj) {
- if (obj.hasOwnProperty(k)) {
- return false;
- }
- }
- return true;
- }
-}
-
-function isUndefined(input) {
- return input === void 0;
-}
-
-function isNumber(input) {
- return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';
-}
-
-function isDate(input) {
- return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';
-}
-
-function map(arr, fn) {
- var res = [], i;
- for (i = 0; i < arr.length; ++i) {
- res.push(fn(arr[i], i));
- }
- return res;
-}
-
-function hasOwnProp(a, b) {
- return Object.prototype.hasOwnProperty.call(a, b);
-}
-
-function extend(a, b) {
- for (var i in b) {
- if (hasOwnProp(b, i)) {
- a[i] = b[i];
- }
- }
-
- if (hasOwnProp(b, 'toString')) {
- a.toString = b.toString;
- }
-
- if (hasOwnProp(b, 'valueOf')) {
- a.valueOf = b.valueOf;
- }
-
- return a;
-}
-
-function createUTC (input, format, locale, strict) {
- return createLocalOrUTC(input, format, locale, strict, true).utc();
-}
-
-function defaultParsingFlags() {
- // We need to deep clone this object.
- return {
- empty : false,
- unusedTokens : [],
- unusedInput : [],
- overflow : -2,
- charsLeftOver : 0,
- nullInput : false,
- invalidMonth : null,
- invalidFormat : false,
- userInvalidated : false,
- iso : false,
- parsedDateParts : [],
- meridiem : null,
- rfc2822 : false,
- weekdayMismatch : false
- };
-}
-
-function getParsingFlags(m) {
- if (m._pf == null) {
- m._pf = defaultParsingFlags();
- }
- return m._pf;
-}
-
-var some;
-if (Array.prototype.some) {
- some = Array.prototype.some;
-} else {
- some = function (fun) {
- var t = Object(this);
- var len = t.length >>> 0;
-
- for (var i = 0; i < len; i++) {
- if (i in t && fun.call(this, t[i], i, t)) {
- return true;
- }
- }
-
- return false;
- };
-}
-
-function isValid(m) {
- if (m._isValid == null) {
- var flags = getParsingFlags(m);
- var parsedParts = some.call(flags.parsedDateParts, function (i) {
- return i != null;
- });
- var isNowValid = !isNaN(m._d.getTime()) &&
- flags.overflow < 0 &&
- !flags.empty &&
- !flags.invalidMonth &&
- !flags.invalidWeekday &&
- !flags.weekdayMismatch &&
- !flags.nullInput &&
- !flags.invalidFormat &&
- !flags.userInvalidated &&
- (!flags.meridiem || (flags.meridiem && parsedParts));
-
- if (m._strict) {
- isNowValid = isNowValid &&
- flags.charsLeftOver === 0 &&
- flags.unusedTokens.length === 0 &&
- flags.bigHour === undefined;
- }
-
- if (Object.isFrozen == null || !Object.isFrozen(m)) {
- m._isValid = isNowValid;
- }
- else {
- return isNowValid;
- }
- }
- return m._isValid;
-}
-
-function createInvalid (flags) {
- var m = createUTC(NaN);
- if (flags != null) {
- extend(getParsingFlags(m), flags);
- }
- else {
- getParsingFlags(m).userInvalidated = true;
- }
-
- return m;
-}
-
-// Plugins that add properties should also add the key here (null value),
-// so we can properly clone ourselves.
-var momentProperties = hooks.momentProperties = [];
-
-function copyConfig(to, from) {
- var i, prop, val;
-
- if (!isUndefined(from._isAMomentObject)) {
- to._isAMomentObject = from._isAMomentObject;
- }
- if (!isUndefined(from._i)) {
- to._i = from._i;
- }
- if (!isUndefined(from._f)) {
- to._f = from._f;
- }
- if (!isUndefined(from._l)) {
- to._l = from._l;
- }
- if (!isUndefined(from._strict)) {
- to._strict = from._strict;
- }
- if (!isUndefined(from._tzm)) {
- to._tzm = from._tzm;
- }
- if (!isUndefined(from._isUTC)) {
- to._isUTC = from._isUTC;
- }
- if (!isUndefined(from._offset)) {
- to._offset = from._offset;
- }
- if (!isUndefined(from._pf)) {
- to._pf = getParsingFlags(from);
- }
- if (!isUndefined(from._locale)) {
- to._locale = from._locale;
- }
-
- if (momentProperties.length > 0) {
- for (i = 0; i < momentProperties.length; i++) {
- prop = momentProperties[i];
- val = from[prop];
- if (!isUndefined(val)) {
- to[prop] = val;
- }
- }
- }
-
- return to;
-}
-
-var updateInProgress = false;
-
-// Moment prototype object
-function Moment(config) {
- copyConfig(this, config);
- this._d = new Date(config._d != null ? config._d.getTime() : NaN);
- if (!this.isValid()) {
- this._d = new Date(NaN);
- }
- // Prevent infinite loop in case updateOffset creates new moment
- // objects.
- if (updateInProgress === false) {
- updateInProgress = true;
- hooks.updateOffset(this);
- updateInProgress = false;
- }
-}
-
-function isMoment (obj) {
- return obj instanceof Moment || (obj != null && obj._isAMomentObject != null);
-}
-
-function absFloor (number) {
- if (number < 0) {
- // -0 -> 0
- return Math.ceil(number) || 0;
- } else {
- return Math.floor(number);
- }
-}
-
-function toInt(argumentForCoercion) {
- var coercedNumber = +argumentForCoercion,
- value = 0;
-
- if (coercedNumber !== 0 && isFinite(coercedNumber)) {
- value = absFloor(coercedNumber);
- }
-
- return value;
-}
-
-// compare two arrays, return the number of differences
-function compareArrays(array1, array2, dontConvert) {
- var len = Math.min(array1.length, array2.length),
- lengthDiff = Math.abs(array1.length - array2.length),
- diffs = 0,
- i;
- for (i = 0; i < len; i++) {
- if ((dontConvert && array1[i] !== array2[i]) ||
- (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) {
- diffs++;
- }
- }
- return diffs + lengthDiff;
-}
-
-function warn(msg) {
- if (hooks.suppressDeprecationWarnings === false &&
- (typeof console !== 'undefined') && console.warn) {
- console.warn('Deprecation warning: ' + msg);
- }
-}
-
-function deprecate(msg, fn) {
- var firstTime = true;
-
- return extend(function () {
- if (hooks.deprecationHandler != null) {
- hooks.deprecationHandler(null, msg);
- }
- if (firstTime) {
- var args = [];
- var arg;
- for (var i = 0; i < arguments.length; i++) {
- arg = '';
- if (typeof arguments[i] === 'object') {
- arg += '\n[' + i + '] ';
- for (var key in arguments[0]) {
- arg += key + ': ' + arguments[0][key] + ', ';
- }
- arg = arg.slice(0, -2); // Remove trailing comma and space
- } else {
- arg = arguments[i];
- }
- args.push(arg);
- }
- warn(msg + '\nArguments: ' + Array.prototype.slice.call(args).join('') + '\n' + (new Error()).stack);
- firstTime = false;
- }
- return fn.apply(this, arguments);
- }, fn);
-}
-
-var deprecations = {};
-
-function deprecateSimple(name, msg) {
- if (hooks.deprecationHandler != null) {
- hooks.deprecationHandler(name, msg);
- }
- if (!deprecations[name]) {
- warn(msg);
- deprecations[name] = true;
- }
-}
-
-hooks.suppressDeprecationWarnings = false;
-hooks.deprecationHandler = null;
-
-function isFunction(input) {
- return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';
-}
-
-function set (config) {
- var prop, i;
- for (i in config) {
- prop = config[i];
- if (isFunction(prop)) {
- this[i] = prop;
- } else {
- this['_' + i] = prop;
- }
- }
- this._config = config;
- // Lenient ordinal parsing accepts just a number in addition to
- // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.
- // TODO: Remove "ordinalParse" fallback in next major release.
- this._dayOfMonthOrdinalParseLenient = new RegExp(
- (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +
- '|' + (/\d{1,2}/).source);
-}
-
-function mergeConfigs(parentConfig, childConfig) {
- var res = extend({}, parentConfig), prop;
- for (prop in childConfig) {
- if (hasOwnProp(childConfig, prop)) {
- if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {
- res[prop] = {};
- extend(res[prop], parentConfig[prop]);
- extend(res[prop], childConfig[prop]);
- } else if (childConfig[prop] != null) {
- res[prop] = childConfig[prop];
- } else {
- delete res[prop];
- }
- }
- }
- for (prop in parentConfig) {
- if (hasOwnProp(parentConfig, prop) &&
- !hasOwnProp(childConfig, prop) &&
- isObject(parentConfig[prop])) {
- // make sure changes to properties don't modify parent config
- res[prop] = extend({}, res[prop]);
- }
- }
- return res;
-}
-
-function Locale(config) {
- if (config != null) {
- this.set(config);
- }
-}
-
-var keys;
-
-if (Object.keys) {
- keys = Object.keys;
-} else {
- keys = function (obj) {
- var i, res = [];
- for (i in obj) {
- if (hasOwnProp(obj, i)) {
- res.push(i);
- }
- }
- return res;
- };
-}
-
-var defaultCalendar = {
- sameDay : '[Today at] LT',
- nextDay : '[Tomorrow at] LT',
- nextWeek : 'dddd [at] LT',
- lastDay : '[Yesterday at] LT',
- lastWeek : '[Last] dddd [at] LT',
- sameElse : 'L'
-};
-
-function calendar (key, mom, now) {
- var output = this._calendar[key] || this._calendar['sameElse'];
- return isFunction(output) ? output.call(mom, now) : output;
-}
-
-var defaultLongDateFormat = {
- LTS : 'h:mm:ss A',
- LT : 'h:mm A',
- L : 'MM/DD/YYYY',
- LL : 'MMMM D, YYYY',
- LLL : 'MMMM D, YYYY h:mm A',
- LLLL : 'dddd, MMMM D, YYYY h:mm A'
-};
-
-function longDateFormat (key) {
- var format = this._longDateFormat[key],
- formatUpper = this._longDateFormat[key.toUpperCase()];
-
- if (format || !formatUpper) {
- return format;
- }
-
- this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {
- return val.slice(1);
- });
-
- return this._longDateFormat[key];
-}
-
-var defaultInvalidDate = 'Invalid date';
-
-function invalidDate () {
- return this._invalidDate;
-}
-
-var defaultOrdinal = '%d';
-var defaultDayOfMonthOrdinalParse = /\d{1,2}/;
-
-function ordinal (number) {
- return this._ordinal.replace('%d', number);
-}
-
-var defaultRelativeTime = {
- future : 'in %s',
- past : '%s ago',
- s : 'a few seconds',
- ss : '%d seconds',
- m : 'a minute',
- mm : '%d minutes',
- h : 'an hour',
- hh : '%d hours',
- d : 'a day',
- dd : '%d days',
- M : 'a month',
- MM : '%d months',
- y : 'a year',
- yy : '%d years'
-};
-
-function relativeTime (number, withoutSuffix, string, isFuture) {
- var output = this._relativeTime[string];
- return (isFunction(output)) ?
- output(number, withoutSuffix, string, isFuture) :
- output.replace(/%d/i, number);
-}
-
-function pastFuture (diff, output) {
- var format = this._relativeTime[diff > 0 ? 'future' : 'past'];
- return isFunction(format) ? format(output) : format.replace(/%s/i, output);
-}
-
-var aliases = {};
-
-function addUnitAlias (unit, shorthand) {
- var lowerCase = unit.toLowerCase();
- aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;
-}
-
-function normalizeUnits(units) {
- return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;
-}
-
-function normalizeObjectUnits(inputObject) {
- var normalizedInput = {},
- normalizedProp,
- prop;
-
- for (prop in inputObject) {
- if (hasOwnProp(inputObject, prop)) {
- normalizedProp = normalizeUnits(prop);
- if (normalizedProp) {
- normalizedInput[normalizedProp] = inputObject[prop];
- }
- }
- }
-
- return normalizedInput;
-}
-
-var priorities = {};
-
-function addUnitPriority(unit, priority) {
- priorities[unit] = priority;
-}
-
-function getPrioritizedUnits(unitsObj) {
- var units = [];
- for (var u in unitsObj) {
- units.push({unit: u, priority: priorities[u]});
- }
- units.sort(function (a, b) {
- return a.priority - b.priority;
- });
- return units;
-}
-
-function zeroFill(number, targetLength, forceSign) {
- var absNumber = '' + Math.abs(number),
- zerosToFill = targetLength - absNumber.length,
- sign = number >= 0;
- return (sign ? (forceSign ? '+' : '') : '-') +
- Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;
-}
-
-var formattingTokens = /(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;
-
-var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g;
-
-var formatFunctions = {};
-
-var formatTokenFunctions = {};
-
-// token: 'M'
-// padded: ['MM', 2]
-// ordinal: 'Mo'
-// callback: function () { this.month() + 1 }
-function addFormatToken (token, padded, ordinal, callback) {
- var func = callback;
- if (typeof callback === 'string') {
- func = function () {
- return this[callback]();
- };
- }
- if (token) {
- formatTokenFunctions[token] = func;
- }
- if (padded) {
- formatTokenFunctions[padded[0]] = function () {
- return zeroFill(func.apply(this, arguments), padded[1], padded[2]);
- };
- }
- if (ordinal) {
- formatTokenFunctions[ordinal] = function () {
- return this.localeData().ordinal(func.apply(this, arguments), token);
- };
- }
-}
-
-function removeFormattingTokens(input) {
- if (input.match(/\[[\s\S]/)) {
- return input.replace(/^\[|\]$/g, '');
- }
- return input.replace(/\\/g, '');
-}
-
-function makeFormatFunction(format) {
- var array = format.match(formattingTokens), i, length;
-
- for (i = 0, length = array.length; i < length; i++) {
- if (formatTokenFunctions[array[i]]) {
- array[i] = formatTokenFunctions[array[i]];
- } else {
- array[i] = removeFormattingTokens(array[i]);
- }
- }
-
- return function (mom) {
- var output = '', i;
- for (i = 0; i < length; i++) {
- output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];
- }
- return output;
- };
-}
-
-// format date using native date object
-function formatMoment(m, format) {
- if (!m.isValid()) {
- return m.localeData().invalidDate();
- }
-
- format = expandFormat(format, m.localeData());
- formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);
-
- return formatFunctions[format](m);
-}
-
-function expandFormat(format, locale) {
- var i = 5;
-
- function replaceLongDateFormatTokens(input) {
- return locale.longDateFormat(input) || input;
- }
-
- localFormattingTokens.lastIndex = 0;
- while (i >= 0 && localFormattingTokens.test(format)) {
- format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);
- localFormattingTokens.lastIndex = 0;
- i -= 1;
- }
-
- return format;
-}
-
-var match1 = /\d/; // 0 - 9
-var match2 = /\d\d/; // 00 - 99
-var match3 = /\d{3}/; // 000 - 999
-var match4 = /\d{4}/; // 0000 - 9999
-var match6 = /[+-]?\d{6}/; // -999999 - 999999
-var match1to2 = /\d\d?/; // 0 - 99
-var match3to4 = /\d\d\d\d?/; // 999 - 9999
-var match5to6 = /\d\d\d\d\d\d?/; // 99999 - 999999
-var match1to3 = /\d{1,3}/; // 0 - 999
-var match1to4 = /\d{1,4}/; // 0 - 9999
-var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999
-
-var matchUnsigned = /\d+/; // 0 - inf
-var matchSigned = /[+-]?\d+/; // -inf - inf
-
-var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z
-var matchShortOffset = /Z|[+-]\d\d(?::?\d\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z
-
-var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123
-
-// any word (or two) characters or numbers including two/three word month in arabic.
-// includes scottish gaelic two word and hyphenated months
-var matchWord = /[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;
-
-
-var regexes = {};
-
-function addRegexToken (token, regex, strictRegex) {
- regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {
- return (isStrict && strictRegex) ? strictRegex : regex;
- };
-}
-
-function getParseRegexForToken (token, config) {
- if (!hasOwnProp(regexes, token)) {
- return new RegExp(unescapeFormat(token));
- }
-
- return regexes[token](config._strict, config._locale);
-}
-
-// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript
-function unescapeFormat(s) {
- return regexEscape(s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) {
- return p1 || p2 || p3 || p4;
- }));
-}
-
-function regexEscape(s) {
- return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
-}
-
-var tokens = {};
-
-function addParseToken (token, callback) {
- var i, func = callback;
- if (typeof token === 'string') {
- token = [token];
- }
- if (isNumber(callback)) {
- func = function (input, array) {
- array[callback] = toInt(input);
- };
- }
- for (i = 0; i < token.length; i++) {
- tokens[token[i]] = func;
- }
-}
-
-function addWeekParseToken (token, callback) {
- addParseToken(token, function (input, array, config, token) {
- config._w = config._w || {};
- callback(input, config._w, config, token);
- });
-}
-
-function addTimeToArrayFromToken(token, input, config) {
- if (input != null && hasOwnProp(tokens, token)) {
- tokens[token](input, config._a, config, token);
- }
-}
-
-var YEAR = 0;
-var MONTH = 1;
-var DATE = 2;
-var HOUR = 3;
-var MINUTE = 4;
-var SECOND = 5;
-var MILLISECOND = 6;
-var WEEK = 7;
-var WEEKDAY = 8;
-
-// FORMATTING
-
-addFormatToken('Y', 0, 0, function () {
- var y = this.year();
- return y <= 9999 ? '' + y : '+' + y;
-});
-
-addFormatToken(0, ['YY', 2], 0, function () {
- return this.year() % 100;
-});
-
-addFormatToken(0, ['YYYY', 4], 0, 'year');
-addFormatToken(0, ['YYYYY', 5], 0, 'year');
-addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');
-
-// ALIASES
-
-addUnitAlias('year', 'y');
-
-// PRIORITIES
-
-addUnitPriority('year', 1);
-
-// PARSING
-
-addRegexToken('Y', matchSigned);
-addRegexToken('YY', match1to2, match2);
-addRegexToken('YYYY', match1to4, match4);
-addRegexToken('YYYYY', match1to6, match6);
-addRegexToken('YYYYYY', match1to6, match6);
-
-addParseToken(['YYYYY', 'YYYYYY'], YEAR);
-addParseToken('YYYY', function (input, array) {
- array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);
-});
-addParseToken('YY', function (input, array) {
- array[YEAR] = hooks.parseTwoDigitYear(input);
-});
-addParseToken('Y', function (input, array) {
- array[YEAR] = parseInt(input, 10);
-});
-
-// HELPERS
-
-function daysInYear(year) {
- return isLeapYear(year) ? 366 : 365;
-}
-
-function isLeapYear(year) {
- return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
-}
-
-// HOOKS
-
-hooks.parseTwoDigitYear = function (input) {
- return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);
-};
-
-// MOMENTS
-
-var getSetYear = makeGetSet('FullYear', true);
-
-function getIsLeapYear () {
- return isLeapYear(this.year());
-}
-
-function makeGetSet (unit, keepTime) {
- return function (value) {
- if (value != null) {
- set$1(this, unit, value);
- hooks.updateOffset(this, keepTime);
- return this;
- } else {
- return get(this, unit);
- }
- };
-}
-
-function get (mom, unit) {
- return mom.isValid() ?
- mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;
-}
-
-function set$1 (mom, unit, value) {
- if (mom.isValid() && !isNaN(value)) {
- if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));
- }
- else {
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
- }
- }
-}
-
-// MOMENTS
-
-function stringGet (units) {
- units = normalizeUnits(units);
- if (isFunction(this[units])) {
- return this[units]();
- }
- return this;
-}
-
-
-function stringSet (units, value) {
- if (typeof units === 'object') {
- units = normalizeObjectUnits(units);
- var prioritized = getPrioritizedUnits(units);
- for (var i = 0; i < prioritized.length; i++) {
- this[prioritized[i].unit](units[prioritized[i].unit]);
- }
- } else {
- units = normalizeUnits(units);
- if (isFunction(this[units])) {
- return this[units](value);
- }
- }
- return this;
-}
-
-function mod(n, x) {
- return ((n % x) + x) % x;
-}
-
-var indexOf;
-
-if (Array.prototype.indexOf) {
- indexOf = Array.prototype.indexOf;
-} else {
- indexOf = function (o) {
- // I know
- var i;
- for (i = 0; i < this.length; ++i) {
- if (this[i] === o) {
- return i;
- }
- }
- return -1;
- };
-}
-
-function daysInMonth(year, month) {
- if (isNaN(year) || isNaN(month)) {
- return NaN;
- }
- var modMonth = mod(month, 12);
- year += (month - modMonth) / 12;
- return modMonth === 1 ? (isLeapYear(year) ? 29 : 28) : (31 - modMonth % 7 % 2);
-}
-
-// FORMATTING
-
-addFormatToken('M', ['MM', 2], 'Mo', function () {
- return this.month() + 1;
-});
-
-addFormatToken('MMM', 0, 0, function (format) {
- return this.localeData().monthsShort(this, format);
-});
-
-addFormatToken('MMMM', 0, 0, function (format) {
- return this.localeData().months(this, format);
-});
-
-// ALIASES
-
-addUnitAlias('month', 'M');
-
-// PRIORITY
-
-addUnitPriority('month', 8);
-
-// PARSING
-
-addRegexToken('M', match1to2);
-addRegexToken('MM', match1to2, match2);
-addRegexToken('MMM', function (isStrict, locale) {
- return locale.monthsShortRegex(isStrict);
-});
-addRegexToken('MMMM', function (isStrict, locale) {
- return locale.monthsRegex(isStrict);
-});
-
-addParseToken(['M', 'MM'], function (input, array) {
- array[MONTH] = toInt(input) - 1;
-});
-
-addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {
- var month = config._locale.monthsParse(input, token, config._strict);
- // if we didn't find a month name, mark the date as invalid.
- if (month != null) {
- array[MONTH] = month;
- } else {
- getParsingFlags(config).invalidMonth = input;
- }
-});
-
-// LOCALES
-
-var MONTHS_IN_FORMAT = /D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/;
-var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');
-function localeMonths (m, format) {
- if (!m) {
- return isArray(this._months) ? this._months :
- this._months['standalone'];
- }
- return isArray(this._months) ? this._months[m.month()] :
- this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];
-}
-
-var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');
-function localeMonthsShort (m, format) {
- if (!m) {
- return isArray(this._monthsShort) ? this._monthsShort :
- this._monthsShort['standalone'];
- }
- return isArray(this._monthsShort) ? this._monthsShort[m.month()] :
- this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];
-}
-
-function handleStrictParse(monthName, format, strict) {
- var i, ii, mom, llc = monthName.toLocaleLowerCase();
- if (!this._monthsParse) {
- // this is not used
- this._monthsParse = [];
- this._longMonthsParse = [];
- this._shortMonthsParse = [];
- for (i = 0; i < 12; ++i) {
- mom = createUTC([2000, i]);
- this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();
- this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();
- }
- }
-
- if (strict) {
- if (format === 'MMM') {
- ii = indexOf.call(this._shortMonthsParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._longMonthsParse, llc);
- return ii !== -1 ? ii : null;
- }
- } else {
- if (format === 'MMM') {
- ii = indexOf.call(this._shortMonthsParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._longMonthsParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._longMonthsParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortMonthsParse, llc);
- return ii !== -1 ? ii : null;
- }
- }
-}
-
-function localeMonthsParse (monthName, format, strict) {
- var i, mom, regex;
-
- if (this._monthsParseExact) {
- return handleStrictParse.call(this, monthName, format, strict);
- }
-
- if (!this._monthsParse) {
- this._monthsParse = [];
- this._longMonthsParse = [];
- this._shortMonthsParse = [];
- }
-
- // TODO: add sorting
- // Sorting makes sure if one month (or abbr) is a prefix of another
- // see sorting in computeMonthsParse
- for (i = 0; i < 12; i++) {
- // make the regex if we don't have it already
- mom = createUTC([2000, i]);
- if (strict && !this._longMonthsParse[i]) {
- this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');
- this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');
- }
- if (!strict && !this._monthsParse[i]) {
- regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');
- this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {
- return i;
- } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {
- return i;
- } else if (!strict && this._monthsParse[i].test(monthName)) {
- return i;
- }
- }
-}
-
-// MOMENTS
-
-function setMonth (mom, value) {
- var dayOfMonth;
-
- if (!mom.isValid()) {
- // No op
- return mom;
- }
-
- if (typeof value === 'string') {
- if (/^\d+$/.test(value)) {
- value = toInt(value);
- } else {
- value = mom.localeData().monthsParse(value);
- // TODO: Another silent failure?
- if (!isNumber(value)) {
- return mom;
- }
- }
- }
-
- dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));
- mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);
- return mom;
-}
-
-function getSetMonth (value) {
- if (value != null) {
- setMonth(this, value);
- hooks.updateOffset(this, true);
- return this;
- } else {
- return get(this, 'Month');
- }
-}
-
-function getDaysInMonth () {
- return daysInMonth(this.year(), this.month());
-}
-
-var defaultMonthsShortRegex = matchWord;
-function monthsShortRegex (isStrict) {
- if (this._monthsParseExact) {
- if (!hasOwnProp(this, '_monthsRegex')) {
- computeMonthsParse.call(this);
- }
- if (isStrict) {
- return this._monthsShortStrictRegex;
- } else {
- return this._monthsShortRegex;
- }
- } else {
- if (!hasOwnProp(this, '_monthsShortRegex')) {
- this._monthsShortRegex = defaultMonthsShortRegex;
- }
- return this._monthsShortStrictRegex && isStrict ?
- this._monthsShortStrictRegex : this._monthsShortRegex;
- }
-}
-
-var defaultMonthsRegex = matchWord;
-function monthsRegex (isStrict) {
- if (this._monthsParseExact) {
- if (!hasOwnProp(this, '_monthsRegex')) {
- computeMonthsParse.call(this);
- }
- if (isStrict) {
- return this._monthsStrictRegex;
- } else {
- return this._monthsRegex;
- }
- } else {
- if (!hasOwnProp(this, '_monthsRegex')) {
- this._monthsRegex = defaultMonthsRegex;
- }
- return this._monthsStrictRegex && isStrict ?
- this._monthsStrictRegex : this._monthsRegex;
- }
-}
-
-function computeMonthsParse () {
- function cmpLenRev(a, b) {
- return b.length - a.length;
- }
-
- var shortPieces = [], longPieces = [], mixedPieces = [],
- i, mom;
- for (i = 0; i < 12; i++) {
- // make the regex if we don't have it already
- mom = createUTC([2000, i]);
- shortPieces.push(this.monthsShort(mom, ''));
- longPieces.push(this.months(mom, ''));
- mixedPieces.push(this.months(mom, ''));
- mixedPieces.push(this.monthsShort(mom, ''));
- }
- // Sorting makes sure if one month (or abbr) is a prefix of another it
- // will match the longer piece.
- shortPieces.sort(cmpLenRev);
- longPieces.sort(cmpLenRev);
- mixedPieces.sort(cmpLenRev);
- for (i = 0; i < 12; i++) {
- shortPieces[i] = regexEscape(shortPieces[i]);
- longPieces[i] = regexEscape(longPieces[i]);
- }
- for (i = 0; i < 24; i++) {
- mixedPieces[i] = regexEscape(mixedPieces[i]);
- }
-
- this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
- this._monthsShortRegex = this._monthsRegex;
- this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
- this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
-}
-
-function createDate (y, m, d, h, M, s, ms) {
- // can't just apply() to create a date:
- // https://stackoverflow.com/q/181348
- var date = new Date(y, m, d, h, M, s, ms);
-
- // the date constructor remaps years 0-99 to 1900-1999
- if (y < 100 && y >= 0 && isFinite(date.getFullYear())) {
- date.setFullYear(y);
- }
- return date;
-}
-
-function createUTCDate (y) {
- var date = new Date(Date.UTC.apply(null, arguments));
-
- // the Date.UTC function remaps years 0-99 to 1900-1999
- if (y < 100 && y >= 0 && isFinite(date.getUTCFullYear())) {
- date.setUTCFullYear(y);
- }
- return date;
-}
-
-// start-of-first-week - start-of-year
-function firstWeekOffset(year, dow, doy) {
- var // first-week day -- which january is always in the first week (4 for iso, 1 for other)
- fwd = 7 + dow - doy,
- // first-week day local weekday -- which local weekday is fwd
- fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;
-
- return -fwdlw + fwd - 1;
-}
-
-// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday
-function dayOfYearFromWeeks(year, week, weekday, dow, doy) {
- var localWeekday = (7 + weekday - dow) % 7,
- weekOffset = firstWeekOffset(year, dow, doy),
- dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,
- resYear, resDayOfYear;
-
- if (dayOfYear <= 0) {
- resYear = year - 1;
- resDayOfYear = daysInYear(resYear) + dayOfYear;
- } else if (dayOfYear > daysInYear(year)) {
- resYear = year + 1;
- resDayOfYear = dayOfYear - daysInYear(year);
- } else {
- resYear = year;
- resDayOfYear = dayOfYear;
- }
-
- return {
- year: resYear,
- dayOfYear: resDayOfYear
- };
-}
-
-function weekOfYear(mom, dow, doy) {
- var weekOffset = firstWeekOffset(mom.year(), dow, doy),
- week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,
- resWeek, resYear;
-
- if (week < 1) {
- resYear = mom.year() - 1;
- resWeek = week + weeksInYear(resYear, dow, doy);
- } else if (week > weeksInYear(mom.year(), dow, doy)) {
- resWeek = week - weeksInYear(mom.year(), dow, doy);
- resYear = mom.year() + 1;
- } else {
- resYear = mom.year();
- resWeek = week;
- }
-
- return {
- week: resWeek,
- year: resYear
- };
-}
-
-function weeksInYear(year, dow, doy) {
- var weekOffset = firstWeekOffset(year, dow, doy),
- weekOffsetNext = firstWeekOffset(year + 1, dow, doy);
- return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;
-}
-
-// FORMATTING
-
-addFormatToken('w', ['ww', 2], 'wo', 'week');
-addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');
-
-// ALIASES
-
-addUnitAlias('week', 'w');
-addUnitAlias('isoWeek', 'W');
-
-// PRIORITIES
-
-addUnitPriority('week', 5);
-addUnitPriority('isoWeek', 5);
-
-// PARSING
-
-addRegexToken('w', match1to2);
-addRegexToken('ww', match1to2, match2);
-addRegexToken('W', match1to2);
-addRegexToken('WW', match1to2, match2);
-
-addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {
- week[token.substr(0, 1)] = toInt(input);
-});
-
-// HELPERS
-
-// LOCALES
-
-function localeWeek (mom) {
- return weekOfYear(mom, this._week.dow, this._week.doy).week;
-}
-
-var defaultLocaleWeek = {
- dow : 0, // Sunday is the first day of the week.
- doy : 6 // The week that contains Jan 1st is the first week of the year.
-};
-
-function localeFirstDayOfWeek () {
- return this._week.dow;
-}
-
-function localeFirstDayOfYear () {
- return this._week.doy;
-}
-
-// MOMENTS
-
-function getSetWeek (input) {
- var week = this.localeData().week(this);
- return input == null ? week : this.add((input - week) * 7, 'd');
-}
-
-function getSetISOWeek (input) {
- var week = weekOfYear(this, 1, 4).week;
- return input == null ? week : this.add((input - week) * 7, 'd');
-}
-
-// FORMATTING
-
-addFormatToken('d', 0, 'do', 'day');
-
-addFormatToken('dd', 0, 0, function (format) {
- return this.localeData().weekdaysMin(this, format);
-});
-
-addFormatToken('ddd', 0, 0, function (format) {
- return this.localeData().weekdaysShort(this, format);
-});
-
-addFormatToken('dddd', 0, 0, function (format) {
- return this.localeData().weekdays(this, format);
-});
-
-addFormatToken('e', 0, 0, 'weekday');
-addFormatToken('E', 0, 0, 'isoWeekday');
-
-// ALIASES
-
-addUnitAlias('day', 'd');
-addUnitAlias('weekday', 'e');
-addUnitAlias('isoWeekday', 'E');
-
-// PRIORITY
-addUnitPriority('day', 11);
-addUnitPriority('weekday', 11);
-addUnitPriority('isoWeekday', 11);
-
-// PARSING
-
-addRegexToken('d', match1to2);
-addRegexToken('e', match1to2);
-addRegexToken('E', match1to2);
-addRegexToken('dd', function (isStrict, locale) {
- return locale.weekdaysMinRegex(isStrict);
-});
-addRegexToken('ddd', function (isStrict, locale) {
- return locale.weekdaysShortRegex(isStrict);
-});
-addRegexToken('dddd', function (isStrict, locale) {
- return locale.weekdaysRegex(isStrict);
-});
-
-addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {
- var weekday = config._locale.weekdaysParse(input, token, config._strict);
- // if we didn't get a weekday name, mark the date as invalid
- if (weekday != null) {
- week.d = weekday;
- } else {
- getParsingFlags(config).invalidWeekday = input;
- }
-});
-
-addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {
- week[token] = toInt(input);
-});
-
-// HELPERS
-
-function parseWeekday(input, locale) {
- if (typeof input !== 'string') {
- return input;
- }
-
- if (!isNaN(input)) {
- return parseInt(input, 10);
- }
-
- input = locale.weekdaysParse(input);
- if (typeof input === 'number') {
- return input;
- }
-
- return null;
-}
-
-function parseIsoWeekday(input, locale) {
- if (typeof input === 'string') {
- return locale.weekdaysParse(input) % 7 || 7;
- }
- return isNaN(input) ? null : input;
-}
-
-// LOCALES
-
-var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');
-function localeWeekdays (m, format) {
- if (!m) {
- return isArray(this._weekdays) ? this._weekdays :
- this._weekdays['standalone'];
- }
- return isArray(this._weekdays) ? this._weekdays[m.day()] :
- this._weekdays[this._weekdays.isFormat.test(format) ? 'format' : 'standalone'][m.day()];
-}
-
-var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');
-function localeWeekdaysShort (m) {
- return (m) ? this._weekdaysShort[m.day()] : this._weekdaysShort;
-}
-
-var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');
-function localeWeekdaysMin (m) {
- return (m) ? this._weekdaysMin[m.day()] : this._weekdaysMin;
-}
-
-function handleStrictParse$1(weekdayName, format, strict) {
- var i, ii, mom, llc = weekdayName.toLocaleLowerCase();
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- this._shortWeekdaysParse = [];
- this._minWeekdaysParse = [];
-
- for (i = 0; i < 7; ++i) {
- mom = createUTC([2000, 1]).day(i);
- this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();
- this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();
- this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();
- }
- }
-
- if (strict) {
- if (format === 'dddd') {
- ii = indexOf.call(this._weekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else if (format === 'ddd') {
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- }
- } else {
- if (format === 'dddd') {
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else if (format === 'ddd') {
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._minWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- } else {
- ii = indexOf.call(this._minWeekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._weekdaysParse, llc);
- if (ii !== -1) {
- return ii;
- }
- ii = indexOf.call(this._shortWeekdaysParse, llc);
- return ii !== -1 ? ii : null;
- }
- }
-}
-
-function localeWeekdaysParse (weekdayName, format, strict) {
- var i, mom, regex;
-
- if (this._weekdaysParseExact) {
- return handleStrictParse$1.call(this, weekdayName, format, strict);
- }
-
- if (!this._weekdaysParse) {
- this._weekdaysParse = [];
- this._minWeekdaysParse = [];
- this._shortWeekdaysParse = [];
- this._fullWeekdaysParse = [];
- }
-
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
-
- mom = createUTC([2000, 1]).day(i);
- if (strict && !this._fullWeekdaysParse[i]) {
- this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\.?') + '$', 'i');
- this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\.?') + '$', 'i');
- this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\.?') + '$', 'i');
- }
- if (!this._weekdaysParse[i]) {
- regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');
- this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');
- }
- // test the regex
- if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {
- return i;
- } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {
- return i;
- } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {
- return i;
- } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {
- return i;
- }
- }
-}
-
-// MOMENTS
-
-function getSetDayOfWeek (input) {
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
- var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();
- if (input != null) {
- input = parseWeekday(input, this.localeData());
- return this.add(input - day, 'd');
- } else {
- return day;
- }
-}
-
-function getSetLocaleDayOfWeek (input) {
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
- var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;
- return input == null ? weekday : this.add(input - weekday, 'd');
-}
-
-function getSetISODayOfWeek (input) {
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
-
- // behaves the same as moment#day except
- // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)
- // as a setter, sunday should belong to the previous week.
-
- if (input != null) {
- var weekday = parseIsoWeekday(input, this.localeData());
- return this.day(this.day() % 7 ? weekday : weekday - 7);
- } else {
- return this.day() || 7;
- }
-}
-
-var defaultWeekdaysRegex = matchWord;
-function weekdaysRegex (isStrict) {
- if (this._weekdaysParseExact) {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- computeWeekdaysParse.call(this);
- }
- if (isStrict) {
- return this._weekdaysStrictRegex;
- } else {
- return this._weekdaysRegex;
- }
- } else {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- this._weekdaysRegex = defaultWeekdaysRegex;
- }
- return this._weekdaysStrictRegex && isStrict ?
- this._weekdaysStrictRegex : this._weekdaysRegex;
- }
-}
-
-var defaultWeekdaysShortRegex = matchWord;
-function weekdaysShortRegex (isStrict) {
- if (this._weekdaysParseExact) {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- computeWeekdaysParse.call(this);
- }
- if (isStrict) {
- return this._weekdaysShortStrictRegex;
- } else {
- return this._weekdaysShortRegex;
- }
- } else {
- if (!hasOwnProp(this, '_weekdaysShortRegex')) {
- this._weekdaysShortRegex = defaultWeekdaysShortRegex;
- }
- return this._weekdaysShortStrictRegex && isStrict ?
- this._weekdaysShortStrictRegex : this._weekdaysShortRegex;
- }
-}
-
-var defaultWeekdaysMinRegex = matchWord;
-function weekdaysMinRegex (isStrict) {
- if (this._weekdaysParseExact) {
- if (!hasOwnProp(this, '_weekdaysRegex')) {
- computeWeekdaysParse.call(this);
- }
- if (isStrict) {
- return this._weekdaysMinStrictRegex;
- } else {
- return this._weekdaysMinRegex;
- }
- } else {
- if (!hasOwnProp(this, '_weekdaysMinRegex')) {
- this._weekdaysMinRegex = defaultWeekdaysMinRegex;
- }
- return this._weekdaysMinStrictRegex && isStrict ?
- this._weekdaysMinStrictRegex : this._weekdaysMinRegex;
- }
-}
-
-
-function computeWeekdaysParse () {
- function cmpLenRev(a, b) {
- return b.length - a.length;
- }
-
- var minPieces = [], shortPieces = [], longPieces = [], mixedPieces = [],
- i, mom, minp, shortp, longp;
- for (i = 0; i < 7; i++) {
- // make the regex if we don't have it already
- mom = createUTC([2000, 1]).day(i);
- minp = this.weekdaysMin(mom, '');
- shortp = this.weekdaysShort(mom, '');
- longp = this.weekdays(mom, '');
- minPieces.push(minp);
- shortPieces.push(shortp);
- longPieces.push(longp);
- mixedPieces.push(minp);
- mixedPieces.push(shortp);
- mixedPieces.push(longp);
- }
- // Sorting makes sure if one weekday (or abbr) is a prefix of another it
- // will match the longer piece.
- minPieces.sort(cmpLenRev);
- shortPieces.sort(cmpLenRev);
- longPieces.sort(cmpLenRev);
- mixedPieces.sort(cmpLenRev);
- for (i = 0; i < 7; i++) {
- shortPieces[i] = regexEscape(shortPieces[i]);
- longPieces[i] = regexEscape(longPieces[i]);
- mixedPieces[i] = regexEscape(mixedPieces[i]);
- }
-
- this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');
- this._weekdaysShortRegex = this._weekdaysRegex;
- this._weekdaysMinRegex = this._weekdaysRegex;
-
- this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');
- this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');
- this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');
-}
-
-// FORMATTING
-
-function hFormat() {
- return this.hours() % 12 || 12;
-}
-
-function kFormat() {
- return this.hours() || 24;
-}
-
-addFormatToken('H', ['HH', 2], 0, 'hour');
-addFormatToken('h', ['hh', 2], 0, hFormat);
-addFormatToken('k', ['kk', 2], 0, kFormat);
-
-addFormatToken('hmm', 0, 0, function () {
- return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);
-});
-
-addFormatToken('hmmss', 0, 0, function () {
- return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) +
- zeroFill(this.seconds(), 2);
-});
-
-addFormatToken('Hmm', 0, 0, function () {
- return '' + this.hours() + zeroFill(this.minutes(), 2);
-});
-
-addFormatToken('Hmmss', 0, 0, function () {
- return '' + this.hours() + zeroFill(this.minutes(), 2) +
- zeroFill(this.seconds(), 2);
-});
-
-function meridiem (token, lowercase) {
- addFormatToken(token, 0, 0, function () {
- return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);
- });
-}
-
-meridiem('a', true);
-meridiem('A', false);
-
-// ALIASES
-
-addUnitAlias('hour', 'h');
-
-// PRIORITY
-addUnitPriority('hour', 13);
-
-// PARSING
-
-function matchMeridiem (isStrict, locale) {
- return locale._meridiemParse;
-}
-
-addRegexToken('a', matchMeridiem);
-addRegexToken('A', matchMeridiem);
-addRegexToken('H', match1to2);
-addRegexToken('h', match1to2);
-addRegexToken('k', match1to2);
-addRegexToken('HH', match1to2, match2);
-addRegexToken('hh', match1to2, match2);
-addRegexToken('kk', match1to2, match2);
-
-addRegexToken('hmm', match3to4);
-addRegexToken('hmmss', match5to6);
-addRegexToken('Hmm', match3to4);
-addRegexToken('Hmmss', match5to6);
-
-addParseToken(['H', 'HH'], HOUR);
-addParseToken(['k', 'kk'], function (input, array, config) {
- var kInput = toInt(input);
- array[HOUR] = kInput === 24 ? 0 : kInput;
-});
-addParseToken(['a', 'A'], function (input, array, config) {
- config._isPm = config._locale.isPM(input);
- config._meridiem = input;
-});
-addParseToken(['h', 'hh'], function (input, array, config) {
- array[HOUR] = toInt(input);
- getParsingFlags(config).bigHour = true;
-});
-addParseToken('hmm', function (input, array, config) {
- var pos = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos));
- array[MINUTE] = toInt(input.substr(pos));
- getParsingFlags(config).bigHour = true;
-});
-addParseToken('hmmss', function (input, array, config) {
- var pos1 = input.length - 4;
- var pos2 = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos1));
- array[MINUTE] = toInt(input.substr(pos1, 2));
- array[SECOND] = toInt(input.substr(pos2));
- getParsingFlags(config).bigHour = true;
-});
-addParseToken('Hmm', function (input, array, config) {
- var pos = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos));
- array[MINUTE] = toInt(input.substr(pos));
-});
-addParseToken('Hmmss', function (input, array, config) {
- var pos1 = input.length - 4;
- var pos2 = input.length - 2;
- array[HOUR] = toInt(input.substr(0, pos1));
- array[MINUTE] = toInt(input.substr(pos1, 2));
- array[SECOND] = toInt(input.substr(pos2));
-});
-
-// LOCALES
-
-function localeIsPM (input) {
- // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays
- // Using charAt should be more compatible.
- return ((input + '').toLowerCase().charAt(0) === 'p');
-}
-
-var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i;
-function localeMeridiem (hours, minutes, isLower) {
- if (hours > 11) {
- return isLower ? 'pm' : 'PM';
- } else {
- return isLower ? 'am' : 'AM';
- }
-}
-
-
-// MOMENTS
-
-// Setting the hour should keep the time, because the user explicitly
-// specified which hour he wants. So trying to maintain the same hour (in
-// a new timezone) makes sense. Adding/subtracting hours does not follow
-// this rule.
-var getSetHour = makeGetSet('Hours', true);
-
-// months
-// week
-// weekdays
-// meridiem
-var baseConfig = {
- calendar: defaultCalendar,
- longDateFormat: defaultLongDateFormat,
- invalidDate: defaultInvalidDate,
- ordinal: defaultOrdinal,
- dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,
- relativeTime: defaultRelativeTime,
-
- months: defaultLocaleMonths,
- monthsShort: defaultLocaleMonthsShort,
-
- week: defaultLocaleWeek,
-
- weekdays: defaultLocaleWeekdays,
- weekdaysMin: defaultLocaleWeekdaysMin,
- weekdaysShort: defaultLocaleWeekdaysShort,
-
- meridiemParse: defaultLocaleMeridiemParse
-};
-
-// internal storage for locale config files
-var locales = {};
-var localeFamilies = {};
-var globalLocale;
-
-function normalizeLocale(key) {
- return key ? key.toLowerCase().replace('_', '-') : key;
-}
-
-// pick the locale from the array
-// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each
-// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root
-function chooseLocale(names) {
- var i = 0, j, next, locale, split;
-
- while (i < names.length) {
- split = normalizeLocale(names[i]).split('-');
- j = split.length;
- next = normalizeLocale(names[i + 1]);
- next = next ? next.split('-') : null;
- while (j > 0) {
- locale = loadLocale(split.slice(0, j).join('-'));
- if (locale) {
- return locale;
- }
- if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {
- //the next array item is better than a shallower substring of this one
- break;
- }
- j--;
- }
- i++;
- }
- return null;
-}
-
-function loadLocale(name) {
- var oldLocale = null;
- // TODO: Find a better way to register and load all the locales in Node
- if (!locales[name] && ('object' !== 'undefined') &&
- module && module.exports) {
- try {
- oldLocale = globalLocale._abbr;
- var aliasedRequire = commonjsRequire;
- aliasedRequire('./locale/' + name);
- getSetGlobalLocale(oldLocale);
- } catch (e) {}
- }
- return locales[name];
-}
-
-// This function will load locale and then set the global locale. If
-// no arguments are passed in, it will simply return the current global
-// locale key.
-function getSetGlobalLocale (key, values) {
- var data;
- if (key) {
- if (isUndefined(values)) {
- data = getLocale(key);
- }
- else {
- data = defineLocale(key, values);
- }
-
- if (data) {
- // moment.duration._locale = moment._locale = data;
- globalLocale = data;
- }
- }
-
- return globalLocale._abbr;
-}
-
-function defineLocale (name, config) {
- if (config !== null) {
- var parentConfig = baseConfig;
- config.abbr = name;
- if (locales[name] != null) {
- deprecateSimple('defineLocaleOverride',
- 'use moment.updateLocale(localeName, config) to change ' +
- 'an existing locale. moment.defineLocale(localeName, ' +
- 'config) should only be used for creating a new locale ' +
- 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');
- parentConfig = locales[name]._config;
- } else if (config.parentLocale != null) {
- if (locales[config.parentLocale] != null) {
- parentConfig = locales[config.parentLocale]._config;
- } else {
- if (!localeFamilies[config.parentLocale]) {
- localeFamilies[config.parentLocale] = [];
- }
- localeFamilies[config.parentLocale].push({
- name: name,
- config: config
- });
- return null;
- }
- }
- locales[name] = new Locale(mergeConfigs(parentConfig, config));
-
- if (localeFamilies[name]) {
- localeFamilies[name].forEach(function (x) {
- defineLocale(x.name, x.config);
- });
- }
-
- // backwards compat for now: also set the locale
- // make sure we set the locale AFTER all child locales have been
- // created, so we won't end up with the child locale set.
- getSetGlobalLocale(name);
-
-
- return locales[name];
- } else {
- // useful for testing
- delete locales[name];
- return null;
- }
-}
-
-function updateLocale(name, config) {
- if (config != null) {
- var locale, tmpLocale, parentConfig = baseConfig;
- // MERGE
- tmpLocale = loadLocale(name);
- if (tmpLocale != null) {
- parentConfig = tmpLocale._config;
- }
- config = mergeConfigs(parentConfig, config);
- locale = new Locale(config);
- locale.parentLocale = locales[name];
- locales[name] = locale;
-
- // backwards compat for now: also set the locale
- getSetGlobalLocale(name);
- } else {
- // pass null for config to unupdate, useful for tests
- if (locales[name] != null) {
- if (locales[name].parentLocale != null) {
- locales[name] = locales[name].parentLocale;
- } else if (locales[name] != null) {
- delete locales[name];
- }
- }
- }
- return locales[name];
-}
-
-// returns locale data
-function getLocale (key) {
- var locale;
-
- if (key && key._locale && key._locale._abbr) {
- key = key._locale._abbr;
- }
-
- if (!key) {
- return globalLocale;
- }
-
- if (!isArray(key)) {
- //short-circuit everything else
- locale = loadLocale(key);
- if (locale) {
- return locale;
- }
- key = [key];
- }
-
- return chooseLocale(key);
-}
-
-function listLocales() {
- return keys(locales);
-}
-
-function checkOverflow (m) {
- var overflow;
- var a = m._a;
-
- if (a && getParsingFlags(m).overflow === -2) {
- overflow =
- a[MONTH] < 0 || a[MONTH] > 11 ? MONTH :
- a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE :
- a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR :
- a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE :
- a[SECOND] < 0 || a[SECOND] > 59 ? SECOND :
- a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND :
- -1;
-
- if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {
- overflow = DATE;
- }
- if (getParsingFlags(m)._overflowWeeks && overflow === -1) {
- overflow = WEEK;
- }
- if (getParsingFlags(m)._overflowWeekday && overflow === -1) {
- overflow = WEEKDAY;
- }
-
- getParsingFlags(m).overflow = overflow;
- }
-
- return m;
-}
-
-// Pick the first defined of two or three arguments.
-function defaults(a, b, c) {
- if (a != null) {
- return a;
- }
- if (b != null) {
- return b;
- }
- return c;
-}
-
-function currentDateArray(config) {
- // hooks is actually the exported moment object
- var nowValue = new Date(hooks.now());
- if (config._useUTC) {
- return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];
- }
- return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];
-}
-
-// convert an array to a date.
-// the array should mirror the parameters below
-// note: all values past the year are optional and will default to the lowest possible value.
-// [year, month, day , hour, minute, second, millisecond]
-function configFromArray (config) {
- var i, date, input = [], currentDate, expectedWeekday, yearToUse;
-
- if (config._d) {
- return;
- }
-
- currentDate = currentDateArray(config);
-
- //compute day of the year from weeks and weekdays
- if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {
- dayOfYearFromWeekInfo(config);
- }
-
- //if the day of the year is set, figure out what it is
- if (config._dayOfYear != null) {
- yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);
-
- if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {
- getParsingFlags(config)._overflowDayOfYear = true;
- }
-
- date = createUTCDate(yearToUse, 0, config._dayOfYear);
- config._a[MONTH] = date.getUTCMonth();
- config._a[DATE] = date.getUTCDate();
- }
-
- // Default to current date.
- // * if no year, month, day of month are given, default to today
- // * if day of month is given, default month and year
- // * if month is given, default only year
- // * if year is given, don't default anything
- for (i = 0; i < 3 && config._a[i] == null; ++i) {
- config._a[i] = input[i] = currentDate[i];
- }
-
- // Zero out whatever was not defaulted, including time
- for (; i < 7; i++) {
- config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i];
- }
-
- // Check for 24:00:00.000
- if (config._a[HOUR] === 24 &&
- config._a[MINUTE] === 0 &&
- config._a[SECOND] === 0 &&
- config._a[MILLISECOND] === 0) {
- config._nextDay = true;
- config._a[HOUR] = 0;
- }
-
- config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);
- expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay();
-
- // Apply timezone offset from input. The actual utcOffset can be changed
- // with parseZone.
- if (config._tzm != null) {
- config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
- }
-
- if (config._nextDay) {
- config._a[HOUR] = 24;
- }
-
- // check for mismatching day of week
- if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {
- getParsingFlags(config).weekdayMismatch = true;
- }
-}
-
-function dayOfYearFromWeekInfo(config) {
- var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;
-
- w = config._w;
- if (w.GG != null || w.W != null || w.E != null) {
- dow = 1;
- doy = 4;
-
- // TODO: We need to take the current isoWeekYear, but that depends on
- // how we interpret now (local, utc, fixed offset). So create
- // a now version of current config (take local/utc/offset flags, and
- // create now).
- weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);
- week = defaults(w.W, 1);
- weekday = defaults(w.E, 1);
- if (weekday < 1 || weekday > 7) {
- weekdayOverflow = true;
- }
- } else {
- dow = config._locale._week.dow;
- doy = config._locale._week.doy;
-
- var curWeek = weekOfYear(createLocal(), dow, doy);
-
- weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);
-
- // Default to current week.
- week = defaults(w.w, curWeek.week);
-
- if (w.d != null) {
- // weekday -- low day numbers are considered next week
- weekday = w.d;
- if (weekday < 0 || weekday > 6) {
- weekdayOverflow = true;
- }
- } else if (w.e != null) {
- // local weekday -- counting starts from begining of week
- weekday = w.e + dow;
- if (w.e < 0 || w.e > 6) {
- weekdayOverflow = true;
- }
- } else {
- // default to begining of week
- weekday = dow;
- }
- }
- if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {
- getParsingFlags(config)._overflowWeeks = true;
- } else if (weekdayOverflow != null) {
- getParsingFlags(config)._overflowWeekday = true;
- } else {
- temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);
- config._a[YEAR] = temp.year;
- config._dayOfYear = temp.dayOfYear;
- }
-}
-
-// iso 8601 regex
-// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)
-var extendedIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
-var basicIsoRegex = /^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/;
-
-var tzRegex = /Z|[+-]\d\d(?::?\d\d)?/;
-
-var isoDates = [
- ['YYYYYY-MM-DD', /[+-]\d{6}-\d\d-\d\d/],
- ['YYYY-MM-DD', /\d{4}-\d\d-\d\d/],
- ['GGGG-[W]WW-E', /\d{4}-W\d\d-\d/],
- ['GGGG-[W]WW', /\d{4}-W\d\d/, false],
- ['YYYY-DDD', /\d{4}-\d{3}/],
- ['YYYY-MM', /\d{4}-\d\d/, false],
- ['YYYYYYMMDD', /[+-]\d{10}/],
- ['YYYYMMDD', /\d{8}/],
- // YYYYMM is NOT allowed by the standard
- ['GGGG[W]WWE', /\d{4}W\d{3}/],
- ['GGGG[W]WW', /\d{4}W\d{2}/, false],
- ['YYYYDDD', /\d{7}/]
-];
-
-// iso time formats and regexes
-var isoTimes = [
- ['HH:mm:ss.SSSS', /\d\d:\d\d:\d\d\.\d+/],
- ['HH:mm:ss,SSSS', /\d\d:\d\d:\d\d,\d+/],
- ['HH:mm:ss', /\d\d:\d\d:\d\d/],
- ['HH:mm', /\d\d:\d\d/],
- ['HHmmss.SSSS', /\d\d\d\d\d\d\.\d+/],
- ['HHmmss,SSSS', /\d\d\d\d\d\d,\d+/],
- ['HHmmss', /\d\d\d\d\d\d/],
- ['HHmm', /\d\d\d\d/],
- ['HH', /\d\d/]
-];
-
-var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i;
-
-// date from iso format
-function configFromISO(config) {
- var i, l,
- string = config._i,
- match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),
- allowTime, dateFormat, timeFormat, tzFormat;
-
- if (match) {
- getParsingFlags(config).iso = true;
-
- for (i = 0, l = isoDates.length; i < l; i++) {
- if (isoDates[i][1].exec(match[1])) {
- dateFormat = isoDates[i][0];
- allowTime = isoDates[i][2] !== false;
- break;
- }
- }
- if (dateFormat == null) {
- config._isValid = false;
- return;
- }
- if (match[3]) {
- for (i = 0, l = isoTimes.length; i < l; i++) {
- if (isoTimes[i][1].exec(match[3])) {
- // match[2] should be 'T' or space
- timeFormat = (match[2] || ' ') + isoTimes[i][0];
- break;
- }
- }
- if (timeFormat == null) {
- config._isValid = false;
- return;
- }
- }
- if (!allowTime && timeFormat != null) {
- config._isValid = false;
- return;
- }
- if (match[4]) {
- if (tzRegex.exec(match[4])) {
- tzFormat = 'Z';
- } else {
- config._isValid = false;
- return;
- }
- }
- config._f = dateFormat + (timeFormat || '') + (tzFormat || '');
- configFromStringAndFormat(config);
- } else {
- config._isValid = false;
- }
-}
-
-// RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3
-var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/;
-
-function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {
- var result = [
- untruncateYear(yearStr),
- defaultLocaleMonthsShort.indexOf(monthStr),
- parseInt(dayStr, 10),
- parseInt(hourStr, 10),
- parseInt(minuteStr, 10)
- ];
-
- if (secondStr) {
- result.push(parseInt(secondStr, 10));
- }
-
- return result;
-}
-
-function untruncateYear(yearStr) {
- var year = parseInt(yearStr, 10);
- if (year <= 49) {
- return 2000 + year;
- } else if (year <= 999) {
- return 1900 + year;
- }
- return year;
-}
-
-function preprocessRFC2822(s) {
- // Remove comments and folding whitespace and replace multiple-spaces with a single space
- return s.replace(/\([^)]*\)|[\n\t]/g, ' ').replace(/(\s\s+)/g, ' ').trim();
-}
-
-function checkWeekday(weekdayStr, parsedInput, config) {
- if (weekdayStr) {
- // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.
- var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),
- weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();
- if (weekdayProvided !== weekdayActual) {
- getParsingFlags(config).weekdayMismatch = true;
- config._isValid = false;
- return false;
- }
- }
- return true;
-}
-
-var obsOffsets = {
- UT: 0,
- GMT: 0,
- EDT: -4 * 60,
- EST: -5 * 60,
- CDT: -5 * 60,
- CST: -6 * 60,
- MDT: -6 * 60,
- MST: -7 * 60,
- PDT: -7 * 60,
- PST: -8 * 60
-};
-
-function calculateOffset(obsOffset, militaryOffset, numOffset) {
- if (obsOffset) {
- return obsOffsets[obsOffset];
- } else if (militaryOffset) {
- // the only allowed military tz is Z
- return 0;
- } else {
- var hm = parseInt(numOffset, 10);
- var m = hm % 100, h = (hm - m) / 100;
- return h * 60 + m;
- }
-}
-
-// date and time from ref 2822 format
-function configFromRFC2822(config) {
- var match = rfc2822.exec(preprocessRFC2822(config._i));
- if (match) {
- var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);
- if (!checkWeekday(match[1], parsedArray, config)) {
- return;
- }
-
- config._a = parsedArray;
- config._tzm = calculateOffset(match[8], match[9], match[10]);
-
- config._d = createUTCDate.apply(null, config._a);
- config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);
-
- getParsingFlags(config).rfc2822 = true;
- } else {
- config._isValid = false;
- }
-}
-
-// date from iso format or fallback
-function configFromString(config) {
- var matched = aspNetJsonRegex.exec(config._i);
-
- if (matched !== null) {
- config._d = new Date(+matched[1]);
- return;
- }
-
- configFromISO(config);
- if (config._isValid === false) {
- delete config._isValid;
- } else {
- return;
- }
-
- configFromRFC2822(config);
- if (config._isValid === false) {
- delete config._isValid;
- } else {
- return;
- }
-
- // Final attempt, use Input Fallback
- hooks.createFromInputFallback(config);
-}
-
-hooks.createFromInputFallback = deprecate(
- 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +
- 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +
- 'discouraged and will be removed in an upcoming major release. Please refer to ' +
- 'http://momentjs.com/guides/#/warnings/js-date/ for more info.',
- function (config) {
- config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));
- }
-);
-
-// constant that refers to the ISO standard
-hooks.ISO_8601 = function () {};
-
-// constant that refers to the RFC 2822 form
-hooks.RFC_2822 = function () {};
-
-// date from string and format string
-function configFromStringAndFormat(config) {
- // TODO: Move this to another part of the creation flow to prevent circular deps
- if (config._f === hooks.ISO_8601) {
- configFromISO(config);
- return;
- }
- if (config._f === hooks.RFC_2822) {
- configFromRFC2822(config);
- return;
- }
- config._a = [];
- getParsingFlags(config).empty = true;
-
- // This array is used to make a Date, either with `new Date` or `Date.UTC`
- var string = '' + config._i,
- i, parsedInput, tokens, token, skipped,
- stringLength = string.length,
- totalParsedInputLength = 0;
-
- tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];
-
- for (i = 0; i < tokens.length; i++) {
- token = tokens[i];
- parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0];
- // console.log('token', token, 'parsedInput', parsedInput,
- // 'regex', getParseRegexForToken(token, config));
- if (parsedInput) {
- skipped = string.substr(0, string.indexOf(parsedInput));
- if (skipped.length > 0) {
- getParsingFlags(config).unusedInput.push(skipped);
- }
- string = string.slice(string.indexOf(parsedInput) + parsedInput.length);
- totalParsedInputLength += parsedInput.length;
- }
- // don't parse if it's not a known token
- if (formatTokenFunctions[token]) {
- if (parsedInput) {
- getParsingFlags(config).empty = false;
- }
- else {
- getParsingFlags(config).unusedTokens.push(token);
- }
- addTimeToArrayFromToken(token, parsedInput, config);
- }
- else if (config._strict && !parsedInput) {
- getParsingFlags(config).unusedTokens.push(token);
- }
- }
-
- // add remaining unparsed input length to the string
- getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;
- if (string.length > 0) {
- getParsingFlags(config).unusedInput.push(string);
- }
-
- // clear _12h flag if hour is <= 12
- if (config._a[HOUR] <= 12 &&
- getParsingFlags(config).bigHour === true &&
- config._a[HOUR] > 0) {
- getParsingFlags(config).bigHour = undefined;
- }
-
- getParsingFlags(config).parsedDateParts = config._a.slice(0);
- getParsingFlags(config).meridiem = config._meridiem;
- // handle meridiem
- config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);
-
- configFromArray(config);
- checkOverflow(config);
-}
-
-
-function meridiemFixWrap (locale, hour, meridiem) {
- var isPm;
-
- if (meridiem == null) {
- // nothing to do
- return hour;
- }
- if (locale.meridiemHour != null) {
- return locale.meridiemHour(hour, meridiem);
- } else if (locale.isPM != null) {
- // Fallback
- isPm = locale.isPM(meridiem);
- if (isPm && hour < 12) {
- hour += 12;
- }
- if (!isPm && hour === 12) {
- hour = 0;
- }
- return hour;
- } else {
- // this is not supposed to happen
- return hour;
- }
-}
-
-// date from string and array of format strings
-function configFromStringAndArray(config) {
- var tempConfig,
- bestMoment,
-
- scoreToBeat,
- i,
- currentScore;
-
- if (config._f.length === 0) {
- getParsingFlags(config).invalidFormat = true;
- config._d = new Date(NaN);
- return;
- }
-
- for (i = 0; i < config._f.length; i++) {
- currentScore = 0;
- tempConfig = copyConfig({}, config);
- if (config._useUTC != null) {
- tempConfig._useUTC = config._useUTC;
- }
- tempConfig._f = config._f[i];
- configFromStringAndFormat(tempConfig);
-
- if (!isValid(tempConfig)) {
- continue;
- }
-
- // if there is any input that was not parsed add a penalty for that format
- currentScore += getParsingFlags(tempConfig).charsLeftOver;
-
- //or tokens
- currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;
-
- getParsingFlags(tempConfig).score = currentScore;
-
- if (scoreToBeat == null || currentScore < scoreToBeat) {
- scoreToBeat = currentScore;
- bestMoment = tempConfig;
- }
- }
-
- extend(config, bestMoment || tempConfig);
-}
-
-function configFromObject(config) {
- if (config._d) {
- return;
- }
-
- var i = normalizeObjectUnits(config._i);
- config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {
- return obj && parseInt(obj, 10);
- });
-
- configFromArray(config);
-}
-
-function createFromConfig (config) {
- var res = new Moment(checkOverflow(prepareConfig(config)));
- if (res._nextDay) {
- // Adding is smart enough around DST
- res.add(1, 'd');
- res._nextDay = undefined;
- }
-
- return res;
-}
-
-function prepareConfig (config) {
- var input = config._i,
- format = config._f;
-
- config._locale = config._locale || getLocale(config._l);
-
- if (input === null || (format === undefined && input === '')) {
- return createInvalid({nullInput: true});
- }
-
- if (typeof input === 'string') {
- config._i = input = config._locale.preparse(input);
- }
-
- if (isMoment(input)) {
- return new Moment(checkOverflow(input));
- } else if (isDate(input)) {
- config._d = input;
- } else if (isArray(format)) {
- configFromStringAndArray(config);
- } else if (format) {
- configFromStringAndFormat(config);
- } else {
- configFromInput(config);
- }
-
- if (!isValid(config)) {
- config._d = null;
- }
-
- return config;
-}
-
-function configFromInput(config) {
- var input = config._i;
- if (isUndefined(input)) {
- config._d = new Date(hooks.now());
- } else if (isDate(input)) {
- config._d = new Date(input.valueOf());
- } else if (typeof input === 'string') {
- configFromString(config);
- } else if (isArray(input)) {
- config._a = map(input.slice(0), function (obj) {
- return parseInt(obj, 10);
- });
- configFromArray(config);
- } else if (isObject(input)) {
- configFromObject(config);
- } else if (isNumber(input)) {
- // from milliseconds
- config._d = new Date(input);
- } else {
- hooks.createFromInputFallback(config);
- }
-}
-
-function createLocalOrUTC (input, format, locale, strict, isUTC) {
- var c = {};
-
- if (locale === true || locale === false) {
- strict = locale;
- locale = undefined;
- }
-
- if ((isObject(input) && isObjectEmpty(input)) ||
- (isArray(input) && input.length === 0)) {
- input = undefined;
- }
- // object construction must be done this way.
- // https://github.com/moment/moment/issues/1423
- c._isAMomentObject = true;
- c._useUTC = c._isUTC = isUTC;
- c._l = locale;
- c._i = input;
- c._f = format;
- c._strict = strict;
-
- return createFromConfig(c);
-}
-
-function createLocal (input, format, locale, strict) {
- return createLocalOrUTC(input, format, locale, strict, false);
-}
-
-var prototypeMin = deprecate(
- 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',
- function () {
- var other = createLocal.apply(null, arguments);
- if (this.isValid() && other.isValid()) {
- return other < this ? this : other;
- } else {
- return createInvalid();
- }
- }
-);
-
-var prototypeMax = deprecate(
- 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',
- function () {
- var other = createLocal.apply(null, arguments);
- if (this.isValid() && other.isValid()) {
- return other > this ? this : other;
- } else {
- return createInvalid();
- }
- }
-);
-
-// Pick a moment m from moments so that m[fn](other) is true for all
-// other. This relies on the function fn to be transitive.
-//
-// moments should either be an array of moment objects or an array, whose
-// first element is an array of moment objects.
-function pickBy(fn, moments) {
- var res, i;
- if (moments.length === 1 && isArray(moments[0])) {
- moments = moments[0];
- }
- if (!moments.length) {
- return createLocal();
- }
- res = moments[0];
- for (i = 1; i < moments.length; ++i) {
- if (!moments[i].isValid() || moments[i][fn](res)) {
- res = moments[i];
- }
- }
- return res;
-}
-
-// TODO: Use [].sort instead?
-function min () {
- var args = [].slice.call(arguments, 0);
-
- return pickBy('isBefore', args);
-}
-
-function max () {
- var args = [].slice.call(arguments, 0);
-
- return pickBy('isAfter', args);
-}
-
-var now = function () {
- return Date.now ? Date.now() : +(new Date());
-};
-
-var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];
-
-function isDurationValid(m) {
- for (var key in m) {
- if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {
- return false;
- }
- }
-
- var unitHasDecimal = false;
- for (var i = 0; i < ordering.length; ++i) {
- if (m[ordering[i]]) {
- if (unitHasDecimal) {
- return false; // only allow non-integers for smallest unit
- }
- if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {
- unitHasDecimal = true;
- }
- }
- }
-
- return true;
-}
-
-function isValid$1() {
- return this._isValid;
-}
-
-function createInvalid$1() {
- return createDuration(NaN);
-}
-
-function Duration (duration) {
- var normalizedInput = normalizeObjectUnits(duration),
- years = normalizedInput.year || 0,
- quarters = normalizedInput.quarter || 0,
- months = normalizedInput.month || 0,
- weeks = normalizedInput.week || 0,
- days = normalizedInput.day || 0,
- hours = normalizedInput.hour || 0,
- minutes = normalizedInput.minute || 0,
- seconds = normalizedInput.second || 0,
- milliseconds = normalizedInput.millisecond || 0;
-
- this._isValid = isDurationValid(normalizedInput);
-
- // representation for dateAddRemove
- this._milliseconds = +milliseconds +
- seconds * 1e3 + // 1000
- minutes * 6e4 + // 1000 * 60
- hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978
- // Because of dateAddRemove treats 24 hours as different from a
- // day when working around DST, we need to store them separately
- this._days = +days +
- weeks * 7;
- // It is impossible to translate months into days without knowing
- // which months you are are talking about, so we have to store
- // it separately.
- this._months = +months +
- quarters * 3 +
- years * 12;
-
- this._data = {};
-
- this._locale = getLocale();
-
- this._bubble();
-}
-
-function isDuration (obj) {
- return obj instanceof Duration;
-}
-
-function absRound (number) {
- if (number < 0) {
- return Math.round(-1 * number) * -1;
- } else {
- return Math.round(number);
- }
-}
-
-// FORMATTING
-
-function offset (token, separator) {
- addFormatToken(token, 0, 0, function () {
- var offset = this.utcOffset();
- var sign = '+';
- if (offset < 0) {
- offset = -offset;
- sign = '-';
- }
- return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2);
- });
-}
-
-offset('Z', ':');
-offset('ZZ', '');
-
-// PARSING
-
-addRegexToken('Z', matchShortOffset);
-addRegexToken('ZZ', matchShortOffset);
-addParseToken(['Z', 'ZZ'], function (input, array, config) {
- config._useUTC = true;
- config._tzm = offsetFromString(matchShortOffset, input);
-});
-
-// HELPERS
-
-// timezone chunker
-// '+10:00' > ['10', '00']
-// '-1530' > ['-15', '30']
-var chunkOffset = /([\+\-]|\d\d)/gi;
-
-function offsetFromString(matcher, string) {
- var matches = (string || '').match(matcher);
-
- if (matches === null) {
- return null;
- }
-
- var chunk = matches[matches.length - 1] || [];
- var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];
- var minutes = +(parts[1] * 60) + toInt(parts[2]);
-
- return minutes === 0 ?
- 0 :
- parts[0] === '+' ? minutes : -minutes;
-}
-
-// Return a moment from input, that is local/utc/zone equivalent to model.
-function cloneWithOffset(input, model) {
- var res, diff;
- if (model._isUTC) {
- res = model.clone();
- diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf();
- // Use low-level api, because this fn is low-level api.
- res._d.setTime(res._d.valueOf() + diff);
- hooks.updateOffset(res, false);
- return res;
- } else {
- return createLocal(input).local();
- }
-}
-
-function getDateOffset (m) {
- // On Firefox.24 Date#getTimezoneOffset returns a floating point.
- // https://github.com/moment/moment/pull/1871
- return -Math.round(m._d.getTimezoneOffset() / 15) * 15;
-}
-
-// HOOKS
-
-// This function will be called whenever a moment is mutated.
-// It is intended to keep the offset in sync with the timezone.
-hooks.updateOffset = function () {};
-
-// MOMENTS
-
-// keepLocalTime = true means only change the timezone, without
-// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->
-// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset
-// +0200, so we adjust the time as needed, to be valid.
-//
-// Keeping the time actually adds/subtracts (one hour)
-// from the actual represented time. That is why we call updateOffset
-// a second time. In case it wants us to change the offset again
-// _changeInProgress == true case, then we have to adjust, because
-// there is no such time in the given timezone.
-function getSetOffset (input, keepLocalTime, keepMinutes) {
- var offset = this._offset || 0,
- localAdjust;
- if (!this.isValid()) {
- return input != null ? this : NaN;
- }
- if (input != null) {
- if (typeof input === 'string') {
- input = offsetFromString(matchShortOffset, input);
- if (input === null) {
- return this;
- }
- } else if (Math.abs(input) < 16 && !keepMinutes) {
- input = input * 60;
- }
- if (!this._isUTC && keepLocalTime) {
- localAdjust = getDateOffset(this);
- }
- this._offset = input;
- this._isUTC = true;
- if (localAdjust != null) {
- this.add(localAdjust, 'm');
- }
- if (offset !== input) {
- if (!keepLocalTime || this._changeInProgress) {
- addSubtract(this, createDuration(input - offset, 'm'), 1, false);
- } else if (!this._changeInProgress) {
- this._changeInProgress = true;
- hooks.updateOffset(this, true);
- this._changeInProgress = null;
- }
- }
- return this;
- } else {
- return this._isUTC ? offset : getDateOffset(this);
- }
-}
-
-function getSetZone (input, keepLocalTime) {
- if (input != null) {
- if (typeof input !== 'string') {
- input = -input;
- }
-
- this.utcOffset(input, keepLocalTime);
-
- return this;
- } else {
- return -this.utcOffset();
- }
-}
-
-function setOffsetToUTC (keepLocalTime) {
- return this.utcOffset(0, keepLocalTime);
-}
-
-function setOffsetToLocal (keepLocalTime) {
- if (this._isUTC) {
- this.utcOffset(0, keepLocalTime);
- this._isUTC = false;
-
- if (keepLocalTime) {
- this.subtract(getDateOffset(this), 'm');
- }
- }
- return this;
-}
-
-function setOffsetToParsedOffset () {
- if (this._tzm != null) {
- this.utcOffset(this._tzm, false, true);
- } else if (typeof this._i === 'string') {
- var tZone = offsetFromString(matchOffset, this._i);
- if (tZone != null) {
- this.utcOffset(tZone);
- }
- else {
- this.utcOffset(0, true);
- }
- }
- return this;
-}
-
-function hasAlignedHourOffset (input) {
- if (!this.isValid()) {
- return false;
- }
- input = input ? createLocal(input).utcOffset() : 0;
-
- return (this.utcOffset() - input) % 60 === 0;
-}
-
-function isDaylightSavingTime () {
- return (
- this.utcOffset() > this.clone().month(0).utcOffset() ||
- this.utcOffset() > this.clone().month(5).utcOffset()
- );
-}
-
-function isDaylightSavingTimeShifted () {
- if (!isUndefined(this._isDSTShifted)) {
- return this._isDSTShifted;
- }
-
- var c = {};
-
- copyConfig(c, this);
- c = prepareConfig(c);
-
- if (c._a) {
- var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);
- this._isDSTShifted = this.isValid() &&
- compareArrays(c._a, other.toArray()) > 0;
- } else {
- this._isDSTShifted = false;
- }
-
- return this._isDSTShifted;
-}
-
-function isLocal () {
- return this.isValid() ? !this._isUTC : false;
-}
-
-function isUtcOffset () {
- return this.isValid() ? this._isUTC : false;
-}
-
-function isUtc () {
- return this.isValid() ? this._isUTC && this._offset === 0 : false;
-}
-
-// ASP.NET json date format regex
-var aspNetRegex = /^(\-|\+)?(?:(\d*)[. ])?(\d+)\:(\d+)(?:\:(\d+)(\.\d*)?)?$/;
-
-// from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html
-// somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere
-// and further modified to allow for strings containing both week and day
-var isoRegex = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
-
-function createDuration (input, key) {
- var duration = input,
- // matching against regexp is expensive, do it on demand
- match = null,
- sign,
- ret,
- diffRes;
-
- if (isDuration(input)) {
- duration = {
- ms : input._milliseconds,
- d : input._days,
- M : input._months
- };
- } else if (isNumber(input)) {
- duration = {};
- if (key) {
- duration[key] = input;
- } else {
- duration.milliseconds = input;
- }
- } else if (!!(match = aspNetRegex.exec(input))) {
- sign = (match[1] === '-') ? -1 : 1;
- duration = {
- y : 0,
- d : toInt(match[DATE]) * sign,
- h : toInt(match[HOUR]) * sign,
- m : toInt(match[MINUTE]) * sign,
- s : toInt(match[SECOND]) * sign,
- ms : toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match
- };
- } else if (!!(match = isoRegex.exec(input))) {
- sign = (match[1] === '-') ? -1 : (match[1] === '+') ? 1 : 1;
- duration = {
- y : parseIso(match[2], sign),
- M : parseIso(match[3], sign),
- w : parseIso(match[4], sign),
- d : parseIso(match[5], sign),
- h : parseIso(match[6], sign),
- m : parseIso(match[7], sign),
- s : parseIso(match[8], sign)
- };
- } else if (duration == null) {// checks for null or undefined
- duration = {};
- } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) {
- diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));
-
- duration = {};
- duration.ms = diffRes.milliseconds;
- duration.M = diffRes.months;
- }
-
- ret = new Duration(duration);
-
- if (isDuration(input) && hasOwnProp(input, '_locale')) {
- ret._locale = input._locale;
- }
-
- return ret;
-}
-
-createDuration.fn = Duration.prototype;
-createDuration.invalid = createInvalid$1;
-
-function parseIso (inp, sign) {
- // We'd normally use ~~inp for this, but unfortunately it also
- // converts floats to ints.
- // inp may be undefined, so careful calling replace on it.
- var res = inp && parseFloat(inp.replace(',', '.'));
- // apply sign while we're at it
- return (isNaN(res) ? 0 : res) * sign;
-}
-
-function positiveMomentsDifference(base, other) {
- var res = {milliseconds: 0, months: 0};
-
- res.months = other.month() - base.month() +
- (other.year() - base.year()) * 12;
- if (base.clone().add(res.months, 'M').isAfter(other)) {
- --res.months;
- }
-
- res.milliseconds = +other - +(base.clone().add(res.months, 'M'));
-
- return res;
-}
-
-function momentsDifference(base, other) {
- var res;
- if (!(base.isValid() && other.isValid())) {
- return {milliseconds: 0, months: 0};
- }
-
- other = cloneWithOffset(other, base);
- if (base.isBefore(other)) {
- res = positiveMomentsDifference(base, other);
- } else {
- res = positiveMomentsDifference(other, base);
- res.milliseconds = -res.milliseconds;
- res.months = -res.months;
- }
-
- return res;
-}
-
-// TODO: remove 'name' arg after deprecation is removed
-function createAdder(direction, name) {
- return function (val, period) {
- var dur, tmp;
- //invert the arguments, but complain about it
- if (period !== null && !isNaN(+period)) {
- deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' +
- 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');
- tmp = val; val = period; period = tmp;
- }
-
- val = typeof val === 'string' ? +val : val;
- dur = createDuration(val, period);
- addSubtract(this, dur, direction);
- return this;
- };
-}
-
-function addSubtract (mom, duration, isAdding, updateOffset) {
- var milliseconds = duration._milliseconds,
- days = absRound(duration._days),
- months = absRound(duration._months);
-
- if (!mom.isValid()) {
- // No op
- return;
- }
-
- updateOffset = updateOffset == null ? true : updateOffset;
-
- if (months) {
- setMonth(mom, get(mom, 'Month') + months * isAdding);
- }
- if (days) {
- set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);
- }
- if (milliseconds) {
- mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);
- }
- if (updateOffset) {
- hooks.updateOffset(mom, days || months);
- }
-}
-
-var add = createAdder(1, 'add');
-var subtract = createAdder(-1, 'subtract');
-
-function getCalendarFormat(myMoment, now) {
- var diff = myMoment.diff(now, 'days', true);
- return diff < -6 ? 'sameElse' :
- diff < -1 ? 'lastWeek' :
- diff < 0 ? 'lastDay' :
- diff < 1 ? 'sameDay' :
- diff < 2 ? 'nextDay' :
- diff < 7 ? 'nextWeek' : 'sameElse';
-}
-
-function calendar$1 (time, formats) {
- // We want to compare the start of today, vs this.
- // Getting start-of-today depends on whether we're local/utc/offset or not.
- var now = time || createLocal(),
- sod = cloneWithOffset(now, this).startOf('day'),
- format = hooks.calendarFormat(this, sod) || 'sameElse';
-
- var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);
-
- return this.format(output || this.localeData().calendar(format, this, createLocal(now)));
-}
-
-function clone () {
- return new Moment(this);
-}
-
-function isAfter (input, units) {
- var localInput = isMoment(input) ? input : createLocal(input);
- if (!(this.isValid() && localInput.isValid())) {
- return false;
- }
- units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
- if (units === 'millisecond') {
- return this.valueOf() > localInput.valueOf();
- } else {
- return localInput.valueOf() < this.clone().startOf(units).valueOf();
- }
-}
-
-function isBefore (input, units) {
- var localInput = isMoment(input) ? input : createLocal(input);
- if (!(this.isValid() && localInput.isValid())) {
- return false;
- }
- units = normalizeUnits(!isUndefined(units) ? units : 'millisecond');
- if (units === 'millisecond') {
- return this.valueOf() < localInput.valueOf();
- } else {
- return this.clone().endOf(units).valueOf() < localInput.valueOf();
- }
-}
-
-function isBetween (from, to, units, inclusivity) {
- inclusivity = inclusivity || '()';
- return (inclusivity[0] === '(' ? this.isAfter(from, units) : !this.isBefore(from, units)) &&
- (inclusivity[1] === ')' ? this.isBefore(to, units) : !this.isAfter(to, units));
-}
-
-function isSame (input, units) {
- var localInput = isMoment(input) ? input : createLocal(input),
- inputMs;
- if (!(this.isValid() && localInput.isValid())) {
- return false;
- }
- units = normalizeUnits(units || 'millisecond');
- if (units === 'millisecond') {
- return this.valueOf() === localInput.valueOf();
- } else {
- inputMs = localInput.valueOf();
- return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();
- }
-}
-
-function isSameOrAfter (input, units) {
- return this.isSame(input, units) || this.isAfter(input,units);
-}
-
-function isSameOrBefore (input, units) {
- return this.isSame(input, units) || this.isBefore(input,units);
-}
-
-function diff (input, units, asFloat) {
- var that,
- zoneDelta,
- delta, output;
-
- if (!this.isValid()) {
- return NaN;
- }
-
- that = cloneWithOffset(input, this);
-
- if (!that.isValid()) {
- return NaN;
- }
-
- zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;
-
- units = normalizeUnits(units);
-
- switch (units) {
- case 'year': output = monthDiff(this, that) / 12; break;
- case 'month': output = monthDiff(this, that); break;
- case 'quarter': output = monthDiff(this, that) / 3; break;
- case 'second': output = (this - that) / 1e3; break; // 1000
- case 'minute': output = (this - that) / 6e4; break; // 1000 * 60
- case 'hour': output = (this - that) / 36e5; break; // 1000 * 60 * 60
- case 'day': output = (this - that - zoneDelta) / 864e5; break; // 1000 * 60 * 60 * 24, negate dst
- case 'week': output = (this - that - zoneDelta) / 6048e5; break; // 1000 * 60 * 60 * 24 * 7, negate dst
- default: output = this - that;
- }
-
- return asFloat ? output : absFloor(output);
-}
-
-function monthDiff (a, b) {
- // difference in months
- var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()),
- // b is in (anchor - 1 month, anchor + 1 month)
- anchor = a.clone().add(wholeMonthDiff, 'months'),
- anchor2, adjust;
-
- if (b - anchor < 0) {
- anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');
- // linear across the month
- adjust = (b - anchor) / (anchor - anchor2);
- } else {
- anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');
- // linear across the month
- adjust = (b - anchor) / (anchor2 - anchor);
- }
-
- //check for negative zero, return zero if negative zero
- return -(wholeMonthDiff + adjust) || 0;
-}
-
-hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';
-hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';
-
-function toString () {
- return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');
-}
-
-function toISOString(keepOffset) {
- if (!this.isValid()) {
- return null;
- }
- var utc = keepOffset !== true;
- var m = utc ? this.clone().utc() : this;
- if (m.year() < 0 || m.year() > 9999) {
- return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');
- }
- if (isFunction(Date.prototype.toISOString)) {
- // native implementation is ~50x faster, use it when we can
- if (utc) {
- return this.toDate().toISOString();
- } else {
- return new Date(this._d.valueOf()).toISOString().replace('Z', formatMoment(m, 'Z'));
- }
- }
- return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');
-}
-
-/**
- * Return a human readable representation of a moment that can
- * also be evaluated to get a new moment which is the same
- *
- * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects
- */
-function inspect () {
- if (!this.isValid()) {
- return 'moment.invalid(/* ' + this._i + ' */)';
- }
- var func = 'moment';
- var zone = '';
- if (!this.isLocal()) {
- func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';
- zone = 'Z';
- }
- var prefix = '[' + func + '("]';
- var year = (0 <= this.year() && this.year() <= 9999) ? 'YYYY' : 'YYYYYY';
- var datetime = '-MM-DD[T]HH:mm:ss.SSS';
- var suffix = zone + '[")]';
-
- return this.format(prefix + year + datetime + suffix);
-}
-
-function format (inputString) {
- if (!inputString) {
- inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;
- }
- var output = formatMoment(this, inputString);
- return this.localeData().postformat(output);
-}
-
-function from (time, withoutSuffix) {
- if (this.isValid() &&
- ((isMoment(time) && time.isValid()) ||
- createLocal(time).isValid())) {
- return createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix);
- } else {
- return this.localeData().invalidDate();
- }
-}
-
-function fromNow (withoutSuffix) {
- return this.from(createLocal(), withoutSuffix);
-}
-
-function to (time, withoutSuffix) {
- if (this.isValid() &&
- ((isMoment(time) && time.isValid()) ||
- createLocal(time).isValid())) {
- return createDuration({from: this, to: time}).locale(this.locale()).humanize(!withoutSuffix);
- } else {
- return this.localeData().invalidDate();
- }
-}
-
-function toNow (withoutSuffix) {
- return this.to(createLocal(), withoutSuffix);
-}
-
-// If passed a locale key, it will set the locale for this
-// instance. Otherwise, it will return the locale configuration
-// variables for this instance.
-function locale (key) {
- var newLocaleData;
-
- if (key === undefined) {
- return this._locale._abbr;
- } else {
- newLocaleData = getLocale(key);
- if (newLocaleData != null) {
- this._locale = newLocaleData;
- }
- return this;
- }
-}
-
-var lang = deprecate(
- 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',
- function (key) {
- if (key === undefined) {
- return this.localeData();
- } else {
- return this.locale(key);
- }
- }
-);
-
-function localeData () {
- return this._locale;
-}
-
-function startOf (units) {
- units = normalizeUnits(units);
- // the following switch intentionally omits break keywords
- // to utilize falling through the cases.
- switch (units) {
- case 'year':
- this.month(0);
- /* falls through */
- case 'quarter':
- case 'month':
- this.date(1);
- /* falls through */
- case 'week':
- case 'isoWeek':
- case 'day':
- case 'date':
- this.hours(0);
- /* falls through */
- case 'hour':
- this.minutes(0);
- /* falls through */
- case 'minute':
- this.seconds(0);
- /* falls through */
- case 'second':
- this.milliseconds(0);
- }
-
- // weeks are a special case
- if (units === 'week') {
- this.weekday(0);
- }
- if (units === 'isoWeek') {
- this.isoWeekday(1);
- }
-
- // quarters are also special
- if (units === 'quarter') {
- this.month(Math.floor(this.month() / 3) * 3);
- }
-
- return this;
-}
-
-function endOf (units) {
- units = normalizeUnits(units);
- if (units === undefined || units === 'millisecond') {
- return this;
- }
-
- // 'date' is an alias for 'day', so it should be considered as such.
- if (units === 'date') {
- units = 'day';
- }
-
- return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms');
-}
-
-function valueOf () {
- return this._d.valueOf() - ((this._offset || 0) * 60000);
-}
-
-function unix () {
- return Math.floor(this.valueOf() / 1000);
-}
-
-function toDate () {
- return new Date(this.valueOf());
-}
-
-function toArray () {
- var m = this;
- return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];
-}
-
-function toObject () {
- var m = this;
- return {
- years: m.year(),
- months: m.month(),
- date: m.date(),
- hours: m.hours(),
- minutes: m.minutes(),
- seconds: m.seconds(),
- milliseconds: m.milliseconds()
- };
-}
-
-function toJSON () {
- // new Date(NaN).toJSON() === null
- return this.isValid() ? this.toISOString() : null;
-}
-
-function isValid$2 () {
- return isValid(this);
-}
-
-function parsingFlags () {
- return extend({}, getParsingFlags(this));
-}
-
-function invalidAt () {
- return getParsingFlags(this).overflow;
-}
-
-function creationData() {
- return {
- input: this._i,
- format: this._f,
- locale: this._locale,
- isUTC: this._isUTC,
- strict: this._strict
- };
-}
-
-// FORMATTING
-
-addFormatToken(0, ['gg', 2], 0, function () {
- return this.weekYear() % 100;
-});
-
-addFormatToken(0, ['GG', 2], 0, function () {
- return this.isoWeekYear() % 100;
-});
-
-function addWeekYearFormatToken (token, getter) {
- addFormatToken(0, [token, token.length], 0, getter);
-}
-
-addWeekYearFormatToken('gggg', 'weekYear');
-addWeekYearFormatToken('ggggg', 'weekYear');
-addWeekYearFormatToken('GGGG', 'isoWeekYear');
-addWeekYearFormatToken('GGGGG', 'isoWeekYear');
-
-// ALIASES
-
-addUnitAlias('weekYear', 'gg');
-addUnitAlias('isoWeekYear', 'GG');
-
-// PRIORITY
-
-addUnitPriority('weekYear', 1);
-addUnitPriority('isoWeekYear', 1);
-
-
-// PARSING
-
-addRegexToken('G', matchSigned);
-addRegexToken('g', matchSigned);
-addRegexToken('GG', match1to2, match2);
-addRegexToken('gg', match1to2, match2);
-addRegexToken('GGGG', match1to4, match4);
-addRegexToken('gggg', match1to4, match4);
-addRegexToken('GGGGG', match1to6, match6);
-addRegexToken('ggggg', match1to6, match6);
-
-addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {
- week[token.substr(0, 2)] = toInt(input);
-});
-
-addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {
- week[token] = hooks.parseTwoDigitYear(input);
-});
-
-// MOMENTS
-
-function getSetWeekYear (input) {
- return getSetWeekYearHelper.call(this,
- input,
- this.week(),
- this.weekday(),
- this.localeData()._week.dow,
- this.localeData()._week.doy);
-}
-
-function getSetISOWeekYear (input) {
- return getSetWeekYearHelper.call(this,
- input, this.isoWeek(), this.isoWeekday(), 1, 4);
-}
-
-function getISOWeeksInYear () {
- return weeksInYear(this.year(), 1, 4);
-}
-
-function getWeeksInYear () {
- var weekInfo = this.localeData()._week;
- return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);
-}
-
-function getSetWeekYearHelper(input, week, weekday, dow, doy) {
- var weeksTarget;
- if (input == null) {
- return weekOfYear(this, dow, doy).year;
- } else {
- weeksTarget = weeksInYear(input, dow, doy);
- if (week > weeksTarget) {
- week = weeksTarget;
- }
- return setWeekAll.call(this, input, week, weekday, dow, doy);
- }
-}
-
-function setWeekAll(weekYear, week, weekday, dow, doy) {
- var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),
- date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);
-
- this.year(date.getUTCFullYear());
- this.month(date.getUTCMonth());
- this.date(date.getUTCDate());
- return this;
-}
-
-// FORMATTING
-
-addFormatToken('Q', 0, 'Qo', 'quarter');
-
-// ALIASES
-
-addUnitAlias('quarter', 'Q');
-
-// PRIORITY
-
-addUnitPriority('quarter', 7);
-
-// PARSING
-
-addRegexToken('Q', match1);
-addParseToken('Q', function (input, array) {
- array[MONTH] = (toInt(input) - 1) * 3;
-});
-
-// MOMENTS
-
-function getSetQuarter (input) {
- return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);
-}
-
-// FORMATTING
-
-addFormatToken('D', ['DD', 2], 'Do', 'date');
-
-// ALIASES
-
-addUnitAlias('date', 'D');
-
-// PRIOROITY
-addUnitPriority('date', 9);
-
-// PARSING
-
-addRegexToken('D', match1to2);
-addRegexToken('DD', match1to2, match2);
-addRegexToken('Do', function (isStrict, locale) {
- // TODO: Remove "ordinalParse" fallback in next major release.
- return isStrict ?
- (locale._dayOfMonthOrdinalParse || locale._ordinalParse) :
- locale._dayOfMonthOrdinalParseLenient;
-});
-
-addParseToken(['D', 'DD'], DATE);
-addParseToken('Do', function (input, array) {
- array[DATE] = toInt(input.match(match1to2)[0]);
-});
-
-// MOMENTS
-
-var getSetDayOfMonth = makeGetSet('Date', true);
-
-// FORMATTING
-
-addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');
-
-// ALIASES
-
-addUnitAlias('dayOfYear', 'DDD');
-
-// PRIORITY
-addUnitPriority('dayOfYear', 4);
-
-// PARSING
-
-addRegexToken('DDD', match1to3);
-addRegexToken('DDDD', match3);
-addParseToken(['DDD', 'DDDD'], function (input, array, config) {
- config._dayOfYear = toInt(input);
-});
-
-// HELPERS
-
-// MOMENTS
-
-function getSetDayOfYear (input) {
- var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;
- return input == null ? dayOfYear : this.add((input - dayOfYear), 'd');
-}
-
-// FORMATTING
-
-addFormatToken('m', ['mm', 2], 0, 'minute');
-
-// ALIASES
-
-addUnitAlias('minute', 'm');
-
-// PRIORITY
-
-addUnitPriority('minute', 14);
-
-// PARSING
-
-addRegexToken('m', match1to2);
-addRegexToken('mm', match1to2, match2);
-addParseToken(['m', 'mm'], MINUTE);
-
-// MOMENTS
-
-var getSetMinute = makeGetSet('Minutes', false);
-
-// FORMATTING
-
-addFormatToken('s', ['ss', 2], 0, 'second');
-
-// ALIASES
-
-addUnitAlias('second', 's');
-
-// PRIORITY
-
-addUnitPriority('second', 15);
-
-// PARSING
-
-addRegexToken('s', match1to2);
-addRegexToken('ss', match1to2, match2);
-addParseToken(['s', 'ss'], SECOND);
-
-// MOMENTS
-
-var getSetSecond = makeGetSet('Seconds', false);
-
-// FORMATTING
-
-addFormatToken('S', 0, 0, function () {
- return ~~(this.millisecond() / 100);
-});
-
-addFormatToken(0, ['SS', 2], 0, function () {
- return ~~(this.millisecond() / 10);
-});
-
-addFormatToken(0, ['SSS', 3], 0, 'millisecond');
-addFormatToken(0, ['SSSS', 4], 0, function () {
- return this.millisecond() * 10;
-});
-addFormatToken(0, ['SSSSS', 5], 0, function () {
- return this.millisecond() * 100;
-});
-addFormatToken(0, ['SSSSSS', 6], 0, function () {
- return this.millisecond() * 1000;
-});
-addFormatToken(0, ['SSSSSSS', 7], 0, function () {
- return this.millisecond() * 10000;
-});
-addFormatToken(0, ['SSSSSSSS', 8], 0, function () {
- return this.millisecond() * 100000;
-});
-addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {
- return this.millisecond() * 1000000;
-});
-
-
-// ALIASES
-
-addUnitAlias('millisecond', 'ms');
-
-// PRIORITY
-
-addUnitPriority('millisecond', 16);
-
-// PARSING
-
-addRegexToken('S', match1to3, match1);
-addRegexToken('SS', match1to3, match2);
-addRegexToken('SSS', match1to3, match3);
-
-var token;
-for (token = 'SSSS'; token.length <= 9; token += 'S') {
- addRegexToken(token, matchUnsigned);
-}
-
-function parseMs(input, array) {
- array[MILLISECOND] = toInt(('0.' + input) * 1000);
-}
-
-for (token = 'S'; token.length <= 9; token += 'S') {
- addParseToken(token, parseMs);
-}
-// MOMENTS
-
-var getSetMillisecond = makeGetSet('Milliseconds', false);
-
-// FORMATTING
-
-addFormatToken('z', 0, 0, 'zoneAbbr');
-addFormatToken('zz', 0, 0, 'zoneName');
-
-// MOMENTS
-
-function getZoneAbbr () {
- return this._isUTC ? 'UTC' : '';
-}
-
-function getZoneName () {
- return this._isUTC ? 'Coordinated Universal Time' : '';
-}
-
-var proto = Moment.prototype;
-
-proto.add = add;
-proto.calendar = calendar$1;
-proto.clone = clone;
-proto.diff = diff;
-proto.endOf = endOf;
-proto.format = format;
-proto.from = from;
-proto.fromNow = fromNow;
-proto.to = to;
-proto.toNow = toNow;
-proto.get = stringGet;
-proto.invalidAt = invalidAt;
-proto.isAfter = isAfter;
-proto.isBefore = isBefore;
-proto.isBetween = isBetween;
-proto.isSame = isSame;
-proto.isSameOrAfter = isSameOrAfter;
-proto.isSameOrBefore = isSameOrBefore;
-proto.isValid = isValid$2;
-proto.lang = lang;
-proto.locale = locale;
-proto.localeData = localeData;
-proto.max = prototypeMax;
-proto.min = prototypeMin;
-proto.parsingFlags = parsingFlags;
-proto.set = stringSet;
-proto.startOf = startOf;
-proto.subtract = subtract;
-proto.toArray = toArray;
-proto.toObject = toObject;
-proto.toDate = toDate;
-proto.toISOString = toISOString;
-proto.inspect = inspect;
-proto.toJSON = toJSON;
-proto.toString = toString;
-proto.unix = unix;
-proto.valueOf = valueOf;
-proto.creationData = creationData;
-
-// Year
-proto.year = getSetYear;
-proto.isLeapYear = getIsLeapYear;
-
-// Week Year
-proto.weekYear = getSetWeekYear;
-proto.isoWeekYear = getSetISOWeekYear;
-
-// Quarter
-proto.quarter = proto.quarters = getSetQuarter;
-
-// Month
-proto.month = getSetMonth;
-proto.daysInMonth = getDaysInMonth;
-
-// Week
-proto.week = proto.weeks = getSetWeek;
-proto.isoWeek = proto.isoWeeks = getSetISOWeek;
-proto.weeksInYear = getWeeksInYear;
-proto.isoWeeksInYear = getISOWeeksInYear;
-
-// Day
-proto.date = getSetDayOfMonth;
-proto.day = proto.days = getSetDayOfWeek;
-proto.weekday = getSetLocaleDayOfWeek;
-proto.isoWeekday = getSetISODayOfWeek;
-proto.dayOfYear = getSetDayOfYear;
-
-// Hour
-proto.hour = proto.hours = getSetHour;
-
-// Minute
-proto.minute = proto.minutes = getSetMinute;
-
-// Second
-proto.second = proto.seconds = getSetSecond;
-
-// Millisecond
-proto.millisecond = proto.milliseconds = getSetMillisecond;
-
-// Offset
-proto.utcOffset = getSetOffset;
-proto.utc = setOffsetToUTC;
-proto.local = setOffsetToLocal;
-proto.parseZone = setOffsetToParsedOffset;
-proto.hasAlignedHourOffset = hasAlignedHourOffset;
-proto.isDST = isDaylightSavingTime;
-proto.isLocal = isLocal;
-proto.isUtcOffset = isUtcOffset;
-proto.isUtc = isUtc;
-proto.isUTC = isUtc;
-
-// Timezone
-proto.zoneAbbr = getZoneAbbr;
-proto.zoneName = getZoneName;
-
-// Deprecations
-proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);
-proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);
-proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);
-proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);
-proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);
-
-function createUnix (input) {
- return createLocal(input * 1000);
-}
-
-function createInZone () {
- return createLocal.apply(null, arguments).parseZone();
-}
-
-function preParsePostFormat (string) {
- return string;
-}
-
-var proto$1 = Locale.prototype;
-
-proto$1.calendar = calendar;
-proto$1.longDateFormat = longDateFormat;
-proto$1.invalidDate = invalidDate;
-proto$1.ordinal = ordinal;
-proto$1.preparse = preParsePostFormat;
-proto$1.postformat = preParsePostFormat;
-proto$1.relativeTime = relativeTime;
-proto$1.pastFuture = pastFuture;
-proto$1.set = set;
-
-// Month
-proto$1.months = localeMonths;
-proto$1.monthsShort = localeMonthsShort;
-proto$1.monthsParse = localeMonthsParse;
-proto$1.monthsRegex = monthsRegex;
-proto$1.monthsShortRegex = monthsShortRegex;
-
-// Week
-proto$1.week = localeWeek;
-proto$1.firstDayOfYear = localeFirstDayOfYear;
-proto$1.firstDayOfWeek = localeFirstDayOfWeek;
-
-// Day of Week
-proto$1.weekdays = localeWeekdays;
-proto$1.weekdaysMin = localeWeekdaysMin;
-proto$1.weekdaysShort = localeWeekdaysShort;
-proto$1.weekdaysParse = localeWeekdaysParse;
-
-proto$1.weekdaysRegex = weekdaysRegex;
-proto$1.weekdaysShortRegex = weekdaysShortRegex;
-proto$1.weekdaysMinRegex = weekdaysMinRegex;
-
-// Hours
-proto$1.isPM = localeIsPM;
-proto$1.meridiem = localeMeridiem;
-
-function get$1 (format, index, field, setter) {
- var locale = getLocale();
- var utc = createUTC().set(setter, index);
- return locale[field](utc, format);
-}
-
-function listMonthsImpl (format, index, field) {
- if (isNumber(format)) {
- index = format;
- format = undefined;
- }
-
- format = format || '';
-
- if (index != null) {
- return get$1(format, index, field, 'month');
- }
-
- var i;
- var out = [];
- for (i = 0; i < 12; i++) {
- out[i] = get$1(format, i, field, 'month');
- }
- return out;
-}
-
-// ()
-// (5)
-// (fmt, 5)
-// (fmt)
-// (true)
-// (true, 5)
-// (true, fmt, 5)
-// (true, fmt)
-function listWeekdaysImpl (localeSorted, format, index, field) {
- if (typeof localeSorted === 'boolean') {
- if (isNumber(format)) {
- index = format;
- format = undefined;
- }
-
- format = format || '';
- } else {
- format = localeSorted;
- index = format;
- localeSorted = false;
-
- if (isNumber(format)) {
- index = format;
- format = undefined;
- }
-
- format = format || '';
- }
-
- var locale = getLocale(),
- shift = localeSorted ? locale._week.dow : 0;
-
- if (index != null) {
- return get$1(format, (index + shift) % 7, field, 'day');
- }
-
- var i;
- var out = [];
- for (i = 0; i < 7; i++) {
- out[i] = get$1(format, (i + shift) % 7, field, 'day');
- }
- return out;
-}
-
-function listMonths (format, index) {
- return listMonthsImpl(format, index, 'months');
-}
-
-function listMonthsShort (format, index) {
- return listMonthsImpl(format, index, 'monthsShort');
-}
-
-function listWeekdays (localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdays');
-}
-
-function listWeekdaysShort (localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');
-}
-
-function listWeekdaysMin (localeSorted, format, index) {
- return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');
-}
-
-getSetGlobalLocale('en', {
- dayOfMonthOrdinalParse: /\d{1,2}(th|st|nd|rd)/,
- ordinal : function (number) {
- var b = number % 10,
- output = (toInt(number % 100 / 10) === 1) ? 'th' :
- (b === 1) ? 'st' :
- (b === 2) ? 'nd' :
- (b === 3) ? 'rd' : 'th';
- return number + output;
- }
-});
-
-// Side effect imports
-hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);
-hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);
-
-var mathAbs = Math.abs;
-
-function abs () {
- var data = this._data;
-
- this._milliseconds = mathAbs(this._milliseconds);
- this._days = mathAbs(this._days);
- this._months = mathAbs(this._months);
-
- data.milliseconds = mathAbs(data.milliseconds);
- data.seconds = mathAbs(data.seconds);
- data.minutes = mathAbs(data.minutes);
- data.hours = mathAbs(data.hours);
- data.months = mathAbs(data.months);
- data.years = mathAbs(data.years);
-
- return this;
-}
-
-function addSubtract$1 (duration, input, value, direction) {
- var other = createDuration(input, value);
-
- duration._milliseconds += direction * other._milliseconds;
- duration._days += direction * other._days;
- duration._months += direction * other._months;
-
- return duration._bubble();
-}
-
-// supports only 2.0-style add(1, 's') or add(duration)
-function add$1 (input, value) {
- return addSubtract$1(this, input, value, 1);
-}
-
-// supports only 2.0-style subtract(1, 's') or subtract(duration)
-function subtract$1 (input, value) {
- return addSubtract$1(this, input, value, -1);
-}
-
-function absCeil (number) {
- if (number < 0) {
- return Math.floor(number);
- } else {
- return Math.ceil(number);
- }
-}
-
-function bubble () {
- var milliseconds = this._milliseconds;
- var days = this._days;
- var months = this._months;
- var data = this._data;
- var seconds, minutes, hours, years, monthsFromDays;
-
- // if we have a mix of positive and negative values, bubble down first
- // check: https://github.com/moment/moment/issues/2166
- if (!((milliseconds >= 0 && days >= 0 && months >= 0) ||
- (milliseconds <= 0 && days <= 0 && months <= 0))) {
- milliseconds += absCeil(monthsToDays(months) + days) * 864e5;
- days = 0;
- months = 0;
- }
-
- // The following code bubbles up values, see the tests for
- // examples of what that means.
- data.milliseconds = milliseconds % 1000;
-
- seconds = absFloor(milliseconds / 1000);
- data.seconds = seconds % 60;
-
- minutes = absFloor(seconds / 60);
- data.minutes = minutes % 60;
-
- hours = absFloor(minutes / 60);
- data.hours = hours % 24;
-
- days += absFloor(hours / 24);
-
- // convert days to months
- monthsFromDays = absFloor(daysToMonths(days));
- months += monthsFromDays;
- days -= absCeil(monthsToDays(monthsFromDays));
-
- // 12 months -> 1 year
- years = absFloor(months / 12);
- months %= 12;
-
- data.days = days;
- data.months = months;
- data.years = years;
-
- return this;
-}
-
-function daysToMonths (days) {
- // 400 years have 146097 days (taking into account leap year rules)
- // 400 years have 12 months === 4800
- return days * 4800 / 146097;
-}
-
-function monthsToDays (months) {
- // the reverse of daysToMonths
- return months * 146097 / 4800;
-}
-
-function as (units) {
- if (!this.isValid()) {
- return NaN;
- }
- var days;
- var months;
- var milliseconds = this._milliseconds;
-
- units = normalizeUnits(units);
-
- if (units === 'month' || units === 'year') {
- days = this._days + milliseconds / 864e5;
- months = this._months + daysToMonths(days);
- return units === 'month' ? months : months / 12;
- } else {
- // handle milliseconds separately because of floating point math errors (issue #1867)
- days = this._days + Math.round(monthsToDays(this._months));
- switch (units) {
- case 'week' : return days / 7 + milliseconds / 6048e5;
- case 'day' : return days + milliseconds / 864e5;
- case 'hour' : return days * 24 + milliseconds / 36e5;
- case 'minute' : return days * 1440 + milliseconds / 6e4;
- case 'second' : return days * 86400 + milliseconds / 1000;
- // Math.floor prevents floating point math errors here
- case 'millisecond': return Math.floor(days * 864e5) + milliseconds;
- default: throw new Error('Unknown unit ' + units);
- }
- }
-}
-
-// TODO: Use this.as('ms')?
-function valueOf$1 () {
- if (!this.isValid()) {
- return NaN;
- }
- return (
- this._milliseconds +
- this._days * 864e5 +
- (this._months % 12) * 2592e6 +
- toInt(this._months / 12) * 31536e6
- );
-}
-
-function makeAs (alias) {
- return function () {
- return this.as(alias);
- };
-}
-
-var asMilliseconds = makeAs('ms');
-var asSeconds = makeAs('s');
-var asMinutes = makeAs('m');
-var asHours = makeAs('h');
-var asDays = makeAs('d');
-var asWeeks = makeAs('w');
-var asMonths = makeAs('M');
-var asYears = makeAs('y');
-
-function clone$1 () {
- return createDuration(this);
-}
-
-function get$2 (units) {
- units = normalizeUnits(units);
- return this.isValid() ? this[units + 's']() : NaN;
-}
-
-function makeGetter(name) {
- return function () {
- return this.isValid() ? this._data[name] : NaN;
- };
-}
-
-var milliseconds = makeGetter('milliseconds');
-var seconds = makeGetter('seconds');
-var minutes = makeGetter('minutes');
-var hours = makeGetter('hours');
-var days = makeGetter('days');
-var months = makeGetter('months');
-var years = makeGetter('years');
-
-function weeks () {
- return absFloor(this.days() / 7);
-}
-
-var round = Math.round;
-var thresholds = {
- ss: 44, // a few seconds to seconds
- s : 45, // seconds to minute
- m : 45, // minutes to hour
- h : 22, // hours to day
- d : 26, // days to month
- M : 11 // months to year
-};
-
-// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize
-function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {
- return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);
-}
-
-function relativeTime$1 (posNegDuration, withoutSuffix, locale) {
- var duration = createDuration(posNegDuration).abs();
- var seconds = round(duration.as('s'));
- var minutes = round(duration.as('m'));
- var hours = round(duration.as('h'));
- var days = round(duration.as('d'));
- var months = round(duration.as('M'));
- var years = round(duration.as('y'));
-
- var a = seconds <= thresholds.ss && ['s', seconds] ||
- seconds < thresholds.s && ['ss', seconds] ||
- minutes <= 1 && ['m'] ||
- minutes < thresholds.m && ['mm', minutes] ||
- hours <= 1 && ['h'] ||
- hours < thresholds.h && ['hh', hours] ||
- days <= 1 && ['d'] ||
- days < thresholds.d && ['dd', days] ||
- months <= 1 && ['M'] ||
- months < thresholds.M && ['MM', months] ||
- years <= 1 && ['y'] || ['yy', years];
-
- a[2] = withoutSuffix;
- a[3] = +posNegDuration > 0;
- a[4] = locale;
- return substituteTimeAgo.apply(null, a);
-}
-
-// This function allows you to set the rounding function for relative time strings
-function getSetRelativeTimeRounding (roundingFunction) {
- if (roundingFunction === undefined) {
- return round;
- }
- if (typeof(roundingFunction) === 'function') {
- round = roundingFunction;
- return true;
- }
- return false;
-}
-
-// This function allows you to set a threshold for relative time strings
-function getSetRelativeTimeThreshold (threshold, limit) {
- if (thresholds[threshold] === undefined) {
- return false;
- }
- if (limit === undefined) {
- return thresholds[threshold];
- }
- thresholds[threshold] = limit;
- if (threshold === 's') {
- thresholds.ss = limit - 1;
- }
- return true;
-}
-
-function humanize (withSuffix) {
- if (!this.isValid()) {
- return this.localeData().invalidDate();
- }
-
- var locale = this.localeData();
- var output = relativeTime$1(this, !withSuffix, locale);
-
- if (withSuffix) {
- output = locale.pastFuture(+this, output);
- }
-
- return locale.postformat(output);
-}
-
-var abs$1 = Math.abs;
-
-function sign(x) {
- return ((x > 0) - (x < 0)) || +x;
-}
-
-function toISOString$1() {
- // for ISO strings we do not use the normal bubbling rules:
- // * milliseconds bubble up until they become hours
- // * days do not bubble at all
- // * months bubble up until they become years
- // This is because there is no context-free conversion between hours and days
- // (think of clock changes)
- // and also not between days and months (28-31 days per month)
- if (!this.isValid()) {
- return this.localeData().invalidDate();
- }
-
- var seconds = abs$1(this._milliseconds) / 1000;
- var days = abs$1(this._days);
- var months = abs$1(this._months);
- var minutes, hours, years;
-
- // 3600 seconds -> 60 minutes -> 1 hour
- minutes = absFloor(seconds / 60);
- hours = absFloor(minutes / 60);
- seconds %= 60;
- minutes %= 60;
-
- // 12 months -> 1 year
- years = absFloor(months / 12);
- months %= 12;
-
-
- // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js
- var Y = years;
- var M = months;
- var D = days;
- var h = hours;
- var m = minutes;
- var s = seconds ? seconds.toFixed(3).replace(/\.?0+$/, '') : '';
- var total = this.asSeconds();
-
- if (!total) {
- // this is the same as C#'s (Noda) and python (isodate)...
- // but not other JS (goog.date)
- return 'P0D';
- }
-
- var totalSign = total < 0 ? '-' : '';
- var ymSign = sign(this._months) !== sign(total) ? '-' : '';
- var daysSign = sign(this._days) !== sign(total) ? '-' : '';
- var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';
-
- return totalSign + 'P' +
- (Y ? ymSign + Y + 'Y' : '') +
- (M ? ymSign + M + 'M' : '') +
- (D ? daysSign + D + 'D' : '') +
- ((h || m || s) ? 'T' : '') +
- (h ? hmsSign + h + 'H' : '') +
- (m ? hmsSign + m + 'M' : '') +
- (s ? hmsSign + s + 'S' : '');
-}
-
-var proto$2 = Duration.prototype;
-
-proto$2.isValid = isValid$1;
-proto$2.abs = abs;
-proto$2.add = add$1;
-proto$2.subtract = subtract$1;
-proto$2.as = as;
-proto$2.asMilliseconds = asMilliseconds;
-proto$2.asSeconds = asSeconds;
-proto$2.asMinutes = asMinutes;
-proto$2.asHours = asHours;
-proto$2.asDays = asDays;
-proto$2.asWeeks = asWeeks;
-proto$2.asMonths = asMonths;
-proto$2.asYears = asYears;
-proto$2.valueOf = valueOf$1;
-proto$2._bubble = bubble;
-proto$2.clone = clone$1;
-proto$2.get = get$2;
-proto$2.milliseconds = milliseconds;
-proto$2.seconds = seconds;
-proto$2.minutes = minutes;
-proto$2.hours = hours;
-proto$2.days = days;
-proto$2.weeks = weeks;
-proto$2.months = months;
-proto$2.years = years;
-proto$2.humanize = humanize;
-proto$2.toISOString = toISOString$1;
-proto$2.toString = toISOString$1;
-proto$2.toJSON = toISOString$1;
-proto$2.locale = locale;
-proto$2.localeData = localeData;
-
-// Deprecations
-proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);
-proto$2.lang = lang;
-
-// Side effect imports
-
-// FORMATTING
-
-addFormatToken('X', 0, 0, 'unix');
-addFormatToken('x', 0, 0, 'valueOf');
-
-// PARSING
-
-addRegexToken('x', matchSigned);
-addRegexToken('X', matchTimestamp);
-addParseToken('X', function (input, array, config) {
- config._d = new Date(parseFloat(input, 10) * 1000);
-});
-addParseToken('x', function (input, array, config) {
- config._d = new Date(toInt(input));
-});
-
-// Side effect imports
-
-
-hooks.version = '2.20.1';
-
-setHookCallback(createLocal);
-
-hooks.fn = proto;
-hooks.min = min;
-hooks.max = max;
-hooks.now = now;
-hooks.utc = createUTC;
-hooks.unix = createUnix;
-hooks.months = listMonths;
-hooks.isDate = isDate;
-hooks.locale = getSetGlobalLocale;
-hooks.invalid = createInvalid;
-hooks.duration = createDuration;
-hooks.isMoment = isMoment;
-hooks.weekdays = listWeekdays;
-hooks.parseZone = createInZone;
-hooks.localeData = getLocale;
-hooks.isDuration = isDuration;
-hooks.monthsShort = listMonthsShort;
-hooks.weekdaysMin = listWeekdaysMin;
-hooks.defineLocale = defineLocale;
-hooks.updateLocale = updateLocale;
-hooks.locales = listLocales;
-hooks.weekdaysShort = listWeekdaysShort;
-hooks.normalizeUnits = normalizeUnits;
-hooks.relativeTimeRounding = getSetRelativeTimeRounding;
-hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;
-hooks.calendarFormat = getCalendarFormat;
-hooks.prototype = proto;
-
-// currently HTML5 input type only supports 24-hour formats
-hooks.HTML5_FMT = {
- DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', //
- DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', //
- DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', //
- DATE: 'YYYY-MM-DD', //
- TIME: 'HH:mm', //
- TIME_SECONDS: 'HH:mm:ss', //
- TIME_MS: 'HH:mm:ss.SSS', //
- WEEK: 'YYYY-[W]WW', //
- MONTH: 'YYYY-MM' //
-};
-
-return hooks;
-
-})));
-});
-
-var frappejs = {
- async init() {
- if (this._initialized) return;
- this.initConfig();
- this.initGlobals();
- this._initialized = true;
- },
-
- initConfig() {
- this.config = {
- backend: 'sqlite',
- port: 8000
- };
- },
-
- initGlobals() {
- this.metaCache = {};
- this.models = {};
- this.forms = {};
- this.views = {};
- this.flags = {};
- this.methods = {};
- // temp params while calling routes
- this.params = {};
- },
-
- registerLibs(common) {
- // add standard libs and utils to frappe
- common.initLibs(this);
- },
-
- registerModels(models, type) {
- // register models from app/models/index.js
- const toAdd = Object.assign({}, models.models);
-
- // post process based on type
- if (models[type]) {
- models[type](toAdd);
- }
-
- Object.assign(this.models, toAdd);
- },
-
- registerView(view, name, module) {
- if (!this.views[view]) this.views[view] = {};
- this.views[view][name] = module;
- },
-
- registerMethod({method, handler}) {
- this.methods[method] = handler;
- if (this.app) {
- // add to router if client-server
- this.app.post(`/api/method/${method}`, this.asyncHandler(async function(request, response) {
- const data = await handler(request.body);
- response.json(data);
- }));
- }
- },
-
- call({method, type, args}) {
- if (this.methods[method]) {
- return this.methods[method](args);
- } else {
- throw `${method} not found`;
- }
- },
-
- addToCache(doc) {
- if (!this.docs) return;
-
- // add to `docs` cache
- if (doc.doctype && doc.name) {
- if (!this.docs[doc.doctype]) {
- this.docs[doc.doctype] = {};
- }
- this.docs[doc.doctype][doc.name] = doc;
-
- // singles available as first level objects too
- if (doc.doctype === doc.name) {
- this[doc.name] = doc;
- }
-
- // propogate change to `docs`
- doc.on('change', params => {
- this.docs.trigger('change', params);
- });
- }
- },
-
- isDirty(doctype, name) {
- return (this.docs && this.docs[doctype] && this.docs[doctype][name]
- && this.docs[doctype][name]._dirty) || false;
- },
-
- getDocFromCache(doctype, name) {
- if (this.docs && this.docs[doctype] && this.docs[doctype][name]) {
- return this.docs[doctype][name];
- }
- },
-
- getMeta(doctype) {
- if (!this.metaCache[doctype]) {
- let model = this.models[doctype];
- if (!model) {
- throw `${doctype} is not a registered doctype`;
- }
- let metaClass = model.metaClass || this.BaseMeta;
- this.metaCache[doctype] = new metaClass(model);
- }
-
- return this.metaCache[doctype];
- },
-
- async getDoc(doctype, name) {
- let doc = this.getDocFromCache(doctype, name);
- if (!doc) {
- doc = new (this.getDocumentClass(doctype))({doctype:doctype, name: name});
- await doc.load();
- this.addToCache(doc);
- }
- return doc;
- },
-
- getDocumentClass(doctype) {
- const meta = this.getMeta(doctype);
- return meta.documentClass || this.BaseDocument;
- },
-
- async getSingle(doctype) {
- return await this.getDoc(doctype, doctype);
- },
-
- async getDuplicate(doc) {
- const newDoc = await this.getNewDoc(doc.doctype);
- for (let field of this.getMeta(doc.doctype).getValidFields()) {
- if (['name', 'submitted'].includes(field.fieldname)) continue;
- if (field.fieldtype === 'Table') {
- newDoc[field.fieldname] = (doc[field.fieldname] || []).map(d => {
- let newd = Object.assign({}, d);
- newd.name = '';
- return newd;
- });
- } else {
- newDoc[field.fieldname] = doc[field.fieldname];
- }
- }
- return newDoc;
- },
-
- async getNewDoc(doctype) {
- let doc = this.newDoc({doctype: doctype});
- doc._notInserted = true;
- doc.name = this.getRandomString();
- this.addToCache(doc);
- return doc;
- },
-
- newDoc(data) {
- let doc = new (this.getDocumentClass(data.doctype))(data);
- doc.setDefaults();
- return doc;
- },
-
- async insert(data) {
- return await (this.newDoc(data)).insert();
- },
-
- async syncDoc(data) {
- let doc;
- if (await this.db.exists(data.doctype, data.name)) {
- doc = await this.getDoc(data.doctype, data.name);
- Object.assign(doc, data);
- await doc.update();
- } else {
- doc = this.newDoc(data);
- await doc.insert();
- }
- },
-
- login(user='guest', user_key) {
- this.session = {user: user};
- },
-
- close() {
- this.db.close();
-
- if (this.server) {
- this.server.close();
- }
- }
-};
-
-const markdown = new (showdown.Converter)();
-
-
-
-var format = {
- format(value, field) {
- if (typeof field === 'string') {
- field = {fieldtype: field};
- }
-
- if (field.fieldtype==='Currency') {
- value = number_format.format_number(value);
-
- } else if (field.fieldtype === 'Text') {
- value = markdown.makeHtml(value || '');
-
- } else if (field.fieldtype === 'Date') {
- let dateFormat;
- if (!frappejs.SystemSettings) {
- dateFormat = 'yyyy-mm-dd';
- } else {
- dateFormat = frappejs.SystemSettings.dateFormat;
- }
-
- value = moment(value).format(dateFormat.toUpperCase());
-
- } else {
- if (value===null || value===undefined) {
- value = '';
- } else {
- value = value + '';
- }
- }
- return value;
- }
-};
-
-class BaseError extends Error {
- constructor(status_code, ...params) {
- super(...params);
- this.status_code = status_code;
- }
-}
-
-class ValidationError extends BaseError {
- constructor(...params) { super(417, ...params); }
-}
-
-var errors = {
- ValidationError: ValidationError,
- ValueError: class ValueError extends ValidationError { },
- Conflict: class Conflict extends ValidationError { },
- NotFound: class NotFound extends BaseError {
- constructor(...params) { super(404, ...params); }
- },
- Forbidden: class Forbidden extends BaseError {
- constructor(...params) { super(403, ...params); }
- },
-};
-
-var observable = class Observable {
- constructor() {
- this._observable = {
- isHot: {},
- eventQueue: {},
- listeners: {},
- onceListeners: {}
- };
- }
-
- // getter, setter stubs, so Observable can be used as a simple Document
- get(key) {
- return this[key];
- }
-
- set(key, value) {
- this[key] = value;
- this.trigger('change', {doc: this, fieldname: key});
- }
-
- on(event, listener) {
- this._addListener('listeners', event, listener);
- if (this._observable.socketClient) {
- this._observable.socketClient.on(event, listener);
- }
- }
-
- // remove listener
- off(event, listener) {
- for (let type of ['listeners', 'onceListeners']) {
- let index = this._observable[type][event] && this._observable[type][event].indexOf(listener);
- if (index) {
- this._observable[type][event].splice(index, 1);
- }
- }
- }
-
- once(event, listener) {
- this._addListener('onceListeners', event, listener);
- }
-
- async trigger(event, params, throttle=false) {
- if (throttle) {
- if (this._throttled(event, params, throttle)) return;
- params = [params];
- }
-
- await this._executeTriggers(event, params);
- }
-
- async _executeTriggers(event, params) {
- let response = await this._triggerEvent('listeners', event, params);
- if (response === false) return false;
-
- response = await this._triggerEvent('onceListeners', event, params);
- if (response === false) return false;
-
- // emit via socket
- if (this._observable.socketServer) {
- this._observable.socketServer.emit(event, params);
- }
-
- // clear once-listeners
- if (this._observable.onceListeners && this._observable.onceListeners[event]) {
- delete this._observable.onceListeners[event];
- }
-
- }
-
- clearListeners() {
- this._observable.listeners = {};
- this._observable.onceListeners = {};
- }
-
- bindSocketClient(socket) {
- // also send events with sockets
- this._observable.socketClient = socket;
- }
-
- bindSocketServer(socket) {
- // also send events with sockets
- this._observable.socketServer = socket;
- }
-
- _throttled(event, params, throttle) {
- if (this._observable.isHot[event]) {
- // hot, add to queue
- if (!this._observable.eventQueue[event]) this._observable.eventQueue[event] = [];
- this._observable.eventQueue[event].push(params);
-
- // aleady hot, quit
- return true;
- }
- this._observable.isHot[event] = true;
-
- // cool-off
- setTimeout(() => {
- this._observable.isHot[event] = false;
-
- // flush queue
- if (this._observable.eventQueue[event]) {
- let _queuedParams = this._observable.eventQueue[event];
- this._observable.eventQueue[event] = null;
- this._executeTriggers(event, _queuedParams);
- }
- }, throttle);
-
- return false;
- }
-
- _addListener(type, event, listener) {
- if (!this._observable[type][event]) {
- this._observable[type][event] = [];
- }
- this._observable[type][event].push(listener);
- }
-
- async _triggerEvent(type, event, params) {
- if (this._observable[type][event]) {
- for (let listener of this._observable[type][event]) {
- await listener(params);
- }
- }
- }
-};
-
-var naming = {
- async setName(doc) {
- if (frappejs.isServer) {
- // if is server, always name again if autoincrement or other
- if (doc.meta.naming === 'autoincrement') {
- doc.name = await this.getNextId(doc.doctype);
- return;
- }
-
- if (doc.meta.settings) {
- const numberSeries = (await doc.getSettings()).numberSeries;
- if(numberSeries) {
- doc.name = await this.getSeriesNext(numberSeries);
- }
- }
- }
-
- if (doc.name) {
- return;
- }
-
- // name === doctype for Single
- if (doc.meta.isSingle) {
- doc.name = doc.meta.name;
- return;
- }
-
- // assign a random name by default
- // override doc to set a name
- if (!doc.name) {
- doc.name = frappejs.getRandomString();
- }
- },
-
- async getNextId(doctype) {
- // get the last inserted row
- let lastInserted = await this.getLastInserted(doctype);
- let name = 1;
- if (lastInserted) {
- let lastNumber = parseInt(lastInserted.name);
- if (isNaN(lastNumber)) lastNumber = 0;
- name = lastNumber + 1;
- }
- return (name + '').padStart(9, '0');
- },
-
- async getLastInserted(doctype) {
- const lastInserted = await frappejs.db.getAll({
- doctype: doctype,
- fields: ['name'],
- limit: 1,
- order_by: 'creation',
- order: 'desc'
- });
- return (lastInserted && lastInserted.length) ? lastInserted[0] : null;
- },
-
- async getSeriesNext(prefix) {
- let series;
- try {
- series = await frappejs.getDoc('NumberSeries', prefix);
- } catch (e) {
- if (!e.status_code || e.status_code !== 404) {
- throw e;
- }
- await this.createNumberSeries(prefix);
- }
- let next = await series.next();
- return prefix + next;
- },
-
- async createNumberSeries(prefix, setting, start=1000) {
- if (!(await frappejs.db.exists('NumberSeries', prefix))) {
- const series = frappejs.newDoc({doctype: 'NumberSeries', name: prefix, current: start});
- await series.insert();
-
- if (setting) {
- const settingDoc = await frappejs.getSingle(setting);
- settingDoc.numberSeries = series.name;
- await settingDoc.update();
- }
- }
- }
-};
-
-var document$1 = class BaseDocument extends observable {
- constructor(data) {
- super();
- this.fetchValuesCache = {};
- this.flags = {};
- this.setup();
- Object.assign(this, data);
-
- // clear fetch-values cache
- frappejs.db.on('change', (params) => this.fetchValuesCache[`${params.doctype}:${params.name}`] = {});
- }
-
- setup() {
- // add listeners
- }
-
- get meta() {
- if (!this._meta) {
- this._meta = frappejs.getMeta(this.doctype);
- }
- return this._meta;
- }
-
- async getSettings() {
- if (!this._settings) {
- this._settings = await frappejs.getSingle(this.meta.settings);
- }
- return this._settings;
- }
-
- // set value and trigger change
- async set(fieldname, value) {
- if (this[fieldname] !== value) {
- this._dirty = true;
- this[fieldname] = await this.validateField(fieldname, value);
- await this.applyChange(fieldname);
- }
- }
-
- async applyChange(fieldname) {
- if (await this.applyFormula()) {
- // multiple changes
- await this.trigger('change', { doc: this });
- } else {
- // no other change, trigger control refresh
- await this.trigger('change', { doc: this, fieldname: fieldname });
- }
- }
-
- setDefaults() {
- for (let field of this.meta.fields) {
- if (this[field.fieldname]===null || this[field.fieldname]===undefined) {
- if (field.fieldtype === 'Date') {
- this[field.fieldname] = (new Date()).toISOString().substr(0, 10);
- } else if(field.default) {
- this[field.fieldname] = field.default;
- }
- }
- }
- }
-
- setKeywords() {
- let keywords = [];
- for (let fieldname of this.meta.getKeywordFields()) {
- keywords.push(this[fieldname]);
- }
- this.keywords = keywords.join(', ');
- }
-
- append(key, document) {
- if (!this[key]) {
- this[key] = [];
- }
- this[key].push(this.initDoc(document));
- }
-
- initDoc(data) {
- if (data.prototype instanceof Document) {
- return data;
- } else {
- return new Document(data);
- }
- }
-
- async validateField(key, value) {
- let field = this.meta.getField(key);
- if (field && field.fieldtype == 'Select') {
- return this.meta.validateSelect(field, value);
- }
- return value;
- }
-
- getValidDict() {
- let data = {};
- for (let field of this.meta.getValidFields()) {
- data[field.fieldname] = this[field.fieldname];
- }
- return data;
- }
-
- getFullDict() {
- let data = this.getValidDict();
- return data;
- }
-
- setStandardValues() {
- // set standard values on server-side only
- if (frappejs.isServer) {
- let now = (new Date()).toISOString();
- if (!this.submitted) this.submitted = 0;
- if (!this.owner) {
- this.owner = frappejs.session.user;
- this.creation = now;
- }
- this.modifiedBy = frappejs.session.user;
- this.modified = now;
- }
- }
-
- async load() {
- let data = await frappejs.db.get(this.doctype, this.name);
- if (data.name) {
- this.syncValues(data);
- if (this.meta.isSingle) {
- this.setDefaults();
- }
- } else {
- throw new frappejs.errors.NotFound(`Not Found: ${this.doctype} ${this.name}`);
- }
- }
-
- syncValues(data) {
- this.clearValues();
- Object.assign(this, data);
- this._dirty = false;
- this.trigger('change', {doc: this});
- }
-
- clearValues() {
- for (let field of this.meta.getValidFields()) {
- if(this[field.fieldname]) {
- delete this[field.fieldname];
- }
- }
- }
-
- setChildIdx() {
- // renumber children
- for (let field of this.meta.getValidFields()) {
- if (field.fieldtype==='Table') {
- for(let i=0; i < (this[field.fieldname] || []).length; i++) {
- this[field.fieldname][i].idx = i;
- }
- }
- }
- }
-
- async compareWithCurrentDoc() {
- if (frappejs.isServer && !this._notInserted) {
- let currentDoc = await frappejs.db.get(this.doctype, this.name);
-
- // check for conflict
- if (currentDoc && this.modified != currentDoc.modified) {
- throw new frappejs.errors.Conflict(frappejs._('Document {0} {1} has been modified after loading', [this.doctype, this.name]));
- }
-
- if (this.submitted && !this.meta.isSubmittable) {
- throw new frappejs.errors.ValidationError(frappejs._('Document type {1} is not submittable', [this.doctype]));
- }
-
- // set submit action flag
- if (this.submitted && !currentDoc.submitted) {
- this.flags.submitAction = true;
- }
-
- if (currentDoc.submitted && !this.submitted) {
- this.flags.revertAction = true;
- }
-
- }
- }
-
- async applyFormula() {
- if (!this.meta.hasFormula()) {
- return false;
- }
-
- let doc = this;
-
- // children
- for (let tablefield of this.meta.getTableFields()) {
- let formulaFields = frappejs.getMeta(tablefield.childtype).getFormulaFields();
- if (formulaFields.length) {
-
- // for each row
- for (let row of this[tablefield.fieldname]) {
- for (let field of formulaFields) {
- const val = await field.formula(row, doc);
- if (val !== false) {
- row[field.fieldname] = val;
- }
- }
- }
- }
- }
-
- // parent
- for (let field of this.meta.getFormulaFields()) {
- const val = await field.formula(doc);
- if (val !== false) {
- doc[field.fieldname] = val;
- }
- }
-
- return true;
- }
-
- async commit() {
- // re-run triggers
- this.setStandardValues();
- this.setKeywords();
- this.setChildIdx();
- await this.applyFormula();
- await this.trigger('validate');
- }
-
- async insert() {
- await naming.setName(this);
- await this.commit();
- await this.trigger('beforeInsert');
-
- const data = await frappejs.db.insert(this.doctype, this.getValidDict());
- this.syncValues(data);
-
- await this.trigger('afterInsert');
- await this.trigger('afterSave');
-
- return this;
- }
-
- async update() {
- await this.compareWithCurrentDoc();
- await this.commit();
- await this.trigger('beforeUpdate');
-
- // before submit
- if (this.flags.submitAction) await this.trigger('beforeSubmit');
- if (this.flags.revertAction) await this.trigger('beforeRevert');
-
- const data = await frappejs.db.update(this.doctype, this.getValidDict());
- this.syncValues(data);
-
- await this.trigger('afterUpdate');
- await this.trigger('afterSave');
-
- // after submit
- if (this.flags.submitAction) await this.trigger('afterSubmit');
- if (this.flags.revertAction) await this.trigger('afterRevert');
-
- return this;
- }
-
- async delete() {
- await this.trigger('before_delete');
- await frappejs.db.delete(this.doctype, this.name);
- await this.trigger('after_delete');
- }
-
- async submit() {
- this.submitted = 1;
- this.update();
- }
-
- async revert() {
- this.submitted = 0;
- this.update();
- }
-
- // trigger methods on the class if they match
- // with the trigger name
- async trigger(event, params) {
- if (this[event]) {
- await this[event](params);
- }
- await super.trigger(event, params);
- }
-
- // helper functions
- getSum(tablefield, childfield) {
- return this[tablefield].map(d => (d[childfield] || 0)).reduce((a, b) => a + b, 0);
- }
-
- async getFrom(doctype, name, fieldname) {
- if (!name) return '';
- let _values = this.fetchValuesCache[`${doctype}:${name}`] || (this.fetchValuesCache[`${doctype}:${name}`] = {});
- if (!_values[fieldname]) {
- _values[fieldname] = await frappejs.db.getValue(doctype, name, fieldname);
- }
- return _values[fieldname];
- }
-};
-
-var isMergeableObject = function isMergeableObject(value) {
- return isNonNullObject(value)
- && !isSpecial(value)
-};
-
-function isNonNullObject(value) {
- return !!value && typeof value === 'object'
-}
-
-function isSpecial(value) {
- var stringValue = Object.prototype.toString.call(value);
-
- return stringValue === '[object RegExp]'
- || stringValue === '[object Date]'
- || isReactElement(value)
-}
-
-// see https://github.com/facebook/react/blob/b5ac963fb791d1298e7f396236383bc955f916c1/src/isomorphic/classic/element/ReactElement.js#L21-L25
-var canUseSymbol = typeof Symbol === 'function' && Symbol.for;
-var REACT_ELEMENT_TYPE = canUseSymbol ? Symbol.for('react.element') : 0xeac7;
-
-function isReactElement(value) {
- return value.$$typeof === REACT_ELEMENT_TYPE
-}
-
-function emptyTarget(val) {
- return Array.isArray(val) ? [] : {}
-}
-
-function cloneUnlessOtherwiseSpecified(value, options) {
- return (options.clone !== false && options.isMergeableObject(value))
- ? deepmerge(emptyTarget(value), value, options)
- : value
-}
-
-function defaultArrayMerge(target, source, options) {
- return target.concat(source).map(function(element) {
- return cloneUnlessOtherwiseSpecified(element, options)
- })
-}
-
-function mergeObject(target, source, options) {
- var destination = {};
- if (options.isMergeableObject(target)) {
- Object.keys(target).forEach(function(key) {
- destination[key] = cloneUnlessOtherwiseSpecified(target[key], options);
- });
- }
- Object.keys(source).forEach(function(key) {
- if (!options.isMergeableObject(source[key]) || !target[key]) {
- destination[key] = cloneUnlessOtherwiseSpecified(source[key], options);
- } else {
- destination[key] = deepmerge(target[key], source[key], options);
- }
- });
- return destination
-}
-
-function deepmerge(target, source, options) {
- options = options || {};
- options.arrayMerge = options.arrayMerge || defaultArrayMerge;
- options.isMergeableObject = options.isMergeableObject || isMergeableObject;
-
- var sourceIsArray = Array.isArray(source);
- var targetIsArray = Array.isArray(target);
- var sourceAndTargetTypesMatch = sourceIsArray === targetIsArray;
-
- if (!sourceAndTargetTypesMatch) {
- return cloneUnlessOtherwiseSpecified(source, options)
- } else if (sourceIsArray) {
- return options.arrayMerge(target, source, options)
- } else {
- return mergeObject(target, source, options)
- }
-}
-
-deepmerge.all = function deepmergeAll(array, options) {
- if (!Array.isArray(array)) {
- throw new Error('first argument should be an array')
- }
-
- return array.reduce(function(prev, next) {
- return deepmerge(prev, next, options)
- }, {})
-};
-
-var deepmerge_1 = deepmerge;
-
-
-
-
-var es = Object.freeze({
- default: deepmerge_1
-});
-
-var deepmerge$1 = ( es && deepmerge_1 ) || es;
-
-var model = createCommonjsModule(function (module) {
-module.exports = {
- extend: (base, target, options = {}) => {
- const fieldsToMerge = (target.fields || []).map(df => df.fieldname);
- const fieldsToRemove = options.skipFields || [];
-
- base.fields = base.fields
- .filter(df => !fieldsToRemove.includes(df.fieldname))
- .map(df => {
- if (fieldsToMerge.includes(df.fieldname)) {
- return deepmerge$1(df, target.fields.find(tdf => tdf.fieldname === df.fieldname));
- }
- return df;
- });
-
- const overrideProps = options.overrideProps || [];
- for (let prop of overrideProps) {
- if (base.hasOwnProperty(prop)) {
- delete base[prop];
- }
- }
-
- return deepmerge$1(base, target);
- },
- commonFields: [
- {
- fieldname: 'name', fieldtype: 'Data', required: 1
- }
- ],
- parentFields: [
- {
- fieldname: 'owner', fieldtype: 'Data', required: 1
- },
- {
- fieldname: 'modifiedBy', fieldtype: 'Data', required: 1
- },
- {
- fieldname: 'creation', fieldtype: 'Datetime', required: 1
- },
- {
- fieldname: 'modified', fieldtype: 'Datetime', required: 1
- },
- {
- fieldname: 'keywords', fieldtype: 'Text'
- }
- ],
- childFields: [
- {
- fieldname: 'idx', fieldtype: 'Int', required: 1
- },
- {
- fieldname: 'parent', fieldtype: 'Data', required: 1
- },
- {
- fieldname: 'parenttype', fieldtype: 'Data', required: 1
- },
- {
- fieldname: 'parentfield', fieldtype: 'Data', required: 1
- }
- ],
- treeFields: [
- {
- fieldname: 'lft', fieldtype: 'Int', required: 1
- },
- {
- fieldname: 'rgt', fieldtype: 'Int', required: 1
- }
- ]
-};
-});
-
-var model_1 = model.extend;
-var model_2 = model.commonFields;
-var model_3 = model.parentFields;
-var model_4 = model.childFields;
-var model_5 = model.treeFields;
-
-var meta = class BaseMeta extends document$1 {
- constructor(data) {
- super(data);
- this.setDefaultIndicators();
- if (this.setupMeta) {
- this.setupMeta();
- }
- if (!this.titleField) {
- this.titleField = 'name';
- }
- }
-
- hasField(fieldname) {
- return this.getField(fieldname) ? true : false;
- }
-
- getField(fieldname) {
- if (!this._field_map) {
- this._field_map = {};
- for (let field of this.fields) {
- this._field_map[field.fieldname] = field;
- }
- }
- return this._field_map[fieldname];
- }
-
- getLabel(fieldname) {
- return this.getField(fieldname).label;
- }
-
- getTableFields() {
- if (this._tableFields===undefined) {
- this._tableFields = this.fields.filter(field => field.fieldtype === 'Table');
- }
- return this._tableFields;
- }
-
- getFormulaFields() {
- if (this._formulaFields===undefined) {
- this._formulaFields = this.fields.filter(field => field.formula);
- }
- return this._formulaFields;
- }
-
- hasFormula() {
- if (this._hasFormula===undefined) {
- this._hasFormula = false;
- if (this.getFormulaFields().length) {
- this._hasFormula = true;
- } else {
- for (let tablefield of this.getTableFields()) {
- if (frappejs.getMeta(tablefield.childtype).getFormulaFields().length) {
- this._hasFormula = true;
- break;
- }
- }
- }
- }
- return this._hasFormula;
- }
-
- async set(fieldname, value) {
- this[fieldname] = value;
- await this.trigger(fieldname);
- }
-
- get(fieldname) {
- return this[fieldname];
- }
-
- getValidFields({ withChildren = true } = {}) {
- if (!this._validFields) {
-
- this._validFields = [];
- this._validFieldsWithChildren = [];
-
- const _add = (field) => {
- this._validFields.push(field);
- this._validFieldsWithChildren.push(field);
- };
-
- const doctype_fields = this.fields.map((field) => field.fieldname);
-
- // standard fields
- for (let field of model.commonFields) {
- if (frappejs.db.typeMap[field.fieldtype] && !doctype_fields.includes(field.fieldname)) {
- _add(field);
- }
- }
-
- if (this.isSubmittable) {
- _add({fieldtype:'Check', fieldname: 'submitted', label: frappejs._('Submitted')});
- }
-
- if (this.isChild) {
- // child fields
- for (let field of model.childFields) {
- if (frappejs.db.typeMap[field.fieldtype] && !doctype_fields.includes(field.fieldname)) {
- _add(field);
- }
- }
- } else {
- // parent fields
- for (let field of model.parentFields) {
- if (frappejs.db.typeMap[field.fieldtype] && !doctype_fields.includes(field.fieldname)) {
- _add(field);
- }
- }
- }
-
- if (this.isTree) {
- // tree fields
- for (let field of model.treeFields) {
- if (frappejs.db.typeMap[field.fieldtype] && !doctype_fields.includes(field.fieldname)) {
- _add(field);
- }
- }
- }
-
- // doctype fields
- for (let field of this.fields) {
- let include = frappejs.db.typeMap[field.fieldtype];
-
- if (include) {
- _add(field);
- }
-
- // include tables if (withChildren = True)
- if (!include && field.fieldtype === 'Table') {
- this._validFieldsWithChildren.push(field);
- }
- }
- }
-
- if (withChildren) {
- return this._validFieldsWithChildren;
- } else {
- return this._validFields;
- }
- }
-
- getKeywordFields() {
- if (!this._keywordFields) {
- this._keywordFields = this.keywordFields;
- if (!(this._keywordFields && this._keywordFields.length && this.fields)) {
- this._keywordFields = this.fields.filter(field => field.fieldtype !== 'Table' && field.required).map(field => field.fieldname);
- }
- if (!(this._keywordFields && this._keywordFields.length)) {
- this._keywordFields = ['name'];
- }
- }
- return this._keywordFields;
- }
-
- validateSelect(field, value) {
- let options = field.options;
- if (!options) return;
-
- if (typeof options === 'string') {
- // values given as string
- options = field.options.split('\n');
- }
- if (!options.includes(value)) {
- throw new frappejs.errors.ValueError(`${value} must be one of ${options.join(", ")}`);
- }
- return value;
- }
-
- async trigger(event, params = {}) {
- Object.assign(params, {
- doc: this,
- name: event
- });
-
- await super.trigger(event, params);
- }
-
- setDefaultIndicators() {
- if (!this.indicators) {
- if (this.isSubmittable) {
- this.indicators = {
- key: 'submitted',
- colors: {
- 0: 'gray',
- 1: 'blue'
- }
- };
- }
- }
- }
-
- getIndicatorColor(doc) {
- if (frappejs.isDirty(this.name, doc.name)) {
- return 'orange';
- } else {
- if (this.indicators) {
- let value = doc[this.indicators.key];
- if (value) {
- return this.indicators.colors[value] || 'gray';
- } else {
- return 'gray';
- }
- } else {
- return 'gray';
- }
- }
- }
-};
-
-var common = {
- initLibs(frappe) {
- Object.assign(frappe, utils);
- Object.assign(frappe, number_format);
- Object.assign(frappe, format);
- frappe.errors = errors;
- frappe.BaseDocument = document$1;
- frappe.BaseMeta = meta;
- }
-};
-
-var http = class HTTPClient extends observable {
- constructor({ server, protocol = 'http' }) {
- super();
-
- this.server = server;
- this.protocol = protocol;
-
- // if the backend is http, then always client!
- frappejs.isServer = false;
-
- this.initTypeMap();
- }
-
- connect() {
-
- }
-
- async insert(doctype, doc) {
- doc.doctype = doctype;
- let url = this.getURL('/api/resource', doctype);
- return await this.fetch(url, {
- method: 'POST',
- body: JSON.stringify(doc)
- })
- }
-
- async get(doctype, name) {
- let url = this.getURL('/api/resource', doctype, name);
- return await this.fetch(url, {
- method: 'GET',
- headers: this.getHeaders()
- })
- }
-
- async getAll({ doctype, fields, filters, start, limit, sort_by, order }) {
- let url = this.getURL('/api/resource', doctype);
-
- url = url + "?" + frappejs.getQueryString({
- fields: JSON.stringify(fields),
- filters: JSON.stringify(filters),
- start: start,
- limit: limit,
- sort_by: sort_by,
- order: order
- });
-
- return await this.fetch(url, {
- method: 'GET',
- });
- }
-
- async update(doctype, doc) {
- doc.doctype = doctype;
- let url = this.getURL('/api/resource', doctype, doc.name);
-
- return await this.fetch(url, {
- method: 'PUT',
- body: JSON.stringify(doc)
- });
- }
-
- async delete(doctype, name) {
- let url = this.getURL('/api/resource', doctype, name);
-
- return await this.fetch(url, {
- method: 'DELETE',
- });
- }
-
- async deleteMany(doctype, names) {
- let url = this.getURL('/api/resource', doctype);
-
- return await this.fetch(url, {
- method: 'DELETE',
- body: JSON.stringify(names)
- });
- }
-
- async exists(doctype, name) {
- return (await this.getValue(doctype, name, 'name')) ? true : false;
- }
-
- async getValue(doctype, name, fieldname) {
- let url = this.getURL('/api/resource', doctype, name, fieldname);
-
- return (await this.fetch(url, {
- method: 'GET',
- })).value;
- }
-
- async fetch(url, args) {
- args.headers = this.getHeaders();
- let response = await frappejs.fetch(url, args);
- let data = await response.json();
-
- if (response.status !== 200) {
- throw Error(data.error);
- }
-
- return data;
- }
-
- getURL(...parts) {
- return this.protocol + '://' + this.server + parts.join('/');
- }
-
- getHeaders() {
- return {
- 'Accept': 'application/json',
- 'Content-Type': 'application/json'
- }
- }
-
- initTypeMap() {
- this.typeMap = {
- 'Autocomplete': true
- , 'Currency': true
- , 'Int': true
- , 'Float': true
- , 'Percent': true
- , 'Check': true
- , 'Small Text': true
- , 'Long Text': true
- , 'Code': true
- , 'Text Editor': true
- , 'Date': true
- , 'Datetime': true
- , 'Time': true
- , 'Text': true
- , 'Data': true
- , 'Link': true
- , 'DynamicLink': true
- , 'Password': true
- , 'Select': true
- , 'Read Only': true
- , 'File': true
- , 'Attach': true
- , 'Attach Image': true
- , 'Signature': true
- , 'Color': true
- , 'Barcode': true
- , 'Geolocation': true
- };
- }
-
- close() {
-
- }
-
-};
-
-var jquery = createCommonjsModule(function (module) {
-/*!
- * jQuery JavaScript Library v3.3.1
- * https://jquery.com/
- *
- * Includes Sizzle.js
- * https://sizzlejs.com/
- *
- * Copyright JS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2018-01-20T17:24Z
- */
-( function( global, factory ) {
-
- {
-
- // For CommonJS and CommonJS-like environments where a proper `window`
- // is present, execute the factory and get jQuery.
- // For environments that do not have a `window` with a `document`
- // (such as Node.js), expose a factory as module.exports.
- // This accentuates the need for the creation of a real `window`.
- // e.g. var jQuery = require("jquery")(window);
- // See ticket #14549 for more info.
- module.exports = global.document ?
- factory( global, true ) :
- function( w ) {
- if ( !w.document ) {
- throw new Error( "jQuery requires a window with a document" );
- }
- return factory( w );
- };
- }
-
-// Pass this if window is not defined yet
-} )( typeof window !== "undefined" ? window : commonjsGlobal, function( window, noGlobal ) {
-
-// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
-// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
-// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
-// enough that all such attempts are guarded in a try block.
-var arr = [];
-
-var document = window.document;
-
-var getProto = Object.getPrototypeOf;
-
-var slice = arr.slice;
-
-var concat = arr.concat;
-
-var push = arr.push;
-
-var indexOf = arr.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var fnToString = hasOwn.toString;
-
-var ObjectFunctionString = fnToString.call( Object );
-
-var support = {};
-
-var isFunction = function isFunction( obj ) {
-
- // Support: Chrome <=57, Firefox <=52
- // In some browsers, typeof returns "function" for HTML