diff --git a/public/css/app.css b/public/css/app.css
deleted file mode 100644
index 2fb1b80..0000000
--- a/public/css/app.css
+++ /dev/null
@@ -1,10941 +0,0 @@
-@import url(https://fonts.googleapis.com/css?family=Nunito);
-@charset "UTF-8";
-:root{
- --blue:#3490dc;
- --indigo:#6574cd;
- --purple:#9561e2;
- --pink:#f66d9b;
- --red:#e3342f;
- --orange:#f6993f;
- --yellow:#ffed4a;
- --green:#38c172;
- --teal:#4dc0b5;
- --cyan:#6cb2eb;
- --white:#fff;
- --gray:#6c757d;
- --gray-dark:#343a40;
- --primary:#3490dc;
- --secondary:#6c757d;
- --success:#38c172;
- --info:#6cb2eb;
- --warning:#ffed4a;
- --danger:#e3342f;
- --light:#f8f9fa;
- --dark:#343a40;
- --breakpoint-xs:0;
- --breakpoint-sm:576px;
- --breakpoint-md:768px;
- --breakpoint-lg:992px;
- --breakpoint-xl:1200px;
- --font-family-sans-serif:"Nunito", sans-serif;
- --font-family-monospace:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
-}
-
-*,
-*::before,
-*::after{
- box-sizing:border-box;
-}
-
-html{
- font-family:sans-serif;
- line-height:1.15;
- -webkit-text-size-adjust:100%;
- -webkit-tap-highlight-color:rgba(0, 0, 0, 0);
-}
-
-article, aside, figcaption, figure, footer, header, hgroup, main, nav, section{
- display:block;
-}
-
-body{
- margin:0;
- font-family:"Nunito", sans-serif;
- font-size:0.9rem;
- font-weight:400;
- line-height:1.6;
- color:#212529;
- text-align:left;
- background-color:#f8fafc;
-}
-
-[tabindex="-1"]:focus:not(:focus-visible){
- outline:0 !important;
-}
-
-hr{
- 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;
- -webkit-text-decoration-skip-ink:none;
- text-decoration-skip-ink:none;
-}
-
-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:0.5rem;
- margin-left:0;
-}
-
-blockquote{
- margin:0 0 1rem;
-}
-
-b,
-strong{
- font-weight:bolder;
-}
-
-small{
- font-size:80%;
-}
-
-sub,
-sup{
- position:relative;
- font-size:75%;
- line-height:0;
- vertical-align:baseline;
-}
-
-sub{
- bottom:-0.25em;
-}
-
-sup{
- top:-0.5em;
-}
-
-a{
- color:#3490dc;
- text-decoration:none;
- background-color:transparent;
-}
-a:hover{
- color:#1d68a7;
- text-decoration:underline;
-}
-
-a:not([href]):not([class]){
- color:inherit;
- text-decoration:none;
-}
-a:not([href]):not([class]):hover{
- color:inherit;
- text-decoration:none;
-}
-
-pre,
-code,
-kbd,
-samp{
- font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", 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{
- overflow:hidden;
- vertical-align:middle;
-}
-
-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;
- text-align:-webkit-match-parent;
-}
-
-label{
- display:inline-block;
- margin-bottom:0.5rem;
-}
-
-button{
- border-radius:0;
-}
-
-button:focus:not(:focus-visible){
- outline:0;
-}
-
-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;
-}
-
-[role=button]{
- cursor:pointer;
-}
-
-select{
- word-wrap:normal;
-}
-
-button,
-[type=button],
-[type=reset],
-[type=submit]{
- -webkit-appearance:button;
-}
-
-button:not(:disabled),
-[type=button]:not(:disabled),
-[type=reset]:not(:disabled),
-[type=submit]:not(:disabled){
- cursor:pointer;
-}
-
-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]{
- box-sizing:border-box;
- padding:0;
-}
-
-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:0.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-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-weight:500;
- line-height:1.2;
-}
-
-h1, .h1{
- font-size:2.25rem;
-}
-
-h2, .h2{
- font-size:1.8rem;
-}
-
-h3, .h3{
- font-size:1.575rem;
-}
-
-h4, .h4{
- font-size:1.35rem;
-}
-
-h5, .h5{
- font-size:1.125rem;
-}
-
-h6, .h6{
- font-size:0.9rem;
-}
-
-.lead{
- font-size:1.125rem;
- 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.125rem;
-}
-
-.blockquote-footer{
- display:block;
- font-size:80%;
- color:#6c757d;
-}
-.blockquote-footer::before{
- content:"— ";
-}
-
-.img-fluid{
- max-width:100%;
- height:auto;
-}
-
-.img-thumbnail{
- padding:0.25rem;
- background-color:#f8fafc;
- 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{
- font-size:87.5%;
- color:#f66d9b;
- word-wrap: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,
-.container-fluid,
-.container-xl,
-.container-lg,
-.container-md,
-.container-sm{
- width:100%;
- padding-right:15px;
- padding-left:15px;
- margin-right:auto;
- margin-left:auto;
-}
-
-@media (min-width: 576px){
- .container-sm, .container{
- max-width:540px;
- }
-}
-@media (min-width: 768px){
- .container-md, .container-sm, .container{
- max-width:720px;
- }
-}
-@media (min-width: 992px){
- .container-lg, .container-md, .container-sm, .container{
- max-width:960px;
- }
-}
-@media (min-width: 1200px){
- .container-xl, .container-lg, .container-md, .container-sm, .container{
- max-width:1140px;
- }
-}
-.row{
- display:flex;
- 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-xl,
-.col-xl-auto, .col-xl-12, .col-xl-11, .col-xl-10, .col-xl-9, .col-xl-8, .col-xl-7, .col-xl-6, .col-xl-5, .col-xl-4, .col-xl-3, .col-xl-2, .col-xl-1, .col-lg,
-.col-lg-auto, .col-lg-12, .col-lg-11, .col-lg-10, .col-lg-9, .col-lg-8, .col-lg-7, .col-lg-6, .col-lg-5, .col-lg-4, .col-lg-3, .col-lg-2, .col-lg-1, .col-md,
-.col-md-auto, .col-md-12, .col-md-11, .col-md-10, .col-md-9, .col-md-8, .col-md-7, .col-md-6, .col-md-5, .col-md-4, .col-md-3, .col-md-2, .col-md-1, .col-sm,
-.col-sm-auto, .col-sm-12, .col-sm-11, .col-sm-10, .col-sm-9, .col-sm-8, .col-sm-7, .col-sm-6, .col-sm-5, .col-sm-4, .col-sm-3, .col-sm-2, .col-sm-1, .col,
-.col-auto, .col-12, .col-11, .col-10, .col-9, .col-8, .col-7, .col-6, .col-5, .col-4, .col-3, .col-2, .col-1{
- position:relative;
- width:100%;
- padding-right:15px;
- padding-left:15px;
-}
-
-.col{
- flex-basis:0;
- flex-grow:1;
- max-width:100%;
-}
-
-.row-cols-1 > *{
- flex:0 0 100%;
- max-width:100%;
-}
-
-.row-cols-2 > *{
- flex:0 0 50%;
- max-width:50%;
-}
-
-.row-cols-3 > *{
- flex:0 0 33.3333333333%;
- max-width:33.3333333333%;
-}
-
-.row-cols-4 > *{
- flex:0 0 25%;
- max-width:25%;
-}
-
-.row-cols-5 > *{
- flex:0 0 20%;
- max-width:20%;
-}
-
-.row-cols-6 > *{
- flex:0 0 16.6666666667%;
- max-width:16.6666666667%;
-}
-
-.col-auto{
- flex:0 0 auto;
- width:auto;
- max-width:100%;
-}
-
-.col-1{
- flex:0 0 8.33333333%;
- max-width:8.33333333%;
-}
-
-.col-2{
- flex:0 0 16.66666667%;
- max-width:16.66666667%;
-}
-
-.col-3{
- flex:0 0 25%;
- max-width:25%;
-}
-
-.col-4{
- flex:0 0 33.33333333%;
- max-width:33.33333333%;
-}
-
-.col-5{
- flex:0 0 41.66666667%;
- max-width:41.66666667%;
-}
-
-.col-6{
- flex:0 0 50%;
- max-width:50%;
-}
-
-.col-7{
- flex:0 0 58.33333333%;
- max-width:58.33333333%;
-}
-
-.col-8{
- flex:0 0 66.66666667%;
- max-width:66.66666667%;
-}
-
-.col-9{
- flex:0 0 75%;
- max-width:75%;
-}
-
-.col-10{
- flex:0 0 83.33333333%;
- max-width:83.33333333%;
-}
-
-.col-11{
- flex:0 0 91.66666667%;
- max-width:91.66666667%;
-}
-
-.col-12{
- flex:0 0 100%;
- max-width:100%;
-}
-
-.order-first{
- order:-1;
-}
-
-.order-last{
- order:13;
-}
-
-.order-0{
- order:0;
-}
-
-.order-1{
- order:1;
-}
-
-.order-2{
- order:2;
-}
-
-.order-3{
- order:3;
-}
-
-.order-4{
- order:4;
-}
-
-.order-5{
- order:5;
-}
-
-.order-6{
- order:6;
-}
-
-.order-7{
- order:7;
-}
-
-.order-8{
- order:8;
-}
-
-.order-9{
- order:9;
-}
-
-.order-10{
- order:10;
-}
-
-.order-11{
- order:11;
-}
-
-.order-12{
- order:12;
-}
-
-.offset-1{
- margin-left:8.33333333%;
-}
-
-.offset-2{
- margin-left:16.66666667%;
-}
-
-.offset-3{
- margin-left:25%;
-}
-
-.offset-4{
- margin-left:33.33333333%;
-}
-
-.offset-5{
- margin-left:41.66666667%;
-}
-
-.offset-6{
- margin-left:50%;
-}
-
-.offset-7{
- margin-left:58.33333333%;
-}
-
-.offset-8{
- margin-left:66.66666667%;
-}
-
-.offset-9{
- margin-left:75%;
-}
-
-.offset-10{
- margin-left:83.33333333%;
-}
-
-.offset-11{
- margin-left:91.66666667%;
-}
-
-@media (min-width: 576px){
- .col-sm{
- flex-basis:0;
- flex-grow:1;
- max-width:100%;
- }
-
- .row-cols-sm-1 > *{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .row-cols-sm-2 > *{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .row-cols-sm-3 > *{
- flex:0 0 33.3333333333%;
- max-width:33.3333333333%;
- }
-
- .row-cols-sm-4 > *{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .row-cols-sm-5 > *{
- flex:0 0 20%;
- max-width:20%;
- }
-
- .row-cols-sm-6 > *{
- flex:0 0 16.6666666667%;
- max-width:16.6666666667%;
- }
-
- .col-sm-auto{
- flex:0 0 auto;
- width:auto;
- max-width:100%;
- }
-
- .col-sm-1{
- flex:0 0 8.33333333%;
- max-width:8.33333333%;
- }
-
- .col-sm-2{
- flex:0 0 16.66666667%;
- max-width:16.66666667%;
- }
-
- .col-sm-3{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .col-sm-4{
- flex:0 0 33.33333333%;
- max-width:33.33333333%;
- }
-
- .col-sm-5{
- flex:0 0 41.66666667%;
- max-width:41.66666667%;
- }
-
- .col-sm-6{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .col-sm-7{
- flex:0 0 58.33333333%;
- max-width:58.33333333%;
- }
-
- .col-sm-8{
- flex:0 0 66.66666667%;
- max-width:66.66666667%;
- }
-
- .col-sm-9{
- flex:0 0 75%;
- max-width:75%;
- }
-
- .col-sm-10{
- flex:0 0 83.33333333%;
- max-width:83.33333333%;
- }
-
- .col-sm-11{
- flex:0 0 91.66666667%;
- max-width:91.66666667%;
- }
-
- .col-sm-12{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .order-sm-first{
- order:-1;
- }
-
- .order-sm-last{
- order:13;
- }
-
- .order-sm-0{
- order:0;
- }
-
- .order-sm-1{
- order:1;
- }
-
- .order-sm-2{
- order:2;
- }
-
- .order-sm-3{
- order:3;
- }
-
- .order-sm-4{
- order:4;
- }
-
- .order-sm-5{
- order:5;
- }
-
- .order-sm-6{
- order:6;
- }
-
- .order-sm-7{
- order:7;
- }
-
- .order-sm-8{
- order:8;
- }
-
- .order-sm-9{
- order:9;
- }
-
- .order-sm-10{
- order:10;
- }
-
- .order-sm-11{
- order:11;
- }
-
- .order-sm-12{
- order:12;
- }
-
- .offset-sm-0{
- margin-left:0;
- }
-
- .offset-sm-1{
- margin-left:8.33333333%;
- }
-
- .offset-sm-2{
- margin-left:16.66666667%;
- }
-
- .offset-sm-3{
- margin-left:25%;
- }
-
- .offset-sm-4{
- margin-left:33.33333333%;
- }
-
- .offset-sm-5{
- margin-left:41.66666667%;
- }
-
- .offset-sm-6{
- margin-left:50%;
- }
-
- .offset-sm-7{
- margin-left:58.33333333%;
- }
-
- .offset-sm-8{
- margin-left:66.66666667%;
- }
-
- .offset-sm-9{
- margin-left:75%;
- }
-
- .offset-sm-10{
- margin-left:83.33333333%;
- }
-
- .offset-sm-11{
- margin-left:91.66666667%;
- }
-}
-@media (min-width: 768px){
- .col-md{
- flex-basis:0;
- flex-grow:1;
- max-width:100%;
- }
-
- .row-cols-md-1 > *{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .row-cols-md-2 > *{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .row-cols-md-3 > *{
- flex:0 0 33.3333333333%;
- max-width:33.3333333333%;
- }
-
- .row-cols-md-4 > *{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .row-cols-md-5 > *{
- flex:0 0 20%;
- max-width:20%;
- }
-
- .row-cols-md-6 > *{
- flex:0 0 16.6666666667%;
- max-width:16.6666666667%;
- }
-
- .col-md-auto{
- flex:0 0 auto;
- width:auto;
- max-width:100%;
- }
-
- .col-md-1{
- flex:0 0 8.33333333%;
- max-width:8.33333333%;
- }
-
- .col-md-2{
- flex:0 0 16.66666667%;
- max-width:16.66666667%;
- }
-
- .col-md-3{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .col-md-4{
- flex:0 0 33.33333333%;
- max-width:33.33333333%;
- }
-
- .col-md-5{
- flex:0 0 41.66666667%;
- max-width:41.66666667%;
- }
-
- .col-md-6{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .col-md-7{
- flex:0 0 58.33333333%;
- max-width:58.33333333%;
- }
-
- .col-md-8{
- flex:0 0 66.66666667%;
- max-width:66.66666667%;
- }
-
- .col-md-9{
- flex:0 0 75%;
- max-width:75%;
- }
-
- .col-md-10{
- flex:0 0 83.33333333%;
- max-width:83.33333333%;
- }
-
- .col-md-11{
- flex:0 0 91.66666667%;
- max-width:91.66666667%;
- }
-
- .col-md-12{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .order-md-first{
- order:-1;
- }
-
- .order-md-last{
- order:13;
- }
-
- .order-md-0{
- order:0;
- }
-
- .order-md-1{
- order:1;
- }
-
- .order-md-2{
- order:2;
- }
-
- .order-md-3{
- order:3;
- }
-
- .order-md-4{
- order:4;
- }
-
- .order-md-5{
- order:5;
- }
-
- .order-md-6{
- order:6;
- }
-
- .order-md-7{
- order:7;
- }
-
- .order-md-8{
- order:8;
- }
-
- .order-md-9{
- order:9;
- }
-
- .order-md-10{
- order:10;
- }
-
- .order-md-11{
- order:11;
- }
-
- .order-md-12{
- order:12;
- }
-
- .offset-md-0{
- margin-left:0;
- }
-
- .offset-md-1{
- margin-left:8.33333333%;
- }
-
- .offset-md-2{
- margin-left:16.66666667%;
- }
-
- .offset-md-3{
- margin-left:25%;
- }
-
- .offset-md-4{
- margin-left:33.33333333%;
- }
-
- .offset-md-5{
- margin-left:41.66666667%;
- }
-
- .offset-md-6{
- margin-left:50%;
- }
-
- .offset-md-7{
- margin-left:58.33333333%;
- }
-
- .offset-md-8{
- margin-left:66.66666667%;
- }
-
- .offset-md-9{
- margin-left:75%;
- }
-
- .offset-md-10{
- margin-left:83.33333333%;
- }
-
- .offset-md-11{
- margin-left:91.66666667%;
- }
-}
-@media (min-width: 992px){
- .col-lg{
- flex-basis:0;
- flex-grow:1;
- max-width:100%;
- }
-
- .row-cols-lg-1 > *{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .row-cols-lg-2 > *{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .row-cols-lg-3 > *{
- flex:0 0 33.3333333333%;
- max-width:33.3333333333%;
- }
-
- .row-cols-lg-4 > *{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .row-cols-lg-5 > *{
- flex:0 0 20%;
- max-width:20%;
- }
-
- .row-cols-lg-6 > *{
- flex:0 0 16.6666666667%;
- max-width:16.6666666667%;
- }
-
- .col-lg-auto{
- flex:0 0 auto;
- width:auto;
- max-width:100%;
- }
-
- .col-lg-1{
- flex:0 0 8.33333333%;
- max-width:8.33333333%;
- }
-
- .col-lg-2{
- flex:0 0 16.66666667%;
- max-width:16.66666667%;
- }
-
- .col-lg-3{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .col-lg-4{
- flex:0 0 33.33333333%;
- max-width:33.33333333%;
- }
-
- .col-lg-5{
- flex:0 0 41.66666667%;
- max-width:41.66666667%;
- }
-
- .col-lg-6{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .col-lg-7{
- flex:0 0 58.33333333%;
- max-width:58.33333333%;
- }
-
- .col-lg-8{
- flex:0 0 66.66666667%;
- max-width:66.66666667%;
- }
-
- .col-lg-9{
- flex:0 0 75%;
- max-width:75%;
- }
-
- .col-lg-10{
- flex:0 0 83.33333333%;
- max-width:83.33333333%;
- }
-
- .col-lg-11{
- flex:0 0 91.66666667%;
- max-width:91.66666667%;
- }
-
- .col-lg-12{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .order-lg-first{
- order:-1;
- }
-
- .order-lg-last{
- order:13;
- }
-
- .order-lg-0{
- order:0;
- }
-
- .order-lg-1{
- order:1;
- }
-
- .order-lg-2{
- order:2;
- }
-
- .order-lg-3{
- order:3;
- }
-
- .order-lg-4{
- order:4;
- }
-
- .order-lg-5{
- order:5;
- }
-
- .order-lg-6{
- order:6;
- }
-
- .order-lg-7{
- order:7;
- }
-
- .order-lg-8{
- order:8;
- }
-
- .order-lg-9{
- order:9;
- }
-
- .order-lg-10{
- order:10;
- }
-
- .order-lg-11{
- order:11;
- }
-
- .order-lg-12{
- order:12;
- }
-
- .offset-lg-0{
- margin-left:0;
- }
-
- .offset-lg-1{
- margin-left:8.33333333%;
- }
-
- .offset-lg-2{
- margin-left:16.66666667%;
- }
-
- .offset-lg-3{
- margin-left:25%;
- }
-
- .offset-lg-4{
- margin-left:33.33333333%;
- }
-
- .offset-lg-5{
- margin-left:41.66666667%;
- }
-
- .offset-lg-6{
- margin-left:50%;
- }
-
- .offset-lg-7{
- margin-left:58.33333333%;
- }
-
- .offset-lg-8{
- margin-left:66.66666667%;
- }
-
- .offset-lg-9{
- margin-left:75%;
- }
-
- .offset-lg-10{
- margin-left:83.33333333%;
- }
-
- .offset-lg-11{
- margin-left:91.66666667%;
- }
-}
-@media (min-width: 1200px){
- .col-xl{
- flex-basis:0;
- flex-grow:1;
- max-width:100%;
- }
-
- .row-cols-xl-1 > *{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .row-cols-xl-2 > *{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .row-cols-xl-3 > *{
- flex:0 0 33.3333333333%;
- max-width:33.3333333333%;
- }
-
- .row-cols-xl-4 > *{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .row-cols-xl-5 > *{
- flex:0 0 20%;
- max-width:20%;
- }
-
- .row-cols-xl-6 > *{
- flex:0 0 16.6666666667%;
- max-width:16.6666666667%;
- }
-
- .col-xl-auto{
- flex:0 0 auto;
- width:auto;
- max-width:100%;
- }
-
- .col-xl-1{
- flex:0 0 8.33333333%;
- max-width:8.33333333%;
- }
-
- .col-xl-2{
- flex:0 0 16.66666667%;
- max-width:16.66666667%;
- }
-
- .col-xl-3{
- flex:0 0 25%;
- max-width:25%;
- }
-
- .col-xl-4{
- flex:0 0 33.33333333%;
- max-width:33.33333333%;
- }
-
- .col-xl-5{
- flex:0 0 41.66666667%;
- max-width:41.66666667%;
- }
-
- .col-xl-6{
- flex:0 0 50%;
- max-width:50%;
- }
-
- .col-xl-7{
- flex:0 0 58.33333333%;
- max-width:58.33333333%;
- }
-
- .col-xl-8{
- flex:0 0 66.66666667%;
- max-width:66.66666667%;
- }
-
- .col-xl-9{
- flex:0 0 75%;
- max-width:75%;
- }
-
- .col-xl-10{
- flex:0 0 83.33333333%;
- max-width:83.33333333%;
- }
-
- .col-xl-11{
- flex:0 0 91.66666667%;
- max-width:91.66666667%;
- }
-
- .col-xl-12{
- flex:0 0 100%;
- max-width:100%;
- }
-
- .order-xl-first{
- order:-1;
- }
-
- .order-xl-last{
- order:13;
- }
-
- .order-xl-0{
- order:0;
- }
-
- .order-xl-1{
- order:1;
- }
-
- .order-xl-2{
- order:2;
- }
-
- .order-xl-3{
- order:3;
- }
-
- .order-xl-4{
- order:4;
- }
-
- .order-xl-5{
- order:5;
- }
-
- .order-xl-6{
- order:6;
- }
-
- .order-xl-7{
- order:7;
- }
-
- .order-xl-8{
- order:8;
- }
-
- .order-xl-9{
- order:9;
- }
-
- .order-xl-10{
- order:10;
- }
-
- .order-xl-11{
- order:11;
- }
-
- .order-xl-12{
- order:12;
- }
-
- .offset-xl-0{
- margin-left:0;
- }
-
- .offset-xl-1{
- margin-left:8.33333333%;
- }
-
- .offset-xl-2{
- margin-left:16.66666667%;
- }
-
- .offset-xl-3{
- margin-left:25%;
- }
-
- .offset-xl-4{
- margin-left:33.33333333%;
- }
-
- .offset-xl-5{
- margin-left:41.66666667%;
- }
-
- .offset-xl-6{
- margin-left:50%;
- }
-
- .offset-xl-7{
- margin-left:58.33333333%;
- }
-
- .offset-xl-8{
- margin-left:66.66666667%;
- }
-
- .offset-xl-9{
- margin-left:75%;
- }
-
- .offset-xl-10{
- margin-left:83.33333333%;
- }
-
- .offset-xl-11{
- margin-left:91.66666667%;
- }
-}
-.table{
- width:100%;
- margin-bottom:1rem;
- color:#212529;
-}
-.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-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-borderless th,
-.table-borderless td,
-.table-borderless thead th,
-.table-borderless tbody + tbody{
- border:0;
-}
-
-.table-striped tbody tr:nth-of-type(odd){
- background-color:rgba(0, 0, 0, 0.05);
-}
-
-.table-hover tbody tr:hover{
- color:#212529;
- background-color:rgba(0, 0, 0, 0.075);
-}
-
-.table-primary,
-.table-primary > th,
-.table-primary > td{
- background-color:#c6e0f5;
-}
-.table-primary th,
-.table-primary td,
-.table-primary thead th,
-.table-primary tbody + tbody{
- border-color:#95c5ed;
-}
-
-.table-hover .table-primary:hover{
- background-color:#b0d4f1;
-}
-.table-hover .table-primary:hover > td,
-.table-hover .table-primary:hover > th{
- background-color:#b0d4f1;
-}
-
-.table-secondary,
-.table-secondary > th,
-.table-secondary > td{
- background-color:#d6d8db;
-}
-.table-secondary th,
-.table-secondary td,
-.table-secondary thead th,
-.table-secondary tbody + tbody{
- border-color:#b3b7bb;
-}
-
-.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:#c7eed8;
-}
-.table-success th,
-.table-success td,
-.table-success thead th,
-.table-success tbody + tbody{
- border-color:#98dfb6;
-}
-
-.table-hover .table-success:hover{
- background-color:#b3e8ca;
-}
-.table-hover .table-success:hover > td,
-.table-hover .table-success:hover > th{
- background-color:#b3e8ca;
-}
-
-.table-info,
-.table-info > th,
-.table-info > td{
- background-color:#d6e9f9;
-}
-.table-info th,
-.table-info td,
-.table-info thead th,
-.table-info tbody + tbody{
- border-color:#b3d7f5;
-}
-
-.table-hover .table-info:hover{
- background-color:#c0ddf6;
-}
-.table-hover .table-info:hover > td,
-.table-hover .table-info:hover > th{
- background-color:#c0ddf6;
-}
-
-.table-warning,
-.table-warning > th,
-.table-warning > td{
- background-color:#fffacc;
-}
-.table-warning th,
-.table-warning td,
-.table-warning thead th,
-.table-warning tbody + tbody{
- border-color:#fff6a1;
-}
-
-.table-hover .table-warning:hover{
- background-color:#fff8b3;
-}
-.table-hover .table-warning:hover > td,
-.table-hover .table-warning:hover > th{
- background-color:#fff8b3;
-}
-
-.table-danger,
-.table-danger > th,
-.table-danger > td{
- background-color:#f7c6c5;
-}
-.table-danger th,
-.table-danger td,
-.table-danger thead th,
-.table-danger tbody + tbody{
- border-color:#f09593;
-}
-
-.table-hover .table-danger:hover{
- background-color:#f4b0af;
-}
-.table-hover .table-danger:hover > td,
-.table-hover .table-danger:hover > th{
- background-color:#f4b0af;
-}
-
-.table-light,
-.table-light > th,
-.table-light > td{
- background-color:#fdfdfe;
-}
-.table-light th,
-.table-light td,
-.table-light thead th,
-.table-light tbody + tbody{
- border-color:#fbfcfc;
-}
-
-.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-dark th,
-.table-dark td,
-.table-dark thead th,
-.table-dark tbody + tbody{
- border-color:#95999c;
-}
-
-.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:#343a40;
- border-color:#454d55;
-}
-.table .thead-light th{
- color:#495057;
- background-color:#e9ecef;
- border-color:#dee2e6;
-}
-
-.table-dark{
- color:#fff;
- background-color:#343a40;
-}
-.table-dark th,
-.table-dark td,
-.table-dark thead th{
- border-color:#454d55;
-}
-.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{
- color:#fff;
- 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;
- }
- .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;
- }
- .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;
- }
- .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;
- }
- .table-responsive-xl > .table-bordered{
- border:0;
- }
-}
-.table-responsive{
- display:block;
- width:100%;
- overflow-x:auto;
- -webkit-overflow-scrolling:touch;
-}
-.table-responsive > .table-bordered{
- border:0;
-}
-
-.form-control{
- display:block;
- width:100%;
- height:calc(1.6em + 0.75rem + 2px);
- padding:0.375rem 0.75rem;
- font-size:0.9rem;
- font-weight:400;
- line-height:1.6;
- color:#495057;
- background-color:#fff;
- background-clip:padding-box;
- border:1px solid #ced4da;
- border-radius:0.25rem;
- transition:border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-@media (prefers-reduced-motion: reduce){
- .form-control{
- transition:none;
- }
-}
-.form-control::-ms-expand{
- background-color:transparent;
- border:0;
-}
-.form-control:focus{
- color:#495057;
- background-color:#fff;
- border-color:#a1cbef;
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.form-control::-moz-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;
-}
-
-input[type=date].form-control,
-input[type=time].form-control,
-input[type=datetime-local].form-control,
-input[type=month].form-control{
- -webkit-appearance:none;
- -moz-appearance:none;
- appearance:none;
-}
-
-select.form-control:-moz-focusring{
- color:transparent;
- text-shadow:0 0 0 #495057;
-}
-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.6;
-}
-
-.col-form-label-lg{
- padding-top:calc(0.5rem + 1px);
- padding-bottom:calc(0.5rem + 1px);
- font-size:1.125rem;
- line-height:1.5;
-}
-
-.col-form-label-sm{
- padding-top:calc(0.25rem + 1px);
- padding-bottom:calc(0.25rem + 1px);
- font-size:0.7875rem;
- line-height:1.5;
-}
-
-.form-control-plaintext{
- display:block;
- width:100%;
- padding:0.375rem 0;
- margin-bottom:0;
- font-size:0.9rem;
- line-height:1.6;
- color:#212529;
- background-color:transparent;
- border:solid transparent;
- border-width:1px 0;
-}
-.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg{
- padding-right:0;
- padding-left:0;
-}
-
-.form-control-sm{
- height:calc(1.5em + 0.5rem + 2px);
- padding:0.25rem 0.5rem;
- font-size:0.7875rem;
- line-height:1.5;
- border-radius:0.2rem;
-}
-
-.form-control-lg{
- height:calc(1.5em + 1rem + 2px);
- padding:0.5rem 1rem;
- font-size:1.125rem;
- line-height:1.5;
- border-radius:0.3rem;
-}
-
-select.form-control[size], select.form-control[multiple]{
- height:auto;
-}
-
-textarea.form-control{
- height:auto;
-}
-
-.form-group{
- margin-bottom:1rem;
-}
-
-.form-text{
- display:block;
- margin-top:0.25rem;
-}
-
-.form-row{
- display:flex;
- 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, .form-check-input:disabled ~ .form-check-label{
- color:#6c757d;
-}
-
-.form-check-label{
- margin-bottom:0;
-}
-
-.form-check-inline{
- display:inline-flex;
- 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:#38c172;
-}
-
-.valid-tooltip{
- position:absolute;
- top:100%;
- left:0;
- z-index:5;
- display:none;
- max-width:100%;
- padding:0.25rem 0.5rem;
- margin-top:0.1rem;
- font-size:0.7875rem;
- line-height:1.6;
- color:#fff;
- background-color:rgba(56, 193, 114, 0.9);
- border-radius:0.25rem;
-}
-.form-row > .col > .valid-tooltip, .form-row > [class*=col-] > .valid-tooltip{
- left:5px;
-}
-
-.was-validated :valid ~ .valid-feedback,
-.was-validated :valid ~ .valid-tooltip,
-.is-valid ~ .valid-feedback,
-.is-valid ~ .valid-tooltip{
- display:block;
-}
-
-.was-validated .form-control:valid, .form-control.is-valid{
- border-color:#38c172;
- padding-right:calc(1.6em + 0.75rem) !important;
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2338c172' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");
- background-repeat:no-repeat;
- background-position:right calc(0.4em + 0.1875rem) center;
- background-size:calc(0.8em + 0.375rem) calc(0.8em + 0.375rem);
-}
-.was-validated .form-control:valid:focus, .form-control.is-valid:focus{
- border-color:#38c172;
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.25);
-}
-
-.was-validated select.form-control:valid, select.form-control.is-valid{
- padding-right:3rem !important;
- background-position:right 1.5rem center;
-}
-
-.was-validated textarea.form-control:valid, textarea.form-control.is-valid{
- padding-right:calc(1.6em + 0.75rem);
- background-position:top calc(0.4em + 0.1875rem) right calc(0.4em + 0.1875rem);
-}
-
-.was-validated .custom-select:valid, .custom-select.is-valid{
- border-color:#38c172;
- padding-right:calc(0.75em + 2.3125rem) !important;
- background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%2338c172' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") center right 1.75rem/calc(0.8em + 0.375rem) calc(0.8em + 0.375rem) no-repeat;
-}
-.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus{
- border-color:#38c172;
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.25);
-}
-
-.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label{
- color:#38c172;
-}
-.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:#38c172;
-}
-.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before{
- border-color:#38c172;
-}
-.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before{
- border-color:#5cd08d;
- background-color:#5cd08d;
-}
-.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before{
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.25);
-}
-.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before{
- border-color:#38c172;
-}
-
-.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label{
- border-color:#38c172;
-}
-.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label{
- border-color:#38c172;
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.25);
-}
-
-.invalid-feedback{
- display:none;
- width:100%;
- margin-top:0.25rem;
- font-size:80%;
- color:#e3342f;
-}
-
-.invalid-tooltip{
- position:absolute;
- top:100%;
- left:0;
- z-index:5;
- display:none;
- max-width:100%;
- padding:0.25rem 0.5rem;
- margin-top:0.1rem;
- font-size:0.7875rem;
- line-height:1.6;
- color:#fff;
- background-color:rgba(227, 52, 47, 0.9);
- border-radius:0.25rem;
-}
-.form-row > .col > .invalid-tooltip, .form-row > [class*=col-] > .invalid-tooltip{
- left:5px;
-}
-
-.was-validated :invalid ~ .invalid-feedback,
-.was-validated :invalid ~ .invalid-tooltip,
-.is-invalid ~ .invalid-feedback,
-.is-invalid ~ .invalid-tooltip{
- display:block;
-}
-
-.was-validated .form-control:invalid, .form-control.is-invalid{
- border-color:#e3342f;
- padding-right:calc(1.6em + 0.75rem) !important;
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e3342f' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e3342f' stroke='none'/%3e%3c/svg%3e");
- background-repeat:no-repeat;
- background-position:right calc(0.4em + 0.1875rem) center;
- background-size:calc(0.8em + 0.375rem) calc(0.8em + 0.375rem);
-}
-.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus{
- border-color:#e3342f;
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.25);
-}
-
-.was-validated select.form-control:invalid, select.form-control.is-invalid{
- padding-right:3rem !important;
- background-position:right 1.5rem center;
-}
-
-.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid{
- padding-right:calc(1.6em + 0.75rem);
- background-position:top calc(0.4em + 0.1875rem) right calc(0.4em + 0.1875rem);
-}
-
-.was-validated .custom-select:invalid, .custom-select.is-invalid{
- border-color:#e3342f;
- padding-right:calc(0.75em + 2.3125rem) !important;
- background:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat, #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e3342f' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e3342f' stroke='none'/%3e%3c/svg%3e") center right 1.75rem/calc(0.8em + 0.375rem) calc(0.8em + 0.375rem) no-repeat;
-}
-.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus{
- border-color:#e3342f;
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.25);
-}
-
-.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label{
- color:#e3342f;
-}
-.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:#e3342f;
-}
-.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before{
- border-color:#e3342f;
-}
-.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before{
- border-color:#e9605c;
- background-color:#e9605c;
-}
-.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before{
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.25);
-}
-.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before{
- border-color:#e3342f;
-}
-
-.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label{
- border-color:#e3342f;
-}
-.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label{
- border-color:#e3342f;
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.25);
-}
-
-.form-inline{
- display:flex;
- flex-flow:row wrap;
- align-items:center;
-}
-.form-inline .form-check{
- width:100%;
-}
-@media (min-width: 576px){
- .form-inline label{
- display:flex;
- align-items:center;
- justify-content:center;
- margin-bottom:0;
- }
- .form-inline .form-group{
- display:flex;
- flex:0 0 auto;
- flex-flow:row wrap;
- 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,
-.form-inline .custom-select{
- width:auto;
- }
- .form-inline .form-check{
- display:flex;
- align-items:center;
- justify-content:center;
- width:auto;
- padding-left:0;
- }
- .form-inline .form-check-input{
- position:relative;
- flex-shrink:0;
- margin-top:0;
- margin-right:0.25rem;
- margin-left:0;
- }
- .form-inline .custom-control{
- align-items:center;
- justify-content:center;
- }
- .form-inline .custom-control-label{
- margin-bottom:0;
- }
-}
-
-.btn{
- display:inline-block;
- font-weight:400;
- color:#212529;
- text-align:center;
- vertical-align:middle;
- -webkit-user-select:none;
- -moz-user-select:none;
- -ms-user-select:none;
- user-select:none;
- background-color:transparent;
- border:1px solid transparent;
- padding:0.375rem 0.75rem;
- font-size:0.9rem;
- line-height:1.6;
- border-radius:0.25rem;
- 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;
-}
-@media (prefers-reduced-motion: reduce){
- .btn{
- transition:none;
- }
-}
-.btn:hover{
- color:#212529;
- text-decoration:none;
-}
-.btn:focus, .btn.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.btn.disabled, .btn:disabled{
- opacity:0.65;
-}
-.btn:not(:disabled):not(.disabled){
- cursor:pointer;
-}
-a.btn.disabled,
-fieldset:disabled a.btn{
- pointer-events:none;
-}
-
-.btn-primary{
- color:#fff;
- background-color:#3490dc;
- border-color:#3490dc;
-}
-.btn-primary:hover{
- color:#fff;
- background-color:#227dc7;
- border-color:#2176bd;
-}
-.btn-primary:focus, .btn-primary.focus{
- color:#fff;
- background-color:#227dc7;
- border-color:#2176bd;
- box-shadow:0 0 0 0.2rem rgba(82, 161, 225, 0.5);
-}
-.btn-primary.disabled, .btn-primary:disabled{
- color:#fff;
- background-color:#3490dc;
- border-color:#3490dc;
-}
-.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, .show > .btn-primary.dropdown-toggle{
- color:#fff;
- background-color:#2176bd;
- border-color:#1f6fb2;
-}
-.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, .show > .btn-primary.dropdown-toggle:focus{
- box-shadow:0 0 0 0.2rem rgba(82, 161, 225, 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{
- color:#fff;
- background-color:#5a6268;
- border-color:#545b62;
- box-shadow:0 0 0 0.2rem rgba(130, 138, 145, 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{
- box-shadow:0 0 0 0.2rem rgba(130, 138, 145, 0.5);
-}
-
-.btn-success{
- color:#fff;
- background-color:#38c172;
- border-color:#38c172;
-}
-.btn-success:hover{
- color:#fff;
- background-color:#2fa360;
- border-color:#2d995b;
-}
-.btn-success:focus, .btn-success.focus{
- color:#fff;
- background-color:#2fa360;
- border-color:#2d995b;
- box-shadow:0 0 0 0.2rem rgba(86, 202, 135, 0.5);
-}
-.btn-success.disabled, .btn-success:disabled{
- color:#fff;
- background-color:#38c172;
- border-color:#38c172;
-}
-.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, .show > .btn-success.dropdown-toggle{
- color:#fff;
- background-color:#2d995b;
- border-color:#2a9055;
-}
-.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, .show > .btn-success.dropdown-toggle:focus{
- box-shadow:0 0 0 0.2rem rgba(86, 202, 135, 0.5);
-}
-
-.btn-info{
- color:#212529;
- background-color:#6cb2eb;
- border-color:#6cb2eb;
-}
-.btn-info:hover{
- color:#fff;
- background-color:#4aa0e6;
- border-color:#3f9ae5;
-}
-.btn-info:focus, .btn-info.focus{
- color:#fff;
- background-color:#4aa0e6;
- border-color:#3f9ae5;
- box-shadow:0 0 0 0.2rem rgba(97, 157, 206, 0.5);
-}
-.btn-info.disabled, .btn-info:disabled{
- color:#212529;
- background-color:#6cb2eb;
- border-color:#6cb2eb;
-}
-.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, .show > .btn-info.dropdown-toggle{
- color:#fff;
- background-color:#3f9ae5;
- border-color:#3495e3;
-}
-.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, .show > .btn-info.dropdown-toggle:focus{
- box-shadow:0 0 0 0.2rem rgba(97, 157, 206, 0.5);
-}
-
-.btn-warning{
- color:#212529;
- background-color:#ffed4a;
- border-color:#ffed4a;
-}
-.btn-warning:hover{
- color:#212529;
- background-color:#ffe924;
- border-color:#ffe817;
-}
-.btn-warning:focus, .btn-warning.focus{
- color:#212529;
- background-color:#ffe924;
- border-color:#ffe817;
- box-shadow:0 0 0 0.2rem rgba(222, 207, 69, 0.5);
-}
-.btn-warning.disabled, .btn-warning:disabled{
- color:#212529;
- background-color:#ffed4a;
- border-color:#ffed4a;
-}
-.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, .show > .btn-warning.dropdown-toggle{
- color:#212529;
- background-color:#ffe817;
- border-color:#ffe70a;
-}
-.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, .show > .btn-warning.dropdown-toggle:focus{
- box-shadow:0 0 0 0.2rem rgba(222, 207, 69, 0.5);
-}
-
-.btn-danger{
- color:#fff;
- background-color:#e3342f;
- border-color:#e3342f;
-}
-.btn-danger:hover{
- color:#fff;
- background-color:#d0211c;
- border-color:#c51f1a;
-}
-.btn-danger:focus, .btn-danger.focus{
- color:#fff;
- background-color:#d0211c;
- border-color:#c51f1a;
- box-shadow:0 0 0 0.2rem rgba(231, 82, 78, 0.5);
-}
-.btn-danger.disabled, .btn-danger:disabled{
- color:#fff;
- background-color:#e3342f;
- border-color:#e3342f;
-}
-.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, .show > .btn-danger.dropdown-toggle{
- color:#fff;
- background-color:#c51f1a;
- border-color:#b91d19;
-}
-.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, .show > .btn-danger.dropdown-toggle:focus{
- box-shadow:0 0 0 0.2rem rgba(231, 82, 78, 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{
- color:#212529;
- background-color:#e2e6ea;
- border-color:#dae0e5;
- box-shadow:0 0 0 0.2rem rgba(216, 217, 219, 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{
- box-shadow:0 0 0 0.2rem rgba(216, 217, 219, 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{
- color:#fff;
- background-color:#23272b;
- border-color:#1d2124;
- box-shadow:0 0 0 0.2rem rgba(82, 88, 93, 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{
- box-shadow:0 0 0 0.2rem rgba(82, 88, 93, 0.5);
-}
-
-.btn-outline-primary{
- color:#3490dc;
- border-color:#3490dc;
-}
-.btn-outline-primary:hover{
- color:#fff;
- background-color:#3490dc;
- border-color:#3490dc;
-}
-.btn-outline-primary:focus, .btn-outline-primary.focus{
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.5);
-}
-.btn-outline-primary.disabled, .btn-outline-primary:disabled{
- color:#3490dc;
- 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:#3490dc;
- border-color:#3490dc;
-}
-.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{
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.5);
-}
-
-.btn-outline-secondary{
- color:#6c757d;
- border-color:#6c757d;
-}
-.btn-outline-secondary:hover{
- color:#fff;
- background-color:#6c757d;
- border-color:#6c757d;
-}
-.btn-outline-secondary:focus, .btn-outline-secondary.focus{
- 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{
- box-shadow:0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.btn-outline-success{
- color:#38c172;
- border-color:#38c172;
-}
-.btn-outline-success:hover{
- color:#fff;
- background-color:#38c172;
- border-color:#38c172;
-}
-.btn-outline-success:focus, .btn-outline-success.focus{
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.5);
-}
-.btn-outline-success.disabled, .btn-outline-success:disabled{
- color:#38c172;
- 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:#38c172;
- border-color:#38c172;
-}
-.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{
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.5);
-}
-
-.btn-outline-info{
- color:#6cb2eb;
- border-color:#6cb2eb;
-}
-.btn-outline-info:hover{
- color:#212529;
- background-color:#6cb2eb;
- border-color:#6cb2eb;
-}
-.btn-outline-info:focus, .btn-outline-info.focus{
- box-shadow:0 0 0 0.2rem rgba(108, 178, 235, 0.5);
-}
-.btn-outline-info.disabled, .btn-outline-info:disabled{
- color:#6cb2eb;
- 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:#212529;
- background-color:#6cb2eb;
- border-color:#6cb2eb;
-}
-.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{
- box-shadow:0 0 0 0.2rem rgba(108, 178, 235, 0.5);
-}
-
-.btn-outline-warning{
- color:#ffed4a;
- border-color:#ffed4a;
-}
-.btn-outline-warning:hover{
- color:#212529;
- background-color:#ffed4a;
- border-color:#ffed4a;
-}
-.btn-outline-warning:focus, .btn-outline-warning.focus{
- box-shadow:0 0 0 0.2rem rgba(255, 237, 74, 0.5);
-}
-.btn-outline-warning.disabled, .btn-outline-warning:disabled{
- color:#ffed4a;
- 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:#ffed4a;
- border-color:#ffed4a;
-}
-.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{
- box-shadow:0 0 0 0.2rem rgba(255, 237, 74, 0.5);
-}
-
-.btn-outline-danger{
- color:#e3342f;
- border-color:#e3342f;
-}
-.btn-outline-danger:hover{
- color:#fff;
- background-color:#e3342f;
- border-color:#e3342f;
-}
-.btn-outline-danger:focus, .btn-outline-danger.focus{
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.5);
-}
-.btn-outline-danger.disabled, .btn-outline-danger:disabled{
- color:#e3342f;
- 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:#e3342f;
- border-color:#e3342f;
-}
-.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{
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.5);
-}
-
-.btn-outline-light{
- color:#f8f9fa;
- border-color:#f8f9fa;
-}
-.btn-outline-light:hover{
- color:#212529;
- background-color:#f8f9fa;
- border-color:#f8f9fa;
-}
-.btn-outline-light:focus, .btn-outline-light.focus{
- 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{
- box-shadow:0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.btn-outline-dark{
- color:#343a40;
- border-color:#343a40;
-}
-.btn-outline-dark:hover{
- color:#fff;
- background-color:#343a40;
- border-color:#343a40;
-}
-.btn-outline-dark:focus, .btn-outline-dark.focus{
- 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{
- box-shadow:0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.btn-link{
- font-weight:400;
- color:#3490dc;
- text-decoration:none;
-}
-.btn-link:hover{
- color:#1d68a7;
- text-decoration:underline;
-}
-.btn-link:focus, .btn-link.focus{
- text-decoration:underline;
-}
-.btn-link:disabled, .btn-link.disabled{
- color:#6c757d;
- pointer-events:none;
-}
-
-.btn-lg, .btn-group-lg > .btn{
- padding:0.5rem 1rem;
- font-size:1.125rem;
- line-height:1.5;
- border-radius:0.3rem;
-}
-
-.btn-sm, .btn-group-sm > .btn{
- padding:0.25rem 0.5rem;
- font-size:0.7875rem;
- 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{
- transition:opacity 0.15s linear;
-}
-@media (prefers-reduced-motion: reduce){
- .fade{
- transition:none;
- }
-}
-.fade:not(.show){
- opacity:0;
-}
-
-.collapse:not(.show){
- display:none;
-}
-
-.collapsing{
- position:relative;
- height:0;
- overflow:hidden;
- transition:height 0.35s ease;
-}
-@media (prefers-reduced-motion: reduce){
- .collapsing{
- transition:none;
- }
-}
-
-.dropup,
-.dropright,
-.dropdown,
-.dropleft{
- position:relative;
-}
-
-.dropdown-toggle{
- white-space:nowrap;
-}
-.dropdown-toggle::after{
- display:inline-block;
- 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:0.9rem;
- 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;
-}
-
-.dropdown-menu-left{
- right:auto;
- left:0;
-}
-
-.dropdown-menu-right{
- right:0;
- left:auto;
-}
-
-@media (min-width: 576px){
- .dropdown-menu-sm-left{
- right:auto;
- left:0;
- }
-
- .dropdown-menu-sm-right{
- right:0;
- left:auto;
- }
-}
-@media (min-width: 768px){
- .dropdown-menu-md-left{
- right:auto;
- left:0;
- }
-
- .dropdown-menu-md-right{
- right:0;
- left:auto;
- }
-}
-@media (min-width: 992px){
- .dropdown-menu-lg-left{
- right:auto;
- left:0;
- }
-
- .dropdown-menu-lg-right{
- right:0;
- left:auto;
- }
-}
-@media (min-width: 1200px){
- .dropdown-menu-xl-left{
- right:auto;
- left:0;
- }
-
- .dropdown-menu-xl-right{
- right:0;
- left:auto;
- }
-}
-.dropup .dropdown-menu{
- top:auto;
- bottom:100%;
- margin-top:0;
- margin-bottom:0.125rem;
-}
-.dropup .dropdown-toggle::after{
- display:inline-block;
- 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{
- top:0;
- right:auto;
- left:100%;
- margin-top:0;
- margin-left:0.125rem;
-}
-.dropright .dropdown-toggle::after{
- display:inline-block;
- margin-left:0.255em;
- vertical-align:0.255em;
- content:"";
- border-top:0.3em solid transparent;
- border-right:0;
- 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{
- top:0;
- right:100%;
- left:auto;
- margin-top:0;
- margin-right:0.125rem;
-}
-.dropleft .dropdown-toggle::after{
- display:inline-block;
- margin-left:0.255em;
- vertical-align:0.255em;
- content:"";
-}
-.dropleft .dropdown-toggle::after{
- display:none;
-}
-.dropleft .dropdown-toggle::before{
- display:inline-block;
- 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-menu[x-placement^=top], .dropdown-menu[x-placement^=right], .dropdown-menu[x-placement^=bottom], .dropdown-menu[x-placement^=left]{
- right:auto;
- bottom:auto;
-}
-
-.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:#e9ecef;
-}
-.dropdown-item.active, .dropdown-item:active{
- color:#fff;
- text-decoration:none;
- background-color:#3490dc;
-}
-.dropdown-item.disabled, .dropdown-item:disabled{
- color:#adb5bd;
- pointer-events:none;
- background-color:transparent;
-}
-
-.dropdown-menu.show{
- display:block;
-}
-
-.dropdown-header{
- display:block;
- padding:0.5rem 1.5rem;
- margin-bottom:0;
- font-size:0.7875rem;
- color:#6c757d;
- white-space:nowrap;
-}
-
-.dropdown-item-text{
- display:block;
- padding:0.25rem 1.5rem;
- color:#212529;
-}
-
-.btn-group,
-.btn-group-vertical{
- position:relative;
- display:inline-flex;
- vertical-align:middle;
-}
-.btn-group > .btn,
-.btn-group-vertical > .btn{
- position:relative;
- flex:1 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-toolbar{
- display:flex;
- flex-wrap:wrap;
- justify-content:flex-start;
-}
-.btn-toolbar .input-group{
- width:auto;
-}
-
-.btn-group > .btn:not(:first-child),
-.btn-group > .btn-group:not(:first-child){
- margin-left:-1px;
-}
-.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, .dropup .dropdown-toggle-split::after, .dropright .dropdown-toggle-split::after{
- margin-left:0;
-}
-.dropleft .dropdown-toggle-split::before{
- margin-right: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{
- flex-direction:column;
- align-items:flex-start;
- justify-content:center;
-}
-.btn-group-vertical > .btn,
-.btn-group-vertical > .btn-group{
- width:100%;
-}
-.btn-group-vertical > .btn:not(:first-child),
-.btn-group-vertical > .btn-group:not(:first-child){
- margin-top:-1px;
-}
-.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:flex;
- flex-wrap:wrap;
- align-items:stretch;
- width:100%;
-}
-.input-group > .form-control,
-.input-group > .form-control-plaintext,
-.input-group > .custom-select,
-.input-group > .custom-file{
- position:relative;
- flex:1 1 auto;
- width:1%;
- min-width:0;
- margin-bottom:0;
-}
-.input-group > .form-control + .form-control,
-.input-group > .form-control + .custom-select,
-.input-group > .form-control + .custom-file,
-.input-group > .form-control-plaintext + .form-control,
-.input-group > .form-control-plaintext + .custom-select,
-.input-group > .form-control-plaintext + .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:focus,
-.input-group > .custom-select:focus,
-.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label{
- z-index:3;
-}
-.input-group > .custom-file .custom-file-input:focus{
- z-index:4;
-}
-.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:flex;
- align-items:center;
-}
-.input-group > .custom-file:not(:last-child) .custom-file-label, .input-group > .custom-file:not(:last-child) .custom-file-label::after{
- border-top-right-radius:0;
- border-bottom-right-radius:0;
-}
-.input-group > .custom-file:not(:first-child) .custom-file-label{
- border-top-left-radius:0;
- border-bottom-left-radius:0;
-}
-.input-group:not(.has-validation) > .form-control:not(:last-child),
-.input-group:not(.has-validation) > .custom-select:not(:last-child),
-.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label,
-.input-group:not(.has-validation) > .custom-file:not(:last-child) .custom-file-label::after{
- border-top-right-radius:0;
- border-bottom-right-radius:0;
-}
-.input-group.has-validation > .form-control:nth-last-child(n+3),
-.input-group.has-validation > .custom-select:nth-last-child(n+3),
-.input-group.has-validation > .custom-file:nth-last-child(n+3) .custom-file-label,
-.input-group.has-validation > .custom-file:nth-last-child(n+3) .custom-file-label::after{
- border-top-right-radius:0;
- border-bottom-right-radius:0;
-}
-
-.input-group-prepend,
-.input-group-append{
- display:flex;
-}
-.input-group-prepend .btn,
-.input-group-append .btn{
- position:relative;
- z-index:2;
-}
-.input-group-prepend .btn:focus,
-.input-group-append .btn:focus{
- z-index:3;
-}
-.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:flex;
- align-items:center;
- padding:0.375rem 0.75rem;
- margin-bottom:0;
- font-size:0.9rem;
- font-weight:400;
- line-height:1.6;
- 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-lg > .form-control:not(textarea),
-.input-group-lg > .custom-select{
- height:calc(1.5em + 1rem + 2px);
-}
-
-.input-group-lg > .form-control,
-.input-group-lg > .custom-select,
-.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.125rem;
- line-height:1.5;
- border-radius:0.3rem;
-}
-
-.input-group-sm > .form-control:not(textarea),
-.input-group-sm > .custom-select{
- height:calc(1.5em + 0.5rem + 2px);
-}
-
-.input-group-sm > .form-control,
-.input-group-sm > .custom-select,
-.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.7875rem;
- line-height:1.5;
- border-radius:0.2rem;
-}
-
-.input-group-lg > .custom-select,
-.input-group-sm > .custom-select{
- padding-right:1.75rem;
-}
-
-.input-group > .input-group-prepend > .btn,
-.input-group > .input-group-prepend > .input-group-text,
-.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .btn,
-.input-group:not(.has-validation) > .input-group-append:not(:last-child) > .input-group-text,
-.input-group.has-validation > .input-group-append:nth-last-child(n+3) > .btn,
-.input-group.has-validation > .input-group-append:nth-last-child(n+3) > .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;
- z-index:1;
- display:block;
- min-height:1.44rem;
- padding-left:1.5rem;
- -webkit-print-color-adjust:exact;
- color-adjust:exact;
-}
-
-.custom-control-inline{
- display:inline-flex;
- margin-right:1rem;
-}
-
-.custom-control-input{
- position:absolute;
- left:0;
- z-index:-1;
- width:1rem;
- height:1.22rem;
- opacity:0;
-}
-.custom-control-input:checked ~ .custom-control-label::before{
- color:#fff;
- border-color:#3490dc;
- background-color:#3490dc;
-}
-.custom-control-input:focus ~ .custom-control-label::before{
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.custom-control-input:focus:not(:checked) ~ .custom-control-label::before{
- border-color:#a1cbef;
-}
-.custom-control-input:not(:disabled):active ~ .custom-control-label::before{
- color:#fff;
- background-color:#cce3f6;
- border-color:#cce3f6;
-}
-.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label{
- color:#6c757d;
-}
-.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before{
- background-color:#e9ecef;
-}
-
-.custom-control-label{
- position:relative;
- margin-bottom:0;
- vertical-align:top;
-}
-.custom-control-label::before{
- position:absolute;
- top:0.22rem;
- left:-1.5rem;
- display:block;
- width:1rem;
- height:1rem;
- pointer-events:none;
- content:"";
- background-color:#fff;
- border:#adb5bd solid 1px;
-}
-.custom-control-label::after{
- position:absolute;
- top:0.22rem;
- left:-1.5rem;
- display:block;
- width:1rem;
- height:1rem;
- content:"";
- background:50%/50% 50% no-repeat;
-}
-
-.custom-checkbox .custom-control-label::before{
- border-radius:0.25rem;
-}
-.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after{
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e");
-}
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before{
- border-color:#3490dc;
- background-color:#3490dc;
-}
-.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after{
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' 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(52, 144, 220, 0.5);
-}
-.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before{
- background-color:rgba(52, 144, 220, 0.5);
-}
-
-.custom-radio .custom-control-label::before{
- border-radius:50%;
-}
-.custom-radio .custom-control-input:checked ~ .custom-control-label::after{
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' 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(52, 144, 220, 0.5);
-}
-
-.custom-switch{
- padding-left:2.25rem;
-}
-.custom-switch .custom-control-label::before{
- left:-2.25rem;
- width:1.75rem;
- pointer-events:all;
- border-radius:0.5rem;
-}
-.custom-switch .custom-control-label::after{
- top:calc(0.22rem + 2px);
- left:calc(-2.25rem + 2px);
- width:calc(1rem - 4px);
- height:calc(1rem - 4px);
- background-color:#adb5bd;
- border-radius:0.5rem;
- transition:transform 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;
-}
-@media (prefers-reduced-motion: reduce){
- .custom-switch .custom-control-label::after{
- transition:none;
- }
-}
-.custom-switch .custom-control-input:checked ~ .custom-control-label::after{
- background-color:#fff;
- transform:translateX(0.75rem);
-}
-.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before{
- background-color:rgba(52, 144, 220, 0.5);
-}
-
-.custom-select{
- display:inline-block;
- width:100%;
- height:calc(1.6em + 0.75rem + 2px);
- padding:0.375rem 1.75rem 0.375rem 0.75rem;
- font-size:0.9rem;
- font-weight:400;
- line-height:1.6;
- color:#495057;
- vertical-align:middle;
- background:#fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") right 0.75rem center/8px 10px no-repeat;
- border:1px solid #ced4da;
- border-radius:0.25rem;
- -webkit-appearance:none;
- -moz-appearance:none;
- appearance:none;
-}
-.custom-select:focus{
- border-color:#a1cbef;
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.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{
- display:none;
-}
-.custom-select:-moz-focusring{
- color:transparent;
- text-shadow:0 0 0 #495057;
-}
-
-.custom-select-sm{
- height:calc(1.5em + 0.5rem + 2px);
- padding-top:0.25rem;
- padding-bottom:0.25rem;
- padding-left:0.5rem;
- font-size:0.7875rem;
-}
-
-.custom-select-lg{
- height:calc(1.5em + 1rem + 2px);
- padding-top:0.5rem;
- padding-bottom:0.5rem;
- padding-left:1rem;
- font-size:1.125rem;
-}
-
-.custom-file{
- position:relative;
- display:inline-block;
- width:100%;
- height:calc(1.6em + 0.75rem + 2px);
- margin-bottom:0;
-}
-
-.custom-file-input{
- position:relative;
- z-index:2;
- width:100%;
- height:calc(1.6em + 0.75rem + 2px);
- margin:0;
- overflow:hidden;
- opacity:0;
-}
-.custom-file-input:focus ~ .custom-file-label{
- border-color:#a1cbef;
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.custom-file-input[disabled] ~ .custom-file-label, .custom-file-input:disabled ~ .custom-file-label{
- background-color:#e9ecef;
-}
-.custom-file-input:lang(en) ~ .custom-file-label::after{
- content:"Browse";
-}
-.custom-file-input ~ .custom-file-label[data-browse]::after{
- content:attr(data-browse);
-}
-
-.custom-file-label{
- position:absolute;
- top:0;
- right:0;
- left:0;
- z-index:1;
- height:calc(1.6em + 0.75rem + 2px);
- padding:0.375rem 0.75rem;
- overflow:hidden;
- font-weight:400;
- line-height:1.6;
- 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(1.6em + 0.75rem);
- padding:0.375rem 0.75rem;
- line-height:1.6;
- color:#495057;
- content:"Browse";
- background-color:#e9ecef;
- border-left:inherit;
- border-radius:0 0.25rem 0.25rem 0;
-}
-
-.custom-range{
- width:100%;
- height:1.4rem;
- padding:0;
- background-color:transparent;
- -webkit-appearance:none;
- -moz-appearance:none;
- appearance:none;
-}
-.custom-range:focus{
- outline:0;
-}
-.custom-range:focus::-webkit-slider-thumb{
- box-shadow:0 0 0 1px #f8fafc, 0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.custom-range:focus::-moz-range-thumb{
- box-shadow:0 0 0 1px #f8fafc, 0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.custom-range:focus::-ms-thumb{
- box-shadow:0 0 0 1px #f8fafc, 0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-.custom-range::-moz-focus-outer{
- border:0;
-}
-.custom-range::-webkit-slider-thumb{
- width:1rem;
- height:1rem;
- margin-top:-0.25rem;
- background-color:#3490dc;
- border:0;
- border-radius:1rem;
- -webkit-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- -webkit-appearance:none;
- appearance:none;
-}
-@media (prefers-reduced-motion: reduce){
- .custom-range::-webkit-slider-thumb{
- -webkit-transition:none;
- transition:none;
- }
-}
-.custom-range::-webkit-slider-thumb:active{
- background-color:#cce3f6;
-}
-.custom-range::-webkit-slider-runnable-track{
- width:100%;
- height:0.5rem;
- color:transparent;
- cursor:pointer;
- background-color:#dee2e6;
- border-color:transparent;
- border-radius:1rem;
-}
-.custom-range::-moz-range-thumb{
- width:1rem;
- height:1rem;
- background-color:#3490dc;
- border:0;
- border-radius:1rem;
- -moz-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- -moz-appearance:none;
- appearance:none;
-}
-@media (prefers-reduced-motion: reduce){
- .custom-range::-moz-range-thumb{
- -moz-transition:none;
- transition:none;
- }
-}
-.custom-range::-moz-range-thumb:active{
- background-color:#cce3f6;
-}
-.custom-range::-moz-range-track{
- width:100%;
- height:0.5rem;
- color:transparent;
- cursor:pointer;
- background-color:#dee2e6;
- border-color:transparent;
- border-radius:1rem;
-}
-.custom-range::-ms-thumb{
- width:1rem;
- height:1rem;
- margin-top:0;
- margin-right:0.2rem;
- margin-left:0.2rem;
- background-color:#3490dc;
- border:0;
- border-radius:1rem;
- -ms-transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
- appearance:none;
-}
-@media (prefers-reduced-motion: reduce){
- .custom-range::-ms-thumb{
- -ms-transition:none;
- transition:none;
- }
-}
-.custom-range::-ms-thumb:active{
- background-color:#cce3f6;
-}
-.custom-range::-ms-track{
- width:100%;
- height:0.5rem;
- color:transparent;
- cursor:pointer;
- background-color:transparent;
- border-color:transparent;
- border-width:0.5rem;
-}
-.custom-range::-ms-fill-lower{
- background-color:#dee2e6;
- border-radius:1rem;
-}
-.custom-range::-ms-fill-upper{
- margin-right:15px;
- background-color:#dee2e6;
- border-radius:1rem;
-}
-.custom-range:disabled::-webkit-slider-thumb{
- background-color:#adb5bd;
-}
-.custom-range:disabled::-webkit-slider-runnable-track{
- cursor:default;
-}
-.custom-range:disabled::-moz-range-thumb{
- background-color:#adb5bd;
-}
-.custom-range:disabled::-moz-range-track{
- cursor:default;
-}
-.custom-range:disabled::-ms-thumb{
- background-color:#adb5bd;
-}
-
-.custom-control-label::before,
-.custom-file-label,
-.custom-select{
- transition:background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
-}
-@media (prefers-reduced-motion: reduce){
- .custom-control-label::before,
-.custom-file-label,
-.custom-select{
- transition:none;
- }
-}
-
-.nav{
- display:flex;
- 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;
- pointer-events:none;
- cursor:default;
-}
-
-.nav-tabs{
- border-bottom:1px solid #dee2e6;
-}
-.nav-tabs .nav-link{
- margin-bottom:-1px;
- 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:#f8fafc;
- border-color:#dee2e6 #dee2e6 #f8fafc;
-}
-.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:#3490dc;
-}
-
-.nav-fill > .nav-link,
-.nav-fill .nav-item{
- flex:1 1 auto;
- text-align:center;
-}
-
-.nav-justified > .nav-link,
-.nav-justified .nav-item{
- flex-basis:0;
- flex-grow:1;
- text-align:center;
-}
-
-.tab-content > .tab-pane{
- display:none;
-}
-.tab-content > .active{
- display:block;
-}
-
-.navbar{
- position:relative;
- display:flex;
- flex-wrap:wrap;
- align-items:center;
- justify-content:space-between;
- padding:0.5rem 1rem;
-}
-.navbar .container,
-.navbar .container-fluid,
-.navbar .container-sm,
-.navbar .container-md,
-.navbar .container-lg,
-.navbar .container-xl{
- display:flex;
- flex-wrap:wrap;
- align-items:center;
- justify-content:space-between;
-}
-.navbar-brand{
- display:inline-block;
- padding-top:0.32rem;
- padding-bottom:0.32rem;
- margin-right:1rem;
- font-size:1.125rem;
- line-height:inherit;
- white-space:nowrap;
-}
-.navbar-brand:hover, .navbar-brand:focus{
- text-decoration:none;
-}
-
-.navbar-nav{
- display:flex;
- 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{
- flex-basis:100%;
- flex-grow:1;
- align-items:center;
-}
-
-.navbar-toggler{
- padding:0.25rem 0.75rem;
- font-size:1.125rem;
- 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-icon{
- display:inline-block;
- width:1.5em;
- height:1.5em;
- vertical-align:middle;
- content:"";
- background:50%/100% 100% no-repeat;
-}
-
-.navbar-nav-scroll{
- max-height:75vh;
- overflow-y:auto;
-}
-
-@media (max-width: 575.98px){
- .navbar-expand-sm > .container,
-.navbar-expand-sm > .container-fluid,
-.navbar-expand-sm > .container-sm,
-.navbar-expand-sm > .container-md,
-.navbar-expand-sm > .container-lg,
-.navbar-expand-sm > .container-xl{
- padding-right:0;
- padding-left:0;
- }
-}
-@media (min-width: 576px){
- .navbar-expand-sm{
- flex-flow:row nowrap;
- justify-content:flex-start;
- }
- .navbar-expand-sm .navbar-nav{
- flex-direction:row;
- }
- .navbar-expand-sm .navbar-nav .dropdown-menu{
- position:absolute;
- }
- .navbar-expand-sm .navbar-nav .nav-link{
- padding-right:0.5rem;
- padding-left:0.5rem;
- }
- .navbar-expand-sm > .container,
-.navbar-expand-sm > .container-fluid,
-.navbar-expand-sm > .container-sm,
-.navbar-expand-sm > .container-md,
-.navbar-expand-sm > .container-lg,
-.navbar-expand-sm > .container-xl{
- flex-wrap:nowrap;
- }
- .navbar-expand-sm .navbar-nav-scroll{
- overflow:visible;
- }
- .navbar-expand-sm .navbar-collapse{
- display:flex !important;
- flex-basis:auto;
- }
- .navbar-expand-sm .navbar-toggler{
- display:none;
- }
-}
-@media (max-width: 767.98px){
- .navbar-expand-md > .container,
-.navbar-expand-md > .container-fluid,
-.navbar-expand-md > .container-sm,
-.navbar-expand-md > .container-md,
-.navbar-expand-md > .container-lg,
-.navbar-expand-md > .container-xl{
- padding-right:0;
- padding-left:0;
- }
-}
-@media (min-width: 768px){
- .navbar-expand-md{
- flex-flow:row nowrap;
- justify-content:flex-start;
- }
- .navbar-expand-md .navbar-nav{
- flex-direction:row;
- }
- .navbar-expand-md .navbar-nav .dropdown-menu{
- position:absolute;
- }
- .navbar-expand-md .navbar-nav .nav-link{
- padding-right:0.5rem;
- padding-left:0.5rem;
- }
- .navbar-expand-md > .container,
-.navbar-expand-md > .container-fluid,
-.navbar-expand-md > .container-sm,
-.navbar-expand-md > .container-md,
-.navbar-expand-md > .container-lg,
-.navbar-expand-md > .container-xl{
- flex-wrap:nowrap;
- }
- .navbar-expand-md .navbar-nav-scroll{
- overflow:visible;
- }
- .navbar-expand-md .navbar-collapse{
- display:flex !important;
- flex-basis:auto;
- }
- .navbar-expand-md .navbar-toggler{
- display:none;
- }
-}
-@media (max-width: 991.98px){
- .navbar-expand-lg > .container,
-.navbar-expand-lg > .container-fluid,
-.navbar-expand-lg > .container-sm,
-.navbar-expand-lg > .container-md,
-.navbar-expand-lg > .container-lg,
-.navbar-expand-lg > .container-xl{
- padding-right:0;
- padding-left:0;
- }
-}
-@media (min-width: 992px){
- .navbar-expand-lg{
- flex-flow:row nowrap;
- justify-content:flex-start;
- }
- .navbar-expand-lg .navbar-nav{
- flex-direction:row;
- }
- .navbar-expand-lg .navbar-nav .dropdown-menu{
- position:absolute;
- }
- .navbar-expand-lg .navbar-nav .nav-link{
- padding-right:0.5rem;
- padding-left:0.5rem;
- }
- .navbar-expand-lg > .container,
-.navbar-expand-lg > .container-fluid,
-.navbar-expand-lg > .container-sm,
-.navbar-expand-lg > .container-md,
-.navbar-expand-lg > .container-lg,
-.navbar-expand-lg > .container-xl{
- flex-wrap:nowrap;
- }
- .navbar-expand-lg .navbar-nav-scroll{
- overflow:visible;
- }
- .navbar-expand-lg .navbar-collapse{
- display:flex !important;
- flex-basis:auto;
- }
- .navbar-expand-lg .navbar-toggler{
- display:none;
- }
-}
-@media (max-width: 1199.98px){
- .navbar-expand-xl > .container,
-.navbar-expand-xl > .container-fluid,
-.navbar-expand-xl > .container-sm,
-.navbar-expand-xl > .container-md,
-.navbar-expand-xl > .container-lg,
-.navbar-expand-xl > .container-xl{
- padding-right:0;
- padding-left:0;
- }
-}
-@media (min-width: 1200px){
- .navbar-expand-xl{
- flex-flow:row nowrap;
- justify-content:flex-start;
- }
- .navbar-expand-xl .navbar-nav{
- flex-direction:row;
- }
- .navbar-expand-xl .navbar-nav .dropdown-menu{
- position:absolute;
- }
- .navbar-expand-xl .navbar-nav .nav-link{
- padding-right:0.5rem;
- padding-left:0.5rem;
- }
- .navbar-expand-xl > .container,
-.navbar-expand-xl > .container-fluid,
-.navbar-expand-xl > .container-sm,
-.navbar-expand-xl > .container-md,
-.navbar-expand-xl > .container-lg,
-.navbar-expand-xl > .container-xl{
- flex-wrap:nowrap;
- }
- .navbar-expand-xl .navbar-nav-scroll{
- overflow:visible;
- }
- .navbar-expand-xl .navbar-collapse{
- display:flex !important;
- flex-basis:auto;
- }
- .navbar-expand-xl .navbar-toggler{
- display:none;
- }
-}
-.navbar-expand{
- flex-flow:row nowrap;
- justify-content:flex-start;
-}
-.navbar-expand > .container,
-.navbar-expand > .container-fluid,
-.navbar-expand > .container-sm,
-.navbar-expand > .container-md,
-.navbar-expand > .container-lg,
-.navbar-expand > .container-xl{
- padding-right:0;
- padding-left:0;
-}
-.navbar-expand .navbar-nav{
- flex-direction:row;
-}
-.navbar-expand .navbar-nav .dropdown-menu{
- position:absolute;
-}
-.navbar-expand .navbar-nav .nav-link{
- padding-right:0.5rem;
- padding-left:0.5rem;
-}
-.navbar-expand > .container,
-.navbar-expand > .container-fluid,
-.navbar-expand > .container-sm,
-.navbar-expand > .container-md,
-.navbar-expand > .container-lg,
-.navbar-expand > .container-xl{
- flex-wrap:nowrap;
-}
-.navbar-expand .navbar-nav-scroll{
- overflow:visible;
-}
-.navbar-expand .navbar-collapse{
- display:flex !important;
- flex-basis:auto;
-}
-.navbar-expand .navbar-toggler{
- display:none;
-}
-
-.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,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' 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,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' 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:flex;
- 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{
- border-top:inherit;
- border-bottom:inherit;
-}
-.card > .list-group:first-child{
- border-top-width:0;
- border-top-left-radius:calc(0.25rem - 1px);
- border-top-right-radius:calc(0.25rem - 1px);
-}
-.card > .list-group:last-child{
- border-bottom-width:0;
- border-bottom-right-radius:calc(0.25rem - 1px);
- border-bottom-left-radius:calc(0.25rem - 1px);
-}
-.card > .card-header + .list-group,
-.card > .list-group + .card-footer{
- border-top:0;
-}
-
-.card-body{
- flex:1 1 auto;
- min-height:1px;
- 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-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;
- border-radius:calc(0.25rem - 1px);
-}
-
-.card-img,
-.card-img-top,
-.card-img-bottom{
- flex-shrink:0;
- width:100%;
-}
-
-.card-img,
-.card-img-top{
- border-top-left-radius:calc(0.25rem - 1px);
- border-top-right-radius:calc(0.25rem - 1px);
-}
-
-.card-img,
-.card-img-bottom{
- border-bottom-right-radius:calc(0.25rem - 1px);
- border-bottom-left-radius:calc(0.25rem - 1px);
-}
-
-.card-deck .card{
- margin-bottom:15px;
-}
-@media (min-width: 576px){
- .card-deck{
- display:flex;
- flex-flow:row wrap;
- margin-right:-15px;
- margin-left:-15px;
- }
- .card-deck .card{
- flex:1 0 0%;
- margin-right:15px;
- margin-bottom:0;
- margin-left:15px;
- }
-}
-
-.card-group > .card{
- margin-bottom:15px;
-}
-@media (min-width: 576px){
- .card-group{
- display:flex;
- flex-flow:row wrap;
- }
- .card-group > .card{
- flex:1 0 0%;
- margin-bottom:0;
- }
- .card-group > .card + .card{
- margin-left:0;
- border-left:0;
- }
- .card-group > .card:not(:last-child){
- border-top-right-radius:0;
- border-bottom-right-radius:0;
- }
- .card-group > .card:not(:last-child) .card-img-top,
-.card-group > .card:not(:last-child) .card-header{
- border-top-right-radius:0;
- }
- .card-group > .card:not(:last-child) .card-img-bottom,
-.card-group > .card:not(:last-child) .card-footer{
- border-bottom-right-radius:0;
- }
- .card-group > .card:not(:first-child){
- border-top-left-radius:0;
- border-bottom-left-radius:0;
- }
- .card-group > .card:not(:first-child) .card-img-top,
-.card-group > .card:not(:first-child) .card-header{
- border-top-left-radius:0;
- }
- .card-group > .card:not(:first-child) .card-img-bottom,
-.card-group > .card:not(:first-child) .card-footer{
- border-bottom-left-radius:0;
- }
-}
-
-.card-columns .card{
- margin-bottom:0.75rem;
-}
-@media (min-width: 576px){
- .card-columns{
- -moz-column-count:3;
- column-count:3;
- -moz-column-gap:1.25rem;
- column-gap:1.25rem;
- orphans:1;
- widows:1;
- }
- .card-columns .card{
- display:inline-block;
- width:100%;
- }
-}
-
-.accordion{
- overflow-anchor:none;
-}
-.accordion > .card{
- overflow:hidden;
-}
-.accordion > .card:not(:last-of-type){
- border-bottom:0;
- border-bottom-right-radius:0;
- border-bottom-left-radius:0;
-}
-.accordion > .card:not(:first-of-type){
- border-top-left-radius:0;
- border-top-right-radius:0;
-}
-.accordion > .card > .card-header{
- border-radius:0;
- margin-bottom:-1px;
-}
-
-.breadcrumb{
- display:flex;
- flex-wrap:wrap;
- padding:0.75rem 1rem;
- margin-bottom:1rem;
- list-style:none;
- background-color:#e9ecef;
- border-radius:0.25rem;
-}
-
-.breadcrumb-item + .breadcrumb-item{
- padding-left:0.5rem;
-}
-.breadcrumb-item + .breadcrumb-item::before{
- float:left;
- padding-right: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: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:#3490dc;
- background-color:#fff;
- border:1px solid #dee2e6;
-}
-.page-link:hover{
- z-index:2;
- color:#1d68a7;
- text-decoration:none;
- background-color:#e9ecef;
- border-color:#dee2e6;
-}
-.page-link:focus{
- z-index:3;
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.25);
-}
-
-.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:3;
- color:#fff;
- background-color:#3490dc;
- border-color:#3490dc;
-}
-.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.125rem;
- 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.7875rem;
- 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;
- 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;
-}
-@media (prefers-reduced-motion: reduce){
- .badge{
- transition:none;
- }
-}
-a.badge:hover, a.badge:focus{
- text-decoration:none;
-}
-
-.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:#3490dc;
-}
-a.badge-primary:hover, a.badge-primary:focus{
- color:#fff;
- background-color:#2176bd;
-}
-a.badge-primary:focus, a.badge-primary.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(52, 144, 220, 0.5);
-}
-
-.badge-secondary{
- color:#fff;
- background-color:#6c757d;
-}
-a.badge-secondary:hover, a.badge-secondary:focus{
- color:#fff;
- background-color:#545b62;
-}
-a.badge-secondary:focus, a.badge-secondary.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(108, 117, 125, 0.5);
-}
-
-.badge-success{
- color:#fff;
- background-color:#38c172;
-}
-a.badge-success:hover, a.badge-success:focus{
- color:#fff;
- background-color:#2d995b;
-}
-a.badge-success:focus, a.badge-success.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(56, 193, 114, 0.5);
-}
-
-.badge-info{
- color:#212529;
- background-color:#6cb2eb;
-}
-a.badge-info:hover, a.badge-info:focus{
- color:#212529;
- background-color:#3f9ae5;
-}
-a.badge-info:focus, a.badge-info.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(108, 178, 235, 0.5);
-}
-
-.badge-warning{
- color:#212529;
- background-color:#ffed4a;
-}
-a.badge-warning:hover, a.badge-warning:focus{
- color:#212529;
- background-color:#ffe817;
-}
-a.badge-warning:focus, a.badge-warning.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(255, 237, 74, 0.5);
-}
-
-.badge-danger{
- color:#fff;
- background-color:#e3342f;
-}
-a.badge-danger:hover, a.badge-danger:focus{
- color:#fff;
- background-color:#c51f1a;
-}
-a.badge-danger:focus, a.badge-danger.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(227, 52, 47, 0.5);
-}
-
-.badge-light{
- color:#212529;
- background-color:#f8f9fa;
-}
-a.badge-light:hover, a.badge-light:focus{
- color:#212529;
- background-color:#dae0e5;
-}
-a.badge-light:focus, a.badge-light.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(248, 249, 250, 0.5);
-}
-
-.badge-dark{
- color:#fff;
- background-color:#343a40;
-}
-a.badge-dark:hover, a.badge-dark:focus{
- color:#fff;
- background-color:#1d2124;
-}
-a.badge-dark:focus, a.badge-dark.focus{
- outline:0;
- box-shadow:0 0 0 0.2rem rgba(52, 58, 64, 0.5);
-}
-
-.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:3.85rem;
-}
-.alert-dismissible .close{
- position:absolute;
- top:0;
- right:0;
- z-index:2;
- padding:0.75rem 1.25rem;
- color:inherit;
-}
-
-.alert-primary{
- color:#1b4b72;
- background-color:#d6e9f8;
- border-color:#c6e0f5;
-}
-.alert-primary hr{
- border-top-color:#b0d4f1;
-}
-.alert-primary .alert-link{
- color:#113049;
-}
-
-.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:#1d643b;
- background-color:#d7f3e3;
- border-color:#c7eed8;
-}
-.alert-success hr{
- border-top-color:#b3e8ca;
-}
-.alert-success .alert-link{
- color:#123c24;
-}
-
-.alert-info{
- color:#385d7a;
- background-color:#e2f0fb;
- border-color:#d6e9f9;
-}
-.alert-info hr{
- border-top-color:#c0ddf6;
-}
-.alert-info .alert-link{
- color:#284257;
-}
-
-.alert-warning{
- color:#857b26;
- background-color:#fffbdb;
- border-color:#fffacc;
-}
-.alert-warning hr{
- border-top-color:#fff8b3;
-}
-.alert-warning .alert-link{
- color:#5d561b;
-}
-
-.alert-danger{
- color:#761b18;
- background-color:#f9d6d5;
- border-color:#f7c6c5;
-}
-.alert-danger hr{
- border-top-color:#f4b0af;
-}
-.alert-danger .alert-link{
- color:#4c110f;
-}
-
-.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:flex;
- height:1rem;
- overflow:hidden;
- line-height:0;
- font-size:0.675rem;
- background-color:#e9ecef;
- border-radius:0.25rem;
-}
-
-.progress-bar{
- display:flex;
- flex-direction:column;
- justify-content:center;
- overflow:hidden;
- color:#fff;
- text-align:center;
- white-space:nowrap;
- background-color:#3490dc;
- transition:width 0.6s ease;
-}
-@media (prefers-reduced-motion: reduce){
- .progress-bar{
- transition:none;
- }
-}
-
-.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:1s linear infinite progress-bar-stripes;
- animation:1s linear infinite progress-bar-stripes;
-}
-@media (prefers-reduced-motion: reduce){
- .progress-bar-animated{
- -webkit-animation:none;
- animation:none;
- }
-}
-
-.media{
- display:flex;
- align-items:flex-start;
-}
-
-.media-body{
- flex:1;
-}
-
-.list-group{
- display:flex;
- flex-direction:column;
- padding-left:0;
- margin-bottom:0;
- border-radius:0.25rem;
-}
-
-.list-group-item-action{
- width:100%;
- color:#495057;
- text-align:inherit;
-}
-.list-group-item-action:hover, .list-group-item-action:focus{
- z-index:1;
- 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;
- background-color:#fff;
- border:1px solid rgba(0, 0, 0, 0.125);
-}
-.list-group-item:first-child{
- border-top-left-radius:inherit;
- border-top-right-radius:inherit;
-}
-.list-group-item:last-child{
- border-bottom-right-radius:inherit;
- border-bottom-left-radius:inherit;
-}
-.list-group-item.disabled, .list-group-item:disabled{
- color:#6c757d;
- pointer-events:none;
- background-color:#fff;
-}
-.list-group-item.active{
- z-index:2;
- color:#fff;
- background-color:#3490dc;
- border-color:#3490dc;
-}
-.list-group-item + .list-group-item{
- border-top-width:0;
-}
-.list-group-item + .list-group-item.active{
- margin-top:-1px;
- border-top-width:1px;
-}
-
-.list-group-horizontal{
- flex-direction:row;
-}
-.list-group-horizontal > .list-group-item:first-child{
- border-bottom-left-radius:0.25rem;
- border-top-right-radius:0;
-}
-.list-group-horizontal > .list-group-item:last-child{
- border-top-right-radius:0.25rem;
- border-bottom-left-radius:0;
-}
-.list-group-horizontal > .list-group-item.active{
- margin-top:0;
-}
-.list-group-horizontal > .list-group-item + .list-group-item{
- border-top-width:1px;
- border-left-width:0;
-}
-.list-group-horizontal > .list-group-item + .list-group-item.active{
- margin-left:-1px;
- border-left-width:1px;
-}
-
-@media (min-width: 576px){
- .list-group-horizontal-sm{
- flex-direction:row;
- }
- .list-group-horizontal-sm > .list-group-item:first-child{
- border-bottom-left-radius:0.25rem;
- border-top-right-radius:0;
- }
- .list-group-horizontal-sm > .list-group-item:last-child{
- border-top-right-radius:0.25rem;
- border-bottom-left-radius:0;
- }
- .list-group-horizontal-sm > .list-group-item.active{
- margin-top:0;
- }
- .list-group-horizontal-sm > .list-group-item + .list-group-item{
- border-top-width:1px;
- border-left-width:0;
- }
- .list-group-horizontal-sm > .list-group-item + .list-group-item.active{
- margin-left:-1px;
- border-left-width:1px;
- }
-}
-@media (min-width: 768px){
- .list-group-horizontal-md{
- flex-direction:row;
- }
- .list-group-horizontal-md > .list-group-item:first-child{
- border-bottom-left-radius:0.25rem;
- border-top-right-radius:0;
- }
- .list-group-horizontal-md > .list-group-item:last-child{
- border-top-right-radius:0.25rem;
- border-bottom-left-radius:0;
- }
- .list-group-horizontal-md > .list-group-item.active{
- margin-top:0;
- }
- .list-group-horizontal-md > .list-group-item + .list-group-item{
- border-top-width:1px;
- border-left-width:0;
- }
- .list-group-horizontal-md > .list-group-item + .list-group-item.active{
- margin-left:-1px;
- border-left-width:1px;
- }
-}
-@media (min-width: 992px){
- .list-group-horizontal-lg{
- flex-direction:row;
- }
- .list-group-horizontal-lg > .list-group-item:first-child{
- border-bottom-left-radius:0.25rem;
- border-top-right-radius:0;
- }
- .list-group-horizontal-lg > .list-group-item:last-child{
- border-top-right-radius:0.25rem;
- border-bottom-left-radius:0;
- }
- .list-group-horizontal-lg > .list-group-item.active{
- margin-top:0;
- }
- .list-group-horizontal-lg > .list-group-item + .list-group-item{
- border-top-width:1px;
- border-left-width:0;
- }
- .list-group-horizontal-lg > .list-group-item + .list-group-item.active{
- margin-left:-1px;
- border-left-width:1px;
- }
-}
-@media (min-width: 1200px){
- .list-group-horizontal-xl{
- flex-direction:row;
- }
- .list-group-horizontal-xl > .list-group-item:first-child{
- border-bottom-left-radius:0.25rem;
- border-top-right-radius:0;
- }
- .list-group-horizontal-xl > .list-group-item:last-child{
- border-top-right-radius:0.25rem;
- border-bottom-left-radius:0;
- }
- .list-group-horizontal-xl > .list-group-item.active{
- margin-top:0;
- }
- .list-group-horizontal-xl > .list-group-item + .list-group-item{
- border-top-width:1px;
- border-left-width:0;
- }
- .list-group-horizontal-xl > .list-group-item + .list-group-item.active{
- margin-left:-1px;
- border-left-width:1px;
- }
-}
-.list-group-flush{
- border-radius:0;
-}
-.list-group-flush > .list-group-item{
- border-width:0 0 1px;
-}
-.list-group-flush > .list-group-item:last-child{
- border-bottom-width:0;
-}
-
-.list-group-item-primary{
- color:#1b4b72;
- background-color:#c6e0f5;
-}
-.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus{
- color:#1b4b72;
- background-color:#b0d4f1;
-}
-.list-group-item-primary.list-group-item-action.active{
- color:#fff;
- background-color:#1b4b72;
- border-color:#1b4b72;
-}
-
-.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:#1d643b;
- background-color:#c7eed8;
-}
-.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus{
- color:#1d643b;
- background-color:#b3e8ca;
-}
-.list-group-item-success.list-group-item-action.active{
- color:#fff;
- background-color:#1d643b;
- border-color:#1d643b;
-}
-
-.list-group-item-info{
- color:#385d7a;
- background-color:#d6e9f9;
-}
-.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus{
- color:#385d7a;
- background-color:#c0ddf6;
-}
-.list-group-item-info.list-group-item-action.active{
- color:#fff;
- background-color:#385d7a;
- border-color:#385d7a;
-}
-
-.list-group-item-warning{
- color:#857b26;
- background-color:#fffacc;
-}
-.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus{
- color:#857b26;
- background-color:#fff8b3;
-}
-.list-group-item-warning.list-group-item-action.active{
- color:#fff;
- background-color:#857b26;
- border-color:#857b26;
-}
-
-.list-group-item-danger{
- color:#761b18;
- background-color:#f7c6c5;
-}
-.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus{
- color:#761b18;
- background-color:#f4b0af;
-}
-.list-group-item-danger.list-group-item-action.active{
- color:#fff;
- background-color:#761b18;
- border-color:#761b18;
-}
-
-.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.35rem;
- font-weight:700;
- line-height:1;
- color:#000;
- text-shadow:0 1px 0 #fff;
- opacity:0.5;
-}
-.close:hover{
- color:#000;
- text-decoration:none;
-}
-.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus{
- opacity:0.75;
-}
-
-button.close{
- padding:0;
- background-color:transparent;
- border:0;
-}
-
-a.close.disabled{
- pointer-events:none;
-}
-
-.toast{
- flex-basis:350px;
- max-width:350px;
- font-size:0.875rem;
- background-color:rgba(255, 255, 255, 0.85);
- background-clip:padding-box;
- border:1px solid rgba(0, 0, 0, 0.1);
- box-shadow:0 0.25rem 0.75rem rgba(0, 0, 0, 0.1);
- opacity:0;
- border-radius:0.25rem;
-}
-.toast:not(:last-child){
- margin-bottom:0.75rem;
-}
-.toast.showing{
- opacity:1;
-}
-.toast.show{
- display:block;
- opacity:1;
-}
-.toast.hide{
- display:none;
-}
-
-.toast-header{
- display:flex;
- align-items:center;
- padding:0.25rem 0.75rem;
- color:#6c757d;
- background-color:rgba(255, 255, 255, 0.85);
- background-clip:padding-box;
- border-bottom:1px solid rgba(0, 0, 0, 0.05);
- border-top-left-radius:calc(0.25rem - 1px);
- border-top-right-radius:calc(0.25rem - 1px);
-}
-
-.toast-body{
- padding:0.75rem;
-}
-
-.modal-open{
- overflow:hidden;
-}
-.modal-open .modal{
- overflow-x:hidden;
- overflow-y:auto;
-}
-
-.modal{
- position:fixed;
- top:0;
- left:0;
- z-index:1050;
- display:none;
- width:100%;
- height:100%;
- overflow:hidden;
- outline:0;
-}
-
-.modal-dialog{
- position:relative;
- width:auto;
- margin:0.5rem;
- pointer-events:none;
-}
-.modal.fade .modal-dialog{
- transition:transform 0.3s ease-out;
- transform:translate(0, -50px);
-}
-@media (prefers-reduced-motion: reduce){
- .modal.fade .modal-dialog{
- transition:none;
- }
-}
-.modal.show .modal-dialog{
- transform:none;
-}
-.modal.modal-static .modal-dialog{
- transform:scale(1.02);
-}
-
-.modal-dialog-scrollable{
- display:flex;
- max-height:calc(100% - 1rem);
-}
-.modal-dialog-scrollable .modal-content{
- max-height:calc(100vh - 1rem);
- overflow:hidden;
-}
-.modal-dialog-scrollable .modal-header,
-.modal-dialog-scrollable .modal-footer{
- flex-shrink:0;
-}
-.modal-dialog-scrollable .modal-body{
- overflow-y:auto;
-}
-
-.modal-dialog-centered{
- display:flex;
- align-items:center;
- min-height:calc(100% - 1rem);
-}
-.modal-dialog-centered::before{
- display:block;
- height:calc(100vh - 1rem);
- height:-webkit-min-content;
- height:-moz-min-content;
- height:min-content;
- content:"";
-}
-.modal-dialog-centered.modal-dialog-scrollable{
- flex-direction:column;
- justify-content:center;
- height:100%;
-}
-.modal-dialog-centered.modal-dialog-scrollable .modal-content{
- max-height:none;
-}
-.modal-dialog-centered.modal-dialog-scrollable::before{
- content:none;
-}
-
-.modal-content{
- position:relative;
- display:flex;
- 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;
- left:0;
- z-index:1040;
- width:100vw;
- height:100vh;
- background-color:#000;
-}
-.modal-backdrop.fade{
- opacity:0;
-}
-.modal-backdrop.show{
- opacity:0.5;
-}
-
-.modal-header{
- display:flex;
- align-items:flex-start;
- justify-content:space-between;
- padding:1rem 1rem;
- border-bottom:1px solid #dee2e6;
- border-top-left-radius:calc(0.3rem - 1px);
- border-top-right-radius:calc(0.3rem - 1px);
-}
-.modal-header .close{
- padding:1rem 1rem;
- margin:-1rem -1rem -1rem auto;
-}
-
-.modal-title{
- margin-bottom:0;
- line-height:1.6;
-}
-
-.modal-body{
- position:relative;
- flex:1 1 auto;
- padding:1rem;
-}
-
-.modal-footer{
- display:flex;
- flex-wrap:wrap;
- align-items:center;
- justify-content:flex-end;
- padding:0.75rem;
- border-top:1px solid #dee2e6;
- border-bottom-right-radius:calc(0.3rem - 1px);
- border-bottom-left-radius:calc(0.3rem - 1px);
-}
-.modal-footer > *{
- margin:0.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-scrollable{
- max-height:calc(100% - 3.5rem);
- }
- .modal-dialog-scrollable .modal-content{
- max-height:calc(100vh - 3.5rem);
- }
-
- .modal-dialog-centered{
- min-height:calc(100% - 3.5rem);
- }
- .modal-dialog-centered::before{
- height:calc(100vh - 3.5rem);
- height:-webkit-min-content;
- height:-moz-min-content;
- height:min-content;
- }
-
- .modal-sm{
- max-width:300px;
- }
-}
-@media (min-width: 992px){
- .modal-lg,
-.modal-xl{
- max-width:800px;
- }
-}
-@media (min-width: 1200px){
- .modal-xl{
- max-width:1140px;
- }
-}
-.tooltip{
- position:absolute;
- z-index:1070;
- display:block;
- margin:0;
- font-family:"Nunito", sans-serif;
- font-style:normal;
- font-weight:400;
- line-height:1.6;
- 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.7875rem;
- 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:"Nunito", sans-serif;
- font-style:normal;
- font-weight:400;
- line-height:1.6;
- 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.7875rem;
- 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);
-}
-.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^=top] > .arrow::before{
- bottom:0;
- border-width:0.5rem 0.5rem 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-width:0.5rem 0.5rem 0;
- 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);
- width:0.5rem;
- height:1rem;
- margin:0.3rem 0;
-}
-.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^=right] > .arrow::before{
- left:0;
- border-width:0.5rem 0.5rem 0.5rem 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-width:0.5rem 0.5rem 0.5rem 0;
- 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);
-}
-.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^=bottom] > .arrow::before{
- top:0;
- border-width:0 0.5rem 0.5rem 0.5rem;
- 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-width:0 0.5rem 0.5rem 0.5rem;
- 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);
- width:0.5rem;
- height:1rem;
- margin:0.3rem 0;
-}
-.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^=left] > .arrow::before{
- right:0;
- border-width:0.5rem 0 0.5rem 0.5rem;
- 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-width:0.5rem 0 0.5rem 0.5rem;
- border-left-color:#fff;
-}
-
-.popover-header{
- padding:0.5rem 0.75rem;
- margin-bottom:0;
- font-size:0.9rem;
- 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.pointer-event{
- touch-action:pan-y;
-}
-
-.carousel-inner{
- position:relative;
- width:100%;
- overflow:hidden;
-}
-.carousel-inner::after{
- display:block;
- clear:both;
- content:"";
-}
-
-.carousel-item{
- position:relative;
- display:none;
- float:left;
- width:100%;
- margin-right:-100%;
- -webkit-backface-visibility:hidden;
- backface-visibility:hidden;
- transition:transform 0.6s ease-in-out;
-}
-@media (prefers-reduced-motion: reduce){
- .carousel-item{
- transition:none;
- }
-}
-
-.carousel-item.active,
-.carousel-item-next,
-.carousel-item-prev{
- display:block;
-}
-
-.carousel-item-next:not(.carousel-item-left),
-.active.carousel-item-right{
- transform:translateX(100%);
-}
-
-.carousel-item-prev:not(.carousel-item-right),
-.active.carousel-item-left{
- transform:translateX(-100%);
-}
-
-.carousel-fade .carousel-item{
- opacity:0;
- transition-property:opacity;
- transform:none;
-}
-.carousel-fade .carousel-item.active,
-.carousel-fade .carousel-item-next.carousel-item-left,
-.carousel-fade .carousel-item-prev.carousel-item-right{
- z-index:1;
- opacity:1;
-}
-.carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-right{
- z-index:0;
- opacity:0;
- transition:opacity 0s 0.6s;
-}
-@media (prefers-reduced-motion: reduce){
- .carousel-fade .active.carousel-item-left,
-.carousel-fade .active.carousel-item-right{
- transition:none;
- }
-}
-
-.carousel-control-prev,
-.carousel-control-next{
- position:absolute;
- top:0;
- bottom:0;
- z-index:1;
- display:flex;
- align-items:center;
- justify-content:center;
- width:15%;
- padding:0;
- color:#fff;
- text-align:center;
- background:none;
- border:0;
- opacity:0.5;
- transition:opacity 0.15s ease;
-}
-@media (prefers-reduced-motion: reduce){
- .carousel-control-prev,
-.carousel-control-next{
- transition:none;
- }
-}
-.carousel-control-prev:hover, .carousel-control-prev:focus,
-.carousel-control-next:hover,
-.carousel-control-next:focus{
- color:#fff;
- text-decoration:none;
- outline:0;
- opacity:0.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:50%/100% 100% no-repeat;
-}
-
-.carousel-control-prev-icon{
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e");
-}
-
-.carousel-control-next-icon{
- background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e");
-}
-
-.carousel-indicators{
- position:absolute;
- right:0;
- bottom:0;
- left:0;
- z-index:15;
- display:flex;
- justify-content:center;
- padding-left:0;
- margin-right:15%;
- margin-left:15%;
- list-style:none;
-}
-.carousel-indicators li{
- box-sizing:content-box;
- flex:0 1 auto;
- width:30px;
- height:3px;
- margin-right:3px;
- margin-left:3px;
- text-indent:-999px;
- cursor:pointer;
- background-color:#fff;
- background-clip:padding-box;
- border-top:10px solid transparent;
- border-bottom:10px solid transparent;
- opacity:0.5;
- transition:opacity 0.6s ease;
-}
-@media (prefers-reduced-motion: reduce){
- .carousel-indicators li{
- transition:none;
- }
-}
-.carousel-indicators .active{
- opacity:1;
-}
-
-.carousel-caption{
- position:absolute;
- right:15%;
- bottom:20px;
- left:15%;
- z-index:10;
- padding-top:20px;
- padding-bottom:20px;
- color:#fff;
- text-align:center;
-}
-
-@-webkit-keyframes spinner-border{
- to{
- transform:rotate(360deg);
- }
-}
-
-@keyframes spinner-border{
- to{
- transform:rotate(360deg);
- }
-}
-.spinner-border{
- display:inline-block;
- width:2rem;
- height:2rem;
- vertical-align:-0.125em;
- border:0.25em solid currentColor;
- border-right-color:transparent;
- border-radius:50%;
- -webkit-animation:0.75s linear infinite spinner-border;
- animation:0.75s linear infinite spinner-border;
-}
-
-.spinner-border-sm{
- width:1rem;
- height:1rem;
- border-width:0.2em;
-}
-
-@-webkit-keyframes spinner-grow{
- 0%{
- transform:scale(0);
- }
- 50%{
- opacity:1;
- transform:none;
- }
-}
-
-@keyframes spinner-grow{
- 0%{
- transform:scale(0);
- }
- 50%{
- opacity:1;
- transform:none;
- }
-}
-.spinner-grow{
- display:inline-block;
- width:2rem;
- height:2rem;
- vertical-align:-0.125em;
- background-color:currentColor;
- border-radius:50%;
- opacity:0;
- -webkit-animation:0.75s linear infinite spinner-grow;
- animation:0.75s linear infinite spinner-grow;
-}
-
-.spinner-grow-sm{
- width:1rem;
- height:1rem;
-}
-
-@media (prefers-reduced-motion: reduce){
- .spinner-border,
-.spinner-grow{
- -webkit-animation-duration:1.5s;
- animation-duration:1.5s;
- }
-}
-.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:#3490dc !important;
-}
-
-a.bg-primary:hover, a.bg-primary:focus,
-button.bg-primary:hover,
-button.bg-primary:focus{
- background-color:#2176bd !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:#38c172 !important;
-}
-
-a.bg-success:hover, a.bg-success:focus,
-button.bg-success:hover,
-button.bg-success:focus{
- background-color:#2d995b !important;
-}
-
-.bg-info{
- background-color:#6cb2eb !important;
-}
-
-a.bg-info:hover, a.bg-info:focus,
-button.bg-info:hover,
-button.bg-info:focus{
- background-color:#3f9ae5 !important;
-}
-
-.bg-warning{
- background-color:#ffed4a !important;
-}
-
-a.bg-warning:hover, a.bg-warning:focus,
-button.bg-warning:hover,
-button.bg-warning:focus{
- background-color:#ffe817 !important;
-}
-
-.bg-danger{
- background-color:#e3342f !important;
-}
-
-a.bg-danger:hover, a.bg-danger:focus,
-button.bg-danger:hover,
-button.bg-danger:focus{
- background-color:#c51f1a !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:#3490dc !important;
-}
-
-.border-secondary{
- border-color:#6c757d !important;
-}
-
-.border-success{
- border-color:#38c172 !important;
-}
-
-.border-info{
- border-color:#6cb2eb !important;
-}
-
-.border-warning{
- border-color:#ffed4a !important;
-}
-
-.border-danger{
- border-color:#e3342f !important;
-}
-
-.border-light{
- border-color:#f8f9fa !important;
-}
-
-.border-dark{
- border-color:#343a40 !important;
-}
-
-.border-white{
- border-color:#fff !important;
-}
-
-.rounded-sm{
- border-radius:0.2rem !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-lg{
- border-radius:0.3rem !important;
-}
-
-.rounded-circle{
- border-radius:50% !important;
-}
-
-.rounded-pill{
- border-radius:50rem !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:flex !important;
-}
-
-.d-inline-flex{
- 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:flex !important;
- }
-
- .d-sm-inline-flex{
- 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:flex !important;
- }
-
- .d-md-inline-flex{
- 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:flex !important;
- }
-
- .d-lg-inline-flex{
- 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:flex !important;
- }
-
- .d-xl-inline-flex{
- 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:flex !important;
- }
-
- .d-print-inline-flex{
- 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.85714286%;
-}
-
-.embed-responsive-16by9::before{
- padding-top:56.25%;
-}
-
-.embed-responsive-4by3::before{
- padding-top:75%;
-}
-
-.embed-responsive-1by1::before{
- padding-top:100%;
-}
-
-.flex-row{
- flex-direction:row !important;
-}
-
-.flex-column{
- flex-direction:column !important;
-}
-
-.flex-row-reverse{
- flex-direction:row-reverse !important;
-}
-
-.flex-column-reverse{
- flex-direction:column-reverse !important;
-}
-
-.flex-wrap{
- flex-wrap:wrap !important;
-}
-
-.flex-nowrap{
- flex-wrap:nowrap !important;
-}
-
-.flex-wrap-reverse{
- flex-wrap:wrap-reverse !important;
-}
-
-.flex-fill{
- flex:1 1 auto !important;
-}
-
-.flex-grow-0{
- flex-grow:0 !important;
-}
-
-.flex-grow-1{
- flex-grow:1 !important;
-}
-
-.flex-shrink-0{
- flex-shrink:0 !important;
-}
-
-.flex-shrink-1{
- flex-shrink:1 !important;
-}
-
-.justify-content-start{
- justify-content:flex-start !important;
-}
-
-.justify-content-end{
- justify-content:flex-end !important;
-}
-
-.justify-content-center{
- justify-content:center !important;
-}
-
-.justify-content-between{
- justify-content:space-between !important;
-}
-
-.justify-content-around{
- justify-content:space-around !important;
-}
-
-.align-items-start{
- align-items:flex-start !important;
-}
-
-.align-items-end{
- align-items:flex-end !important;
-}
-
-.align-items-center{
- align-items:center !important;
-}
-
-.align-items-baseline{
- align-items:baseline !important;
-}
-
-.align-items-stretch{
- align-items:stretch !important;
-}
-
-.align-content-start{
- align-content:flex-start !important;
-}
-
-.align-content-end{
- align-content:flex-end !important;
-}
-
-.align-content-center{
- align-content:center !important;
-}
-
-.align-content-between{
- align-content:space-between !important;
-}
-
-.align-content-around{
- align-content:space-around !important;
-}
-
-.align-content-stretch{
- align-content:stretch !important;
-}
-
-.align-self-auto{
- align-self:auto !important;
-}
-
-.align-self-start{
- align-self:flex-start !important;
-}
-
-.align-self-end{
- align-self:flex-end !important;
-}
-
-.align-self-center{
- align-self:center !important;
-}
-
-.align-self-baseline{
- align-self:baseline !important;
-}
-
-.align-self-stretch{
- align-self:stretch !important;
-}
-
-@media (min-width: 576px){
- .flex-sm-row{
- flex-direction:row !important;
- }
-
- .flex-sm-column{
- flex-direction:column !important;
- }
-
- .flex-sm-row-reverse{
- flex-direction:row-reverse !important;
- }
-
- .flex-sm-column-reverse{
- flex-direction:column-reverse !important;
- }
-
- .flex-sm-wrap{
- flex-wrap:wrap !important;
- }
-
- .flex-sm-nowrap{
- flex-wrap:nowrap !important;
- }
-
- .flex-sm-wrap-reverse{
- flex-wrap:wrap-reverse !important;
- }
-
- .flex-sm-fill{
- flex:1 1 auto !important;
- }
-
- .flex-sm-grow-0{
- flex-grow:0 !important;
- }
-
- .flex-sm-grow-1{
- flex-grow:1 !important;
- }
-
- .flex-sm-shrink-0{
- flex-shrink:0 !important;
- }
-
- .flex-sm-shrink-1{
- flex-shrink:1 !important;
- }
-
- .justify-content-sm-start{
- justify-content:flex-start !important;
- }
-
- .justify-content-sm-end{
- justify-content:flex-end !important;
- }
-
- .justify-content-sm-center{
- justify-content:center !important;
- }
-
- .justify-content-sm-between{
- justify-content:space-between !important;
- }
-
- .justify-content-sm-around{
- justify-content:space-around !important;
- }
-
- .align-items-sm-start{
- align-items:flex-start !important;
- }
-
- .align-items-sm-end{
- align-items:flex-end !important;
- }
-
- .align-items-sm-center{
- align-items:center !important;
- }
-
- .align-items-sm-baseline{
- align-items:baseline !important;
- }
-
- .align-items-sm-stretch{
- align-items:stretch !important;
- }
-
- .align-content-sm-start{
- align-content:flex-start !important;
- }
-
- .align-content-sm-end{
- align-content:flex-end !important;
- }
-
- .align-content-sm-center{
- align-content:center !important;
- }
-
- .align-content-sm-between{
- align-content:space-between !important;
- }
-
- .align-content-sm-around{
- align-content:space-around !important;
- }
-
- .align-content-sm-stretch{
- align-content:stretch !important;
- }
-
- .align-self-sm-auto{
- align-self:auto !important;
- }
-
- .align-self-sm-start{
- align-self:flex-start !important;
- }
-
- .align-self-sm-end{
- align-self:flex-end !important;
- }
-
- .align-self-sm-center{
- align-self:center !important;
- }
-
- .align-self-sm-baseline{
- align-self:baseline !important;
- }
-
- .align-self-sm-stretch{
- align-self:stretch !important;
- }
-}
-@media (min-width: 768px){
- .flex-md-row{
- flex-direction:row !important;
- }
-
- .flex-md-column{
- flex-direction:column !important;
- }
-
- .flex-md-row-reverse{
- flex-direction:row-reverse !important;
- }
-
- .flex-md-column-reverse{
- flex-direction:column-reverse !important;
- }
-
- .flex-md-wrap{
- flex-wrap:wrap !important;
- }
-
- .flex-md-nowrap{
- flex-wrap:nowrap !important;
- }
-
- .flex-md-wrap-reverse{
- flex-wrap:wrap-reverse !important;
- }
-
- .flex-md-fill{
- flex:1 1 auto !important;
- }
-
- .flex-md-grow-0{
- flex-grow:0 !important;
- }
-
- .flex-md-grow-1{
- flex-grow:1 !important;
- }
-
- .flex-md-shrink-0{
- flex-shrink:0 !important;
- }
-
- .flex-md-shrink-1{
- flex-shrink:1 !important;
- }
-
- .justify-content-md-start{
- justify-content:flex-start !important;
- }
-
- .justify-content-md-end{
- justify-content:flex-end !important;
- }
-
- .justify-content-md-center{
- justify-content:center !important;
- }
-
- .justify-content-md-between{
- justify-content:space-between !important;
- }
-
- .justify-content-md-around{
- justify-content:space-around !important;
- }
-
- .align-items-md-start{
- align-items:flex-start !important;
- }
-
- .align-items-md-end{
- align-items:flex-end !important;
- }
-
- .align-items-md-center{
- align-items:center !important;
- }
-
- .align-items-md-baseline{
- align-items:baseline !important;
- }
-
- .align-items-md-stretch{
- align-items:stretch !important;
- }
-
- .align-content-md-start{
- align-content:flex-start !important;
- }
-
- .align-content-md-end{
- align-content:flex-end !important;
- }
-
- .align-content-md-center{
- align-content:center !important;
- }
-
- .align-content-md-between{
- align-content:space-between !important;
- }
-
- .align-content-md-around{
- align-content:space-around !important;
- }
-
- .align-content-md-stretch{
- align-content:stretch !important;
- }
-
- .align-self-md-auto{
- align-self:auto !important;
- }
-
- .align-self-md-start{
- align-self:flex-start !important;
- }
-
- .align-self-md-end{
- align-self:flex-end !important;
- }
-
- .align-self-md-center{
- align-self:center !important;
- }
-
- .align-self-md-baseline{
- align-self:baseline !important;
- }
-
- .align-self-md-stretch{
- align-self:stretch !important;
- }
-}
-@media (min-width: 992px){
- .flex-lg-row{
- flex-direction:row !important;
- }
-
- .flex-lg-column{
- flex-direction:column !important;
- }
-
- .flex-lg-row-reverse{
- flex-direction:row-reverse !important;
- }
-
- .flex-lg-column-reverse{
- flex-direction:column-reverse !important;
- }
-
- .flex-lg-wrap{
- flex-wrap:wrap !important;
- }
-
- .flex-lg-nowrap{
- flex-wrap:nowrap !important;
- }
-
- .flex-lg-wrap-reverse{
- flex-wrap:wrap-reverse !important;
- }
-
- .flex-lg-fill{
- flex:1 1 auto !important;
- }
-
- .flex-lg-grow-0{
- flex-grow:0 !important;
- }
-
- .flex-lg-grow-1{
- flex-grow:1 !important;
- }
-
- .flex-lg-shrink-0{
- flex-shrink:0 !important;
- }
-
- .flex-lg-shrink-1{
- flex-shrink:1 !important;
- }
-
- .justify-content-lg-start{
- justify-content:flex-start !important;
- }
-
- .justify-content-lg-end{
- justify-content:flex-end !important;
- }
-
- .justify-content-lg-center{
- justify-content:center !important;
- }
-
- .justify-content-lg-between{
- justify-content:space-between !important;
- }
-
- .justify-content-lg-around{
- justify-content:space-around !important;
- }
-
- .align-items-lg-start{
- align-items:flex-start !important;
- }
-
- .align-items-lg-end{
- align-items:flex-end !important;
- }
-
- .align-items-lg-center{
- align-items:center !important;
- }
-
- .align-items-lg-baseline{
- align-items:baseline !important;
- }
-
- .align-items-lg-stretch{
- align-items:stretch !important;
- }
-
- .align-content-lg-start{
- align-content:flex-start !important;
- }
-
- .align-content-lg-end{
- align-content:flex-end !important;
- }
-
- .align-content-lg-center{
- align-content:center !important;
- }
-
- .align-content-lg-between{
- align-content:space-between !important;
- }
-
- .align-content-lg-around{
- align-content:space-around !important;
- }
-
- .align-content-lg-stretch{
- align-content:stretch !important;
- }
-
- .align-self-lg-auto{
- align-self:auto !important;
- }
-
- .align-self-lg-start{
- align-self:flex-start !important;
- }
-
- .align-self-lg-end{
- align-self:flex-end !important;
- }
-
- .align-self-lg-center{
- align-self:center !important;
- }
-
- .align-self-lg-baseline{
- align-self:baseline !important;
- }
-
- .align-self-lg-stretch{
- align-self:stretch !important;
- }
-}
-@media (min-width: 1200px){
- .flex-xl-row{
- flex-direction:row !important;
- }
-
- .flex-xl-column{
- flex-direction:column !important;
- }
-
- .flex-xl-row-reverse{
- flex-direction:row-reverse !important;
- }
-
- .flex-xl-column-reverse{
- flex-direction:column-reverse !important;
- }
-
- .flex-xl-wrap{
- flex-wrap:wrap !important;
- }
-
- .flex-xl-nowrap{
- flex-wrap:nowrap !important;
- }
-
- .flex-xl-wrap-reverse{
- flex-wrap:wrap-reverse !important;
- }
-
- .flex-xl-fill{
- flex:1 1 auto !important;
- }
-
- .flex-xl-grow-0{
- flex-grow:0 !important;
- }
-
- .flex-xl-grow-1{
- flex-grow:1 !important;
- }
-
- .flex-xl-shrink-0{
- flex-shrink:0 !important;
- }
-
- .flex-xl-shrink-1{
- flex-shrink:1 !important;
- }
-
- .justify-content-xl-start{
- justify-content:flex-start !important;
- }
-
- .justify-content-xl-end{
- justify-content:flex-end !important;
- }
-
- .justify-content-xl-center{
- justify-content:center !important;
- }
-
- .justify-content-xl-between{
- justify-content:space-between !important;
- }
-
- .justify-content-xl-around{
- justify-content:space-around !important;
- }
-
- .align-items-xl-start{
- align-items:flex-start !important;
- }
-
- .align-items-xl-end{
- align-items:flex-end !important;
- }
-
- .align-items-xl-center{
- align-items:center !important;
- }
-
- .align-items-xl-baseline{
- align-items:baseline !important;
- }
-
- .align-items-xl-stretch{
- align-items:stretch !important;
- }
-
- .align-content-xl-start{
- align-content:flex-start !important;
- }
-
- .align-content-xl-end{
- align-content:flex-end !important;
- }
-
- .align-content-xl-center{
- align-content:center !important;
- }
-
- .align-content-xl-between{
- align-content:space-between !important;
- }
-
- .align-content-xl-around{
- align-content:space-around !important;
- }
-
- .align-content-xl-stretch{
- align-content:stretch !important;
- }
-
- .align-self-xl-auto{
- align-self:auto !important;
- }
-
- .align-self-xl-start{
- align-self:flex-start !important;
- }
-
- .align-self-xl-end{
- align-self:flex-end !important;
- }
-
- .align-self-xl-center{
- align-self:center !important;
- }
-
- .align-self-xl-baseline{
- align-self:baseline !important;
- }
-
- .align-self-xl-stretch{
- 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;
- }
-}
-.user-select-all{
- -webkit-user-select:all !important;
- -moz-user-select:all !important;
- user-select:all !important;
-}
-
-.user-select-auto{
- -webkit-user-select:auto !important;
- -moz-user-select:auto !important;
- -ms-user-select:auto !important;
- user-select:auto !important;
-}
-
-.user-select-none{
- -webkit-user-select:none !important;
- -moz-user-select:none !important;
- -ms-user-select:none !important;
- user-select:none !important;
-}
-
-.overflow-auto{
- overflow:auto !important;
-}
-
-.overflow-hidden{
- overflow:hidden !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;
- margin:-1px;
- overflow:hidden;
- clip:rect(0, 0, 0, 0);
- white-space:nowrap;
- border:0;
-}
-
-.sr-only-focusable:active, .sr-only-focusable:focus{
- position:static;
- width:auto;
- height:auto;
- overflow:visible;
- clip:auto;
- white-space:normal;
-}
-
-.shadow-sm{
- box-shadow:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important;
-}
-
-.shadow{
- box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
-}
-
-.shadow-lg{
- box-shadow:0 1rem 3rem rgba(0, 0, 0, 0.175) !important;
-}
-
-.shadow-none{
- box-shadow:none !important;
-}
-
-.w-25{
- width:25% !important;
-}
-
-.w-50{
- width:50% !important;
-}
-
-.w-75{
- width:75% !important;
-}
-
-.w-100{
- width:100% !important;
-}
-
-.w-auto{
- width:auto !important;
-}
-
-.h-25{
- height:25% !important;
-}
-
-.h-50{
- height:50% !important;
-}
-
-.h-75{
- height:75% !important;
-}
-
-.h-100{
- height:100% !important;
-}
-
-.h-auto{
- height:auto !important;
-}
-
-.mw-100{
- max-width:100% !important;
-}
-
-.mh-100{
- max-height:100% !important;
-}
-
-.min-vw-100{
- min-width:100vw !important;
-}
-
-.min-vh-100{
- min-height:100vh !important;
-}
-
-.vw-100{
- width:100vw !important;
-}
-
-.vh-100{
- height:100vh !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-n1{
- margin:-0.25rem !important;
-}
-
-.mt-n1,
-.my-n1{
- margin-top:-0.25rem !important;
-}
-
-.mr-n1,
-.mx-n1{
- margin-right:-0.25rem !important;
-}
-
-.mb-n1,
-.my-n1{
- margin-bottom:-0.25rem !important;
-}
-
-.ml-n1,
-.mx-n1{
- margin-left:-0.25rem !important;
-}
-
-.m-n2{
- margin:-0.5rem !important;
-}
-
-.mt-n2,
-.my-n2{
- margin-top:-0.5rem !important;
-}
-
-.mr-n2,
-.mx-n2{
- margin-right:-0.5rem !important;
-}
-
-.mb-n2,
-.my-n2{
- margin-bottom:-0.5rem !important;
-}
-
-.ml-n2,
-.mx-n2{
- margin-left:-0.5rem !important;
-}
-
-.m-n3{
- margin:-1rem !important;
-}
-
-.mt-n3,
-.my-n3{
- margin-top:-1rem !important;
-}
-
-.mr-n3,
-.mx-n3{
- margin-right:-1rem !important;
-}
-
-.mb-n3,
-.my-n3{
- margin-bottom:-1rem !important;
-}
-
-.ml-n3,
-.mx-n3{
- margin-left:-1rem !important;
-}
-
-.m-n4{
- margin:-1.5rem !important;
-}
-
-.mt-n4,
-.my-n4{
- margin-top:-1.5rem !important;
-}
-
-.mr-n4,
-.mx-n4{
- margin-right:-1.5rem !important;
-}
-
-.mb-n4,
-.my-n4{
- margin-bottom:-1.5rem !important;
-}
-
-.ml-n4,
-.mx-n4{
- margin-left:-1.5rem !important;
-}
-
-.m-n5{
- margin:-3rem !important;
-}
-
-.mt-n5,
-.my-n5{
- margin-top:-3rem !important;
-}
-
-.mr-n5,
-.mx-n5{
- margin-right:-3rem !important;
-}
-
-.mb-n5,
-.my-n5{
- margin-bottom:-3rem !important;
-}
-
-.ml-n5,
-.mx-n5{
- margin-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-n1{
- margin:-0.25rem !important;
- }
-
- .mt-sm-n1,
-.my-sm-n1{
- margin-top:-0.25rem !important;
- }
-
- .mr-sm-n1,
-.mx-sm-n1{
- margin-right:-0.25rem !important;
- }
-
- .mb-sm-n1,
-.my-sm-n1{
- margin-bottom:-0.25rem !important;
- }
-
- .ml-sm-n1,
-.mx-sm-n1{
- margin-left:-0.25rem !important;
- }
-
- .m-sm-n2{
- margin:-0.5rem !important;
- }
-
- .mt-sm-n2,
-.my-sm-n2{
- margin-top:-0.5rem !important;
- }
-
- .mr-sm-n2,
-.mx-sm-n2{
- margin-right:-0.5rem !important;
- }
-
- .mb-sm-n2,
-.my-sm-n2{
- margin-bottom:-0.5rem !important;
- }
-
- .ml-sm-n2,
-.mx-sm-n2{
- margin-left:-0.5rem !important;
- }
-
- .m-sm-n3{
- margin:-1rem !important;
- }
-
- .mt-sm-n3,
-.my-sm-n3{
- margin-top:-1rem !important;
- }
-
- .mr-sm-n3,
-.mx-sm-n3{
- margin-right:-1rem !important;
- }
-
- .mb-sm-n3,
-.my-sm-n3{
- margin-bottom:-1rem !important;
- }
-
- .ml-sm-n3,
-.mx-sm-n3{
- margin-left:-1rem !important;
- }
-
- .m-sm-n4{
- margin:-1.5rem !important;
- }
-
- .mt-sm-n4,
-.my-sm-n4{
- margin-top:-1.5rem !important;
- }
-
- .mr-sm-n4,
-.mx-sm-n4{
- margin-right:-1.5rem !important;
- }
-
- .mb-sm-n4,
-.my-sm-n4{
- margin-bottom:-1.5rem !important;
- }
-
- .ml-sm-n4,
-.mx-sm-n4{
- margin-left:-1.5rem !important;
- }
-
- .m-sm-n5{
- margin:-3rem !important;
- }
-
- .mt-sm-n5,
-.my-sm-n5{
- margin-top:-3rem !important;
- }
-
- .mr-sm-n5,
-.mx-sm-n5{
- margin-right:-3rem !important;
- }
-
- .mb-sm-n5,
-.my-sm-n5{
- margin-bottom:-3rem !important;
- }
-
- .ml-sm-n5,
-.mx-sm-n5{
- margin-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-n1{
- margin:-0.25rem !important;
- }
-
- .mt-md-n1,
-.my-md-n1{
- margin-top:-0.25rem !important;
- }
-
- .mr-md-n1,
-.mx-md-n1{
- margin-right:-0.25rem !important;
- }
-
- .mb-md-n1,
-.my-md-n1{
- margin-bottom:-0.25rem !important;
- }
-
- .ml-md-n1,
-.mx-md-n1{
- margin-left:-0.25rem !important;
- }
-
- .m-md-n2{
- margin:-0.5rem !important;
- }
-
- .mt-md-n2,
-.my-md-n2{
- margin-top:-0.5rem !important;
- }
-
- .mr-md-n2,
-.mx-md-n2{
- margin-right:-0.5rem !important;
- }
-
- .mb-md-n2,
-.my-md-n2{
- margin-bottom:-0.5rem !important;
- }
-
- .ml-md-n2,
-.mx-md-n2{
- margin-left:-0.5rem !important;
- }
-
- .m-md-n3{
- margin:-1rem !important;
- }
-
- .mt-md-n3,
-.my-md-n3{
- margin-top:-1rem !important;
- }
-
- .mr-md-n3,
-.mx-md-n3{
- margin-right:-1rem !important;
- }
-
- .mb-md-n3,
-.my-md-n3{
- margin-bottom:-1rem !important;
- }
-
- .ml-md-n3,
-.mx-md-n3{
- margin-left:-1rem !important;
- }
-
- .m-md-n4{
- margin:-1.5rem !important;
- }
-
- .mt-md-n4,
-.my-md-n4{
- margin-top:-1.5rem !important;
- }
-
- .mr-md-n4,
-.mx-md-n4{
- margin-right:-1.5rem !important;
- }
-
- .mb-md-n4,
-.my-md-n4{
- margin-bottom:-1.5rem !important;
- }
-
- .ml-md-n4,
-.mx-md-n4{
- margin-left:-1.5rem !important;
- }
-
- .m-md-n5{
- margin:-3rem !important;
- }
-
- .mt-md-n5,
-.my-md-n5{
- margin-top:-3rem !important;
- }
-
- .mr-md-n5,
-.mx-md-n5{
- margin-right:-3rem !important;
- }
-
- .mb-md-n5,
-.my-md-n5{
- margin-bottom:-3rem !important;
- }
-
- .ml-md-n5,
-.mx-md-n5{
- margin-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-n1{
- margin:-0.25rem !important;
- }
-
- .mt-lg-n1,
-.my-lg-n1{
- margin-top:-0.25rem !important;
- }
-
- .mr-lg-n1,
-.mx-lg-n1{
- margin-right:-0.25rem !important;
- }
-
- .mb-lg-n1,
-.my-lg-n1{
- margin-bottom:-0.25rem !important;
- }
-
- .ml-lg-n1,
-.mx-lg-n1{
- margin-left:-0.25rem !important;
- }
-
- .m-lg-n2{
- margin:-0.5rem !important;
- }
-
- .mt-lg-n2,
-.my-lg-n2{
- margin-top:-0.5rem !important;
- }
-
- .mr-lg-n2,
-.mx-lg-n2{
- margin-right:-0.5rem !important;
- }
-
- .mb-lg-n2,
-.my-lg-n2{
- margin-bottom:-0.5rem !important;
- }
-
- .ml-lg-n2,
-.mx-lg-n2{
- margin-left:-0.5rem !important;
- }
-
- .m-lg-n3{
- margin:-1rem !important;
- }
-
- .mt-lg-n3,
-.my-lg-n3{
- margin-top:-1rem !important;
- }
-
- .mr-lg-n3,
-.mx-lg-n3{
- margin-right:-1rem !important;
- }
-
- .mb-lg-n3,
-.my-lg-n3{
- margin-bottom:-1rem !important;
- }
-
- .ml-lg-n3,
-.mx-lg-n3{
- margin-left:-1rem !important;
- }
-
- .m-lg-n4{
- margin:-1.5rem !important;
- }
-
- .mt-lg-n4,
-.my-lg-n4{
- margin-top:-1.5rem !important;
- }
-
- .mr-lg-n4,
-.mx-lg-n4{
- margin-right:-1.5rem !important;
- }
-
- .mb-lg-n4,
-.my-lg-n4{
- margin-bottom:-1.5rem !important;
- }
-
- .ml-lg-n4,
-.mx-lg-n4{
- margin-left:-1.5rem !important;
- }
-
- .m-lg-n5{
- margin:-3rem !important;
- }
-
- .mt-lg-n5,
-.my-lg-n5{
- margin-top:-3rem !important;
- }
-
- .mr-lg-n5,
-.mx-lg-n5{
- margin-right:-3rem !important;
- }
-
- .mb-lg-n5,
-.my-lg-n5{
- margin-bottom:-3rem !important;
- }
-
- .ml-lg-n5,
-.mx-lg-n5{
- margin-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-n1{
- margin:-0.25rem !important;
- }
-
- .mt-xl-n1,
-.my-xl-n1{
- margin-top:-0.25rem !important;
- }
-
- .mr-xl-n1,
-.mx-xl-n1{
- margin-right:-0.25rem !important;
- }
-
- .mb-xl-n1,
-.my-xl-n1{
- margin-bottom:-0.25rem !important;
- }
-
- .ml-xl-n1,
-.mx-xl-n1{
- margin-left:-0.25rem !important;
- }
-
- .m-xl-n2{
- margin:-0.5rem !important;
- }
-
- .mt-xl-n2,
-.my-xl-n2{
- margin-top:-0.5rem !important;
- }
-
- .mr-xl-n2,
-.mx-xl-n2{
- margin-right:-0.5rem !important;
- }
-
- .mb-xl-n2,
-.my-xl-n2{
- margin-bottom:-0.5rem !important;
- }
-
- .ml-xl-n2,
-.mx-xl-n2{
- margin-left:-0.5rem !important;
- }
-
- .m-xl-n3{
- margin:-1rem !important;
- }
-
- .mt-xl-n3,
-.my-xl-n3{
- margin-top:-1rem !important;
- }
-
- .mr-xl-n3,
-.mx-xl-n3{
- margin-right:-1rem !important;
- }
-
- .mb-xl-n3,
-.my-xl-n3{
- margin-bottom:-1rem !important;
- }
-
- .ml-xl-n3,
-.mx-xl-n3{
- margin-left:-1rem !important;
- }
-
- .m-xl-n4{
- margin:-1.5rem !important;
- }
-
- .mt-xl-n4,
-.my-xl-n4{
- margin-top:-1.5rem !important;
- }
-
- .mr-xl-n4,
-.mx-xl-n4{
- margin-right:-1.5rem !important;
- }
-
- .mb-xl-n4,
-.my-xl-n4{
- margin-bottom:-1.5rem !important;
- }
-
- .ml-xl-n4,
-.mx-xl-n4{
- margin-left:-1.5rem !important;
- }
-
- .m-xl-n5{
- margin:-3rem !important;
- }
-
- .mt-xl-n5,
-.my-xl-n5{
- margin-top:-3rem !important;
- }
-
- .mr-xl-n5,
-.mx-xl-n5{
- margin-right:-3rem !important;
- }
-
- .mb-xl-n5,
-.my-xl-n5{
- margin-bottom:-3rem !important;
- }
-
- .ml-xl-n5,
-.mx-xl-n5{
- margin-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;
- }
-}
-.stretched-link::after{
- position:absolute;
- top:0;
- right:0;
- bottom:0;
- left:0;
- z-index:1;
- pointer-events:auto;
- content:"";
- background-color:rgba(0, 0, 0, 0);
-}
-
-.text-monospace{
- font-family:SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important;
-}
-
-.text-justify{
- text-align:justify !important;
-}
-
-.text-wrap{
- white-space:normal !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-lighter{
- font-weight:lighter !important;
-}
-
-.font-weight-normal{
- font-weight:400 !important;
-}
-
-.font-weight-bold{
- font-weight:700 !important;
-}
-
-.font-weight-bolder{
- font-weight:bolder !important;
-}
-
-.font-italic{
- font-style:italic !important;
-}
-
-.text-white{
- color:#fff !important;
-}
-
-.text-primary{
- color:#3490dc !important;
-}
-
-a.text-primary:hover, a.text-primary:focus{
- color:#1d68a7 !important;
-}
-
-.text-secondary{
- color:#6c757d !important;
-}
-
-a.text-secondary:hover, a.text-secondary:focus{
- color:#494f54 !important;
-}
-
-.text-success{
- color:#38c172 !important;
-}
-
-a.text-success:hover, a.text-success:focus{
- color:#27864f !important;
-}
-
-.text-info{
- color:#6cb2eb !important;
-}
-
-a.text-info:hover, a.text-info:focus{
- color:#298fe2 !important;
-}
-
-.text-warning{
- color:#ffed4a !important;
-}
-
-a.text-warning:hover, a.text-warning:focus{
- color:#fde300 !important;
-}
-
-.text-danger{
- color:#e3342f !important;
-}
-
-a.text-danger:hover, a.text-danger:focus{
- color:#ae1c17 !important;
-}
-
-.text-light{
- color:#f8f9fa !important;
-}
-
-a.text-light:hover, a.text-light:focus{
- color:#cbd3da !important;
-}
-
-.text-dark{
- color:#343a40 !important;
-}
-
-a.text-dark:hover, a.text-dark:focus{
- color:#121416 !important;
-}
-
-.text-body{
- color:#212529 !important;
-}
-
-.text-muted{
- color:#6c757d !important;
-}
-
-.text-black-50{
- color:rgba(0, 0, 0, 0.5) !important;
-}
-
-.text-white-50{
- color:rgba(255, 255, 255, 0.5) !important;
-}
-
-.text-hide{
- font:0/0 a;
- color:transparent;
- text-shadow:none;
- background-color:transparent;
- border:0;
-}
-
-.text-decoration-none{
- text-decoration:none !important;
-}
-
-.text-break{
- word-break:break-word !important;
- word-wrap:break-word !important;
-}
-
-.text-reset{
- color:inherit !important;
-}
-
-.visible{
- visibility:visible !important;
-}
-
-.invisible{
- visibility:hidden !important;
-}
-
-@media print{
- *,
-*::before,
-*::after{
- text-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 #adb5bd;
- page-break-inside:avoid;
- }
-
- 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 #dee2e6 !important;
- }
-
- .table-dark{
- color:inherit;
- }
- .table-dark th,
-.table-dark td,
-.table-dark thead th,
-.table-dark tbody + tbody{
- border-color:#dee2e6;
- }
-
- .table .thead-dark th{
- color:inherit;
- border-color:#dee2e6;
- }
-}
-body.compensate-for-scrollbar{
- overflow:hidden;
-}
-
-.fancybox-active{
- height:auto;
-}
-
-.fancybox-is-hidden{
- left:-9999px;
- margin:0;
- position:absolute !important;
- top:-9999px;
- visibility:hidden;
-}
-
-.fancybox-container{
- -webkit-backface-visibility:hidden;
- height:100%;
- left:0;
- outline:none;
- position:fixed;
- -webkit-tap-highlight-color:transparent;
- top:0;
- touch-action:manipulation;
- transform:translateZ(0);
- width:100%;
- z-index:99992;
-}
-
-.fancybox-container *{
- box-sizing:border-box;
-}
-
-.fancybox-outer,
-.fancybox-inner,
-.fancybox-bg,
-.fancybox-stage{
- bottom:0;
- left:0;
- position:absolute;
- right:0;
- top:0;
-}
-
-.fancybox-outer{
- -webkit-overflow-scrolling:touch;
- overflow-y:auto;
-}
-
-.fancybox-bg{
- background:rgb(30, 30, 30);
- opacity:0;
- transition-duration:inherit;
- transition-property:opacity;
- transition-timing-function:cubic-bezier(0.47, 0, 0.74, 0.71);
-}
-
-.fancybox-is-open .fancybox-bg{
- opacity:0.9;
- transition-timing-function:cubic-bezier(0.22, 0.61, 0.36, 1);
-}
-
-.fancybox-infobar,
-.fancybox-toolbar,
-.fancybox-caption,
-.fancybox-navigation .fancybox-button{
- direction:ltr;
- opacity:0;
- position:absolute;
- transition:opacity 0.25s ease, visibility 0s ease 0.25s;
- visibility:hidden;
- z-index:99997;
-}
-
-.fancybox-show-infobar .fancybox-infobar,
-.fancybox-show-toolbar .fancybox-toolbar,
-.fancybox-show-caption .fancybox-caption,
-.fancybox-show-nav .fancybox-navigation .fancybox-button{
- opacity:1;
- transition:opacity 0.25s ease 0s, visibility 0s ease 0s;
- visibility:visible;
-}
-
-.fancybox-infobar{
- color:#ccc;
- font-size:13px;
- -webkit-font-smoothing:subpixel-antialiased;
- height:44px;
- left:0;
- line-height:44px;
- min-width:44px;
- mix-blend-mode:difference;
- padding:0 10px;
- pointer-events:none;
- top:0;
- -webkit-touch-callout:none;
- -webkit-user-select:none;
- -moz-user-select:none;
- -ms-user-select:none;
- user-select:none;
-}
-
-.fancybox-toolbar{
- right:0;
- top:0;
-}
-
-.fancybox-stage{
- direction:ltr;
- overflow:visible;
- transform:translateZ(0);
- z-index:99994;
-}
-
-.fancybox-is-open .fancybox-stage{
- overflow:hidden;
-}
-
-.fancybox-slide{
- -webkit-backface-visibility:hidden;
- display:none;
- height:100%;
- left:0;
- outline:none;
- overflow:auto;
- -webkit-overflow-scrolling:touch;
- padding:44px;
- position:absolute;
- text-align:center;
- top:0;
- transition-property:transform, opacity;
- white-space:normal;
- width:100%;
- z-index:99994;
-}
-
-.fancybox-slide::before{
- content:"";
- display:inline-block;
- font-size:0;
- height:100%;
- vertical-align:middle;
- width:0;
-}
-
-.fancybox-is-sliding .fancybox-slide,
-.fancybox-slide--previous,
-.fancybox-slide--current,
-.fancybox-slide--next{
- display:block;
-}
-
-.fancybox-slide--image{
- overflow:hidden;
- padding:44px 0;
-}
-
-.fancybox-slide--image::before{
- display:none;
-}
-
-.fancybox-slide--html{
- padding:6px;
-}
-
-.fancybox-content{
- background:#fff;
- display:inline-block;
- margin:0;
- max-width:100%;
- overflow:auto;
- -webkit-overflow-scrolling:touch;
- padding:44px;
- position:relative;
- text-align:left;
- vertical-align:middle;
-}
-
-.fancybox-slide--image .fancybox-content{
- -webkit-animation-timing-function:cubic-bezier(0.5, 0, 0.14, 1);
- animation-timing-function:cubic-bezier(0.5, 0, 0.14, 1);
- -webkit-backface-visibility:hidden;
- background:transparent;
- background-repeat:no-repeat;
- background-size:100% 100%;
- left:0;
- max-width:none;
- overflow:visible;
- padding:0;
- position:absolute;
- top:0;
- transform-origin:top left;
- transition-property:transform, opacity;
- -webkit-user-select:none;
- -moz-user-select:none;
- -ms-user-select:none;
- user-select:none;
- z-index:99995;
-}
-
-.fancybox-can-zoomOut .fancybox-content{
- cursor:zoom-out;
-}
-
-.fancybox-can-zoomIn .fancybox-content{
- cursor:zoom-in;
-}
-
-.fancybox-can-swipe .fancybox-content,
-.fancybox-can-pan .fancybox-content{
- cursor:-webkit-grab;
- cursor:grab;
-}
-
-.fancybox-is-grabbing .fancybox-content{
- cursor:-webkit-grabbing;
- cursor:grabbing;
-}
-
-.fancybox-container [data-selectable=true]{
- cursor:text;
-}
-
-.fancybox-image,
-.fancybox-spaceball{
- background:transparent;
- border:0;
- height:100%;
- left:0;
- margin:0;
- max-height:none;
- max-width:none;
- padding:0;
- position:absolute;
- top:0;
- -webkit-user-select:none;
- -moz-user-select:none;
- -ms-user-select:none;
- user-select:none;
- width:100%;
-}
-
-.fancybox-spaceball{
- z-index:1;
-}
-
-.fancybox-slide--video .fancybox-content,
-.fancybox-slide--map .fancybox-content,
-.fancybox-slide--pdf .fancybox-content,
-.fancybox-slide--iframe .fancybox-content{
- height:100%;
- overflow:visible;
- padding:0;
- width:100%;
-}
-
-.fancybox-slide--video .fancybox-content{
- background:#000;
-}
-
-.fancybox-slide--map .fancybox-content{
- background:#e5e3df;
-}
-
-.fancybox-slide--iframe .fancybox-content{
- background:#fff;
-}
-
-.fancybox-video,
-.fancybox-iframe{
- background:transparent;
- border:0;
- display:block;
- height:100%;
- margin:0;
- overflow:hidden;
- padding:0;
- width:100%;
-}
-.fancybox-iframe{
- left:0;
- position:absolute;
- top:0;
-}
-
-.fancybox-error{
- background:#fff;
- cursor:default;
- max-width:400px;
- padding:40px;
- width:100%;
-}
-
-.fancybox-error p{
- color:#444;
- font-size:16px;
- line-height:20px;
- margin:0;
- padding:0;
-}
-.fancybox-button{
- background:rgba(30, 30, 30, 0.6);
- border:0;
- border-radius:0;
- box-shadow:none;
- cursor:pointer;
- display:inline-block;
- height:44px;
- margin:0;
- padding:10px;
- position:relative;
- transition:color 0.2s;
- vertical-align:top;
- visibility:inherit;
- width:44px;
-}
-
-.fancybox-button,
-.fancybox-button:visited,
-.fancybox-button:link{
- color:#ccc;
-}
-
-.fancybox-button:hover{
- color:#fff;
-}
-
-.fancybox-button:focus{
- outline:none;
-}
-
-.fancybox-button.fancybox-focus{
- outline:1px dotted;
-}
-
-.fancybox-button[disabled],
-.fancybox-button[disabled]:hover{
- color:#888;
- cursor:default;
- outline:none;
-}
-.fancybox-button div{
- height:100%;
-}
-
-.fancybox-button svg{
- display:block;
- height:100%;
- overflow:visible;
- position:relative;
- width:100%;
-}
-
-.fancybox-button svg path{
- fill:currentColor;
- stroke-width:0;
-}
-
-.fancybox-button--play svg:nth-child(2),
-.fancybox-button--fsenter svg:nth-child(2){
- display:none;
-}
-
-.fancybox-button--pause svg:nth-child(1),
-.fancybox-button--fsexit svg:nth-child(1){
- display:none;
-}
-
-.fancybox-progress{
- background:#ff5268;
- height:2px;
- left:0;
- position:absolute;
- right:0;
- top:0;
- transform:scaleX(0);
- transform-origin:0;
- transition-property:transform;
- transition-timing-function:linear;
- z-index:99998;
-}
-.fancybox-close-small{
- background:transparent;
- border:0;
- border-radius:0;
- color:#ccc;
- cursor:pointer;
- opacity:0.8;
- padding:8px;
- position:absolute;
- right:-12px;
- top:-44px;
- z-index:401;
-}
-
-.fancybox-close-small:hover{
- color:#fff;
- opacity:1;
-}
-
-.fancybox-slide--html .fancybox-close-small{
- color:currentColor;
- padding:10px;
- right:0;
- top:0;
-}
-
-.fancybox-slide--image.fancybox-is-scaling .fancybox-content{
- overflow:hidden;
-}
-
-.fancybox-is-scaling .fancybox-close-small,
-.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small{
- display:none;
-}
-.fancybox-navigation .fancybox-button{
- background-clip:content-box;
- height:100px;
- opacity:0;
- position:absolute;
- top:calc(50% - 50px);
- width:70px;
-}
-
-.fancybox-navigation .fancybox-button div{
- padding:7px;
-}
-
-.fancybox-navigation .fancybox-button--arrow_left{
- left:0;
- left:env(safe-area-inset-left);
- padding:31px 26px 31px 6px;
-}
-
-.fancybox-navigation .fancybox-button--arrow_right{
- padding:31px 6px 31px 26px;
- right:0;
- right:env(safe-area-inset-right);
-}
-.fancybox-caption{
- background:linear-gradient(to top, rgba(0, 0, 0, 0.85) 0%, rgba(0, 0, 0, 0.3) 50%, rgba(0, 0, 0, 0.15) 65%, rgba(0, 0, 0, 0.075) 75.5%, rgba(0, 0, 0, 0.037) 82.85%, rgba(0, 0, 0, 0.019) 88%, rgba(0, 0, 0, 0) 100%);
- bottom:0;
- color:#eee;
- font-size:14px;
- font-weight:400;
- left:0;
- line-height:1.5;
- padding:75px 44px 25px 44px;
- pointer-events:none;
- right:0;
- text-align:center;
- z-index:99996;
-}
-
-@supports (padding: 0px){
- .fancybox-caption{
- padding:75px max(44px, env(safe-area-inset-right)) max(25px, env(safe-area-inset-bottom)) max(44px, env(safe-area-inset-left));
- }
-}
-.fancybox-caption--separate{
- margin-top:-50px;
-}
-
-.fancybox-caption__body{
- max-height:50vh;
- overflow:auto;
- pointer-events:all;
-}
-
-.fancybox-caption a,
-.fancybox-caption a:link,
-.fancybox-caption a:visited{
- color:#ccc;
- text-decoration:none;
-}
-
-.fancybox-caption a:hover{
- color:#fff;
- text-decoration:underline;
-}
-.fancybox-loading{
- -webkit-animation:fancybox-rotate 1s linear infinite;
- animation:fancybox-rotate 1s linear infinite;
- background:transparent;
- border:4px solid #888;
- border-bottom-color:#fff;
- border-radius:50%;
- height:50px;
- left:50%;
- margin:-25px 0 0 -25px;
- opacity:0.7;
- padding:0;
- position:absolute;
- top:50%;
- width:50px;
- z-index:99999;
-}
-
-@-webkit-keyframes fancybox-rotate{
- 100%{
- transform:rotate(360deg);
- }
-}
-
-@keyframes fancybox-rotate{
- 100%{
- transform:rotate(360deg);
- }
-}
-.fancybox-animated{
- transition-timing-function:cubic-bezier(0, 0, 0.25, 1);
-}
-.fancybox-fx-slide.fancybox-slide--previous{
- opacity:0;
- transform:translate3d(-100%, 0, 0);
-}
-
-.fancybox-fx-slide.fancybox-slide--next{
- opacity:0;
- transform:translate3d(100%, 0, 0);
-}
-
-.fancybox-fx-slide.fancybox-slide--current{
- opacity:1;
- transform:translate3d(0, 0, 0);
-}
-.fancybox-fx-fade.fancybox-slide--previous,
-.fancybox-fx-fade.fancybox-slide--next{
- opacity:0;
- transition-timing-function:cubic-bezier(0.19, 1, 0.22, 1);
-}
-
-.fancybox-fx-fade.fancybox-slide--current{
- opacity:1;
-}
-.fancybox-fx-zoom-in-out.fancybox-slide--previous{
- opacity:0;
- transform:scale3d(1.5, 1.5, 1.5);
-}
-
-.fancybox-fx-zoom-in-out.fancybox-slide--next{
- opacity:0;
- transform:scale3d(0.5, 0.5, 0.5);
-}
-
-.fancybox-fx-zoom-in-out.fancybox-slide--current{
- opacity:1;
- transform:scale3d(1, 1, 1);
-}
-.fancybox-fx-rotate.fancybox-slide--previous{
- opacity:0;
- transform:rotate(-360deg);
-}
-
-.fancybox-fx-rotate.fancybox-slide--next{
- opacity:0;
- transform:rotate(360deg);
-}
-
-.fancybox-fx-rotate.fancybox-slide--current{
- opacity:1;
- transform:rotate(0deg);
-}
-.fancybox-fx-circular.fancybox-slide--previous{
- opacity:0;
- transform:scale3d(0, 0, 0) translate3d(-100%, 0, 0);
-}
-
-.fancybox-fx-circular.fancybox-slide--next{
- opacity:0;
- transform:scale3d(0, 0, 0) translate3d(100%, 0, 0);
-}
-
-.fancybox-fx-circular.fancybox-slide--current{
- opacity:1;
- transform:scale3d(1, 1, 1) translate3d(0, 0, 0);
-}
-.fancybox-fx-tube.fancybox-slide--previous{
- transform:translate3d(-100%, 0, 0) scale(0.1) skew(-10deg);
-}
-
-.fancybox-fx-tube.fancybox-slide--next{
- transform:translate3d(100%, 0, 0) scale(0.1) skew(10deg);
-}
-
-.fancybox-fx-tube.fancybox-slide--current{
- transform:translate3d(0, 0, 0) scale(1);
-}
-@media all and (max-height: 576px){
- .fancybox-slide{
- padding-left:6px;
- padding-right:6px;
- }
-
- .fancybox-slide--image{
- padding:6px 0;
- }
-
- .fancybox-close-small{
- right:-6px;
- }
-
- .fancybox-slide--image .fancybox-close-small{
- background:#4e4e4e;
- color:#f2f4f6;
- height:36px;
- opacity:1;
- padding:6px;
- right:0;
- top:0;
- width:36px;
- }
-
- .fancybox-caption{
- padding-left:12px;
- padding-right:12px;
- }
-
- @supports (padding: 0px){
- .fancybox-caption{
- padding-left:max(12px, env(safe-area-inset-left));
- padding-right:max(12px, env(safe-area-inset-right));
- }
- }
-}
-.fancybox-share{
- background:#f4f4f4;
- border-radius:3px;
- max-width:90%;
- padding:30px;
- text-align:center;
-}
-
-.fancybox-share h1{
- color:#222;
- font-size:35px;
- font-weight:700;
- margin:0 0 20px 0;
-}
-
-.fancybox-share p{
- margin:0;
- padding:0;
-}
-
-.fancybox-share__button{
- border:0;
- border-radius:3px;
- display:inline-block;
- font-size:14px;
- font-weight:700;
- line-height:40px;
- margin:0 5px 10px 5px;
- min-width:130px;
- padding:0 15px;
- text-decoration:none;
- transition:all 0.2s;
- -webkit-user-select:none;
- -moz-user-select:none;
- -ms-user-select:none;
- user-select:none;
- white-space:nowrap;
-}
-
-.fancybox-share__button:visited,
-.fancybox-share__button:link{
- color:#fff;
-}
-
-.fancybox-share__button:hover{
- text-decoration:none;
-}
-
-.fancybox-share__button--fb{
- background:#3b5998;
-}
-
-.fancybox-share__button--fb:hover{
- background:#344e86;
-}
-
-.fancybox-share__button--pt{
- background:#bd081d;
-}
-
-.fancybox-share__button--pt:hover{
- background:#aa0719;
-}
-
-.fancybox-share__button--tw{
- background:#1da1f2;
-}
-
-.fancybox-share__button--tw:hover{
- background:#0d95e8;
-}
-
-.fancybox-share__button svg{
- height:25px;
- margin-right:7px;
- position:relative;
- top:-1px;
- vertical-align:middle;
- width:25px;
-}
-
-.fancybox-share__button svg path{
- fill:#fff;
-}
-
-.fancybox-share__input{
- background:transparent;
- border:0;
- border-bottom:1px solid #d7d7d7;
- border-radius:0;
- color:#5d5b5b;
- font-size:14px;
- margin:10px 0 0 0;
- outline:none;
- padding:10px 15px;
- width:100%;
-}
-.fancybox-thumbs{
- background:#ddd;
- bottom:0;
- display:none;
- margin:0;
- -webkit-overflow-scrolling:touch;
- -ms-overflow-style:-ms-autohiding-scrollbar;
- padding:2px 2px 4px 2px;
- position:absolute;
- right:0;
- -webkit-tap-highlight-color:rgba(0, 0, 0, 0);
- top:0;
- width:212px;
- z-index:99995;
-}
-
-.fancybox-thumbs-x{
- overflow-x:auto;
- overflow-y:hidden;
-}
-
-.fancybox-show-thumbs .fancybox-thumbs{
- display:block;
-}
-
-.fancybox-show-thumbs .fancybox-inner{
- right:212px;
-}
-
-.fancybox-thumbs__list{
- font-size:0;
- height:100%;
- list-style:none;
- margin:0;
- overflow-x:hidden;
- overflow-y:auto;
- padding:0;
- position:absolute;
- position:relative;
- white-space:nowrap;
- width:100%;
-}
-
-.fancybox-thumbs-x .fancybox-thumbs__list{
- overflow:hidden;
-}
-
-.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar{
- width:7px;
-}
-
-.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track{
- background:#fff;
- border-radius:10px;
- box-shadow:inset 0 0 6px rgba(0, 0, 0, 0.3);
-}
-
-.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb{
- background:#2a2a2a;
- border-radius:10px;
-}
-
-.fancybox-thumbs__list a{
- -webkit-backface-visibility:hidden;
- backface-visibility:hidden;
- background-color:rgba(0, 0, 0, 0.1);
- background-position:center center;
- background-repeat:no-repeat;
- background-size:cover;
- cursor:pointer;
- float:left;
- height:75px;
- margin:2px;
- max-height:calc(100% - 8px);
- max-width:calc(50% - 4px);
- outline:none;
- overflow:hidden;
- padding:0;
- position:relative;
- -webkit-tap-highlight-color:transparent;
- width:100px;
-}
-
-.fancybox-thumbs__list a::before{
- border:6px solid #ff5268;
- bottom:0;
- content:"";
- left:0;
- opacity:0;
- position:absolute;
- right:0;
- top:0;
- transition:all 0.2s cubic-bezier(0.25, 0.46, 0.45, 0.94);
- z-index:99991;
-}
-
-.fancybox-thumbs__list a:focus::before{
- opacity:0.5;
-}
-
-.fancybox-thumbs__list a.fancybox-thumbs-active::before{
- opacity:1;
-}
-@media all and (max-width: 576px){
- .fancybox-thumbs{
- width:110px;
- }
-
- .fancybox-show-thumbs .fancybox-inner{
- right:110px;
- }
-
- .fancybox-thumbs__list a{
- max-width:calc(100% - 10px);
- }
-}
-.onoffswitch{
- position:relative;
- width:80px;
- -webkit-user-select:none;
- -moz-user-select:none;
- -ms-user-select:none;
-}
-
-.onoffswitch-checkbox{
- position:absolute;
- opacity:0;
- pointer-events:none;
-}
-
-.onoffswitch-label{
- display:block;
- overflow:hidden;
- cursor:pointer;
- border:2px solid #999999;
- border-radius:8px;
-}
-
-.onoffswitch-inner{
- display:block;
- width:200%;
- margin-left:-100%;
- transition:margin 0.3s ease-in 0s;
-}
-
-.onoffswitch-inner:before, .onoffswitch-inner:after{
- display:block;
- float:left;
- width:50%;
- height:35px;
- padding:0;
- line-height:35px;
- font-size:15px;
- color:white;
- font-family:Trebuchet, Arial, sans-serif;
- font-weight:bold;
- box-sizing:border-box;
-}
-
-.onoffswitch-inner:before{
- content:"Oui";
- padding-left:10px;
- background-color:#2196F3;
- color:#FFFFFF;
-}
-
-.onoffswitch-inner:after{
- content:"Non";
- padding-right:10px;
- background-color:#CCCCCC;
- color:#999999;
- text-align:right;
-}
-
-.onoffswitch-switch{
- display:block;
- width:22px;
- margin:6.5px;
- background:#FFFFFF;
- position:absolute;
- top:0;
- bottom:0;
- right:41px;
- border:2px solid #999999;
- border-radius:8px;
- transition:all 0.3s ease-in 0s;
-}
-
-.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner{
- margin-left:0;
-}
-
-.onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch{
- right:0px;
-}
-.required-asterisk{
- color:red;
-}
-
-.game-name{
- text-align:center;
- font-size:large;
-}
diff --git a/public/js/app.js b/public/js/app.js
deleted file mode 100644
index 1248bad..0000000
--- a/public/js/app.js
+++ /dev/null
@@ -1,101133 +0,0 @@
-/******/ (() => { // webpackBootstrap
-/******/ var __webpack_modules__ = ({
-
-/***/ "./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js":
-/*!******************************************************************!*\
- !*** ./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js ***!
- \******************************************************************/
-/***/ (() => {
-
-// ==================================================
-// fancyBox v3.5.7
-//
-// Licensed GPLv3 for open source use
-// or fancyBox Commercial License for commercial use
-//
-// http://fancyapps.com/fancybox/
-// Copyright 2019 fancyApps
-//
-// ==================================================
-(function (window, document, $, undefined) {
- "use strict";
-
- window.console = window.console || {
- info: function (stuff) {}
- };
-
- // If there's no jQuery, fancyBox can't work
- // =========================================
-
- if (!$) {
- return;
- }
-
- // Check if fancyBox is already initialized
- // ========================================
-
- if ($.fn.fancybox) {
- console.info("fancyBox already initialized");
-
- return;
- }
-
- // Private default settings
- // ========================
-
- var defaults = {
- // Close existing modals
- // Set this to false if you do not need to stack multiple instances
- closeExisting: false,
-
- // Enable infinite gallery navigation
- loop: false,
-
- // Horizontal space between slides
- gutter: 50,
-
- // Enable keyboard navigation
- keyboard: true,
-
- // Should allow caption to overlap the content
- preventCaptionOverlap: true,
-
- // Should display navigation arrows at the screen edges
- arrows: true,
-
- // Should display counter at the top left corner
- infobar: true,
-
- // Should display close button (using `btnTpl.smallBtn` template) over the content
- // Can be true, false, "auto"
- // If "auto" - will be automatically enabled for "html", "inline" or "ajax" items
- smallBtn: "auto",
-
- // Should display toolbar (buttons at the top)
- // Can be true, false, "auto"
- // If "auto" - will be automatically hidden if "smallBtn" is enabled
- toolbar: "auto",
-
- // What buttons should appear in the top right corner.
- // Buttons will be created using templates from `btnTpl` option
- // and they will be placed into toolbar (class="fancybox-toolbar"` element)
- buttons: [
- "zoom",
- //"share",
- "slideShow",
- //"fullScreen",
- //"download",
- "thumbs",
- "close"
- ],
-
- // Detect "idle" time in seconds
- idleTime: 3,
-
- // Disable right-click and use simple image protection for images
- protect: false,
-
- // Shortcut to make content "modal" - disable keyboard navigtion, hide buttons, etc
- modal: false,
-
- image: {
- // Wait for images to load before displaying
- // true - wait for image to load and then display;
- // false - display thumbnail and load the full-sized image over top,
- // requires predefined image dimensions (`data-width` and `data-height` attributes)
- preload: false
- },
-
- ajax: {
- // Object containing settings for ajax request
- settings: {
- // This helps to indicate that request comes from the modal
- // Feel free to change naming
- data: {
- fancybox: true
- }
- }
- },
-
- iframe: {
- // Iframe template
- tpl: '',
-
- // Preload iframe before displaying it
- // This allows to calculate iframe content width and height
- // (note: Due to "Same Origin Policy", you can't get cross domain data).
- preload: true,
-
- // Custom CSS styling for iframe wrapping element
- // You can use this to set custom iframe dimensions
- css: {},
-
- // Iframe tag attributes
- attr: {
- scrolling: "auto"
- }
- },
-
- // For HTML5 video only
- video: {
- tpl: '' +
- ' ' +
- 'Sorry, your browser doesn\'t support embedded videos, download and watch with your favorite video player!' +
- " ",
- format: "", // custom video format
- autoStart: true
- },
-
- // Default content type if cannot be detected automatically
- defaultType: "image",
-
- // Open/close animation type
- // Possible values:
- // false - disable
- // "zoom" - zoom images from/to thumbnail
- // "fade"
- // "zoom-in-out"
- //
- animationEffect: "zoom",
-
- // Duration in ms for open/close animation
- animationDuration: 366,
-
- // Should image change opacity while zooming
- // If opacity is "auto", then opacity will be changed if image and thumbnail have different aspect ratios
- zoomOpacity: "auto",
-
- // Transition effect between slides
- //
- // Possible values:
- // false - disable
- // "fade'
- // "slide'
- // "circular'
- // "tube'
- // "zoom-in-out'
- // "rotate'
- //
- transitionEffect: "fade",
-
- // Duration in ms for transition animation
- transitionDuration: 366,
-
- // Custom CSS class for slide element
- slideClass: "",
-
- // Custom CSS class for layout
- baseClass: "",
-
- // Base template for layout
- baseTpl: '
' +
- '
' +
- '
' +
- '
/
' +
- '
{{buttons}}
' +
- '
{{arrows}}
' +
- '
' +
- '
' +
- "
" +
- "
",
-
- // Loading indicator template
- spinnerTpl: '
',
-
- // Error message template
- errorTpl: '',
-
- btnTpl: {
- download: '' +
- ' ' +
- " ",
-
- zoom: '' +
- ' ' +
- " ",
-
- close: '' +
- ' ' +
- " ",
-
- // Arrows
- arrowLeft: '' +
- '' +
- " ",
-
- arrowRight: '' +
- '' +
- " ",
-
- // This small close button will be appended to your html/inline/ajax content by default,
- // if "smallBtn" option is not set to false
- smallBtn: '' +
- ' ' +
- " "
- },
-
- // Container is injected into this element
- parentEl: "body",
-
- // Hide browser vertical scrollbars; use at your own risk
- hideScrollbar: true,
-
- // Focus handling
- // ==============
-
- // Try to focus on the first focusable element after opening
- autoFocus: true,
-
- // Put focus back to active element after closing
- backFocus: true,
-
- // Do not let user to focus on element outside modal content
- trapFocus: true,
-
- // Module specific options
- // =======================
-
- fullScreen: {
- autoStart: false
- },
-
- // Set `touch: false` to disable panning/swiping
- touch: {
- vertical: true, // Allow to drag content vertically
- momentum: true // Continue movement after releasing mouse/touch when panning
- },
-
- // Hash value when initializing manually,
- // set `false` to disable hash change
- hash: null,
-
- // Customize or add new media types
- // Example:
- /*
- media : {
- youtube : {
- params : {
- autoplay : 0
- }
- }
- }
- */
- media: {},
-
- slideShow: {
- autoStart: false,
- speed: 3000
- },
-
- thumbs: {
- autoStart: false, // Display thumbnails on opening
- hideOnClose: true, // Hide thumbnail grid when closing animation starts
- parentEl: ".fancybox-container", // Container is injected into this element
- axis: "y" // Vertical (y) or horizontal (x) scrolling
- },
-
- // Use mousewheel to navigate gallery
- // If 'auto' - enabled for images only
- wheel: "auto",
-
- // Callbacks
- //==========
-
- // See Documentation/API/Events for more information
- // Example:
- /*
- afterShow: function( instance, current ) {
- console.info( 'Clicked element:' );
- console.info( current.opts.$orig );
- }
- */
-
- onInit: $.noop, // When instance has been initialized
-
- beforeLoad: $.noop, // Before the content of a slide is being loaded
- afterLoad: $.noop, // When the content of a slide is done loading
-
- beforeShow: $.noop, // Before open animation starts
- afterShow: $.noop, // When content is done loading and animating
-
- beforeClose: $.noop, // Before the instance attempts to close. Return false to cancel the close.
- afterClose: $.noop, // After instance has been closed
-
- onActivate: $.noop, // When instance is brought to front
- onDeactivate: $.noop, // When other instance has been activated
-
- // Interaction
- // ===========
-
- // Use options below to customize taken action when user clicks or double clicks on the fancyBox area,
- // each option can be string or method that returns value.
- //
- // Possible values:
- // "close" - close instance
- // "next" - move to next gallery item
- // "nextOrClose" - move to next gallery item or close if gallery has only one item
- // "toggleControls" - show/hide controls
- // "zoom" - zoom image (if loaded)
- // false - do nothing
-
- // Clicked on the content
- clickContent: function (current, event) {
- return current.type === "image" ? "zoom" : false;
- },
-
- // Clicked on the slide
- clickSlide: "close",
-
- // Clicked on the background (backdrop) element;
- // if you have not changed the layout, then most likely you need to use `clickSlide` option
- clickOutside: "close",
-
- // Same as previous two, but for double click
- dblclickContent: false,
- dblclickSlide: false,
- dblclickOutside: false,
-
- // Custom options when mobile device is detected
- // =============================================
-
- mobile: {
- preventCaptionOverlap: false,
- idleTime: false,
- clickContent: function (current, event) {
- return current.type === "image" ? "toggleControls" : false;
- },
- clickSlide: function (current, event) {
- return current.type === "image" ? "toggleControls" : "close";
- },
- dblclickContent: function (current, event) {
- return current.type === "image" ? "zoom" : false;
- },
- dblclickSlide: function (current, event) {
- return current.type === "image" ? "zoom" : false;
- }
- },
-
- // Internationalization
- // ====================
-
- lang: "en",
- i18n: {
- en: {
- CLOSE: "Close",
- NEXT: "Next",
- PREV: "Previous",
- ERROR: "The requested content cannot be loaded. Please try again later.",
- PLAY_START: "Start slideshow",
- PLAY_STOP: "Pause slideshow",
- FULL_SCREEN: "Full screen",
- THUMBS: "Thumbnails",
- DOWNLOAD: "Download",
- SHARE: "Share",
- ZOOM: "Zoom"
- },
- de: {
- CLOSE: "Schließen",
- NEXT: "Weiter",
- PREV: "Zurück",
- ERROR: "Die angeforderten Daten konnten nicht geladen werden. Bitte versuchen Sie es später nochmal.",
- PLAY_START: "Diaschau starten",
- PLAY_STOP: "Diaschau beenden",
- FULL_SCREEN: "Vollbild",
- THUMBS: "Vorschaubilder",
- DOWNLOAD: "Herunterladen",
- SHARE: "Teilen",
- ZOOM: "Vergrößern"
- }
- }
- };
-
- // Few useful variables and methods
- // ================================
-
- var $W = $(window);
- var $D = $(document);
-
- var called = 0;
-
- // Check if an object is a jQuery object and not a native JavaScript object
- // ========================================================================
- var isQuery = function (obj) {
- return obj && obj.hasOwnProperty && obj instanceof $;
- };
-
- // Handle multiple browsers for "requestAnimationFrame" and "cancelAnimationFrame"
- // ===============================================================================
- var requestAFrame = (function () {
- return (
- window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- // if all else fails, use setTimeout
- function (callback) {
- return window.setTimeout(callback, 1000 / 60);
- }
- );
- })();
-
- var cancelAFrame = (function () {
- return (
- window.cancelAnimationFrame ||
- window.webkitCancelAnimationFrame ||
- window.mozCancelAnimationFrame ||
- window.oCancelAnimationFrame ||
- function (id) {
- window.clearTimeout(id);
- }
- );
- })();
-
- // Detect the supported transition-end event property name
- // =======================================================
- var transitionEnd = (function () {
- var el = document.createElement("fakeelement"),
- t;
-
- var transitions = {
- transition: "transitionend",
- OTransition: "oTransitionEnd",
- MozTransition: "transitionend",
- WebkitTransition: "webkitTransitionEnd"
- };
-
- for (t in transitions) {
- if (el.style[t] !== undefined) {
- return transitions[t];
- }
- }
-
- return "transitionend";
- })();
-
- // Force redraw on an element.
- // This helps in cases where the browser doesn't redraw an updated element properly
- // ================================================================================
- var forceRedraw = function ($el) {
- return $el && $el.length && $el[0].offsetHeight;
- };
-
- // Exclude array (`buttons`) options from deep merging
- // ===================================================
- var mergeOpts = function (opts1, opts2) {
- var rez = $.extend(true, {}, opts1, opts2);
-
- $.each(opts2, function (key, value) {
- if ($.isArray(value)) {
- rez[key] = value;
- }
- });
-
- return rez;
- };
-
- // How much of an element is visible in viewport
- // =============================================
-
- var inViewport = function (elem) {
- var elemCenter, rez;
-
- if (!elem || elem.ownerDocument !== document) {
- return false;
- }
-
- $(".fancybox-container").css("pointer-events", "none");
-
- elemCenter = {
- x: elem.getBoundingClientRect().left + elem.offsetWidth / 2,
- y: elem.getBoundingClientRect().top + elem.offsetHeight / 2
- };
-
- rez = document.elementFromPoint(elemCenter.x, elemCenter.y) === elem;
-
- $(".fancybox-container").css("pointer-events", "");
-
- return rez;
- };
-
- // Class definition
- // ================
-
- var FancyBox = function (content, opts, index) {
- var self = this;
-
- self.opts = mergeOpts({
- index: index
- }, $.fancybox.defaults);
-
- if ($.isPlainObject(opts)) {
- self.opts = mergeOpts(self.opts, opts);
- }
-
- if ($.fancybox.isMobile) {
- self.opts = mergeOpts(self.opts, self.opts.mobile);
- }
-
- self.id = self.opts.id || ++called;
-
- self.currIndex = parseInt(self.opts.index, 10) || 0;
- self.prevIndex = null;
-
- self.prevPos = null;
- self.currPos = 0;
-
- self.firstRun = true;
-
- // All group items
- self.group = [];
-
- // Existing slides (for current, next and previous gallery items)
- self.slides = {};
-
- // Create group elements
- self.addContent(content);
-
- if (!self.group.length) {
- return;
- }
-
- self.init();
- };
-
- $.extend(FancyBox.prototype, {
- // Create DOM structure
- // ====================
-
- init: function () {
- var self = this,
- firstItem = self.group[self.currIndex],
- firstItemOpts = firstItem.opts,
- $container,
- buttonStr;
-
- if (firstItemOpts.closeExisting) {
- $.fancybox.close(true);
- }
-
- // Hide scrollbars
- // ===============
-
- $("body").addClass("fancybox-active");
-
- if (
- !$.fancybox.getInstance() &&
- firstItemOpts.hideScrollbar !== false &&
- !$.fancybox.isMobile &&
- document.body.scrollHeight > window.innerHeight
- ) {
- $("head").append(
- '"
- );
-
- $("body").addClass("compensate-for-scrollbar");
- }
-
- // Build html markup and set references
- // ====================================
-
- // Build html code for buttons and insert into main template
- buttonStr = "";
-
- $.each(firstItemOpts.buttons, function (index, value) {
- buttonStr += firstItemOpts.btnTpl[value] || "";
- });
-
- // Create markup from base template, it will be initially hidden to
- // avoid unnecessary work like painting while initializing is not complete
- $container = $(
- self.translate(
- self,
- firstItemOpts.baseTpl
- .replace("{{buttons}}", buttonStr)
- .replace("{{arrows}}", firstItemOpts.btnTpl.arrowLeft + firstItemOpts.btnTpl.arrowRight)
- )
- )
- .attr("id", "fancybox-container-" + self.id)
- .addClass(firstItemOpts.baseClass)
- .data("FancyBox", self)
- .appendTo(firstItemOpts.parentEl);
-
- // Create object holding references to jQuery wrapped nodes
- self.$refs = {
- container: $container
- };
-
- ["bg", "inner", "infobar", "toolbar", "stage", "caption", "navigation"].forEach(function (item) {
- self.$refs[item] = $container.find(".fancybox-" + item);
- });
-
- self.trigger("onInit");
-
- // Enable events, deactive previous instances
- self.activate();
-
- // Build slides, load and reveal content
- self.jumpTo(self.currIndex);
- },
-
- // Simple i18n support - replaces object keys found in template
- // with corresponding values
- // ============================================================
-
- translate: function (obj, str) {
- var arr = obj.opts.i18n[obj.opts.lang] || obj.opts.i18n.en;
-
- return str.replace(/\{\{(\w+)\}\}/g, function (match, n) {
- return arr[n] === undefined ? match : arr[n];
- });
- },
-
- // Populate current group with fresh content
- // Check if each object has valid type and content
- // ===============================================
-
- addContent: function (content) {
- var self = this,
- items = $.makeArray(content),
- thumbs;
-
- $.each(items, function (i, item) {
- var obj = {},
- opts = {},
- $item,
- type,
- found,
- src,
- srcParts;
-
- // Step 1 - Make sure we have an object
- // ====================================
-
- if ($.isPlainObject(item)) {
- // We probably have manual usage here, something like
- // $.fancybox.open( [ { src : "image.jpg", type : "image" } ] )
-
- obj = item;
- opts = item.opts || item;
- } else if ($.type(item) === "object" && $(item).length) {
- // Here we probably have jQuery collection returned by some selector
- $item = $(item);
-
- // Support attributes like `data-options='{"touch" : false}'` and `data-touch='false'`
- opts = $item.data() || {};
- opts = $.extend(true, {}, opts, opts.options);
-
- // Here we store clicked element
- opts.$orig = $item;
-
- obj.src = self.opts.src || opts.src || $item.attr("href");
-
- // Assume that simple syntax is used, for example:
- // `$.fancybox.open( $("#test"), {} );`
- if (!obj.type && !obj.src) {
- obj.type = "inline";
- obj.src = item;
- }
- } else {
- // Assume we have a simple html code, for example:
- // $.fancybox.open( '
Hi! ' );
- obj = {
- type: "html",
- src: item + ""
- };
- }
-
- // Each gallery object has full collection of options
- obj.opts = $.extend(true, {}, self.opts, opts);
-
- // Do not merge buttons array
- if ($.isArray(opts.buttons)) {
- obj.opts.buttons = opts.buttons;
- }
-
- if ($.fancybox.isMobile && obj.opts.mobile) {
- obj.opts = mergeOpts(obj.opts, obj.opts.mobile);
- }
-
- // Step 2 - Make sure we have content type, if not - try to guess
- // ==============================================================
-
- type = obj.type || obj.opts.type;
- src = obj.src || "";
-
- if (!type && src) {
- if ((found = src.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))) {
- type = "video";
-
- if (!obj.opts.video.format) {
- obj.opts.video.format = "video/" + (found[1] === "ogv" ? "ogg" : found[1]);
- }
- } else if (src.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)) {
- type = "image";
- } else if (src.match(/\.(pdf)((\?|#).*)?$/i)) {
- type = "iframe";
- obj = $.extend(true, obj, {
- contentType: "pdf",
- opts: {
- iframe: {
- preload: false
- }
- }
- });
- } else if (src.charAt(0) === "#") {
- type = "inline";
- }
- }
-
- if (type) {
- obj.type = type;
- } else {
- self.trigger("objectNeedsType", obj);
- }
-
- if (!obj.contentType) {
- obj.contentType = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1 ? "html" : obj.type;
- }
-
- // Step 3 - Some adjustments
- // =========================
-
- obj.index = self.group.length;
-
- if (obj.opts.smallBtn == "auto") {
- obj.opts.smallBtn = $.inArray(obj.type, ["html", "inline", "ajax"]) > -1;
- }
-
- if (obj.opts.toolbar === "auto") {
- obj.opts.toolbar = !obj.opts.smallBtn;
- }
-
- // Find thumbnail image, check if exists and if is in the viewport
- obj.$thumb = obj.opts.$thumb || null;
-
- if (obj.opts.$trigger && obj.index === self.opts.index) {
- obj.$thumb = obj.opts.$trigger.find("img:first");
-
- if (obj.$thumb.length) {
- obj.opts.$orig = obj.opts.$trigger;
- }
- }
-
- if (!(obj.$thumb && obj.$thumb.length) && obj.opts.$orig) {
- obj.$thumb = obj.opts.$orig.find("img:first");
- }
-
- if (obj.$thumb && !obj.$thumb.length) {
- obj.$thumb = null;
- }
-
- obj.thumb = obj.opts.thumb || (obj.$thumb ? obj.$thumb[0].src : null);
-
- // "caption" is a "special" option, it can be used to customize caption per gallery item
- if ($.type(obj.opts.caption) === "function") {
- obj.opts.caption = obj.opts.caption.apply(item, [self, obj]);
- }
-
- if ($.type(self.opts.caption) === "function") {
- obj.opts.caption = self.opts.caption.apply(item, [self, obj]);
- }
-
- // Make sure we have caption as a string or jQuery object
- if (!(obj.opts.caption instanceof $)) {
- obj.opts.caption = obj.opts.caption === undefined ? "" : obj.opts.caption + "";
- }
-
- // Check if url contains "filter" used to filter the content
- // Example: "ajax.html #something"
- if (obj.type === "ajax") {
- srcParts = src.split(/\s+/, 2);
-
- if (srcParts.length > 1) {
- obj.src = srcParts.shift();
-
- obj.opts.filter = srcParts.shift();
- }
- }
-
- // Hide all buttons and disable interactivity for modal items
- if (obj.opts.modal) {
- obj.opts = $.extend(true, obj.opts, {
- trapFocus: true,
- // Remove buttons
- infobar: 0,
- toolbar: 0,
-
- smallBtn: 0,
-
- // Disable keyboard navigation
- keyboard: 0,
-
- // Disable some modules
- slideShow: 0,
- fullScreen: 0,
- thumbs: 0,
- touch: 0,
-
- // Disable click event handlers
- clickContent: false,
- clickSlide: false,
- clickOutside: false,
- dblclickContent: false,
- dblclickSlide: false,
- dblclickOutside: false
- });
- }
-
- // Step 4 - Add processed object to group
- // ======================================
-
- self.group.push(obj);
- });
-
- // Update controls if gallery is already opened
- if (Object.keys(self.slides).length) {
- self.updateControls();
-
- // Update thumbnails, if needed
- thumbs = self.Thumbs;
-
- if (thumbs && thumbs.isActive) {
- thumbs.create();
-
- thumbs.focus();
- }
- }
- },
-
- // Attach an event handler functions for:
- // - navigation buttons
- // - browser scrolling, resizing;
- // - focusing
- // - keyboard
- // - detecting inactivity
- // ======================================
-
- addEvents: function () {
- var self = this;
-
- self.removeEvents();
-
- // Make navigation elements clickable
- // ==================================
-
- self.$refs.container
- .on("click.fb-close", "[data-fancybox-close]", function (e) {
- e.stopPropagation();
- e.preventDefault();
-
- self.close(e);
- })
- .on("touchstart.fb-prev click.fb-prev", "[data-fancybox-prev]", function (e) {
- e.stopPropagation();
- e.preventDefault();
-
- self.previous();
- })
- .on("touchstart.fb-next click.fb-next", "[data-fancybox-next]", function (e) {
- e.stopPropagation();
- e.preventDefault();
-
- self.next();
- })
- .on("click.fb", "[data-fancybox-zoom]", function (e) {
- // Click handler for zoom button
- self[self.isScaledDown() ? "scaleToActual" : "scaleToFit"]();
- });
-
- // Handle page scrolling and browser resizing
- // ==========================================
-
- $W.on("orientationchange.fb resize.fb", function (e) {
- if (e && e.originalEvent && e.originalEvent.type === "resize") {
- if (self.requestId) {
- cancelAFrame(self.requestId);
- }
-
- self.requestId = requestAFrame(function () {
- self.update(e);
- });
- } else {
- if (self.current && self.current.type === "iframe") {
- self.$refs.stage.hide();
- }
-
- setTimeout(
- function () {
- self.$refs.stage.show();
-
- self.update(e);
- },
- $.fancybox.isMobile ? 600 : 250
- );
- }
- });
-
- $D.on("keydown.fb", function (e) {
- var instance = $.fancybox ? $.fancybox.getInstance() : null,
- current = instance.current,
- keycode = e.keyCode || e.which;
-
- // Trap keyboard focus inside of the modal
- // =======================================
-
- if (keycode == 9) {
- if (current.opts.trapFocus) {
- self.focus(e);
- }
-
- return;
- }
-
- // Enable keyboard navigation
- // ==========================
-
- if (!current.opts.keyboard || e.ctrlKey || e.altKey || e.shiftKey || $(e.target).is("input,textarea,video,audio,select")) {
- return;
- }
-
- // Backspace and Esc keys
- if (keycode === 8 || keycode === 27) {
- e.preventDefault();
-
- self.close(e);
-
- return;
- }
-
- // Left arrow and Up arrow
- if (keycode === 37 || keycode === 38) {
- e.preventDefault();
-
- self.previous();
-
- return;
- }
-
- // Righ arrow and Down arrow
- if (keycode === 39 || keycode === 40) {
- e.preventDefault();
-
- self.next();
-
- return;
- }
-
- self.trigger("afterKeydown", e, keycode);
- });
-
- // Hide controls after some inactivity period
- if (self.group[self.currIndex].opts.idleTime) {
- self.idleSecondsCounter = 0;
-
- $D.on(
- "mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",
- function (e) {
- self.idleSecondsCounter = 0;
-
- if (self.isIdle) {
- self.showControls();
- }
-
- self.isIdle = false;
- }
- );
-
- self.idleInterval = window.setInterval(function () {
- self.idleSecondsCounter++;
-
- if (self.idleSecondsCounter >= self.group[self.currIndex].opts.idleTime && !self.isDragging) {
- self.isIdle = true;
- self.idleSecondsCounter = 0;
-
- self.hideControls();
- }
- }, 1000);
- }
- },
-
- // Remove events added by the core
- // ===============================
-
- removeEvents: function () {
- var self = this;
-
- $W.off("orientationchange.fb resize.fb");
- $D.off("keydown.fb .fb-idle");
-
- this.$refs.container.off(".fb-close .fb-prev .fb-next");
-
- if (self.idleInterval) {
- window.clearInterval(self.idleInterval);
-
- self.idleInterval = null;
- }
- },
-
- // Change to previous gallery item
- // ===============================
-
- previous: function (duration) {
- return this.jumpTo(this.currPos - 1, duration);
- },
-
- // Change to next gallery item
- // ===========================
-
- next: function (duration) {
- return this.jumpTo(this.currPos + 1, duration);
- },
-
- // Switch to selected gallery item
- // ===============================
-
- jumpTo: function (pos, duration) {
- var self = this,
- groupLen = self.group.length,
- firstRun,
- isMoved,
- loop,
- current,
- previous,
- slidePos,
- stagePos,
- prop,
- diff;
-
- if (self.isDragging || self.isClosing || (self.isAnimating && self.firstRun)) {
- return;
- }
-
- // Should loop?
- pos = parseInt(pos, 10);
- loop = self.current ? self.current.opts.loop : self.opts.loop;
-
- if (!loop && (pos < 0 || pos >= groupLen)) {
- return false;
- }
-
- // Check if opening for the first time; this helps to speed things up
- firstRun = self.firstRun = !Object.keys(self.slides).length;
-
- // Create slides
- previous = self.current;
-
- self.prevIndex = self.currIndex;
- self.prevPos = self.currPos;
-
- current = self.createSlide(pos);
-
- if (groupLen > 1) {
- if (loop || current.index < groupLen - 1) {
- self.createSlide(pos + 1);
- }
-
- if (loop || current.index > 0) {
- self.createSlide(pos - 1);
- }
- }
-
- self.current = current;
- self.currIndex = current.index;
- self.currPos = current.pos;
-
- self.trigger("beforeShow", firstRun);
-
- self.updateControls();
-
- // Validate duration length
- current.forcedDuration = undefined;
-
- if ($.isNumeric(duration)) {
- current.forcedDuration = duration;
- } else {
- duration = current.opts[firstRun ? "animationDuration" : "transitionDuration"];
- }
-
- duration = parseInt(duration, 10);
-
- // Check if user has swiped the slides or if still animating
- isMoved = self.isMoved(current);
-
- // Make sure current slide is visible
- current.$slide.addClass("fancybox-slide--current");
-
- // Fresh start - reveal container, current slide and start loading content
- if (firstRun) {
- if (current.opts.animationEffect && duration) {
- self.$refs.container.css("transition-duration", duration + "ms");
- }
-
- self.$refs.container.addClass("fancybox-is-open").trigger("focus");
-
- // Attempt to load content into slide
- // This will later call `afterLoad` -> `revealContent`
- self.loadSlide(current);
-
- self.preload("image");
-
- return;
- }
-
- // Get actual slide/stage positions (before cleaning up)
- slidePos = $.fancybox.getTranslate(previous.$slide);
- stagePos = $.fancybox.getTranslate(self.$refs.stage);
-
- // Clean up all slides
- $.each(self.slides, function (index, slide) {
- $.fancybox.stop(slide.$slide, true);
- });
-
- if (previous.pos !== current.pos) {
- previous.isComplete = false;
- }
-
- previous.$slide.removeClass("fancybox-slide--complete fancybox-slide--current");
-
- // If slides are out of place, then animate them to correct position
- if (isMoved) {
- // Calculate horizontal swipe distance
- diff = slidePos.left - (previous.pos * slidePos.width + previous.pos * previous.opts.gutter);
-
- $.each(self.slides, function (index, slide) {
- slide.$slide.removeClass("fancybox-animated").removeClass(function (index, className) {
- return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
- });
-
- // Make sure that each slide is in equal distance
- // This is mostly needed for freshly added slides, because they are not yet positioned
- var leftPos = slide.pos * slidePos.width + slide.pos * slide.opts.gutter;
-
- $.fancybox.setTranslate(slide.$slide, {
- top: 0,
- left: leftPos - stagePos.left + diff
- });
-
- if (slide.pos !== current.pos) {
- slide.$slide.addClass("fancybox-slide--" + (slide.pos > current.pos ? "next" : "previous"));
- }
-
- // Redraw to make sure that transition will start
- forceRedraw(slide.$slide);
-
- // Animate the slide
- $.fancybox.animate(
- slide.$slide, {
- top: 0,
- left: (slide.pos - current.pos) * slidePos.width + (slide.pos - current.pos) * slide.opts.gutter
- },
- duration,
- function () {
- slide.$slide
- .css({
- transform: "",
- opacity: ""
- })
- .removeClass("fancybox-slide--next fancybox-slide--previous");
-
- if (slide.pos === self.currPos) {
- self.complete();
- }
- }
- );
- });
- } else if (duration && current.opts.transitionEffect) {
- // Set transition effect for previously active slide
- prop = "fancybox-animated fancybox-fx-" + current.opts.transitionEffect;
-
- previous.$slide.addClass("fancybox-slide--" + (previous.pos > current.pos ? "next" : "previous"));
-
- $.fancybox.animate(
- previous.$slide,
- prop,
- duration,
- function () {
- previous.$slide.removeClass(prop).removeClass("fancybox-slide--next fancybox-slide--previous");
- },
- false
- );
- }
-
- if (current.isLoaded) {
- self.revealContent(current);
- } else {
- self.loadSlide(current);
- }
-
- self.preload("image");
- },
-
- // Create new "slide" element
- // These are gallery items that are actually added to DOM
- // =======================================================
-
- createSlide: function (pos) {
- var self = this,
- $slide,
- index;
-
- index = pos % self.group.length;
- index = index < 0 ? self.group.length + index : index;
-
- if (!self.slides[pos] && self.group[index]) {
- $slide = $('
').appendTo(self.$refs.stage);
-
- self.slides[pos] = $.extend(true, {}, self.group[index], {
- pos: pos,
- $slide: $slide,
- isLoaded: false
- });
-
- self.updateSlide(self.slides[pos]);
- }
-
- return self.slides[pos];
- },
-
- // Scale image to the actual size of the image;
- // x and y values should be relative to the slide
- // ==============================================
-
- scaleToActual: function (x, y, duration) {
- var self = this,
- current = self.current,
- $content = current.$content,
- canvasWidth = $.fancybox.getTranslate(current.$slide).width,
- canvasHeight = $.fancybox.getTranslate(current.$slide).height,
- newImgWidth = current.width,
- newImgHeight = current.height,
- imgPos,
- posX,
- posY,
- scaleX,
- scaleY;
-
- if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) {
- return;
- }
-
- self.isAnimating = true;
-
- $.fancybox.stop($content);
-
- x = x === undefined ? canvasWidth * 0.5 : x;
- y = y === undefined ? canvasHeight * 0.5 : y;
-
- imgPos = $.fancybox.getTranslate($content);
-
- imgPos.top -= $.fancybox.getTranslate(current.$slide).top;
- imgPos.left -= $.fancybox.getTranslate(current.$slide).left;
-
- scaleX = newImgWidth / imgPos.width;
- scaleY = newImgHeight / imgPos.height;
-
- // Get center position for original image
- posX = canvasWidth * 0.5 - newImgWidth * 0.5;
- posY = canvasHeight * 0.5 - newImgHeight * 0.5;
-
- // Make sure image does not move away from edges
- if (newImgWidth > canvasWidth) {
- posX = imgPos.left * scaleX - (x * scaleX - x);
-
- if (posX > 0) {
- posX = 0;
- }
-
- if (posX < canvasWidth - newImgWidth) {
- posX = canvasWidth - newImgWidth;
- }
- }
-
- if (newImgHeight > canvasHeight) {
- posY = imgPos.top * scaleY - (y * scaleY - y);
-
- if (posY > 0) {
- posY = 0;
- }
-
- if (posY < canvasHeight - newImgHeight) {
- posY = canvasHeight - newImgHeight;
- }
- }
-
- self.updateCursor(newImgWidth, newImgHeight);
-
- $.fancybox.animate(
- $content, {
- top: posY,
- left: posX,
- scaleX: scaleX,
- scaleY: scaleY
- },
- duration || 366,
- function () {
- self.isAnimating = false;
- }
- );
-
- // Stop slideshow
- if (self.SlideShow && self.SlideShow.isActive) {
- self.SlideShow.stop();
- }
- },
-
- // Scale image to fit inside parent element
- // ========================================
-
- scaleToFit: function (duration) {
- var self = this,
- current = self.current,
- $content = current.$content,
- end;
-
- if (self.isAnimating || self.isMoved() || !$content || !(current.type == "image" && current.isLoaded && !current.hasError)) {
- return;
- }
-
- self.isAnimating = true;
-
- $.fancybox.stop($content);
-
- end = self.getFitPos(current);
-
- self.updateCursor(end.width, end.height);
-
- $.fancybox.animate(
- $content, {
- top: end.top,
- left: end.left,
- scaleX: end.width / $content.width(),
- scaleY: end.height / $content.height()
- },
- duration || 366,
- function () {
- self.isAnimating = false;
- }
- );
- },
-
- // Calculate image size to fit inside viewport
- // ===========================================
-
- getFitPos: function (slide) {
- var self = this,
- $content = slide.$content,
- $slide = slide.$slide,
- width = slide.width || slide.opts.width,
- height = slide.height || slide.opts.height,
- maxWidth,
- maxHeight,
- minRatio,
- aspectRatio,
- rez = {};
-
- if (!slide.isLoaded || !$content || !$content.length) {
- return false;
- }
-
- maxWidth = $.fancybox.getTranslate(self.$refs.stage).width;
- maxHeight = $.fancybox.getTranslate(self.$refs.stage).height;
-
- maxWidth -=
- parseFloat($slide.css("paddingLeft")) +
- parseFloat($slide.css("paddingRight")) +
- parseFloat($content.css("marginLeft")) +
- parseFloat($content.css("marginRight"));
-
- maxHeight -=
- parseFloat($slide.css("paddingTop")) +
- parseFloat($slide.css("paddingBottom")) +
- parseFloat($content.css("marginTop")) +
- parseFloat($content.css("marginBottom"));
-
- if (!width || !height) {
- width = maxWidth;
- height = maxHeight;
- }
-
- minRatio = Math.min(1, maxWidth / width, maxHeight / height);
-
- width = minRatio * width;
- height = minRatio * height;
-
- // Adjust width/height to precisely fit into container
- if (width > maxWidth - 0.5) {
- width = maxWidth;
- }
-
- if (height > maxHeight - 0.5) {
- height = maxHeight;
- }
-
- if (slide.type === "image") {
- rez.top = Math.floor((maxHeight - height) * 0.5) + parseFloat($slide.css("paddingTop"));
- rez.left = Math.floor((maxWidth - width) * 0.5) + parseFloat($slide.css("paddingLeft"));
- } else if (slide.contentType === "video") {
- // Force aspect ratio for the video
- // "I say the whole world must learn of our peaceful ways… by force!"
- aspectRatio = slide.opts.width && slide.opts.height ? width / height : slide.opts.ratio || 16 / 9;
-
- if (height > width / aspectRatio) {
- height = width / aspectRatio;
- } else if (width > height * aspectRatio) {
- width = height * aspectRatio;
- }
- }
-
- rez.width = width;
- rez.height = height;
-
- return rez;
- },
-
- // Update content size and position for all slides
- // ==============================================
-
- update: function (e) {
- var self = this;
-
- $.each(self.slides, function (key, slide) {
- self.updateSlide(slide, e);
- });
- },
-
- // Update slide content position and size
- // ======================================
-
- updateSlide: function (slide, e) {
- var self = this,
- $content = slide && slide.$content,
- width = slide.width || slide.opts.width,
- height = slide.height || slide.opts.height,
- $slide = slide.$slide;
-
- // First, prevent caption overlap, if needed
- self.adjustCaption(slide);
-
- // Then resize content to fit inside the slide
- if ($content && (width || height || slide.contentType === "video") && !slide.hasError) {
- $.fancybox.stop($content);
-
- $.fancybox.setTranslate($content, self.getFitPos(slide));
-
- if (slide.pos === self.currPos) {
- self.isAnimating = false;
-
- self.updateCursor();
- }
- }
-
- // Then some adjustments
- self.adjustLayout(slide);
-
- if ($slide.length) {
- $slide.trigger("refresh");
-
- if (slide.pos === self.currPos) {
- self.$refs.toolbar
- .add(self.$refs.navigation.find(".fancybox-button--arrow_right"))
- .toggleClass("compensate-for-scrollbar", $slide.get(0).scrollHeight > $slide.get(0).clientHeight);
- }
- }
-
- self.trigger("onUpdate", slide, e);
- },
-
- // Horizontally center slide
- // =========================
-
- centerSlide: function (duration) {
- var self = this,
- current = self.current,
- $slide = current.$slide;
-
- if (self.isClosing || !current) {
- return;
- }
-
- $slide.siblings().css({
- transform: "",
- opacity: ""
- });
-
- $slide
- .parent()
- .children()
- .removeClass("fancybox-slide--previous fancybox-slide--next");
-
- $.fancybox.animate(
- $slide, {
- top: 0,
- left: 0,
- opacity: 1
- },
- duration === undefined ? 0 : duration,
- function () {
- // Clean up
- $slide.css({
- transform: "",
- opacity: ""
- });
-
- if (!current.isComplete) {
- self.complete();
- }
- },
- false
- );
- },
-
- // Check if current slide is moved (swiped)
- // ========================================
-
- isMoved: function (slide) {
- var current = slide || this.current,
- slidePos,
- stagePos;
-
- if (!current) {
- return false;
- }
-
- stagePos = $.fancybox.getTranslate(this.$refs.stage);
- slidePos = $.fancybox.getTranslate(current.$slide);
-
- return (
- !current.$slide.hasClass("fancybox-animated") &&
- (Math.abs(slidePos.top - stagePos.top) > 0.5 || Math.abs(slidePos.left - stagePos.left) > 0.5)
- );
- },
-
- // Update cursor style depending if content can be zoomed
- // ======================================================
-
- updateCursor: function (nextWidth, nextHeight) {
- var self = this,
- current = self.current,
- $container = self.$refs.container,
- canPan,
- isZoomable;
-
- if (!current || self.isClosing || !self.Guestures) {
- return;
- }
-
- $container.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan");
-
- canPan = self.canPan(nextWidth, nextHeight);
-
- isZoomable = canPan ? true : self.isZoomable();
-
- $container.toggleClass("fancybox-is-zoomable", isZoomable);
-
- $("[data-fancybox-zoom]").prop("disabled", !isZoomable);
-
- if (canPan) {
- $container.addClass("fancybox-can-pan");
- } else if (
- isZoomable &&
- (current.opts.clickContent === "zoom" || ($.isFunction(current.opts.clickContent) && current.opts.clickContent(current) == "zoom"))
- ) {
- $container.addClass("fancybox-can-zoomIn");
- } else if (current.opts.touch && (current.opts.touch.vertical || self.group.length > 1) && current.contentType !== "video") {
- $container.addClass("fancybox-can-swipe");
- }
- },
-
- // Check if current slide is zoomable
- // ==================================
-
- isZoomable: function () {
- var self = this,
- current = self.current,
- fitPos;
-
- // Assume that slide is zoomable if:
- // - image is still loading
- // - actual size of the image is smaller than available area
- if (current && !self.isClosing && current.type === "image" && !current.hasError) {
- if (!current.isLoaded) {
- return true;
- }
-
- fitPos = self.getFitPos(current);
-
- if (fitPos && (current.width > fitPos.width || current.height > fitPos.height)) {
- return true;
- }
- }
-
- return false;
- },
-
- // Check if current image dimensions are smaller than actual
- // =========================================================
-
- isScaledDown: function (nextWidth, nextHeight) {
- var self = this,
- rez = false,
- current = self.current,
- $content = current.$content;
-
- if (nextWidth !== undefined && nextHeight !== undefined) {
- rez = nextWidth < current.width && nextHeight < current.height;
- } else if ($content) {
- rez = $.fancybox.getTranslate($content);
- rez = rez.width < current.width && rez.height < current.height;
- }
-
- return rez;
- },
-
- // Check if image dimensions exceed parent element
- // ===============================================
-
- canPan: function (nextWidth, nextHeight) {
- var self = this,
- current = self.current,
- pos = null,
- rez = false;
-
- if (current.type === "image" && (current.isComplete || (nextWidth && nextHeight)) && !current.hasError) {
- rez = self.getFitPos(current);
-
- if (nextWidth !== undefined && nextHeight !== undefined) {
- pos = {
- width: nextWidth,
- height: nextHeight
- };
- } else if (current.isComplete) {
- pos = $.fancybox.getTranslate(current.$content);
- }
-
- if (pos && rez) {
- rez = Math.abs(pos.width - rez.width) > 1.5 || Math.abs(pos.height - rez.height) > 1.5;
- }
- }
-
- return rez;
- },
-
- // Load content into the slide
- // ===========================
-
- loadSlide: function (slide) {
- var self = this,
- type,
- $slide,
- ajaxLoad;
-
- if (slide.isLoading || slide.isLoaded) {
- return;
- }
-
- slide.isLoading = true;
-
- if (self.trigger("beforeLoad", slide) === false) {
- slide.isLoading = false;
-
- return false;
- }
-
- type = slide.type;
- $slide = slide.$slide;
-
- $slide
- .off("refresh")
- .trigger("onReset")
- .addClass(slide.opts.slideClass);
-
- // Create content depending on the type
- switch (type) {
- case "image":
- self.setImage(slide);
-
- break;
-
- case "iframe":
- self.setIframe(slide);
-
- break;
-
- case "html":
- self.setContent(slide, slide.src || slide.content);
-
- break;
-
- case "video":
- self.setContent(
- slide,
- slide.opts.video.tpl
- .replace(/\{\{src\}\}/gi, slide.src)
- .replace("{{format}}", slide.opts.videoFormat || slide.opts.video.format || "")
- .replace("{{poster}}", slide.thumb || "")
- );
-
- break;
-
- case "inline":
- if ($(slide.src).length) {
- self.setContent(slide, $(slide.src));
- } else {
- self.setError(slide);
- }
-
- break;
-
- case "ajax":
- self.showLoading(slide);
-
- ajaxLoad = $.ajax(
- $.extend({}, slide.opts.ajax.settings, {
- url: slide.src,
- success: function (data, textStatus) {
- if (textStatus === "success") {
- self.setContent(slide, data);
- }
- },
- error: function (jqXHR, textStatus) {
- if (jqXHR && textStatus !== "abort") {
- self.setError(slide);
- }
- }
- })
- );
-
- $slide.one("onReset", function () {
- ajaxLoad.abort();
- });
-
- break;
-
- default:
- self.setError(slide);
-
- break;
- }
-
- return true;
- },
-
- // Use thumbnail image, if possible
- // ================================
-
- setImage: function (slide) {
- var self = this,
- ghost;
-
- // Check if need to show loading icon
- setTimeout(function () {
- var $img = slide.$image;
-
- if (!self.isClosing && slide.isLoading && (!$img || !$img.length || !$img[0].complete) && !slide.hasError) {
- self.showLoading(slide);
- }
- }, 50);
-
- //Check if image has srcset
- self.checkSrcset(slide);
-
- // This will be wrapper containing both ghost and actual image
- slide.$content = $('
')
- .addClass("fancybox-is-hidden")
- .appendTo(slide.$slide.addClass("fancybox-slide--image"));
-
- // If we have a thumbnail, we can display it while actual image is loading
- // Users will not stare at black screen and actual image will appear gradually
- if (slide.opts.preload !== false && slide.opts.width && slide.opts.height && slide.thumb) {
- slide.width = slide.opts.width;
- slide.height = slide.opts.height;
-
- ghost = document.createElement("img");
-
- ghost.onerror = function () {
- $(this).remove();
-
- slide.$ghost = null;
- };
-
- ghost.onload = function () {
- self.afterLoad(slide);
- };
-
- slide.$ghost = $(ghost)
- .addClass("fancybox-image")
- .appendTo(slide.$content)
- .attr("src", slide.thumb);
- }
-
- // Start loading actual image
- self.setBigImage(slide);
- },
-
- // Check if image has srcset and get the source
- // ============================================
- checkSrcset: function (slide) {
- var srcset = slide.opts.srcset || slide.opts.image.srcset,
- found,
- temp,
- pxRatio,
- windowWidth;
-
- // If we have "srcset", then we need to find first matching "src" value.
- // This is necessary, because when you set an src attribute, the browser will preload the image
- // before any javascript or even CSS is applied.
- if (srcset) {
- pxRatio = window.devicePixelRatio || 1;
- windowWidth = window.innerWidth * pxRatio;
-
- temp = srcset.split(",").map(function (el) {
- var ret = {};
-
- el.trim()
- .split(/\s+/)
- .forEach(function (el, i) {
- var value = parseInt(el.substring(0, el.length - 1), 10);
-
- if (i === 0) {
- return (ret.url = el);
- }
-
- if (value) {
- ret.value = value;
- ret.postfix = el[el.length - 1];
- }
- });
-
- return ret;
- });
-
- // Sort by value
- temp.sort(function (a, b) {
- return a.value - b.value;
- });
-
- // Ok, now we have an array of all srcset values
- for (var j = 0; j < temp.length; j++) {
- var el = temp[j];
-
- if ((el.postfix === "w" && el.value >= windowWidth) || (el.postfix === "x" && el.value >= pxRatio)) {
- found = el;
- break;
- }
- }
-
- // If not found, take the last one
- if (!found && temp.length) {
- found = temp[temp.length - 1];
- }
-
- if (found) {
- slide.src = found.url;
-
- // If we have default width/height values, we can calculate height for matching source
- if (slide.width && slide.height && found.postfix == "w") {
- slide.height = (slide.width / slide.height) * found.value;
- slide.width = found.value;
- }
-
- slide.opts.srcset = srcset;
- }
- }
- },
-
- // Create full-size image
- // ======================
-
- setBigImage: function (slide) {
- var self = this,
- img = document.createElement("img"),
- $img = $(img);
-
- slide.$image = $img
- .one("error", function () {
- self.setError(slide);
- })
- .one("load", function () {
- var sizes;
-
- if (!slide.$ghost) {
- self.resolveImageSlideSize(slide, this.naturalWidth, this.naturalHeight);
-
- self.afterLoad(slide);
- }
-
- if (self.isClosing) {
- return;
- }
-
- if (slide.opts.srcset) {
- sizes = slide.opts.sizes;
-
- if (!sizes || sizes === "auto") {
- sizes =
- (slide.width / slide.height > 1 && $W.width() / $W.height() > 1 ? "100" : Math.round((slide.width / slide.height) * 100)) +
- "vw";
- }
-
- $img.attr("sizes", sizes).attr("srcset", slide.opts.srcset);
- }
-
- // Hide temporary image after some delay
- if (slide.$ghost) {
- setTimeout(function () {
- if (slide.$ghost && !self.isClosing) {
- slide.$ghost.hide();
- }
- }, Math.min(300, Math.max(1000, slide.height / 1600)));
- }
-
- self.hideLoading(slide);
- })
- .addClass("fancybox-image")
- .attr("src", slide.src)
- .appendTo(slide.$content);
-
- if ((img.complete || img.readyState == "complete") && $img.naturalWidth && $img.naturalHeight) {
- $img.trigger("load");
- } else if (img.error) {
- $img.trigger("error");
- }
- },
-
- // Computes the slide size from image size and maxWidth/maxHeight
- // ==============================================================
-
- resolveImageSlideSize: function (slide, imgWidth, imgHeight) {
- var maxWidth = parseInt(slide.opts.width, 10),
- maxHeight = parseInt(slide.opts.height, 10);
-
- // Sets the default values from the image
- slide.width = imgWidth;
- slide.height = imgHeight;
-
- if (maxWidth > 0) {
- slide.width = maxWidth;
- slide.height = Math.floor((maxWidth * imgHeight) / imgWidth);
- }
-
- if (maxHeight > 0) {
- slide.width = Math.floor((maxHeight * imgWidth) / imgHeight);
- slide.height = maxHeight;
- }
- },
-
- // Create iframe wrapper, iframe and bindings
- // ==========================================
-
- setIframe: function (slide) {
- var self = this,
- opts = slide.opts.iframe,
- $slide = slide.$slide,
- $iframe;
-
- slide.$content = $('
')
- .css(opts.css)
- .appendTo($slide);
-
- $slide.addClass("fancybox-slide--" + slide.contentType);
-
- slide.$iframe = $iframe = $(opts.tpl.replace(/\{rnd\}/g, new Date().getTime()))
- .attr(opts.attr)
- .appendTo(slide.$content);
-
- if (opts.preload) {
- self.showLoading(slide);
-
- // Unfortunately, it is not always possible to determine if iframe is successfully loaded
- // (due to browser security policy)
-
- $iframe.on("load.fb error.fb", function (e) {
- this.isReady = 1;
-
- slide.$slide.trigger("refresh");
-
- self.afterLoad(slide);
- });
-
- // Recalculate iframe content size
- // ===============================
-
- $slide.on("refresh.fb", function () {
- var $content = slide.$content,
- frameWidth = opts.css.width,
- frameHeight = opts.css.height,
- $contents,
- $body;
-
- if ($iframe[0].isReady !== 1) {
- return;
- }
-
- try {
- $contents = $iframe.contents();
- $body = $contents.find("body");
- } catch (ignore) {}
-
- // Calculate content dimensions, if it is accessible
- if ($body && $body.length && $body.children().length) {
- // Avoid scrolling to top (if multiple instances)
- $slide.css("overflow", "visible");
-
- $content.css({
- width: "100%",
- "max-width": "100%",
- height: "9999px"
- });
-
- if (frameWidth === undefined) {
- frameWidth = Math.ceil(Math.max($body[0].clientWidth, $body.outerWidth(true)));
- }
-
- $content.css("width", frameWidth ? frameWidth : "").css("max-width", "");
-
- if (frameHeight === undefined) {
- frameHeight = Math.ceil(Math.max($body[0].clientHeight, $body.outerHeight(true)));
- }
-
- $content.css("height", frameHeight ? frameHeight : "");
-
- $slide.css("overflow", "auto");
- }
-
- $content.removeClass("fancybox-is-hidden");
- });
- } else {
- self.afterLoad(slide);
- }
-
- $iframe.attr("src", slide.src);
-
- // Remove iframe if closing or changing gallery item
- $slide.one("onReset", function () {
- // This helps IE not to throw errors when closing
- try {
- $(this)
- .find("iframe")
- .hide()
- .unbind()
- .attr("src", "//about:blank");
- } catch (ignore) {}
-
- $(this)
- .off("refresh.fb")
- .empty();
-
- slide.isLoaded = false;
- slide.isRevealed = false;
- });
- },
-
- // Wrap and append content to the slide
- // ======================================
-
- setContent: function (slide, content) {
- var self = this;
-
- if (self.isClosing) {
- return;
- }
-
- self.hideLoading(slide);
-
- if (slide.$content) {
- $.fancybox.stop(slide.$content);
- }
-
- slide.$slide.empty();
-
- // If content is a jQuery object, then it will be moved to the slide.
- // The placeholder is created so we will know where to put it back.
- if (isQuery(content) && content.parent().length) {
- // Make sure content is not already moved to fancyBox
- if (content.hasClass("fancybox-content") || content.parent().hasClass("fancybox-content")) {
- content.parents(".fancybox-slide").trigger("onReset");
- }
-
- // Create temporary element marking original place of the content
- slide.$placeholder = $("")
- .hide()
- .insertAfter(content);
-
- // Make sure content is visible
- content.css("display", "inline-block");
- } else if (!slide.hasError) {
- // If content is just a plain text, try to convert it to html
- if ($.type(content) === "string") {
- content = $("
")
- .append($.trim(content))
- .contents();
- }
-
- // If "filter" option is provided, then filter content
- if (slide.opts.filter) {
- content = $("
")
- .html(content)
- .find(slide.opts.filter);
- }
- }
-
- slide.$slide.one("onReset", function () {
- // Pause all html5 video/audio
- $(this)
- .find("video,audio")
- .trigger("pause");
-
- // Put content back
- if (slide.$placeholder) {
- slide.$placeholder.after(content.removeClass("fancybox-content").hide()).remove();
-
- slide.$placeholder = null;
- }
-
- // Remove custom close button
- if (slide.$smallBtn) {
- slide.$smallBtn.remove();
-
- slide.$smallBtn = null;
- }
-
- // Remove content and mark slide as not loaded
- if (!slide.hasError) {
- $(this).empty();
-
- slide.isLoaded = false;
- slide.isRevealed = false;
- }
- });
-
- $(content).appendTo(slide.$slide);
-
- if ($(content).is("video,audio")) {
- $(content).addClass("fancybox-video");
-
- $(content).wrap("
");
-
- slide.contentType = "video";
-
- slide.opts.width = slide.opts.width || $(content).attr("width");
- slide.opts.height = slide.opts.height || $(content).attr("height");
- }
-
- slide.$content = slide.$slide
- .children()
- .filter("div,form,main,video,audio,article,.fancybox-content")
- .first();
-
- slide.$content.siblings().hide();
-
- // Re-check if there is a valid content
- // (in some cases, ajax response can contain various elements or plain text)
- if (!slide.$content.length) {
- slide.$content = slide.$slide
- .wrapInner("
")
- .children()
- .first();
- }
-
- slide.$content.addClass("fancybox-content");
-
- slide.$slide.addClass("fancybox-slide--" + slide.contentType);
-
- self.afterLoad(slide);
- },
-
- // Display error message
- // =====================
-
- setError: function (slide) {
- slide.hasError = true;
-
- slide.$slide
- .trigger("onReset")
- .removeClass("fancybox-slide--" + slide.contentType)
- .addClass("fancybox-slide--error");
-
- slide.contentType = "html";
-
- this.setContent(slide, this.translate(slide, slide.opts.errorTpl));
-
- if (slide.pos === this.currPos) {
- this.isAnimating = false;
- }
- },
-
- // Show loading icon inside the slide
- // ==================================
-
- showLoading: function (slide) {
- var self = this;
-
- slide = slide || self.current;
-
- if (slide && !slide.$spinner) {
- slide.$spinner = $(self.translate(self, self.opts.spinnerTpl))
- .appendTo(slide.$slide)
- .hide()
- .fadeIn("fast");
- }
- },
-
- // Remove loading icon from the slide
- // ==================================
-
- hideLoading: function (slide) {
- var self = this;
-
- slide = slide || self.current;
-
- if (slide && slide.$spinner) {
- slide.$spinner.stop().remove();
-
- delete slide.$spinner;
- }
- },
-
- // Adjustments after slide content has been loaded
- // ===============================================
-
- afterLoad: function (slide) {
- var self = this;
-
- if (self.isClosing) {
- return;
- }
-
- slide.isLoading = false;
- slide.isLoaded = true;
-
- self.trigger("afterLoad", slide);
-
- self.hideLoading(slide);
-
- // Add small close button
- if (slide.opts.smallBtn && (!slide.$smallBtn || !slide.$smallBtn.length)) {
- slide.$smallBtn = $(self.translate(slide, slide.opts.btnTpl.smallBtn)).appendTo(slide.$content);
- }
-
- // Disable right click
- if (slide.opts.protect && slide.$content && !slide.hasError) {
- slide.$content.on("contextmenu.fb", function (e) {
- if (e.button == 2) {
- e.preventDefault();
- }
-
- return true;
- });
-
- // Add fake element on top of the image
- // This makes a bit harder for user to select image
- if (slide.type === "image") {
- $('
').appendTo(slide.$content);
- }
- }
-
- self.adjustCaption(slide);
-
- self.adjustLayout(slide);
-
- if (slide.pos === self.currPos) {
- self.updateCursor();
- }
-
- self.revealContent(slide);
- },
-
- // Prevent caption overlap,
- // fix css inconsistency across browsers
- // =====================================
-
- adjustCaption: function (slide) {
- var self = this,
- current = slide || self.current,
- caption = current.opts.caption,
- preventOverlap = current.opts.preventCaptionOverlap,
- $caption = self.$refs.caption,
- $clone,
- captionH = false;
-
- $caption.toggleClass("fancybox-caption--separate", preventOverlap);
-
- if (preventOverlap && caption && caption.length) {
- if (current.pos !== self.currPos) {
- $clone = $caption.clone().appendTo($caption.parent());
-
- $clone
- .children()
- .eq(0)
- .empty()
- .html(caption);
-
- captionH = $clone.outerHeight(true);
-
- $clone.empty().remove();
- } else if (self.$caption) {
- captionH = self.$caption.outerHeight(true);
- }
-
- current.$slide.css("padding-bottom", captionH || "");
- }
- },
-
- // Simple hack to fix inconsistency across browsers, described here (affects Edge, too):
- // https://bugzilla.mozilla.org/show_bug.cgi?id=748518
- // ====================================================================================
-
- adjustLayout: function (slide) {
- var self = this,
- current = slide || self.current,
- scrollHeight,
- marginBottom,
- inlinePadding,
- actualPadding;
-
- if (current.isLoaded && current.opts.disableLayoutFix !== true) {
- current.$content.css("margin-bottom", "");
-
- // If we would always set margin-bottom for the content,
- // then it would potentially break vertical align
- if (current.$content.outerHeight() > current.$slide.height() + 0.5) {
- inlinePadding = current.$slide[0].style["padding-bottom"];
- actualPadding = current.$slide.css("padding-bottom");
-
- if (parseFloat(actualPadding) > 0) {
- scrollHeight = current.$slide[0].scrollHeight;
-
- current.$slide.css("padding-bottom", 0);
-
- if (Math.abs(scrollHeight - current.$slide[0].scrollHeight) < 1) {
- marginBottom = actualPadding;
- }
-
- current.$slide.css("padding-bottom", inlinePadding);
- }
- }
-
- current.$content.css("margin-bottom", marginBottom);
- }
- },
-
- // Make content visible
- // This method is called right after content has been loaded or
- // user navigates gallery and transition should start
- // ============================================================
-
- revealContent: function (slide) {
- var self = this,
- $slide = slide.$slide,
- end = false,
- start = false,
- isMoved = self.isMoved(slide),
- isRevealed = slide.isRevealed,
- effect,
- effectClassName,
- duration,
- opacity;
-
- slide.isRevealed = true;
-
- effect = slide.opts[self.firstRun ? "animationEffect" : "transitionEffect"];
- duration = slide.opts[self.firstRun ? "animationDuration" : "transitionDuration"];
-
- duration = parseInt(slide.forcedDuration === undefined ? duration : slide.forcedDuration, 10);
-
- if (isMoved || slide.pos !== self.currPos || !duration) {
- effect = false;
- }
-
- // Check if can zoom
- if (effect === "zoom") {
- if (slide.pos === self.currPos && duration && slide.type === "image" && !slide.hasError && (start = self.getThumbPos(slide))) {
- end = self.getFitPos(slide);
- } else {
- effect = "fade";
- }
- }
-
- // Zoom animation
- // ==============
- if (effect === "zoom") {
- self.isAnimating = true;
-
- end.scaleX = end.width / start.width;
- end.scaleY = end.height / start.height;
-
- // Check if we need to animate opacity
- opacity = slide.opts.zoomOpacity;
-
- if (opacity == "auto") {
- opacity = Math.abs(slide.width / slide.height - start.width / start.height) > 0.1;
- }
-
- if (opacity) {
- start.opacity = 0.1;
- end.opacity = 1;
- }
-
- // Draw image at start position
- $.fancybox.setTranslate(slide.$content.removeClass("fancybox-is-hidden"), start);
-
- forceRedraw(slide.$content);
-
- // Start animation
- $.fancybox.animate(slide.$content, end, duration, function () {
- self.isAnimating = false;
-
- self.complete();
- });
-
- return;
- }
-
- self.updateSlide(slide);
-
- // Simply show content if no effect
- // ================================
- if (!effect) {
- slide.$content.removeClass("fancybox-is-hidden");
-
- if (!isRevealed && isMoved && slide.type === "image" && !slide.hasError) {
- slide.$content.hide().fadeIn("fast");
- }
-
- if (slide.pos === self.currPos) {
- self.complete();
- }
-
- return;
- }
-
- // Prepare for CSS transiton
- // =========================
- $.fancybox.stop($slide);
-
- //effectClassName = "fancybox-animated fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-fx-" + effect;
- effectClassName = "fancybox-slide--" + (slide.pos >= self.prevPos ? "next" : "previous") + " fancybox-animated fancybox-fx-" + effect;
-
- $slide.addClass(effectClassName).removeClass("fancybox-slide--current"); //.addClass(effectClassName);
-
- slide.$content.removeClass("fancybox-is-hidden");
-
- // Force reflow
- forceRedraw($slide);
-
- if (slide.type !== "image") {
- slide.$content.hide().show(0);
- }
-
- $.fancybox.animate(
- $slide,
- "fancybox-slide--current",
- duration,
- function () {
- $slide.removeClass(effectClassName).css({
- transform: "",
- opacity: ""
- });
-
- if (slide.pos === self.currPos) {
- self.complete();
- }
- },
- true
- );
- },
-
- // Check if we can and have to zoom from thumbnail
- //================================================
-
- getThumbPos: function (slide) {
- var rez = false,
- $thumb = slide.$thumb,
- thumbPos,
- btw,
- brw,
- bbw,
- blw;
-
- if (!$thumb || !inViewport($thumb[0])) {
- return false;
- }
-
- thumbPos = $.fancybox.getTranslate($thumb);
-
- btw = parseFloat($thumb.css("border-top-width") || 0);
- brw = parseFloat($thumb.css("border-right-width") || 0);
- bbw = parseFloat($thumb.css("border-bottom-width") || 0);
- blw = parseFloat($thumb.css("border-left-width") || 0);
-
- rez = {
- top: thumbPos.top + btw,
- left: thumbPos.left + blw,
- width: thumbPos.width - brw - blw,
- height: thumbPos.height - btw - bbw,
- scaleX: 1,
- scaleY: 1
- };
-
- return thumbPos.width > 0 && thumbPos.height > 0 ? rez : false;
- },
-
- // Final adjustments after current gallery item is moved to position
- // and it`s content is loaded
- // ==================================================================
-
- complete: function () {
- var self = this,
- current = self.current,
- slides = {},
- $el;
-
- if (self.isMoved() || !current.isLoaded) {
- return;
- }
-
- if (!current.isComplete) {
- current.isComplete = true;
-
- current.$slide.siblings().trigger("onReset");
-
- self.preload("inline");
-
- // Trigger any CSS transiton inside the slide
- forceRedraw(current.$slide);
-
- current.$slide.addClass("fancybox-slide--complete");
-
- // Remove unnecessary slides
- $.each(self.slides, function (key, slide) {
- if (slide.pos >= self.currPos - 1 && slide.pos <= self.currPos + 1) {
- slides[slide.pos] = slide;
- } else if (slide) {
- $.fancybox.stop(slide.$slide);
-
- slide.$slide.off().remove();
- }
- });
-
- self.slides = slides;
- }
-
- self.isAnimating = false;
-
- self.updateCursor();
-
- self.trigger("afterShow");
-
- // Autoplay first html5 video/audio
- if (!!current.opts.video.autoStart) {
- current.$slide
- .find("video,audio")
- .filter(":visible:first")
- .trigger("play")
- .one("ended", function () {
- if (Document.exitFullscreen) {
- Document.exitFullscreen();
- } else if (this.webkitExitFullscreen) {
- this.webkitExitFullscreen();
- }
-
- self.next();
- });
- }
-
- // Try to focus on the first focusable element
- if (current.opts.autoFocus && current.contentType === "html") {
- // Look for the first input with autofocus attribute
- $el = current.$content.find("input[autofocus]:enabled:visible:first");
-
- if ($el.length) {
- $el.trigger("focus");
- } else {
- self.focus(null, true);
- }
- }
-
- // Avoid jumping
- current.$slide.scrollTop(0).scrollLeft(0);
- },
-
- // Preload next and previous slides
- // ================================
-
- preload: function (type) {
- var self = this,
- prev,
- next;
-
- if (self.group.length < 2) {
- return;
- }
-
- next = self.slides[self.currPos + 1];
- prev = self.slides[self.currPos - 1];
-
- if (prev && prev.type === type) {
- self.loadSlide(prev);
- }
-
- if (next && next.type === type) {
- self.loadSlide(next);
- }
- },
-
- // Try to find and focus on the first focusable element
- // ====================================================
-
- focus: function (e, firstRun) {
- var self = this,
- focusableStr = [
- "a[href]",
- "area[href]",
- 'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',
- "select:not([disabled]):not([aria-hidden])",
- "textarea:not([disabled]):not([aria-hidden])",
- "button:not([disabled]):not([aria-hidden])",
- "iframe",
- "object",
- "embed",
- "video",
- "audio",
- "[contenteditable]",
- '[tabindex]:not([tabindex^="-"])'
- ].join(","),
- focusableItems,
- focusedItemIndex;
-
- if (self.isClosing) {
- return;
- }
-
- if (e || !self.current || !self.current.isComplete) {
- // Focus on any element inside fancybox
- focusableItems = self.$refs.container.find("*:visible");
- } else {
- // Focus inside current slide
- focusableItems = self.current.$slide.find("*:visible" + (firstRun ? ":not(.fancybox-close-small)" : ""));
- }
-
- focusableItems = focusableItems.filter(focusableStr).filter(function () {
- return $(this).css("visibility") !== "hidden" && !$(this).hasClass("disabled");
- });
-
- if (focusableItems.length) {
- focusedItemIndex = focusableItems.index(document.activeElement);
-
- if (e && e.shiftKey) {
- // Back tab
- if (focusedItemIndex < 0 || focusedItemIndex == 0) {
- e.preventDefault();
-
- focusableItems.eq(focusableItems.length - 1).trigger("focus");
- }
- } else {
- // Outside or Forward tab
- if (focusedItemIndex < 0 || focusedItemIndex == focusableItems.length - 1) {
- if (e) {
- e.preventDefault();
- }
-
- focusableItems.eq(0).trigger("focus");
- }
- }
- } else {
- self.$refs.container.trigger("focus");
- }
- },
-
- // Activates current instance - brings container to the front and enables keyboard,
- // notifies other instances about deactivating
- // =================================================================================
-
- activate: function () {
- var self = this;
-
- // Deactivate all instances
- $(".fancybox-container").each(function () {
- var instance = $(this).data("FancyBox");
-
- // Skip self and closing instances
- if (instance && instance.id !== self.id && !instance.isClosing) {
- instance.trigger("onDeactivate");
-
- instance.removeEvents();
-
- instance.isVisible = false;
- }
- });
-
- self.isVisible = true;
-
- if (self.current || self.isIdle) {
- self.update();
-
- self.updateControls();
- }
-
- self.trigger("onActivate");
-
- self.addEvents();
- },
-
- // Start closing procedure
- // This will start "zoom-out" animation if needed and clean everything up afterwards
- // =================================================================================
-
- close: function (e, d) {
- var self = this,
- current = self.current,
- effect,
- duration,
- $content,
- domRect,
- opacity,
- start,
- end;
-
- var done = function () {
- self.cleanUp(e);
- };
-
- if (self.isClosing) {
- return false;
- }
-
- self.isClosing = true;
-
- // If beforeClose callback prevents closing, make sure content is centered
- if (self.trigger("beforeClose", e) === false) {
- self.isClosing = false;
-
- requestAFrame(function () {
- self.update();
- });
-
- return false;
- }
-
- // Remove all events
- // If there are multiple instances, they will be set again by "activate" method
- self.removeEvents();
-
- $content = current.$content;
- effect = current.opts.animationEffect;
- duration = $.isNumeric(d) ? d : effect ? current.opts.animationDuration : 0;
-
- current.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated");
-
- if (e !== true) {
- $.fancybox.stop(current.$slide);
- } else {
- effect = false;
- }
-
- // Remove other slides
- current.$slide
- .siblings()
- .trigger("onReset")
- .remove();
-
- // Trigger animations
- if (duration) {
- self.$refs.container
- .removeClass("fancybox-is-open")
- .addClass("fancybox-is-closing")
- .css("transition-duration", duration + "ms");
- }
-
- // Clean up
- self.hideLoading(current);
-
- self.hideControls(true);
-
- self.updateCursor();
-
- // Check if possible to zoom-out
- if (
- effect === "zoom" &&
- !($content && duration && current.type === "image" && !self.isMoved() && !current.hasError && (end = self.getThumbPos(current)))
- ) {
- effect = "fade";
- }
-
- if (effect === "zoom") {
- $.fancybox.stop($content);
-
- domRect = $.fancybox.getTranslate($content);
-
- start = {
- top: domRect.top,
- left: domRect.left,
- scaleX: domRect.width / end.width,
- scaleY: domRect.height / end.height,
- width: end.width,
- height: end.height
- };
-
- // Check if we need to animate opacity
- opacity = current.opts.zoomOpacity;
-
- if (opacity == "auto") {
- opacity = Math.abs(current.width / current.height - end.width / end.height) > 0.1;
- }
-
- if (opacity) {
- end.opacity = 0;
- }
-
- $.fancybox.setTranslate($content, start);
-
- forceRedraw($content);
-
- $.fancybox.animate($content, end, duration, done);
-
- return true;
- }
-
- if (effect && duration) {
- $.fancybox.animate(
- current.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),
- "fancybox-animated fancybox-fx-" + effect,
- duration,
- done
- );
- } else {
- // If skip animation
- if (e === true) {
- setTimeout(done, duration);
- } else {
- done();
- }
- }
-
- return true;
- },
-
- // Final adjustments after removing the instance
- // =============================================
-
- cleanUp: function (e) {
- var self = this,
- instance,
- $focus = self.current.opts.$orig,
- x,
- y;
-
- self.current.$slide.trigger("onReset");
-
- self.$refs.container.empty().remove();
-
- self.trigger("afterClose", e);
-
- // Place back focus
- if (!!self.current.opts.backFocus) {
- if (!$focus || !$focus.length || !$focus.is(":visible")) {
- $focus = self.$trigger;
- }
-
- if ($focus && $focus.length) {
- x = window.scrollX;
- y = window.scrollY;
-
- $focus.trigger("focus");
-
- $("html, body")
- .scrollTop(y)
- .scrollLeft(x);
- }
- }
-
- self.current = null;
-
- // Check if there are other instances
- instance = $.fancybox.getInstance();
-
- if (instance) {
- instance.activate();
- } else {
- $("body").removeClass("fancybox-active compensate-for-scrollbar");
-
- $("#fancybox-style-noscroll").remove();
- }
- },
-
- // Call callback and trigger an event
- // ==================================
-
- trigger: function (name, slide) {
- var args = Array.prototype.slice.call(arguments, 1),
- self = this,
- obj = slide && slide.opts ? slide : self.current,
- rez;
-
- if (obj) {
- args.unshift(obj);
- } else {
- obj = self;
- }
-
- args.unshift(self);
-
- if ($.isFunction(obj.opts[name])) {
- rez = obj.opts[name].apply(obj, args);
- }
-
- if (rez === false) {
- return rez;
- }
-
- if (name === "afterClose" || !self.$refs) {
- $D.trigger(name + ".fb", args);
- } else {
- self.$refs.container.trigger(name + ".fb", args);
- }
- },
-
- // Update infobar values, navigation button states and reveal caption
- // ==================================================================
-
- updateControls: function () {
- var self = this,
- current = self.current,
- index = current.index,
- $container = self.$refs.container,
- $caption = self.$refs.caption,
- caption = current.opts.caption;
-
- // Recalculate content dimensions
- current.$slide.trigger("refresh");
-
- // Set caption
- if (caption && caption.length) {
- self.$caption = $caption;
-
- $caption
- .children()
- .eq(0)
- .html(caption);
- } else {
- self.$caption = null;
- }
-
- if (!self.hasHiddenControls && !self.isIdle) {
- self.showControls();
- }
-
- // Update info and navigation elements
- $container.find("[data-fancybox-count]").html(self.group.length);
- $container.find("[data-fancybox-index]").html(index + 1);
-
- $container.find("[data-fancybox-prev]").prop("disabled", !current.opts.loop && index <= 0);
- $container.find("[data-fancybox-next]").prop("disabled", !current.opts.loop && index >= self.group.length - 1);
-
- if (current.type === "image") {
- // Re-enable buttons; update download button source
- $container
- .find("[data-fancybox-zoom]")
- .show()
- .end()
- .find("[data-fancybox-download]")
- .attr("href", current.opts.image.src || current.src)
- .show();
- } else if (current.opts.toolbar) {
- $container.find("[data-fancybox-download],[data-fancybox-zoom]").hide();
- }
-
- // Make sure focus is not on disabled button/element
- if ($(document.activeElement).is(":hidden,[disabled]")) {
- self.$refs.container.trigger("focus");
- }
- },
-
- // Hide toolbar and caption
- // ========================
-
- hideControls: function (andCaption) {
- var self = this,
- arr = ["infobar", "toolbar", "nav"];
-
- if (andCaption || !self.current.opts.preventCaptionOverlap) {
- arr.push("caption");
- }
-
- this.$refs.container.removeClass(
- arr
- .map(function (i) {
- return "fancybox-show-" + i;
- })
- .join(" ")
- );
-
- this.hasHiddenControls = true;
- },
-
- showControls: function () {
- var self = this,
- opts = self.current ? self.current.opts : self.opts,
- $container = self.$refs.container;
-
- self.hasHiddenControls = false;
- self.idleSecondsCounter = 0;
-
- $container
- .toggleClass("fancybox-show-toolbar", !!(opts.toolbar && opts.buttons))
- .toggleClass("fancybox-show-infobar", !!(opts.infobar && self.group.length > 1))
- .toggleClass("fancybox-show-caption", !!self.$caption)
- .toggleClass("fancybox-show-nav", !!(opts.arrows && self.group.length > 1))
- .toggleClass("fancybox-is-modal", !!opts.modal);
- },
-
- // Toggle toolbar and caption
- // ==========================
-
- toggleControls: function () {
- if (this.hasHiddenControls) {
- this.showControls();
- } else {
- this.hideControls();
- }
- }
- });
-
- $.fancybox = {
- version: "3.5.7",
- defaults: defaults,
-
- // Get current instance and execute a command.
- //
- // Examples of usage:
- //
- // $instance = $.fancybox.getInstance();
- // $.fancybox.getInstance().jumpTo( 1 );
- // $.fancybox.getInstance( 'jumpTo', 1 );
- // $.fancybox.getInstance( function() {
- // console.info( this.currIndex );
- // });
- // ======================================================
-
- getInstance: function (command) {
- var instance = $('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),
- args = Array.prototype.slice.call(arguments, 1);
-
- if (instance instanceof FancyBox) {
- if ($.type(command) === "string") {
- instance[command].apply(instance, args);
- } else if ($.type(command) === "function") {
- command.apply(instance, args);
- }
-
- return instance;
- }
-
- return false;
- },
-
- // Create new instance
- // ===================
-
- open: function (items, opts, index) {
- return new FancyBox(items, opts, index);
- },
-
- // Close current or all instances
- // ==============================
-
- close: function (all) {
- var instance = this.getInstance();
-
- if (instance) {
- instance.close();
-
- // Try to find and close next instance
- if (all === true) {
- this.close(all);
- }
- }
- },
-
- // Close all instances and unbind all events
- // =========================================
-
- destroy: function () {
- this.close(true);
-
- $D.add("body").off("click.fb-start", "**");
- },
-
- // Try to detect mobile devices
- // ============================
-
- isMobile: /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
-
- // Detect if 'translate3d' support is available
- // ============================================
-
- use3d: (function () {
- var div = document.createElement("div");
-
- return (
- window.getComputedStyle &&
- window.getComputedStyle(div) &&
- window.getComputedStyle(div).getPropertyValue("transform") &&
- !(document.documentMode && document.documentMode < 11)
- );
- })(),
-
- // Helper function to get current visual state of an element
- // returns array[ top, left, horizontal-scale, vertical-scale, opacity ]
- // =====================================================================
-
- getTranslate: function ($el) {
- var domRect;
-
- if (!$el || !$el.length) {
- return false;
- }
-
- domRect = $el[0].getBoundingClientRect();
-
- return {
- top: domRect.top || 0,
- left: domRect.left || 0,
- width: domRect.width,
- height: domRect.height,
- opacity: parseFloat($el.css("opacity"))
- };
- },
-
- // Shortcut for setting "translate3d" properties for element
- // Can set be used to set opacity, too
- // ========================================================
-
- setTranslate: function ($el, props) {
- var str = "",
- css = {};
-
- if (!$el || !props) {
- return;
- }
-
- if (props.left !== undefined || props.top !== undefined) {
- str =
- (props.left === undefined ? $el.position().left : props.left) +
- "px, " +
- (props.top === undefined ? $el.position().top : props.top) +
- "px";
-
- if (this.use3d) {
- str = "translate3d(" + str + ", 0px)";
- } else {
- str = "translate(" + str + ")";
- }
- }
-
- if (props.scaleX !== undefined && props.scaleY !== undefined) {
- str += " scale(" + props.scaleX + ", " + props.scaleY + ")";
- } else if (props.scaleX !== undefined) {
- str += " scaleX(" + props.scaleX + ")";
- }
-
- if (str.length) {
- css.transform = str;
- }
-
- if (props.opacity !== undefined) {
- css.opacity = props.opacity;
- }
-
- if (props.width !== undefined) {
- css.width = props.width;
- }
-
- if (props.height !== undefined) {
- css.height = props.height;
- }
-
- return $el.css(css);
- },
-
- // Simple CSS transition handler
- // =============================
-
- animate: function ($el, to, duration, callback, leaveAnimationName) {
- var self = this,
- from;
-
- if ($.isFunction(duration)) {
- callback = duration;
- duration = null;
- }
-
- self.stop($el);
-
- from = self.getTranslate($el);
-
- $el.on(transitionEnd, function (e) {
- // Skip events from child elements and z-index change
- if (e && e.originalEvent && (!$el.is(e.originalEvent.target) || e.originalEvent.propertyName == "z-index")) {
- return;
- }
-
- self.stop($el);
-
- if ($.isNumeric(duration)) {
- $el.css("transition-duration", "");
- }
-
- if ($.isPlainObject(to)) {
- if (to.scaleX !== undefined && to.scaleY !== undefined) {
- self.setTranslate($el, {
- top: to.top,
- left: to.left,
- width: from.width * to.scaleX,
- height: from.height * to.scaleY,
- scaleX: 1,
- scaleY: 1
- });
- }
- } else if (leaveAnimationName !== true) {
- $el.removeClass(to);
- }
-
- if ($.isFunction(callback)) {
- callback(e);
- }
- });
-
- if ($.isNumeric(duration)) {
- $el.css("transition-duration", duration + "ms");
- }
-
- // Start animation by changing CSS properties or class name
- if ($.isPlainObject(to)) {
- if (to.scaleX !== undefined && to.scaleY !== undefined) {
- delete to.width;
- delete to.height;
-
- if ($el.parent().hasClass("fancybox-slide--image")) {
- $el.parent().addClass("fancybox-is-scaling");
- }
- }
-
- $.fancybox.setTranslate($el, to);
- } else {
- $el.addClass(to);
- }
-
- // Make sure that `transitionend` callback gets fired
- $el.data(
- "timer",
- setTimeout(function () {
- $el.trigger(transitionEnd);
- }, duration + 33)
- );
- },
-
- stop: function ($el, callCallback) {
- if ($el && $el.length) {
- clearTimeout($el.data("timer"));
-
- if (callCallback) {
- $el.trigger(transitionEnd);
- }
-
- $el.off(transitionEnd).css("transition-duration", "");
-
- $el.parent().removeClass("fancybox-is-scaling");
- }
- }
- };
-
- // Default click handler for "fancyboxed" links
- // ============================================
-
- function _run(e, opts) {
- var items = [],
- index = 0,
- $target,
- value,
- instance;
-
- // Avoid opening multiple times
- if (e && e.isDefaultPrevented()) {
- return;
- }
-
- e.preventDefault();
-
- opts = opts || {};
-
- if (e && e.data) {
- opts = mergeOpts(e.data.options, opts);
- }
-
- $target = opts.$target || $(e.currentTarget).trigger("blur");
- instance = $.fancybox.getInstance();
-
- if (instance && instance.$trigger && instance.$trigger.is($target)) {
- return;
- }
-
- if (opts.selector) {
- items = $(opts.selector);
- } else {
- // Get all related items and find index for clicked one
- value = $target.attr("data-fancybox") || "";
-
- if (value) {
- items = e.data ? e.data.items : [];
- items = items.length ? items.filter('[data-fancybox="' + value + '"]') : $('[data-fancybox="' + value + '"]');
- } else {
- items = [$target];
- }
- }
-
- index = $(items).index($target);
-
- // Sometimes current item can not be found
- if (index < 0) {
- index = 0;
- }
-
- instance = $.fancybox.open(items, opts, index);
-
- // Save last active element
- instance.$trigger = $target;
- }
-
- // Create a jQuery plugin
- // ======================
-
- $.fn.fancybox = function (options) {
- var selector;
-
- options = options || {};
- selector = options.selector || false;
-
- if (selector) {
- // Use body element instead of document so it executes first
- $("body")
- .off("click.fb-start", selector)
- .on("click.fb-start", selector, {
- options: options
- }, _run);
- } else {
- this.off("click.fb-start").on(
- "click.fb-start", {
- items: this,
- options: options
- },
- _run
- );
- }
-
- return this;
- };
-
- // Self initializing plugin for all elements having `data-fancybox` attribute
- // ==========================================================================
-
- $D.on("click.fb-start", "[data-fancybox]", _run);
-
- // Enable "trigger elements"
- // =========================
-
- $D.on("click.fb-start", "[data-fancybox-trigger]", function (e) {
- $('[data-fancybox="' + $(this).attr("data-fancybox-trigger") + '"]')
- .eq($(this).attr("data-fancybox-index") || 0)
- .trigger("click.fb-start", {
- $trigger: $(this)
- });
- });
-
- // Track focus event for better accessibility styling
- // ==================================================
- (function () {
- var buttonStr = ".fancybox-button",
- focusStr = "fancybox-focus",
- $pressed = null;
-
- $D.on("mousedown mouseup focus blur", buttonStr, function (e) {
- switch (e.type) {
- case "mousedown":
- $pressed = $(this);
- break;
- case "mouseup":
- $pressed = null;
- break;
- case "focusin":
- $(buttonStr).removeClass(focusStr);
-
- if (!$(this).is($pressed) && !$(this).is("[disabled]")) {
- $(this).addClass(focusStr);
- }
- break;
- case "focusout":
- $(buttonStr).removeClass(focusStr);
- break;
- }
- });
- })();
-})(window, document, jQuery);
-// ==========================================================================
-//
-// Media
-// Adds additional media type support
-//
-// ==========================================================================
-(function ($) {
- "use strict";
-
- // Object containing properties for each media type
- var defaults = {
- youtube: {
- matcher: /(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,
- params: {
- autoplay: 1,
- autohide: 1,
- fs: 1,
- rel: 0,
- hd: 1,
- wmode: "transparent",
- enablejsapi: 1,
- html5: 1
- },
- paramPlace: 8,
- type: "iframe",
- url: "https://www.youtube-nocookie.com/embed/$4",
- thumb: "https://img.youtube.com/vi/$4/hqdefault.jpg"
- },
-
- vimeo: {
- matcher: /^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,
- params: {
- autoplay: 1,
- hd: 1,
- show_title: 1,
- show_byline: 1,
- show_portrait: 0,
- fullscreen: 1
- },
- paramPlace: 3,
- type: "iframe",
- url: "//player.vimeo.com/video/$2"
- },
-
- instagram: {
- matcher: /(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,
- type: "image",
- url: "//$1/p/$2/media/?size=l"
- },
-
- // Examples:
- // http://maps.google.com/?ll=48.857995,2.294297&spn=0.007666,0.021136&t=m&z=16
- // https://www.google.com/maps/@37.7852006,-122.4146355,14.65z
- // https://www.google.com/maps/@52.2111123,2.9237542,6.61z?hl=en
- // https://www.google.com/maps/place/Googleplex/@37.4220041,-122.0833494,17z/data=!4m5!3m4!1s0x0:0x6c296c66619367e0!8m2!3d37.4219998!4d-122.0840572
- gmap_place: {
- matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,
- type: "iframe",
- url: function (rez) {
- return (
- "//maps.google." +
- rez[2] +
- "/?ll=" +
- (rez[9] ? rez[9] + "&z=" + Math.floor(rez[10]) + (rez[12] ? rez[12].replace(/^\//, "&") : "") : rez[12] + "").replace(/\?/, "&") +
- "&output=" +
- (rez[12] && rez[12].indexOf("layer=c") > 0 ? "svembed" : "embed")
- );
- }
- },
-
- // Examples:
- // https://www.google.com/maps/search/Empire+State+Building/
- // https://www.google.com/maps/search/?api=1&query=centurylink+field
- // https://www.google.com/maps/search/?api=1&query=47.5951518,-122.3316393
- gmap_search: {
- matcher: /(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,
- type: "iframe",
- url: function (rez) {
- return "//maps.google." + rez[2] + "/maps?q=" + rez[5].replace("query=", "q=").replace("api=1", "") + "&output=embed";
- }
- }
- };
-
- // Formats matching url to final form
- var format = function (url, rez, params) {
- if (!url) {
- return;
- }
-
- params = params || "";
-
- if ($.type(params) === "object") {
- params = $.param(params, true);
- }
-
- $.each(rez, function (key, value) {
- url = url.replace("$" + key, value || "");
- });
-
- if (params.length) {
- url += (url.indexOf("?") > 0 ? "&" : "?") + params;
- }
-
- return url;
- };
-
- $(document).on("objectNeedsType.fb", function (e, instance, item) {
- var url = item.src || "",
- type = false,
- media,
- thumb,
- rez,
- params,
- urlParams,
- paramObj,
- provider;
-
- media = $.extend(true, {}, defaults, item.opts.media);
-
- // Look for any matching media type
- $.each(media, function (providerName, providerOpts) {
- rez = url.match(providerOpts.matcher);
-
- if (!rez) {
- return;
- }
-
- type = providerOpts.type;
- provider = providerName;
- paramObj = {};
-
- if (providerOpts.paramPlace && rez[providerOpts.paramPlace]) {
- urlParams = rez[providerOpts.paramPlace];
-
- if (urlParams[0] == "?") {
- urlParams = urlParams.substring(1);
- }
-
- urlParams = urlParams.split("&");
-
- for (var m = 0; m < urlParams.length; ++m) {
- var p = urlParams[m].split("=", 2);
-
- if (p.length == 2) {
- paramObj[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
- }
- }
- }
-
- params = $.extend(true, {}, providerOpts.params, item.opts[providerName], paramObj);
-
- url =
- $.type(providerOpts.url) === "function" ? providerOpts.url.call(this, rez, params, item) : format(providerOpts.url, rez, params);
-
- thumb =
- $.type(providerOpts.thumb) === "function" ? providerOpts.thumb.call(this, rez, params, item) : format(providerOpts.thumb, rez);
-
- if (providerName === "youtube") {
- url = url.replace(/&t=((\d+)m)?(\d+)s/, function (match, p1, m, s) {
- return "&start=" + ((m ? parseInt(m, 10) * 60 : 0) + parseInt(s, 10));
- });
- } else if (providerName === "vimeo") {
- url = url.replace("&%23", "#");
- }
-
- return false;
- });
-
- // If it is found, then change content type and update the url
-
- if (type) {
- if (!item.opts.thumb && !(item.opts.$thumb && item.opts.$thumb.length)) {
- item.opts.thumb = thumb;
- }
-
- if (type === "iframe") {
- item.opts = $.extend(true, item.opts, {
- iframe: {
- preload: false,
- attr: {
- scrolling: "no"
- }
- }
- });
- }
-
- $.extend(item, {
- type: type,
- src: url,
- origSrc: item.src,
- contentSource: provider,
- contentType: type === "image" ? "image" : provider == "gmap_place" || provider == "gmap_search" ? "map" : "video"
- });
- } else if (url) {
- item.type = item.opts.defaultType;
- }
- });
-
- // Load YouTube/Video API on request to detect when video finished playing
- var VideoAPILoader = {
- youtube: {
- src: "https://www.youtube.com/iframe_api",
- class: "YT",
- loading: false,
- loaded: false
- },
-
- vimeo: {
- src: "https://player.vimeo.com/api/player.js",
- class: "Vimeo",
- loading: false,
- loaded: false
- },
-
- load: function (vendor) {
- var _this = this,
- script;
-
- if (this[vendor].loaded) {
- setTimeout(function () {
- _this.done(vendor);
- });
- return;
- }
-
- if (this[vendor].loading) {
- return;
- }
-
- this[vendor].loading = true;
-
- script = document.createElement("script");
- script.type = "text/javascript";
- script.src = this[vendor].src;
-
- if (vendor === "youtube") {
- window.onYouTubeIframeAPIReady = function () {
- _this[vendor].loaded = true;
- _this.done(vendor);
- };
- } else {
- script.onload = function () {
- _this[vendor].loaded = true;
- _this.done(vendor);
- };
- }
-
- document.body.appendChild(script);
- },
- done: function (vendor) {
- var instance, $el, player;
-
- if (vendor === "youtube") {
- delete window.onYouTubeIframeAPIReady;
- }
-
- instance = $.fancybox.getInstance();
-
- if (instance) {
- $el = instance.current.$content.find("iframe");
-
- if (vendor === "youtube" && YT !== undefined && YT) {
- player = new YT.Player($el.attr("id"), {
- events: {
- onStateChange: function (e) {
- if (e.data == 0) {
- instance.next();
- }
- }
- }
- });
- } else if (vendor === "vimeo" && Vimeo !== undefined && Vimeo) {
- player = new Vimeo.Player($el);
-
- player.on("ended", function () {
- instance.next();
- });
- }
- }
- }
- };
-
- $(document).on({
- "afterShow.fb": function (e, instance, current) {
- if (instance.group.length > 1 && (current.contentSource === "youtube" || current.contentSource === "vimeo")) {
- VideoAPILoader.load(current.contentSource);
- }
- }
- });
-})(jQuery);
-// ==========================================================================
-//
-// Guestures
-// Adds touch guestures, handles click and tap events
-//
-// ==========================================================================
-(function (window, document, $) {
- "use strict";
-
- var requestAFrame = (function () {
- return (
- window.requestAnimationFrame ||
- window.webkitRequestAnimationFrame ||
- window.mozRequestAnimationFrame ||
- window.oRequestAnimationFrame ||
- // if all else fails, use setTimeout
- function (callback) {
- return window.setTimeout(callback, 1000 / 60);
- }
- );
- })();
-
- var cancelAFrame = (function () {
- return (
- window.cancelAnimationFrame ||
- window.webkitCancelAnimationFrame ||
- window.mozCancelAnimationFrame ||
- window.oCancelAnimationFrame ||
- function (id) {
- window.clearTimeout(id);
- }
- );
- })();
-
- var getPointerXY = function (e) {
- var result = [];
-
- e = e.originalEvent || e || window.e;
- e = e.touches && e.touches.length ? e.touches : e.changedTouches && e.changedTouches.length ? e.changedTouches : [e];
-
- for (var key in e) {
- if (e[key].pageX) {
- result.push({
- x: e[key].pageX,
- y: e[key].pageY
- });
- } else if (e[key].clientX) {
- result.push({
- x: e[key].clientX,
- y: e[key].clientY
- });
- }
- }
-
- return result;
- };
-
- var distance = function (point2, point1, what) {
- if (!point1 || !point2) {
- return 0;
- }
-
- if (what === "x") {
- return point2.x - point1.x;
- } else if (what === "y") {
- return point2.y - point1.y;
- }
-
- return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2));
- };
-
- var isClickable = function ($el) {
- if (
- $el.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe') ||
- $.isFunction($el.get(0).onclick) ||
- $el.data("selectable")
- ) {
- return true;
- }
-
- // Check for attributes like data-fancybox-next or data-fancybox-close
- for (var i = 0, atts = $el[0].attributes, n = atts.length; i < n; i++) {
- if (atts[i].nodeName.substr(0, 14) === "data-fancybox-") {
- return true;
- }
- }
-
- return false;
- };
-
- var hasScrollbars = function (el) {
- var overflowY = window.getComputedStyle(el)["overflow-y"],
- overflowX = window.getComputedStyle(el)["overflow-x"],
- vertical = (overflowY === "scroll" || overflowY === "auto") && el.scrollHeight > el.clientHeight,
- horizontal = (overflowX === "scroll" || overflowX === "auto") && el.scrollWidth > el.clientWidth;
-
- return vertical || horizontal;
- };
-
- var isScrollable = function ($el) {
- var rez = false;
-
- while (true) {
- rez = hasScrollbars($el.get(0));
-
- if (rez) {
- break;
- }
-
- $el = $el.parent();
-
- if (!$el.length || $el.hasClass("fancybox-stage") || $el.is("body")) {
- break;
- }
- }
-
- return rez;
- };
-
- var Guestures = function (instance) {
- var self = this;
-
- self.instance = instance;
-
- self.$bg = instance.$refs.bg;
- self.$stage = instance.$refs.stage;
- self.$container = instance.$refs.container;
-
- self.destroy();
-
- self.$container.on("touchstart.fb.touch mousedown.fb.touch", $.proxy(self, "ontouchstart"));
- };
-
- Guestures.prototype.destroy = function () {
- var self = this;
-
- self.$container.off(".fb.touch");
-
- $(document).off(".fb.touch");
-
- if (self.requestId) {
- cancelAFrame(self.requestId);
- self.requestId = null;
- }
-
- if (self.tapped) {
- clearTimeout(self.tapped);
- self.tapped = null;
- }
- };
-
- Guestures.prototype.ontouchstart = function (e) {
- var self = this,
- $target = $(e.target),
- instance = self.instance,
- current = instance.current,
- $slide = current.$slide,
- $content = current.$content,
- isTouchDevice = e.type == "touchstart";
-
- // Do not respond to both (touch and mouse) events
- if (isTouchDevice) {
- self.$container.off("mousedown.fb.touch");
- }
-
- // Ignore right click
- if (e.originalEvent && e.originalEvent.button == 2) {
- return;
- }
-
- // Ignore taping on links, buttons, input elements
- if (!$slide.length || !$target.length || isClickable($target) || isClickable($target.parent())) {
- return;
- }
- // Ignore clicks on the scrollbar
- if (!$target.is("img") && e.originalEvent.clientX > $target[0].clientWidth + $target.offset().left) {
- return;
- }
-
- // Ignore clicks while zooming or closing
- if (!current || instance.isAnimating || current.$slide.hasClass("fancybox-animated")) {
- e.stopPropagation();
- e.preventDefault();
-
- return;
- }
-
- self.realPoints = self.startPoints = getPointerXY(e);
-
- if (!self.startPoints.length) {
- return;
- }
-
- // Allow other scripts to catch touch event if "touch" is set to false
- if (current.touch) {
- e.stopPropagation();
- }
-
- self.startEvent = e;
-
- self.canTap = true;
- self.$target = $target;
- self.$content = $content;
- self.opts = current.opts.touch;
-
- self.isPanning = false;
- self.isSwiping = false;
- self.isZooming = false;
- self.isScrolling = false;
- self.canPan = instance.canPan();
-
- self.startTime = new Date().getTime();
- self.distanceX = self.distanceY = self.distance = 0;
-
- self.canvasWidth = Math.round($slide[0].clientWidth);
- self.canvasHeight = Math.round($slide[0].clientHeight);
-
- self.contentLastPos = null;
- self.contentStartPos = $.fancybox.getTranslate(self.$content) || {
- top: 0,
- left: 0
- };
- self.sliderStartPos = $.fancybox.getTranslate($slide);
-
- // Since position will be absolute, but we need to make it relative to the stage
- self.stagePos = $.fancybox.getTranslate(instance.$refs.stage);
-
- self.sliderStartPos.top -= self.stagePos.top;
- self.sliderStartPos.left -= self.stagePos.left;
-
- self.contentStartPos.top -= self.stagePos.top;
- self.contentStartPos.left -= self.stagePos.left;
-
- $(document)
- .off(".fb.touch")
- .on(isTouchDevice ? "touchend.fb.touch touchcancel.fb.touch" : "mouseup.fb.touch mouseleave.fb.touch", $.proxy(self, "ontouchend"))
- .on(isTouchDevice ? "touchmove.fb.touch" : "mousemove.fb.touch", $.proxy(self, "ontouchmove"));
-
- if ($.fancybox.isMobile) {
- document.addEventListener("scroll", self.onscroll, true);
- }
-
- // Skip if clicked outside the sliding area
- if (!(self.opts || self.canPan) || !($target.is(self.$stage) || self.$stage.find($target).length)) {
- if ($target.is(".fancybox-image")) {
- e.preventDefault();
- }
-
- if (!($.fancybox.isMobile && $target.parents(".fancybox-caption").length)) {
- return;
- }
- }
-
- self.isScrollable = isScrollable($target) || isScrollable($target.parent());
-
- // Check if element is scrollable and try to prevent default behavior (scrolling)
- if (!($.fancybox.isMobile && self.isScrollable)) {
- e.preventDefault();
- }
-
- // One finger or mouse click - swipe or pan an image
- if (self.startPoints.length === 1 || current.hasError) {
- if (self.canPan) {
- $.fancybox.stop(self.$content);
-
- self.isPanning = true;
- } else {
- self.isSwiping = true;
- }
-
- self.$container.addClass("fancybox-is-grabbing");
- }
-
- // Two fingers - zoom image
- if (self.startPoints.length === 2 && current.type === "image" && (current.isLoaded || current.$ghost)) {
- self.canTap = false;
- self.isSwiping = false;
- self.isPanning = false;
-
- self.isZooming = true;
-
- $.fancybox.stop(self.$content);
-
- self.centerPointStartX = (self.startPoints[0].x + self.startPoints[1].x) * 0.5 - $(window).scrollLeft();
- self.centerPointStartY = (self.startPoints[0].y + self.startPoints[1].y) * 0.5 - $(window).scrollTop();
-
- self.percentageOfImageAtPinchPointX = (self.centerPointStartX - self.contentStartPos.left) / self.contentStartPos.width;
- self.percentageOfImageAtPinchPointY = (self.centerPointStartY - self.contentStartPos.top) / self.contentStartPos.height;
-
- self.startDistanceBetweenFingers = distance(self.startPoints[0], self.startPoints[1]);
- }
- };
-
- Guestures.prototype.onscroll = function (e) {
- var self = this;
-
- self.isScrolling = true;
-
- document.removeEventListener("scroll", self.onscroll, true);
- };
-
- Guestures.prototype.ontouchmove = function (e) {
- var self = this;
-
- // Make sure user has not released over iframe or disabled element
- if (e.originalEvent.buttons !== undefined && e.originalEvent.buttons === 0) {
- self.ontouchend(e);
- return;
- }
-
- if (self.isScrolling) {
- self.canTap = false;
- return;
- }
-
- self.newPoints = getPointerXY(e);
-
- if (!(self.opts || self.canPan) || !self.newPoints.length || !self.newPoints.length) {
- return;
- }
-
- if (!(self.isSwiping && self.isSwiping === true)) {
- e.preventDefault();
- }
-
- self.distanceX = distance(self.newPoints[0], self.startPoints[0], "x");
- self.distanceY = distance(self.newPoints[0], self.startPoints[0], "y");
-
- self.distance = distance(self.newPoints[0], self.startPoints[0]);
-
- // Skip false ontouchmove events (Chrome)
- if (self.distance > 0) {
- if (self.isSwiping) {
- self.onSwipe(e);
- } else if (self.isPanning) {
- self.onPan();
- } else if (self.isZooming) {
- self.onZoom();
- }
- }
- };
-
- Guestures.prototype.onSwipe = function (e) {
- var self = this,
- instance = self.instance,
- swiping = self.isSwiping,
- left = self.sliderStartPos.left || 0,
- angle;
-
- // If direction is not yet determined
- if (swiping === true) {
- // We need at least 10px distance to correctly calculate an angle
- if (Math.abs(self.distance) > 10) {
- self.canTap = false;
-
- if (instance.group.length < 2 && self.opts.vertical) {
- self.isSwiping = "y";
- } else if (instance.isDragging || self.opts.vertical === false || (self.opts.vertical === "auto" && $(window).width() > 800)) {
- self.isSwiping = "x";
- } else {
- angle = Math.abs((Math.atan2(self.distanceY, self.distanceX) * 180) / Math.PI);
-
- self.isSwiping = angle > 45 && angle < 135 ? "y" : "x";
- }
-
- if (self.isSwiping === "y" && $.fancybox.isMobile && self.isScrollable) {
- self.isScrolling = true;
-
- return;
- }
-
- instance.isDragging = self.isSwiping;
-
- // Reset points to avoid jumping, because we dropped first swipes to calculate the angle
- self.startPoints = self.newPoints;
-
- $.each(instance.slides, function (index, slide) {
- var slidePos, stagePos;
-
- $.fancybox.stop(slide.$slide);
-
- slidePos = $.fancybox.getTranslate(slide.$slide);
- stagePos = $.fancybox.getTranslate(instance.$refs.stage);
-
- slide.$slide
- .css({
- transform: "",
- opacity: "",
- "transition-duration": ""
- })
- .removeClass("fancybox-animated")
- .removeClass(function (index, className) {
- return (className.match(/(^|\s)fancybox-fx-\S+/g) || []).join(" ");
- });
-
- if (slide.pos === instance.current.pos) {
- self.sliderStartPos.top = slidePos.top - stagePos.top;
- self.sliderStartPos.left = slidePos.left - stagePos.left;
- }
-
- $.fancybox.setTranslate(slide.$slide, {
- top: slidePos.top - stagePos.top,
- left: slidePos.left - stagePos.left
- });
- });
-
- // Stop slideshow
- if (instance.SlideShow && instance.SlideShow.isActive) {
- instance.SlideShow.stop();
- }
- }
-
- return;
- }
-
- // Sticky edges
- if (swiping == "x") {
- if (
- self.distanceX > 0 &&
- (self.instance.group.length < 2 || (self.instance.current.index === 0 && !self.instance.current.opts.loop))
- ) {
- left = left + Math.pow(self.distanceX, 0.8);
- } else if (
- self.distanceX < 0 &&
- (self.instance.group.length < 2 ||
- (self.instance.current.index === self.instance.group.length - 1 && !self.instance.current.opts.loop))
- ) {
- left = left - Math.pow(-self.distanceX, 0.8);
- } else {
- left = left + self.distanceX;
- }
- }
-
- self.sliderLastPos = {
- top: swiping == "x" ? 0 : self.sliderStartPos.top + self.distanceY,
- left: left
- };
-
- if (self.requestId) {
- cancelAFrame(self.requestId);
-
- self.requestId = null;
- }
-
- self.requestId = requestAFrame(function () {
- if (self.sliderLastPos) {
- $.each(self.instance.slides, function (index, slide) {
- var pos = slide.pos - self.instance.currPos;
-
- $.fancybox.setTranslate(slide.$slide, {
- top: self.sliderLastPos.top,
- left: self.sliderLastPos.left + pos * self.canvasWidth + pos * slide.opts.gutter
- });
- });
-
- self.$container.addClass("fancybox-is-sliding");
- }
- });
- };
-
- Guestures.prototype.onPan = function () {
- var self = this;
-
- // Prevent accidental movement (sometimes, when tapping casually, finger can move a bit)
- if (distance(self.newPoints[0], self.realPoints[0]) < ($.fancybox.isMobile ? 10 : 5)) {
- self.startPoints = self.newPoints;
- return;
- }
-
- self.canTap = false;
-
- self.contentLastPos = self.limitMovement();
-
- if (self.requestId) {
- cancelAFrame(self.requestId);
- }
-
- self.requestId = requestAFrame(function () {
- $.fancybox.setTranslate(self.$content, self.contentLastPos);
- });
- };
-
- // Make panning sticky to the edges
- Guestures.prototype.limitMovement = function () {
- var self = this;
-
- var canvasWidth = self.canvasWidth;
- var canvasHeight = self.canvasHeight;
-
- var distanceX = self.distanceX;
- var distanceY = self.distanceY;
-
- var contentStartPos = self.contentStartPos;
-
- var currentOffsetX = contentStartPos.left;
- var currentOffsetY = contentStartPos.top;
-
- var currentWidth = contentStartPos.width;
- var currentHeight = contentStartPos.height;
-
- var minTranslateX, minTranslateY, maxTranslateX, maxTranslateY, newOffsetX, newOffsetY;
-
- if (currentWidth > canvasWidth) {
- newOffsetX = currentOffsetX + distanceX;
- } else {
- newOffsetX = currentOffsetX;
- }
-
- newOffsetY = currentOffsetY + distanceY;
-
- // Slow down proportionally to traveled distance
- minTranslateX = Math.max(0, canvasWidth * 0.5 - currentWidth * 0.5);
- minTranslateY = Math.max(0, canvasHeight * 0.5 - currentHeight * 0.5);
-
- maxTranslateX = Math.min(canvasWidth - currentWidth, canvasWidth * 0.5 - currentWidth * 0.5);
- maxTranslateY = Math.min(canvasHeight - currentHeight, canvasHeight * 0.5 - currentHeight * 0.5);
-
- // ->
- if (distanceX > 0 && newOffsetX > minTranslateX) {
- newOffsetX = minTranslateX - 1 + Math.pow(-minTranslateX + currentOffsetX + distanceX, 0.8) || 0;
- }
-
- // <-
- if (distanceX < 0 && newOffsetX < maxTranslateX) {
- newOffsetX = maxTranslateX + 1 - Math.pow(maxTranslateX - currentOffsetX - distanceX, 0.8) || 0;
- }
-
- // \/
- if (distanceY > 0 && newOffsetY > minTranslateY) {
- newOffsetY = minTranslateY - 1 + Math.pow(-minTranslateY + currentOffsetY + distanceY, 0.8) || 0;
- }
-
- // /\
- if (distanceY < 0 && newOffsetY < maxTranslateY) {
- newOffsetY = maxTranslateY + 1 - Math.pow(maxTranslateY - currentOffsetY - distanceY, 0.8) || 0;
- }
-
- return {
- top: newOffsetY,
- left: newOffsetX
- };
- };
-
- Guestures.prototype.limitPosition = function (newOffsetX, newOffsetY, newWidth, newHeight) {
- var self = this;
-
- var canvasWidth = self.canvasWidth;
- var canvasHeight = self.canvasHeight;
-
- if (newWidth > canvasWidth) {
- newOffsetX = newOffsetX > 0 ? 0 : newOffsetX;
- newOffsetX = newOffsetX < canvasWidth - newWidth ? canvasWidth - newWidth : newOffsetX;
- } else {
- // Center horizontally
- newOffsetX = Math.max(0, canvasWidth / 2 - newWidth / 2);
- }
-
- if (newHeight > canvasHeight) {
- newOffsetY = newOffsetY > 0 ? 0 : newOffsetY;
- newOffsetY = newOffsetY < canvasHeight - newHeight ? canvasHeight - newHeight : newOffsetY;
- } else {
- // Center vertically
- newOffsetY = Math.max(0, canvasHeight / 2 - newHeight / 2);
- }
-
- return {
- top: newOffsetY,
- left: newOffsetX
- };
- };
-
- Guestures.prototype.onZoom = function () {
- var self = this;
-
- // Calculate current distance between points to get pinch ratio and new width and height
- var contentStartPos = self.contentStartPos;
-
- var currentWidth = contentStartPos.width;
- var currentHeight = contentStartPos.height;
-
- var currentOffsetX = contentStartPos.left;
- var currentOffsetY = contentStartPos.top;
-
- var endDistanceBetweenFingers = distance(self.newPoints[0], self.newPoints[1]);
-
- var pinchRatio = endDistanceBetweenFingers / self.startDistanceBetweenFingers;
-
- var newWidth = Math.floor(currentWidth * pinchRatio);
- var newHeight = Math.floor(currentHeight * pinchRatio);
-
- // This is the translation due to pinch-zooming
- var translateFromZoomingX = (currentWidth - newWidth) * self.percentageOfImageAtPinchPointX;
- var translateFromZoomingY = (currentHeight - newHeight) * self.percentageOfImageAtPinchPointY;
-
- // Point between the two touches
- var centerPointEndX = (self.newPoints[0].x + self.newPoints[1].x) / 2 - $(window).scrollLeft();
- var centerPointEndY = (self.newPoints[0].y + self.newPoints[1].y) / 2 - $(window).scrollTop();
-
- // And this is the translation due to translation of the centerpoint
- // between the two fingers
- var translateFromTranslatingX = centerPointEndX - self.centerPointStartX;
- var translateFromTranslatingY = centerPointEndY - self.centerPointStartY;
-
- // The new offset is the old/current one plus the total translation
- var newOffsetX = currentOffsetX + (translateFromZoomingX + translateFromTranslatingX);
- var newOffsetY = currentOffsetY + (translateFromZoomingY + translateFromTranslatingY);
-
- var newPos = {
- top: newOffsetY,
- left: newOffsetX,
- scaleX: pinchRatio,
- scaleY: pinchRatio
- };
-
- self.canTap = false;
-
- self.newWidth = newWidth;
- self.newHeight = newHeight;
-
- self.contentLastPos = newPos;
-
- if (self.requestId) {
- cancelAFrame(self.requestId);
- }
-
- self.requestId = requestAFrame(function () {
- $.fancybox.setTranslate(self.$content, self.contentLastPos);
- });
- };
-
- Guestures.prototype.ontouchend = function (e) {
- var self = this;
-
- var swiping = self.isSwiping;
- var panning = self.isPanning;
- var zooming = self.isZooming;
- var scrolling = self.isScrolling;
-
- self.endPoints = getPointerXY(e);
- self.dMs = Math.max(new Date().getTime() - self.startTime, 1);
-
- self.$container.removeClass("fancybox-is-grabbing");
-
- $(document).off(".fb.touch");
-
- document.removeEventListener("scroll", self.onscroll, true);
-
- if (self.requestId) {
- cancelAFrame(self.requestId);
-
- self.requestId = null;
- }
-
- self.isSwiping = false;
- self.isPanning = false;
- self.isZooming = false;
- self.isScrolling = false;
-
- self.instance.isDragging = false;
-
- if (self.canTap) {
- return self.onTap(e);
- }
-
- self.speed = 100;
-
- // Speed in px/ms
- self.velocityX = (self.distanceX / self.dMs) * 0.5;
- self.velocityY = (self.distanceY / self.dMs) * 0.5;
-
- if (panning) {
- self.endPanning();
- } else if (zooming) {
- self.endZooming();
- } else {
- self.endSwiping(swiping, scrolling);
- }
-
- return;
- };
-
- Guestures.prototype.endSwiping = function (swiping, scrolling) {
- var self = this,
- ret = false,
- len = self.instance.group.length,
- distanceX = Math.abs(self.distanceX),
- canAdvance = swiping == "x" && len > 1 && ((self.dMs > 130 && distanceX > 10) || distanceX > 50),
- speedX = 300;
-
- self.sliderLastPos = null;
-
- // Close if swiped vertically / navigate if horizontally
- if (swiping == "y" && !scrolling && Math.abs(self.distanceY) > 50) {
- // Continue vertical movement
- $.fancybox.animate(
- self.instance.current.$slide, {
- top: self.sliderStartPos.top + self.distanceY + self.velocityY * 150,
- opacity: 0
- },
- 200
- );
- ret = self.instance.close(true, 250);
- } else if (canAdvance && self.distanceX > 0) {
- ret = self.instance.previous(speedX);
- } else if (canAdvance && self.distanceX < 0) {
- ret = self.instance.next(speedX);
- }
-
- if (ret === false && (swiping == "x" || swiping == "y")) {
- self.instance.centerSlide(200);
- }
-
- self.$container.removeClass("fancybox-is-sliding");
- };
-
- // Limit panning from edges
- // ========================
- Guestures.prototype.endPanning = function () {
- var self = this,
- newOffsetX,
- newOffsetY,
- newPos;
-
- if (!self.contentLastPos) {
- return;
- }
-
- if (self.opts.momentum === false || self.dMs > 350) {
- newOffsetX = self.contentLastPos.left;
- newOffsetY = self.contentLastPos.top;
- } else {
- // Continue movement
- newOffsetX = self.contentLastPos.left + self.velocityX * 500;
- newOffsetY = self.contentLastPos.top + self.velocityY * 500;
- }
-
- newPos = self.limitPosition(newOffsetX, newOffsetY, self.contentStartPos.width, self.contentStartPos.height);
-
- newPos.width = self.contentStartPos.width;
- newPos.height = self.contentStartPos.height;
-
- $.fancybox.animate(self.$content, newPos, 366);
- };
-
- Guestures.prototype.endZooming = function () {
- var self = this;
-
- var current = self.instance.current;
-
- var newOffsetX, newOffsetY, newPos, reset;
-
- var newWidth = self.newWidth;
- var newHeight = self.newHeight;
-
- if (!self.contentLastPos) {
- return;
- }
-
- newOffsetX = self.contentLastPos.left;
- newOffsetY = self.contentLastPos.top;
-
- reset = {
- top: newOffsetY,
- left: newOffsetX,
- width: newWidth,
- height: newHeight,
- scaleX: 1,
- scaleY: 1
- };
-
- // Reset scalex/scaleY values; this helps for perfomance and does not break animation
- $.fancybox.setTranslate(self.$content, reset);
-
- if (newWidth < self.canvasWidth && newHeight < self.canvasHeight) {
- self.instance.scaleToFit(150);
- } else if (newWidth > current.width || newHeight > current.height) {
- self.instance.scaleToActual(self.centerPointStartX, self.centerPointStartY, 150);
- } else {
- newPos = self.limitPosition(newOffsetX, newOffsetY, newWidth, newHeight);
-
- $.fancybox.animate(self.$content, newPos, 150);
- }
- };
-
- Guestures.prototype.onTap = function (e) {
- var self = this;
- var $target = $(e.target);
-
- var instance = self.instance;
- var current = instance.current;
-
- var endPoints = (e && getPointerXY(e)) || self.startPoints;
-
- var tapX = endPoints[0] ? endPoints[0].x - $(window).scrollLeft() - self.stagePos.left : 0;
- var tapY = endPoints[0] ? endPoints[0].y - $(window).scrollTop() - self.stagePos.top : 0;
-
- var where;
-
- var process = function (prefix) {
- var action = current.opts[prefix];
-
- if ($.isFunction(action)) {
- action = action.apply(instance, [current, e]);
- }
-
- if (!action) {
- return;
- }
-
- switch (action) {
- case "close":
- instance.close(self.startEvent);
-
- break;
-
- case "toggleControls":
- instance.toggleControls();
-
- break;
-
- case "next":
- instance.next();
-
- break;
-
- case "nextOrClose":
- if (instance.group.length > 1) {
- instance.next();
- } else {
- instance.close(self.startEvent);
- }
-
- break;
-
- case "zoom":
- if (current.type == "image" && (current.isLoaded || current.$ghost)) {
- if (instance.canPan()) {
- instance.scaleToFit();
- } else if (instance.isScaledDown()) {
- instance.scaleToActual(tapX, tapY);
- } else if (instance.group.length < 2) {
- instance.close(self.startEvent);
- }
- }
-
- break;
- }
- };
-
- // Ignore right click
- if (e.originalEvent && e.originalEvent.button == 2) {
- return;
- }
-
- // Skip if clicked on the scrollbar
- if (!$target.is("img") && tapX > $target[0].clientWidth + $target.offset().left) {
- return;
- }
-
- // Check where is clicked
- if ($target.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container")) {
- where = "Outside";
- } else if ($target.is(".fancybox-slide")) {
- where = "Slide";
- } else if (
- instance.current.$content &&
- instance.current.$content
- .find($target)
- .addBack()
- .filter($target).length
- ) {
- where = "Content";
- } else {
- return;
- }
-
- // Check if this is a double tap
- if (self.tapped) {
- // Stop previously created single tap
- clearTimeout(self.tapped);
- self.tapped = null;
-
- // Skip if distance between taps is too big
- if (Math.abs(tapX - self.tapX) > 50 || Math.abs(tapY - self.tapY) > 50) {
- return this;
- }
-
- // OK, now we assume that this is a double-tap
- process("dblclick" + where);
- } else {
- // Single tap will be processed if user has not clicked second time within 300ms
- // or there is no need to wait for double-tap
- self.tapX = tapX;
- self.tapY = tapY;
-
- if (current.opts["dblclick" + where] && current.opts["dblclick" + where] !== current.opts["click" + where]) {
- self.tapped = setTimeout(function () {
- self.tapped = null;
-
- if (!instance.isAnimating) {
- process("click" + where);
- }
- }, 500);
- } else {
- process("click" + where);
- }
- }
-
- return this;
- };
-
- $(document)
- .on("onActivate.fb", function (e, instance) {
- if (instance && !instance.Guestures) {
- instance.Guestures = new Guestures(instance);
- }
- })
- .on("beforeClose.fb", function (e, instance) {
- if (instance && instance.Guestures) {
- instance.Guestures.destroy();
- }
- });
-})(window, document, jQuery);
-// ==========================================================================
-//
-// SlideShow
-// Enables slideshow functionality
-//
-// Example of usage:
-// $.fancybox.getInstance().SlideShow.start()
-//
-// ==========================================================================
-(function (document, $) {
- "use strict";
-
- $.extend(true, $.fancybox.defaults, {
- btnTpl: {
- slideShow: '
' +
- ' ' +
- ' ' +
- " "
- },
- slideShow: {
- autoStart: false,
- speed: 3000,
- progress: true
- }
- });
-
- var SlideShow = function (instance) {
- this.instance = instance;
- this.init();
- };
-
- $.extend(SlideShow.prototype, {
- timer: null,
- isActive: false,
- $button: null,
-
- init: function () {
- var self = this,
- instance = self.instance,
- opts = instance.group[instance.currIndex].opts.slideShow;
-
- self.$button = instance.$refs.toolbar.find("[data-fancybox-play]").on("click", function () {
- self.toggle();
- });
-
- if (instance.group.length < 2 || !opts) {
- self.$button.hide();
- } else if (opts.progress) {
- self.$progress = $('
').appendTo(instance.$refs.inner);
- }
- },
-
- set: function (force) {
- var self = this,
- instance = self.instance,
- current = instance.current;
-
- // Check if reached last element
- if (current && (force === true || current.opts.loop || instance.currIndex < instance.group.length - 1)) {
- if (self.isActive && current.contentType !== "video") {
- if (self.$progress) {
- $.fancybox.animate(self.$progress.show(), {
- scaleX: 1
- }, current.opts.slideShow.speed);
- }
-
- self.timer = setTimeout(function () {
- if (!instance.current.opts.loop && instance.current.index == instance.group.length - 1) {
- instance.jumpTo(0);
- } else {
- instance.next();
- }
- }, current.opts.slideShow.speed);
- }
- } else {
- self.stop();
- instance.idleSecondsCounter = 0;
- instance.showControls();
- }
- },
-
- clear: function () {
- var self = this;
-
- clearTimeout(self.timer);
-
- self.timer = null;
-
- if (self.$progress) {
- self.$progress.removeAttr("style").hide();
- }
- },
-
- start: function () {
- var self = this,
- current = self.instance.current;
-
- if (current) {
- self.$button
- .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_STOP)
- .removeClass("fancybox-button--play")
- .addClass("fancybox-button--pause");
-
- self.isActive = true;
-
- if (current.isComplete) {
- self.set(true);
- }
-
- self.instance.trigger("onSlideShowChange", true);
- }
- },
-
- stop: function () {
- var self = this,
- current = self.instance.current;
-
- self.clear();
-
- self.$button
- .attr("title", (current.opts.i18n[current.opts.lang] || current.opts.i18n.en).PLAY_START)
- .removeClass("fancybox-button--pause")
- .addClass("fancybox-button--play");
-
- self.isActive = false;
-
- self.instance.trigger("onSlideShowChange", false);
-
- if (self.$progress) {
- self.$progress.removeAttr("style").hide();
- }
- },
-
- toggle: function () {
- var self = this;
-
- if (self.isActive) {
- self.stop();
- } else {
- self.start();
- }
- }
- });
-
- $(document).on({
- "onInit.fb": function (e, instance) {
- if (instance && !instance.SlideShow) {
- instance.SlideShow = new SlideShow(instance);
- }
- },
-
- "beforeShow.fb": function (e, instance, current, firstRun) {
- var SlideShow = instance && instance.SlideShow;
-
- if (firstRun) {
- if (SlideShow && current.opts.slideShow.autoStart) {
- SlideShow.start();
- }
- } else if (SlideShow && SlideShow.isActive) {
- SlideShow.clear();
- }
- },
-
- "afterShow.fb": function (e, instance, current) {
- var SlideShow = instance && instance.SlideShow;
-
- if (SlideShow && SlideShow.isActive) {
- SlideShow.set();
- }
- },
-
- "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
- var SlideShow = instance && instance.SlideShow;
-
- // "P" or Spacebar
- if (SlideShow && current.opts.slideShow && (keycode === 80 || keycode === 32) && !$(document.activeElement).is("button,a,input")) {
- keypress.preventDefault();
-
- SlideShow.toggle();
- }
- },
-
- "beforeClose.fb onDeactivate.fb": function (e, instance) {
- var SlideShow = instance && instance.SlideShow;
-
- if (SlideShow) {
- SlideShow.stop();
- }
- }
- });
-
- // Page Visibility API to pause slideshow when window is not active
- $(document).on("visibilitychange", function () {
- var instance = $.fancybox.getInstance(),
- SlideShow = instance && instance.SlideShow;
-
- if (SlideShow && SlideShow.isActive) {
- if (document.hidden) {
- SlideShow.clear();
- } else {
- SlideShow.set();
- }
- }
- });
-})(document, jQuery);
-// ==========================================================================
-//
-// FullScreen
-// Adds fullscreen functionality
-//
-// ==========================================================================
-(function (document, $) {
- "use strict";
-
- // Collection of methods supported by user browser
- var fn = (function () {
- var fnMap = [
- ["requestFullscreen", "exitFullscreen", "fullscreenElement", "fullscreenEnabled", "fullscreenchange", "fullscreenerror"],
- // new WebKit
- [
- "webkitRequestFullscreen",
- "webkitExitFullscreen",
- "webkitFullscreenElement",
- "webkitFullscreenEnabled",
- "webkitfullscreenchange",
- "webkitfullscreenerror"
- ],
- // old WebKit (Safari 5.1)
- [
- "webkitRequestFullScreen",
- "webkitCancelFullScreen",
- "webkitCurrentFullScreenElement",
- "webkitCancelFullScreen",
- "webkitfullscreenchange",
- "webkitfullscreenerror"
- ],
- [
- "mozRequestFullScreen",
- "mozCancelFullScreen",
- "mozFullScreenElement",
- "mozFullScreenEnabled",
- "mozfullscreenchange",
- "mozfullscreenerror"
- ],
- ["msRequestFullscreen", "msExitFullscreen", "msFullscreenElement", "msFullscreenEnabled", "MSFullscreenChange", "MSFullscreenError"]
- ];
-
- var ret = {};
-
- for (var i = 0; i < fnMap.length; i++) {
- var val = fnMap[i];
-
- if (val && val[1] in document) {
- for (var j = 0; j < val.length; j++) {
- ret[fnMap[0][j]] = val[j];
- }
-
- return ret;
- }
- }
-
- return false;
- })();
-
- if (fn) {
- var FullScreen = {
- request: function (elem) {
- elem = elem || document.documentElement;
-
- elem[fn.requestFullscreen](elem.ALLOW_KEYBOARD_INPUT);
- },
- exit: function () {
- document[fn.exitFullscreen]();
- },
- toggle: function (elem) {
- elem = elem || document.documentElement;
-
- if (this.isFullscreen()) {
- this.exit();
- } else {
- this.request(elem);
- }
- },
- isFullscreen: function () {
- return Boolean(document[fn.fullscreenElement]);
- },
- enabled: function () {
- return Boolean(document[fn.fullscreenEnabled]);
- }
- };
-
- $.extend(true, $.fancybox.defaults, {
- btnTpl: {
- fullScreen: '
' +
- ' ' +
- ' ' +
- " "
- },
- fullScreen: {
- autoStart: false
- }
- });
-
- $(document).on(fn.fullscreenchange, function () {
- var isFullscreen = FullScreen.isFullscreen(),
- instance = $.fancybox.getInstance();
-
- if (instance) {
- // If image is zooming, then force to stop and reposition properly
- if (instance.current && instance.current.type === "image" && instance.isAnimating) {
- instance.isAnimating = false;
-
- instance.update(true, true, 0);
-
- if (!instance.isComplete) {
- instance.complete();
- }
- }
-
- instance.trigger("onFullscreenChange", isFullscreen);
-
- instance.$refs.container.toggleClass("fancybox-is-fullscreen", isFullscreen);
-
- instance.$refs.toolbar
- .find("[data-fancybox-fullscreen]")
- .toggleClass("fancybox-button--fsenter", !isFullscreen)
- .toggleClass("fancybox-button--fsexit", isFullscreen);
- }
- });
- }
-
- $(document).on({
- "onInit.fb": function (e, instance) {
- var $container;
-
- if (!fn) {
- instance.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();
-
- return;
- }
-
- if (instance && instance.group[instance.currIndex].opts.fullScreen) {
- $container = instance.$refs.container;
-
- $container.on("click.fb-fullscreen", "[data-fancybox-fullscreen]", function (e) {
- e.stopPropagation();
- e.preventDefault();
-
- FullScreen.toggle();
- });
-
- if (instance.opts.fullScreen && instance.opts.fullScreen.autoStart === true) {
- FullScreen.request();
- }
-
- // Expose API
- instance.FullScreen = FullScreen;
- } else if (instance) {
- instance.$refs.toolbar.find("[data-fancybox-fullscreen]").hide();
- }
- },
-
- "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
- // "F"
- if (instance && instance.FullScreen && keycode === 70) {
- keypress.preventDefault();
-
- instance.FullScreen.toggle();
- }
- },
-
- "beforeClose.fb": function (e, instance) {
- if (instance && instance.FullScreen && instance.$refs.container.hasClass("fancybox-is-fullscreen")) {
- FullScreen.exit();
- }
- }
- });
-})(document, jQuery);
-// ==========================================================================
-//
-// Thumbs
-// Displays thumbnails in a grid
-//
-// ==========================================================================
-(function (document, $) {
- "use strict";
-
- var CLASS = "fancybox-thumbs",
- CLASS_ACTIVE = CLASS + "-active";
-
- // Make sure there are default values
- $.fancybox.defaults = $.extend(
- true, {
- btnTpl: {
- thumbs: '
' +
- ' ' +
- " "
- },
- thumbs: {
- autoStart: false, // Display thumbnails on opening
- hideOnClose: true, // Hide thumbnail grid when closing animation starts
- parentEl: ".fancybox-container", // Container is injected into this element
- axis: "y" // Vertical (y) or horizontal (x) scrolling
- }
- },
- $.fancybox.defaults
- );
-
- var FancyThumbs = function (instance) {
- this.init(instance);
- };
-
- $.extend(FancyThumbs.prototype, {
- $button: null,
- $grid: null,
- $list: null,
- isVisible: false,
- isActive: false,
-
- init: function (instance) {
- var self = this,
- group = instance.group,
- enabled = 0;
-
- self.instance = instance;
- self.opts = group[instance.currIndex].opts.thumbs;
-
- instance.Thumbs = self;
-
- self.$button = instance.$refs.toolbar.find("[data-fancybox-thumbs]");
-
- // Enable thumbs if at least two group items have thumbnails
- for (var i = 0, len = group.length; i < len; i++) {
- if (group[i].thumb) {
- enabled++;
- }
-
- if (enabled > 1) {
- break;
- }
- }
-
- if (enabled > 1 && !!self.opts) {
- self.$button.removeAttr("style").on("click", function () {
- self.toggle();
- });
-
- self.isActive = true;
- } else {
- self.$button.hide();
- }
- },
-
- create: function () {
- var self = this,
- instance = self.instance,
- parentEl = self.opts.parentEl,
- list = [],
- src;
-
- if (!self.$grid) {
- // Create main element
- self.$grid = $('
').appendTo(
- instance.$refs.container
- .find(parentEl)
- .addBack()
- .filter(parentEl)
- );
-
- // Add "click" event that performs gallery navigation
- self.$grid.on("click", "a", function () {
- instance.jumpTo($(this).attr("data-index"));
- });
- }
-
- // Build the list
- if (!self.$list) {
- self.$list = $('
').appendTo(self.$grid);
- }
-
- $.each(instance.group, function (i, item) {
- src = item.thumb;
-
- if (!src && item.type === "image") {
- src = item.src;
- }
-
- list.push(
- '
"
- );
- });
-
- self.$list[0].innerHTML = list.join("");
-
- if (self.opts.axis === "x") {
- // Set fixed width for list element to enable horizontal scrolling
- self.$list.width(
- parseInt(self.$grid.css("padding-right"), 10) +
- instance.group.length *
- self.$list
- .children()
- .eq(0)
- .outerWidth(true)
- );
- }
- },
-
- focus: function (duration) {
- var self = this,
- $list = self.$list,
- $grid = self.$grid,
- thumb,
- thumbPos;
-
- if (!self.instance.current) {
- return;
- }
-
- thumb = $list
- .children()
- .removeClass(CLASS_ACTIVE)
- .filter('[data-index="' + self.instance.current.index + '"]')
- .addClass(CLASS_ACTIVE);
-
- thumbPos = thumb.position();
-
- // Check if need to scroll to make current thumb visible
- if (self.opts.axis === "y" && (thumbPos.top < 0 || thumbPos.top > $list.height() - thumb.outerHeight())) {
- $list.stop().animate({
- scrollTop: $list.scrollTop() + thumbPos.top
- },
- duration
- );
- } else if (
- self.opts.axis === "x" &&
- (thumbPos.left < $grid.scrollLeft() || thumbPos.left > $grid.scrollLeft() + ($grid.width() - thumb.outerWidth()))
- ) {
- $list
- .parent()
- .stop()
- .animate({
- scrollLeft: thumbPos.left
- },
- duration
- );
- }
- },
-
- update: function () {
- var that = this;
- that.instance.$refs.container.toggleClass("fancybox-show-thumbs", this.isVisible);
-
- if (that.isVisible) {
- if (!that.$grid) {
- that.create();
- }
-
- that.instance.trigger("onThumbsShow");
-
- that.focus(0);
- } else if (that.$grid) {
- that.instance.trigger("onThumbsHide");
- }
-
- // Update content position
- that.instance.update();
- },
-
- hide: function () {
- this.isVisible = false;
- this.update();
- },
-
- show: function () {
- this.isVisible = true;
- this.update();
- },
-
- toggle: function () {
- this.isVisible = !this.isVisible;
- this.update();
- }
- });
-
- $(document).on({
- "onInit.fb": function (e, instance) {
- var Thumbs;
-
- if (instance && !instance.Thumbs) {
- Thumbs = new FancyThumbs(instance);
-
- if (Thumbs.isActive && Thumbs.opts.autoStart === true) {
- Thumbs.show();
- }
- }
- },
-
- "beforeShow.fb": function (e, instance, item, firstRun) {
- var Thumbs = instance && instance.Thumbs;
-
- if (Thumbs && Thumbs.isVisible) {
- Thumbs.focus(firstRun ? 0 : 250);
- }
- },
-
- "afterKeydown.fb": function (e, instance, current, keypress, keycode) {
- var Thumbs = instance && instance.Thumbs;
-
- // "G"
- if (Thumbs && Thumbs.isActive && keycode === 71) {
- keypress.preventDefault();
-
- Thumbs.toggle();
- }
- },
-
- "beforeClose.fb": function (e, instance) {
- var Thumbs = instance && instance.Thumbs;
-
- if (Thumbs && Thumbs.isVisible && Thumbs.opts.hideOnClose !== false) {
- Thumbs.$grid.hide();
- }
- }
- });
-})(document, jQuery);
-//// ==========================================================================
-//
-// Share
-// Displays simple form for sharing current url
-//
-// ==========================================================================
-(function (document, $) {
- "use strict";
-
- $.extend(true, $.fancybox.defaults, {
- btnTpl: {
- share: '
' +
- ' ' +
- " "
- },
- share: {
- url: function (instance, item) {
- return (
- (!instance.currentHash && !(item.type === "inline" || item.type === "html") ? item.origSrc || item.src : false) || window.location
- );
- },
- tpl: '
"
- }
- });
-
- function escapeHtml(string) {
- var entityMap = {
- "&": "&",
- "<": "<",
- ">": ">",
- '"': """,
- "'": "'",
- "/": "/",
- "`": "`",
- "=": "="
- };
-
- return String(string).replace(/[&<>"'`=\/]/g, function (s) {
- return entityMap[s];
- });
- }
-
- $(document).on("click", "[data-fancybox-share]", function () {
- var instance = $.fancybox.getInstance(),
- current = instance.current || null,
- url,
- tpl;
-
- if (!current) {
- return;
- }
-
- if ($.type(current.opts.share.url) === "function") {
- url = current.opts.share.url.apply(current, [instance, current]);
- }
-
- tpl = current.opts.share.tpl
- .replace(/\{\{media\}\}/g, current.type === "image" ? encodeURIComponent(current.src) : "")
- .replace(/\{\{url\}\}/g, encodeURIComponent(url))
- .replace(/\{\{url_raw\}\}/g, escapeHtml(url))
- .replace(/\{\{descr\}\}/g, instance.$caption ? encodeURIComponent(instance.$caption.text()) : "");
-
- $.fancybox.open({
- src: instance.translate(instance, tpl),
- type: "html",
- opts: {
- touch: false,
- animationEffect: false,
- afterLoad: function (shareInstance, shareCurrent) {
- // Close self if parent instance is closing
- instance.$refs.container.one("beforeClose.fb", function () {
- shareInstance.close(null, 0);
- });
-
- // Opening links in a popup window
- shareCurrent.$content.find(".fancybox-share__button").click(function () {
- window.open(this.href, "Share", "width=550, height=450");
- return false;
- });
- },
- mobile: {
- autoFocus: false
- }
- }
- });
- });
-})(document, jQuery);
-// ==========================================================================
-//
-// Hash
-// Enables linking to each modal
-//
-// ==========================================================================
-(function (window, document, $) {
- "use strict";
-
- // Simple $.escapeSelector polyfill (for jQuery prior v3)
- if (!$.escapeSelector) {
- $.escapeSelector = function (sel) {
- var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
- var fcssescape = function (ch, asCodePoint) {
- if (asCodePoint) {
- // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
- if (ch === "\0") {
- return "\uFFFD";
- }
-
- // Control characters and (dependent upon position) numbers get escaped as code points
- return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
- }
-
- // Other potentially-special ASCII characters get backslash-escaped
- return "\\" + ch;
- };
-
- return (sel + "").replace(rcssescape, fcssescape);
- };
- }
-
- // Get info about gallery name and current index from url
- function parseUrl() {
- var hash = window.location.hash.substr(1),
- rez = hash.split("-"),
- index = rez.length > 1 && /^\+?\d+$/.test(rez[rez.length - 1]) ? parseInt(rez.pop(-1), 10) || 1 : 1,
- gallery = rez.join("-");
-
- return {
- hash: hash,
- /* Index is starting from 1 */
- index: index < 1 ? 1 : index,
- gallery: gallery
- };
- }
-
- // Trigger click evnt on links to open new fancyBox instance
- function triggerFromUrl(url) {
- if (url.gallery !== "") {
- // If we can find element matching 'data-fancybox' atribute,
- // then triggering click event should start fancyBox
- $("[data-fancybox='" + $.escapeSelector(url.gallery) + "']")
- .eq(url.index - 1)
- .focus()
- .trigger("click.fb-start");
- }
- }
-
- // Get gallery name from current instance
- function getGalleryID(instance) {
- var opts, ret;
-
- if (!instance) {
- return false;
- }
-
- opts = instance.current ? instance.current.opts : instance.opts;
- ret = opts.hash || (opts.$orig ? opts.$orig.data("fancybox") || opts.$orig.data("fancybox-trigger") : "");
-
- return ret === "" ? false : ret;
- }
-
- // Start when DOM becomes ready
- $(function () {
- // Check if user has disabled this module
- if ($.fancybox.defaults.hash === false) {
- return;
- }
-
- // Update hash when opening/closing fancyBox
- $(document).on({
- "onInit.fb": function (e, instance) {
- var url, gallery;
-
- if (instance.group[instance.currIndex].opts.hash === false) {
- return;
- }
-
- url = parseUrl();
- gallery = getGalleryID(instance);
-
- // Make sure gallery start index matches index from hash
- if (gallery && url.gallery && gallery == url.gallery) {
- instance.currIndex = url.index - 1;
- }
- },
-
- "beforeShow.fb": function (e, instance, current, firstRun) {
- var gallery;
-
- if (!current || current.opts.hash === false) {
- return;
- }
-
- // Check if need to update window hash
- gallery = getGalleryID(instance);
-
- if (!gallery) {
- return;
- }
-
- // Variable containing last hash value set by fancyBox
- // It will be used to determine if fancyBox needs to close after hash change is detected
- instance.currentHash = gallery + (instance.group.length > 1 ? "-" + (current.index + 1) : "");
-
- // If current hash is the same (this instance most likely is opened by hashchange), then do nothing
- if (window.location.hash === "#" + instance.currentHash) {
- return;
- }
-
- if (firstRun && !instance.origHash) {
- instance.origHash = window.location.hash;
- }
-
- if (instance.hashTimer) {
- clearTimeout(instance.hashTimer);
- }
-
- // Update hash
- instance.hashTimer = setTimeout(function () {
- if ("replaceState" in window.history) {
- window.history[firstRun ? "pushState" : "replaceState"]({},
- document.title,
- window.location.pathname + window.location.search + "#" + instance.currentHash
- );
-
- if (firstRun) {
- instance.hasCreatedHistory = true;
- }
- } else {
- window.location.hash = instance.currentHash;
- }
-
- instance.hashTimer = null;
- }, 300);
- },
-
- "beforeClose.fb": function (e, instance, current) {
- if (!current || current.opts.hash === false) {
- return;
- }
-
- clearTimeout(instance.hashTimer);
-
- // Goto previous history entry
- if (instance.currentHash && instance.hasCreatedHistory) {
- window.history.back();
- } else if (instance.currentHash) {
- if ("replaceState" in window.history) {
- window.history.replaceState({}, document.title, window.location.pathname + window.location.search + (instance.origHash || ""));
- } else {
- window.location.hash = instance.origHash;
- }
- }
-
- instance.currentHash = null;
- }
- });
-
- // Check if need to start/close after url has changed
- $(window).on("hashchange.fb", function () {
- var url = parseUrl(),
- fb = null;
-
- // Find last fancyBox instance that has "hash"
- $.each(
- $(".fancybox-container")
- .get()
- .reverse(),
- function (index, value) {
- var tmp = $(value).data("FancyBox");
-
- if (tmp && tmp.currentHash) {
- fb = tmp;
- return false;
- }
- }
- );
-
- if (fb) {
- // Now, compare hash values
- if (fb.currentHash !== url.gallery + "-" + url.index && !(url.index === 1 && fb.currentHash == url.gallery)) {
- fb.currentHash = null;
-
- fb.close();
- }
- } else if (url.gallery !== "") {
- triggerFromUrl(url);
- }
- });
-
- // Check current hash and trigger click event on matching element to start fancyBox, if needed
- setTimeout(function () {
- if (!$.fancybox.getInstance()) {
- triggerFromUrl(parseUrl());
- }
- }, 50);
- });
-})(window, document, jQuery);
-// ==========================================================================
-//
-// Wheel
-// Basic mouse weheel support for gallery navigation
-//
-// ==========================================================================
-(function (document, $) {
- "use strict";
-
- var prevTime = new Date().getTime();
-
- $(document).on({
- "onInit.fb": function (e, instance, current) {
- instance.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll", function (e) {
- var current = instance.current,
- currTime = new Date().getTime();
-
- if (instance.group.length < 2 || current.opts.wheel === false || (current.opts.wheel === "auto" && current.type !== "image")) {
- return;
- }
-
- e.preventDefault();
- e.stopPropagation();
-
- if (current.$slide.hasClass("fancybox-animated")) {
- return;
- }
-
- e = e.originalEvent || e;
-
- if (currTime - prevTime < 250) {
- return;
- }
-
- prevTime = currTime;
-
- instance[(-e.deltaY || -e.deltaX || e.wheelDelta || -e.detail) < 0 ? "next" : "previous"]();
- });
- }
- });
-})(document, jQuery);
-
-/***/ }),
-
-/***/ "./node_modules/axios/index.js":
-/*!*************************************!*\
- !*** ./node_modules/axios/index.js ***!
- \*************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-module.exports = __webpack_require__(/*! ./lib/axios */ "./node_modules/axios/lib/axios.js");
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/adapters/xhr.js":
-/*!************************************************!*\
- !*** ./node_modules/axios/lib/adapters/xhr.js ***!
- \************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var settle = __webpack_require__(/*! ./../core/settle */ "./node_modules/axios/lib/core/settle.js");
-var cookies = __webpack_require__(/*! ./../helpers/cookies */ "./node_modules/axios/lib/helpers/cookies.js");
-var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
-var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ "./node_modules/axios/lib/core/buildFullPath.js");
-var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ "./node_modules/axios/lib/helpers/parseHeaders.js");
-var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ "./node_modules/axios/lib/helpers/isURLSameOrigin.js");
-var createError = __webpack_require__(/*! ../core/createError */ "./node_modules/axios/lib/core/createError.js");
-
-module.exports = function xhrAdapter(config) {
- return new Promise(function dispatchXhrRequest(resolve, reject) {
- var requestData = config.data;
- var requestHeaders = config.headers;
- var responseType = config.responseType;
-
- if (utils.isFormData(requestData)) {
- delete requestHeaders['Content-Type']; // Let the browser set it
- }
-
- var request = new XMLHttpRequest();
-
- // HTTP basic authentication
- if (config.auth) {
- var username = config.auth.username || '';
- var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
- requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);
- }
-
- var fullPath = buildFullPath(config.baseURL, config.url);
- request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
-
- // Set the request timeout in MS
- request.timeout = config.timeout;
-
- function onloadend() {
- if (!request) {
- return;
- }
- // Prepare the response
- var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;
- var responseData = !responseType || responseType === 'text' || responseType === 'json' ?
- request.responseText : request.response;
- var response = {
- data: responseData,
- status: request.status,
- statusText: request.statusText,
- headers: responseHeaders,
- config: config,
- request: request
- };
-
- settle(resolve, reject, response);
-
- // Clean up request
- request = null;
- }
-
- if ('onloadend' in request) {
- // Use onloadend if available
- request.onloadend = onloadend;
- } else {
- // Listen for ready state to emulate onloadend
- request.onreadystatechange = function handleLoad() {
- if (!request || request.readyState !== 4) {
- return;
- }
-
- // The request errored out and we didn't get a response, this will be
- // handled by onerror instead
- // With one exception: request that using file: protocol, most browsers
- // will return status as 0 even though it's a successful request
- if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
- return;
- }
- // readystate handler is calling before onerror or ontimeout handlers,
- // so we should call onloadend on the next 'tick'
- setTimeout(onloadend);
- };
- }
-
- // Handle browser request cancellation (as opposed to a manual cancellation)
- request.onabort = function handleAbort() {
- if (!request) {
- return;
- }
-
- reject(createError('Request aborted', config, 'ECONNABORTED', request));
-
- // Clean up request
- request = null;
- };
-
- // Handle low level network errors
- request.onerror = function handleError() {
- // Real errors are hidden from us by the browser
- // onerror should only fire if it's a network error
- reject(createError('Network Error', config, null, request));
-
- // Clean up request
- request = null;
- };
-
- // Handle timeout
- request.ontimeout = function handleTimeout() {
- var timeoutErrorMessage = 'timeout of ' + config.timeout + 'ms exceeded';
- if (config.timeoutErrorMessage) {
- timeoutErrorMessage = config.timeoutErrorMessage;
- }
- reject(createError(
- timeoutErrorMessage,
- config,
- config.transitional && config.transitional.clarifyTimeoutError ? 'ETIMEDOUT' : 'ECONNABORTED',
- request));
-
- // Clean up request
- request = null;
- };
-
- // Add xsrf header
- // This is only done if running in a standard browser environment.
- // Specifically not if we're in a web worker, or react-native.
- if (utils.isStandardBrowserEnv()) {
- // Add xsrf header
- var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ?
- cookies.read(config.xsrfCookieName) :
- undefined;
-
- if (xsrfValue) {
- requestHeaders[config.xsrfHeaderName] = xsrfValue;
- }
- }
-
- // Add headers to the request
- if ('setRequestHeader' in request) {
- utils.forEach(requestHeaders, function setRequestHeader(val, key) {
- if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {
- // Remove Content-Type if data is undefined
- delete requestHeaders[key];
- } else {
- // Otherwise add header to the request
- request.setRequestHeader(key, val);
- }
- });
- }
-
- // Add withCredentials to request if needed
- if (!utils.isUndefined(config.withCredentials)) {
- request.withCredentials = !!config.withCredentials;
- }
-
- // Add responseType to request if needed
- if (responseType && responseType !== 'json') {
- request.responseType = config.responseType;
- }
-
- // Handle progress if needed
- if (typeof config.onDownloadProgress === 'function') {
- request.addEventListener('progress', config.onDownloadProgress);
- }
-
- // Not all browsers support upload events
- if (typeof config.onUploadProgress === 'function' && request.upload) {
- request.upload.addEventListener('progress', config.onUploadProgress);
- }
-
- if (config.cancelToken) {
- // Handle cancellation
- config.cancelToken.promise.then(function onCanceled(cancel) {
- if (!request) {
- return;
- }
-
- request.abort();
- reject(cancel);
- // Clean up request
- request = null;
- });
- }
-
- if (!requestData) {
- requestData = null;
- }
-
- // Send the request
- request.send(requestData);
- });
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/axios.js":
-/*!*****************************************!*\
- !*** ./node_modules/axios/lib/axios.js ***!
- \*****************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
-var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
-var Axios = __webpack_require__(/*! ./core/Axios */ "./node_modules/axios/lib/core/Axios.js");
-var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
-var defaults = __webpack_require__(/*! ./defaults */ "./node_modules/axios/lib/defaults.js");
-
-/**
- * Create an instance of Axios
- *
- * @param {Object} defaultConfig The default config for the instance
- * @return {Axios} A new instance of Axios
- */
-function createInstance(defaultConfig) {
- var context = new Axios(defaultConfig);
- var instance = bind(Axios.prototype.request, context);
-
- // Copy axios.prototype to instance
- utils.extend(instance, Axios.prototype, context);
-
- // Copy context to instance
- utils.extend(instance, context);
-
- return instance;
-}
-
-// Create the default instance to be exported
-var axios = createInstance(defaults);
-
-// Expose Axios class to allow class inheritance
-axios.Axios = Axios;
-
-// Factory for creating new instances
-axios.create = function create(instanceConfig) {
- return createInstance(mergeConfig(axios.defaults, instanceConfig));
-};
-
-// Expose Cancel & CancelToken
-axios.Cancel = __webpack_require__(/*! ./cancel/Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
-axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ "./node_modules/axios/lib/cancel/CancelToken.js");
-axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
-
-// Expose all/spread
-axios.all = function all(promises) {
- return Promise.all(promises);
-};
-axios.spread = __webpack_require__(/*! ./helpers/spread */ "./node_modules/axios/lib/helpers/spread.js");
-
-// Expose isAxiosError
-axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ "./node_modules/axios/lib/helpers/isAxiosError.js");
-
-module.exports = axios;
-
-// Allow use of default import syntax in TypeScript
-module.exports["default"] = axios;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/Cancel.js":
-/*!*************************************************!*\
- !*** ./node_modules/axios/lib/cancel/Cancel.js ***!
- \*************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * A `Cancel` is an object that is thrown when an operation is canceled.
- *
- * @class
- * @param {string=} message The message.
- */
-function Cancel(message) {
- this.message = message;
-}
-
-Cancel.prototype.toString = function toString() {
- return 'Cancel' + (this.message ? ': ' + this.message : '');
-};
-
-Cancel.prototype.__CANCEL__ = true;
-
-module.exports = Cancel;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/CancelToken.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/cancel/CancelToken.js ***!
- \******************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var Cancel = __webpack_require__(/*! ./Cancel */ "./node_modules/axios/lib/cancel/Cancel.js");
-
-/**
- * A `CancelToken` is an object that can be used to request cancellation of an operation.
- *
- * @class
- * @param {Function} executor The executor function.
- */
-function CancelToken(executor) {
- if (typeof executor !== 'function') {
- throw new TypeError('executor must be a function.');
- }
-
- var resolvePromise;
- this.promise = new Promise(function promiseExecutor(resolve) {
- resolvePromise = resolve;
- });
-
- var token = this;
- executor(function cancel(message) {
- if (token.reason) {
- // Cancellation has already been requested
- return;
- }
-
- token.reason = new Cancel(message);
- resolvePromise(token.reason);
- });
-}
-
-/**
- * Throws a `Cancel` if cancellation has been requested.
- */
-CancelToken.prototype.throwIfRequested = function throwIfRequested() {
- if (this.reason) {
- throw this.reason;
- }
-};
-
-/**
- * Returns an object that contains a new `CancelToken` and a function that, when called,
- * cancels the `CancelToken`.
- */
-CancelToken.source = function source() {
- var cancel;
- var token = new CancelToken(function executor(c) {
- cancel = c;
- });
- return {
- token: token,
- cancel: cancel
- };
-};
-
-module.exports = CancelToken;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/cancel/isCancel.js":
-/*!***************************************************!*\
- !*** ./node_modules/axios/lib/cancel/isCancel.js ***!
- \***************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports = function isCancel(value) {
- return !!(value && value.__CANCEL__);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/Axios.js":
-/*!**********************************************!*\
- !*** ./node_modules/axios/lib/core/Axios.js ***!
- \**********************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var buildURL = __webpack_require__(/*! ../helpers/buildURL */ "./node_modules/axios/lib/helpers/buildURL.js");
-var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ "./node_modules/axios/lib/core/InterceptorManager.js");
-var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ "./node_modules/axios/lib/core/dispatchRequest.js");
-var mergeConfig = __webpack_require__(/*! ./mergeConfig */ "./node_modules/axios/lib/core/mergeConfig.js");
-var validator = __webpack_require__(/*! ../helpers/validator */ "./node_modules/axios/lib/helpers/validator.js");
-
-var validators = validator.validators;
-/**
- * Create a new instance of Axios
- *
- * @param {Object} instanceConfig The default config for the instance
- */
-function Axios(instanceConfig) {
- this.defaults = instanceConfig;
- this.interceptors = {
- request: new InterceptorManager(),
- response: new InterceptorManager()
- };
-}
-
-/**
- * Dispatch a request
- *
- * @param {Object} config The config specific for this request (merged with this.defaults)
- */
-Axios.prototype.request = function request(config) {
- /*eslint no-param-reassign:0*/
- // Allow for axios('example/url'[, config]) a la fetch API
- if (typeof config === 'string') {
- config = arguments[1] || {};
- config.url = arguments[0];
- } else {
- config = config || {};
- }
-
- config = mergeConfig(this.defaults, config);
-
- // Set config.method
- if (config.method) {
- config.method = config.method.toLowerCase();
- } else if (this.defaults.method) {
- config.method = this.defaults.method.toLowerCase();
- } else {
- config.method = 'get';
- }
-
- var transitional = config.transitional;
-
- if (transitional !== undefined) {
- validator.assertOptions(transitional, {
- silentJSONParsing: validators.transitional(validators.boolean, '1.0.0'),
- forcedJSONParsing: validators.transitional(validators.boolean, '1.0.0'),
- clarifyTimeoutError: validators.transitional(validators.boolean, '1.0.0')
- }, false);
- }
-
- // filter out skipped interceptors
- var requestInterceptorChain = [];
- var synchronousRequestInterceptors = true;
- this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
- if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
- return;
- }
-
- synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
-
- requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
- });
-
- var responseInterceptorChain = [];
- this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
- responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
- });
-
- var promise;
-
- if (!synchronousRequestInterceptors) {
- var chain = [dispatchRequest, undefined];
-
- Array.prototype.unshift.apply(chain, requestInterceptorChain);
- chain = chain.concat(responseInterceptorChain);
-
- promise = Promise.resolve(config);
- while (chain.length) {
- promise = promise.then(chain.shift(), chain.shift());
- }
-
- return promise;
- }
-
-
- var newConfig = config;
- while (requestInterceptorChain.length) {
- var onFulfilled = requestInterceptorChain.shift();
- var onRejected = requestInterceptorChain.shift();
- try {
- newConfig = onFulfilled(newConfig);
- } catch (error) {
- onRejected(error);
- break;
- }
- }
-
- try {
- promise = dispatchRequest(newConfig);
- } catch (error) {
- return Promise.reject(error);
- }
-
- while (responseInterceptorChain.length) {
- promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift());
- }
-
- return promise;
-};
-
-Axios.prototype.getUri = function getUri(config) {
- config = mergeConfig(this.defaults, config);
- return buildURL(config.url, config.params, config.paramsSerializer).replace(/^\?/, '');
-};
-
-// Provide aliases for supported request methods
-utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
- /*eslint func-names:0*/
- Axios.prototype[method] = function(url, config) {
- return this.request(mergeConfig(config || {}, {
- method: method,
- url: url,
- data: (config || {}).data
- }));
- };
-});
-
-utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
- /*eslint func-names:0*/
- Axios.prototype[method] = function(url, data, config) {
- return this.request(mergeConfig(config || {}, {
- method: method,
- url: url,
- data: data
- }));
- };
-});
-
-module.exports = Axios;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/InterceptorManager.js":
-/*!***********************************************************!*\
- !*** ./node_modules/axios/lib/core/InterceptorManager.js ***!
- \***********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-function InterceptorManager() {
- this.handlers = [];
-}
-
-/**
- * Add a new interceptor to the stack
- *
- * @param {Function} fulfilled The function to handle `then` for a `Promise`
- * @param {Function} rejected The function to handle `reject` for a `Promise`
- *
- * @return {Number} An ID used to remove interceptor later
- */
-InterceptorManager.prototype.use = function use(fulfilled, rejected, options) {
- this.handlers.push({
- fulfilled: fulfilled,
- rejected: rejected,
- synchronous: options ? options.synchronous : false,
- runWhen: options ? options.runWhen : null
- });
- return this.handlers.length - 1;
-};
-
-/**
- * Remove an interceptor from the stack
- *
- * @param {Number} id The ID that was returned by `use`
- */
-InterceptorManager.prototype.eject = function eject(id) {
- if (this.handlers[id]) {
- this.handlers[id] = null;
- }
-};
-
-/**
- * Iterate over all the registered interceptors
- *
- * This method is particularly useful for skipping over any
- * interceptors that may have become `null` calling `eject`.
- *
- * @param {Function} fn The function to call for each interceptor
- */
-InterceptorManager.prototype.forEach = function forEach(fn) {
- utils.forEach(this.handlers, function forEachHandler(h) {
- if (h !== null) {
- fn(h);
- }
- });
-};
-
-module.exports = InterceptorManager;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/buildFullPath.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/core/buildFullPath.js ***!
- \******************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ "./node_modules/axios/lib/helpers/isAbsoluteURL.js");
-var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ "./node_modules/axios/lib/helpers/combineURLs.js");
-
-/**
- * Creates a new URL by combining the baseURL with the requestedURL,
- * only when the requestedURL is not already an absolute URL.
- * If the requestURL is absolute, this function returns the requestedURL untouched.
- *
- * @param {string} baseURL The base URL
- * @param {string} requestedURL Absolute or relative URL to combine
- * @returns {string} The combined full path
- */
-module.exports = function buildFullPath(baseURL, requestedURL) {
- if (baseURL && !isAbsoluteURL(requestedURL)) {
- return combineURLs(baseURL, requestedURL);
- }
- return requestedURL;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/createError.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/core/createError.js ***!
- \****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var enhanceError = __webpack_require__(/*! ./enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
-
-/**
- * Create an Error with the specified message, config, error code, request and response.
- *
- * @param {string} message The error message.
- * @param {Object} config The config.
- * @param {string} [code] The error code (for example, 'ECONNABORTED').
- * @param {Object} [request] The request.
- * @param {Object} [response] The response.
- * @returns {Error} The created error.
- */
-module.exports = function createError(message, config, code, request, response) {
- var error = new Error(message);
- return enhanceError(error, config, code, request, response);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/dispatchRequest.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/core/dispatchRequest.js ***!
- \********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var transformData = __webpack_require__(/*! ./transformData */ "./node_modules/axios/lib/core/transformData.js");
-var isCancel = __webpack_require__(/*! ../cancel/isCancel */ "./node_modules/axios/lib/cancel/isCancel.js");
-var defaults = __webpack_require__(/*! ../defaults */ "./node_modules/axios/lib/defaults.js");
-
-/**
- * Throws a `Cancel` if cancellation has been requested.
- */
-function throwIfCancellationRequested(config) {
- if (config.cancelToken) {
- config.cancelToken.throwIfRequested();
- }
-}
-
-/**
- * Dispatch a request to the server using the configured adapter.
- *
- * @param {object} config The config that is to be used for the request
- * @returns {Promise} The Promise to be fulfilled
- */
-module.exports = function dispatchRequest(config) {
- throwIfCancellationRequested(config);
-
- // Ensure headers exist
- config.headers = config.headers || {};
-
- // Transform request data
- config.data = transformData.call(
- config,
- config.data,
- config.headers,
- config.transformRequest
- );
-
- // Flatten headers
- config.headers = utils.merge(
- config.headers.common || {},
- config.headers[config.method] || {},
- config.headers
- );
-
- utils.forEach(
- ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
- function cleanHeaderConfig(method) {
- delete config.headers[method];
- }
- );
-
- var adapter = config.adapter || defaults.adapter;
-
- return adapter(config).then(function onAdapterResolution(response) {
- throwIfCancellationRequested(config);
-
- // Transform response data
- response.data = transformData.call(
- config,
- response.data,
- response.headers,
- config.transformResponse
- );
-
- return response;
- }, function onAdapterRejection(reason) {
- if (!isCancel(reason)) {
- throwIfCancellationRequested(config);
-
- // Transform response data
- if (reason && reason.response) {
- reason.response.data = transformData.call(
- config,
- reason.response.data,
- reason.response.headers,
- config.transformResponse
- );
- }
- }
-
- return Promise.reject(reason);
- });
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/enhanceError.js":
-/*!*****************************************************!*\
- !*** ./node_modules/axios/lib/core/enhanceError.js ***!
- \*****************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * Update an Error with the specified config, error code, and response.
- *
- * @param {Error} error The error to update.
- * @param {Object} config The config.
- * @param {string} [code] The error code (for example, 'ECONNABORTED').
- * @param {Object} [request] The request.
- * @param {Object} [response] The response.
- * @returns {Error} The error.
- */
-module.exports = function enhanceError(error, config, code, request, response) {
- error.config = config;
- if (code) {
- error.code = code;
- }
-
- error.request = request;
- error.response = response;
- error.isAxiosError = true;
-
- error.toJSON = function toJSON() {
- return {
- // Standard
- message: this.message,
- name: this.name,
- // Microsoft
- description: this.description,
- number: this.number,
- // Mozilla
- fileName: this.fileName,
- lineNumber: this.lineNumber,
- columnNumber: this.columnNumber,
- stack: this.stack,
- // Axios
- config: this.config,
- code: this.code
- };
- };
- return error;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/mergeConfig.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/core/mergeConfig.js ***!
- \****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
-
-/**
- * Config-specific merge-function which creates a new config-object
- * by merging two configuration objects together.
- *
- * @param {Object} config1
- * @param {Object} config2
- * @returns {Object} New object resulting from merging config2 to config1
- */
-module.exports = function mergeConfig(config1, config2) {
- // eslint-disable-next-line no-param-reassign
- config2 = config2 || {};
- var config = {};
-
- var valueFromConfig2Keys = ['url', 'method', 'data'];
- var mergeDeepPropertiesKeys = ['headers', 'auth', 'proxy', 'params'];
- var defaultToConfig2Keys = [
- 'baseURL', 'transformRequest', 'transformResponse', 'paramsSerializer',
- 'timeout', 'timeoutMessage', 'withCredentials', 'adapter', 'responseType', 'xsrfCookieName',
- 'xsrfHeaderName', 'onUploadProgress', 'onDownloadProgress', 'decompress',
- 'maxContentLength', 'maxBodyLength', 'maxRedirects', 'transport', 'httpAgent',
- 'httpsAgent', 'cancelToken', 'socketPath', 'responseEncoding'
- ];
- var directMergeKeys = ['validateStatus'];
-
- function getMergedValue(target, source) {
- if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
- return utils.merge(target, source);
- } else if (utils.isPlainObject(source)) {
- return utils.merge({}, source);
- } else if (utils.isArray(source)) {
- return source.slice();
- }
- return source;
- }
-
- function mergeDeepProperties(prop) {
- if (!utils.isUndefined(config2[prop])) {
- config[prop] = getMergedValue(config1[prop], config2[prop]);
- } else if (!utils.isUndefined(config1[prop])) {
- config[prop] = getMergedValue(undefined, config1[prop]);
- }
- }
-
- utils.forEach(valueFromConfig2Keys, function valueFromConfig2(prop) {
- if (!utils.isUndefined(config2[prop])) {
- config[prop] = getMergedValue(undefined, config2[prop]);
- }
- });
-
- utils.forEach(mergeDeepPropertiesKeys, mergeDeepProperties);
-
- utils.forEach(defaultToConfig2Keys, function defaultToConfig2(prop) {
- if (!utils.isUndefined(config2[prop])) {
- config[prop] = getMergedValue(undefined, config2[prop]);
- } else if (!utils.isUndefined(config1[prop])) {
- config[prop] = getMergedValue(undefined, config1[prop]);
- }
- });
-
- utils.forEach(directMergeKeys, function merge(prop) {
- if (prop in config2) {
- config[prop] = getMergedValue(config1[prop], config2[prop]);
- } else if (prop in config1) {
- config[prop] = getMergedValue(undefined, config1[prop]);
- }
- });
-
- var axiosKeys = valueFromConfig2Keys
- .concat(mergeDeepPropertiesKeys)
- .concat(defaultToConfig2Keys)
- .concat(directMergeKeys);
-
- var otherKeys = Object
- .keys(config1)
- .concat(Object.keys(config2))
- .filter(function filterAxiosKeys(key) {
- return axiosKeys.indexOf(key) === -1;
- });
-
- utils.forEach(otherKeys, mergeDeepProperties);
-
- return config;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/settle.js":
-/*!***********************************************!*\
- !*** ./node_modules/axios/lib/core/settle.js ***!
- \***********************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var createError = __webpack_require__(/*! ./createError */ "./node_modules/axios/lib/core/createError.js");
-
-/**
- * Resolve or reject a Promise based on response status.
- *
- * @param {Function} resolve A function that resolves the promise.
- * @param {Function} reject A function that rejects the promise.
- * @param {object} response The response.
- */
-module.exports = function settle(resolve, reject, response) {
- var validateStatus = response.config.validateStatus;
- if (!response.status || !validateStatus || validateStatus(response.status)) {
- resolve(response);
- } else {
- reject(createError(
- 'Request failed with status code ' + response.status,
- response.config,
- null,
- response.request,
- response
- ));
- }
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/core/transformData.js":
-/*!******************************************************!*\
- !*** ./node_modules/axios/lib/core/transformData.js ***!
- \******************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-var defaults = __webpack_require__(/*! ./../defaults */ "./node_modules/axios/lib/defaults.js");
-
-/**
- * Transform the data for a request or a response
- *
- * @param {Object|String} data The data to be transformed
- * @param {Array} headers The headers for the request or response
- * @param {Array|Function} fns A single function or Array of functions
- * @returns {*} The resulting transformed data
- */
-module.exports = function transformData(data, headers, fns) {
- var context = this || defaults;
- /*eslint no-param-reassign:0*/
- utils.forEach(fns, function transform(fn) {
- data = fn.call(context, data, headers);
- });
-
- return data;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/defaults.js":
-/*!********************************************!*\
- !*** ./node_modules/axios/lib/defaults.js ***!
- \********************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-/* provided dependency */ var process = __webpack_require__(/*! process/browser.js */ "./node_modules/process/browser.js");
-
-
-var utils = __webpack_require__(/*! ./utils */ "./node_modules/axios/lib/utils.js");
-var normalizeHeaderName = __webpack_require__(/*! ./helpers/normalizeHeaderName */ "./node_modules/axios/lib/helpers/normalizeHeaderName.js");
-var enhanceError = __webpack_require__(/*! ./core/enhanceError */ "./node_modules/axios/lib/core/enhanceError.js");
-
-var DEFAULT_CONTENT_TYPE = {
- 'Content-Type': 'application/x-www-form-urlencoded'
-};
-
-function setContentTypeIfUnset(headers, value) {
- if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {
- headers['Content-Type'] = value;
- }
-}
-
-function getDefaultAdapter() {
- var adapter;
- if (typeof XMLHttpRequest !== 'undefined') {
- // For browsers use XHR adapter
- adapter = __webpack_require__(/*! ./adapters/xhr */ "./node_modules/axios/lib/adapters/xhr.js");
- } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') {
- // For node use HTTP adapter
- adapter = __webpack_require__(/*! ./adapters/http */ "./node_modules/axios/lib/adapters/xhr.js");
- }
- return adapter;
-}
-
-function stringifySafely(rawValue, parser, encoder) {
- if (utils.isString(rawValue)) {
- try {
- (parser || JSON.parse)(rawValue);
- return utils.trim(rawValue);
- } catch (e) {
- if (e.name !== 'SyntaxError') {
- throw e;
- }
- }
- }
-
- return (encoder || JSON.stringify)(rawValue);
-}
-
-var defaults = {
-
- transitional: {
- silentJSONParsing: true,
- forcedJSONParsing: true,
- clarifyTimeoutError: false
- },
-
- adapter: getDefaultAdapter(),
-
- transformRequest: [function transformRequest(data, headers) {
- normalizeHeaderName(headers, 'Accept');
- normalizeHeaderName(headers, 'Content-Type');
-
- if (utils.isFormData(data) ||
- utils.isArrayBuffer(data) ||
- utils.isBuffer(data) ||
- utils.isStream(data) ||
- utils.isFile(data) ||
- utils.isBlob(data)
- ) {
- return data;
- }
- if (utils.isArrayBufferView(data)) {
- return data.buffer;
- }
- if (utils.isURLSearchParams(data)) {
- setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');
- return data.toString();
- }
- if (utils.isObject(data) || (headers && headers['Content-Type'] === 'application/json')) {
- setContentTypeIfUnset(headers, 'application/json');
- return stringifySafely(data);
- }
- return data;
- }],
-
- transformResponse: [function transformResponse(data) {
- var transitional = this.transitional;
- var silentJSONParsing = transitional && transitional.silentJSONParsing;
- var forcedJSONParsing = transitional && transitional.forcedJSONParsing;
- var strictJSONParsing = !silentJSONParsing && this.responseType === 'json';
-
- if (strictJSONParsing || (forcedJSONParsing && utils.isString(data) && data.length)) {
- try {
- return JSON.parse(data);
- } catch (e) {
- if (strictJSONParsing) {
- if (e.name === 'SyntaxError') {
- throw enhanceError(e, this, 'E_JSON_PARSE');
- }
- throw e;
- }
- }
- }
-
- return data;
- }],
-
- /**
- * A timeout in milliseconds to abort a request. If set to 0 (default) a
- * timeout is not created.
- */
- timeout: 0,
-
- xsrfCookieName: 'XSRF-TOKEN',
- xsrfHeaderName: 'X-XSRF-TOKEN',
-
- maxContentLength: -1,
- maxBodyLength: -1,
-
- validateStatus: function validateStatus(status) {
- return status >= 200 && status < 300;
- }
-};
-
-defaults.headers = {
- common: {
- 'Accept': 'application/json, text/plain, */*'
- }
-};
-
-utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {
- defaults.headers[method] = {};
-});
-
-utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
- defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);
-});
-
-module.exports = defaults;
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/bind.js":
-/*!************************************************!*\
- !*** ./node_modules/axios/lib/helpers/bind.js ***!
- \************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports = function bind(fn, thisArg) {
- return function wrap() {
- var args = new Array(arguments.length);
- for (var i = 0; i < args.length; i++) {
- args[i] = arguments[i];
- }
- return fn.apply(thisArg, args);
- };
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/buildURL.js":
-/*!****************************************************!*\
- !*** ./node_modules/axios/lib/helpers/buildURL.js ***!
- \****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-function encode(val) {
- return encodeURIComponent(val).
- replace(/%3A/gi, ':').
- replace(/%24/g, '$').
- replace(/%2C/gi, ',').
- replace(/%20/g, '+').
- replace(/%5B/gi, '[').
- replace(/%5D/gi, ']');
-}
-
-/**
- * Build a URL by appending params to the end
- *
- * @param {string} url The base of the url (e.g., http://www.google.com)
- * @param {object} [params] The params to be appended
- * @returns {string} The formatted url
- */
-module.exports = function buildURL(url, params, paramsSerializer) {
- /*eslint no-param-reassign:0*/
- if (!params) {
- return url;
- }
-
- var serializedParams;
- if (paramsSerializer) {
- serializedParams = paramsSerializer(params);
- } else if (utils.isURLSearchParams(params)) {
- serializedParams = params.toString();
- } else {
- var parts = [];
-
- utils.forEach(params, function serialize(val, key) {
- if (val === null || typeof val === 'undefined') {
- return;
- }
-
- if (utils.isArray(val)) {
- key = key + '[]';
- } else {
- val = [val];
- }
-
- utils.forEach(val, function parseValue(v) {
- if (utils.isDate(v)) {
- v = v.toISOString();
- } else if (utils.isObject(v)) {
- v = JSON.stringify(v);
- }
- parts.push(encode(key) + '=' + encode(v));
- });
- });
-
- serializedParams = parts.join('&');
- }
-
- if (serializedParams) {
- var hashmarkIndex = url.indexOf('#');
- if (hashmarkIndex !== -1) {
- url = url.slice(0, hashmarkIndex);
- }
-
- url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
- }
-
- return url;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/combineURLs.js":
-/*!*******************************************************!*\
- !*** ./node_modules/axios/lib/helpers/combineURLs.js ***!
- \*******************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * Creates a new URL by combining the specified URLs
- *
- * @param {string} baseURL The base URL
- * @param {string} relativeURL The relative URL
- * @returns {string} The combined URL
- */
-module.exports = function combineURLs(baseURL, relativeURL) {
- return relativeURL
- ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
- : baseURL;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/cookies.js":
-/*!***************************************************!*\
- !*** ./node_modules/axios/lib/helpers/cookies.js ***!
- \***************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-module.exports = (
- utils.isStandardBrowserEnv() ?
-
- // Standard browser envs support document.cookie
- (function standardBrowserEnv() {
- return {
- write: function write(name, value, expires, path, domain, secure) {
- var cookie = [];
- cookie.push(name + '=' + encodeURIComponent(value));
-
- if (utils.isNumber(expires)) {
- cookie.push('expires=' + new Date(expires).toGMTString());
- }
-
- if (utils.isString(path)) {
- cookie.push('path=' + path);
- }
-
- if (utils.isString(domain)) {
- cookie.push('domain=' + domain);
- }
-
- if (secure === true) {
- cookie.push('secure');
- }
-
- document.cookie = cookie.join('; ');
- },
-
- read: function read(name) {
- var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
- return (match ? decodeURIComponent(match[3]) : null);
- },
-
- remove: function remove(name) {
- this.write(name, '', Date.now() - 86400000);
- }
- };
- })() :
-
- // Non standard browser env (web workers, react-native) lack needed support.
- (function nonStandardBrowserEnv() {
- return {
- write: function write() {},
- read: function read() { return null; },
- remove: function remove() {}
- };
- })()
-);
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isAbsoluteURL.js":
-/*!*********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isAbsoluteURL.js ***!
- \*********************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * Determines whether the specified URL is absolute
- *
- * @param {string} url The URL to test
- * @returns {boolean} True if the specified URL is absolute, otherwise false
- */
-module.exports = function isAbsoluteURL(url) {
- // A URL is considered absolute if it begins with "
://" or "//" (protocol-relative URL).
- // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
- // by any combination of letters, digits, plus, period, or hyphen.
- return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isAxiosError.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isAxiosError.js ***!
- \********************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * Determines whether the payload is an error thrown by Axios
- *
- * @param {*} payload The value to test
- * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
- */
-module.exports = function isAxiosError(payload) {
- return (typeof payload === 'object') && (payload.isAxiosError === true);
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/isURLSameOrigin.js":
-/*!***********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/isURLSameOrigin.js ***!
- \***********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-module.exports = (
- utils.isStandardBrowserEnv() ?
-
- // Standard browser envs have full support of the APIs needed to test
- // whether the request URL is of the same origin as current location.
- (function standardBrowserEnv() {
- var msie = /(msie|trident)/i.test(navigator.userAgent);
- var urlParsingNode = document.createElement('a');
- var originURL;
-
- /**
- * Parse a URL to discover it's components
- *
- * @param {String} url The URL to be parsed
- * @returns {Object}
- */
- function resolveURL(url) {
- var href = url;
-
- if (msie) {
- // IE needs attribute set twice to normalize properties
- urlParsingNode.setAttribute('href', href);
- href = urlParsingNode.href;
- }
-
- urlParsingNode.setAttribute('href', href);
-
- // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
- return {
- href: urlParsingNode.href,
- protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
- host: urlParsingNode.host,
- search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
- hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
- hostname: urlParsingNode.hostname,
- port: urlParsingNode.port,
- pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
- urlParsingNode.pathname :
- '/' + urlParsingNode.pathname
- };
- }
-
- originURL = resolveURL(window.location.href);
-
- /**
- * Determine if a URL shares the same origin as the current location
- *
- * @param {String} requestURL The URL to test
- * @returns {boolean} True if URL shares the same origin, otherwise false
- */
- return function isURLSameOrigin(requestURL) {
- var parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
- return (parsed.protocol === originURL.protocol &&
- parsed.host === originURL.host);
- };
- })() :
-
- // Non standard browser envs (web workers, react-native) lack needed support.
- (function nonStandardBrowserEnv() {
- return function isURLSameOrigin() {
- return true;
- };
- })()
-);
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/normalizeHeaderName.js":
-/*!***************************************************************!*\
- !*** ./node_modules/axios/lib/helpers/normalizeHeaderName.js ***!
- \***************************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ../utils */ "./node_modules/axios/lib/utils.js");
-
-module.exports = function normalizeHeaderName(headers, normalizedName) {
- utils.forEach(headers, function processHeader(value, name) {
- if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
- headers[normalizedName] = value;
- delete headers[name];
- }
- });
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/parseHeaders.js":
-/*!********************************************************!*\
- !*** ./node_modules/axios/lib/helpers/parseHeaders.js ***!
- \********************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var utils = __webpack_require__(/*! ./../utils */ "./node_modules/axios/lib/utils.js");
-
-// Headers whose duplicates are ignored by node
-// c.f. https://nodejs.org/api/http.html#http_message_headers
-var ignoreDuplicateOf = [
- 'age', 'authorization', 'content-length', 'content-type', 'etag',
- 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
- 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
- 'referer', 'retry-after', 'user-agent'
-];
-
-/**
- * Parse headers into an object
- *
- * ```
- * Date: Wed, 27 Aug 2014 08:58:49 GMT
- * Content-Type: application/json
- * Connection: keep-alive
- * Transfer-Encoding: chunked
- * ```
- *
- * @param {String} headers Headers needing to be parsed
- * @returns {Object} Headers parsed into an object
- */
-module.exports = function parseHeaders(headers) {
- var parsed = {};
- var key;
- var val;
- var i;
-
- if (!headers) { return parsed; }
-
- utils.forEach(headers.split('\n'), function parser(line) {
- i = line.indexOf(':');
- key = utils.trim(line.substr(0, i)).toLowerCase();
- val = utils.trim(line.substr(i + 1));
-
- if (key) {
- if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) {
- return;
- }
- if (key === 'set-cookie') {
- parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]);
- } else {
- parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
- }
- }
- });
-
- return parsed;
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/spread.js":
-/*!**************************************************!*\
- !*** ./node_modules/axios/lib/helpers/spread.js ***!
- \**************************************************/
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * Syntactic sugar for invoking a function and expanding an array for arguments.
- *
- * Common use case would be to use `Function.prototype.apply`.
- *
- * ```js
- * function f(x, y, z) {}
- * var args = [1, 2, 3];
- * f.apply(null, args);
- * ```
- *
- * With `spread` this example can be re-written.
- *
- * ```js
- * spread(function(x, y, z) {})([1, 2, 3]);
- * ```
- *
- * @param {Function} callback
- * @returns {Function}
- */
-module.exports = function spread(callback) {
- return function wrap(arr) {
- return callback.apply(null, arr);
- };
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/helpers/validator.js":
-/*!*****************************************************!*\
- !*** ./node_modules/axios/lib/helpers/validator.js ***!
- \*****************************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var pkg = __webpack_require__(/*! ./../../package.json */ "./node_modules/axios/package.json");
-
-var validators = {};
-
-// eslint-disable-next-line func-names
-['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
- validators[type] = function validator(thing) {
- return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
- };
-});
-
-var deprecatedWarnings = {};
-var currentVerArr = pkg.version.split('.');
-
-/**
- * Compare package versions
- * @param {string} version
- * @param {string?} thanVersion
- * @returns {boolean}
- */
-function isOlderVersion(version, thanVersion) {
- var pkgVersionArr = thanVersion ? thanVersion.split('.') : currentVerArr;
- var destVer = version.split('.');
- for (var i = 0; i < 3; i++) {
- if (pkgVersionArr[i] > destVer[i]) {
- return true;
- } else if (pkgVersionArr[i] < destVer[i]) {
- return false;
- }
- }
- return false;
-}
-
-/**
- * Transitional option validator
- * @param {function|boolean?} validator
- * @param {string?} version
- * @param {string} message
- * @returns {function}
- */
-validators.transitional = function transitional(validator, version, message) {
- var isDeprecated = version && isOlderVersion(version);
-
- function formatMessage(opt, desc) {
- return '[Axios v' + pkg.version + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
- }
-
- // eslint-disable-next-line func-names
- return function(value, opt, opts) {
- if (validator === false) {
- throw new Error(formatMessage(opt, ' has been removed in ' + version));
- }
-
- if (isDeprecated && !deprecatedWarnings[opt]) {
- deprecatedWarnings[opt] = true;
- // eslint-disable-next-line no-console
- console.warn(
- formatMessage(
- opt,
- ' has been deprecated since v' + version + ' and will be removed in the near future'
- )
- );
- }
-
- return validator ? validator(value, opt, opts) : true;
- };
-};
-
-/**
- * Assert object's properties type
- * @param {object} options
- * @param {object} schema
- * @param {boolean?} allowUnknown
- */
-
-function assertOptions(options, schema, allowUnknown) {
- if (typeof options !== 'object') {
- throw new TypeError('options must be an object');
- }
- var keys = Object.keys(options);
- var i = keys.length;
- while (i-- > 0) {
- var opt = keys[i];
- var validator = schema[opt];
- if (validator) {
- var value = options[opt];
- var result = value === undefined || validator(value, opt, options);
- if (result !== true) {
- throw new TypeError('option ' + opt + ' must be ' + result);
- }
- continue;
- }
- if (allowUnknown !== true) {
- throw Error('Unknown option ' + opt);
- }
- }
-}
-
-module.exports = {
- isOlderVersion: isOlderVersion,
- assertOptions: assertOptions,
- validators: validators
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/axios/lib/utils.js":
-/*!*****************************************!*\
- !*** ./node_modules/axios/lib/utils.js ***!
- \*****************************************/
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var bind = __webpack_require__(/*! ./helpers/bind */ "./node_modules/axios/lib/helpers/bind.js");
-
-// utils is a library of generic helper functions non-specific to axios
-
-var toString = Object.prototype.toString;
-
-/**
- * Determine if a value is an Array
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an Array, otherwise false
- */
-function isArray(val) {
- return toString.call(val) === '[object Array]';
-}
-
-/**
- * Determine if a value is undefined
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if the value is undefined, otherwise false
- */
-function isUndefined(val) {
- return typeof val === 'undefined';
-}
-
-/**
- * Determine if a value is a Buffer
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Buffer, otherwise false
- */
-function isBuffer(val) {
- return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
- && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val);
-}
-
-/**
- * Determine if a value is an ArrayBuffer
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an ArrayBuffer, otherwise false
- */
-function isArrayBuffer(val) {
- return toString.call(val) === '[object ArrayBuffer]';
-}
-
-/**
- * Determine if a value is a FormData
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an FormData, otherwise false
- */
-function isFormData(val) {
- return (typeof FormData !== 'undefined') && (val instanceof FormData);
-}
-
-/**
- * Determine if a value is a view on an ArrayBuffer
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
- */
-function isArrayBufferView(val) {
- var result;
- if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
- result = ArrayBuffer.isView(val);
- } else {
- result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);
- }
- return result;
-}
-
-/**
- * Determine if a value is a String
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a String, otherwise false
- */
-function isString(val) {
- return typeof val === 'string';
-}
-
-/**
- * Determine if a value is a Number
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Number, otherwise false
- */
-function isNumber(val) {
- return typeof val === 'number';
-}
-
-/**
- * Determine if a value is an Object
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is an Object, otherwise false
- */
-function isObject(val) {
- return val !== null && typeof val === 'object';
-}
-
-/**
- * Determine if a value is a plain Object
- *
- * @param {Object} val The value to test
- * @return {boolean} True if value is a plain Object, otherwise false
- */
-function isPlainObject(val) {
- if (toString.call(val) !== '[object Object]') {
- return false;
- }
-
- var prototype = Object.getPrototypeOf(val);
- return prototype === null || prototype === Object.prototype;
-}
-
-/**
- * Determine if a value is a Date
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Date, otherwise false
- */
-function isDate(val) {
- return toString.call(val) === '[object Date]';
-}
-
-/**
- * Determine if a value is a File
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a File, otherwise false
- */
-function isFile(val) {
- return toString.call(val) === '[object File]';
-}
-
-/**
- * Determine if a value is a Blob
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Blob, otherwise false
- */
-function isBlob(val) {
- return toString.call(val) === '[object Blob]';
-}
-
-/**
- * Determine if a value is a Function
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Function, otherwise false
- */
-function isFunction(val) {
- return toString.call(val) === '[object Function]';
-}
-
-/**
- * Determine if a value is a Stream
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a Stream, otherwise false
- */
-function isStream(val) {
- return isObject(val) && isFunction(val.pipe);
-}
-
-/**
- * Determine if a value is a URLSearchParams object
- *
- * @param {Object} val The value to test
- * @returns {boolean} True if value is a URLSearchParams object, otherwise false
- */
-function isURLSearchParams(val) {
- return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;
-}
-
-/**
- * Trim excess whitespace off the beginning and end of a string
- *
- * @param {String} str The String to trim
- * @returns {String} The String freed of excess whitespace
- */
-function trim(str) {
- return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '');
-}
-
-/**
- * Determine if we're running in a standard browser environment
- *
- * This allows axios to run in a web worker, and react-native.
- * Both environments support XMLHttpRequest, but not fully standard globals.
- *
- * web workers:
- * typeof window -> undefined
- * typeof document -> undefined
- *
- * react-native:
- * navigator.product -> 'ReactNative'
- * nativescript
- * navigator.product -> 'NativeScript' or 'NS'
- */
-function isStandardBrowserEnv() {
- if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' ||
- navigator.product === 'NativeScript' ||
- navigator.product === 'NS')) {
- return false;
- }
- return (
- typeof window !== 'undefined' &&
- typeof document !== 'undefined'
- );
-}
-
-/**
- * Iterate over an Array or an Object invoking a function for each item.
- *
- * If `obj` is an Array callback will be called passing
- * the value, index, and complete array for each item.
- *
- * If 'obj' is an Object callback will be called passing
- * the value, key, and complete object for each property.
- *
- * @param {Object|Array} obj The object to iterate
- * @param {Function} fn The callback to invoke for each item
- */
-function forEach(obj, fn) {
- // Don't bother if no value provided
- if (obj === null || typeof obj === 'undefined') {
- return;
- }
-
- // Force an array if not already something iterable
- if (typeof obj !== 'object') {
- /*eslint no-param-reassign:0*/
- obj = [obj];
- }
-
- if (isArray(obj)) {
- // Iterate over array values
- for (var i = 0, l = obj.length; i < l; i++) {
- fn.call(null, obj[i], i, obj);
- }
- } else {
- // Iterate over object keys
- for (var key in obj) {
- if (Object.prototype.hasOwnProperty.call(obj, key)) {
- fn.call(null, obj[key], key, obj);
- }
- }
- }
-}
-
-/**
- * Accepts varargs expecting each argument to be an object, then
- * immutably merges the properties of each object and returns result.
- *
- * When multiple objects contain the same key the later object in
- * the arguments list will take precedence.
- *
- * Example:
- *
- * ```js
- * var result = merge({foo: 123}, {foo: 456});
- * console.log(result.foo); // outputs 456
- * ```
- *
- * @param {Object} obj1 Object to merge
- * @returns {Object} Result of all merge properties
- */
-function merge(/* obj1, obj2, obj3, ... */) {
- var result = {};
- function assignValue(val, key) {
- if (isPlainObject(result[key]) && isPlainObject(val)) {
- result[key] = merge(result[key], val);
- } else if (isPlainObject(val)) {
- result[key] = merge({}, val);
- } else if (isArray(val)) {
- result[key] = val.slice();
- } else {
- result[key] = val;
- }
- }
-
- for (var i = 0, l = arguments.length; i < l; i++) {
- forEach(arguments[i], assignValue);
- }
- return result;
-}
-
-/**
- * Extends object a by mutably adding to it the properties of object b.
- *
- * @param {Object} a The object to be extended
- * @param {Object} b The object to copy properties from
- * @param {Object} thisArg The object to bind function to
- * @return {Object} The resulting value of object a
- */
-function extend(a, b, thisArg) {
- forEach(b, function assignValue(val, key) {
- if (thisArg && typeof val === 'function') {
- a[key] = bind(val, thisArg);
- } else {
- a[key] = val;
- }
- });
- return a;
-}
-
-/**
- * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
- *
- * @param {string} content with BOM
- * @return {string} content value without BOM
- */
-function stripBOM(content) {
- if (content.charCodeAt(0) === 0xFEFF) {
- content = content.slice(1);
- }
- return content;
-}
-
-module.exports = {
- isArray: isArray,
- isArrayBuffer: isArrayBuffer,
- isBuffer: isBuffer,
- isFormData: isFormData,
- isArrayBufferView: isArrayBufferView,
- isString: isString,
- isNumber: isNumber,
- isObject: isObject,
- isPlainObject: isPlainObject,
- isUndefined: isUndefined,
- isDate: isDate,
- isFile: isFile,
- isBlob: isBlob,
- isFunction: isFunction,
- isStream: isStream,
- isURLSearchParams: isURLSearchParams,
- isStandardBrowserEnv: isStandardBrowserEnv,
- forEach: forEach,
- merge: merge,
- extend: extend,
- trim: trim,
- stripBOM: stripBOM
-};
-
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/BannedIP.vue?vue&type=script&lang=js&":
-/*!***************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/BannedIP.vue?vue&type=script&lang=js& ***!
- \***************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js");
-/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js");
-/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.find-index.js */ "./node_modules/core-js/modules/es.array.find-index.js");
-/* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ "./node_modules/core-js/modules/es.array.includes.js");
-/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.string.includes.js */ "./node_modules/core-js/modules/es.string.includes.js");
-/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_6__);
-/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js");
-/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_7__);
-/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js");
-/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_8__);
-
-
-
-
-
-
-
-
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('BannedIP Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- this.baseDatas = JSON.parse(this.dbdatas);
- },
- props: ['dbdatas'],
- data: function data() {
- return {
- datas: [],
- response: null,
- processing: false,
- page: 1,
- perPage: 10,
- pages: [],
- baseDatas: [],
- searchText: '',
- filterMode: false,
- resultPagination: []
- };
- },
- methods: {
- // Ajoute une ligne au tableau affiché
- newItem: function newItem() {
- var ip = window.prompt("Entrer l'IP à bannir", "");
- var ipExist = false;
-
- if (ip != null) {
- ipExist = this.baseDatas.filter(function (elem) {
- return elem.ip.toString().indexOf(ip) >= 0;
- }).length == 0 ? true : false;
- }
-
- if (ipExist) {
- this.datas.push({
- ip: ip
- });
- this.baseDatas.push({
- ip: ip
- });
- this.setPages();
- this.page = this.pages.length;
- } else {
- window.alert("L'IP entrée est déjà dans la liste.");
- }
- },
- // Supprime une ligne dans la base si elle existait déjà
- removeItem: function removeItem(ip) {
- if (confirm("Êtes-vous sûr(e) ?")) {
- var i = this.baseDatas.findIndex(function (element) {
- return element.ip == ip;
- });
- var iDatas = this.datas.findIndex(function (element) {
- return element.ip == ip;
- });
-
- if (i !== null && this.baseDatas[i]['ip'] !== null) {
- axios.post('/bo/ajax/delete-banned-ip', {
- ip: this.baseDatas[i]['ip']
- }).catch(function (error) {
- console.log(error);
- });
- this.baseDatas.splice(i, 1);
- this.datas.splice(iDatas, 1);
- } else {
- this.baseDatas.splice(i, 1);
- this.datas.splice(iDatas, 1);
- }
- }
- },
- // Sauvegarde les données dans la base
- saveData: function saveData() {
- var _this = this;
-
- this.processing = true;
- this.response = "En cours de sauvegarde...";
- this.searchText = '';
- axios.post('/bo/ajax/save-banned-ip', {
- ips: this.baseDatas
- }).then(function (response) {
- _this.datas = response.data;
- _this.baseDatas = JSON.parse(JSON.stringify(_this.datas));
- _this.response = "Sauvegarde terminée !";
- _this.processing = false;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la sauvegarde.";
- this.processing = false;
- });
- },
- // Calcul le nombre de page total dans la pagination
- setPages: function setPages() {
- var numberOfPages = Math.ceil(this.datas.length / this.perPage);
-
- if (this.pages.length > numberOfPages) {
- this.pages.splice(numberOfPages);
- }
-
- for (var index = 0; index < numberOfPages; index++) {
- if (!this.pages.includes(index + 1)) {
- this.pages.push(index + 1);
- }
- }
-
- this.paginationToPrint();
- },
- // S'occupe de la pagination des données affichées dans le tableau
- paginate: function paginate(datas) {
- var page = this.page;
- var perPage = this.perPage;
- var from = page * perPage - perPage;
- var to = page * perPage;
- return datas.slice(from, to);
- },
- // Recherche dans le tableau les ips ou produit corespondant à la recherche
- search: function search() {
- var _this2 = this;
-
- if (this.page !== 1) {
- this.page = 1;
- }
-
- if (this.searchText === "") {
- this.filterMode = false;
- } else {
- this.filterMode = true;
- }
-
- var tmpIPs = this.baseDatas.filter(function (item) {
- return item.ip.toLowerCase().indexOf(_this2.searchText.toLowerCase()) >= 0;
- });
- this.datas = Object.assign(tmpIPs);
- },
- // Copie les données du tableau afficher dans le tableau baseDatas qui sert de référence pour sauvegarder, supprimer etc
- updateBaseData: function updateBaseData(ip) {
- this.baseDatas[this.datas.findIndex(function (element) {
- return element.ip == ip;
- })] = this.datas[this.datas.findIndex(function (element) {
- return element.ip == ip;
- })];
- },
- // Prépare les pages à afficher a l'écran pour la pagination
- paginationToPrint: function paginationToPrint() {
- this.resultPagination = JSON.parse(JSON.stringify(this.pages));
-
- if (this.page >= 3) {
- if (this.page <= this.pages.length - 4) {
- this.resultPagination.splice(0, this.page - 4);
- } else {
- this.resultPagination.splice(0, this.pages.length - 8);
- }
- }
-
- if (this.page <= this.pages.length - 3) {
- this.resultPagination.splice(8);
- }
- }
- },
- computed: {
- displayedips: function displayedips() {
- return this.paginate(this.datas);
- }
- },
- watch: {
- datas: function datas() {
- this.setPages();
- },
- page: function page() {
- this.paginationToPrint();
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CodesEAN.vue?vue&type=script&lang=js&":
-/*!***************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/CodesEAN.vue?vue&type=script&lang=js& ***!
- \***************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.filter.js */ "./node_modules/core-js/modules/es.array.filter.js");
-/* harmony import */ var core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_filter_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.array.find-index.js */ "./node_modules/core-js/modules/es.array.find-index.js");
-/* harmony import */ var core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_find_index_js__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_3__);
-/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! core-js/modules/es.array.includes.js */ "./node_modules/core-js/modules/es.array.includes.js");
-/* harmony import */ var core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_includes_js__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! core-js/modules/es.string.includes.js */ "./node_modules/core-js/modules/es.string.includes.js");
-/* harmony import */ var core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_string_includes_js__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! core-js/modules/es.array.slice.js */ "./node_modules/core-js/modules/es.array.slice.js");
-/* harmony import */ var core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_slice_js__WEBPACK_IMPORTED_MODULE_6__);
-/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ "./node_modules/core-js/modules/es.regexp.to-string.js");
-/* harmony import */ var core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_regexp_to_string_js__WEBPACK_IMPORTED_MODULE_7__);
-/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! core-js/modules/es.object.assign.js */ "./node_modules/core-js/modules/es.object.assign.js");
-/* harmony import */ var core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_assign_js__WEBPACK_IMPORTED_MODULE_8__);
-
-
-
-
-
-
-
-
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('CodesEAN Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- this.baseDatas = JSON.parse(this.dbdatas);
- },
- props: ['dbdatas'],
- data: function data() {
- return {
- datas: [],
- response: null,
- processing: false,
- page: 1,
- perPage: 10,
- pages: [],
- baseDatas: [],
- searchText: '',
- filterMode: false,
- resultPagination: []
- };
- },
- methods: {
- // Ajoute une ligne au tableau affiché
- newItem: function newItem() {
- var code = window.prompt('Entrer le code EAN', "");
- var codeOk = false;
-
- if (code != null) {
- codeOk = this.baseDatas.filter(function (elem) {
- return elem.code == code;
- }).length == 0 ? true : false;
- }
-
- if (codeOk) {
- this.datas.push({
- id: null,
- code: code,
- product: ''
- });
- this.baseDatas.push({
- id: null,
- code: code,
- product: ''
- });
- this.setPages();
- this.page = this.pages.length;
- } else {
- window.alert('Le code entré existe déjà !');
- }
- },
- // Supprime une ligne dans la base si elle existait déjà
- removeItem: function removeItem(id) {
- if (confirm("Êtes-vous sûr(e) ?")) {
- var i = this.baseDatas.findIndex(function (element) {
- return element.id == id;
- });
- var iDatas = this.datas.findIndex(function (element) {
- return element.id == id;
- });
-
- if (i !== null && this.baseDatas[i]['id'] !== null) {
- axios.post('/bo/ajax/delete-codes-ean', {
- id: this.baseDatas[i]['id']
- }).catch(function (error) {
- console.log(error);
- });
- this.baseDatas.splice(i, 1);
- this.datas.splice(iDatas, 1);
- } else {
- this.baseDatas.splice(i, 1);
- this.datas.splice(iDatas, 1);
- }
- }
- },
- // Sauvegarde les données dans la base
- saveData: function saveData() {
- var _this = this;
-
- this.processing = true;
- this.response = "En cours de sauvegarde...";
- this.searchText = '';
- axios.post('/bo/ajax/save-codes-ean', {
- codes: this.baseDatas
- }).then(function (response) {
- _this.datas = response.data;
- _this.baseDatas = JSON.parse(JSON.stringify(_this.datas));
- _this.response = "Sauvegarde terminée !";
- _this.processing = false;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la sauvegarde.";
- this.processing = false;
- });
- },
- // Calcul le nombre de page total dans la pagination
- setPages: function setPages() {
- var numberOfPages = Math.ceil(this.datas.length / this.perPage);
-
- if (this.pages.length > numberOfPages) {
- this.pages.splice(numberOfPages);
- }
-
- for (var index = 0; index < numberOfPages; index++) {
- if (!this.pages.includes(index + 1)) {
- this.pages.push(index + 1);
- }
- }
-
- this.paginationToPrint();
- },
- // S'occupe de la pagination des données affichées dans le tableau
- paginate: function paginate(datas) {
- var page = this.page;
- var perPage = this.perPage;
- var from = page * perPage - perPage;
- var to = page * perPage;
- return datas.slice(from, to);
- },
- // Recherche dans le tableau les codes ou produit corespondant à la recherche
- search: function search() {
- var _this2 = this;
-
- if (this.page !== 1) {
- this.page = 1;
- }
-
- if (this.searchText === "") {
- this.filterMode = false;
- } else {
- this.filterMode = true;
- }
-
- var tmpEAN = this.baseDatas.filter(function (item) {
- return item.code.toString().indexOf(_this2.searchText) >= 0;
- });
- var tmpProduct = this.baseDatas.filter(function (item) {
- return item.product.toLowerCase().indexOf(_this2.searchText.toLowerCase()) >= 0;
- });
- this.datas = Object.assign(tmpEAN, tmpProduct);
- },
- // Copie les données du tableau afficher dans le tableau baseDatas qui sert de référence pour sauvegarder, supprimer etc
- updateBaseData: function updateBaseData(code) {
- this.baseDatas[this.datas.findIndex(function (element) {
- return element.code == code;
- })] = this.datas[this.datas.findIndex(function (element) {
- return element.code == code;
- })];
- },
- // Prépare les pages à afficher a l'écran pour la pagination
- paginationToPrint: function paginationToPrint() {
- this.resultPagination = JSON.parse(JSON.stringify(this.pages));
-
- if (this.page >= 3) {
- if (this.page <= this.pages.length - 4) {
- this.resultPagination.splice(0, this.page - 4);
- } else {
- this.resultPagination.splice(0, this.pages.length - 8);
- }
- }
-
- if (this.page <= this.pages.length - 3) {
- this.resultPagination.splice(8);
- }
- }
- },
- computed: {
- displayedCodes: function displayedCodes() {
- return this.paginate(this.datas);
- }
- },
- watch: {
- datas: function datas() {
- this.setPages();
- },
- page: function page() {
- this.paginationToPrint();
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/FaqQuestions.vue?vue&type=script&lang=js&":
-/*!*******************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/FaqQuestions.vue?vue&type=script&lang=js& ***!
- \*******************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__);
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('FaqQuestions Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- this.themes = JSON.parse(this.dbthemes);
- },
- props: ['dbdatas', 'dbthemes'],
- data: function data() {
- return {
- datas: [],
- themes: [],
- response: null,
- processing: false
- };
- },
- watch: {},
- methods: {
- newItem: function newItem() {
- this.datas.push({
- id: null,
- question: '',
- answer: '',
- positive_vote: 0,
- negative_vote: 0,
- theme_id: null,
- toggle: false
- });
- },
- removeItem: function removeItem(index) {
- var _this = this;
-
- if (confirm("Êtes-vous sûr(e) ?")) {
- if (this.datas[index]['id'] !== null) {
- this.processing = true;
- this.response = "Suppression en cours...";
- axios.post('/bo/ajax/delete-faq-question', {
- id: this.datas[index]['id']
- }).then(function (response) {
- _this.response = "Suppression terminée !";
- _this.processing = false;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la suppression.";
- this.processing = false;
- });
- this.datas.splice(index, 1);
- } else {
- this.datas.splice(index, 1);
- }
- }
- },
- saveData: function saveData() {
- var _this2 = this;
-
- this.processing = true;
- this.response = "En cours de sauvegarde...";
- axios.post('/bo/ajax/save-faq-question', {
- questions: this.datas
- }).then(function (response) {
- _this2.datas = response.data;
- _this2.response = "Sauvegarde terminée !";
- _this2.processing = false;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la sauvegarde.";
- this.processing = false;
- });
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/FaqThemes.vue?vue&type=script&lang=js&":
-/*!****************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/FaqThemes.vue?vue&type=script&lang=js& ***!
- \****************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__);
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('FaqThemes Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- },
- props: ['name', 'dbdatas'],
- data: function data() {
- return {
- datas: [],
- response: null,
- processing: false
- };
- },
- watch: {},
- methods: {
- newItem: function newItem() {
- this.datas.push({
- id: null,
- name: ''
- });
- },
- removeItem: function removeItem(index) {
- var _this = this;
-
- if (confirm("Êtes-vous sûr(e) ?")) {
- if (this.datas[index]['id'] !== null) {
- this.processing = true;
- this.response = "Suppression en cours...";
- axios.post('/bo/ajax/delete-faq-theme', {
- id: this.datas[index]['id']
- }).then(function (response) {
- var result = response.data;
-
- switch (result) {
- case 0:
- case 2:
- // 0 = Supprimé, 2 = Pas encore en base, supprimer juste dans la vue
- _this.response = "Suppression terminée !";
-
- _this.datas.splice(index, 1);
-
- _this.processing = false;
- break;
-
- case 1:
- // 1 = Non supprimer car des questions lui sont lié
- _this.response = "Erreur : des questions sont encore liées à ce thème.";
- setTimeout(function () {
- this.processing = false;
- }.bind(_this), 1500);
- break;
- }
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la suppression.";
- this.processing = false;
- });
- } else {
- this.datas.splice(index, 1);
- }
- }
- },
- saveData: function saveData() {
- var _this2 = this;
-
- this.processing = true;
- this.response = "En cours de sauvegarde...";
- axios.post('/bo/ajax/save-faq-theme', {
- themes: this.datas
- }).then(function (response) {
- _this2.datas = response.data;
- _this2.response = "Sauvegarde terminée !";
- _this2.processing = false;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la sauvegarde.";
- this.processing = false;
- });
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/GainViews.vue?vue&type=script&lang=js&":
-/*!****************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/GainViews.vue?vue&type=script&lang=js& ***!
- \****************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__);
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('GainViews Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- },
- props: ['name', 'dbdatas'],
- data: function data() {
- return {
- datas: [],
- response: null,
- processing: false
- };
- },
- watch: {},
- methods: {
- newItem: function newItem() {
- this.datas.push({
- name: '',
- file_name: ''
- });
- },
- removeItem: function removeItem(index) {
- var _this = this;
-
- if (confirm("Êtes-vous sûr(e) ?")) {
- if (this.datas[index]['id'] !== undefined) {
- this.processing = true;
- this.response = "Suppression en cours...";
- axios.post('/bo/ajax/delete-gain-views', {
- id: this.datas[index]['id']
- }).then(function (response) {
- return _this.response = response.data;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la suppression.";
- });
- this.datas.splice(index, 1);
- setTimeout(function () {
- this.processing = false;
- }.bind(this), 3000);
- } else {
- this.datas.splice(index, 1);
- }
- }
- },
- saveData: function saveData() {
- var _this2 = this;
-
- this.processing = true;
- this.response = "En cours de sauvegarde...";
- axios.post('/bo/ajax/save-gain-views', {
- gainViews: this.datas
- }).then(function (response) {
- return _this2.datas = response.data;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la sauvegarde.";
- });
- this.response = "Sauvegarde terminée !";
- setTimeout(function () {
- this.processing = false;
- }.bind(this), 3000);
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/InstantWin.vue?vue&type=script&lang=js&":
-/*!*****************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/InstantWin.vue?vue&type=script&lang=js& ***!
- \*****************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js");
-/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/es.number.constructor.js */ "./node_modules/core-js/modules/es.number.constructor.js");
-/* harmony import */ var core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_number_constructor_js__WEBPACK_IMPORTED_MODULE_2__);
-
-
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- var _this = this;
-
- console.log('Instant Win Component mounted.');
- this.datas = JSON.parse(this.instantwin);
- this.clipboard = "Voici la liste des instants gagnants :\n";
- this.datas.forEach(function (element) {
- return _this.clipboard += "Le " + new Date(element.appear_date).toLocaleDateString() + " à " + element.appear_date.substring(element.appear_date.length - 8, element.appear_date.length - 3) + " - " + element.prize.label_one + "\n";
- });
- $('.toast').toast();
- },
- props: {
- cangenerate: Number,
- startdate: String,
- enddate: String,
- instantwin: String
- },
- data: function data() {
- return {
- datas: [],
- response: null,
- clipboard: '',
- copying: false
- };
- },
- methods: {
- generate: function generate() {
- var _this2 = this;
-
- axios.get('/bo/ajax/instant-win-generate').then(function (response) {
- return _this2.datas = response.data;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la génération.";
- });
- this.cangenerate = 0;
- },
- copyToClipboard: function copyToClipboard() {
- this.copying = true;
- setTimeout(function () {
- this.copying = false;
- }.bind(this), 1000);
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Prizes.vue?vue&type=script&lang=js&":
-/*!*************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/Prizes.vue?vue&type=script&lang=js& ***!
- \*************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__);
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('GainViews Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- this.gainviews = JSON.parse(this.dbgainviews);
- },
- props: ['name', 'dbdatas', 'dbgainviews'],
- data: function data() {
- return {
- datas: [],
- gainviews: [],
- response: null,
- processing: false,
- pdf_winning_proof: []
- };
- },
- watch: {},
- methods: {
- handleFileUpload: function handleFileUpload(index) {
- var files = event.target.files || event.dataTransfer.files;
- if (!files.length) return;
- this.pdf_winning_proof[index] = files[0];
-
- if (!this.pdf_winning_proof[index]) {
- event.preventDefault();
- alert('Aucun fichier choisi.');
- return;
- }
-
- if (this.pdf_winning_proof[index].size > 1024 * 1024 * 20) {
- event.preventDefault();
- alert('Fichier trop volumineux (> 20MB)');
- return;
- }
- },
- newItem: function newItem() {
- this.datas.push({
- id: null,
- arcadia_id: null,
- label_one: '',
- label_many: '',
- quantity: 0,
- notifications: 0,
- additional_form: 0,
- arcadia_operation_code: null,
- arcadia_support_code: null,
- pdf_winning_proof: null,
- need_proof: 1,
- gain_view_id: null
- });
- },
- removeItem: function removeItem(index) {
- var _this = this;
-
- if (confirm("Êtes-vous sûr(e) ?")) {
- if (this.datas[index]['id'] !== undefined) {
- this.processing = true;
- this.response = "Suppression en cours...";
- axios.post('/bo/ajax/delete-prize', {
- id: this.datas[index]['id']
- }).then(function (response) {
- return _this.response = response.data;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la suppression.";
- });
- this.datas.splice(index, 1);
- setTimeout(function () {
- this.processing = false;
- }.bind(this), 3000);
- } else {
- this.datas.splice(index, 1);
- }
- }
- },
- saveData: function saveData() {
- var _this2 = this;
-
- var formData = new FormData();
- $.each(this.pdf_winning_proof, function (index, value) {
- formData.append('pdf[' + index + "]", value);
- });
- formData.append('prizes', JSON.stringify(this.datas));
- this.processing = true;
- this.response = "En cours de sauvegarde...";
- axios.post('/bo/ajax/save-prizes', formData).then(function (response) {
- _this2.datas = response.data;
- _this2.response = "Sauvegarde terminée !";
- _this2.processing = false;
- }).catch(function (error) {
- console.log(error);
- this.response = "Erreur lors de la sauvegarde.";
- this.processing = false;
- });
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/WebCoupons.vue?vue&type=script&lang=js&":
-/*!*****************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/WebCoupons.vue?vue&type=script&lang=js& ***!
- \*****************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! core-js/modules/es.object.to-string.js */ "./node_modules/core-js/modules/es.object.to-string.js");
-/* harmony import */ var core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_object_to_string_js__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ "./node_modules/core-js/modules/web.dom-collections.for-each.js");
-/* harmony import */ var core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_web_dom_collections_for_each_js__WEBPACK_IMPORTED_MODULE_2__);
-
-
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('WebCoupons Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- },
- props: ['name', 'dbdatas'],
- data: function data() {
- return {
- datas: []
- };
- },
- watch: {},
- methods: {
- newItem: function newItem() {
- this.datas.push({
- web_coupon_identifiant: '',
- percentage: 0,
- face_value: 0,
- valid_on: '',
- img_name: ''
- });
- },
- removeItem: function removeItem(index) {
- if (confirm("Êtes-vous sûr(e) ?")) {
- this.datas.splice(index, 1);
- }
- }
- },
- computed: {
- totalPercentage: function totalPercentage() {
- var total = 0;
- this.datas.forEach(function (element) {
- return total += parseInt(element.percentage);
- });
- return total;
- }
- }
-});
-
-/***/ }),
-
-/***/ "./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/WinNotification.vue?vue&type=script&lang=js&":
-/*!**********************************************************************************************************************************************************************************************************************!*\
- !*** ./node_modules/babel-loader/lib/index.js??clonedRuleSet-5[0].rules[0].use[0]!./node_modules/vue-loader/lib/index.js??vue-loader-options!./resources/js/components/WinNotification.vue?vue&type=script&lang=js& ***!
- \**********************************************************************************************************************************************************************************************************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/modules/es.array.splice.js */ "./node_modules/core-js/modules/es.array.splice.js");
-/* harmony import */ var core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_modules_es_array_splice_js__WEBPACK_IMPORTED_MODULE_0__);
-
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-//
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
- mounted: function mounted() {
- console.log('WinNotification Component mounted.');
- this.datas = JSON.parse(this.dbdatas);
- },
- props: ['name', 'dbdatas'],
- data: function data() {
- return {
- datas: []
- };
- },
- watch: {},
- methods: {
- newItem: function newItem() {
- this.datas.push({
- email: ''
- });
- },
- removeItem: function removeItem(index) {
- if (confirm("Êtes-vous sûr(e) ?")) {
- this.datas.splice(index, 1);
- }
- }
- }
-});
-
-/***/ }),
-
-/***/ "./resources/js/app.js":
-/*!*****************************!*\
- !*** ./resources/js/app.js ***!
- \*****************************/
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony import */ var v_clipboard__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! v-clipboard */ "./node_modules/v-clipboard/dist/index.min.js");
-/* harmony import */ var v_clipboard__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(v_clipboard__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var chart_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! chart.js */ "./node_modules/chart.js/dist/Chart.js");
-/* harmony import */ var chart_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(chart_js__WEBPACK_IMPORTED_MODULE_1__);
-/**
- * First we will load all of this project's JavaScript dependencies which
- * includes Vue and other libraries. It is a great starting point when
- * building robust, powerful web applications using Vue and Laravel.
- */
-__webpack_require__(/*! ./bootstrap */ "./resources/js/bootstrap.js");
-
-__webpack_require__(/*! @fancyapps/fancybox */ "./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.js");
-
-window.Vue = (__webpack_require__(/*! vue */ "./node_modules/vue/dist/vue.esm.js")["default"]);
-
-
-Vue.use((v_clipboard__WEBPACK_IMPORTED_MODULE_0___default()));
-/**
- * The following block of code may be used to automatically register your
- * Vue components. It will recursively scan this directory for the Vue
- * components and automatically register them with their "basename".
- *
- * Eg. ./components/ExampleComponent.vue ->
- */
-// const files = require.context('./', true, /\.vue$/i)
-// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
-
-Vue.component('win-notification', (__webpack_require__(/*! ./components/WinNotification.vue */ "./resources/js/components/WinNotification.vue")["default"]));
-Vue.component('gain-views', (__webpack_require__(/*! ./components/GainViews.vue */ "./resources/js/components/GainViews.vue")["default"]));
-Vue.component('prizes', (__webpack_require__(/*! ./components/Prizes.vue */ "./resources/js/components/Prizes.vue")["default"]));
-Vue.component('instant-win', (__webpack_require__(/*! ./components/InstantWin.vue */ "./resources/js/components/InstantWin.vue")["default"]));
-Vue.component('codes-ean', (__webpack_require__(/*! ./components/CodesEAN.vue */ "./resources/js/components/CodesEAN.vue")["default"]));
-Vue.component('banned-ip', (__webpack_require__(/*! ./components/BannedIP.vue */ "./resources/js/components/BannedIP.vue")["default"]));
-Vue.component('faq-themes', (__webpack_require__(/*! ./components/FaqThemes.vue */ "./resources/js/components/FaqThemes.vue")["default"]));
-Vue.component('faq-questions', (__webpack_require__(/*! ./components/FaqQuestions.vue */ "./resources/js/components/FaqQuestions.vue")["default"]));
-Vue.component('web-coupons', (__webpack_require__(/*! ./components/WebCoupons.vue */ "./resources/js/components/WebCoupons.vue")["default"]));
-/**
- * Next, we will create a fresh Vue application instance and attach it to
- * the page. Then, you may begin adding components to this application
- * or customize the JavaScript scaffolding to fit your unique needs.
- */
-
-var app = new Vue({
- el: '#app'
-});
-
-/***/ }),
-
-/***/ "./resources/js/bootstrap.js":
-/*!***********************************!*\
- !*** ./resources/js/bootstrap.js ***!
- \***********************************/
-/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
-
-window._ = __webpack_require__(/*! lodash */ "./node_modules/lodash/lodash.js");
-/**
- * We'll load jQuery and the Bootstrap jQuery plugin which provides support
- * for JavaScript based Bootstrap features such as modals and tabs. This
- * code may be modified to fit the specific needs of your application.
- */
-
-try {
- window.Popper = (__webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")["default"]);
- window.$ = window.jQuery = __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js");
-
- __webpack_require__(/*! bootstrap */ "./node_modules/bootstrap/dist/js/bootstrap.js");
-} catch (e) {}
-/**
- * We'll load the axios HTTP library which allows us to easily issue requests
- * to our Laravel back-end. This library automatically handles sending the
- * CSRF token as a header based on the value of the "XSRF" token cookie.
- */
-
-
-window.axios = __webpack_require__(/*! axios */ "./node_modules/axios/index.js");
-window.axios.defaults.headers.common = {
- 'X-Requested-With': 'XMLHttpRequest',
- 'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content')
-};
-/**
- * Echo exposes an expressive API for subscribing to channels and listening
- * for events that are broadcast by Laravel. Echo and event broadcasting
- * allows your team to easily build robust real-time web applications.
- */
-// import Echo from 'laravel-echo';
-// window.Pusher = require('pusher-js');
-// window.Echo = new Echo({
-// broadcaster: 'pusher',
-// key: process.env.MIX_PUSHER_APP_KEY,
-// cluster: process.env.MIX_PUSHER_APP_CLUSTER,
-// forceTLS: true
-// });
-
-/***/ }),
-
-/***/ "./node_modules/bootstrap/dist/js/bootstrap.js":
-/*!*****************************************************!*\
- !*** ./node_modules/bootstrap/dist/js/bootstrap.js ***!
- \*****************************************************/
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-/*!
- * Bootstrap v4.6.1 (https://getbootstrap.com/)
- * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- */
-(function (global, factory) {
- true ? factory(exports, __webpack_require__(/*! jquery */ "./node_modules/jquery/dist/jquery.js"), __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js")) :
- 0;
-})(this, (function (exports, $, Popper) { 'use strict';
-
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
-
- var $__default = /*#__PURE__*/_interopDefaultLegacy($);
- var Popper__default = /*#__PURE__*/_interopDefaultLegacy(Popper);
-
- function _defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
- return Constructor;
- }
-
- function _extends() {
- _extends = Object.assign || function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
-
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
-
- return target;
- };
-
- return _extends.apply(this, arguments);
- }
-
- function _inheritsLoose(subClass, superClass) {
- subClass.prototype = Object.create(superClass.prototype);
- subClass.prototype.constructor = subClass;
-
- _setPrototypeOf(subClass, superClass);
- }
-
- function _setPrototypeOf(o, p) {
- _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
- o.__proto__ = p;
- return o;
- };
-
- return _setPrototypeOf(o, p);
- }
-
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v4.6.1): util.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
- /**
- * Private TransitionEnd Helpers
- */
-
- var TRANSITION_END = 'transitionend';
- var MAX_UID = 1000000;
- var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)
-
- function toType(obj) {
- if (obj === null || typeof obj === 'undefined') {
- return "" + obj;
- }
-
- return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase();
- }
-
- function getSpecialTransitionEndEvent() {
- return {
- bindType: TRANSITION_END,
- delegateType: TRANSITION_END,
- handle: function handle(event) {
- if ($__default["default"](event.target).is(this)) {
- return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params
- }
-
- return undefined;
- }
- };
- }
-
- function transitionEndEmulator(duration) {
- var _this = this;
-
- var called = false;
- $__default["default"](this).one(Util.TRANSITION_END, function () {
- called = true;
- });
- setTimeout(function () {
- if (!called) {
- Util.triggerTransitionEnd(_this);
- }
- }, duration);
- return this;
- }
-
- function setTransitionEndSupport() {
- $__default["default"].fn.emulateTransitionEnd = transitionEndEmulator;
- $__default["default"].event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();
- }
- /**
- * Public Util API
- */
-
-
- var Util = {
- TRANSITION_END: 'bsTransitionEnd',
- getUID: function getUID(prefix) {
- do {
- // eslint-disable-next-line no-bitwise
- prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here
- } while (document.getElementById(prefix));
-
- return prefix;
- },
- getSelectorFromElement: function getSelectorFromElement(element) {
- var selector = element.getAttribute('data-target');
-
- if (!selector || selector === '#') {
- var hrefAttr = element.getAttribute('href');
- selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';
- }
-
- try {
- return document.querySelector(selector) ? selector : null;
- } catch (_) {
- return null;
- }
- },
- getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {
- if (!element) {
- return 0;
- } // Get transition-duration of the element
-
-
- var transitionDuration = $__default["default"](element).css('transition-duration');
- var transitionDelay = $__default["default"](element).css('transition-delay');
- var floatTransitionDuration = parseFloat(transitionDuration);
- var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found
-
- if (!floatTransitionDuration && !floatTransitionDelay) {
- return 0;
- } // If multiple durations are defined, take the first
-
-
- transitionDuration = transitionDuration.split(',')[0];
- transitionDelay = transitionDelay.split(',')[0];
- return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;
- },
- reflow: function reflow(element) {
- return element.offsetHeight;
- },
- triggerTransitionEnd: function triggerTransitionEnd(element) {
- $__default["default"](element).trigger(TRANSITION_END);
- },
- supportsTransitionEnd: function supportsTransitionEnd() {
- return Boolean(TRANSITION_END);
- },
- isElement: function isElement(obj) {
- return (obj[0] || obj).nodeType;
- },
- typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {
- for (var property in configTypes) {
- if (Object.prototype.hasOwnProperty.call(configTypes, property)) {
- var expectedTypes = configTypes[property];
- var value = config[property];
- var valueType = value && Util.isElement(value) ? 'element' : toType(value);
-
- if (!new RegExp(expectedTypes).test(valueType)) {
- throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\"."));
- }
- }
- }
- },
- findShadowRoot: function findShadowRoot(element) {
- if (!document.documentElement.attachShadow) {
- return null;
- } // Can find the shadow root otherwise it'll return the document
-
-
- if (typeof element.getRootNode === 'function') {
- var root = element.getRootNode();
- return root instanceof ShadowRoot ? root : null;
- }
-
- if (element instanceof ShadowRoot) {
- return element;
- } // when we don't find a shadow root
-
-
- if (!element.parentNode) {
- return null;
- }
-
- return Util.findShadowRoot(element.parentNode);
- },
- jQueryDetection: function jQueryDetection() {
- if (typeof $__default["default"] === 'undefined') {
- throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.');
- }
-
- var version = $__default["default"].fn.jquery.split(' ')[0].split('.');
- var minMajor = 1;
- var ltMajor = 2;
- var minMinor = 9;
- var minPatch = 1;
- var maxMajor = 4;
-
- if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {
- throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');
- }
- }
- };
- Util.jQueryDetection();
- setTransitionEndSupport();
-
- /**
- * Constants
- */
-
- var NAME$a = 'alert';
- var VERSION$a = '4.6.1';
- var DATA_KEY$a = 'bs.alert';
- var EVENT_KEY$a = "." + DATA_KEY$a;
- var DATA_API_KEY$7 = '.data-api';
- var JQUERY_NO_CONFLICT$a = $__default["default"].fn[NAME$a];
- var CLASS_NAME_ALERT = 'alert';
- var CLASS_NAME_FADE$5 = 'fade';
- var CLASS_NAME_SHOW$7 = 'show';
- var EVENT_CLOSE = "close" + EVENT_KEY$a;
- var EVENT_CLOSED = "closed" + EVENT_KEY$a;
- var EVENT_CLICK_DATA_API$6 = "click" + EVENT_KEY$a + DATA_API_KEY$7;
- var SELECTOR_DISMISS = '[data-dismiss="alert"]';
- /**
- * Class definition
- */
-
- var Alert = /*#__PURE__*/function () {
- function Alert(element) {
- this._element = element;
- } // Getters
-
-
- var _proto = Alert.prototype;
-
- // Public
- _proto.close = function close(element) {
- var rootElement = this._element;
-
- if (element) {
- rootElement = this._getRootElement(element);
- }
-
- var customEvent = this._triggerCloseEvent(rootElement);
-
- if (customEvent.isDefaultPrevented()) {
- return;
- }
-
- this._removeElement(rootElement);
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$a);
- this._element = null;
- } // Private
- ;
-
- _proto._getRootElement = function _getRootElement(element) {
- var selector = Util.getSelectorFromElement(element);
- var parent = false;
-
- if (selector) {
- parent = document.querySelector(selector);
- }
-
- if (!parent) {
- parent = $__default["default"](element).closest("." + CLASS_NAME_ALERT)[0];
- }
-
- return parent;
- };
-
- _proto._triggerCloseEvent = function _triggerCloseEvent(element) {
- var closeEvent = $__default["default"].Event(EVENT_CLOSE);
- $__default["default"](element).trigger(closeEvent);
- return closeEvent;
- };
-
- _proto._removeElement = function _removeElement(element) {
- var _this = this;
-
- $__default["default"](element).removeClass(CLASS_NAME_SHOW$7);
-
- if (!$__default["default"](element).hasClass(CLASS_NAME_FADE$5)) {
- this._destroyElement(element);
-
- return;
- }
-
- var transitionDuration = Util.getTransitionDurationFromElement(element);
- $__default["default"](element).one(Util.TRANSITION_END, function (event) {
- return _this._destroyElement(element, event);
- }).emulateTransitionEnd(transitionDuration);
- };
-
- _proto._destroyElement = function _destroyElement(element) {
- $__default["default"](element).detach().trigger(EVENT_CLOSED).remove();
- } // Static
- ;
-
- Alert._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$a);
-
- if (!data) {
- data = new Alert(this);
- $element.data(DATA_KEY$a, data);
- }
-
- if (config === 'close') {
- data[config](this);
- }
- });
- };
-
- Alert._handleDismiss = function _handleDismiss(alertInstance) {
- return function (event) {
- if (event) {
- event.preventDefault();
- }
-
- alertInstance.close(this);
- };
- };
-
- _createClass(Alert, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$a;
- }
- }]);
-
- return Alert;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_CLICK_DATA_API$6, SELECTOR_DISMISS, Alert._handleDismiss(new Alert()));
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$a] = Alert._jQueryInterface;
- $__default["default"].fn[NAME$a].Constructor = Alert;
-
- $__default["default"].fn[NAME$a].noConflict = function () {
- $__default["default"].fn[NAME$a] = JQUERY_NO_CONFLICT$a;
- return Alert._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$9 = 'button';
- var VERSION$9 = '4.6.1';
- var DATA_KEY$9 = 'bs.button';
- var EVENT_KEY$9 = "." + DATA_KEY$9;
- var DATA_API_KEY$6 = '.data-api';
- var JQUERY_NO_CONFLICT$9 = $__default["default"].fn[NAME$9];
- var CLASS_NAME_ACTIVE$3 = 'active';
- var CLASS_NAME_BUTTON = 'btn';
- var CLASS_NAME_FOCUS = 'focus';
- var EVENT_CLICK_DATA_API$5 = "click" + EVENT_KEY$9 + DATA_API_KEY$6;
- var EVENT_FOCUS_BLUR_DATA_API = "focus" + EVENT_KEY$9 + DATA_API_KEY$6 + " " + ("blur" + EVENT_KEY$9 + DATA_API_KEY$6);
- var EVENT_LOAD_DATA_API$2 = "load" + EVENT_KEY$9 + DATA_API_KEY$6;
- var SELECTOR_DATA_TOGGLE_CARROT = '[data-toggle^="button"]';
- var SELECTOR_DATA_TOGGLES = '[data-toggle="buttons"]';
- var SELECTOR_DATA_TOGGLE$4 = '[data-toggle="button"]';
- var SELECTOR_DATA_TOGGLES_BUTTONS = '[data-toggle="buttons"] .btn';
- var SELECTOR_INPUT = 'input:not([type="hidden"])';
- var SELECTOR_ACTIVE$2 = '.active';
- var SELECTOR_BUTTON = '.btn';
- /**
- * Class definition
- */
-
- var Button = /*#__PURE__*/function () {
- function Button(element) {
- this._element = element;
- this.shouldAvoidTriggerChange = false;
- } // Getters
-
-
- var _proto = Button.prototype;
-
- // Public
- _proto.toggle = function toggle() {
- var triggerChangeEvent = true;
- var addAriaPressed = true;
- var rootElement = $__default["default"](this._element).closest(SELECTOR_DATA_TOGGLES)[0];
-
- if (rootElement) {
- var input = this._element.querySelector(SELECTOR_INPUT);
-
- if (input) {
- if (input.type === 'radio') {
- if (input.checked && this._element.classList.contains(CLASS_NAME_ACTIVE$3)) {
- triggerChangeEvent = false;
- } else {
- var activeElement = rootElement.querySelector(SELECTOR_ACTIVE$2);
-
- if (activeElement) {
- $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$3);
- }
- }
- }
-
- if (triggerChangeEvent) {
- // if it's not a radio button or checkbox don't add a pointless/invalid checked property to the input
- if (input.type === 'checkbox' || input.type === 'radio') {
- input.checked = !this._element.classList.contains(CLASS_NAME_ACTIVE$3);
- }
-
- if (!this.shouldAvoidTriggerChange) {
- $__default["default"](input).trigger('change');
- }
- }
-
- input.focus();
- addAriaPressed = false;
- }
- }
-
- if (!(this._element.hasAttribute('disabled') || this._element.classList.contains('disabled'))) {
- if (addAriaPressed) {
- this._element.setAttribute('aria-pressed', !this._element.classList.contains(CLASS_NAME_ACTIVE$3));
- }
-
- if (triggerChangeEvent) {
- $__default["default"](this._element).toggleClass(CLASS_NAME_ACTIVE$3);
- }
- }
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$9);
- this._element = null;
- } // Static
- ;
-
- Button._jQueryInterface = function _jQueryInterface(config, avoidTriggerChange) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$9);
-
- if (!data) {
- data = new Button(this);
- $element.data(DATA_KEY$9, data);
- }
-
- data.shouldAvoidTriggerChange = avoidTriggerChange;
-
- if (config === 'toggle') {
- data[config]();
- }
- });
- };
-
- _createClass(Button, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$9;
- }
- }]);
-
- return Button;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_CLICK_DATA_API$5, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
- var button = event.target;
- var initialButton = button;
-
- if (!$__default["default"](button).hasClass(CLASS_NAME_BUTTON)) {
- button = $__default["default"](button).closest(SELECTOR_BUTTON)[0];
- }
-
- if (!button || button.hasAttribute('disabled') || button.classList.contains('disabled')) {
- event.preventDefault(); // work around Firefox bug #1540995
- } else {
- var inputBtn = button.querySelector(SELECTOR_INPUT);
-
- if (inputBtn && (inputBtn.hasAttribute('disabled') || inputBtn.classList.contains('disabled'))) {
- event.preventDefault(); // work around Firefox bug #1540995
-
- return;
- }
-
- if (initialButton.tagName === 'INPUT' || button.tagName !== 'LABEL') {
- Button._jQueryInterface.call($__default["default"](button), 'toggle', initialButton.tagName === 'INPUT');
- }
- }
- }).on(EVENT_FOCUS_BLUR_DATA_API, SELECTOR_DATA_TOGGLE_CARROT, function (event) {
- var button = $__default["default"](event.target).closest(SELECTOR_BUTTON)[0];
- $__default["default"](button).toggleClass(CLASS_NAME_FOCUS, /^focus(in)?$/.test(event.type));
- });
- $__default["default"](window).on(EVENT_LOAD_DATA_API$2, function () {
- // ensure correct active class is set to match the controls' actual values/states
- // find all checkboxes/readio buttons inside data-toggle groups
- var buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLES_BUTTONS));
-
- for (var i = 0, len = buttons.length; i < len; i++) {
- var button = buttons[i];
- var input = button.querySelector(SELECTOR_INPUT);
-
- if (input.checked || input.hasAttribute('checked')) {
- button.classList.add(CLASS_NAME_ACTIVE$3);
- } else {
- button.classList.remove(CLASS_NAME_ACTIVE$3);
- }
- } // find all button toggles
-
-
- buttons = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$4));
-
- for (var _i = 0, _len = buttons.length; _i < _len; _i++) {
- var _button = buttons[_i];
-
- if (_button.getAttribute('aria-pressed') === 'true') {
- _button.classList.add(CLASS_NAME_ACTIVE$3);
- } else {
- _button.classList.remove(CLASS_NAME_ACTIVE$3);
- }
- }
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$9] = Button._jQueryInterface;
- $__default["default"].fn[NAME$9].Constructor = Button;
-
- $__default["default"].fn[NAME$9].noConflict = function () {
- $__default["default"].fn[NAME$9] = JQUERY_NO_CONFLICT$9;
- return Button._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$8 = 'carousel';
- var VERSION$8 = '4.6.1';
- var DATA_KEY$8 = 'bs.carousel';
- var EVENT_KEY$8 = "." + DATA_KEY$8;
- var DATA_API_KEY$5 = '.data-api';
- var JQUERY_NO_CONFLICT$8 = $__default["default"].fn[NAME$8];
- var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key
-
- var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key
-
- var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch
-
- var SWIPE_THRESHOLD = 40;
- var CLASS_NAME_CAROUSEL = 'carousel';
- var CLASS_NAME_ACTIVE$2 = 'active';
- var CLASS_NAME_SLIDE = 'slide';
- var CLASS_NAME_RIGHT = 'carousel-item-right';
- var CLASS_NAME_LEFT = 'carousel-item-left';
- var CLASS_NAME_NEXT = 'carousel-item-next';
- var CLASS_NAME_PREV = 'carousel-item-prev';
- var CLASS_NAME_POINTER_EVENT = 'pointer-event';
- var DIRECTION_NEXT = 'next';
- var DIRECTION_PREV = 'prev';
- var DIRECTION_LEFT = 'left';
- var DIRECTION_RIGHT = 'right';
- var EVENT_SLIDE = "slide" + EVENT_KEY$8;
- var EVENT_SLID = "slid" + EVENT_KEY$8;
- var EVENT_KEYDOWN = "keydown" + EVENT_KEY$8;
- var EVENT_MOUSEENTER = "mouseenter" + EVENT_KEY$8;
- var EVENT_MOUSELEAVE = "mouseleave" + EVENT_KEY$8;
- var EVENT_TOUCHSTART = "touchstart" + EVENT_KEY$8;
- var EVENT_TOUCHMOVE = "touchmove" + EVENT_KEY$8;
- var EVENT_TOUCHEND = "touchend" + EVENT_KEY$8;
- var EVENT_POINTERDOWN = "pointerdown" + EVENT_KEY$8;
- var EVENT_POINTERUP = "pointerup" + EVENT_KEY$8;
- var EVENT_DRAG_START = "dragstart" + EVENT_KEY$8;
- var EVENT_LOAD_DATA_API$1 = "load" + EVENT_KEY$8 + DATA_API_KEY$5;
- var EVENT_CLICK_DATA_API$4 = "click" + EVENT_KEY$8 + DATA_API_KEY$5;
- var SELECTOR_ACTIVE$1 = '.active';
- var SELECTOR_ACTIVE_ITEM = '.active.carousel-item';
- var SELECTOR_ITEM = '.carousel-item';
- var SELECTOR_ITEM_IMG = '.carousel-item img';
- var SELECTOR_NEXT_PREV = '.carousel-item-next, .carousel-item-prev';
- var SELECTOR_INDICATORS = '.carousel-indicators';
- var SELECTOR_DATA_SLIDE = '[data-slide], [data-slide-to]';
- var SELECTOR_DATA_RIDE = '[data-ride="carousel"]';
- var Default$7 = {
- interval: 5000,
- keyboard: true,
- slide: false,
- pause: 'hover',
- wrap: true,
- touch: true
- };
- var DefaultType$7 = {
- interval: '(number|boolean)',
- keyboard: 'boolean',
- slide: '(boolean|string)',
- pause: '(string|boolean)',
- wrap: 'boolean',
- touch: 'boolean'
- };
- var PointerType = {
- TOUCH: 'touch',
- PEN: 'pen'
- };
- /**
- * Class definition
- */
-
- var Carousel = /*#__PURE__*/function () {
- function Carousel(element, config) {
- this._items = null;
- this._interval = null;
- this._activeElement = null;
- this._isPaused = false;
- this._isSliding = false;
- this.touchTimeout = null;
- this.touchStartX = 0;
- this.touchDeltaX = 0;
- this._config = this._getConfig(config);
- this._element = element;
- this._indicatorsElement = this._element.querySelector(SELECTOR_INDICATORS);
- this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;
- this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);
-
- this._addEventListeners();
- } // Getters
-
-
- var _proto = Carousel.prototype;
-
- // Public
- _proto.next = function next() {
- if (!this._isSliding) {
- this._slide(DIRECTION_NEXT);
- }
- };
-
- _proto.nextWhenVisible = function nextWhenVisible() {
- var $element = $__default["default"](this._element); // Don't call next when the page isn't visible
- // or the carousel or its parent isn't visible
-
- if (!document.hidden && $element.is(':visible') && $element.css('visibility') !== 'hidden') {
- this.next();
- }
- };
-
- _proto.prev = function prev() {
- if (!this._isSliding) {
- this._slide(DIRECTION_PREV);
- }
- };
-
- _proto.pause = function pause(event) {
- if (!event) {
- this._isPaused = true;
- }
-
- if (this._element.querySelector(SELECTOR_NEXT_PREV)) {
- Util.triggerTransitionEnd(this._element);
- this.cycle(true);
- }
-
- clearInterval(this._interval);
- this._interval = null;
- };
-
- _proto.cycle = function cycle(event) {
- if (!event) {
- this._isPaused = false;
- }
-
- if (this._interval) {
- clearInterval(this._interval);
- this._interval = null;
- }
-
- if (this._config.interval && !this._isPaused) {
- this._updateInterval();
-
- this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);
- }
- };
-
- _proto.to = function to(index) {
- var _this = this;
-
- this._activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-
- var activeIndex = this._getItemIndex(this._activeElement);
-
- if (index > this._items.length - 1 || index < 0) {
- return;
- }
-
- if (this._isSliding) {
- $__default["default"](this._element).one(EVENT_SLID, function () {
- return _this.to(index);
- });
- return;
- }
-
- if (activeIndex === index) {
- this.pause();
- this.cycle();
- return;
- }
-
- var direction = index > activeIndex ? DIRECTION_NEXT : DIRECTION_PREV;
-
- this._slide(direction, this._items[index]);
- };
-
- _proto.dispose = function dispose() {
- $__default["default"](this._element).off(EVENT_KEY$8);
- $__default["default"].removeData(this._element, DATA_KEY$8);
- this._items = null;
- this._config = null;
- this._element = null;
- this._interval = null;
- this._isPaused = null;
- this._isSliding = null;
- this._activeElement = null;
- this._indicatorsElement = null;
- } // Private
- ;
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default$7, config);
- Util.typeCheckConfig(NAME$8, config, DefaultType$7);
- return config;
- };
-
- _proto._handleSwipe = function _handleSwipe() {
- var absDeltax = Math.abs(this.touchDeltaX);
-
- if (absDeltax <= SWIPE_THRESHOLD) {
- return;
- }
-
- var direction = absDeltax / this.touchDeltaX;
- this.touchDeltaX = 0; // swipe left
-
- if (direction > 0) {
- this.prev();
- } // swipe right
-
-
- if (direction < 0) {
- this.next();
- }
- };
-
- _proto._addEventListeners = function _addEventListeners() {
- var _this2 = this;
-
- if (this._config.keyboard) {
- $__default["default"](this._element).on(EVENT_KEYDOWN, function (event) {
- return _this2._keydown(event);
- });
- }
-
- if (this._config.pause === 'hover') {
- $__default["default"](this._element).on(EVENT_MOUSEENTER, function (event) {
- return _this2.pause(event);
- }).on(EVENT_MOUSELEAVE, function (event) {
- return _this2.cycle(event);
- });
- }
-
- if (this._config.touch) {
- this._addTouchEventListeners();
- }
- };
-
- _proto._addTouchEventListeners = function _addTouchEventListeners() {
- var _this3 = this;
-
- if (!this._touchSupported) {
- return;
- }
-
- var start = function start(event) {
- if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
- _this3.touchStartX = event.originalEvent.clientX;
- } else if (!_this3._pointerEvent) {
- _this3.touchStartX = event.originalEvent.touches[0].clientX;
- }
- };
-
- var move = function move(event) {
- // ensure swiping with one touch and not pinching
- _this3.touchDeltaX = event.originalEvent.touches && event.originalEvent.touches.length > 1 ? 0 : event.originalEvent.touches[0].clientX - _this3.touchStartX;
- };
-
- var end = function end(event) {
- if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {
- _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;
- }
-
- _this3._handleSwipe();
-
- if (_this3._config.pause === 'hover') {
- // If it's a touch-enabled device, mouseenter/leave are fired as
- // part of the mouse compatibility events on first tap - the carousel
- // would stop cycling until user tapped out of it;
- // here, we listen for touchend, explicitly pause the carousel
- // (as if it's the second time we tap on it, mouseenter compat event
- // is NOT fired) and after a timeout (to allow for mouse compatibility
- // events to fire) we explicitly restart cycling
- _this3.pause();
-
- if (_this3.touchTimeout) {
- clearTimeout(_this3.touchTimeout);
- }
-
- _this3.touchTimeout = setTimeout(function (event) {
- return _this3.cycle(event);
- }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);
- }
- };
-
- $__default["default"](this._element.querySelectorAll(SELECTOR_ITEM_IMG)).on(EVENT_DRAG_START, function (e) {
- return e.preventDefault();
- });
-
- if (this._pointerEvent) {
- $__default["default"](this._element).on(EVENT_POINTERDOWN, function (event) {
- return start(event);
- });
- $__default["default"](this._element).on(EVENT_POINTERUP, function (event) {
- return end(event);
- });
-
- this._element.classList.add(CLASS_NAME_POINTER_EVENT);
- } else {
- $__default["default"](this._element).on(EVENT_TOUCHSTART, function (event) {
- return start(event);
- });
- $__default["default"](this._element).on(EVENT_TOUCHMOVE, function (event) {
- return move(event);
- });
- $__default["default"](this._element).on(EVENT_TOUCHEND, function (event) {
- return end(event);
- });
- }
- };
-
- _proto._keydown = function _keydown(event) {
- if (/input|textarea/i.test(event.target.tagName)) {
- return;
- }
-
- switch (event.which) {
- case ARROW_LEFT_KEYCODE:
- event.preventDefault();
- this.prev();
- break;
-
- case ARROW_RIGHT_KEYCODE:
- event.preventDefault();
- this.next();
- break;
- }
- };
-
- _proto._getItemIndex = function _getItemIndex(element) {
- this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(SELECTOR_ITEM)) : [];
- return this._items.indexOf(element);
- };
-
- _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {
- var isNextDirection = direction === DIRECTION_NEXT;
- var isPrevDirection = direction === DIRECTION_PREV;
-
- var activeIndex = this._getItemIndex(activeElement);
-
- var lastItemIndex = this._items.length - 1;
- var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;
-
- if (isGoingToWrap && !this._config.wrap) {
- return activeElement;
- }
-
- var delta = direction === DIRECTION_PREV ? -1 : 1;
- var itemIndex = (activeIndex + delta) % this._items.length;
- return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];
- };
-
- _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {
- var targetIndex = this._getItemIndex(relatedTarget);
-
- var fromIndex = this._getItemIndex(this._element.querySelector(SELECTOR_ACTIVE_ITEM));
-
- var slideEvent = $__default["default"].Event(EVENT_SLIDE, {
- relatedTarget: relatedTarget,
- direction: eventDirectionName,
- from: fromIndex,
- to: targetIndex
- });
- $__default["default"](this._element).trigger(slideEvent);
- return slideEvent;
- };
-
- _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {
- if (this._indicatorsElement) {
- var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(SELECTOR_ACTIVE$1));
- $__default["default"](indicators).removeClass(CLASS_NAME_ACTIVE$2);
-
- var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];
-
- if (nextIndicator) {
- $__default["default"](nextIndicator).addClass(CLASS_NAME_ACTIVE$2);
- }
- }
- };
-
- _proto._updateInterval = function _updateInterval() {
- var element = this._activeElement || this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-
- if (!element) {
- return;
- }
-
- var elementInterval = parseInt(element.getAttribute('data-interval'), 10);
-
- if (elementInterval) {
- this._config.defaultInterval = this._config.defaultInterval || this._config.interval;
- this._config.interval = elementInterval;
- } else {
- this._config.interval = this._config.defaultInterval || this._config.interval;
- }
- };
-
- _proto._slide = function _slide(direction, element) {
- var _this4 = this;
-
- var activeElement = this._element.querySelector(SELECTOR_ACTIVE_ITEM);
-
- var activeElementIndex = this._getItemIndex(activeElement);
-
- var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);
-
- var nextElementIndex = this._getItemIndex(nextElement);
-
- var isCycling = Boolean(this._interval);
- var directionalClassName;
- var orderClassName;
- var eventDirectionName;
-
- if (direction === DIRECTION_NEXT) {
- directionalClassName = CLASS_NAME_LEFT;
- orderClassName = CLASS_NAME_NEXT;
- eventDirectionName = DIRECTION_LEFT;
- } else {
- directionalClassName = CLASS_NAME_RIGHT;
- orderClassName = CLASS_NAME_PREV;
- eventDirectionName = DIRECTION_RIGHT;
- }
-
- if (nextElement && $__default["default"](nextElement).hasClass(CLASS_NAME_ACTIVE$2)) {
- this._isSliding = false;
- return;
- }
-
- var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);
-
- if (slideEvent.isDefaultPrevented()) {
- return;
- }
-
- if (!activeElement || !nextElement) {
- // Some weirdness is happening, so we bail
- return;
- }
-
- this._isSliding = true;
-
- if (isCycling) {
- this.pause();
- }
-
- this._setActiveIndicatorElement(nextElement);
-
- this._activeElement = nextElement;
- var slidEvent = $__default["default"].Event(EVENT_SLID, {
- relatedTarget: nextElement,
- direction: eventDirectionName,
- from: activeElementIndex,
- to: nextElementIndex
- });
-
- if ($__default["default"](this._element).hasClass(CLASS_NAME_SLIDE)) {
- $__default["default"](nextElement).addClass(orderClassName);
- Util.reflow(nextElement);
- $__default["default"](activeElement).addClass(directionalClassName);
- $__default["default"](nextElement).addClass(directionalClassName);
- var transitionDuration = Util.getTransitionDurationFromElement(activeElement);
- $__default["default"](activeElement).one(Util.TRANSITION_END, function () {
- $__default["default"](nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(CLASS_NAME_ACTIVE$2);
- $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2 + " " + orderClassName + " " + directionalClassName);
- _this4._isSliding = false;
- setTimeout(function () {
- return $__default["default"](_this4._element).trigger(slidEvent);
- }, 0);
- }).emulateTransitionEnd(transitionDuration);
- } else {
- $__default["default"](activeElement).removeClass(CLASS_NAME_ACTIVE$2);
- $__default["default"](nextElement).addClass(CLASS_NAME_ACTIVE$2);
- this._isSliding = false;
- $__default["default"](this._element).trigger(slidEvent);
- }
-
- if (isCycling) {
- this.cycle();
- }
- } // Static
- ;
-
- Carousel._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$8);
-
- var _config = _extends({}, Default$7, $__default["default"](this).data());
-
- if (typeof config === 'object') {
- _config = _extends({}, _config, config);
- }
-
- var action = typeof config === 'string' ? config : _config.slide;
-
- if (!data) {
- data = new Carousel(this, _config);
- $__default["default"](this).data(DATA_KEY$8, data);
- }
-
- if (typeof config === 'number') {
- data.to(config);
- } else if (typeof action === 'string') {
- if (typeof data[action] === 'undefined') {
- throw new TypeError("No method named \"" + action + "\"");
- }
-
- data[action]();
- } else if (_config.interval && _config.ride) {
- data.pause();
- data.cycle();
- }
- });
- };
-
- Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {
- var selector = Util.getSelectorFromElement(this);
-
- if (!selector) {
- return;
- }
-
- var target = $__default["default"](selector)[0];
-
- if (!target || !$__default["default"](target).hasClass(CLASS_NAME_CAROUSEL)) {
- return;
- }
-
- var config = _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
-
- var slideIndex = this.getAttribute('data-slide-to');
-
- if (slideIndex) {
- config.interval = false;
- }
-
- Carousel._jQueryInterface.call($__default["default"](target), config);
-
- if (slideIndex) {
- $__default["default"](target).data(DATA_KEY$8).to(slideIndex);
- }
-
- event.preventDefault();
- };
-
- _createClass(Carousel, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$8;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$7;
- }
- }]);
-
- return Carousel;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_CLICK_DATA_API$4, SELECTOR_DATA_SLIDE, Carousel._dataApiClickHandler);
- $__default["default"](window).on(EVENT_LOAD_DATA_API$1, function () {
- var carousels = [].slice.call(document.querySelectorAll(SELECTOR_DATA_RIDE));
-
- for (var i = 0, len = carousels.length; i < len; i++) {
- var $carousel = $__default["default"](carousels[i]);
-
- Carousel._jQueryInterface.call($carousel, $carousel.data());
- }
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$8] = Carousel._jQueryInterface;
- $__default["default"].fn[NAME$8].Constructor = Carousel;
-
- $__default["default"].fn[NAME$8].noConflict = function () {
- $__default["default"].fn[NAME$8] = JQUERY_NO_CONFLICT$8;
- return Carousel._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$7 = 'collapse';
- var VERSION$7 = '4.6.1';
- var DATA_KEY$7 = 'bs.collapse';
- var EVENT_KEY$7 = "." + DATA_KEY$7;
- var DATA_API_KEY$4 = '.data-api';
- var JQUERY_NO_CONFLICT$7 = $__default["default"].fn[NAME$7];
- var CLASS_NAME_SHOW$6 = 'show';
- var CLASS_NAME_COLLAPSE = 'collapse';
- var CLASS_NAME_COLLAPSING = 'collapsing';
- var CLASS_NAME_COLLAPSED = 'collapsed';
- var DIMENSION_WIDTH = 'width';
- var DIMENSION_HEIGHT = 'height';
- var EVENT_SHOW$4 = "show" + EVENT_KEY$7;
- var EVENT_SHOWN$4 = "shown" + EVENT_KEY$7;
- var EVENT_HIDE$4 = "hide" + EVENT_KEY$7;
- var EVENT_HIDDEN$4 = "hidden" + EVENT_KEY$7;
- var EVENT_CLICK_DATA_API$3 = "click" + EVENT_KEY$7 + DATA_API_KEY$4;
- var SELECTOR_ACTIVES = '.show, .collapsing';
- var SELECTOR_DATA_TOGGLE$3 = '[data-toggle="collapse"]';
- var Default$6 = {
- toggle: true,
- parent: ''
- };
- var DefaultType$6 = {
- toggle: 'boolean',
- parent: '(string|element)'
- };
- /**
- * Class definition
- */
-
- var Collapse = /*#__PURE__*/function () {
- function Collapse(element, config) {
- this._isTransitioning = false;
- this._element = element;
- this._config = this._getConfig(config);
- this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]")));
- var toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$3));
-
- for (var i = 0, len = toggleList.length; i < len; i++) {
- var elem = toggleList[i];
- var selector = Util.getSelectorFromElement(elem);
- var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {
- return foundElem === element;
- });
-
- if (selector !== null && filterElement.length > 0) {
- this._selector = selector;
-
- this._triggerArray.push(elem);
- }
- }
-
- this._parent = this._config.parent ? this._getParent() : null;
-
- if (!this._config.parent) {
- this._addAriaAndCollapsedClass(this._element, this._triggerArray);
- }
-
- if (this._config.toggle) {
- this.toggle();
- }
- } // Getters
-
-
- var _proto = Collapse.prototype;
-
- // Public
- _proto.toggle = function toggle() {
- if ($__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
- this.hide();
- } else {
- this.show();
- }
- };
-
- _proto.show = function show() {
- var _this = this;
-
- if (this._isTransitioning || $__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
- return;
- }
-
- var actives;
- var activesData;
-
- if (this._parent) {
- actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)).filter(function (elem) {
- if (typeof _this._config.parent === 'string') {
- return elem.getAttribute('data-parent') === _this._config.parent;
- }
-
- return elem.classList.contains(CLASS_NAME_COLLAPSE);
- });
-
- if (actives.length === 0) {
- actives = null;
- }
- }
-
- if (actives) {
- activesData = $__default["default"](actives).not(this._selector).data(DATA_KEY$7);
-
- if (activesData && activesData._isTransitioning) {
- return;
- }
- }
-
- var startEvent = $__default["default"].Event(EVENT_SHOW$4);
- $__default["default"](this._element).trigger(startEvent);
-
- if (startEvent.isDefaultPrevented()) {
- return;
- }
-
- if (actives) {
- Collapse._jQueryInterface.call($__default["default"](actives).not(this._selector), 'hide');
-
- if (!activesData) {
- $__default["default"](actives).data(DATA_KEY$7, null);
- }
- }
-
- var dimension = this._getDimension();
-
- $__default["default"](this._element).removeClass(CLASS_NAME_COLLAPSE).addClass(CLASS_NAME_COLLAPSING);
- this._element.style[dimension] = 0;
-
- if (this._triggerArray.length) {
- $__default["default"](this._triggerArray).removeClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', true);
- }
-
- this.setTransitioning(true);
-
- var complete = function complete() {
- $__default["default"](_this._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
- _this._element.style[dimension] = '';
-
- _this.setTransitioning(false);
-
- $__default["default"](_this._element).trigger(EVENT_SHOWN$4);
- };
-
- var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);
- var scrollSize = "scroll" + capitalizedDimension;
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
- $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- this._element.style[dimension] = this._element[scrollSize] + "px";
- };
-
- _proto.hide = function hide() {
- var _this2 = this;
-
- if (this._isTransitioning || !$__default["default"](this._element).hasClass(CLASS_NAME_SHOW$6)) {
- return;
- }
-
- var startEvent = $__default["default"].Event(EVENT_HIDE$4);
- $__default["default"](this._element).trigger(startEvent);
-
- if (startEvent.isDefaultPrevented()) {
- return;
- }
-
- var dimension = this._getDimension();
-
- this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px";
- Util.reflow(this._element);
- $__default["default"](this._element).addClass(CLASS_NAME_COLLAPSING).removeClass(CLASS_NAME_COLLAPSE + " " + CLASS_NAME_SHOW$6);
- var triggerArrayLength = this._triggerArray.length;
-
- if (triggerArrayLength > 0) {
- for (var i = 0; i < triggerArrayLength; i++) {
- var trigger = this._triggerArray[i];
- var selector = Util.getSelectorFromElement(trigger);
-
- if (selector !== null) {
- var $elem = $__default["default"]([].slice.call(document.querySelectorAll(selector)));
-
- if (!$elem.hasClass(CLASS_NAME_SHOW$6)) {
- $__default["default"](trigger).addClass(CLASS_NAME_COLLAPSED).attr('aria-expanded', false);
- }
- }
- }
- }
-
- this.setTransitioning(true);
-
- var complete = function complete() {
- _this2.setTransitioning(false);
-
- $__default["default"](_this2._element).removeClass(CLASS_NAME_COLLAPSING).addClass(CLASS_NAME_COLLAPSE).trigger(EVENT_HIDDEN$4);
- };
-
- this._element.style[dimension] = '';
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
- $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- };
-
- _proto.setTransitioning = function setTransitioning(isTransitioning) {
- this._isTransitioning = isTransitioning;
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$7);
- this._config = null;
- this._parent = null;
- this._element = null;
- this._triggerArray = null;
- this._isTransitioning = null;
- } // Private
- ;
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default$6, config);
- config.toggle = Boolean(config.toggle); // Coerce string values
-
- Util.typeCheckConfig(NAME$7, config, DefaultType$6);
- return config;
- };
-
- _proto._getDimension = function _getDimension() {
- var hasWidth = $__default["default"](this._element).hasClass(DIMENSION_WIDTH);
- return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT;
- };
-
- _proto._getParent = function _getParent() {
- var _this3 = this;
-
- var parent;
-
- if (Util.isElement(this._config.parent)) {
- parent = this._config.parent; // It's a jQuery object
-
- if (typeof this._config.parent.jquery !== 'undefined') {
- parent = this._config.parent[0];
- }
- } else {
- parent = document.querySelector(this._config.parent);
- }
-
- var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]";
- var children = [].slice.call(parent.querySelectorAll(selector));
- $__default["default"](children).each(function (i, element) {
- _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);
- });
- return parent;
- };
-
- _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {
- var isOpen = $__default["default"](element).hasClass(CLASS_NAME_SHOW$6);
-
- if (triggerArray.length) {
- $__default["default"](triggerArray).toggleClass(CLASS_NAME_COLLAPSED, !isOpen).attr('aria-expanded', isOpen);
- }
- } // Static
- ;
-
- Collapse._getTargetFromElement = function _getTargetFromElement(element) {
- var selector = Util.getSelectorFromElement(element);
- return selector ? document.querySelector(selector) : null;
- };
-
- Collapse._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$7);
-
- var _config = _extends({}, Default$6, $element.data(), typeof config === 'object' && config ? config : {});
-
- if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) {
- _config.toggle = false;
- }
-
- if (!data) {
- data = new Collapse(this, _config);
- $element.data(DATA_KEY$7, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Collapse, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$7;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$6;
- }
- }]);
-
- return Collapse;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) {
- // preventDefault only for elements (which change the URL) not inside the collapsible element
- if (event.currentTarget.tagName === 'A') {
- event.preventDefault();
- }
-
- var $trigger = $__default["default"](this);
- var selector = Util.getSelectorFromElement(this);
- var selectors = [].slice.call(document.querySelectorAll(selector));
- $__default["default"](selectors).each(function () {
- var $target = $__default["default"](this);
- var data = $target.data(DATA_KEY$7);
- var config = data ? 'toggle' : $trigger.data();
-
- Collapse._jQueryInterface.call($target, config);
- });
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$7] = Collapse._jQueryInterface;
- $__default["default"].fn[NAME$7].Constructor = Collapse;
-
- $__default["default"].fn[NAME$7].noConflict = function () {
- $__default["default"].fn[NAME$7] = JQUERY_NO_CONFLICT$7;
- return Collapse._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$6 = 'dropdown';
- var VERSION$6 = '4.6.1';
- var DATA_KEY$6 = 'bs.dropdown';
- var EVENT_KEY$6 = "." + DATA_KEY$6;
- var DATA_API_KEY$3 = '.data-api';
- var JQUERY_NO_CONFLICT$6 = $__default["default"].fn[NAME$6];
- var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key
-
- var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key
-
- var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key
-
- var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key
-
- var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key
-
- var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)
-
- var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE$1);
- var CLASS_NAME_DISABLED$1 = 'disabled';
- var CLASS_NAME_SHOW$5 = 'show';
- var CLASS_NAME_DROPUP = 'dropup';
- var CLASS_NAME_DROPRIGHT = 'dropright';
- var CLASS_NAME_DROPLEFT = 'dropleft';
- var CLASS_NAME_MENURIGHT = 'dropdown-menu-right';
- var CLASS_NAME_POSITION_STATIC = 'position-static';
- var EVENT_HIDE$3 = "hide" + EVENT_KEY$6;
- var EVENT_HIDDEN$3 = "hidden" + EVENT_KEY$6;
- var EVENT_SHOW$3 = "show" + EVENT_KEY$6;
- var EVENT_SHOWN$3 = "shown" + EVENT_KEY$6;
- var EVENT_CLICK = "click" + EVENT_KEY$6;
- var EVENT_CLICK_DATA_API$2 = "click" + EVENT_KEY$6 + DATA_API_KEY$3;
- var EVENT_KEYDOWN_DATA_API = "keydown" + EVENT_KEY$6 + DATA_API_KEY$3;
- var EVENT_KEYUP_DATA_API = "keyup" + EVENT_KEY$6 + DATA_API_KEY$3;
- var SELECTOR_DATA_TOGGLE$2 = '[data-toggle="dropdown"]';
- var SELECTOR_FORM_CHILD = '.dropdown form';
- var SELECTOR_MENU = '.dropdown-menu';
- var SELECTOR_NAVBAR_NAV = '.navbar-nav';
- var SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)';
- var PLACEMENT_TOP = 'top-start';
- var PLACEMENT_TOPEND = 'top-end';
- var PLACEMENT_BOTTOM = 'bottom-start';
- var PLACEMENT_BOTTOMEND = 'bottom-end';
- var PLACEMENT_RIGHT = 'right-start';
- var PLACEMENT_LEFT = 'left-start';
- var Default$5 = {
- offset: 0,
- flip: true,
- boundary: 'scrollParent',
- reference: 'toggle',
- display: 'dynamic',
- popperConfig: null
- };
- var DefaultType$5 = {
- offset: '(number|string|function)',
- flip: 'boolean',
- boundary: '(string|element)',
- reference: '(string|element)',
- display: 'string',
- popperConfig: '(null|object)'
- };
- /**
- * Class definition
- */
-
- var Dropdown = /*#__PURE__*/function () {
- function Dropdown(element, config) {
- this._element = element;
- this._popper = null;
- this._config = this._getConfig(config);
- this._menu = this._getMenuElement();
- this._inNavbar = this._detectNavbar();
-
- this._addEventListeners();
- } // Getters
-
-
- var _proto = Dropdown.prototype;
-
- // Public
- _proto.toggle = function toggle() {
- if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1)) {
- return;
- }
-
- var isActive = $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5);
-
- Dropdown._clearMenus();
-
- if (isActive) {
- return;
- }
-
- this.show(true);
- };
-
- _proto.show = function show(usePopper) {
- if (usePopper === void 0) {
- usePopper = false;
- }
-
- if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || $__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
- return;
- }
-
- var relatedTarget = {
- relatedTarget: this._element
- };
- var showEvent = $__default["default"].Event(EVENT_SHOW$3, relatedTarget);
-
- var parent = Dropdown._getParentFromElement(this._element);
-
- $__default["default"](parent).trigger(showEvent);
-
- if (showEvent.isDefaultPrevented()) {
- return;
- } // Totally disable Popper for Dropdowns in Navbar
-
-
- if (!this._inNavbar && usePopper) {
- // Check for Popper dependency
- if (typeof Popper__default["default"] === 'undefined') {
- throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)');
- }
-
- var referenceElement = this._element;
-
- if (this._config.reference === 'parent') {
- referenceElement = parent;
- } else if (Util.isElement(this._config.reference)) {
- referenceElement = this._config.reference; // Check if it's jQuery element
-
- if (typeof this._config.reference.jquery !== 'undefined') {
- referenceElement = this._config.reference[0];
- }
- } // If boundary is not `scrollParent`, then set position to `static`
- // to allow the menu to "escape" the scroll parent's boundaries
- // https://github.com/twbs/bootstrap/issues/24251
-
-
- if (this._config.boundary !== 'scrollParent') {
- $__default["default"](parent).addClass(CLASS_NAME_POSITION_STATIC);
- }
-
- this._popper = new Popper__default["default"](referenceElement, this._menu, this._getPopperConfig());
- } // If this is a touch-enabled device we add extra
- // empty mouseover listeners to the body's immediate children;
- // only needed because of broken event delegation on iOS
- // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
-
- if ('ontouchstart' in document.documentElement && $__default["default"](parent).closest(SELECTOR_NAVBAR_NAV).length === 0) {
- $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
- }
-
- this._element.focus();
-
- this._element.setAttribute('aria-expanded', true);
-
- $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
- $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_SHOWN$3, relatedTarget));
- };
-
- _proto.hide = function hide() {
- if (this._element.disabled || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED$1) || !$__default["default"](this._menu).hasClass(CLASS_NAME_SHOW$5)) {
- return;
- }
-
- var relatedTarget = {
- relatedTarget: this._element
- };
- var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
-
- var parent = Dropdown._getParentFromElement(this._element);
-
- $__default["default"](parent).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- return;
- }
-
- if (this._popper) {
- this._popper.destroy();
- }
-
- $__default["default"](this._menu).toggleClass(CLASS_NAME_SHOW$5);
- $__default["default"](parent).toggleClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$6);
- $__default["default"](this._element).off(EVENT_KEY$6);
- this._element = null;
- this._menu = null;
-
- if (this._popper !== null) {
- this._popper.destroy();
-
- this._popper = null;
- }
- };
-
- _proto.update = function update() {
- this._inNavbar = this._detectNavbar();
-
- if (this._popper !== null) {
- this._popper.scheduleUpdate();
- }
- } // Private
- ;
-
- _proto._addEventListeners = function _addEventListeners() {
- var _this = this;
-
- $__default["default"](this._element).on(EVENT_CLICK, function (event) {
- event.preventDefault();
- event.stopPropagation();
-
- _this.toggle();
- });
- };
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, this.constructor.Default, $__default["default"](this._element).data(), config);
- Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);
- return config;
- };
-
- _proto._getMenuElement = function _getMenuElement() {
- if (!this._menu) {
- var parent = Dropdown._getParentFromElement(this._element);
-
- if (parent) {
- this._menu = parent.querySelector(SELECTOR_MENU);
- }
- }
-
- return this._menu;
- };
-
- _proto._getPlacement = function _getPlacement() {
- var $parentDropdown = $__default["default"](this._element.parentNode);
- var placement = PLACEMENT_BOTTOM; // Handle dropup
-
- if ($parentDropdown.hasClass(CLASS_NAME_DROPUP)) {
- placement = $__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT) ? PLACEMENT_TOPEND : PLACEMENT_TOP;
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPRIGHT)) {
- placement = PLACEMENT_RIGHT;
- } else if ($parentDropdown.hasClass(CLASS_NAME_DROPLEFT)) {
- placement = PLACEMENT_LEFT;
- } else if ($__default["default"](this._menu).hasClass(CLASS_NAME_MENURIGHT)) {
- placement = PLACEMENT_BOTTOMEND;
- }
-
- return placement;
- };
-
- _proto._detectNavbar = function _detectNavbar() {
- return $__default["default"](this._element).closest('.navbar').length > 0;
- };
-
- _proto._getOffset = function _getOffset() {
- var _this2 = this;
-
- var offset = {};
-
- if (typeof this._config.offset === 'function') {
- offset.fn = function (data) {
- data.offsets = _extends({}, data.offsets, _this2._config.offset(data.offsets, _this2._element));
- return data;
- };
- } else {
- offset.offset = this._config.offset;
- }
-
- return offset;
- };
-
- _proto._getPopperConfig = function _getPopperConfig() {
- var popperConfig = {
- placement: this._getPlacement(),
- modifiers: {
- offset: this._getOffset(),
- flip: {
- enabled: this._config.flip
- },
- preventOverflow: {
- boundariesElement: this._config.boundary
- }
- }
- }; // Disable Popper if we have a static display
-
- if (this._config.display === 'static') {
- popperConfig.modifiers.applyStyle = {
- enabled: false
- };
- }
-
- return _extends({}, popperConfig, this._config.popperConfig);
- } // Static
- ;
-
- Dropdown._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$6);
-
- var _config = typeof config === 'object' ? config : null;
-
- if (!data) {
- data = new Dropdown(this, _config);
- $__default["default"](this).data(DATA_KEY$6, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config]();
- }
- });
- };
-
- Dropdown._clearMenus = function _clearMenus(event) {
- if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {
- return;
- }
-
- var toggles = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE$2));
-
- for (var i = 0, len = toggles.length; i < len; i++) {
- var parent = Dropdown._getParentFromElement(toggles[i]);
-
- var context = $__default["default"](toggles[i]).data(DATA_KEY$6);
- var relatedTarget = {
- relatedTarget: toggles[i]
- };
-
- if (event && event.type === 'click') {
- relatedTarget.clickEvent = event;
- }
-
- if (!context) {
- continue;
- }
-
- var dropdownMenu = context._menu;
-
- if (!$__default["default"](parent).hasClass(CLASS_NAME_SHOW$5)) {
- continue;
- }
-
- if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $__default["default"].contains(parent, event.target)) {
- continue;
- }
-
- var hideEvent = $__default["default"].Event(EVENT_HIDE$3, relatedTarget);
- $__default["default"](parent).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- continue;
- } // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
-
- if ('ontouchstart' in document.documentElement) {
- $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
- }
-
- toggles[i].setAttribute('aria-expanded', 'false');
-
- if (context._popper) {
- context._popper.destroy();
- }
-
- $__default["default"](dropdownMenu).removeClass(CLASS_NAME_SHOW$5);
- $__default["default"](parent).removeClass(CLASS_NAME_SHOW$5).trigger($__default["default"].Event(EVENT_HIDDEN$3, relatedTarget));
- }
- };
-
- Dropdown._getParentFromElement = function _getParentFromElement(element) {
- var parent;
- var selector = Util.getSelectorFromElement(element);
-
- if (selector) {
- parent = document.querySelector(selector);
- }
-
- return parent || element.parentNode;
- } // eslint-disable-next-line complexity
- ;
-
- Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {
- // If not input/textarea:
- // - And not a key in REGEXP_KEYDOWN => not a dropdown command
- // If input/textarea:
- // - If space key => not a dropdown command
- // - If key is other than escape
- // - If key is not up or down => not a dropdown command
- // - If trigger inside the menu => not a dropdown command
- if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE$1 && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $__default["default"](event.target).closest(SELECTOR_MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {
- return;
- }
-
- if (this.disabled || $__default["default"](this).hasClass(CLASS_NAME_DISABLED$1)) {
- return;
- }
-
- var parent = Dropdown._getParentFromElement(this);
-
- var isActive = $__default["default"](parent).hasClass(CLASS_NAME_SHOW$5);
-
- if (!isActive && event.which === ESCAPE_KEYCODE$1) {
- return;
- }
-
- event.preventDefault();
- event.stopPropagation();
-
- if (!isActive || event.which === ESCAPE_KEYCODE$1 || event.which === SPACE_KEYCODE) {
- if (event.which === ESCAPE_KEYCODE$1) {
- $__default["default"](parent.querySelector(SELECTOR_DATA_TOGGLE$2)).trigger('focus');
- }
-
- $__default["default"](this).trigger('click');
- return;
- }
-
- var items = [].slice.call(parent.querySelectorAll(SELECTOR_VISIBLE_ITEMS)).filter(function (item) {
- return $__default["default"](item).is(':visible');
- });
-
- if (items.length === 0) {
- return;
- }
-
- var index = items.indexOf(event.target);
-
- if (event.which === ARROW_UP_KEYCODE && index > 0) {
- // Up
- index--;
- }
-
- if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {
- // Down
- index++;
- }
-
- if (index < 0) {
- index = 0;
- }
-
- items[index].focus();
- };
-
- _createClass(Dropdown, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$6;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$5;
- }
- }, {
- key: "DefaultType",
- get: function get() {
- return DefaultType$5;
- }
- }]);
-
- return Dropdown;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$2, Dropdown._dataApiKeydownHandler).on(EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown._dataApiKeydownHandler).on(EVENT_CLICK_DATA_API$2 + " " + EVENT_KEYUP_DATA_API, Dropdown._clearMenus).on(EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) {
- event.preventDefault();
- event.stopPropagation();
-
- Dropdown._jQueryInterface.call($__default["default"](this), 'toggle');
- }).on(EVENT_CLICK_DATA_API$2, SELECTOR_FORM_CHILD, function (e) {
- e.stopPropagation();
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$6] = Dropdown._jQueryInterface;
- $__default["default"].fn[NAME$6].Constructor = Dropdown;
-
- $__default["default"].fn[NAME$6].noConflict = function () {
- $__default["default"].fn[NAME$6] = JQUERY_NO_CONFLICT$6;
- return Dropdown._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$5 = 'modal';
- var VERSION$5 = '4.6.1';
- var DATA_KEY$5 = 'bs.modal';
- var EVENT_KEY$5 = "." + DATA_KEY$5;
- var DATA_API_KEY$2 = '.data-api';
- var JQUERY_NO_CONFLICT$5 = $__default["default"].fn[NAME$5];
- var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key
-
- var CLASS_NAME_SCROLLABLE = 'modal-dialog-scrollable';
- var CLASS_NAME_SCROLLBAR_MEASURER = 'modal-scrollbar-measure';
- var CLASS_NAME_BACKDROP = 'modal-backdrop';
- var CLASS_NAME_OPEN = 'modal-open';
- var CLASS_NAME_FADE$4 = 'fade';
- var CLASS_NAME_SHOW$4 = 'show';
- var CLASS_NAME_STATIC = 'modal-static';
- var EVENT_HIDE$2 = "hide" + EVENT_KEY$5;
- var EVENT_HIDE_PREVENTED = "hidePrevented" + EVENT_KEY$5;
- var EVENT_HIDDEN$2 = "hidden" + EVENT_KEY$5;
- var EVENT_SHOW$2 = "show" + EVENT_KEY$5;
- var EVENT_SHOWN$2 = "shown" + EVENT_KEY$5;
- var EVENT_FOCUSIN = "focusin" + EVENT_KEY$5;
- var EVENT_RESIZE = "resize" + EVENT_KEY$5;
- var EVENT_CLICK_DISMISS$1 = "click.dismiss" + EVENT_KEY$5;
- var EVENT_KEYDOWN_DISMISS = "keydown.dismiss" + EVENT_KEY$5;
- var EVENT_MOUSEUP_DISMISS = "mouseup.dismiss" + EVENT_KEY$5;
- var EVENT_MOUSEDOWN_DISMISS = "mousedown.dismiss" + EVENT_KEY$5;
- var EVENT_CLICK_DATA_API$1 = "click" + EVENT_KEY$5 + DATA_API_KEY$2;
- var SELECTOR_DIALOG = '.modal-dialog';
- var SELECTOR_MODAL_BODY = '.modal-body';
- var SELECTOR_DATA_TOGGLE$1 = '[data-toggle="modal"]';
- var SELECTOR_DATA_DISMISS$1 = '[data-dismiss="modal"]';
- var SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top';
- var SELECTOR_STICKY_CONTENT = '.sticky-top';
- var Default$4 = {
- backdrop: true,
- keyboard: true,
- focus: true,
- show: true
- };
- var DefaultType$4 = {
- backdrop: '(boolean|string)',
- keyboard: 'boolean',
- focus: 'boolean',
- show: 'boolean'
- };
- /**
- * Class definition
- */
-
- var Modal = /*#__PURE__*/function () {
- function Modal(element, config) {
- this._config = this._getConfig(config);
- this._element = element;
- this._dialog = element.querySelector(SELECTOR_DIALOG);
- this._backdrop = null;
- this._isShown = false;
- this._isBodyOverflowing = false;
- this._ignoreBackdropClick = false;
- this._isTransitioning = false;
- this._scrollbarWidth = 0;
- } // Getters
-
-
- var _proto = Modal.prototype;
-
- // Public
- _proto.toggle = function toggle(relatedTarget) {
- return this._isShown ? this.hide() : this.show(relatedTarget);
- };
-
- _proto.show = function show(relatedTarget) {
- var _this = this;
-
- if (this._isShown || this._isTransitioning) {
- return;
- }
-
- var showEvent = $__default["default"].Event(EVENT_SHOW$2, {
- relatedTarget: relatedTarget
- });
- $__default["default"](this._element).trigger(showEvent);
-
- if (showEvent.isDefaultPrevented()) {
- return;
- }
-
- this._isShown = true;
-
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
- this._isTransitioning = true;
- }
-
- this._checkScrollbar();
-
- this._setScrollbar();
-
- this._adjustDialog();
-
- this._setEscapeEvent();
-
- this._setResizeEvent();
-
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, SELECTOR_DATA_DISMISS$1, function (event) {
- return _this.hide(event);
- });
- $__default["default"](this._dialog).on(EVENT_MOUSEDOWN_DISMISS, function () {
- $__default["default"](_this._element).one(EVENT_MOUSEUP_DISMISS, function (event) {
- if ($__default["default"](event.target).is(_this._element)) {
- _this._ignoreBackdropClick = true;
- }
- });
- });
-
- this._showBackdrop(function () {
- return _this._showElement(relatedTarget);
- });
- };
-
- _proto.hide = function hide(event) {
- var _this2 = this;
-
- if (event) {
- event.preventDefault();
- }
-
- if (!this._isShown || this._isTransitioning) {
- return;
- }
-
- var hideEvent = $__default["default"].Event(EVENT_HIDE$2);
- $__default["default"](this._element).trigger(hideEvent);
-
- if (!this._isShown || hideEvent.isDefaultPrevented()) {
- return;
- }
-
- this._isShown = false;
- var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
-
- if (transition) {
- this._isTransitioning = true;
- }
-
- this._setEscapeEvent();
-
- this._setResizeEvent();
-
- $__default["default"](document).off(EVENT_FOCUSIN);
- $__default["default"](this._element).removeClass(CLASS_NAME_SHOW$4);
- $__default["default"](this._element).off(EVENT_CLICK_DISMISS$1);
- $__default["default"](this._dialog).off(EVENT_MOUSEDOWN_DISMISS);
-
- if (transition) {
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
- $__default["default"](this._element).one(Util.TRANSITION_END, function (event) {
- return _this2._hideModal(event);
- }).emulateTransitionEnd(transitionDuration);
- } else {
- this._hideModal();
- }
- };
-
- _proto.dispose = function dispose() {
- [window, this._element, this._dialog].forEach(function (htmlElement) {
- return $__default["default"](htmlElement).off(EVENT_KEY$5);
- });
- /**
- * `document` has 2 events `EVENT_FOCUSIN` and `EVENT_CLICK_DATA_API`
- * Do not move `document` in `htmlElements` array
- * It will remove `EVENT_CLICK_DATA_API` event that should remain
- */
-
- $__default["default"](document).off(EVENT_FOCUSIN);
- $__default["default"].removeData(this._element, DATA_KEY$5);
- this._config = null;
- this._element = null;
- this._dialog = null;
- this._backdrop = null;
- this._isShown = null;
- this._isBodyOverflowing = null;
- this._ignoreBackdropClick = null;
- this._isTransitioning = null;
- this._scrollbarWidth = null;
- };
-
- _proto.handleUpdate = function handleUpdate() {
- this._adjustDialog();
- } // Private
- ;
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default$4, config);
- Util.typeCheckConfig(NAME$5, config, DefaultType$4);
- return config;
- };
-
- _proto._triggerBackdropTransition = function _triggerBackdropTransition() {
- var _this3 = this;
-
- var hideEventPrevented = $__default["default"].Event(EVENT_HIDE_PREVENTED);
- $__default["default"](this._element).trigger(hideEventPrevented);
-
- if (hideEventPrevented.isDefaultPrevented()) {
- return;
- }
-
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-
- if (!isModalOverflowing) {
- this._element.style.overflowY = 'hidden';
- }
-
- this._element.classList.add(CLASS_NAME_STATIC);
-
- var modalTransitionDuration = Util.getTransitionDurationFromElement(this._dialog);
- $__default["default"](this._element).off(Util.TRANSITION_END);
- $__default["default"](this._element).one(Util.TRANSITION_END, function () {
- _this3._element.classList.remove(CLASS_NAME_STATIC);
-
- if (!isModalOverflowing) {
- $__default["default"](_this3._element).one(Util.TRANSITION_END, function () {
- _this3._element.style.overflowY = '';
- }).emulateTransitionEnd(_this3._element, modalTransitionDuration);
- }
- }).emulateTransitionEnd(modalTransitionDuration);
-
- this._element.focus();
- };
-
- _proto._showElement = function _showElement(relatedTarget) {
- var _this4 = this;
-
- var transition = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4);
- var modalBody = this._dialog ? this._dialog.querySelector(SELECTOR_MODAL_BODY) : null;
-
- if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {
- // Don't move modal's DOM position
- document.body.appendChild(this._element);
- }
-
- this._element.style.display = 'block';
-
- this._element.removeAttribute('aria-hidden');
-
- this._element.setAttribute('aria-modal', true);
-
- this._element.setAttribute('role', 'dialog');
-
- if ($__default["default"](this._dialog).hasClass(CLASS_NAME_SCROLLABLE) && modalBody) {
- modalBody.scrollTop = 0;
- } else {
- this._element.scrollTop = 0;
- }
-
- if (transition) {
- Util.reflow(this._element);
- }
-
- $__default["default"](this._element).addClass(CLASS_NAME_SHOW$4);
-
- if (this._config.focus) {
- this._enforceFocus();
- }
-
- var shownEvent = $__default["default"].Event(EVENT_SHOWN$2, {
- relatedTarget: relatedTarget
- });
-
- var transitionComplete = function transitionComplete() {
- if (_this4._config.focus) {
- _this4._element.focus();
- }
-
- _this4._isTransitioning = false;
- $__default["default"](_this4._element).trigger(shownEvent);
- };
-
- if (transition) {
- var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);
- $__default["default"](this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);
- } else {
- transitionComplete();
- }
- };
-
- _proto._enforceFocus = function _enforceFocus() {
- var _this5 = this;
-
- $__default["default"](document).off(EVENT_FOCUSIN) // Guard against infinite focus loop
- .on(EVENT_FOCUSIN, function (event) {
- if (document !== event.target && _this5._element !== event.target && $__default["default"](_this5._element).has(event.target).length === 0) {
- _this5._element.focus();
- }
- });
- };
-
- _proto._setEscapeEvent = function _setEscapeEvent() {
- var _this6 = this;
-
- if (this._isShown) {
- $__default["default"](this._element).on(EVENT_KEYDOWN_DISMISS, function (event) {
- if (_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
- event.preventDefault();
-
- _this6.hide();
- } else if (!_this6._config.keyboard && event.which === ESCAPE_KEYCODE) {
- _this6._triggerBackdropTransition();
- }
- });
- } else if (!this._isShown) {
- $__default["default"](this._element).off(EVENT_KEYDOWN_DISMISS);
- }
- };
-
- _proto._setResizeEvent = function _setResizeEvent() {
- var _this7 = this;
-
- if (this._isShown) {
- $__default["default"](window).on(EVENT_RESIZE, function (event) {
- return _this7.handleUpdate(event);
- });
- } else {
- $__default["default"](window).off(EVENT_RESIZE);
- }
- };
-
- _proto._hideModal = function _hideModal() {
- var _this8 = this;
-
- this._element.style.display = 'none';
-
- this._element.setAttribute('aria-hidden', true);
-
- this._element.removeAttribute('aria-modal');
-
- this._element.removeAttribute('role');
-
- this._isTransitioning = false;
-
- this._showBackdrop(function () {
- $__default["default"](document.body).removeClass(CLASS_NAME_OPEN);
-
- _this8._resetAdjustments();
-
- _this8._resetScrollbar();
-
- $__default["default"](_this8._element).trigger(EVENT_HIDDEN$2);
- });
- };
-
- _proto._removeBackdrop = function _removeBackdrop() {
- if (this._backdrop) {
- $__default["default"](this._backdrop).remove();
- this._backdrop = null;
- }
- };
-
- _proto._showBackdrop = function _showBackdrop(callback) {
- var _this9 = this;
-
- var animate = $__default["default"](this._element).hasClass(CLASS_NAME_FADE$4) ? CLASS_NAME_FADE$4 : '';
-
- if (this._isShown && this._config.backdrop) {
- this._backdrop = document.createElement('div');
- this._backdrop.className = CLASS_NAME_BACKDROP;
-
- if (animate) {
- this._backdrop.classList.add(animate);
- }
-
- $__default["default"](this._backdrop).appendTo(document.body);
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS$1, function (event) {
- if (_this9._ignoreBackdropClick) {
- _this9._ignoreBackdropClick = false;
- return;
- }
-
- if (event.target !== event.currentTarget) {
- return;
- }
-
- if (_this9._config.backdrop === 'static') {
- _this9._triggerBackdropTransition();
- } else {
- _this9.hide();
- }
- });
-
- if (animate) {
- Util.reflow(this._backdrop);
- }
-
- $__default["default"](this._backdrop).addClass(CLASS_NAME_SHOW$4);
-
- if (!callback) {
- return;
- }
-
- if (!animate) {
- callback();
- return;
- }
-
- var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
- $__default["default"](this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);
- } else if (!this._isShown && this._backdrop) {
- $__default["default"](this._backdrop).removeClass(CLASS_NAME_SHOW$4);
-
- var callbackRemove = function callbackRemove() {
- _this9._removeBackdrop();
-
- if (callback) {
- callback();
- }
- };
-
- if ($__default["default"](this._element).hasClass(CLASS_NAME_FADE$4)) {
- var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);
-
- $__default["default"](this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);
- } else {
- callbackRemove();
- }
- } else if (callback) {
- callback();
- }
- } // ----------------------------------------------------------------------
- // the following methods are used to handle overflowing modals
- // todo (fat): these should probably be refactored out of modal.js
- // ----------------------------------------------------------------------
- ;
-
- _proto._adjustDialog = function _adjustDialog() {
- var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;
-
- if (!this._isBodyOverflowing && isModalOverflowing) {
- this._element.style.paddingLeft = this._scrollbarWidth + "px";
- }
-
- if (this._isBodyOverflowing && !isModalOverflowing) {
- this._element.style.paddingRight = this._scrollbarWidth + "px";
- }
- };
-
- _proto._resetAdjustments = function _resetAdjustments() {
- this._element.style.paddingLeft = '';
- this._element.style.paddingRight = '';
- };
-
- _proto._checkScrollbar = function _checkScrollbar() {
- var rect = document.body.getBoundingClientRect();
- this._isBodyOverflowing = Math.round(rect.left + rect.right) < window.innerWidth;
- this._scrollbarWidth = this._getScrollbarWidth();
- };
-
- _proto._setScrollbar = function _setScrollbar() {
- var _this10 = this;
-
- if (this._isBodyOverflowing) {
- // Note: DOMNode.style.paddingRight returns the actual value or '' if not set
- // while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
- var stickyContent = [].slice.call(document.querySelectorAll(SELECTOR_STICKY_CONTENT)); // Adjust fixed content padding
-
- $__default["default"](fixedContent).each(function (index, element) {
- var actualPadding = element.style.paddingRight;
- var calculatedPadding = $__default["default"](element).css('padding-right');
- $__default["default"](element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this10._scrollbarWidth + "px");
- }); // Adjust sticky content margin
-
- $__default["default"](stickyContent).each(function (index, element) {
- var actualMargin = element.style.marginRight;
- var calculatedMargin = $__default["default"](element).css('margin-right');
- $__default["default"](element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this10._scrollbarWidth + "px");
- }); // Adjust body padding
-
- var actualPadding = document.body.style.paddingRight;
- var calculatedPadding = $__default["default"](document.body).css('padding-right');
- $__default["default"](document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px");
- }
-
- $__default["default"](document.body).addClass(CLASS_NAME_OPEN);
- };
-
- _proto._resetScrollbar = function _resetScrollbar() {
- // Restore fixed content padding
- var fixedContent = [].slice.call(document.querySelectorAll(SELECTOR_FIXED_CONTENT));
- $__default["default"](fixedContent).each(function (index, element) {
- var padding = $__default["default"](element).data('padding-right');
- $__default["default"](element).removeData('padding-right');
- element.style.paddingRight = padding ? padding : '';
- }); // Restore sticky content
-
- var elements = [].slice.call(document.querySelectorAll("" + SELECTOR_STICKY_CONTENT));
- $__default["default"](elements).each(function (index, element) {
- var margin = $__default["default"](element).data('margin-right');
-
- if (typeof margin !== 'undefined') {
- $__default["default"](element).css('margin-right', margin).removeData('margin-right');
- }
- }); // Restore body padding
-
- var padding = $__default["default"](document.body).data('padding-right');
- $__default["default"](document.body).removeData('padding-right');
- document.body.style.paddingRight = padding ? padding : '';
- };
-
- _proto._getScrollbarWidth = function _getScrollbarWidth() {
- // thx d.walsh
- var scrollDiv = document.createElement('div');
- scrollDiv.className = CLASS_NAME_SCROLLBAR_MEASURER;
- document.body.appendChild(scrollDiv);
- var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;
- document.body.removeChild(scrollDiv);
- return scrollbarWidth;
- } // Static
- ;
-
- Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$5);
-
- var _config = _extends({}, Default$4, $__default["default"](this).data(), typeof config === 'object' && config ? config : {});
-
- if (!data) {
- data = new Modal(this, _config);
- $__default["default"](this).data(DATA_KEY$5, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config](relatedTarget);
- } else if (_config.show) {
- data.show(relatedTarget);
- }
- });
- };
-
- _createClass(Modal, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$5;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$4;
- }
- }]);
-
- return Modal;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) {
- var _this11 = this;
-
- var target;
- var selector = Util.getSelectorFromElement(this);
-
- if (selector) {
- target = document.querySelector(selector);
- }
-
- var config = $__default["default"](target).data(DATA_KEY$5) ? 'toggle' : _extends({}, $__default["default"](target).data(), $__default["default"](this).data());
-
- if (this.tagName === 'A' || this.tagName === 'AREA') {
- event.preventDefault();
- }
-
- var $target = $__default["default"](target).one(EVENT_SHOW$2, function (showEvent) {
- if (showEvent.isDefaultPrevented()) {
- // Only register focus restorer if modal will actually get shown
- return;
- }
-
- $target.one(EVENT_HIDDEN$2, function () {
- if ($__default["default"](_this11).is(':visible')) {
- _this11.focus();
- }
- });
- });
-
- Modal._jQueryInterface.call($__default["default"](target), config, this);
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$5] = Modal._jQueryInterface;
- $__default["default"].fn[NAME$5].Constructor = Modal;
-
- $__default["default"].fn[NAME$5].noConflict = function () {
- $__default["default"].fn[NAME$5] = JQUERY_NO_CONFLICT$5;
- return Modal._jQueryInterface;
- };
-
- /**
- * --------------------------------------------------------------------------
- * Bootstrap (v4.6.1): tools/sanitizer.js
- * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
- * --------------------------------------------------------------------------
- */
- var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];
- var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
- var DefaultWhitelist = {
- // Global attributes allowed on any supplied element below.
- '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],
- a: ['target', 'href', 'title', 'rel'],
- area: [],
- b: [],
- br: [],
- col: [],
- code: [],
- div: [],
- em: [],
- hr: [],
- h1: [],
- h2: [],
- h3: [],
- h4: [],
- h5: [],
- h6: [],
- i: [],
- img: ['src', 'srcset', 'alt', 'title', 'width', 'height'],
- li: [],
- ol: [],
- p: [],
- pre: [],
- s: [],
- small: [],
- span: [],
- sub: [],
- sup: [],
- strong: [],
- u: [],
- ul: []
- };
- /**
- * A pattern that recognizes a commonly useful subset of URLs that are safe.
- *
- * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
- */
-
- var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
- /**
- * A pattern that matches safe data URLs. Only matches image, video and audio types.
- *
- * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts
- */
-
- var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-
- function allowedAttribute(attr, allowedAttributeList) {
- var attrName = attr.nodeName.toLowerCase();
-
- if (allowedAttributeList.indexOf(attrName) !== -1) {
- if (uriAttrs.indexOf(attrName) !== -1) {
- return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue));
- }
-
- return true;
- }
-
- var regExp = allowedAttributeList.filter(function (attrRegex) {
- return attrRegex instanceof RegExp;
- }); // Check if a regular expression validates the attribute.
-
- for (var i = 0, len = regExp.length; i < len; i++) {
- if (regExp[i].test(attrName)) {
- return true;
- }
- }
-
- return false;
- }
-
- function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {
- if (unsafeHtml.length === 0) {
- return unsafeHtml;
- }
-
- if (sanitizeFn && typeof sanitizeFn === 'function') {
- return sanitizeFn(unsafeHtml);
- }
-
- var domParser = new window.DOMParser();
- var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');
- var whitelistKeys = Object.keys(whiteList);
- var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));
-
- var _loop = function _loop(i, len) {
- var el = elements[i];
- var elName = el.nodeName.toLowerCase();
-
- if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {
- el.parentNode.removeChild(el);
- return "continue";
- }
-
- var attributeList = [].slice.call(el.attributes); // eslint-disable-next-line unicorn/prefer-spread
-
- var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);
- attributeList.forEach(function (attr) {
- if (!allowedAttribute(attr, whitelistedAttributes)) {
- el.removeAttribute(attr.nodeName);
- }
- });
- };
-
- for (var i = 0, len = elements.length; i < len; i++) {
- var _ret = _loop(i);
-
- if (_ret === "continue") continue;
- }
-
- return createdDocument.body.innerHTML;
- }
-
- /**
- * Constants
- */
-
- var NAME$4 = 'tooltip';
- var VERSION$4 = '4.6.1';
- var DATA_KEY$4 = 'bs.tooltip';
- var EVENT_KEY$4 = "." + DATA_KEY$4;
- var JQUERY_NO_CONFLICT$4 = $__default["default"].fn[NAME$4];
- var CLASS_PREFIX$1 = 'bs-tooltip';
- var BSCLS_PREFIX_REGEX$1 = new RegExp("(^|\\s)" + CLASS_PREFIX$1 + "\\S+", 'g');
- var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];
- var CLASS_NAME_FADE$3 = 'fade';
- var CLASS_NAME_SHOW$3 = 'show';
- var HOVER_STATE_SHOW = 'show';
- var HOVER_STATE_OUT = 'out';
- var SELECTOR_TOOLTIP_INNER = '.tooltip-inner';
- var SELECTOR_ARROW = '.arrow';
- var TRIGGER_HOVER = 'hover';
- var TRIGGER_FOCUS = 'focus';
- var TRIGGER_CLICK = 'click';
- var TRIGGER_MANUAL = 'manual';
- var AttachmentMap = {
- AUTO: 'auto',
- TOP: 'top',
- RIGHT: 'right',
- BOTTOM: 'bottom',
- LEFT: 'left'
- };
- var Default$3 = {
- animation: true,
- template: '',
- trigger: 'hover focus',
- title: '',
- delay: 0,
- html: false,
- selector: false,
- placement: 'top',
- offset: 0,
- container: false,
- fallbackPlacement: 'flip',
- boundary: 'scrollParent',
- customClass: '',
- sanitize: true,
- sanitizeFn: null,
- whiteList: DefaultWhitelist,
- popperConfig: null
- };
- var DefaultType$3 = {
- animation: 'boolean',
- template: 'string',
- title: '(string|element|function)',
- trigger: 'string',
- delay: '(number|object)',
- html: 'boolean',
- selector: '(string|boolean)',
- placement: '(string|function)',
- offset: '(number|string|function)',
- container: '(string|element|boolean)',
- fallbackPlacement: '(string|array)',
- boundary: '(string|element)',
- customClass: '(string|function)',
- sanitize: 'boolean',
- sanitizeFn: '(null|function)',
- whiteList: 'object',
- popperConfig: '(null|object)'
- };
- var Event$1 = {
- HIDE: "hide" + EVENT_KEY$4,
- HIDDEN: "hidden" + EVENT_KEY$4,
- SHOW: "show" + EVENT_KEY$4,
- SHOWN: "shown" + EVENT_KEY$4,
- INSERTED: "inserted" + EVENT_KEY$4,
- CLICK: "click" + EVENT_KEY$4,
- FOCUSIN: "focusin" + EVENT_KEY$4,
- FOCUSOUT: "focusout" + EVENT_KEY$4,
- MOUSEENTER: "mouseenter" + EVENT_KEY$4,
- MOUSELEAVE: "mouseleave" + EVENT_KEY$4
- };
- /**
- * Class definition
- */
-
- var Tooltip = /*#__PURE__*/function () {
- function Tooltip(element, config) {
- if (typeof Popper__default["default"] === 'undefined') {
- throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)');
- } // Private
-
-
- this._isEnabled = true;
- this._timeout = 0;
- this._hoverState = '';
- this._activeTrigger = {};
- this._popper = null; // Protected
-
- this.element = element;
- this.config = this._getConfig(config);
- this.tip = null;
-
- this._setListeners();
- } // Getters
-
-
- var _proto = Tooltip.prototype;
-
- // Public
- _proto.enable = function enable() {
- this._isEnabled = true;
- };
-
- _proto.disable = function disable() {
- this._isEnabled = false;
- };
-
- _proto.toggleEnabled = function toggleEnabled() {
- this._isEnabled = !this._isEnabled;
- };
-
- _proto.toggle = function toggle(event) {
- if (!this._isEnabled) {
- return;
- }
-
- if (event) {
- var dataKey = this.constructor.DATA_KEY;
- var context = $__default["default"](event.currentTarget).data(dataKey);
-
- if (!context) {
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
- $__default["default"](event.currentTarget).data(dataKey, context);
- }
-
- context._activeTrigger.click = !context._activeTrigger.click;
-
- if (context._isWithActiveTrigger()) {
- context._enter(null, context);
- } else {
- context._leave(null, context);
- }
- } else {
- if ($__default["default"](this.getTipElement()).hasClass(CLASS_NAME_SHOW$3)) {
- this._leave(null, this);
-
- return;
- }
-
- this._enter(null, this);
- }
- };
-
- _proto.dispose = function dispose() {
- clearTimeout(this._timeout);
- $__default["default"].removeData(this.element, this.constructor.DATA_KEY);
- $__default["default"](this.element).off(this.constructor.EVENT_KEY);
- $__default["default"](this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler);
-
- if (this.tip) {
- $__default["default"](this.tip).remove();
- }
-
- this._isEnabled = null;
- this._timeout = null;
- this._hoverState = null;
- this._activeTrigger = null;
-
- if (this._popper) {
- this._popper.destroy();
- }
-
- this._popper = null;
- this.element = null;
- this.config = null;
- this.tip = null;
- };
-
- _proto.show = function show() {
- var _this = this;
-
- if ($__default["default"](this.element).css('display') === 'none') {
- throw new Error('Please use show on visible elements');
- }
-
- var showEvent = $__default["default"].Event(this.constructor.Event.SHOW);
-
- if (this.isWithContent() && this._isEnabled) {
- $__default["default"](this.element).trigger(showEvent);
- var shadowRoot = Util.findShadowRoot(this.element);
- var isInTheDom = $__default["default"].contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);
-
- if (showEvent.isDefaultPrevented() || !isInTheDom) {
- return;
- }
-
- var tip = this.getTipElement();
- var tipId = Util.getUID(this.constructor.NAME);
- tip.setAttribute('id', tipId);
- this.element.setAttribute('aria-describedby', tipId);
- this.setContent();
-
- if (this.config.animation) {
- $__default["default"](tip).addClass(CLASS_NAME_FADE$3);
- }
-
- var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;
-
- var attachment = this._getAttachment(placement);
-
- this.addAttachmentClass(attachment);
-
- var container = this._getContainer();
-
- $__default["default"](tip).data(this.constructor.DATA_KEY, this);
-
- if (!$__default["default"].contains(this.element.ownerDocument.documentElement, this.tip)) {
- $__default["default"](tip).appendTo(container);
- }
-
- $__default["default"](this.element).trigger(this.constructor.Event.INSERTED);
- this._popper = new Popper__default["default"](this.element, tip, this._getPopperConfig(attachment));
- $__default["default"](tip).addClass(CLASS_NAME_SHOW$3);
- $__default["default"](tip).addClass(this.config.customClass); // If this is a touch-enabled device we add extra
- // empty mouseover listeners to the body's immediate children;
- // only needed because of broken event delegation on iOS
- // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html
-
- if ('ontouchstart' in document.documentElement) {
- $__default["default"](document.body).children().on('mouseover', null, $__default["default"].noop);
- }
-
- var complete = function complete() {
- if (_this.config.animation) {
- _this._fixTransition();
- }
-
- var prevHoverState = _this._hoverState;
- _this._hoverState = null;
- $__default["default"](_this.element).trigger(_this.constructor.Event.SHOWN);
-
- if (prevHoverState === HOVER_STATE_OUT) {
- _this._leave(null, _this);
- }
- };
-
- if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
- var transitionDuration = Util.getTransitionDurationFromElement(this.tip);
- $__default["default"](this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
- }
- };
-
- _proto.hide = function hide(callback) {
- var _this2 = this;
-
- var tip = this.getTipElement();
- var hideEvent = $__default["default"].Event(this.constructor.Event.HIDE);
-
- var complete = function complete() {
- if (_this2._hoverState !== HOVER_STATE_SHOW && tip.parentNode) {
- tip.parentNode.removeChild(tip);
- }
-
- _this2._cleanTipClass();
-
- _this2.element.removeAttribute('aria-describedby');
-
- $__default["default"](_this2.element).trigger(_this2.constructor.Event.HIDDEN);
-
- if (_this2._popper !== null) {
- _this2._popper.destroy();
- }
-
- if (callback) {
- callback();
- }
- };
-
- $__default["default"](this.element).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- return;
- }
-
- $__default["default"](tip).removeClass(CLASS_NAME_SHOW$3); // If this is a touch-enabled device we remove the extra
- // empty mouseover listeners we added for iOS support
-
- if ('ontouchstart' in document.documentElement) {
- $__default["default"](document.body).children().off('mouseover', null, $__default["default"].noop);
- }
-
- this._activeTrigger[TRIGGER_CLICK] = false;
- this._activeTrigger[TRIGGER_FOCUS] = false;
- this._activeTrigger[TRIGGER_HOVER] = false;
-
- if ($__default["default"](this.tip).hasClass(CLASS_NAME_FADE$3)) {
- var transitionDuration = Util.getTransitionDurationFromElement(tip);
- $__default["default"](tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
-
- this._hoverState = '';
- };
-
- _proto.update = function update() {
- if (this._popper !== null) {
- this._popper.scheduleUpdate();
- }
- } // Protected
- ;
-
- _proto.isWithContent = function isWithContent() {
- return Boolean(this.getTitle());
- };
-
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
- $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX$1 + "-" + attachment);
- };
-
- _proto.getTipElement = function getTipElement() {
- this.tip = this.tip || $__default["default"](this.config.template)[0];
- return this.tip;
- };
-
- _proto.setContent = function setContent() {
- var tip = this.getTipElement();
- this.setElementContent($__default["default"](tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle());
- $__default["default"](tip).removeClass(CLASS_NAME_FADE$3 + " " + CLASS_NAME_SHOW$3);
- };
-
- _proto.setElementContent = function setElementContent($element, content) {
- if (typeof content === 'object' && (content.nodeType || content.jquery)) {
- // Content is a DOM node or a jQuery
- if (this.config.html) {
- if (!$__default["default"](content).parent().is($element)) {
- $element.empty().append(content);
- }
- } else {
- $element.text($__default["default"](content).text());
- }
-
- return;
- }
-
- if (this.config.html) {
- if (this.config.sanitize) {
- content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);
- }
-
- $element.html(content);
- } else {
- $element.text(content);
- }
- };
-
- _proto.getTitle = function getTitle() {
- var title = this.element.getAttribute('data-original-title');
-
- if (!title) {
- title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;
- }
-
- return title;
- } // Private
- ;
-
- _proto._getPopperConfig = function _getPopperConfig(attachment) {
- var _this3 = this;
-
- var defaultBsConfig = {
- placement: attachment,
- modifiers: {
- offset: this._getOffset(),
- flip: {
- behavior: this.config.fallbackPlacement
- },
- arrow: {
- element: SELECTOR_ARROW
- },
- preventOverflow: {
- boundariesElement: this.config.boundary
- }
- },
- onCreate: function onCreate(data) {
- if (data.originalPlacement !== data.placement) {
- _this3._handlePopperPlacementChange(data);
- }
- },
- onUpdate: function onUpdate(data) {
- return _this3._handlePopperPlacementChange(data);
- }
- };
- return _extends({}, defaultBsConfig, this.config.popperConfig);
- };
-
- _proto._getOffset = function _getOffset() {
- var _this4 = this;
-
- var offset = {};
-
- if (typeof this.config.offset === 'function') {
- offset.fn = function (data) {
- data.offsets = _extends({}, data.offsets, _this4.config.offset(data.offsets, _this4.element));
- return data;
- };
- } else {
- offset.offset = this.config.offset;
- }
-
- return offset;
- };
-
- _proto._getContainer = function _getContainer() {
- if (this.config.container === false) {
- return document.body;
- }
-
- if (Util.isElement(this.config.container)) {
- return $__default["default"](this.config.container);
- }
-
- return $__default["default"](document).find(this.config.container);
- };
-
- _proto._getAttachment = function _getAttachment(placement) {
- return AttachmentMap[placement.toUpperCase()];
- };
-
- _proto._setListeners = function _setListeners() {
- var _this5 = this;
-
- var triggers = this.config.trigger.split(' ');
- triggers.forEach(function (trigger) {
- if (trigger === 'click') {
- $__default["default"](_this5.element).on(_this5.constructor.Event.CLICK, _this5.config.selector, function (event) {
- return _this5.toggle(event);
- });
- } else if (trigger !== TRIGGER_MANUAL) {
- var eventIn = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSEENTER : _this5.constructor.Event.FOCUSIN;
- var eventOut = trigger === TRIGGER_HOVER ? _this5.constructor.Event.MOUSELEAVE : _this5.constructor.Event.FOCUSOUT;
- $__default["default"](_this5.element).on(eventIn, _this5.config.selector, function (event) {
- return _this5._enter(event);
- }).on(eventOut, _this5.config.selector, function (event) {
- return _this5._leave(event);
- });
- }
- });
-
- this._hideModalHandler = function () {
- if (_this5.element) {
- _this5.hide();
- }
- };
-
- $__default["default"](this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler);
-
- if (this.config.selector) {
- this.config = _extends({}, this.config, {
- trigger: 'manual',
- selector: ''
- });
- } else {
- this._fixTitle();
- }
- };
-
- _proto._fixTitle = function _fixTitle() {
- var titleType = typeof this.element.getAttribute('data-original-title');
-
- if (this.element.getAttribute('title') || titleType !== 'string') {
- this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');
- this.element.setAttribute('title', '');
- }
- };
-
- _proto._enter = function _enter(event, context) {
- var dataKey = this.constructor.DATA_KEY;
- context = context || $__default["default"](event.currentTarget).data(dataKey);
-
- if (!context) {
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
- $__default["default"](event.currentTarget).data(dataKey, context);
- }
-
- if (event) {
- context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true;
- }
-
- if ($__default["default"](context.getTipElement()).hasClass(CLASS_NAME_SHOW$3) || context._hoverState === HOVER_STATE_SHOW) {
- context._hoverState = HOVER_STATE_SHOW;
- return;
- }
-
- clearTimeout(context._timeout);
- context._hoverState = HOVER_STATE_SHOW;
-
- if (!context.config.delay || !context.config.delay.show) {
- context.show();
- return;
- }
-
- context._timeout = setTimeout(function () {
- if (context._hoverState === HOVER_STATE_SHOW) {
- context.show();
- }
- }, context.config.delay.show);
- };
-
- _proto._leave = function _leave(event, context) {
- var dataKey = this.constructor.DATA_KEY;
- context = context || $__default["default"](event.currentTarget).data(dataKey);
-
- if (!context) {
- context = new this.constructor(event.currentTarget, this._getDelegateConfig());
- $__default["default"](event.currentTarget).data(dataKey, context);
- }
-
- if (event) {
- context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = false;
- }
-
- if (context._isWithActiveTrigger()) {
- return;
- }
-
- clearTimeout(context._timeout);
- context._hoverState = HOVER_STATE_OUT;
-
- if (!context.config.delay || !context.config.delay.hide) {
- context.hide();
- return;
- }
-
- context._timeout = setTimeout(function () {
- if (context._hoverState === HOVER_STATE_OUT) {
- context.hide();
- }
- }, context.config.delay.hide);
- };
-
- _proto._isWithActiveTrigger = function _isWithActiveTrigger() {
- for (var trigger in this._activeTrigger) {
- if (this._activeTrigger[trigger]) {
- return true;
- }
- }
-
- return false;
- };
-
- _proto._getConfig = function _getConfig(config) {
- var dataAttributes = $__default["default"](this.element).data();
- Object.keys(dataAttributes).forEach(function (dataAttr) {
- if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {
- delete dataAttributes[dataAttr];
- }
- });
- config = _extends({}, this.constructor.Default, dataAttributes, typeof config === 'object' && config ? config : {});
-
- if (typeof config.delay === 'number') {
- config.delay = {
- show: config.delay,
- hide: config.delay
- };
- }
-
- if (typeof config.title === 'number') {
- config.title = config.title.toString();
- }
-
- if (typeof config.content === 'number') {
- config.content = config.content.toString();
- }
-
- Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);
-
- if (config.sanitize) {
- config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);
- }
-
- return config;
- };
-
- _proto._getDelegateConfig = function _getDelegateConfig() {
- var config = {};
-
- if (this.config) {
- for (var key in this.config) {
- if (this.constructor.Default[key] !== this.config[key]) {
- config[key] = this.config[key];
- }
- }
- }
-
- return config;
- };
-
- _proto._cleanTipClass = function _cleanTipClass() {
- var $tip = $__default["default"](this.getTipElement());
- var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);
-
- if (tabClass !== null && tabClass.length) {
- $tip.removeClass(tabClass.join(''));
- }
- };
-
- _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {
- this.tip = popperData.instance.popper;
-
- this._cleanTipClass();
-
- this.addAttachmentClass(this._getAttachment(popperData.placement));
- };
-
- _proto._fixTransition = function _fixTransition() {
- var tip = this.getTipElement();
- var initConfigAnimation = this.config.animation;
-
- if (tip.getAttribute('x-placement') !== null) {
- return;
- }
-
- $__default["default"](tip).removeClass(CLASS_NAME_FADE$3);
- this.config.animation = false;
- this.hide();
- this.show();
- this.config.animation = initConfigAnimation;
- } // Static
- ;
-
- Tooltip._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY$4);
-
- var _config = typeof config === 'object' && config;
-
- if (!data && /dispose|hide/.test(config)) {
- return;
- }
-
- if (!data) {
- data = new Tooltip(this, _config);
- $element.data(DATA_KEY$4, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Tooltip, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$4;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$3;
- }
- }, {
- key: "NAME",
- get: function get() {
- return NAME$4;
- }
- }, {
- key: "DATA_KEY",
- get: function get() {
- return DATA_KEY$4;
- }
- }, {
- key: "Event",
- get: function get() {
- return Event$1;
- }
- }, {
- key: "EVENT_KEY",
- get: function get() {
- return EVENT_KEY$4;
- }
- }, {
- key: "DefaultType",
- get: function get() {
- return DefaultType$3;
- }
- }]);
-
- return Tooltip;
- }();
- /**
- * jQuery
- */
-
-
- $__default["default"].fn[NAME$4] = Tooltip._jQueryInterface;
- $__default["default"].fn[NAME$4].Constructor = Tooltip;
-
- $__default["default"].fn[NAME$4].noConflict = function () {
- $__default["default"].fn[NAME$4] = JQUERY_NO_CONFLICT$4;
- return Tooltip._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$3 = 'popover';
- var VERSION$3 = '4.6.1';
- var DATA_KEY$3 = 'bs.popover';
- var EVENT_KEY$3 = "." + DATA_KEY$3;
- var JQUERY_NO_CONFLICT$3 = $__default["default"].fn[NAME$3];
- var CLASS_PREFIX = 'bs-popover';
- var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g');
- var CLASS_NAME_FADE$2 = 'fade';
- var CLASS_NAME_SHOW$2 = 'show';
- var SELECTOR_TITLE = '.popover-header';
- var SELECTOR_CONTENT = '.popover-body';
-
- var Default$2 = _extends({}, Tooltip.Default, {
- placement: 'right',
- trigger: 'click',
- content: '',
- template: ''
- });
-
- var DefaultType$2 = _extends({}, Tooltip.DefaultType, {
- content: '(string|element|function)'
- });
-
- var Event = {
- HIDE: "hide" + EVENT_KEY$3,
- HIDDEN: "hidden" + EVENT_KEY$3,
- SHOW: "show" + EVENT_KEY$3,
- SHOWN: "shown" + EVENT_KEY$3,
- INSERTED: "inserted" + EVENT_KEY$3,
- CLICK: "click" + EVENT_KEY$3,
- FOCUSIN: "focusin" + EVENT_KEY$3,
- FOCUSOUT: "focusout" + EVENT_KEY$3,
- MOUSEENTER: "mouseenter" + EVENT_KEY$3,
- MOUSELEAVE: "mouseleave" + EVENT_KEY$3
- };
- /**
- * Class definition
- */
-
- var Popover = /*#__PURE__*/function (_Tooltip) {
- _inheritsLoose(Popover, _Tooltip);
-
- function Popover() {
- return _Tooltip.apply(this, arguments) || this;
- }
-
- var _proto = Popover.prototype;
-
- // Overrides
- _proto.isWithContent = function isWithContent() {
- return this.getTitle() || this._getContent();
- };
-
- _proto.addAttachmentClass = function addAttachmentClass(attachment) {
- $__default["default"](this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment);
- };
-
- _proto.getTipElement = function getTipElement() {
- this.tip = this.tip || $__default["default"](this.config.template)[0];
- return this.tip;
- };
-
- _proto.setContent = function setContent() {
- var $tip = $__default["default"](this.getTipElement()); // We use append for html objects to maintain js events
-
- this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle());
-
- var content = this._getContent();
-
- if (typeof content === 'function') {
- content = content.call(this.element);
- }
-
- this.setElementContent($tip.find(SELECTOR_CONTENT), content);
- $tip.removeClass(CLASS_NAME_FADE$2 + " " + CLASS_NAME_SHOW$2);
- } // Private
- ;
-
- _proto._getContent = function _getContent() {
- return this.element.getAttribute('data-content') || this.config.content;
- };
-
- _proto._cleanTipClass = function _cleanTipClass() {
- var $tip = $__default["default"](this.getTipElement());
- var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);
-
- if (tabClass !== null && tabClass.length > 0) {
- $tip.removeClass(tabClass.join(''));
- }
- } // Static
- ;
-
- Popover._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$3);
-
- var _config = typeof config === 'object' ? config : null;
-
- if (!data && /dispose|hide/.test(config)) {
- return;
- }
-
- if (!data) {
- data = new Popover(this, _config);
- $__default["default"](this).data(DATA_KEY$3, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Popover, null, [{
- key: "VERSION",
- get: // Getters
- function get() {
- return VERSION$3;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$2;
- }
- }, {
- key: "NAME",
- get: function get() {
- return NAME$3;
- }
- }, {
- key: "DATA_KEY",
- get: function get() {
- return DATA_KEY$3;
- }
- }, {
- key: "Event",
- get: function get() {
- return Event;
- }
- }, {
- key: "EVENT_KEY",
- get: function get() {
- return EVENT_KEY$3;
- }
- }, {
- key: "DefaultType",
- get: function get() {
- return DefaultType$2;
- }
- }]);
-
- return Popover;
- }(Tooltip);
- /**
- * jQuery
- */
-
-
- $__default["default"].fn[NAME$3] = Popover._jQueryInterface;
- $__default["default"].fn[NAME$3].Constructor = Popover;
-
- $__default["default"].fn[NAME$3].noConflict = function () {
- $__default["default"].fn[NAME$3] = JQUERY_NO_CONFLICT$3;
- return Popover._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$2 = 'scrollspy';
- var VERSION$2 = '4.6.1';
- var DATA_KEY$2 = 'bs.scrollspy';
- var EVENT_KEY$2 = "." + DATA_KEY$2;
- var DATA_API_KEY$1 = '.data-api';
- var JQUERY_NO_CONFLICT$2 = $__default["default"].fn[NAME$2];
- var CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item';
- var CLASS_NAME_ACTIVE$1 = 'active';
- var EVENT_ACTIVATE = "activate" + EVENT_KEY$2;
- var EVENT_SCROLL = "scroll" + EVENT_KEY$2;
- var EVENT_LOAD_DATA_API = "load" + EVENT_KEY$2 + DATA_API_KEY$1;
- var METHOD_OFFSET = 'offset';
- var METHOD_POSITION = 'position';
- var SELECTOR_DATA_SPY = '[data-spy="scroll"]';
- var SELECTOR_NAV_LIST_GROUP$1 = '.nav, .list-group';
- var SELECTOR_NAV_LINKS = '.nav-link';
- var SELECTOR_NAV_ITEMS = '.nav-item';
- var SELECTOR_LIST_ITEMS = '.list-group-item';
- var SELECTOR_DROPDOWN$1 = '.dropdown';
- var SELECTOR_DROPDOWN_ITEMS = '.dropdown-item';
- var SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle';
- var Default$1 = {
- offset: 10,
- method: 'auto',
- target: ''
- };
- var DefaultType$1 = {
- offset: 'number',
- method: 'string',
- target: '(string|element)'
- };
- /**
- * Class definition
- */
-
- var ScrollSpy = /*#__PURE__*/function () {
- function ScrollSpy(element, config) {
- var _this = this;
-
- this._element = element;
- this._scrollElement = element.tagName === 'BODY' ? window : element;
- this._config = this._getConfig(config);
- this._selector = this._config.target + " " + SELECTOR_NAV_LINKS + "," + (this._config.target + " " + SELECTOR_LIST_ITEMS + ",") + (this._config.target + " " + SELECTOR_DROPDOWN_ITEMS);
- this._offsets = [];
- this._targets = [];
- this._activeTarget = null;
- this._scrollHeight = 0;
- $__default["default"](this._scrollElement).on(EVENT_SCROLL, function (event) {
- return _this._process(event);
- });
- this.refresh();
-
- this._process();
- } // Getters
-
-
- var _proto = ScrollSpy.prototype;
-
- // Public
- _proto.refresh = function refresh() {
- var _this2 = this;
-
- var autoMethod = this._scrollElement === this._scrollElement.window ? METHOD_OFFSET : METHOD_POSITION;
- var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;
- var offsetBase = offsetMethod === METHOD_POSITION ? this._getScrollTop() : 0;
- this._offsets = [];
- this._targets = [];
- this._scrollHeight = this._getScrollHeight();
- var targets = [].slice.call(document.querySelectorAll(this._selector));
- targets.map(function (element) {
- var target;
- var targetSelector = Util.getSelectorFromElement(element);
-
- if (targetSelector) {
- target = document.querySelector(targetSelector);
- }
-
- if (target) {
- var targetBCR = target.getBoundingClientRect();
-
- if (targetBCR.width || targetBCR.height) {
- // TODO (fat): remove sketch reliance on jQuery position/offset
- return [$__default["default"](target)[offsetMethod]().top + offsetBase, targetSelector];
- }
- }
-
- return null;
- }).filter(function (item) {
- return item;
- }).sort(function (a, b) {
- return a[0] - b[0];
- }).forEach(function (item) {
- _this2._offsets.push(item[0]);
-
- _this2._targets.push(item[1]);
- });
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$2);
- $__default["default"](this._scrollElement).off(EVENT_KEY$2);
- this._element = null;
- this._scrollElement = null;
- this._config = null;
- this._selector = null;
- this._offsets = null;
- this._targets = null;
- this._activeTarget = null;
- this._scrollHeight = null;
- } // Private
- ;
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default$1, typeof config === 'object' && config ? config : {});
-
- if (typeof config.target !== 'string' && Util.isElement(config.target)) {
- var id = $__default["default"](config.target).attr('id');
-
- if (!id) {
- id = Util.getUID(NAME$2);
- $__default["default"](config.target).attr('id', id);
- }
-
- config.target = "#" + id;
- }
-
- Util.typeCheckConfig(NAME$2, config, DefaultType$1);
- return config;
- };
-
- _proto._getScrollTop = function _getScrollTop() {
- return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;
- };
-
- _proto._getScrollHeight = function _getScrollHeight() {
- return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);
- };
-
- _proto._getOffsetHeight = function _getOffsetHeight() {
- return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;
- };
-
- _proto._process = function _process() {
- var scrollTop = this._getScrollTop() + this._config.offset;
-
- var scrollHeight = this._getScrollHeight();
-
- var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();
-
- if (this._scrollHeight !== scrollHeight) {
- this.refresh();
- }
-
- if (scrollTop >= maxScroll) {
- var target = this._targets[this._targets.length - 1];
-
- if (this._activeTarget !== target) {
- this._activate(target);
- }
-
- return;
- }
-
- if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {
- this._activeTarget = null;
-
- this._clear();
-
- return;
- }
-
- for (var i = this._offsets.length; i--;) {
- var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);
-
- if (isActiveTarget) {
- this._activate(this._targets[i]);
- }
- }
- };
-
- _proto._activate = function _activate(target) {
- this._activeTarget = target;
-
- this._clear();
-
- var queries = this._selector.split(',').map(function (selector) {
- return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]";
- });
-
- var $link = $__default["default"]([].slice.call(document.querySelectorAll(queries.join(','))));
-
- if ($link.hasClass(CLASS_NAME_DROPDOWN_ITEM)) {
- $link.closest(SELECTOR_DROPDOWN$1).find(SELECTOR_DROPDOWN_TOGGLE$1).addClass(CLASS_NAME_ACTIVE$1);
- $link.addClass(CLASS_NAME_ACTIVE$1);
- } else {
- // Set triggered link as active
- $link.addClass(CLASS_NAME_ACTIVE$1); // Set triggered links parents as active
- // With both and markup a parent is the previous sibling of any nav ancestor
-
- $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_LINKS + ", " + SELECTOR_LIST_ITEMS).addClass(CLASS_NAME_ACTIVE$1); // Handle special case when .nav-link is inside .nav-item
-
- $link.parents(SELECTOR_NAV_LIST_GROUP$1).prev(SELECTOR_NAV_ITEMS).children(SELECTOR_NAV_LINKS).addClass(CLASS_NAME_ACTIVE$1);
- }
-
- $__default["default"](this._scrollElement).trigger(EVENT_ACTIVATE, {
- relatedTarget: target
- });
- };
-
- _proto._clear = function _clear() {
- [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {
- return node.classList.contains(CLASS_NAME_ACTIVE$1);
- }).forEach(function (node) {
- return node.classList.remove(CLASS_NAME_ACTIVE$1);
- });
- } // Static
- ;
-
- ScrollSpy._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var data = $__default["default"](this).data(DATA_KEY$2);
-
- var _config = typeof config === 'object' && config;
-
- if (!data) {
- data = new ScrollSpy(this, _config);
- $__default["default"](this).data(DATA_KEY$2, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(ScrollSpy, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$2;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default$1;
- }
- }]);
-
- return ScrollSpy;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](window).on(EVENT_LOAD_DATA_API, function () {
- var scrollSpys = [].slice.call(document.querySelectorAll(SELECTOR_DATA_SPY));
- var scrollSpysLength = scrollSpys.length;
-
- for (var i = scrollSpysLength; i--;) {
- var $spy = $__default["default"](scrollSpys[i]);
-
- ScrollSpy._jQueryInterface.call($spy, $spy.data());
- }
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$2] = ScrollSpy._jQueryInterface;
- $__default["default"].fn[NAME$2].Constructor = ScrollSpy;
-
- $__default["default"].fn[NAME$2].noConflict = function () {
- $__default["default"].fn[NAME$2] = JQUERY_NO_CONFLICT$2;
- return ScrollSpy._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME$1 = 'tab';
- var VERSION$1 = '4.6.1';
- var DATA_KEY$1 = 'bs.tab';
- var EVENT_KEY$1 = "." + DATA_KEY$1;
- var DATA_API_KEY = '.data-api';
- var JQUERY_NO_CONFLICT$1 = $__default["default"].fn[NAME$1];
- var CLASS_NAME_DROPDOWN_MENU = 'dropdown-menu';
- var CLASS_NAME_ACTIVE = 'active';
- var CLASS_NAME_DISABLED = 'disabled';
- var CLASS_NAME_FADE$1 = 'fade';
- var CLASS_NAME_SHOW$1 = 'show';
- var EVENT_HIDE$1 = "hide" + EVENT_KEY$1;
- var EVENT_HIDDEN$1 = "hidden" + EVENT_KEY$1;
- var EVENT_SHOW$1 = "show" + EVENT_KEY$1;
- var EVENT_SHOWN$1 = "shown" + EVENT_KEY$1;
- var EVENT_CLICK_DATA_API = "click" + EVENT_KEY$1 + DATA_API_KEY;
- var SELECTOR_DROPDOWN = '.dropdown';
- var SELECTOR_NAV_LIST_GROUP = '.nav, .list-group';
- var SELECTOR_ACTIVE = '.active';
- var SELECTOR_ACTIVE_UL = '> li > .active';
- var SELECTOR_DATA_TOGGLE = '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]';
- var SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle';
- var SELECTOR_DROPDOWN_ACTIVE_CHILD = '> .dropdown-menu .active';
- /**
- * Class definition
- */
-
- var Tab = /*#__PURE__*/function () {
- function Tab(element) {
- this._element = element;
- } // Getters
-
-
- var _proto = Tab.prototype;
-
- // Public
- _proto.show = function show() {
- var _this = this;
-
- if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $__default["default"](this._element).hasClass(CLASS_NAME_ACTIVE) || $__default["default"](this._element).hasClass(CLASS_NAME_DISABLED)) {
- return;
- }
-
- var target;
- var previous;
- var listElement = $__default["default"](this._element).closest(SELECTOR_NAV_LIST_GROUP)[0];
- var selector = Util.getSelectorFromElement(this._element);
-
- if (listElement) {
- var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? SELECTOR_ACTIVE_UL : SELECTOR_ACTIVE;
- previous = $__default["default"].makeArray($__default["default"](listElement).find(itemSelector));
- previous = previous[previous.length - 1];
- }
-
- var hideEvent = $__default["default"].Event(EVENT_HIDE$1, {
- relatedTarget: this._element
- });
- var showEvent = $__default["default"].Event(EVENT_SHOW$1, {
- relatedTarget: previous
- });
-
- if (previous) {
- $__default["default"](previous).trigger(hideEvent);
- }
-
- $__default["default"](this._element).trigger(showEvent);
-
- if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {
- return;
- }
-
- if (selector) {
- target = document.querySelector(selector);
- }
-
- this._activate(this._element, listElement);
-
- var complete = function complete() {
- var hiddenEvent = $__default["default"].Event(EVENT_HIDDEN$1, {
- relatedTarget: _this._element
- });
- var shownEvent = $__default["default"].Event(EVENT_SHOWN$1, {
- relatedTarget: previous
- });
- $__default["default"](previous).trigger(hiddenEvent);
- $__default["default"](_this._element).trigger(shownEvent);
- };
-
- if (target) {
- this._activate(target, target.parentNode, complete);
- } else {
- complete();
- }
- };
-
- _proto.dispose = function dispose() {
- $__default["default"].removeData(this._element, DATA_KEY$1);
- this._element = null;
- } // Private
- ;
-
- _proto._activate = function _activate(element, container, callback) {
- var _this2 = this;
-
- var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $__default["default"](container).find(SELECTOR_ACTIVE_UL) : $__default["default"](container).children(SELECTOR_ACTIVE);
- var active = activeElements[0];
- var isTransitioning = callback && active && $__default["default"](active).hasClass(CLASS_NAME_FADE$1);
-
- var complete = function complete() {
- return _this2._transitionComplete(element, active, callback);
- };
-
- if (active && isTransitioning) {
- var transitionDuration = Util.getTransitionDurationFromElement(active);
- $__default["default"](active).removeClass(CLASS_NAME_SHOW$1).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
- };
-
- _proto._transitionComplete = function _transitionComplete(element, active, callback) {
- if (active) {
- $__default["default"](active).removeClass(CLASS_NAME_ACTIVE);
- var dropdownChild = $__default["default"](active.parentNode).find(SELECTOR_DROPDOWN_ACTIVE_CHILD)[0];
-
- if (dropdownChild) {
- $__default["default"](dropdownChild).removeClass(CLASS_NAME_ACTIVE);
- }
-
- if (active.getAttribute('role') === 'tab') {
- active.setAttribute('aria-selected', false);
- }
- }
-
- $__default["default"](element).addClass(CLASS_NAME_ACTIVE);
-
- if (element.getAttribute('role') === 'tab') {
- element.setAttribute('aria-selected', true);
- }
-
- Util.reflow(element);
-
- if (element.classList.contains(CLASS_NAME_FADE$1)) {
- element.classList.add(CLASS_NAME_SHOW$1);
- }
-
- var parent = element.parentNode;
-
- if (parent && parent.nodeName === 'LI') {
- parent = parent.parentNode;
- }
-
- if (parent && $__default["default"](parent).hasClass(CLASS_NAME_DROPDOWN_MENU)) {
- var dropdownElement = $__default["default"](element).closest(SELECTOR_DROPDOWN)[0];
-
- if (dropdownElement) {
- var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(SELECTOR_DROPDOWN_TOGGLE));
- $__default["default"](dropdownToggleList).addClass(CLASS_NAME_ACTIVE);
- }
-
- element.setAttribute('aria-expanded', true);
- }
-
- if (callback) {
- callback();
- }
- } // Static
- ;
-
- Tab._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $this = $__default["default"](this);
- var data = $this.data(DATA_KEY$1);
-
- if (!data) {
- data = new Tab(this);
- $this.data(DATA_KEY$1, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config]();
- }
- });
- };
-
- _createClass(Tab, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION$1;
- }
- }]);
-
- return Tab;
- }();
- /**
- * Data API implementation
- */
-
-
- $__default["default"](document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) {
- event.preventDefault();
-
- Tab._jQueryInterface.call($__default["default"](this), 'show');
- });
- /**
- * jQuery
- */
-
- $__default["default"].fn[NAME$1] = Tab._jQueryInterface;
- $__default["default"].fn[NAME$1].Constructor = Tab;
-
- $__default["default"].fn[NAME$1].noConflict = function () {
- $__default["default"].fn[NAME$1] = JQUERY_NO_CONFLICT$1;
- return Tab._jQueryInterface;
- };
-
- /**
- * Constants
- */
-
- var NAME = 'toast';
- var VERSION = '4.6.1';
- var DATA_KEY = 'bs.toast';
- var EVENT_KEY = "." + DATA_KEY;
- var JQUERY_NO_CONFLICT = $__default["default"].fn[NAME];
- var CLASS_NAME_FADE = 'fade';
- var CLASS_NAME_HIDE = 'hide';
- var CLASS_NAME_SHOW = 'show';
- var CLASS_NAME_SHOWING = 'showing';
- var EVENT_CLICK_DISMISS = "click.dismiss" + EVENT_KEY;
- var EVENT_HIDE = "hide" + EVENT_KEY;
- var EVENT_HIDDEN = "hidden" + EVENT_KEY;
- var EVENT_SHOW = "show" + EVENT_KEY;
- var EVENT_SHOWN = "shown" + EVENT_KEY;
- var SELECTOR_DATA_DISMISS = '[data-dismiss="toast"]';
- var Default = {
- animation: true,
- autohide: true,
- delay: 500
- };
- var DefaultType = {
- animation: 'boolean',
- autohide: 'boolean',
- delay: 'number'
- };
- /**
- * Class definition
- */
-
- var Toast = /*#__PURE__*/function () {
- function Toast(element, config) {
- this._element = element;
- this._config = this._getConfig(config);
- this._timeout = null;
-
- this._setListeners();
- } // Getters
-
-
- var _proto = Toast.prototype;
-
- // Public
- _proto.show = function show() {
- var _this = this;
-
- var showEvent = $__default["default"].Event(EVENT_SHOW);
- $__default["default"](this._element).trigger(showEvent);
-
- if (showEvent.isDefaultPrevented()) {
- return;
- }
-
- this._clearTimeout();
-
- if (this._config.animation) {
- this._element.classList.add(CLASS_NAME_FADE);
- }
-
- var complete = function complete() {
- _this._element.classList.remove(CLASS_NAME_SHOWING);
-
- _this._element.classList.add(CLASS_NAME_SHOW);
-
- $__default["default"](_this._element).trigger(EVENT_SHOWN);
-
- if (_this._config.autohide) {
- _this._timeout = setTimeout(function () {
- _this.hide();
- }, _this._config.delay);
- }
- };
-
- this._element.classList.remove(CLASS_NAME_HIDE);
-
- Util.reflow(this._element);
-
- this._element.classList.add(CLASS_NAME_SHOWING);
-
- if (this._config.animation) {
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
- $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
- };
-
- _proto.hide = function hide() {
- if (!this._element.classList.contains(CLASS_NAME_SHOW)) {
- return;
- }
-
- var hideEvent = $__default["default"].Event(EVENT_HIDE);
- $__default["default"](this._element).trigger(hideEvent);
-
- if (hideEvent.isDefaultPrevented()) {
- return;
- }
-
- this._close();
- };
-
- _proto.dispose = function dispose() {
- this._clearTimeout();
-
- if (this._element.classList.contains(CLASS_NAME_SHOW)) {
- this._element.classList.remove(CLASS_NAME_SHOW);
- }
-
- $__default["default"](this._element).off(EVENT_CLICK_DISMISS);
- $__default["default"].removeData(this._element, DATA_KEY);
- this._element = null;
- this._config = null;
- } // Private
- ;
-
- _proto._getConfig = function _getConfig(config) {
- config = _extends({}, Default, $__default["default"](this._element).data(), typeof config === 'object' && config ? config : {});
- Util.typeCheckConfig(NAME, config, this.constructor.DefaultType);
- return config;
- };
-
- _proto._setListeners = function _setListeners() {
- var _this2 = this;
-
- $__default["default"](this._element).on(EVENT_CLICK_DISMISS, SELECTOR_DATA_DISMISS, function () {
- return _this2.hide();
- });
- };
-
- _proto._close = function _close() {
- var _this3 = this;
-
- var complete = function complete() {
- _this3._element.classList.add(CLASS_NAME_HIDE);
-
- $__default["default"](_this3._element).trigger(EVENT_HIDDEN);
- };
-
- this._element.classList.remove(CLASS_NAME_SHOW);
-
- if (this._config.animation) {
- var transitionDuration = Util.getTransitionDurationFromElement(this._element);
- $__default["default"](this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);
- } else {
- complete();
- }
- };
-
- _proto._clearTimeout = function _clearTimeout() {
- clearTimeout(this._timeout);
- this._timeout = null;
- } // Static
- ;
-
- Toast._jQueryInterface = function _jQueryInterface(config) {
- return this.each(function () {
- var $element = $__default["default"](this);
- var data = $element.data(DATA_KEY);
-
- var _config = typeof config === 'object' && config;
-
- if (!data) {
- data = new Toast(this, _config);
- $element.data(DATA_KEY, data);
- }
-
- if (typeof config === 'string') {
- if (typeof data[config] === 'undefined') {
- throw new TypeError("No method named \"" + config + "\"");
- }
-
- data[config](this);
- }
- });
- };
-
- _createClass(Toast, null, [{
- key: "VERSION",
- get: function get() {
- return VERSION;
- }
- }, {
- key: "DefaultType",
- get: function get() {
- return DefaultType;
- }
- }, {
- key: "Default",
- get: function get() {
- return Default;
- }
- }]);
-
- return Toast;
- }();
- /**
- * jQuery
- */
-
-
- $__default["default"].fn[NAME] = Toast._jQueryInterface;
- $__default["default"].fn[NAME].Constructor = Toast;
-
- $__default["default"].fn[NAME].noConflict = function () {
- $__default["default"].fn[NAME] = JQUERY_NO_CONFLICT;
- return Toast._jQueryInterface;
- };
-
- exports.Alert = Alert;
- exports.Button = Button;
- exports.Carousel = Carousel;
- exports.Collapse = Collapse;
- exports.Dropdown = Dropdown;
- exports.Modal = Modal;
- exports.Popover = Popover;
- exports.Scrollspy = ScrollSpy;
- exports.Tab = Tab;
- exports.Toast = Toast;
- exports.Tooltip = Tooltip;
- exports.Util = Util;
-
- Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
-//# sourceMappingURL=bootstrap.js.map
-
-
-/***/ }),
-
-/***/ "./node_modules/chart.js/dist/Chart.js":
-/*!*********************************************!*\
- !*** ./node_modules/chart.js/dist/Chart.js ***!
- \*********************************************/
-/***/ (function(module, __unused_webpack_exports, __webpack_require__) {
-
-/*!
- * Chart.js v2.9.4
- * https://www.chartjs.org
- * (c) 2020 Chart.js Contributors
- * Released under the MIT License
- */
-(function (global, factory) {
- true ? module.exports = factory(function() { try { return __webpack_require__(/*! moment */ "./node_modules/moment/moment.js"); } catch(e) { } }()) :
-0;
-}(this, (function (moment) { 'use strict';
-
-moment = moment && moment.hasOwnProperty('default') ? moment['default'] : moment;
-
-function createCommonjsModule(fn, module) {
- return module = { exports: {} }, fn(module, module.exports), module.exports;
-}
-
-function getCjsExportFromNamespace (n) {
- return n && n['default'] || n;
-}
-
-var colorName = {
- "aliceblue": [240, 248, 255],
- "antiquewhite": [250, 235, 215],
- "aqua": [0, 255, 255],
- "aquamarine": [127, 255, 212],
- "azure": [240, 255, 255],
- "beige": [245, 245, 220],
- "bisque": [255, 228, 196],
- "black": [0, 0, 0],
- "blanchedalmond": [255, 235, 205],
- "blue": [0, 0, 255],
- "blueviolet": [138, 43, 226],
- "brown": [165, 42, 42],
- "burlywood": [222, 184, 135],
- "cadetblue": [95, 158, 160],
- "chartreuse": [127, 255, 0],
- "chocolate": [210, 105, 30],
- "coral": [255, 127, 80],
- "cornflowerblue": [100, 149, 237],
- "cornsilk": [255, 248, 220],
- "crimson": [220, 20, 60],
- "cyan": [0, 255, 255],
- "darkblue": [0, 0, 139],
- "darkcyan": [0, 139, 139],
- "darkgoldenrod": [184, 134, 11],
- "darkgray": [169, 169, 169],
- "darkgreen": [0, 100, 0],
- "darkgrey": [169, 169, 169],
- "darkkhaki": [189, 183, 107],
- "darkmagenta": [139, 0, 139],
- "darkolivegreen": [85, 107, 47],
- "darkorange": [255, 140, 0],
- "darkorchid": [153, 50, 204],
- "darkred": [139, 0, 0],
- "darksalmon": [233, 150, 122],
- "darkseagreen": [143, 188, 143],
- "darkslateblue": [72, 61, 139],
- "darkslategray": [47, 79, 79],
- "darkslategrey": [47, 79, 79],
- "darkturquoise": [0, 206, 209],
- "darkviolet": [148, 0, 211],
- "deeppink": [255, 20, 147],
- "deepskyblue": [0, 191, 255],
- "dimgray": [105, 105, 105],
- "dimgrey": [105, 105, 105],
- "dodgerblue": [30, 144, 255],
- "firebrick": [178, 34, 34],
- "floralwhite": [255, 250, 240],
- "forestgreen": [34, 139, 34],
- "fuchsia": [255, 0, 255],
- "gainsboro": [220, 220, 220],
- "ghostwhite": [248, 248, 255],
- "gold": [255, 215, 0],
- "goldenrod": [218, 165, 32],
- "gray": [128, 128, 128],
- "green": [0, 128, 0],
- "greenyellow": [173, 255, 47],
- "grey": [128, 128, 128],
- "honeydew": [240, 255, 240],
- "hotpink": [255, 105, 180],
- "indianred": [205, 92, 92],
- "indigo": [75, 0, 130],
- "ivory": [255, 255, 240],
- "khaki": [240, 230, 140],
- "lavender": [230, 230, 250],
- "lavenderblush": [255, 240, 245],
- "lawngreen": [124, 252, 0],
- "lemonchiffon": [255, 250, 205],
- "lightblue": [173, 216, 230],
- "lightcoral": [240, 128, 128],
- "lightcyan": [224, 255, 255],
- "lightgoldenrodyellow": [250, 250, 210],
- "lightgray": [211, 211, 211],
- "lightgreen": [144, 238, 144],
- "lightgrey": [211, 211, 211],
- "lightpink": [255, 182, 193],
- "lightsalmon": [255, 160, 122],
- "lightseagreen": [32, 178, 170],
- "lightskyblue": [135, 206, 250],
- "lightslategray": [119, 136, 153],
- "lightslategrey": [119, 136, 153],
- "lightsteelblue": [176, 196, 222],
- "lightyellow": [255, 255, 224],
- "lime": [0, 255, 0],
- "limegreen": [50, 205, 50],
- "linen": [250, 240, 230],
- "magenta": [255, 0, 255],
- "maroon": [128, 0, 0],
- "mediumaquamarine": [102, 205, 170],
- "mediumblue": [0, 0, 205],
- "mediumorchid": [186, 85, 211],
- "mediumpurple": [147, 112, 219],
- "mediumseagreen": [60, 179, 113],
- "mediumslateblue": [123, 104, 238],
- "mediumspringgreen": [0, 250, 154],
- "mediumturquoise": [72, 209, 204],
- "mediumvioletred": [199, 21, 133],
- "midnightblue": [25, 25, 112],
- "mintcream": [245, 255, 250],
- "mistyrose": [255, 228, 225],
- "moccasin": [255, 228, 181],
- "navajowhite": [255, 222, 173],
- "navy": [0, 0, 128],
- "oldlace": [253, 245, 230],
- "olive": [128, 128, 0],
- "olivedrab": [107, 142, 35],
- "orange": [255, 165, 0],
- "orangered": [255, 69, 0],
- "orchid": [218, 112, 214],
- "palegoldenrod": [238, 232, 170],
- "palegreen": [152, 251, 152],
- "paleturquoise": [175, 238, 238],
- "palevioletred": [219, 112, 147],
- "papayawhip": [255, 239, 213],
- "peachpuff": [255, 218, 185],
- "peru": [205, 133, 63],
- "pink": [255, 192, 203],
- "plum": [221, 160, 221],
- "powderblue": [176, 224, 230],
- "purple": [128, 0, 128],
- "rebeccapurple": [102, 51, 153],
- "red": [255, 0, 0],
- "rosybrown": [188, 143, 143],
- "royalblue": [65, 105, 225],
- "saddlebrown": [139, 69, 19],
- "salmon": [250, 128, 114],
- "sandybrown": [244, 164, 96],
- "seagreen": [46, 139, 87],
- "seashell": [255, 245, 238],
- "sienna": [160, 82, 45],
- "silver": [192, 192, 192],
- "skyblue": [135, 206, 235],
- "slateblue": [106, 90, 205],
- "slategray": [112, 128, 144],
- "slategrey": [112, 128, 144],
- "snow": [255, 250, 250],
- "springgreen": [0, 255, 127],
- "steelblue": [70, 130, 180],
- "tan": [210, 180, 140],
- "teal": [0, 128, 128],
- "thistle": [216, 191, 216],
- "tomato": [255, 99, 71],
- "turquoise": [64, 224, 208],
- "violet": [238, 130, 238],
- "wheat": [245, 222, 179],
- "white": [255, 255, 255],
- "whitesmoke": [245, 245, 245],
- "yellow": [255, 255, 0],
- "yellowgreen": [154, 205, 50]
-};
-
-var conversions = createCommonjsModule(function (module) {
-/* MIT license */
-
-
-// NOTE: conversions should only return primitive values (i.e. arrays, or
-// values that give correct `typeof` results).
-// do not use box values types (i.e. Number(), String(), etc.)
-
-var reverseKeywords = {};
-for (var key in colorName) {
- if (colorName.hasOwnProperty(key)) {
- reverseKeywords[colorName[key]] = key;
- }
-}
-
-var convert = module.exports = {
- rgb: {channels: 3, labels: 'rgb'},
- hsl: {channels: 3, labels: 'hsl'},
- hsv: {channels: 3, labels: 'hsv'},
- hwb: {channels: 3, labels: 'hwb'},
- cmyk: {channels: 4, labels: 'cmyk'},
- xyz: {channels: 3, labels: 'xyz'},
- lab: {channels: 3, labels: 'lab'},
- lch: {channels: 3, labels: 'lch'},
- hex: {channels: 1, labels: ['hex']},
- keyword: {channels: 1, labels: ['keyword']},
- ansi16: {channels: 1, labels: ['ansi16']},
- ansi256: {channels: 1, labels: ['ansi256']},
- hcg: {channels: 3, labels: ['h', 'c', 'g']},
- apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
- gray: {channels: 1, labels: ['gray']}
-};
-
-// hide .channels and .labels properties
-for (var model in convert) {
- if (convert.hasOwnProperty(model)) {
- if (!('channels' in convert[model])) {
- throw new Error('missing channels property: ' + model);
- }
-
- if (!('labels' in convert[model])) {
- throw new Error('missing channel labels property: ' + model);
- }
-
- if (convert[model].labels.length !== convert[model].channels) {
- throw new Error('channel and label counts mismatch: ' + model);
- }
-
- var channels = convert[model].channels;
- var labels = convert[model].labels;
- delete convert[model].channels;
- delete convert[model].labels;
- Object.defineProperty(convert[model], 'channels', {value: channels});
- Object.defineProperty(convert[model], 'labels', {value: labels});
- }
-}
-
-convert.rgb.hsl = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var min = Math.min(r, g, b);
- var max = Math.max(r, g, b);
- var delta = max - min;
- var h;
- var s;
- var l;
-
- if (max === min) {
- h = 0;
- } else if (r === max) {
- h = (g - b) / delta;
- } else if (g === max) {
- h = 2 + (b - r) / delta;
- } else if (b === max) {
- h = 4 + (r - g) / delta;
- }
-
- h = Math.min(h * 60, 360);
-
- if (h < 0) {
- h += 360;
- }
-
- l = (min + max) / 2;
-
- if (max === min) {
- s = 0;
- } else if (l <= 0.5) {
- s = delta / (max + min);
- } else {
- s = delta / (2 - max - min);
- }
-
- return [h, s * 100, l * 100];
-};
-
-convert.rgb.hsv = function (rgb) {
- var rdif;
- var gdif;
- var bdif;
- var h;
- var s;
-
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var v = Math.max(r, g, b);
- var diff = v - Math.min(r, g, b);
- var diffc = function (c) {
- return (v - c) / 6 / diff + 1 / 2;
- };
-
- if (diff === 0) {
- h = s = 0;
- } else {
- s = diff / v;
- rdif = diffc(r);
- gdif = diffc(g);
- bdif = diffc(b);
-
- if (r === v) {
- h = bdif - gdif;
- } else if (g === v) {
- h = (1 / 3) + rdif - bdif;
- } else if (b === v) {
- h = (2 / 3) + gdif - rdif;
- }
- if (h < 0) {
- h += 1;
- } else if (h > 1) {
- h -= 1;
- }
- }
-
- return [
- h * 360,
- s * 100,
- v * 100
- ];
-};
-
-convert.rgb.hwb = function (rgb) {
- var r = rgb[0];
- var g = rgb[1];
- var b = rgb[2];
- var h = convert.rgb.hsl(rgb)[0];
- var w = 1 / 255 * Math.min(r, Math.min(g, b));
-
- b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
-
- return [h, w * 100, b * 100];
-};
-
-convert.rgb.cmyk = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var c;
- var m;
- var y;
- var k;
-
- k = Math.min(1 - r, 1 - g, 1 - b);
- c = (1 - r - k) / (1 - k) || 0;
- m = (1 - g - k) / (1 - k) || 0;
- y = (1 - b - k) / (1 - k) || 0;
-
- return [c * 100, m * 100, y * 100, k * 100];
-};
-
-/**
- * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
- * */
-function comparativeDistance(x, y) {
- return (
- Math.pow(x[0] - y[0], 2) +
- Math.pow(x[1] - y[1], 2) +
- Math.pow(x[2] - y[2], 2)
- );
-}
-
-convert.rgb.keyword = function (rgb) {
- var reversed = reverseKeywords[rgb];
- if (reversed) {
- return reversed;
- }
-
- var currentClosestDistance = Infinity;
- var currentClosestKeyword;
-
- for (var keyword in colorName) {
- if (colorName.hasOwnProperty(keyword)) {
- var value = colorName[keyword];
-
- // Compute comparative distance
- var distance = comparativeDistance(rgb, value);
-
- // Check if its less, if so set as closest
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestKeyword = keyword;
- }
- }
- }
-
- return currentClosestKeyword;
-};
-
-convert.keyword.rgb = function (keyword) {
- return colorName[keyword];
-};
-
-convert.rgb.xyz = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
-
- // assume sRGB
- r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
- g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
- b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
-
- var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
- var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
- var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
-
- return [x * 100, y * 100, z * 100];
-};
-
-convert.rgb.lab = function (rgb) {
- var xyz = convert.rgb.xyz(rgb);
- var x = xyz[0];
- var y = xyz[1];
- var z = xyz[2];
- var l;
- var a;
- var b;
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
-
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
-
- return [l, a, b];
-};
-
-convert.hsl.rgb = function (hsl) {
- var h = hsl[0] / 360;
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var t1;
- var t2;
- var t3;
- var rgb;
- var val;
-
- if (s === 0) {
- val = l * 255;
- return [val, val, val];
- }
-
- if (l < 0.5) {
- t2 = l * (1 + s);
- } else {
- t2 = l + s - l * s;
- }
-
- t1 = 2 * l - t2;
-
- rgb = [0, 0, 0];
- for (var i = 0; i < 3; i++) {
- t3 = h + 1 / 3 * -(i - 1);
- if (t3 < 0) {
- t3++;
- }
- if (t3 > 1) {
- t3--;
- }
-
- if (6 * t3 < 1) {
- val = t1 + (t2 - t1) * 6 * t3;
- } else if (2 * t3 < 1) {
- val = t2;
- } else if (3 * t3 < 2) {
- val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
- } else {
- val = t1;
- }
-
- rgb[i] = val * 255;
- }
-
- return rgb;
-};
-
-convert.hsl.hsv = function (hsl) {
- var h = hsl[0];
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var smin = s;
- var lmin = Math.max(l, 0.01);
- var sv;
- var v;
-
- l *= 2;
- s *= (l <= 1) ? l : 2 - l;
- smin *= lmin <= 1 ? lmin : 2 - lmin;
- v = (l + s) / 2;
- sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
-
- return [h, sv * 100, v * 100];
-};
-
-convert.hsv.rgb = function (hsv) {
- var h = hsv[0] / 60;
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
- var hi = Math.floor(h) % 6;
-
- var f = h - Math.floor(h);
- var p = 255 * v * (1 - s);
- var q = 255 * v * (1 - (s * f));
- var t = 255 * v * (1 - (s * (1 - f)));
- v *= 255;
-
- switch (hi) {
- case 0:
- return [v, t, p];
- case 1:
- return [q, v, p];
- case 2:
- return [p, v, t];
- case 3:
- return [p, q, v];
- case 4:
- return [t, p, v];
- case 5:
- return [v, p, q];
- }
-};
-
-convert.hsv.hsl = function (hsv) {
- var h = hsv[0];
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
- var vmin = Math.max(v, 0.01);
- var lmin;
- var sl;
- var l;
-
- l = (2 - s) * v;
- lmin = (2 - s) * vmin;
- sl = s * vmin;
- sl /= (lmin <= 1) ? lmin : 2 - lmin;
- sl = sl || 0;
- l /= 2;
-
- return [h, sl * 100, l * 100];
-};
-
-// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
-convert.hwb.rgb = function (hwb) {
- var h = hwb[0] / 360;
- var wh = hwb[1] / 100;
- var bl = hwb[2] / 100;
- var ratio = wh + bl;
- var i;
- var v;
- var f;
- var n;
-
- // wh + bl cant be > 1
- if (ratio > 1) {
- wh /= ratio;
- bl /= ratio;
- }
-
- i = Math.floor(6 * h);
- v = 1 - bl;
- f = 6 * h - i;
-
- if ((i & 0x01) !== 0) {
- f = 1 - f;
- }
-
- n = wh + f * (v - wh); // linear interpolation
-
- var r;
- var g;
- var b;
- switch (i) {
- default:
- case 6:
- case 0: r = v; g = n; b = wh; break;
- case 1: r = n; g = v; b = wh; break;
- case 2: r = wh; g = v; b = n; break;
- case 3: r = wh; g = n; b = v; break;
- case 4: r = n; g = wh; b = v; break;
- case 5: r = v; g = wh; b = n; break;
- }
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert.cmyk.rgb = function (cmyk) {
- var c = cmyk[0] / 100;
- var m = cmyk[1] / 100;
- var y = cmyk[2] / 100;
- var k = cmyk[3] / 100;
- var r;
- var g;
- var b;
-
- r = 1 - Math.min(1, c * (1 - k) + k);
- g = 1 - Math.min(1, m * (1 - k) + k);
- b = 1 - Math.min(1, y * (1 - k) + k);
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert.xyz.rgb = function (xyz) {
- var x = xyz[0] / 100;
- var y = xyz[1] / 100;
- var z = xyz[2] / 100;
- var r;
- var g;
- var b;
-
- r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
- g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
- b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
-
- // assume sRGB
- r = r > 0.0031308
- ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
- : r * 12.92;
-
- g = g > 0.0031308
- ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
- : g * 12.92;
-
- b = b > 0.0031308
- ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
- : b * 12.92;
-
- r = Math.min(Math.max(0, r), 1);
- g = Math.min(Math.max(0, g), 1);
- b = Math.min(Math.max(0, b), 1);
-
- return [r * 255, g * 255, b * 255];
-};
-
-convert.xyz.lab = function (xyz) {
- var x = xyz[0];
- var y = xyz[1];
- var z = xyz[2];
- var l;
- var a;
- var b;
-
- x /= 95.047;
- y /= 100;
- z /= 108.883;
-
- x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
-
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
-
- return [l, a, b];
-};
-
-convert.lab.xyz = function (lab) {
- var l = lab[0];
- var a = lab[1];
- var b = lab[2];
- var x;
- var y;
- var z;
-
- y = (l + 16) / 116;
- x = a / 500 + y;
- z = y - b / 200;
-
- var y2 = Math.pow(y, 3);
- var x2 = Math.pow(x, 3);
- var z2 = Math.pow(z, 3);
- y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
- x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
- z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
-
- x *= 95.047;
- y *= 100;
- z *= 108.883;
-
- return [x, y, z];
-};
-
-convert.lab.lch = function (lab) {
- var l = lab[0];
- var a = lab[1];
- var b = lab[2];
- var hr;
- var h;
- var c;
-
- hr = Math.atan2(b, a);
- h = hr * 360 / 2 / Math.PI;
-
- if (h < 0) {
- h += 360;
- }
-
- c = Math.sqrt(a * a + b * b);
-
- return [l, c, h];
-};
-
-convert.lch.lab = function (lch) {
- var l = lch[0];
- var c = lch[1];
- var h = lch[2];
- var a;
- var b;
- var hr;
-
- hr = h / 360 * 2 * Math.PI;
- a = c * Math.cos(hr);
- b = c * Math.sin(hr);
-
- return [l, a, b];
-};
-
-convert.rgb.ansi16 = function (args) {
- var r = args[0];
- var g = args[1];
- var b = args[2];
- var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
-
- value = Math.round(value / 50);
-
- if (value === 0) {
- return 30;
- }
-
- var ansi = 30
- + ((Math.round(b / 255) << 2)
- | (Math.round(g / 255) << 1)
- | Math.round(r / 255));
-
- if (value === 2) {
- ansi += 60;
- }
-
- return ansi;
-};
-
-convert.hsv.ansi16 = function (args) {
- // optimization here; we already know the value and don't need to get
- // it converted for us.
- return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
-};
-
-convert.rgb.ansi256 = function (args) {
- var r = args[0];
- var g = args[1];
- var b = args[2];
-
- // we use the extended greyscale palette here, with the exception of
- // black and white. normal palette only has 4 greyscale shades.
- if (r === g && g === b) {
- if (r < 8) {
- return 16;
- }
-
- if (r > 248) {
- return 231;
- }
-
- return Math.round(((r - 8) / 247) * 24) + 232;
- }
-
- var ansi = 16
- + (36 * Math.round(r / 255 * 5))
- + (6 * Math.round(g / 255 * 5))
- + Math.round(b / 255 * 5);
-
- return ansi;
-};
-
-convert.ansi16.rgb = function (args) {
- var color = args % 10;
-
- // handle greyscale
- if (color === 0 || color === 7) {
- if (args > 50) {
- color += 3.5;
- }
-
- color = color / 10.5 * 255;
-
- return [color, color, color];
- }
-
- var mult = (~~(args > 50) + 1) * 0.5;
- var r = ((color & 1) * mult) * 255;
- var g = (((color >> 1) & 1) * mult) * 255;
- var b = (((color >> 2) & 1) * mult) * 255;
-
- return [r, g, b];
-};
-
-convert.ansi256.rgb = function (args) {
- // handle greyscale
- if (args >= 232) {
- var c = (args - 232) * 10 + 8;
- return [c, c, c];
- }
-
- args -= 16;
-
- var rem;
- var r = Math.floor(args / 36) / 5 * 255;
- var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
- var b = (rem % 6) / 5 * 255;
-
- return [r, g, b];
-};
-
-convert.rgb.hex = function (args) {
- var integer = ((Math.round(args[0]) & 0xFF) << 16)
- + ((Math.round(args[1]) & 0xFF) << 8)
- + (Math.round(args[2]) & 0xFF);
-
- var string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert.hex.rgb = function (args) {
- var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
- if (!match) {
- return [0, 0, 0];
- }
-
- var colorString = match[0];
-
- if (match[0].length === 3) {
- colorString = colorString.split('').map(function (char) {
- return char + char;
- }).join('');
- }
-
- var integer = parseInt(colorString, 16);
- var r = (integer >> 16) & 0xFF;
- var g = (integer >> 8) & 0xFF;
- var b = integer & 0xFF;
-
- return [r, g, b];
-};
-
-convert.rgb.hcg = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var max = Math.max(Math.max(r, g), b);
- var min = Math.min(Math.min(r, g), b);
- var chroma = (max - min);
- var grayscale;
- var hue;
-
- if (chroma < 1) {
- grayscale = min / (1 - chroma);
- } else {
- grayscale = 0;
- }
-
- if (chroma <= 0) {
- hue = 0;
- } else
- if (max === r) {
- hue = ((g - b) / chroma) % 6;
- } else
- if (max === g) {
- hue = 2 + (b - r) / chroma;
- } else {
- hue = 4 + (r - g) / chroma + 4;
- }
-
- hue /= 6;
- hue %= 1;
-
- return [hue * 360, chroma * 100, grayscale * 100];
-};
-
-convert.hsl.hcg = function (hsl) {
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var c = 1;
- var f = 0;
-
- if (l < 0.5) {
- c = 2.0 * s * l;
- } else {
- c = 2.0 * s * (1.0 - l);
- }
-
- if (c < 1.0) {
- f = (l - 0.5 * c) / (1.0 - c);
- }
-
- return [hsl[0], c * 100, f * 100];
-};
-
-convert.hsv.hcg = function (hsv) {
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
-
- var c = s * v;
- var f = 0;
-
- if (c < 1.0) {
- f = (v - c) / (1 - c);
- }
-
- return [hsv[0], c * 100, f * 100];
-};
-
-convert.hcg.rgb = function (hcg) {
- var h = hcg[0] / 360;
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
-
- if (c === 0.0) {
- return [g * 255, g * 255, g * 255];
- }
-
- var pure = [0, 0, 0];
- var hi = (h % 1) * 6;
- var v = hi % 1;
- var w = 1 - v;
- var mg = 0;
-
- switch (Math.floor(hi)) {
- case 0:
- pure[0] = 1; pure[1] = v; pure[2] = 0; break;
- case 1:
- pure[0] = w; pure[1] = 1; pure[2] = 0; break;
- case 2:
- pure[0] = 0; pure[1] = 1; pure[2] = v; break;
- case 3:
- pure[0] = 0; pure[1] = w; pure[2] = 1; break;
- case 4:
- pure[0] = v; pure[1] = 0; pure[2] = 1; break;
- default:
- pure[0] = 1; pure[1] = 0; pure[2] = w;
- }
-
- mg = (1.0 - c) * g;
-
- return [
- (c * pure[0] + mg) * 255,
- (c * pure[1] + mg) * 255,
- (c * pure[2] + mg) * 255
- ];
-};
-
-convert.hcg.hsv = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
-
- var v = c + g * (1.0 - c);
- var f = 0;
-
- if (v > 0.0) {
- f = c / v;
- }
-
- return [hcg[0], f * 100, v * 100];
-};
-
-convert.hcg.hsl = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
-
- var l = g * (1.0 - c) + 0.5 * c;
- var s = 0;
-
- if (l > 0.0 && l < 0.5) {
- s = c / (2 * l);
- } else
- if (l >= 0.5 && l < 1.0) {
- s = c / (2 * (1 - l));
- }
-
- return [hcg[0], s * 100, l * 100];
-};
-
-convert.hcg.hwb = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
- var v = c + g * (1.0 - c);
- return [hcg[0], (v - c) * 100, (1 - v) * 100];
-};
-
-convert.hwb.hcg = function (hwb) {
- var w = hwb[1] / 100;
- var b = hwb[2] / 100;
- var v = 1 - b;
- var c = v - w;
- var g = 0;
-
- if (c < 1) {
- g = (v - c) / (1 - c);
- }
-
- return [hwb[0], c * 100, g * 100];
-};
-
-convert.apple.rgb = function (apple) {
- return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
-};
-
-convert.rgb.apple = function (rgb) {
- return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
-};
-
-convert.gray.rgb = function (args) {
- return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
-};
-
-convert.gray.hsl = convert.gray.hsv = function (args) {
- return [0, 0, args[0]];
-};
-
-convert.gray.hwb = function (gray) {
- return [0, 100, gray[0]];
-};
-
-convert.gray.cmyk = function (gray) {
- return [0, 0, 0, gray[0]];
-};
-
-convert.gray.lab = function (gray) {
- return [gray[0], 0, 0];
-};
-
-convert.gray.hex = function (gray) {
- var val = Math.round(gray[0] / 100 * 255) & 0xFF;
- var integer = (val << 16) + (val << 8) + val;
-
- var string = integer.toString(16).toUpperCase();
- return '000000'.substring(string.length) + string;
-};
-
-convert.rgb.gray = function (rgb) {
- var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
- return [val / 255 * 100];
-};
-});
-var conversions_1 = conversions.rgb;
-var conversions_2 = conversions.hsl;
-var conversions_3 = conversions.hsv;
-var conversions_4 = conversions.hwb;
-var conversions_5 = conversions.cmyk;
-var conversions_6 = conversions.xyz;
-var conversions_7 = conversions.lab;
-var conversions_8 = conversions.lch;
-var conversions_9 = conversions.hex;
-var conversions_10 = conversions.keyword;
-var conversions_11 = conversions.ansi16;
-var conversions_12 = conversions.ansi256;
-var conversions_13 = conversions.hcg;
-var conversions_14 = conversions.apple;
-var conversions_15 = conversions.gray;
-
-/*
- this function routes a model to all other models.
-
- all functions that are routed have a property `.conversion` attached
- to the returned synthetic function. This property is an array
- of strings, each with the steps in between the 'from' and 'to'
- color models (inclusive).
-
- conversions that are not possible simply are not included.
-*/
-
-function buildGraph() {
- var graph = {};
- // https://jsperf.com/object-keys-vs-for-in-with-closure/3
- var models = Object.keys(conversions);
-
- for (var len = models.length, i = 0; i < len; i++) {
- graph[models[i]] = {
- // http://jsperf.com/1-vs-infinity
- // micro-opt, but this is simple.
- distance: -1,
- parent: null
- };
- }
-
- return graph;
-}
-
-// https://en.wikipedia.org/wiki/Breadth-first_search
-function deriveBFS(fromModel) {
- var graph = buildGraph();
- var queue = [fromModel]; // unshift -> queue -> pop
-
- graph[fromModel].distance = 0;
-
- while (queue.length) {
- var current = queue.pop();
- var adjacents = Object.keys(conversions[current]);
-
- for (var len = adjacents.length, i = 0; i < len; i++) {
- var adjacent = adjacents[i];
- var node = graph[adjacent];
-
- if (node.distance === -1) {
- node.distance = graph[current].distance + 1;
- node.parent = current;
- queue.unshift(adjacent);
- }
- }
- }
-
- return graph;
-}
-
-function link(from, to) {
- return function (args) {
- return to(from(args));
- };
-}
-
-function wrapConversion(toModel, graph) {
- var path = [graph[toModel].parent, toModel];
- var fn = conversions[graph[toModel].parent][toModel];
-
- var cur = graph[toModel].parent;
- while (graph[cur].parent) {
- path.unshift(graph[cur].parent);
- fn = link(conversions[graph[cur].parent][cur], fn);
- cur = graph[cur].parent;
- }
-
- fn.conversion = path;
- return fn;
-}
-
-var route = function (fromModel) {
- var graph = deriveBFS(fromModel);
- var conversion = {};
-
- var models = Object.keys(graph);
- for (var len = models.length, i = 0; i < len; i++) {
- var toModel = models[i];
- var node = graph[toModel];
-
- if (node.parent === null) {
- // no possible conversion, or this node is the source model.
- continue;
- }
-
- conversion[toModel] = wrapConversion(toModel, graph);
- }
-
- return conversion;
-};
-
-var convert = {};
-
-var models = Object.keys(conversions);
-
-function wrapRaw(fn) {
- var wrappedFn = function (args) {
- if (args === undefined || args === null) {
- return args;
- }
-
- if (arguments.length > 1) {
- args = Array.prototype.slice.call(arguments);
- }
-
- return fn(args);
- };
-
- // preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-function wrapRounded(fn) {
- var wrappedFn = function (args) {
- if (args === undefined || args === null) {
- return args;
- }
-
- if (arguments.length > 1) {
- args = Array.prototype.slice.call(arguments);
- }
-
- var result = fn(args);
-
- // we're assuming the result is an array here.
- // see notice in conversions.js; don't use box types
- // in conversion functions.
- if (typeof result === 'object') {
- for (var len = result.length, i = 0; i < len; i++) {
- result[i] = Math.round(result[i]);
- }
- }
-
- return result;
- };
-
- // preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-models.forEach(function (fromModel) {
- convert[fromModel] = {};
-
- Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
- Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
-
- var routes = route(fromModel);
- var routeModels = Object.keys(routes);
-
- routeModels.forEach(function (toModel) {
- var fn = routes[toModel];
-
- convert[fromModel][toModel] = wrapRounded(fn);
- convert[fromModel][toModel].raw = wrapRaw(fn);
- });
-});
-
-var colorConvert = convert;
-
-var colorName$1 = {
- "aliceblue": [240, 248, 255],
- "antiquewhite": [250, 235, 215],
- "aqua": [0, 255, 255],
- "aquamarine": [127, 255, 212],
- "azure": [240, 255, 255],
- "beige": [245, 245, 220],
- "bisque": [255, 228, 196],
- "black": [0, 0, 0],
- "blanchedalmond": [255, 235, 205],
- "blue": [0, 0, 255],
- "blueviolet": [138, 43, 226],
- "brown": [165, 42, 42],
- "burlywood": [222, 184, 135],
- "cadetblue": [95, 158, 160],
- "chartreuse": [127, 255, 0],
- "chocolate": [210, 105, 30],
- "coral": [255, 127, 80],
- "cornflowerblue": [100, 149, 237],
- "cornsilk": [255, 248, 220],
- "crimson": [220, 20, 60],
- "cyan": [0, 255, 255],
- "darkblue": [0, 0, 139],
- "darkcyan": [0, 139, 139],
- "darkgoldenrod": [184, 134, 11],
- "darkgray": [169, 169, 169],
- "darkgreen": [0, 100, 0],
- "darkgrey": [169, 169, 169],
- "darkkhaki": [189, 183, 107],
- "darkmagenta": [139, 0, 139],
- "darkolivegreen": [85, 107, 47],
- "darkorange": [255, 140, 0],
- "darkorchid": [153, 50, 204],
- "darkred": [139, 0, 0],
- "darksalmon": [233, 150, 122],
- "darkseagreen": [143, 188, 143],
- "darkslateblue": [72, 61, 139],
- "darkslategray": [47, 79, 79],
- "darkslategrey": [47, 79, 79],
- "darkturquoise": [0, 206, 209],
- "darkviolet": [148, 0, 211],
- "deeppink": [255, 20, 147],
- "deepskyblue": [0, 191, 255],
- "dimgray": [105, 105, 105],
- "dimgrey": [105, 105, 105],
- "dodgerblue": [30, 144, 255],
- "firebrick": [178, 34, 34],
- "floralwhite": [255, 250, 240],
- "forestgreen": [34, 139, 34],
- "fuchsia": [255, 0, 255],
- "gainsboro": [220, 220, 220],
- "ghostwhite": [248, 248, 255],
- "gold": [255, 215, 0],
- "goldenrod": [218, 165, 32],
- "gray": [128, 128, 128],
- "green": [0, 128, 0],
- "greenyellow": [173, 255, 47],
- "grey": [128, 128, 128],
- "honeydew": [240, 255, 240],
- "hotpink": [255, 105, 180],
- "indianred": [205, 92, 92],
- "indigo": [75, 0, 130],
- "ivory": [255, 255, 240],
- "khaki": [240, 230, 140],
- "lavender": [230, 230, 250],
- "lavenderblush": [255, 240, 245],
- "lawngreen": [124, 252, 0],
- "lemonchiffon": [255, 250, 205],
- "lightblue": [173, 216, 230],
- "lightcoral": [240, 128, 128],
- "lightcyan": [224, 255, 255],
- "lightgoldenrodyellow": [250, 250, 210],
- "lightgray": [211, 211, 211],
- "lightgreen": [144, 238, 144],
- "lightgrey": [211, 211, 211],
- "lightpink": [255, 182, 193],
- "lightsalmon": [255, 160, 122],
- "lightseagreen": [32, 178, 170],
- "lightskyblue": [135, 206, 250],
- "lightslategray": [119, 136, 153],
- "lightslategrey": [119, 136, 153],
- "lightsteelblue": [176, 196, 222],
- "lightyellow": [255, 255, 224],
- "lime": [0, 255, 0],
- "limegreen": [50, 205, 50],
- "linen": [250, 240, 230],
- "magenta": [255, 0, 255],
- "maroon": [128, 0, 0],
- "mediumaquamarine": [102, 205, 170],
- "mediumblue": [0, 0, 205],
- "mediumorchid": [186, 85, 211],
- "mediumpurple": [147, 112, 219],
- "mediumseagreen": [60, 179, 113],
- "mediumslateblue": [123, 104, 238],
- "mediumspringgreen": [0, 250, 154],
- "mediumturquoise": [72, 209, 204],
- "mediumvioletred": [199, 21, 133],
- "midnightblue": [25, 25, 112],
- "mintcream": [245, 255, 250],
- "mistyrose": [255, 228, 225],
- "moccasin": [255, 228, 181],
- "navajowhite": [255, 222, 173],
- "navy": [0, 0, 128],
- "oldlace": [253, 245, 230],
- "olive": [128, 128, 0],
- "olivedrab": [107, 142, 35],
- "orange": [255, 165, 0],
- "orangered": [255, 69, 0],
- "orchid": [218, 112, 214],
- "palegoldenrod": [238, 232, 170],
- "palegreen": [152, 251, 152],
- "paleturquoise": [175, 238, 238],
- "palevioletred": [219, 112, 147],
- "papayawhip": [255, 239, 213],
- "peachpuff": [255, 218, 185],
- "peru": [205, 133, 63],
- "pink": [255, 192, 203],
- "plum": [221, 160, 221],
- "powderblue": [176, 224, 230],
- "purple": [128, 0, 128],
- "rebeccapurple": [102, 51, 153],
- "red": [255, 0, 0],
- "rosybrown": [188, 143, 143],
- "royalblue": [65, 105, 225],
- "saddlebrown": [139, 69, 19],
- "salmon": [250, 128, 114],
- "sandybrown": [244, 164, 96],
- "seagreen": [46, 139, 87],
- "seashell": [255, 245, 238],
- "sienna": [160, 82, 45],
- "silver": [192, 192, 192],
- "skyblue": [135, 206, 235],
- "slateblue": [106, 90, 205],
- "slategray": [112, 128, 144],
- "slategrey": [112, 128, 144],
- "snow": [255, 250, 250],
- "springgreen": [0, 255, 127],
- "steelblue": [70, 130, 180],
- "tan": [210, 180, 140],
- "teal": [0, 128, 128],
- "thistle": [216, 191, 216],
- "tomato": [255, 99, 71],
- "turquoise": [64, 224, 208],
- "violet": [238, 130, 238],
- "wheat": [245, 222, 179],
- "white": [255, 255, 255],
- "whitesmoke": [245, 245, 245],
- "yellow": [255, 255, 0],
- "yellowgreen": [154, 205, 50]
-};
-
-/* MIT license */
-
-
-var colorString = {
- getRgba: getRgba,
- getHsla: getHsla,
- getRgb: getRgb,
- getHsl: getHsl,
- getHwb: getHwb,
- getAlpha: getAlpha,
-
- hexString: hexString,
- rgbString: rgbString,
- rgbaString: rgbaString,
- percentString: percentString,
- percentaString: percentaString,
- hslString: hslString,
- hslaString: hslaString,
- hwbString: hwbString,
- keyword: keyword
-};
-
-function getRgba(string) {
- if (!string) {
- return;
- }
- var abbr = /^#([a-fA-F0-9]{3,4})$/i,
- hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,
- rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
- per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
- keyword = /(\w+)/;
-
- var rgb = [0, 0, 0],
- a = 1,
- match = string.match(abbr),
- hexAlpha = "";
- if (match) {
- match = match[1];
- hexAlpha = match[3];
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = parseInt(match[i] + match[i], 16);
- }
- if (hexAlpha) {
- a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;
- }
- }
- else if (match = string.match(hex)) {
- hexAlpha = match[2];
- match = match[1];
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
- }
- if (hexAlpha) {
- a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;
- }
- }
- else if (match = string.match(rgba)) {
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = parseInt(match[i + 1]);
- }
- a = parseFloat(match[4]);
- }
- else if (match = string.match(per)) {
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
- }
- a = parseFloat(match[4]);
- }
- else if (match = string.match(keyword)) {
- if (match[1] == "transparent") {
- return [0, 0, 0, 0];
- }
- rgb = colorName$1[match[1]];
- if (!rgb) {
- return;
- }
- }
-
- for (var i = 0; i < rgb.length; i++) {
- rgb[i] = scale(rgb[i], 0, 255);
- }
- if (!a && a != 0) {
- a = 1;
- }
- else {
- a = scale(a, 0, 1);
- }
- rgb[3] = a;
- return rgb;
-}
-
-function getHsla(string) {
- if (!string) {
- return;
- }
- var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
- var match = string.match(hsl);
- if (match) {
- var alpha = parseFloat(match[4]);
- var h = scale(parseInt(match[1]), 0, 360),
- s = scale(parseFloat(match[2]), 0, 100),
- l = scale(parseFloat(match[3]), 0, 100),
- a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
- return [h, s, l, a];
- }
-}
-
-function getHwb(string) {
- if (!string) {
- return;
- }
- var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
- var match = string.match(hwb);
- if (match) {
- var alpha = parseFloat(match[4]);
- var h = scale(parseInt(match[1]), 0, 360),
- w = scale(parseFloat(match[2]), 0, 100),
- b = scale(parseFloat(match[3]), 0, 100),
- a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
- return [h, w, b, a];
- }
-}
-
-function getRgb(string) {
- var rgba = getRgba(string);
- return rgba && rgba.slice(0, 3);
-}
-
-function getHsl(string) {
- var hsla = getHsla(string);
- return hsla && hsla.slice(0, 3);
-}
-
-function getAlpha(string) {
- var vals = getRgba(string);
- if (vals) {
- return vals[3];
- }
- else if (vals = getHsla(string)) {
- return vals[3];
- }
- else if (vals = getHwb(string)) {
- return vals[3];
- }
-}
-
-// generators
-function hexString(rgba, a) {
- var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];
- return "#" + hexDouble(rgba[0])
- + hexDouble(rgba[1])
- + hexDouble(rgba[2])
- + (
- (a >= 0 && a < 1)
- ? hexDouble(Math.round(a * 255))
- : ""
- );
-}
-
-function rgbString(rgba, alpha) {
- if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
- return rgbaString(rgba, alpha);
- }
- return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
-}
-
-function rgbaString(rgba, alpha) {
- if (alpha === undefined) {
- alpha = (rgba[3] !== undefined ? rgba[3] : 1);
- }
- return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2]
- + ", " + alpha + ")";
-}
-
-function percentString(rgba, alpha) {
- if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
- return percentaString(rgba, alpha);
- }
- var r = Math.round(rgba[0]/255 * 100),
- g = Math.round(rgba[1]/255 * 100),
- b = Math.round(rgba[2]/255 * 100);
-
- return "rgb(" + r + "%, " + g + "%, " + b + "%)";
-}
-
-function percentaString(rgba, alpha) {
- var r = Math.round(rgba[0]/255 * 100),
- g = Math.round(rgba[1]/255 * 100),
- b = Math.round(rgba[2]/255 * 100);
- return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
-}
-
-function hslString(hsla, alpha) {
- if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {
- return hslaString(hsla, alpha);
- }
- return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
-}
-
-function hslaString(hsla, alpha) {
- if (alpha === undefined) {
- alpha = (hsla[3] !== undefined ? hsla[3] : 1);
- }
- return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, "
- + alpha + ")";
-}
-
-// hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
-// (hwb have alpha optional & 1 is default value)
-function hwbString(hwb, alpha) {
- if (alpha === undefined) {
- alpha = (hwb[3] !== undefined ? hwb[3] : 1);
- }
- return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%"
- + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
-}
-
-function keyword(rgb) {
- return reverseNames[rgb.slice(0, 3)];
-}
-
-// helpers
-function scale(num, min, max) {
- return Math.min(Math.max(min, num), max);
-}
-
-function hexDouble(num) {
- var str = num.toString(16).toUpperCase();
- return (str.length < 2) ? "0" + str : str;
-}
-
-
-//create a list of reverse color names
-var reverseNames = {};
-for (var name in colorName$1) {
- reverseNames[colorName$1[name]] = name;
-}
-
-/* MIT license */
-
-
-
-var Color = function (obj) {
- if (obj instanceof Color) {
- return obj;
- }
- if (!(this instanceof Color)) {
- return new Color(obj);
- }
-
- this.valid = false;
- this.values = {
- rgb: [0, 0, 0],
- hsl: [0, 0, 0],
- hsv: [0, 0, 0],
- hwb: [0, 0, 0],
- cmyk: [0, 0, 0, 0],
- alpha: 1
- };
-
- // parse Color() argument
- var vals;
- if (typeof obj === 'string') {
- vals = colorString.getRgba(obj);
- if (vals) {
- this.setValues('rgb', vals);
- } else if (vals = colorString.getHsla(obj)) {
- this.setValues('hsl', vals);
- } else if (vals = colorString.getHwb(obj)) {
- this.setValues('hwb', vals);
- }
- } else if (typeof obj === 'object') {
- vals = obj;
- if (vals.r !== undefined || vals.red !== undefined) {
- this.setValues('rgb', vals);
- } else if (vals.l !== undefined || vals.lightness !== undefined) {
- this.setValues('hsl', vals);
- } else if (vals.v !== undefined || vals.value !== undefined) {
- this.setValues('hsv', vals);
- } else if (vals.w !== undefined || vals.whiteness !== undefined) {
- this.setValues('hwb', vals);
- } else if (vals.c !== undefined || vals.cyan !== undefined) {
- this.setValues('cmyk', vals);
- }
- }
-};
-
-Color.prototype = {
- isValid: function () {
- return this.valid;
- },
- rgb: function () {
- return this.setSpace('rgb', arguments);
- },
- hsl: function () {
- return this.setSpace('hsl', arguments);
- },
- hsv: function () {
- return this.setSpace('hsv', arguments);
- },
- hwb: function () {
- return this.setSpace('hwb', arguments);
- },
- cmyk: function () {
- return this.setSpace('cmyk', arguments);
- },
-
- rgbArray: function () {
- return this.values.rgb;
- },
- hslArray: function () {
- return this.values.hsl;
- },
- hsvArray: function () {
- return this.values.hsv;
- },
- hwbArray: function () {
- var values = this.values;
- if (values.alpha !== 1) {
- return values.hwb.concat([values.alpha]);
- }
- return values.hwb;
- },
- cmykArray: function () {
- return this.values.cmyk;
- },
- rgbaArray: function () {
- var values = this.values;
- return values.rgb.concat([values.alpha]);
- },
- hslaArray: function () {
- var values = this.values;
- return values.hsl.concat([values.alpha]);
- },
- alpha: function (val) {
- if (val === undefined) {
- return this.values.alpha;
- }
- this.setValues('alpha', val);
- return this;
- },
-
- red: function (val) {
- return this.setChannel('rgb', 0, val);
- },
- green: function (val) {
- return this.setChannel('rgb', 1, val);
- },
- blue: function (val) {
- return this.setChannel('rgb', 2, val);
- },
- hue: function (val) {
- if (val) {
- val %= 360;
- val = val < 0 ? 360 + val : val;
- }
- return this.setChannel('hsl', 0, val);
- },
- saturation: function (val) {
- return this.setChannel('hsl', 1, val);
- },
- lightness: function (val) {
- return this.setChannel('hsl', 2, val);
- },
- saturationv: function (val) {
- return this.setChannel('hsv', 1, val);
- },
- whiteness: function (val) {
- return this.setChannel('hwb', 1, val);
- },
- blackness: function (val) {
- return this.setChannel('hwb', 2, val);
- },
- value: function (val) {
- return this.setChannel('hsv', 2, val);
- },
- cyan: function (val) {
- return this.setChannel('cmyk', 0, val);
- },
- magenta: function (val) {
- return this.setChannel('cmyk', 1, val);
- },
- yellow: function (val) {
- return this.setChannel('cmyk', 2, val);
- },
- black: function (val) {
- return this.setChannel('cmyk', 3, val);
- },
-
- hexString: function () {
- return colorString.hexString(this.values.rgb);
- },
- rgbString: function () {
- return colorString.rgbString(this.values.rgb, this.values.alpha);
- },
- rgbaString: function () {
- return colorString.rgbaString(this.values.rgb, this.values.alpha);
- },
- percentString: function () {
- return colorString.percentString(this.values.rgb, this.values.alpha);
- },
- hslString: function () {
- return colorString.hslString(this.values.hsl, this.values.alpha);
- },
- hslaString: function () {
- return colorString.hslaString(this.values.hsl, this.values.alpha);
- },
- hwbString: function () {
- return colorString.hwbString(this.values.hwb, this.values.alpha);
- },
- keyword: function () {
- return colorString.keyword(this.values.rgb, this.values.alpha);
- },
-
- rgbNumber: function () {
- var rgb = this.values.rgb;
- return (rgb[0] << 16) | (rgb[1] << 8) | rgb[2];
- },
-
- luminosity: function () {
- // http://www.w3.org/TR/WCAG20/#relativeluminancedef
- var rgb = this.values.rgb;
- var lum = [];
- for (var i = 0; i < rgb.length; i++) {
- var chan = rgb[i] / 255;
- lum[i] = (chan <= 0.03928) ? chan / 12.92 : Math.pow(((chan + 0.055) / 1.055), 2.4);
- }
- return 0.2126 * lum[0] + 0.7152 * lum[1] + 0.0722 * lum[2];
- },
-
- contrast: function (color2) {
- // http://www.w3.org/TR/WCAG20/#contrast-ratiodef
- var lum1 = this.luminosity();
- var lum2 = color2.luminosity();
- if (lum1 > lum2) {
- return (lum1 + 0.05) / (lum2 + 0.05);
- }
- return (lum2 + 0.05) / (lum1 + 0.05);
- },
-
- level: function (color2) {
- var contrastRatio = this.contrast(color2);
- if (contrastRatio >= 7.1) {
- return 'AAA';
- }
-
- return (contrastRatio >= 4.5) ? 'AA' : '';
- },
-
- dark: function () {
- // YIQ equation from http://24ways.org/2010/calculating-color-contrast
- var rgb = this.values.rgb;
- var yiq = (rgb[0] * 299 + rgb[1] * 587 + rgb[2] * 114) / 1000;
- return yiq < 128;
- },
-
- light: function () {
- return !this.dark();
- },
-
- negate: function () {
- var rgb = [];
- for (var i = 0; i < 3; i++) {
- rgb[i] = 255 - this.values.rgb[i];
- }
- this.setValues('rgb', rgb);
- return this;
- },
-
- lighten: function (ratio) {
- var hsl = this.values.hsl;
- hsl[2] += hsl[2] * ratio;
- this.setValues('hsl', hsl);
- return this;
- },
-
- darken: function (ratio) {
- var hsl = this.values.hsl;
- hsl[2] -= hsl[2] * ratio;
- this.setValues('hsl', hsl);
- return this;
- },
-
- saturate: function (ratio) {
- var hsl = this.values.hsl;
- hsl[1] += hsl[1] * ratio;
- this.setValues('hsl', hsl);
- return this;
- },
-
- desaturate: function (ratio) {
- var hsl = this.values.hsl;
- hsl[1] -= hsl[1] * ratio;
- this.setValues('hsl', hsl);
- return this;
- },
-
- whiten: function (ratio) {
- var hwb = this.values.hwb;
- hwb[1] += hwb[1] * ratio;
- this.setValues('hwb', hwb);
- return this;
- },
-
- blacken: function (ratio) {
- var hwb = this.values.hwb;
- hwb[2] += hwb[2] * ratio;
- this.setValues('hwb', hwb);
- return this;
- },
-
- greyscale: function () {
- var rgb = this.values.rgb;
- // http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
- var val = rgb[0] * 0.3 + rgb[1] * 0.59 + rgb[2] * 0.11;
- this.setValues('rgb', [val, val, val]);
- return this;
- },
-
- clearer: function (ratio) {
- var alpha = this.values.alpha;
- this.setValues('alpha', alpha - (alpha * ratio));
- return this;
- },
-
- opaquer: function (ratio) {
- var alpha = this.values.alpha;
- this.setValues('alpha', alpha + (alpha * ratio));
- return this;
- },
-
- rotate: function (degrees) {
- var hsl = this.values.hsl;
- var hue = (hsl[0] + degrees) % 360;
- hsl[0] = hue < 0 ? 360 + hue : hue;
- this.setValues('hsl', hsl);
- return this;
- },
-
- /**
- * Ported from sass implementation in C
- * https://github.com/sass/libsass/blob/0e6b4a2850092356aa3ece07c6b249f0221caced/functions.cpp#L209
- */
- mix: function (mixinColor, weight) {
- var color1 = this;
- var color2 = mixinColor;
- var p = weight === undefined ? 0.5 : weight;
-
- var w = 2 * p - 1;
- var a = color1.alpha() - color2.alpha();
-
- var w1 = (((w * a === -1) ? w : (w + a) / (1 + w * a)) + 1) / 2.0;
- var w2 = 1 - w1;
-
- return this
- .rgb(
- w1 * color1.red() + w2 * color2.red(),
- w1 * color1.green() + w2 * color2.green(),
- w1 * color1.blue() + w2 * color2.blue()
- )
- .alpha(color1.alpha() * p + color2.alpha() * (1 - p));
- },
-
- toJSON: function () {
- return this.rgb();
- },
-
- clone: function () {
- // NOTE(SB): using node-clone creates a dependency to Buffer when using browserify,
- // making the final build way to big to embed in Chart.js. So let's do it manually,
- // assuming that values to clone are 1 dimension arrays containing only numbers,
- // except 'alpha' which is a number.
- var result = new Color();
- var source = this.values;
- var target = result.values;
- var value, type;
-
- for (var prop in source) {
- if (source.hasOwnProperty(prop)) {
- value = source[prop];
- type = ({}).toString.call(value);
- if (type === '[object Array]') {
- target[prop] = value.slice(0);
- } else if (type === '[object Number]') {
- target[prop] = value;
- } else {
- console.error('unexpected color value:', value);
- }
- }
- }
-
- return result;
- }
-};
-
-Color.prototype.spaces = {
- rgb: ['red', 'green', 'blue'],
- hsl: ['hue', 'saturation', 'lightness'],
- hsv: ['hue', 'saturation', 'value'],
- hwb: ['hue', 'whiteness', 'blackness'],
- cmyk: ['cyan', 'magenta', 'yellow', 'black']
-};
-
-Color.prototype.maxes = {
- rgb: [255, 255, 255],
- hsl: [360, 100, 100],
- hsv: [360, 100, 100],
- hwb: [360, 100, 100],
- cmyk: [100, 100, 100, 100]
-};
-
-Color.prototype.getValues = function (space) {
- var values = this.values;
- var vals = {};
-
- for (var i = 0; i < space.length; i++) {
- vals[space.charAt(i)] = values[space][i];
- }
-
- if (values.alpha !== 1) {
- vals.a = values.alpha;
- }
-
- // {r: 255, g: 255, b: 255, a: 0.4}
- return vals;
-};
-
-Color.prototype.setValues = function (space, vals) {
- var values = this.values;
- var spaces = this.spaces;
- var maxes = this.maxes;
- var alpha = 1;
- var i;
-
- this.valid = true;
-
- if (space === 'alpha') {
- alpha = vals;
- } else if (vals.length) {
- // [10, 10, 10]
- values[space] = vals.slice(0, space.length);
- alpha = vals[space.length];
- } else if (vals[space.charAt(0)] !== undefined) {
- // {r: 10, g: 10, b: 10}
- for (i = 0; i < space.length; i++) {
- values[space][i] = vals[space.charAt(i)];
- }
-
- alpha = vals.a;
- } else if (vals[spaces[space][0]] !== undefined) {
- // {red: 10, green: 10, blue: 10}
- var chans = spaces[space];
-
- for (i = 0; i < space.length; i++) {
- values[space][i] = vals[chans[i]];
- }
-
- alpha = vals.alpha;
- }
-
- values.alpha = Math.max(0, Math.min(1, (alpha === undefined ? values.alpha : alpha)));
-
- if (space === 'alpha') {
- return false;
- }
-
- var capped;
-
- // cap values of the space prior converting all values
- for (i = 0; i < space.length; i++) {
- capped = Math.max(0, Math.min(maxes[space][i], values[space][i]));
- values[space][i] = Math.round(capped);
- }
-
- // convert to all the other color spaces
- for (var sname in spaces) {
- if (sname !== space) {
- values[sname] = colorConvert[space][sname](values[space]);
- }
- }
-
- return true;
-};
-
-Color.prototype.setSpace = function (space, args) {
- var vals = args[0];
-
- if (vals === undefined) {
- // color.rgb()
- return this.getValues(space);
- }
-
- // color.rgb(10, 10, 10)
- if (typeof vals === 'number') {
- vals = Array.prototype.slice.call(args);
- }
-
- this.setValues(space, vals);
- return this;
-};
-
-Color.prototype.setChannel = function (space, index, val) {
- var svalues = this.values[space];
- if (val === undefined) {
- // color.red()
- return svalues[index];
- } else if (val === svalues[index]) {
- // color.red(color.red())
- return this;
- }
-
- // color.red(100)
- svalues[index] = val;
- this.setValues(space, svalues);
-
- return this;
-};
-
-if (typeof window !== 'undefined') {
- window.Color = Color;
-}
-
-var chartjsColor = Color;
-
-function isValidKey(key) {
- return ['__proto__', 'prototype', 'constructor'].indexOf(key) === -1;
-}
-
-/**
- * @namespace Chart.helpers
- */
-var helpers = {
- /**
- * An empty function that can be used, for example, for optional callback.
- */
- noop: function() {},
-
- /**
- * Returns a unique id, sequentially generated from a global variable.
- * @returns {number}
- * @function
- */
- uid: (function() {
- var id = 0;
- return function() {
- return id++;
- };
- }()),
-
- /**
- * Returns true if `value` is neither null nor undefined, else returns false.
- * @param {*} value - The value to test.
- * @returns {boolean}
- * @since 2.7.0
- */
- isNullOrUndef: function(value) {
- return value === null || typeof value === 'undefined';
- },
-
- /**
- * Returns true if `value` is an array (including typed arrays), else returns false.
- * @param {*} value - The value to test.
- * @returns {boolean}
- * @function
- */
- isArray: function(value) {
- if (Array.isArray && Array.isArray(value)) {
- return true;
- }
- var type = Object.prototype.toString.call(value);
- if (type.substr(0, 7) === '[object' && type.substr(-6) === 'Array]') {
- return true;
- }
- return false;
- },
-
- /**
- * Returns true if `value` is an object (excluding null), else returns false.
- * @param {*} value - The value to test.
- * @returns {boolean}
- * @since 2.7.0
- */
- isObject: function(value) {
- return value !== null && Object.prototype.toString.call(value) === '[object Object]';
- },
-
- /**
- * Returns true if `value` is a finite number, else returns false
- * @param {*} value - The value to test.
- * @returns {boolean}
- */
- isFinite: function(value) {
- return (typeof value === 'number' || value instanceof Number) && isFinite(value);
- },
-
- /**
- * Returns `value` if defined, else returns `defaultValue`.
- * @param {*} value - The value to return if defined.
- * @param {*} defaultValue - The value to return if `value` is undefined.
- * @returns {*}
- */
- valueOrDefault: function(value, defaultValue) {
- return typeof value === 'undefined' ? defaultValue : value;
- },
-
- /**
- * Returns value at the given `index` in array if defined, else returns `defaultValue`.
- * @param {Array} value - The array to lookup for value at `index`.
- * @param {number} index - The index in `value` to lookup for value.
- * @param {*} defaultValue - The value to return if `value[index]` is undefined.
- * @returns {*}
- */
- valueAtIndexOrDefault: function(value, index, defaultValue) {
- return helpers.valueOrDefault(helpers.isArray(value) ? value[index] : value, defaultValue);
- },
-
- /**
- * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the
- * value returned by `fn`. If `fn` is not a function, this method returns undefined.
- * @param {function} fn - The function to call.
- * @param {Array|undefined|null} args - The arguments with which `fn` should be called.
- * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
- * @returns {*}
- */
- callback: function(fn, args, thisArg) {
- if (fn && typeof fn.call === 'function') {
- return fn.apply(thisArg, args);
- }
- },
-
- /**
- * Note(SB) for performance sake, this method should only be used when loopable type
- * is unknown or in none intensive code (not called often and small loopable). Else
- * it's preferable to use a regular for() loop and save extra function calls.
- * @param {object|Array} loopable - The object or array to be iterated.
- * @param {function} fn - The function to call for each item.
- * @param {object} [thisArg] - The value of `this` provided for the call to `fn`.
- * @param {boolean} [reverse] - If true, iterates backward on the loopable.
- */
- each: function(loopable, fn, thisArg, reverse) {
- var i, len, keys;
- if (helpers.isArray(loopable)) {
- len = loopable.length;
- if (reverse) {
- for (i = len - 1; i >= 0; i--) {
- fn.call(thisArg, loopable[i], i);
- }
- } else {
- for (i = 0; i < len; i++) {
- fn.call(thisArg, loopable[i], i);
- }
- }
- } else if (helpers.isObject(loopable)) {
- keys = Object.keys(loopable);
- len = keys.length;
- for (i = 0; i < len; i++) {
- fn.call(thisArg, loopable[keys[i]], keys[i]);
- }
- }
- },
-
- /**
- * Returns true if the `a0` and `a1` arrays have the same content, else returns false.
- * @see https://stackoverflow.com/a/14853974
- * @param {Array} a0 - The array to compare
- * @param {Array} a1 - The array to compare
- * @returns {boolean}
- */
- arrayEquals: function(a0, a1) {
- var i, ilen, v0, v1;
-
- if (!a0 || !a1 || a0.length !== a1.length) {
- return false;
- }
-
- for (i = 0, ilen = a0.length; i < ilen; ++i) {
- v0 = a0[i];
- v1 = a1[i];
-
- if (v0 instanceof Array && v1 instanceof Array) {
- if (!helpers.arrayEquals(v0, v1)) {
- return false;
- }
- } else if (v0 !== v1) {
- // NOTE: two different object instances will never be equal: {x:20} != {x:20}
- return false;
- }
- }
-
- return true;
- },
-
- /**
- * Returns a deep copy of `source` without keeping references on objects and arrays.
- * @param {*} source - The value to clone.
- * @returns {*}
- */
- clone: function(source) {
- if (helpers.isArray(source)) {
- return source.map(helpers.clone);
- }
-
- if (helpers.isObject(source)) {
- var target = Object.create(source);
- var keys = Object.keys(source);
- var klen = keys.length;
- var k = 0;
-
- for (; k < klen; ++k) {
- target[keys[k]] = helpers.clone(source[keys[k]]);
- }
-
- return target;
- }
-
- return source;
- },
-
- /**
- * The default merger when Chart.helpers.merge is called without merger option.
- * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.
- * @private
- */
- _merger: function(key, target, source, options) {
- if (!isValidKey(key)) {
- // We want to ensure we do not copy prototypes over
- // as this can pollute global namespaces
- return;
- }
-
- var tval = target[key];
- var sval = source[key];
-
- if (helpers.isObject(tval) && helpers.isObject(sval)) {
- helpers.merge(tval, sval, options);
- } else {
- target[key] = helpers.clone(sval);
- }
- },
-
- /**
- * Merges source[key] in target[key] only if target[key] is undefined.
- * @private
- */
- _mergerIf: function(key, target, source) {
- if (!isValidKey(key)) {
- // We want to ensure we do not copy prototypes over
- // as this can pollute global namespaces
- return;
- }
-
- var tval = target[key];
- var sval = source[key];
-
- if (helpers.isObject(tval) && helpers.isObject(sval)) {
- helpers.mergeIf(tval, sval);
- } else if (!target.hasOwnProperty(key)) {
- target[key] = helpers.clone(sval);
- }
- },
-
- /**
- * Recursively deep copies `source` properties into `target` with the given `options`.
- * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
- * @param {object} target - The target object in which all sources are merged into.
- * @param {object|object[]} source - Object(s) to merge into `target`.
- * @param {object} [options] - Merging options:
- * @param {function} [options.merger] - The merge method (key, target, source, options)
- * @returns {object} The `target` object.
- */
- merge: function(target, source, options) {
- var sources = helpers.isArray(source) ? source : [source];
- var ilen = sources.length;
- var merge, i, keys, klen, k;
-
- if (!helpers.isObject(target)) {
- return target;
- }
-
- options = options || {};
- merge = options.merger || helpers._merger;
-
- for (i = 0; i < ilen; ++i) {
- source = sources[i];
- if (!helpers.isObject(source)) {
- continue;
- }
-
- keys = Object.keys(source);
- for (k = 0, klen = keys.length; k < klen; ++k) {
- merge(keys[k], target, source, options);
- }
- }
-
- return target;
- },
-
- /**
- * Recursively deep copies `source` properties into `target` *only* if not defined in target.
- * IMPORTANT: `target` is not cloned and will be updated with `source` properties.
- * @param {object} target - The target object in which all sources are merged into.
- * @param {object|object[]} source - Object(s) to merge into `target`.
- * @returns {object} The `target` object.
- */
- mergeIf: function(target, source) {
- return helpers.merge(target, source, {merger: helpers._mergerIf});
- },
-
- /**
- * Applies the contents of two or more objects together into the first object.
- * @param {object} target - The target object in which all objects are merged into.
- * @param {object} arg1 - Object containing additional properties to merge in target.
- * @param {object} argN - Additional objects containing properties to merge in target.
- * @returns {object} The `target` object.
- */
- extend: Object.assign || function(target) {
- return helpers.merge(target, [].slice.call(arguments, 1), {
- merger: function(key, dst, src) {
- dst[key] = src[key];
- }
- });
- },
-
- /**
- * Basic javascript inheritance based on the model created in Backbone.js
- */
- inherits: function(extensions) {
- var me = this;
- var ChartElement = (extensions && extensions.hasOwnProperty('constructor')) ? extensions.constructor : function() {
- return me.apply(this, arguments);
- };
-
- var Surrogate = function() {
- this.constructor = ChartElement;
- };
-
- Surrogate.prototype = me.prototype;
- ChartElement.prototype = new Surrogate();
- ChartElement.extend = helpers.inherits;
-
- if (extensions) {
- helpers.extend(ChartElement.prototype, extensions);
- }
-
- ChartElement.__super__ = me.prototype;
- return ChartElement;
- },
-
- _deprecated: function(scope, value, previous, current) {
- if (value !== undefined) {
- console.warn(scope + ': "' + previous +
- '" is deprecated. Please use "' + current + '" instead');
- }
- }
-};
-
-var helpers_core = helpers;
-
-// DEPRECATIONS
-
-/**
- * Provided for backward compatibility, use Chart.helpers.callback instead.
- * @function Chart.helpers.callCallback
- * @deprecated since version 2.6.0
- * @todo remove at version 3
- * @private
- */
-helpers.callCallback = helpers.callback;
-
-/**
- * Provided for backward compatibility, use Array.prototype.indexOf instead.
- * Array.prototype.indexOf compatibility: Chrome, Opera, Safari, FF1.5+, IE9+
- * @function Chart.helpers.indexOf
- * @deprecated since version 2.7.0
- * @todo remove at version 3
- * @private
- */
-helpers.indexOf = function(array, item, fromIndex) {
- return Array.prototype.indexOf.call(array, item, fromIndex);
-};
-
-/**
- * Provided for backward compatibility, use Chart.helpers.valueOrDefault instead.
- * @function Chart.helpers.getValueOrDefault
- * @deprecated since version 2.7.0
- * @todo remove at version 3
- * @private
- */
-helpers.getValueOrDefault = helpers.valueOrDefault;
-
-/**
- * Provided for backward compatibility, use Chart.helpers.valueAtIndexOrDefault instead.
- * @function Chart.helpers.getValueAtIndexOrDefault
- * @deprecated since version 2.7.0
- * @todo remove at version 3
- * @private
- */
-helpers.getValueAtIndexOrDefault = helpers.valueAtIndexOrDefault;
-
-/**
- * Easing functions adapted from Robert Penner's easing equations.
- * @namespace Chart.helpers.easingEffects
- * @see http://www.robertpenner.com/easing/
- */
-var effects = {
- linear: function(t) {
- return t;
- },
-
- easeInQuad: function(t) {
- return t * t;
- },
-
- easeOutQuad: function(t) {
- return -t * (t - 2);
- },
-
- easeInOutQuad: function(t) {
- if ((t /= 0.5) < 1) {
- return 0.5 * t * t;
- }
- return -0.5 * ((--t) * (t - 2) - 1);
- },
-
- easeInCubic: function(t) {
- return t * t * t;
- },
-
- easeOutCubic: function(t) {
- return (t = t - 1) * t * t + 1;
- },
-
- easeInOutCubic: function(t) {
- if ((t /= 0.5) < 1) {
- return 0.5 * t * t * t;
- }
- return 0.5 * ((t -= 2) * t * t + 2);
- },
-
- easeInQuart: function(t) {
- return t * t * t * t;
- },
-
- easeOutQuart: function(t) {
- return -((t = t - 1) * t * t * t - 1);
- },
-
- easeInOutQuart: function(t) {
- if ((t /= 0.5) < 1) {
- return 0.5 * t * t * t * t;
- }
- return -0.5 * ((t -= 2) * t * t * t - 2);
- },
-
- easeInQuint: function(t) {
- return t * t * t * t * t;
- },
-
- easeOutQuint: function(t) {
- return (t = t - 1) * t * t * t * t + 1;
- },
-
- easeInOutQuint: function(t) {
- if ((t /= 0.5) < 1) {
- return 0.5 * t * t * t * t * t;
- }
- return 0.5 * ((t -= 2) * t * t * t * t + 2);
- },
-
- easeInSine: function(t) {
- return -Math.cos(t * (Math.PI / 2)) + 1;
- },
-
- easeOutSine: function(t) {
- return Math.sin(t * (Math.PI / 2));
- },
-
- easeInOutSine: function(t) {
- return -0.5 * (Math.cos(Math.PI * t) - 1);
- },
-
- easeInExpo: function(t) {
- return (t === 0) ? 0 : Math.pow(2, 10 * (t - 1));
- },
-
- easeOutExpo: function(t) {
- return (t === 1) ? 1 : -Math.pow(2, -10 * t) + 1;
- },
-
- easeInOutExpo: function(t) {
- if (t === 0) {
- return 0;
- }
- if (t === 1) {
- return 1;
- }
- if ((t /= 0.5) < 1) {
- return 0.5 * Math.pow(2, 10 * (t - 1));
- }
- return 0.5 * (-Math.pow(2, -10 * --t) + 2);
- },
-
- easeInCirc: function(t) {
- if (t >= 1) {
- return t;
- }
- return -(Math.sqrt(1 - t * t) - 1);
- },
-
- easeOutCirc: function(t) {
- return Math.sqrt(1 - (t = t - 1) * t);
- },
-
- easeInOutCirc: function(t) {
- if ((t /= 0.5) < 1) {
- return -0.5 * (Math.sqrt(1 - t * t) - 1);
- }
- return 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1);
- },
-
- easeInElastic: function(t) {
- var s = 1.70158;
- var p = 0;
- var a = 1;
- if (t === 0) {
- return 0;
- }
- if (t === 1) {
- return 1;
- }
- if (!p) {
- p = 0.3;
- }
- if (a < 1) {
- a = 1;
- s = p / 4;
- } else {
- s = p / (2 * Math.PI) * Math.asin(1 / a);
- }
- return -(a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));
- },
-
- easeOutElastic: function(t) {
- var s = 1.70158;
- var p = 0;
- var a = 1;
- if (t === 0) {
- return 0;
- }
- if (t === 1) {
- return 1;
- }
- if (!p) {
- p = 0.3;
- }
- if (a < 1) {
- a = 1;
- s = p / 4;
- } else {
- s = p / (2 * Math.PI) * Math.asin(1 / a);
- }
- return a * Math.pow(2, -10 * t) * Math.sin((t - s) * (2 * Math.PI) / p) + 1;
- },
-
- easeInOutElastic: function(t) {
- var s = 1.70158;
- var p = 0;
- var a = 1;
- if (t === 0) {
- return 0;
- }
- if ((t /= 0.5) === 2) {
- return 1;
- }
- if (!p) {
- p = 0.45;
- }
- if (a < 1) {
- a = 1;
- s = p / 4;
- } else {
- s = p / (2 * Math.PI) * Math.asin(1 / a);
- }
- if (t < 1) {
- return -0.5 * (a * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p));
- }
- return a * Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * (2 * Math.PI) / p) * 0.5 + 1;
- },
- easeInBack: function(t) {
- var s = 1.70158;
- return t * t * ((s + 1) * t - s);
- },
-
- easeOutBack: function(t) {
- var s = 1.70158;
- return (t = t - 1) * t * ((s + 1) * t + s) + 1;
- },
-
- easeInOutBack: function(t) {
- var s = 1.70158;
- if ((t /= 0.5) < 1) {
- return 0.5 * (t * t * (((s *= (1.525)) + 1) * t - s));
- }
- return 0.5 * ((t -= 2) * t * (((s *= (1.525)) + 1) * t + s) + 2);
- },
-
- easeInBounce: function(t) {
- return 1 - effects.easeOutBounce(1 - t);
- },
-
- easeOutBounce: function(t) {
- if (t < (1 / 2.75)) {
- return 7.5625 * t * t;
- }
- if (t < (2 / 2.75)) {
- return 7.5625 * (t -= (1.5 / 2.75)) * t + 0.75;
- }
- if (t < (2.5 / 2.75)) {
- return 7.5625 * (t -= (2.25 / 2.75)) * t + 0.9375;
- }
- return 7.5625 * (t -= (2.625 / 2.75)) * t + 0.984375;
- },
-
- easeInOutBounce: function(t) {
- if (t < 0.5) {
- return effects.easeInBounce(t * 2) * 0.5;
- }
- return effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5;
- }
-};
-
-var helpers_easing = {
- effects: effects
-};
-
-// DEPRECATIONS
-
-/**
- * Provided for backward compatibility, use Chart.helpers.easing.effects instead.
- * @function Chart.helpers.easingEffects
- * @deprecated since version 2.7.0
- * @todo remove at version 3
- * @private
- */
-helpers_core.easingEffects = effects;
-
-var PI = Math.PI;
-var RAD_PER_DEG = PI / 180;
-var DOUBLE_PI = PI * 2;
-var HALF_PI = PI / 2;
-var QUARTER_PI = PI / 4;
-var TWO_THIRDS_PI = PI * 2 / 3;
-
-/**
- * @namespace Chart.helpers.canvas
- */
-var exports$1 = {
- /**
- * Clears the entire canvas associated to the given `chart`.
- * @param {Chart} chart - The chart for which to clear the canvas.
- */
- clear: function(chart) {
- chart.ctx.clearRect(0, 0, chart.width, chart.height);
- },
-
- /**
- * Creates a "path" for a rectangle with rounded corners at position (x, y) with a
- * given size (width, height) and the same `radius` for all corners.
- * @param {CanvasRenderingContext2D} ctx - The canvas 2D Context.
- * @param {number} x - The x axis of the coordinate for the rectangle starting point.
- * @param {number} y - The y axis of the coordinate for the rectangle starting point.
- * @param {number} width - The rectangle's width.
- * @param {number} height - The rectangle's height.
- * @param {number} radius - The rounded amount (in pixels) for the four corners.
- * @todo handle `radius` as top-left, top-right, bottom-right, bottom-left array/object?
- */
- roundedRect: function(ctx, x, y, width, height, radius) {
- if (radius) {
- var r = Math.min(radius, height / 2, width / 2);
- var left = x + r;
- var top = y + r;
- var right = x + width - r;
- var bottom = y + height - r;
-
- ctx.moveTo(x, top);
- if (left < right && top < bottom) {
- ctx.arc(left, top, r, -PI, -HALF_PI);
- ctx.arc(right, top, r, -HALF_PI, 0);
- ctx.arc(right, bottom, r, 0, HALF_PI);
- ctx.arc(left, bottom, r, HALF_PI, PI);
- } else if (left < right) {
- ctx.moveTo(left, y);
- ctx.arc(right, top, r, -HALF_PI, HALF_PI);
- ctx.arc(left, top, r, HALF_PI, PI + HALF_PI);
- } else if (top < bottom) {
- ctx.arc(left, top, r, -PI, 0);
- ctx.arc(left, bottom, r, 0, PI);
- } else {
- ctx.arc(left, top, r, -PI, PI);
- }
- ctx.closePath();
- ctx.moveTo(x, y);
- } else {
- ctx.rect(x, y, width, height);
- }
- },
-
- drawPoint: function(ctx, style, radius, x, y, rotation) {
- var type, xOffset, yOffset, size, cornerRadius;
- var rad = (rotation || 0) * RAD_PER_DEG;
-
- if (style && typeof style === 'object') {
- type = style.toString();
- if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {
- ctx.save();
- ctx.translate(x, y);
- ctx.rotate(rad);
- ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);
- ctx.restore();
- return;
- }
- }
-
- if (isNaN(radius) || radius <= 0) {
- return;
- }
-
- ctx.beginPath();
-
- switch (style) {
- // Default includes circle
- default:
- ctx.arc(x, y, radius, 0, DOUBLE_PI);
- ctx.closePath();
- break;
- case 'triangle':
- ctx.moveTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
- rad += TWO_THIRDS_PI;
- ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
- rad += TWO_THIRDS_PI;
- ctx.lineTo(x + Math.sin(rad) * radius, y - Math.cos(rad) * radius);
- ctx.closePath();
- break;
- case 'rectRounded':
- // NOTE: the rounded rect implementation changed to use `arc` instead of
- // `quadraticCurveTo` since it generates better results when rect is
- // almost a circle. 0.516 (instead of 0.5) produces results with visually
- // closer proportion to the previous impl and it is inscribed in the
- // circle with `radius`. For more details, see the following PRs:
- // https://github.com/chartjs/Chart.js/issues/5597
- // https://github.com/chartjs/Chart.js/issues/5858
- cornerRadius = radius * 0.516;
- size = radius - cornerRadius;
- xOffset = Math.cos(rad + QUARTER_PI) * size;
- yOffset = Math.sin(rad + QUARTER_PI) * size;
- ctx.arc(x - xOffset, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);
- ctx.arc(x + yOffset, y - xOffset, cornerRadius, rad - HALF_PI, rad);
- ctx.arc(x + xOffset, y + yOffset, cornerRadius, rad, rad + HALF_PI);
- ctx.arc(x - yOffset, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);
- ctx.closePath();
- break;
- case 'rect':
- if (!rotation) {
- size = Math.SQRT1_2 * radius;
- ctx.rect(x - size, y - size, 2 * size, 2 * size);
- break;
- }
- rad += QUARTER_PI;
- /* falls through */
- case 'rectRot':
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + yOffset, y - xOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
- ctx.closePath();
- break;
- case 'crossRot':
- rad += QUARTER_PI;
- /* falls through */
- case 'cross':
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.moveTo(x + yOffset, y - xOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
- break;
- case 'star':
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.moveTo(x + yOffset, y - xOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
- rad += QUARTER_PI;
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- ctx.moveTo(x + yOffset, y - xOffset);
- ctx.lineTo(x - yOffset, y + xOffset);
- break;
- case 'line':
- xOffset = Math.cos(rad) * radius;
- yOffset = Math.sin(rad) * radius;
- ctx.moveTo(x - xOffset, y - yOffset);
- ctx.lineTo(x + xOffset, y + yOffset);
- break;
- case 'dash':
- ctx.moveTo(x, y);
- ctx.lineTo(x + Math.cos(rad) * radius, y + Math.sin(rad) * radius);
- break;
- }
-
- ctx.fill();
- ctx.stroke();
- },
-
- /**
- * Returns true if the point is inside the rectangle
- * @param {object} point - The point to test
- * @param {object} area - The rectangle
- * @returns {boolean}
- * @private
- */
- _isPointInArea: function(point, area) {
- var epsilon = 1e-6; // 1e-6 is margin in pixels for accumulated error.
-
- return point.x > area.left - epsilon && point.x < area.right + epsilon &&
- point.y > area.top - epsilon && point.y < area.bottom + epsilon;
- },
-
- clipArea: function(ctx, area) {
- ctx.save();
- ctx.beginPath();
- ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);
- ctx.clip();
- },
-
- unclipArea: function(ctx) {
- ctx.restore();
- },
-
- lineTo: function(ctx, previous, target, flip) {
- var stepped = target.steppedLine;
- if (stepped) {
- if (stepped === 'middle') {
- var midpoint = (previous.x + target.x) / 2.0;
- ctx.lineTo(midpoint, flip ? target.y : previous.y);
- ctx.lineTo(midpoint, flip ? previous.y : target.y);
- } else if ((stepped === 'after' && !flip) || (stepped !== 'after' && flip)) {
- ctx.lineTo(previous.x, target.y);
- } else {
- ctx.lineTo(target.x, previous.y);
- }
- ctx.lineTo(target.x, target.y);
- return;
- }
-
- if (!target.tension) {
- ctx.lineTo(target.x, target.y);
- return;
- }
-
- ctx.bezierCurveTo(
- flip ? previous.controlPointPreviousX : previous.controlPointNextX,
- flip ? previous.controlPointPreviousY : previous.controlPointNextY,
- flip ? target.controlPointNextX : target.controlPointPreviousX,
- flip ? target.controlPointNextY : target.controlPointPreviousY,
- target.x,
- target.y);
- }
-};
-
-var helpers_canvas = exports$1;
-
-// DEPRECATIONS
-
-/**
- * Provided for backward compatibility, use Chart.helpers.canvas.clear instead.
- * @namespace Chart.helpers.clear
- * @deprecated since version 2.7.0
- * @todo remove at version 3
- * @private
- */
-helpers_core.clear = exports$1.clear;
-
-/**
- * Provided for backward compatibility, use Chart.helpers.canvas.roundedRect instead.
- * @namespace Chart.helpers.drawRoundedRectangle
- * @deprecated since version 2.7.0
- * @todo remove at version 3
- * @private
- */
-helpers_core.drawRoundedRectangle = function(ctx) {
- ctx.beginPath();
- exports$1.roundedRect.apply(exports$1, arguments);
-};
-
-var defaults = {
- /**
- * @private
- */
- _set: function(scope, values) {
- return helpers_core.merge(this[scope] || (this[scope] = {}), values);
- }
-};
-
-// TODO(v3): remove 'global' from namespace. all default are global and
-// there's inconsistency around which options are under 'global'
-defaults._set('global', {
- defaultColor: 'rgba(0,0,0,0.1)',
- defaultFontColor: '#666',
- defaultFontFamily: "'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",
- defaultFontSize: 12,
- defaultFontStyle: 'normal',
- defaultLineHeight: 1.2,
- showLines: true
-});
-
-var core_defaults = defaults;
-
-var valueOrDefault = helpers_core.valueOrDefault;
-
-/**
- * Converts the given font object into a CSS font string.
- * @param {object} font - A font object.
- * @return {string} The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font
- * @private
- */
-function toFontString(font) {
- if (!font || helpers_core.isNullOrUndef(font.size) || helpers_core.isNullOrUndef(font.family)) {
- return null;
- }
-
- return (font.style ? font.style + ' ' : '')
- + (font.weight ? font.weight + ' ' : '')
- + font.size + 'px '
- + font.family;
-}
-
-/**
- * @alias Chart.helpers.options
- * @namespace
- */
-var helpers_options = {
- /**
- * Converts the given line height `value` in pixels for a specific font `size`.
- * @param {number|string} value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').
- * @param {number} size - The font size (in pixels) used to resolve relative `value`.
- * @returns {number} The effective line height in pixels (size * 1.2 if value is invalid).
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height
- * @since 2.7.0
- */
- toLineHeight: function(value, size) {
- var matches = ('' + value).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);
- if (!matches || matches[1] === 'normal') {
- return size * 1.2;
- }
-
- value = +matches[2];
-
- switch (matches[3]) {
- case 'px':
- return value;
- case '%':
- value /= 100;
- break;
- }
-
- return size * value;
- },
-
- /**
- * Converts the given value into a padding object with pre-computed width/height.
- * @param {number|object} value - If a number, set the value to all TRBL component,
- * else, if and object, use defined properties and sets undefined ones to 0.
- * @returns {object} The padding values (top, right, bottom, left, width, height)
- * @since 2.7.0
- */
- toPadding: function(value) {
- var t, r, b, l;
-
- if (helpers_core.isObject(value)) {
- t = +value.top || 0;
- r = +value.right || 0;
- b = +value.bottom || 0;
- l = +value.left || 0;
- } else {
- t = r = b = l = +value || 0;
- }
-
- return {
- top: t,
- right: r,
- bottom: b,
- left: l,
- height: t + b,
- width: l + r
- };
- },
-
- /**
- * Parses font options and returns the font object.
- * @param {object} options - A object that contains font options to be parsed.
- * @return {object} The font object.
- * @todo Support font.* options and renamed to toFont().
- * @private
- */
- _parseFont: function(options) {
- var globalDefaults = core_defaults.global;
- var size = valueOrDefault(options.fontSize, globalDefaults.defaultFontSize);
- var font = {
- family: valueOrDefault(options.fontFamily, globalDefaults.defaultFontFamily),
- lineHeight: helpers_core.options.toLineHeight(valueOrDefault(options.lineHeight, globalDefaults.defaultLineHeight), size),
- size: size,
- style: valueOrDefault(options.fontStyle, globalDefaults.defaultFontStyle),
- weight: null,
- string: ''
- };
-
- font.string = toFontString(font);
- return font;
- },
-
- /**
- * Evaluates the given `inputs` sequentially and returns the first defined value.
- * @param {Array} inputs - An array of values, falling back to the last value.
- * @param {object} [context] - If defined and the current value is a function, the value
- * is called with `context` as first argument and the result becomes the new input.
- * @param {number} [index] - If defined and the current value is an array, the value
- * at `index` become the new input.
- * @param {object} [info] - object to return information about resolution in
- * @param {boolean} [info.cacheable] - Will be set to `false` if option is not cacheable.
- * @since 2.7.0
- */
- resolve: function(inputs, context, index, info) {
- var cacheable = true;
- var i, ilen, value;
-
- for (i = 0, ilen = inputs.length; i < ilen; ++i) {
- value = inputs[i];
- if (value === undefined) {
- continue;
- }
- if (context !== undefined && typeof value === 'function') {
- value = value(context);
- cacheable = false;
- }
- if (index !== undefined && helpers_core.isArray(value)) {
- value = value[index];
- cacheable = false;
- }
- if (value !== undefined) {
- if (info && !cacheable) {
- info.cacheable = false;
- }
- return value;
- }
- }
- }
-};
-
-/**
- * @alias Chart.helpers.math
- * @namespace
- */
-var exports$2 = {
- /**
- * Returns an array of factors sorted from 1 to sqrt(value)
- * @private
- */
- _factorize: function(value) {
- var result = [];
- var sqrt = Math.sqrt(value);
- var i;
-
- for (i = 1; i < sqrt; i++) {
- if (value % i === 0) {
- result.push(i);
- result.push(value / i);
- }
- }
- if (sqrt === (sqrt | 0)) { // if value is a square number
- result.push(sqrt);
- }
-
- result.sort(function(a, b) {
- return a - b;
- }).pop();
- return result;
- },
-
- log10: Math.log10 || function(x) {
- var exponent = Math.log(x) * Math.LOG10E; // Math.LOG10E = 1 / Math.LN10.
- // Check for whole powers of 10,
- // which due to floating point rounding error should be corrected.
- var powerOf10 = Math.round(exponent);
- var isPowerOf10 = x === Math.pow(10, powerOf10);
-
- return isPowerOf10 ? powerOf10 : exponent;
- }
-};
-
-var helpers_math = exports$2;
-
-// DEPRECATIONS
-
-/**
- * Provided for backward compatibility, use Chart.helpers.math.log10 instead.
- * @namespace Chart.helpers.log10
- * @deprecated since version 2.9.0
- * @todo remove at version 3
- * @private
- */
-helpers_core.log10 = exports$2.log10;
-
-var getRtlAdapter = function(rectX, width) {
- return {
- x: function(x) {
- return rectX + rectX + width - x;
- },
- setWidth: function(w) {
- width = w;
- },
- textAlign: function(align) {
- if (align === 'center') {
- return align;
- }
- return align === 'right' ? 'left' : 'right';
- },
- xPlus: function(x, value) {
- return x - value;
- },
- leftForLtr: function(x, itemWidth) {
- return x - itemWidth;
- },
- };
-};
-
-var getLtrAdapter = function() {
- return {
- x: function(x) {
- return x;
- },
- setWidth: function(w) { // eslint-disable-line no-unused-vars
- },
- textAlign: function(align) {
- return align;
- },
- xPlus: function(x, value) {
- return x + value;
- },
- leftForLtr: function(x, _itemWidth) { // eslint-disable-line no-unused-vars
- return x;
- },
- };
-};
-
-var getAdapter = function(rtl, rectX, width) {
- return rtl ? getRtlAdapter(rectX, width) : getLtrAdapter();
-};
-
-var overrideTextDirection = function(ctx, direction) {
- var style, original;
- if (direction === 'ltr' || direction === 'rtl') {
- style = ctx.canvas.style;
- original = [
- style.getPropertyValue('direction'),
- style.getPropertyPriority('direction'),
- ];
-
- style.setProperty('direction', direction, 'important');
- ctx.prevTextDirection = original;
- }
-};
-
-var restoreTextDirection = function(ctx) {
- var original = ctx.prevTextDirection;
- if (original !== undefined) {
- delete ctx.prevTextDirection;
- ctx.canvas.style.setProperty('direction', original[0], original[1]);
- }
-};
-
-var helpers_rtl = {
- getRtlAdapter: getAdapter,
- overrideTextDirection: overrideTextDirection,
- restoreTextDirection: restoreTextDirection,
-};
-
-var helpers$1 = helpers_core;
-var easing = helpers_easing;
-var canvas = helpers_canvas;
-var options = helpers_options;
-var math = helpers_math;
-var rtl = helpers_rtl;
-helpers$1.easing = easing;
-helpers$1.canvas = canvas;
-helpers$1.options = options;
-helpers$1.math = math;
-helpers$1.rtl = rtl;
-
-function interpolate(start, view, model, ease) {
- var keys = Object.keys(model);
- var i, ilen, key, actual, origin, target, type, c0, c1;
-
- for (i = 0, ilen = keys.length; i < ilen; ++i) {
- key = keys[i];
-
- target = model[key];
-
- // if a value is added to the model after pivot() has been called, the view
- // doesn't contain it, so let's initialize the view to the target value.
- if (!view.hasOwnProperty(key)) {
- view[key] = target;
- }
-
- actual = view[key];
-
- if (actual === target || key[0] === '_') {
- continue;
- }
-
- if (!start.hasOwnProperty(key)) {
- start[key] = actual;
- }
-
- origin = start[key];
-
- type = typeof target;
-
- if (type === typeof origin) {
- if (type === 'string') {
- c0 = chartjsColor(origin);
- if (c0.valid) {
- c1 = chartjsColor(target);
- if (c1.valid) {
- view[key] = c1.mix(c0, ease).rgbString();
- continue;
- }
- }
- } else if (helpers$1.isFinite(origin) && helpers$1.isFinite(target)) {
- view[key] = origin + (target - origin) * ease;
- continue;
- }
- }
-
- view[key] = target;
- }
-}
-
-var Element = function(configuration) {
- helpers$1.extend(this, configuration);
- this.initialize.apply(this, arguments);
-};
-
-helpers$1.extend(Element.prototype, {
- _type: undefined,
-
- initialize: function() {
- this.hidden = false;
- },
-
- pivot: function() {
- var me = this;
- if (!me._view) {
- me._view = helpers$1.extend({}, me._model);
- }
- me._start = {};
- return me;
- },
-
- transition: function(ease) {
- var me = this;
- var model = me._model;
- var start = me._start;
- var view = me._view;
-
- // No animation -> No Transition
- if (!model || ease === 1) {
- me._view = helpers$1.extend({}, model);
- me._start = null;
- return me;
- }
-
- if (!view) {
- view = me._view = {};
- }
-
- if (!start) {
- start = me._start = {};
- }
-
- interpolate(start, view, model, ease);
-
- return me;
- },
-
- tooltipPosition: function() {
- return {
- x: this._model.x,
- y: this._model.y
- };
- },
-
- hasValue: function() {
- return helpers$1.isNumber(this._model.x) && helpers$1.isNumber(this._model.y);
- }
-});
-
-Element.extend = helpers$1.inherits;
-
-var core_element = Element;
-
-var exports$3 = core_element.extend({
- chart: null, // the animation associated chart instance
- currentStep: 0, // the current animation step
- numSteps: 60, // default number of steps
- easing: '', // the easing to use for this animation
- render: null, // render function used by the animation service
-
- onAnimationProgress: null, // user specified callback to fire on each step of the animation
- onAnimationComplete: null, // user specified callback to fire when the animation finishes
-});
-
-var core_animation = exports$3;
-
-// DEPRECATIONS
-
-/**
- * Provided for backward compatibility, use Chart.Animation instead
- * @prop Chart.Animation#animationObject
- * @deprecated since version 2.6.0
- * @todo remove at version 3
- */
-Object.defineProperty(exports$3.prototype, 'animationObject', {
- get: function() {
- return this;
- }
-});
-
-/**
- * Provided for backward compatibility, use Chart.Animation#chart instead
- * @prop Chart.Animation#chartInstance
- * @deprecated since version 2.6.0
- * @todo remove at version 3
- */
-Object.defineProperty(exports$3.prototype, 'chartInstance', {
- get: function() {
- return this.chart;
- },
- set: function(value) {
- this.chart = value;
- }
-});
-
-core_defaults._set('global', {
- animation: {
- duration: 1000,
- easing: 'easeOutQuart',
- onProgress: helpers$1.noop,
- onComplete: helpers$1.noop
- }
-});
-
-var core_animations = {
- animations: [],
- request: null,
-
- /**
- * @param {Chart} chart - The chart to animate.
- * @param {Chart.Animation} animation - The animation that we will animate.
- * @param {number} duration - The animation duration in ms.
- * @param {boolean} lazy - if true, the chart is not marked as animating to enable more responsive interactions
- */
- addAnimation: function(chart, animation, duration, lazy) {
- var animations = this.animations;
- var i, ilen;
-
- animation.chart = chart;
- animation.startTime = Date.now();
- animation.duration = duration;
-
- if (!lazy) {
- chart.animating = true;
- }
-
- for (i = 0, ilen = animations.length; i < ilen; ++i) {
- if (animations[i].chart === chart) {
- animations[i] = animation;
- return;
- }
- }
-
- animations.push(animation);
-
- // If there are no animations queued, manually kickstart a digest, for lack of a better word
- if (animations.length === 1) {
- this.requestAnimationFrame();
- }
- },
-
- cancelAnimation: function(chart) {
- var index = helpers$1.findIndex(this.animations, function(animation) {
- return animation.chart === chart;
- });
-
- if (index !== -1) {
- this.animations.splice(index, 1);
- chart.animating = false;
- }
- },
-
- requestAnimationFrame: function() {
- var me = this;
- if (me.request === null) {
- // Skip animation frame requests until the active one is executed.
- // This can happen when processing mouse events, e.g. 'mousemove'
- // and 'mouseout' events will trigger multiple renders.
- me.request = helpers$1.requestAnimFrame.call(window, function() {
- me.request = null;
- me.startDigest();
- });
- }
- },
-
- /**
- * @private
- */
- startDigest: function() {
- var me = this;
-
- me.advance();
-
- // Do we have more stuff to animate?
- if (me.animations.length > 0) {
- me.requestAnimationFrame();
- }
- },
-
- /**
- * @private
- */
- advance: function() {
- var animations = this.animations;
- var animation, chart, numSteps, nextStep;
- var i = 0;
-
- // 1 animation per chart, so we are looping charts here
- while (i < animations.length) {
- animation = animations[i];
- chart = animation.chart;
- numSteps = animation.numSteps;
-
- // Make sure that currentStep starts at 1
- // https://github.com/chartjs/Chart.js/issues/6104
- nextStep = Math.floor((Date.now() - animation.startTime) / animation.duration * numSteps) + 1;
- animation.currentStep = Math.min(nextStep, numSteps);
-
- helpers$1.callback(animation.render, [chart, animation], chart);
- helpers$1.callback(animation.onAnimationProgress, [animation], chart);
-
- if (animation.currentStep >= numSteps) {
- helpers$1.callback(animation.onAnimationComplete, [animation], chart);
- chart.animating = false;
- animations.splice(i, 1);
- } else {
- ++i;
- }
- }
- }
-};
-
-var resolve = helpers$1.options.resolve;
-
-var arrayEvents = ['push', 'pop', 'shift', 'splice', 'unshift'];
-
-/**
- * Hooks the array methods that add or remove values ('push', pop', 'shift', 'splice',
- * 'unshift') and notify the listener AFTER the array has been altered. Listeners are
- * called on the 'onData*' callbacks (e.g. onDataPush, etc.) with same arguments.
- */
-function listenArrayEvents(array, listener) {
- if (array._chartjs) {
- array._chartjs.listeners.push(listener);
- return;
- }
-
- Object.defineProperty(array, '_chartjs', {
- configurable: true,
- enumerable: false,
- value: {
- listeners: [listener]
- }
- });
-
- arrayEvents.forEach(function(key) {
- var method = 'onData' + key.charAt(0).toUpperCase() + key.slice(1);
- var base = array[key];
-
- Object.defineProperty(array, key, {
- configurable: true,
- enumerable: false,
- value: function() {
- var args = Array.prototype.slice.call(arguments);
- var res = base.apply(this, args);
-
- helpers$1.each(array._chartjs.listeners, function(object) {
- if (typeof object[method] === 'function') {
- object[method].apply(object, args);
- }
- });
-
- return res;
- }
- });
- });
-}
-
-/**
- * Removes the given array event listener and cleanup extra attached properties (such as
- * the _chartjs stub and overridden methods) if array doesn't have any more listeners.
- */
-function unlistenArrayEvents(array, listener) {
- var stub = array._chartjs;
- if (!stub) {
- return;
- }
-
- var listeners = stub.listeners;
- var index = listeners.indexOf(listener);
- if (index !== -1) {
- listeners.splice(index, 1);
- }
-
- if (listeners.length > 0) {
- return;
- }
-
- arrayEvents.forEach(function(key) {
- delete array[key];
- });
-
- delete array._chartjs;
-}
-
-// Base class for all dataset controllers (line, bar, etc)
-var DatasetController = function(chart, datasetIndex) {
- this.initialize(chart, datasetIndex);
-};
-
-helpers$1.extend(DatasetController.prototype, {
-
- /**
- * Element type used to generate a meta dataset (e.g. Chart.element.Line).
- * @type {Chart.core.element}
- */
- datasetElementType: null,
-
- /**
- * Element type used to generate a meta data (e.g. Chart.element.Point).
- * @type {Chart.core.element}
- */
- dataElementType: null,
-
- /**
- * Dataset element option keys to be resolved in _resolveDatasetElementOptions.
- * A derived controller may override this to resolve controller-specific options.
- * The keys defined here are for backward compatibility for legend styles.
- * @private
- */
- _datasetElementOptions: [
- 'backgroundColor',
- 'borderCapStyle',
- 'borderColor',
- 'borderDash',
- 'borderDashOffset',
- 'borderJoinStyle',
- 'borderWidth'
- ],
-
- /**
- * Data element option keys to be resolved in _resolveDataElementOptions.
- * A derived controller may override this to resolve controller-specific options.
- * The keys defined here are for backward compatibility for legend styles.
- * @private
- */
- _dataElementOptions: [
- 'backgroundColor',
- 'borderColor',
- 'borderWidth',
- 'pointStyle'
- ],
-
- initialize: function(chart, datasetIndex) {
- var me = this;
- me.chart = chart;
- me.index = datasetIndex;
- me.linkScales();
- me.addElements();
- me._type = me.getMeta().type;
- },
-
- updateIndex: function(datasetIndex) {
- this.index = datasetIndex;
- },
-
- linkScales: function() {
- var me = this;
- var meta = me.getMeta();
- var chart = me.chart;
- var scales = chart.scales;
- var dataset = me.getDataset();
- var scalesOpts = chart.options.scales;
-
- if (meta.xAxisID === null || !(meta.xAxisID in scales) || dataset.xAxisID) {
- meta.xAxisID = dataset.xAxisID || scalesOpts.xAxes[0].id;
- }
- if (meta.yAxisID === null || !(meta.yAxisID in scales) || dataset.yAxisID) {
- meta.yAxisID = dataset.yAxisID || scalesOpts.yAxes[0].id;
- }
- },
-
- getDataset: function() {
- return this.chart.data.datasets[this.index];
- },
-
- getMeta: function() {
- return this.chart.getDatasetMeta(this.index);
- },
-
- getScaleForId: function(scaleID) {
- return this.chart.scales[scaleID];
- },
-
- /**
- * @private
- */
- _getValueScaleId: function() {
- return this.getMeta().yAxisID;
- },
-
- /**
- * @private
- */
- _getIndexScaleId: function() {
- return this.getMeta().xAxisID;
- },
-
- /**
- * @private
- */
- _getValueScale: function() {
- return this.getScaleForId(this._getValueScaleId());
- },
-
- /**
- * @private
- */
- _getIndexScale: function() {
- return this.getScaleForId(this._getIndexScaleId());
- },
-
- reset: function() {
- this._update(true);
- },
-
- /**
- * @private
- */
- destroy: function() {
- if (this._data) {
- unlistenArrayEvents(this._data, this);
- }
- },
-
- createMetaDataset: function() {
- var me = this;
- var type = me.datasetElementType;
- return type && new type({
- _chart: me.chart,
- _datasetIndex: me.index
- });
- },
-
- createMetaData: function(index) {
- var me = this;
- var type = me.dataElementType;
- return type && new type({
- _chart: me.chart,
- _datasetIndex: me.index,
- _index: index
- });
- },
-
- addElements: function() {
- var me = this;
- var meta = me.getMeta();
- var data = me.getDataset().data || [];
- var metaData = meta.data;
- var i, ilen;
-
- for (i = 0, ilen = data.length; i < ilen; ++i) {
- metaData[i] = metaData[i] || me.createMetaData(i);
- }
-
- meta.dataset = meta.dataset || me.createMetaDataset();
- },
-
- addElementAndReset: function(index) {
- var element = this.createMetaData(index);
- this.getMeta().data.splice(index, 0, element);
- this.updateElement(element, index, true);
- },
-
- buildOrUpdateElements: function() {
- var me = this;
- var dataset = me.getDataset();
- var data = dataset.data || (dataset.data = []);
-
- // In order to correctly handle data addition/deletion animation (an thus simulate
- // real-time charts), we need to monitor these data modifications and synchronize
- // the internal meta data accordingly.
- if (me._data !== data) {
- if (me._data) {
- // This case happens when the user replaced the data array instance.
- unlistenArrayEvents(me._data, me);
- }
-
- if (data && Object.isExtensible(data)) {
- listenArrayEvents(data, me);
- }
- me._data = data;
- }
-
- // Re-sync meta data in case the user replaced the data array or if we missed
- // any updates and so make sure that we handle number of datapoints changing.
- me.resyncElements();
- },
-
- /**
- * Returns the merged user-supplied and default dataset-level options
- * @private
- */
- _configure: function() {
- var me = this;
- me._config = helpers$1.merge(Object.create(null), [
- me.chart.options.datasets[me._type],
- me.getDataset(),
- ], {
- merger: function(key, target, source) {
- if (key !== '_meta' && key !== 'data') {
- helpers$1._merger(key, target, source);
- }
- }
- });
- },
-
- _update: function(reset) {
- var me = this;
- me._configure();
- me._cachedDataOpts = null;
- me.update(reset);
- },
-
- update: helpers$1.noop,
-
- transition: function(easingValue) {
- var meta = this.getMeta();
- var elements = meta.data || [];
- var ilen = elements.length;
- var i = 0;
-
- for (; i < ilen; ++i) {
- elements[i].transition(easingValue);
- }
-
- if (meta.dataset) {
- meta.dataset.transition(easingValue);
- }
- },
-
- draw: function() {
- var meta = this.getMeta();
- var elements = meta.data || [];
- var ilen = elements.length;
- var i = 0;
-
- if (meta.dataset) {
- meta.dataset.draw();
- }
-
- for (; i < ilen; ++i) {
- elements[i].draw();
- }
- },
-
- /**
- * Returns a set of predefined style properties that should be used to represent the dataset
- * or the data if the index is specified
- * @param {number} index - data index
- * @return {IStyleInterface} style object
- */
- getStyle: function(index) {
- var me = this;
- var meta = me.getMeta();
- var dataset = meta.dataset;
- var style;
-
- me._configure();
- if (dataset && index === undefined) {
- style = me._resolveDatasetElementOptions(dataset || {});
- } else {
- index = index || 0;
- style = me._resolveDataElementOptions(meta.data[index] || {}, index);
- }
-
- if (style.fill === false || style.fill === null) {
- style.backgroundColor = style.borderColor;
- }
-
- return style;
- },
-
- /**
- * @private
- */
- _resolveDatasetElementOptions: function(element, hover) {
- var me = this;
- var chart = me.chart;
- var datasetOpts = me._config;
- var custom = element.custom || {};
- var options = chart.options.elements[me.datasetElementType.prototype._type] || {};
- var elementOptions = me._datasetElementOptions;
- var values = {};
- var i, ilen, key, readKey;
-
- // Scriptable options
- var context = {
- chart: chart,
- dataset: me.getDataset(),
- datasetIndex: me.index,
- hover: hover
- };
-
- for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {
- key = elementOptions[i];
- readKey = hover ? 'hover' + key.charAt(0).toUpperCase() + key.slice(1) : key;
- values[key] = resolve([
- custom[readKey],
- datasetOpts[readKey],
- options[readKey]
- ], context);
- }
-
- return values;
- },
-
- /**
- * @private
- */
- _resolveDataElementOptions: function(element, index) {
- var me = this;
- var custom = element && element.custom;
- var cached = me._cachedDataOpts;
- if (cached && !custom) {
- return cached;
- }
- var chart = me.chart;
- var datasetOpts = me._config;
- var options = chart.options.elements[me.dataElementType.prototype._type] || {};
- var elementOptions = me._dataElementOptions;
- var values = {};
-
- // Scriptable options
- var context = {
- chart: chart,
- dataIndex: index,
- dataset: me.getDataset(),
- datasetIndex: me.index
- };
-
- // `resolve` sets cacheable to `false` if any option is indexed or scripted
- var info = {cacheable: !custom};
-
- var keys, i, ilen, key;
-
- custom = custom || {};
-
- if (helpers$1.isArray(elementOptions)) {
- for (i = 0, ilen = elementOptions.length; i < ilen; ++i) {
- key = elementOptions[i];
- values[key] = resolve([
- custom[key],
- datasetOpts[key],
- options[key]
- ], context, index, info);
- }
- } else {
- keys = Object.keys(elementOptions);
- for (i = 0, ilen = keys.length; i < ilen; ++i) {
- key = keys[i];
- values[key] = resolve([
- custom[key],
- datasetOpts[elementOptions[key]],
- datasetOpts[key],
- options[key]
- ], context, index, info);
- }
- }
-
- if (info.cacheable) {
- me._cachedDataOpts = Object.freeze(values);
- }
-
- return values;
- },
-
- removeHoverStyle: function(element) {
- helpers$1.merge(element._model, element.$previousStyle || {});
- delete element.$previousStyle;
- },
-
- setHoverStyle: function(element) {
- var dataset = this.chart.data.datasets[element._datasetIndex];
- var index = element._index;
- var custom = element.custom || {};
- var model = element._model;
- var getHoverColor = helpers$1.getHoverColor;
-
- element.$previousStyle = {
- backgroundColor: model.backgroundColor,
- borderColor: model.borderColor,
- borderWidth: model.borderWidth
- };
-
- model.backgroundColor = resolve([custom.hoverBackgroundColor, dataset.hoverBackgroundColor, getHoverColor(model.backgroundColor)], undefined, index);
- model.borderColor = resolve([custom.hoverBorderColor, dataset.hoverBorderColor, getHoverColor(model.borderColor)], undefined, index);
- model.borderWidth = resolve([custom.hoverBorderWidth, dataset.hoverBorderWidth, model.borderWidth], undefined, index);
- },
-
- /**
- * @private
- */
- _removeDatasetHoverStyle: function() {
- var element = this.getMeta().dataset;
-
- if (element) {
- this.removeHoverStyle(element);
- }
- },
-
- /**
- * @private
- */
- _setDatasetHoverStyle: function() {
- var element = this.getMeta().dataset;
- var prev = {};
- var i, ilen, key, keys, hoverOptions, model;
-
- if (!element) {
- return;
- }
-
- model = element._model;
- hoverOptions = this._resolveDatasetElementOptions(element, true);
-
- keys = Object.keys(hoverOptions);
- for (i = 0, ilen = keys.length; i < ilen; ++i) {
- key = keys[i];
- prev[key] = model[key];
- model[key] = hoverOptions[key];
- }
-
- element.$previousStyle = prev;
- },
-
- /**
- * @private
- */
- resyncElements: function() {
- var me = this;
- var meta = me.getMeta();
- var data = me.getDataset().data;
- var numMeta = meta.data.length;
- var numData = data.length;
-
- if (numData < numMeta) {
- meta.data.splice(numData, numMeta - numData);
- } else if (numData > numMeta) {
- me.insertElements(numMeta, numData - numMeta);
- }
- },
-
- /**
- * @private
- */
- insertElements: function(start, count) {
- for (var i = 0; i < count; ++i) {
- this.addElementAndReset(start + i);
- }
- },
-
- /**
- * @private
- */
- onDataPush: function() {
- var count = arguments.length;
- this.insertElements(this.getDataset().data.length - count, count);
- },
-
- /**
- * @private
- */
- onDataPop: function() {
- this.getMeta().data.pop();
- },
-
- /**
- * @private
- */
- onDataShift: function() {
- this.getMeta().data.shift();
- },
-
- /**
- * @private
- */
- onDataSplice: function(start, count) {
- this.getMeta().data.splice(start, count);
- this.insertElements(start, arguments.length - 2);
- },
-
- /**
- * @private
- */
- onDataUnshift: function() {
- this.insertElements(0, arguments.length);
- }
-});
-
-DatasetController.extend = helpers$1.inherits;
-
-var core_datasetController = DatasetController;
-
-var TAU = Math.PI * 2;
-
-core_defaults._set('global', {
- elements: {
- arc: {
- backgroundColor: core_defaults.global.defaultColor,
- borderColor: '#fff',
- borderWidth: 2,
- borderAlign: 'center'
- }
- }
-});
-
-function clipArc(ctx, arc) {
- var startAngle = arc.startAngle;
- var endAngle = arc.endAngle;
- var pixelMargin = arc.pixelMargin;
- var angleMargin = pixelMargin / arc.outerRadius;
- var x = arc.x;
- var y = arc.y;
-
- // Draw an inner border by cliping the arc and drawing a double-width border
- // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders
- ctx.beginPath();
- ctx.arc(x, y, arc.outerRadius, startAngle - angleMargin, endAngle + angleMargin);
- if (arc.innerRadius > pixelMargin) {
- angleMargin = pixelMargin / arc.innerRadius;
- ctx.arc(x, y, arc.innerRadius - pixelMargin, endAngle + angleMargin, startAngle - angleMargin, true);
- } else {
- ctx.arc(x, y, pixelMargin, endAngle + Math.PI / 2, startAngle - Math.PI / 2);
- }
- ctx.closePath();
- ctx.clip();
-}
-
-function drawFullCircleBorders(ctx, vm, arc, inner) {
- var endAngle = arc.endAngle;
- var i;
-
- if (inner) {
- arc.endAngle = arc.startAngle + TAU;
- clipArc(ctx, arc);
- arc.endAngle = endAngle;
- if (arc.endAngle === arc.startAngle && arc.fullCircles) {
- arc.endAngle += TAU;
- arc.fullCircles--;
- }
- }
-
- ctx.beginPath();
- ctx.arc(arc.x, arc.y, arc.innerRadius, arc.startAngle + TAU, arc.startAngle, true);
- for (i = 0; i < arc.fullCircles; ++i) {
- ctx.stroke();
- }
-
- ctx.beginPath();
- ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.startAngle + TAU);
- for (i = 0; i < arc.fullCircles; ++i) {
- ctx.stroke();
- }
-}
-
-function drawBorder(ctx, vm, arc) {
- var inner = vm.borderAlign === 'inner';
-
- if (inner) {
- ctx.lineWidth = vm.borderWidth * 2;
- ctx.lineJoin = 'round';
- } else {
- ctx.lineWidth = vm.borderWidth;
- ctx.lineJoin = 'bevel';
- }
-
- if (arc.fullCircles) {
- drawFullCircleBorders(ctx, vm, arc, inner);
- }
-
- if (inner) {
- clipArc(ctx, arc);
- }
-
- ctx.beginPath();
- ctx.arc(arc.x, arc.y, vm.outerRadius, arc.startAngle, arc.endAngle);
- ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);
- ctx.closePath();
- ctx.stroke();
-}
-
-var element_arc = core_element.extend({
- _type: 'arc',
-
- inLabelRange: function(mouseX) {
- var vm = this._view;
-
- if (vm) {
- return (Math.pow(mouseX - vm.x, 2) < Math.pow(vm.radius + vm.hoverRadius, 2));
- }
- return false;
- },
-
- inRange: function(chartX, chartY) {
- var vm = this._view;
-
- if (vm) {
- var pointRelativePosition = helpers$1.getAngleFromPoint(vm, {x: chartX, y: chartY});
- var angle = pointRelativePosition.angle;
- var distance = pointRelativePosition.distance;
-
- // Sanitise angle range
- var startAngle = vm.startAngle;
- var endAngle = vm.endAngle;
- while (endAngle < startAngle) {
- endAngle += TAU;
- }
- while (angle > endAngle) {
- angle -= TAU;
- }
- while (angle < startAngle) {
- angle += TAU;
- }
-
- // Check if within the range of the open/close angle
- var betweenAngles = (angle >= startAngle && angle <= endAngle);
- var withinRadius = (distance >= vm.innerRadius && distance <= vm.outerRadius);
-
- return (betweenAngles && withinRadius);
- }
- return false;
- },
-
- getCenterPoint: function() {
- var vm = this._view;
- var halfAngle = (vm.startAngle + vm.endAngle) / 2;
- var halfRadius = (vm.innerRadius + vm.outerRadius) / 2;
- return {
- x: vm.x + Math.cos(halfAngle) * halfRadius,
- y: vm.y + Math.sin(halfAngle) * halfRadius
- };
- },
-
- getArea: function() {
- var vm = this._view;
- return Math.PI * ((vm.endAngle - vm.startAngle) / (2 * Math.PI)) * (Math.pow(vm.outerRadius, 2) - Math.pow(vm.innerRadius, 2));
- },
-
- tooltipPosition: function() {
- var vm = this._view;
- var centreAngle = vm.startAngle + ((vm.endAngle - vm.startAngle) / 2);
- var rangeFromCentre = (vm.outerRadius - vm.innerRadius) / 2 + vm.innerRadius;
-
- return {
- x: vm.x + (Math.cos(centreAngle) * rangeFromCentre),
- y: vm.y + (Math.sin(centreAngle) * rangeFromCentre)
- };
- },
-
- draw: function() {
- var ctx = this._chart.ctx;
- var vm = this._view;
- var pixelMargin = (vm.borderAlign === 'inner') ? 0.33 : 0;
- var arc = {
- x: vm.x,
- y: vm.y,
- innerRadius: vm.innerRadius,
- outerRadius: Math.max(vm.outerRadius - pixelMargin, 0),
- pixelMargin: pixelMargin,
- startAngle: vm.startAngle,
- endAngle: vm.endAngle,
- fullCircles: Math.floor(vm.circumference / TAU)
- };
- var i;
-
- ctx.save();
-
- ctx.fillStyle = vm.backgroundColor;
- ctx.strokeStyle = vm.borderColor;
-
- if (arc.fullCircles) {
- arc.endAngle = arc.startAngle + TAU;
- ctx.beginPath();
- ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);
- ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);
- ctx.closePath();
- for (i = 0; i < arc.fullCircles; ++i) {
- ctx.fill();
- }
- arc.endAngle = arc.startAngle + vm.circumference % TAU;
- }
-
- ctx.beginPath();
- ctx.arc(arc.x, arc.y, arc.outerRadius, arc.startAngle, arc.endAngle);
- ctx.arc(arc.x, arc.y, arc.innerRadius, arc.endAngle, arc.startAngle, true);
- ctx.closePath();
- ctx.fill();
-
- if (vm.borderWidth) {
- drawBorder(ctx, vm, arc);
- }
-
- ctx.restore();
- }
-});
-
-var valueOrDefault$1 = helpers$1.valueOrDefault;
-
-var defaultColor = core_defaults.global.defaultColor;
-
-core_defaults._set('global', {
- elements: {
- line: {
- tension: 0.4,
- backgroundColor: defaultColor,
- borderWidth: 3,
- borderColor: defaultColor,
- borderCapStyle: 'butt',
- borderDash: [],
- borderDashOffset: 0.0,
- borderJoinStyle: 'miter',
- capBezierPoints: true,
- fill: true, // do we fill in the area between the line and its base axis
- }
- }
-});
-
-var element_line = core_element.extend({
- _type: 'line',
-
- draw: function() {
- var me = this;
- var vm = me._view;
- var ctx = me._chart.ctx;
- var spanGaps = vm.spanGaps;
- var points = me._children.slice(); // clone array
- var globalDefaults = core_defaults.global;
- var globalOptionLineElements = globalDefaults.elements.line;
- var lastDrawnIndex = -1;
- var closePath = me._loop;
- var index, previous, currentVM;
-
- if (!points.length) {
- return;
- }
-
- if (me._loop) {
- for (index = 0; index < points.length; ++index) {
- previous = helpers$1.previousItem(points, index);
- // If the line has an open path, shift the point array
- if (!points[index]._view.skip && previous._view.skip) {
- points = points.slice(index).concat(points.slice(0, index));
- closePath = spanGaps;
- break;
- }
- }
- // If the line has a close path, add the first point again
- if (closePath) {
- points.push(points[0]);
- }
- }
-
- ctx.save();
-
- // Stroke Line Options
- ctx.lineCap = vm.borderCapStyle || globalOptionLineElements.borderCapStyle;
-
- // IE 9 and 10 do not support line dash
- if (ctx.setLineDash) {
- ctx.setLineDash(vm.borderDash || globalOptionLineElements.borderDash);
- }
-
- ctx.lineDashOffset = valueOrDefault$1(vm.borderDashOffset, globalOptionLineElements.borderDashOffset);
- ctx.lineJoin = vm.borderJoinStyle || globalOptionLineElements.borderJoinStyle;
- ctx.lineWidth = valueOrDefault$1(vm.borderWidth, globalOptionLineElements.borderWidth);
- ctx.strokeStyle = vm.borderColor || globalDefaults.defaultColor;
-
- // Stroke Line
- ctx.beginPath();
-
- // First point moves to it's starting position no matter what
- currentVM = points[0]._view;
- if (!currentVM.skip) {
- ctx.moveTo(currentVM.x, currentVM.y);
- lastDrawnIndex = 0;
- }
-
- for (index = 1; index < points.length; ++index) {
- currentVM = points[index]._view;
- previous = lastDrawnIndex === -1 ? helpers$1.previousItem(points, index) : points[lastDrawnIndex];
-
- if (!currentVM.skip) {
- if ((lastDrawnIndex !== (index - 1) && !spanGaps) || lastDrawnIndex === -1) {
- // There was a gap and this is the first point after the gap
- ctx.moveTo(currentVM.x, currentVM.y);
- } else {
- // Line to next point
- helpers$1.canvas.lineTo(ctx, previous._view, currentVM);
- }
- lastDrawnIndex = index;
- }
- }
-
- if (closePath) {
- ctx.closePath();
- }
-
- ctx.stroke();
- ctx.restore();
- }
-});
-
-var valueOrDefault$2 = helpers$1.valueOrDefault;
-
-var defaultColor$1 = core_defaults.global.defaultColor;
-
-core_defaults._set('global', {
- elements: {
- point: {
- radius: 3,
- pointStyle: 'circle',
- backgroundColor: defaultColor$1,
- borderColor: defaultColor$1,
- borderWidth: 1,
- // Hover
- hitRadius: 1,
- hoverRadius: 4,
- hoverBorderWidth: 1
- }
- }
-});
-
-function xRange(mouseX) {
- var vm = this._view;
- return vm ? (Math.abs(mouseX - vm.x) < vm.radius + vm.hitRadius) : false;
-}
-
-function yRange(mouseY) {
- var vm = this._view;
- return vm ? (Math.abs(mouseY - vm.y) < vm.radius + vm.hitRadius) : false;
-}
-
-var element_point = core_element.extend({
- _type: 'point',
-
- inRange: function(mouseX, mouseY) {
- var vm = this._view;
- return vm ? ((Math.pow(mouseX - vm.x, 2) + Math.pow(mouseY - vm.y, 2)) < Math.pow(vm.hitRadius + vm.radius, 2)) : false;
- },
-
- inLabelRange: xRange,
- inXRange: xRange,
- inYRange: yRange,
-
- getCenterPoint: function() {
- var vm = this._view;
- return {
- x: vm.x,
- y: vm.y
- };
- },
-
- getArea: function() {
- return Math.PI * Math.pow(this._view.radius, 2);
- },
-
- tooltipPosition: function() {
- var vm = this._view;
- return {
- x: vm.x,
- y: vm.y,
- padding: vm.radius + vm.borderWidth
- };
- },
-
- draw: function(chartArea) {
- var vm = this._view;
- var ctx = this._chart.ctx;
- var pointStyle = vm.pointStyle;
- var rotation = vm.rotation;
- var radius = vm.radius;
- var x = vm.x;
- var y = vm.y;
- var globalDefaults = core_defaults.global;
- var defaultColor = globalDefaults.defaultColor; // eslint-disable-line no-shadow
-
- if (vm.skip) {
- return;
- }
-
- // Clipping for Points.
- if (chartArea === undefined || helpers$1.canvas._isPointInArea(vm, chartArea)) {
- ctx.strokeStyle = vm.borderColor || defaultColor;
- ctx.lineWidth = valueOrDefault$2(vm.borderWidth, globalDefaults.elements.point.borderWidth);
- ctx.fillStyle = vm.backgroundColor || defaultColor;
- helpers$1.canvas.drawPoint(ctx, pointStyle, radius, x, y, rotation);
- }
- }
-});
-
-var defaultColor$2 = core_defaults.global.defaultColor;
-
-core_defaults._set('global', {
- elements: {
- rectangle: {
- backgroundColor: defaultColor$2,
- borderColor: defaultColor$2,
- borderSkipped: 'bottom',
- borderWidth: 0
- }
- }
-});
-
-function isVertical(vm) {
- return vm && vm.width !== undefined;
-}
-
-/**
- * Helper function to get the bounds of the bar regardless of the orientation
- * @param bar {Chart.Element.Rectangle} the bar
- * @return {Bounds} bounds of the bar
- * @private
- */
-function getBarBounds(vm) {
- var x1, x2, y1, y2, half;
-
- if (isVertical(vm)) {
- half = vm.width / 2;
- x1 = vm.x - half;
- x2 = vm.x + half;
- y1 = Math.min(vm.y, vm.base);
- y2 = Math.max(vm.y, vm.base);
- } else {
- half = vm.height / 2;
- x1 = Math.min(vm.x, vm.base);
- x2 = Math.max(vm.x, vm.base);
- y1 = vm.y - half;
- y2 = vm.y + half;
- }
-
- return {
- left: x1,
- top: y1,
- right: x2,
- bottom: y2
- };
-}
-
-function swap(orig, v1, v2) {
- return orig === v1 ? v2 : orig === v2 ? v1 : orig;
-}
-
-function parseBorderSkipped(vm) {
- var edge = vm.borderSkipped;
- var res = {};
-
- if (!edge) {
- return res;
- }
-
- if (vm.horizontal) {
- if (vm.base > vm.x) {
- edge = swap(edge, 'left', 'right');
- }
- } else if (vm.base < vm.y) {
- edge = swap(edge, 'bottom', 'top');
- }
-
- res[edge] = true;
- return res;
-}
-
-function parseBorderWidth(vm, maxW, maxH) {
- var value = vm.borderWidth;
- var skip = parseBorderSkipped(vm);
- var t, r, b, l;
-
- if (helpers$1.isObject(value)) {
- t = +value.top || 0;
- r = +value.right || 0;
- b = +value.bottom || 0;
- l = +value.left || 0;
- } else {
- t = r = b = l = +value || 0;
- }
-
- return {
- t: skip.top || (t < 0) ? 0 : t > maxH ? maxH : t,
- r: skip.right || (r < 0) ? 0 : r > maxW ? maxW : r,
- b: skip.bottom || (b < 0) ? 0 : b > maxH ? maxH : b,
- l: skip.left || (l < 0) ? 0 : l > maxW ? maxW : l
- };
-}
-
-function boundingRects(vm) {
- var bounds = getBarBounds(vm);
- var width = bounds.right - bounds.left;
- var height = bounds.bottom - bounds.top;
- var border = parseBorderWidth(vm, width / 2, height / 2);
-
- return {
- outer: {
- x: bounds.left,
- y: bounds.top,
- w: width,
- h: height
- },
- inner: {
- x: bounds.left + border.l,
- y: bounds.top + border.t,
- w: width - border.l - border.r,
- h: height - border.t - border.b
- }
- };
-}
-
-function inRange(vm, x, y) {
- var skipX = x === null;
- var skipY = y === null;
- var bounds = !vm || (skipX && skipY) ? false : getBarBounds(vm);
-
- return bounds
- && (skipX || x >= bounds.left && x <= bounds.right)
- && (skipY || y >= bounds.top && y <= bounds.bottom);
-}
-
-var element_rectangle = core_element.extend({
- _type: 'rectangle',
-
- draw: function() {
- var ctx = this._chart.ctx;
- var vm = this._view;
- var rects = boundingRects(vm);
- var outer = rects.outer;
- var inner = rects.inner;
-
- ctx.fillStyle = vm.backgroundColor;
- ctx.fillRect(outer.x, outer.y, outer.w, outer.h);
-
- if (outer.w === inner.w && outer.h === inner.h) {
- return;
- }
-
- ctx.save();
- ctx.beginPath();
- ctx.rect(outer.x, outer.y, outer.w, outer.h);
- ctx.clip();
- ctx.fillStyle = vm.borderColor;
- ctx.rect(inner.x, inner.y, inner.w, inner.h);
- ctx.fill('evenodd');
- ctx.restore();
- },
-
- height: function() {
- var vm = this._view;
- return vm.base - vm.y;
- },
-
- inRange: function(mouseX, mouseY) {
- return inRange(this._view, mouseX, mouseY);
- },
-
- inLabelRange: function(mouseX, mouseY) {
- var vm = this._view;
- return isVertical(vm)
- ? inRange(vm, mouseX, null)
- : inRange(vm, null, mouseY);
- },
-
- inXRange: function(mouseX) {
- return inRange(this._view, mouseX, null);
- },
-
- inYRange: function(mouseY) {
- return inRange(this._view, null, mouseY);
- },
-
- getCenterPoint: function() {
- var vm = this._view;
- var x, y;
- if (isVertical(vm)) {
- x = vm.x;
- y = (vm.y + vm.base) / 2;
- } else {
- x = (vm.x + vm.base) / 2;
- y = vm.y;
- }
-
- return {x: x, y: y};
- },
-
- getArea: function() {
- var vm = this._view;
-
- return isVertical(vm)
- ? vm.width * Math.abs(vm.y - vm.base)
- : vm.height * Math.abs(vm.x - vm.base);
- },
-
- tooltipPosition: function() {
- var vm = this._view;
- return {
- x: vm.x,
- y: vm.y
- };
- }
-});
-
-var elements = {};
-var Arc = element_arc;
-var Line = element_line;
-var Point = element_point;
-var Rectangle = element_rectangle;
-elements.Arc = Arc;
-elements.Line = Line;
-elements.Point = Point;
-elements.Rectangle = Rectangle;
-
-var deprecated = helpers$1._deprecated;
-var valueOrDefault$3 = helpers$1.valueOrDefault;
-
-core_defaults._set('bar', {
- hover: {
- mode: 'label'
- },
-
- scales: {
- xAxes: [{
- type: 'category',
- offset: true,
- gridLines: {
- offsetGridLines: true
- }
- }],
-
- yAxes: [{
- type: 'linear'
- }]
- }
-});
-
-core_defaults._set('global', {
- datasets: {
- bar: {
- categoryPercentage: 0.8,
- barPercentage: 0.9
- }
- }
-});
-
-/**
- * Computes the "optimal" sample size to maintain bars equally sized while preventing overlap.
- * @private
- */
-function computeMinSampleSize(scale, pixels) {
- var min = scale._length;
- var prev, curr, i, ilen;
-
- for (i = 1, ilen = pixels.length; i < ilen; ++i) {
- min = Math.min(min, Math.abs(pixels[i] - pixels[i - 1]));
- }
-
- for (i = 0, ilen = scale.getTicks().length; i < ilen; ++i) {
- curr = scale.getPixelForTick(i);
- min = i > 0 ? Math.min(min, Math.abs(curr - prev)) : min;
- prev = curr;
- }
-
- return min;
-}
-
-/**
- * Computes an "ideal" category based on the absolute bar thickness or, if undefined or null,
- * uses the smallest interval (see computeMinSampleSize) that prevents bar overlapping. This
- * mode currently always generates bars equally sized (until we introduce scriptable options?).
- * @private
- */
-function computeFitCategoryTraits(index, ruler, options) {
- var thickness = options.barThickness;
- var count = ruler.stackCount;
- var curr = ruler.pixels[index];
- var min = helpers$1.isNullOrUndef(thickness)
- ? computeMinSampleSize(ruler.scale, ruler.pixels)
- : -1;
- var size, ratio;
-
- if (helpers$1.isNullOrUndef(thickness)) {
- size = min * options.categoryPercentage;
- ratio = options.barPercentage;
- } else {
- // When bar thickness is enforced, category and bar percentages are ignored.
- // Note(SB): we could add support for relative bar thickness (e.g. barThickness: '50%')
- // and deprecate barPercentage since this value is ignored when thickness is absolute.
- size = thickness * count;
- ratio = 1;
- }
-
- return {
- chunk: size / count,
- ratio: ratio,
- start: curr - (size / 2)
- };
-}
-
-/**
- * Computes an "optimal" category that globally arranges bars side by side (no gap when
- * percentage options are 1), based on the previous and following categories. This mode
- * generates bars with different widths when data are not evenly spaced.
- * @private
- */
-function computeFlexCategoryTraits(index, ruler, options) {
- var pixels = ruler.pixels;
- var curr = pixels[index];
- var prev = index > 0 ? pixels[index - 1] : null;
- var next = index < pixels.length - 1 ? pixels[index + 1] : null;
- var percent = options.categoryPercentage;
- var start, size;
-
- if (prev === null) {
- // first data: its size is double based on the next point or,
- // if it's also the last data, we use the scale size.
- prev = curr - (next === null ? ruler.end - ruler.start : next - curr);
- }
-
- if (next === null) {
- // last data: its size is also double based on the previous point.
- next = curr + curr - prev;
- }
-
- start = curr - (curr - Math.min(prev, next)) / 2 * percent;
- size = Math.abs(next - prev) / 2 * percent;
-
- return {
- chunk: size / ruler.stackCount,
- ratio: options.barPercentage,
- start: start
- };
-}
-
-var controller_bar = core_datasetController.extend({
-
- dataElementType: elements.Rectangle,
-
- /**
- * @private
- */
- _dataElementOptions: [
- 'backgroundColor',
- 'borderColor',
- 'borderSkipped',
- 'borderWidth',
- 'barPercentage',
- 'barThickness',
- 'categoryPercentage',
- 'maxBarThickness',
- 'minBarLength'
- ],
-
- initialize: function() {
- var me = this;
- var meta, scaleOpts;
-
- core_datasetController.prototype.initialize.apply(me, arguments);
-
- meta = me.getMeta();
- meta.stack = me.getDataset().stack;
- meta.bar = true;
-
- scaleOpts = me._getIndexScale().options;
- deprecated('bar chart', scaleOpts.barPercentage, 'scales.[x/y]Axes.barPercentage', 'dataset.barPercentage');
- deprecated('bar chart', scaleOpts.barThickness, 'scales.[x/y]Axes.barThickness', 'dataset.barThickness');
- deprecated('bar chart', scaleOpts.categoryPercentage, 'scales.[x/y]Axes.categoryPercentage', 'dataset.categoryPercentage');
- deprecated('bar chart', me._getValueScale().options.minBarLength, 'scales.[x/y]Axes.minBarLength', 'dataset.minBarLength');
- deprecated('bar chart', scaleOpts.maxBarThickness, 'scales.[x/y]Axes.maxBarThickness', 'dataset.maxBarThickness');
- },
-
- update: function(reset) {
- var me = this;
- var rects = me.getMeta().data;
- var i, ilen;
-
- me._ruler = me.getRuler();
-
- for (i = 0, ilen = rects.length; i < ilen; ++i) {
- me.updateElement(rects[i], i, reset);
- }
- },
-
- updateElement: function(rectangle, index, reset) {
- var me = this;
- var meta = me.getMeta();
- var dataset = me.getDataset();
- var options = me._resolveDataElementOptions(rectangle, index);
-
- rectangle._xScale = me.getScaleForId(meta.xAxisID);
- rectangle._yScale = me.getScaleForId(meta.yAxisID);
- rectangle._datasetIndex = me.index;
- rectangle._index = index;
- rectangle._model = {
- backgroundColor: options.backgroundColor,
- borderColor: options.borderColor,
- borderSkipped: options.borderSkipped,
- borderWidth: options.borderWidth,
- datasetLabel: dataset.label,
- label: me.chart.data.labels[index]
- };
-
- if (helpers$1.isArray(dataset.data[index])) {
- rectangle._model.borderSkipped = null;
- }
-
- me._updateElementGeometry(rectangle, index, reset, options);
-
- rectangle.pivot();
- },
-
- /**
- * @private
- */
- _updateElementGeometry: function(rectangle, index, reset, options) {
- var me = this;
- var model = rectangle._model;
- var vscale = me._getValueScale();
- var base = vscale.getBasePixel();
- var horizontal = vscale.isHorizontal();
- var ruler = me._ruler || me.getRuler();
- var vpixels = me.calculateBarValuePixels(me.index, index, options);
- var ipixels = me.calculateBarIndexPixels(me.index, index, ruler, options);
-
- model.horizontal = horizontal;
- model.base = reset ? base : vpixels.base;
- model.x = horizontal ? reset ? base : vpixels.head : ipixels.center;
- model.y = horizontal ? ipixels.center : reset ? base : vpixels.head;
- model.height = horizontal ? ipixels.size : undefined;
- model.width = horizontal ? undefined : ipixels.size;
- },
-
- /**
- * Returns the stacks based on groups and bar visibility.
- * @param {number} [last] - The dataset index
- * @returns {string[]} The list of stack IDs
- * @private
- */
- _getStacks: function(last) {
- var me = this;
- var scale = me._getIndexScale();
- var metasets = scale._getMatchingVisibleMetas(me._type);
- var stacked = scale.options.stacked;
- var ilen = metasets.length;
- var stacks = [];
- var i, meta;
-
- for (i = 0; i < ilen; ++i) {
- meta = metasets[i];
- // stacked | meta.stack
- // | found | not found | undefined
- // false | x | x | x
- // true | | x |
- // undefined | | x | x
- if (stacked === false || stacks.indexOf(meta.stack) === -1 ||
- (stacked === undefined && meta.stack === undefined)) {
- stacks.push(meta.stack);
- }
- if (meta.index === last) {
- break;
- }
- }
-
- return stacks;
- },
-
- /**
- * Returns the effective number of stacks based on groups and bar visibility.
- * @private
- */
- getStackCount: function() {
- return this._getStacks().length;
- },
-
- /**
- * Returns the stack index for the given dataset based on groups and bar visibility.
- * @param {number} [datasetIndex] - The dataset index
- * @param {string} [name] - The stack name to find
- * @returns {number} The stack index
- * @private
- */
- getStackIndex: function(datasetIndex, name) {
- var stacks = this._getStacks(datasetIndex);
- var index = (name !== undefined)
- ? stacks.indexOf(name)
- : -1; // indexOf returns -1 if element is not present
-
- return (index === -1)
- ? stacks.length - 1
- : index;
- },
-
- /**
- * @private
- */
- getRuler: function() {
- var me = this;
- var scale = me._getIndexScale();
- var pixels = [];
- var i, ilen;
-
- for (i = 0, ilen = me.getMeta().data.length; i < ilen; ++i) {
- pixels.push(scale.getPixelForValue(null, i, me.index));
- }
-
- return {
- pixels: pixels,
- start: scale._startPixel,
- end: scale._endPixel,
- stackCount: me.getStackCount(),
- scale: scale
- };
- },
-
- /**
- * Note: pixel values are not clamped to the scale area.
- * @private
- */
- calculateBarValuePixels: function(datasetIndex, index, options) {
- var me = this;
- var chart = me.chart;
- var scale = me._getValueScale();
- var isHorizontal = scale.isHorizontal();
- var datasets = chart.data.datasets;
- var metasets = scale._getMatchingVisibleMetas(me._type);
- var value = scale._parseValue(datasets[datasetIndex].data[index]);
- var minBarLength = options.minBarLength;
- var stacked = scale.options.stacked;
- var stack = me.getMeta().stack;
- var start = value.start === undefined ? 0 : value.max >= 0 && value.min >= 0 ? value.min : value.max;
- var length = value.start === undefined ? value.end : value.max >= 0 && value.min >= 0 ? value.max - value.min : value.min - value.max;
- var ilen = metasets.length;
- var i, imeta, ivalue, base, head, size, stackLength;
-
- if (stacked || (stacked === undefined && stack !== undefined)) {
- for (i = 0; i < ilen; ++i) {
- imeta = metasets[i];
-
- if (imeta.index === datasetIndex) {
- break;
- }
-
- if (imeta.stack === stack) {
- stackLength = scale._parseValue(datasets[imeta.index].data[index]);
- ivalue = stackLength.start === undefined ? stackLength.end : stackLength.min >= 0 && stackLength.max >= 0 ? stackLength.max : stackLength.min;
-
- if ((value.min < 0 && ivalue < 0) || (value.max >= 0 && ivalue > 0)) {
- start += ivalue;
- }
- }
- }
- }
-
- base = scale.getPixelForValue(start);
- head = scale.getPixelForValue(start + length);
- size = head - base;
-
- if (minBarLength !== undefined && Math.abs(size) < minBarLength) {
- size = minBarLength;
- if (length >= 0 && !isHorizontal || length < 0 && isHorizontal) {
- head = base - minBarLength;
- } else {
- head = base + minBarLength;
- }
- }
-
- return {
- size: size,
- base: base,
- head: head,
- center: head + size / 2
- };
- },
-
- /**
- * @private
- */
- calculateBarIndexPixels: function(datasetIndex, index, ruler, options) {
- var me = this;
- var range = options.barThickness === 'flex'
- ? computeFlexCategoryTraits(index, ruler, options)
- : computeFitCategoryTraits(index, ruler, options);
-
- var stackIndex = me.getStackIndex(datasetIndex, me.getMeta().stack);
- var center = range.start + (range.chunk * stackIndex) + (range.chunk / 2);
- var size = Math.min(
- valueOrDefault$3(options.maxBarThickness, Infinity),
- range.chunk * range.ratio);
-
- return {
- base: center - size / 2,
- head: center + size / 2,
- center: center,
- size: size
- };
- },
-
- draw: function() {
- var me = this;
- var chart = me.chart;
- var scale = me._getValueScale();
- var rects = me.getMeta().data;
- var dataset = me.getDataset();
- var ilen = rects.length;
- var i = 0;
-
- helpers$1.canvas.clipArea(chart.ctx, chart.chartArea);
-
- for (; i < ilen; ++i) {
- var val = scale._parseValue(dataset.data[i]);
- if (!isNaN(val.min) && !isNaN(val.max)) {
- rects[i].draw();
- }
- }
-
- helpers$1.canvas.unclipArea(chart.ctx);
- },
-
- /**
- * @private
- */
- _resolveDataElementOptions: function() {
- var me = this;
- var values = helpers$1.extend({}, core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments));
- var indexOpts = me._getIndexScale().options;
- var valueOpts = me._getValueScale().options;
-
- values.barPercentage = valueOrDefault$3(indexOpts.barPercentage, values.barPercentage);
- values.barThickness = valueOrDefault$3(indexOpts.barThickness, values.barThickness);
- values.categoryPercentage = valueOrDefault$3(indexOpts.categoryPercentage, values.categoryPercentage);
- values.maxBarThickness = valueOrDefault$3(indexOpts.maxBarThickness, values.maxBarThickness);
- values.minBarLength = valueOrDefault$3(valueOpts.minBarLength, values.minBarLength);
-
- return values;
- }
-
-});
-
-var valueOrDefault$4 = helpers$1.valueOrDefault;
-var resolve$1 = helpers$1.options.resolve;
-
-core_defaults._set('bubble', {
- hover: {
- mode: 'single'
- },
-
- scales: {
- xAxes: [{
- type: 'linear', // bubble should probably use a linear scale by default
- position: 'bottom',
- id: 'x-axis-0' // need an ID so datasets can reference the scale
- }],
- yAxes: [{
- type: 'linear',
- position: 'left',
- id: 'y-axis-0'
- }]
- },
-
- tooltips: {
- callbacks: {
- title: function() {
- // Title doesn't make sense for scatter since we format the data as a point
- return '';
- },
- label: function(item, data) {
- var datasetLabel = data.datasets[item.datasetIndex].label || '';
- var dataPoint = data.datasets[item.datasetIndex].data[item.index];
- return datasetLabel + ': (' + item.xLabel + ', ' + item.yLabel + ', ' + dataPoint.r + ')';
- }
- }
- }
-});
-
-var controller_bubble = core_datasetController.extend({
- /**
- * @protected
- */
- dataElementType: elements.Point,
-
- /**
- * @private
- */
- _dataElementOptions: [
- 'backgroundColor',
- 'borderColor',
- 'borderWidth',
- 'hoverBackgroundColor',
- 'hoverBorderColor',
- 'hoverBorderWidth',
- 'hoverRadius',
- 'hitRadius',
- 'pointStyle',
- 'rotation'
- ],
-
- /**
- * @protected
- */
- update: function(reset) {
- var me = this;
- var meta = me.getMeta();
- var points = meta.data;
-
- // Update Points
- helpers$1.each(points, function(point, index) {
- me.updateElement(point, index, reset);
- });
- },
-
- /**
- * @protected
- */
- updateElement: function(point, index, reset) {
- var me = this;
- var meta = me.getMeta();
- var custom = point.custom || {};
- var xScale = me.getScaleForId(meta.xAxisID);
- var yScale = me.getScaleForId(meta.yAxisID);
- var options = me._resolveDataElementOptions(point, index);
- var data = me.getDataset().data[index];
- var dsIndex = me.index;
-
- var x = reset ? xScale.getPixelForDecimal(0.5) : xScale.getPixelForValue(typeof data === 'object' ? data : NaN, index, dsIndex);
- var y = reset ? yScale.getBasePixel() : yScale.getPixelForValue(data, index, dsIndex);
-
- point._xScale = xScale;
- point._yScale = yScale;
- point._options = options;
- point._datasetIndex = dsIndex;
- point._index = index;
- point._model = {
- backgroundColor: options.backgroundColor,
- borderColor: options.borderColor,
- borderWidth: options.borderWidth,
- hitRadius: options.hitRadius,
- pointStyle: options.pointStyle,
- rotation: options.rotation,
- radius: reset ? 0 : options.radius,
- skip: custom.skip || isNaN(x) || isNaN(y),
- x: x,
- y: y,
- };
-
- point.pivot();
- },
-
- /**
- * @protected
- */
- setHoverStyle: function(point) {
- var model = point._model;
- var options = point._options;
- var getHoverColor = helpers$1.getHoverColor;
-
- point.$previousStyle = {
- backgroundColor: model.backgroundColor,
- borderColor: model.borderColor,
- borderWidth: model.borderWidth,
- radius: model.radius
- };
-
- model.backgroundColor = valueOrDefault$4(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
- model.borderColor = valueOrDefault$4(options.hoverBorderColor, getHoverColor(options.borderColor));
- model.borderWidth = valueOrDefault$4(options.hoverBorderWidth, options.borderWidth);
- model.radius = options.radius + options.hoverRadius;
- },
-
- /**
- * @private
- */
- _resolveDataElementOptions: function(point, index) {
- var me = this;
- var chart = me.chart;
- var dataset = me.getDataset();
- var custom = point.custom || {};
- var data = dataset.data[index] || {};
- var values = core_datasetController.prototype._resolveDataElementOptions.apply(me, arguments);
-
- // Scriptable options
- var context = {
- chart: chart,
- dataIndex: index,
- dataset: dataset,
- datasetIndex: me.index
- };
-
- // In case values were cached (and thus frozen), we need to clone the values
- if (me._cachedDataOpts === values) {
- values = helpers$1.extend({}, values);
- }
-
- // Custom radius resolution
- values.radius = resolve$1([
- custom.radius,
- data.r,
- me._config.radius,
- chart.options.elements.point.radius
- ], context, index);
-
- return values;
- }
-});
-
-var valueOrDefault$5 = helpers$1.valueOrDefault;
-
-var PI$1 = Math.PI;
-var DOUBLE_PI$1 = PI$1 * 2;
-var HALF_PI$1 = PI$1 / 2;
-
-core_defaults._set('doughnut', {
- animation: {
- // Boolean - Whether we animate the rotation of the Doughnut
- animateRotate: true,
- // Boolean - Whether we animate scaling the Doughnut from the centre
- animateScale: false
- },
- hover: {
- mode: 'single'
- },
- legendCallback: function(chart) {
- var list = document.createElement('ul');
- var data = chart.data;
- var datasets = data.datasets;
- var labels = data.labels;
- var i, ilen, listItem, listItemSpan;
-
- list.setAttribute('class', chart.id + '-legend');
- if (datasets.length) {
- for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {
- listItem = list.appendChild(document.createElement('li'));
- listItemSpan = listItem.appendChild(document.createElement('span'));
- listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];
- if (labels[i]) {
- listItem.appendChild(document.createTextNode(labels[i]));
- }
- }
- }
-
- return list.outerHTML;
- },
- legend: {
- labels: {
- generateLabels: function(chart) {
- var data = chart.data;
- if (data.labels.length && data.datasets.length) {
- return data.labels.map(function(label, i) {
- var meta = chart.getDatasetMeta(0);
- var style = meta.controller.getStyle(i);
-
- return {
- text: label,
- fillStyle: style.backgroundColor,
- strokeStyle: style.borderColor,
- lineWidth: style.borderWidth,
- hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,
-
- // Extra data used for toggling the correct item
- index: i
- };
- });
- }
- return [];
- }
- },
-
- onClick: function(e, legendItem) {
- var index = legendItem.index;
- var chart = this.chart;
- var i, ilen, meta;
-
- for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
- meta = chart.getDatasetMeta(i);
- // toggle visibility of index if exists
- if (meta.data[index]) {
- meta.data[index].hidden = !meta.data[index].hidden;
- }
- }
-
- chart.update();
- }
- },
-
- // The percentage of the chart that we cut out of the middle.
- cutoutPercentage: 50,
-
- // The rotation of the chart, where the first data arc begins.
- rotation: -HALF_PI$1,
-
- // The total circumference of the chart.
- circumference: DOUBLE_PI$1,
-
- // Need to override these to give a nice default
- tooltips: {
- callbacks: {
- title: function() {
- return '';
- },
- label: function(tooltipItem, data) {
- var dataLabel = data.labels[tooltipItem.index];
- var value = ': ' + data.datasets[tooltipItem.datasetIndex].data[tooltipItem.index];
-
- if (helpers$1.isArray(dataLabel)) {
- // show value on first line of multiline label
- // need to clone because we are changing the value
- dataLabel = dataLabel.slice();
- dataLabel[0] += value;
- } else {
- dataLabel += value;
- }
-
- return dataLabel;
- }
- }
- }
-});
-
-var controller_doughnut = core_datasetController.extend({
-
- dataElementType: elements.Arc,
-
- linkScales: helpers$1.noop,
-
- /**
- * @private
- */
- _dataElementOptions: [
- 'backgroundColor',
- 'borderColor',
- 'borderWidth',
- 'borderAlign',
- 'hoverBackgroundColor',
- 'hoverBorderColor',
- 'hoverBorderWidth',
- ],
-
- // Get index of the dataset in relation to the visible datasets. This allows determining the inner and outer radius correctly
- getRingIndex: function(datasetIndex) {
- var ringIndex = 0;
-
- for (var j = 0; j < datasetIndex; ++j) {
- if (this.chart.isDatasetVisible(j)) {
- ++ringIndex;
- }
- }
-
- return ringIndex;
- },
-
- update: function(reset) {
- var me = this;
- var chart = me.chart;
- var chartArea = chart.chartArea;
- var opts = chart.options;
- var ratioX = 1;
- var ratioY = 1;
- var offsetX = 0;
- var offsetY = 0;
- var meta = me.getMeta();
- var arcs = meta.data;
- var cutout = opts.cutoutPercentage / 100 || 0;
- var circumference = opts.circumference;
- var chartWeight = me._getRingWeight(me.index);
- var maxWidth, maxHeight, i, ilen;
-
- // If the chart's circumference isn't a full circle, calculate size as a ratio of the width/height of the arc
- if (circumference < DOUBLE_PI$1) {
- var startAngle = opts.rotation % DOUBLE_PI$1;
- startAngle += startAngle >= PI$1 ? -DOUBLE_PI$1 : startAngle < -PI$1 ? DOUBLE_PI$1 : 0;
- var endAngle = startAngle + circumference;
- var startX = Math.cos(startAngle);
- var startY = Math.sin(startAngle);
- var endX = Math.cos(endAngle);
- var endY = Math.sin(endAngle);
- var contains0 = (startAngle <= 0 && endAngle >= 0) || endAngle >= DOUBLE_PI$1;
- var contains90 = (startAngle <= HALF_PI$1 && endAngle >= HALF_PI$1) || endAngle >= DOUBLE_PI$1 + HALF_PI$1;
- var contains180 = startAngle === -PI$1 || endAngle >= PI$1;
- var contains270 = (startAngle <= -HALF_PI$1 && endAngle >= -HALF_PI$1) || endAngle >= PI$1 + HALF_PI$1;
- var minX = contains180 ? -1 : Math.min(startX, startX * cutout, endX, endX * cutout);
- var minY = contains270 ? -1 : Math.min(startY, startY * cutout, endY, endY * cutout);
- var maxX = contains0 ? 1 : Math.max(startX, startX * cutout, endX, endX * cutout);
- var maxY = contains90 ? 1 : Math.max(startY, startY * cutout, endY, endY * cutout);
- ratioX = (maxX - minX) / 2;
- ratioY = (maxY - minY) / 2;
- offsetX = -(maxX + minX) / 2;
- offsetY = -(maxY + minY) / 2;
- }
-
- for (i = 0, ilen = arcs.length; i < ilen; ++i) {
- arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);
- }
-
- chart.borderWidth = me.getMaxBorderWidth();
- maxWidth = (chartArea.right - chartArea.left - chart.borderWidth) / ratioX;
- maxHeight = (chartArea.bottom - chartArea.top - chart.borderWidth) / ratioY;
- chart.outerRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);
- chart.innerRadius = Math.max(chart.outerRadius * cutout, 0);
- chart.radiusLength = (chart.outerRadius - chart.innerRadius) / (me._getVisibleDatasetWeightTotal() || 1);
- chart.offsetX = offsetX * chart.outerRadius;
- chart.offsetY = offsetY * chart.outerRadius;
-
- meta.total = me.calculateTotal();
-
- me.outerRadius = chart.outerRadius - chart.radiusLength * me._getRingWeightOffset(me.index);
- me.innerRadius = Math.max(me.outerRadius - chart.radiusLength * chartWeight, 0);
-
- for (i = 0, ilen = arcs.length; i < ilen; ++i) {
- me.updateElement(arcs[i], i, reset);
- }
- },
-
- updateElement: function(arc, index, reset) {
- var me = this;
- var chart = me.chart;
- var chartArea = chart.chartArea;
- var opts = chart.options;
- var animationOpts = opts.animation;
- var centerX = (chartArea.left + chartArea.right) / 2;
- var centerY = (chartArea.top + chartArea.bottom) / 2;
- var startAngle = opts.rotation; // non reset case handled later
- var endAngle = opts.rotation; // non reset case handled later
- var dataset = me.getDataset();
- var circumference = reset && animationOpts.animateRotate ? 0 : arc.hidden ? 0 : me.calculateCircumference(dataset.data[index]) * (opts.circumference / DOUBLE_PI$1);
- var innerRadius = reset && animationOpts.animateScale ? 0 : me.innerRadius;
- var outerRadius = reset && animationOpts.animateScale ? 0 : me.outerRadius;
- var options = arc._options || {};
-
- helpers$1.extend(arc, {
- // Utility
- _datasetIndex: me.index,
- _index: index,
-
- // Desired view properties
- _model: {
- backgroundColor: options.backgroundColor,
- borderColor: options.borderColor,
- borderWidth: options.borderWidth,
- borderAlign: options.borderAlign,
- x: centerX + chart.offsetX,
- y: centerY + chart.offsetY,
- startAngle: startAngle,
- endAngle: endAngle,
- circumference: circumference,
- outerRadius: outerRadius,
- innerRadius: innerRadius,
- label: helpers$1.valueAtIndexOrDefault(dataset.label, index, chart.data.labels[index])
- }
- });
-
- var model = arc._model;
-
- // Set correct angles if not resetting
- if (!reset || !animationOpts.animateRotate) {
- if (index === 0) {
- model.startAngle = opts.rotation;
- } else {
- model.startAngle = me.getMeta().data[index - 1]._model.endAngle;
- }
-
- model.endAngle = model.startAngle + model.circumference;
- }
-
- arc.pivot();
- },
-
- calculateTotal: function() {
- var dataset = this.getDataset();
- var meta = this.getMeta();
- var total = 0;
- var value;
-
- helpers$1.each(meta.data, function(element, index) {
- value = dataset.data[index];
- if (!isNaN(value) && !element.hidden) {
- total += Math.abs(value);
- }
- });
-
- /* if (total === 0) {
- total = NaN;
- }*/
-
- return total;
- },
-
- calculateCircumference: function(value) {
- var total = this.getMeta().total;
- if (total > 0 && !isNaN(value)) {
- return DOUBLE_PI$1 * (Math.abs(value) / total);
- }
- return 0;
- },
-
- // gets the max border or hover width to properly scale pie charts
- getMaxBorderWidth: function(arcs) {
- var me = this;
- var max = 0;
- var chart = me.chart;
- var i, ilen, meta, arc, controller, options, borderWidth, hoverWidth;
-
- if (!arcs) {
- // Find the outmost visible dataset
- for (i = 0, ilen = chart.data.datasets.length; i < ilen; ++i) {
- if (chart.isDatasetVisible(i)) {
- meta = chart.getDatasetMeta(i);
- arcs = meta.data;
- if (i !== me.index) {
- controller = meta.controller;
- }
- break;
- }
- }
- }
-
- if (!arcs) {
- return 0;
- }
-
- for (i = 0, ilen = arcs.length; i < ilen; ++i) {
- arc = arcs[i];
- if (controller) {
- controller._configure();
- options = controller._resolveDataElementOptions(arc, i);
- } else {
- options = arc._options;
- }
- if (options.borderAlign !== 'inner') {
- borderWidth = options.borderWidth;
- hoverWidth = options.hoverBorderWidth;
-
- max = borderWidth > max ? borderWidth : max;
- max = hoverWidth > max ? hoverWidth : max;
- }
- }
- return max;
- },
-
- /**
- * @protected
- */
- setHoverStyle: function(arc) {
- var model = arc._model;
- var options = arc._options;
- var getHoverColor = helpers$1.getHoverColor;
-
- arc.$previousStyle = {
- backgroundColor: model.backgroundColor,
- borderColor: model.borderColor,
- borderWidth: model.borderWidth,
- };
-
- model.backgroundColor = valueOrDefault$5(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
- model.borderColor = valueOrDefault$5(options.hoverBorderColor, getHoverColor(options.borderColor));
- model.borderWidth = valueOrDefault$5(options.hoverBorderWidth, options.borderWidth);
- },
-
- /**
- * Get radius length offset of the dataset in relation to the visible datasets weights. This allows determining the inner and outer radius correctly
- * @private
- */
- _getRingWeightOffset: function(datasetIndex) {
- var ringWeightOffset = 0;
-
- for (var i = 0; i < datasetIndex; ++i) {
- if (this.chart.isDatasetVisible(i)) {
- ringWeightOffset += this._getRingWeight(i);
- }
- }
-
- return ringWeightOffset;
- },
-
- /**
- * @private
- */
- _getRingWeight: function(dataSetIndex) {
- return Math.max(valueOrDefault$5(this.chart.data.datasets[dataSetIndex].weight, 1), 0);
- },
-
- /**
- * Returns the sum of all visibile data set weights. This value can be 0.
- * @private
- */
- _getVisibleDatasetWeightTotal: function() {
- return this._getRingWeightOffset(this.chart.data.datasets.length);
- }
-});
-
-core_defaults._set('horizontalBar', {
- hover: {
- mode: 'index',
- axis: 'y'
- },
-
- scales: {
- xAxes: [{
- type: 'linear',
- position: 'bottom'
- }],
-
- yAxes: [{
- type: 'category',
- position: 'left',
- offset: true,
- gridLines: {
- offsetGridLines: true
- }
- }]
- },
-
- elements: {
- rectangle: {
- borderSkipped: 'left'
- }
- },
-
- tooltips: {
- mode: 'index',
- axis: 'y'
- }
-});
-
-core_defaults._set('global', {
- datasets: {
- horizontalBar: {
- categoryPercentage: 0.8,
- barPercentage: 0.9
- }
- }
-});
-
-var controller_horizontalBar = controller_bar.extend({
- /**
- * @private
- */
- _getValueScaleId: function() {
- return this.getMeta().xAxisID;
- },
-
- /**
- * @private
- */
- _getIndexScaleId: function() {
- return this.getMeta().yAxisID;
- }
-});
-
-var valueOrDefault$6 = helpers$1.valueOrDefault;
-var resolve$2 = helpers$1.options.resolve;
-var isPointInArea = helpers$1.canvas._isPointInArea;
-
-core_defaults._set('line', {
- showLines: true,
- spanGaps: false,
-
- hover: {
- mode: 'label'
- },
-
- scales: {
- xAxes: [{
- type: 'category',
- id: 'x-axis-0'
- }],
- yAxes: [{
- type: 'linear',
- id: 'y-axis-0'
- }]
- }
-});
-
-function scaleClip(scale, halfBorderWidth) {
- var tickOpts = scale && scale.options.ticks || {};
- var reverse = tickOpts.reverse;
- var min = tickOpts.min === undefined ? halfBorderWidth : 0;
- var max = tickOpts.max === undefined ? halfBorderWidth : 0;
- return {
- start: reverse ? max : min,
- end: reverse ? min : max
- };
-}
-
-function defaultClip(xScale, yScale, borderWidth) {
- var halfBorderWidth = borderWidth / 2;
- var x = scaleClip(xScale, halfBorderWidth);
- var y = scaleClip(yScale, halfBorderWidth);
-
- return {
- top: y.end,
- right: x.end,
- bottom: y.start,
- left: x.start
- };
-}
-
-function toClip(value) {
- var t, r, b, l;
-
- if (helpers$1.isObject(value)) {
- t = value.top;
- r = value.right;
- b = value.bottom;
- l = value.left;
- } else {
- t = r = b = l = value;
- }
-
- return {
- top: t,
- right: r,
- bottom: b,
- left: l
- };
-}
-
-
-var controller_line = core_datasetController.extend({
-
- datasetElementType: elements.Line,
-
- dataElementType: elements.Point,
-
- /**
- * @private
- */
- _datasetElementOptions: [
- 'backgroundColor',
- 'borderCapStyle',
- 'borderColor',
- 'borderDash',
- 'borderDashOffset',
- 'borderJoinStyle',
- 'borderWidth',
- 'cubicInterpolationMode',
- 'fill'
- ],
-
- /**
- * @private
- */
- _dataElementOptions: {
- backgroundColor: 'pointBackgroundColor',
- borderColor: 'pointBorderColor',
- borderWidth: 'pointBorderWidth',
- hitRadius: 'pointHitRadius',
- hoverBackgroundColor: 'pointHoverBackgroundColor',
- hoverBorderColor: 'pointHoverBorderColor',
- hoverBorderWidth: 'pointHoverBorderWidth',
- hoverRadius: 'pointHoverRadius',
- pointStyle: 'pointStyle',
- radius: 'pointRadius',
- rotation: 'pointRotation'
- },
-
- update: function(reset) {
- var me = this;
- var meta = me.getMeta();
- var line = meta.dataset;
- var points = meta.data || [];
- var options = me.chart.options;
- var config = me._config;
- var showLine = me._showLine = valueOrDefault$6(config.showLine, options.showLines);
- var i, ilen;
-
- me._xScale = me.getScaleForId(meta.xAxisID);
- me._yScale = me.getScaleForId(meta.yAxisID);
-
- // Update Line
- if (showLine) {
- // Compatibility: If the properties are defined with only the old name, use those values
- if (config.tension !== undefined && config.lineTension === undefined) {
- config.lineTension = config.tension;
- }
-
- // Utility
- line._scale = me._yScale;
- line._datasetIndex = me.index;
- // Data
- line._children = points;
- // Model
- line._model = me._resolveDatasetElementOptions(line);
-
- line.pivot();
- }
-
- // Update Points
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- me.updateElement(points[i], i, reset);
- }
-
- if (showLine && line._model.tension !== 0) {
- me.updateBezierControlPoints();
- }
-
- // Now pivot the point for animation
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- points[i].pivot();
- }
- },
-
- updateElement: function(point, index, reset) {
- var me = this;
- var meta = me.getMeta();
- var custom = point.custom || {};
- var dataset = me.getDataset();
- var datasetIndex = me.index;
- var value = dataset.data[index];
- var xScale = me._xScale;
- var yScale = me._yScale;
- var lineModel = meta.dataset._model;
- var x, y;
-
- var options = me._resolveDataElementOptions(point, index);
-
- x = xScale.getPixelForValue(typeof value === 'object' ? value : NaN, index, datasetIndex);
- y = reset ? yScale.getBasePixel() : me.calculatePointY(value, index, datasetIndex);
-
- // Utility
- point._xScale = xScale;
- point._yScale = yScale;
- point._options = options;
- point._datasetIndex = datasetIndex;
- point._index = index;
-
- // Desired view properties
- point._model = {
- x: x,
- y: y,
- skip: custom.skip || isNaN(x) || isNaN(y),
- // Appearance
- radius: options.radius,
- pointStyle: options.pointStyle,
- rotation: options.rotation,
- backgroundColor: options.backgroundColor,
- borderColor: options.borderColor,
- borderWidth: options.borderWidth,
- tension: valueOrDefault$6(custom.tension, lineModel ? lineModel.tension : 0),
- steppedLine: lineModel ? lineModel.steppedLine : false,
- // Tooltip
- hitRadius: options.hitRadius
- };
- },
-
- /**
- * @private
- */
- _resolveDatasetElementOptions: function(element) {
- var me = this;
- var config = me._config;
- var custom = element.custom || {};
- var options = me.chart.options;
- var lineOptions = options.elements.line;
- var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);
-
- // The default behavior of lines is to break at null values, according
- // to https://github.com/chartjs/Chart.js/issues/2435#issuecomment-216718158
- // This option gives lines the ability to span gaps
- values.spanGaps = valueOrDefault$6(config.spanGaps, options.spanGaps);
- values.tension = valueOrDefault$6(config.lineTension, lineOptions.tension);
- values.steppedLine = resolve$2([custom.steppedLine, config.steppedLine, lineOptions.stepped]);
- values.clip = toClip(valueOrDefault$6(config.clip, defaultClip(me._xScale, me._yScale, values.borderWidth)));
-
- return values;
- },
-
- calculatePointY: function(value, index, datasetIndex) {
- var me = this;
- var chart = me.chart;
- var yScale = me._yScale;
- var sumPos = 0;
- var sumNeg = 0;
- var i, ds, dsMeta, stackedRightValue, rightValue, metasets, ilen;
-
- if (yScale.options.stacked) {
- rightValue = +yScale.getRightValue(value);
- metasets = chart._getSortedVisibleDatasetMetas();
- ilen = metasets.length;
-
- for (i = 0; i < ilen; ++i) {
- dsMeta = metasets[i];
- if (dsMeta.index === datasetIndex) {
- break;
- }
-
- ds = chart.data.datasets[dsMeta.index];
- if (dsMeta.type === 'line' && dsMeta.yAxisID === yScale.id) {
- stackedRightValue = +yScale.getRightValue(ds.data[index]);
- if (stackedRightValue < 0) {
- sumNeg += stackedRightValue || 0;
- } else {
- sumPos += stackedRightValue || 0;
- }
- }
- }
-
- if (rightValue < 0) {
- return yScale.getPixelForValue(sumNeg + rightValue);
- }
- return yScale.getPixelForValue(sumPos + rightValue);
- }
- return yScale.getPixelForValue(value);
- },
-
- updateBezierControlPoints: function() {
- var me = this;
- var chart = me.chart;
- var meta = me.getMeta();
- var lineModel = meta.dataset._model;
- var area = chart.chartArea;
- var points = meta.data || [];
- var i, ilen, model, controlPoints;
-
- // Only consider points that are drawn in case the spanGaps option is used
- if (lineModel.spanGaps) {
- points = points.filter(function(pt) {
- return !pt._model.skip;
- });
- }
-
- function capControlPoint(pt, min, max) {
- return Math.max(Math.min(pt, max), min);
- }
-
- if (lineModel.cubicInterpolationMode === 'monotone') {
- helpers$1.splineCurveMonotone(points);
- } else {
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- model = points[i]._model;
- controlPoints = helpers$1.splineCurve(
- helpers$1.previousItem(points, i)._model,
- model,
- helpers$1.nextItem(points, i)._model,
- lineModel.tension
- );
- model.controlPointPreviousX = controlPoints.previous.x;
- model.controlPointPreviousY = controlPoints.previous.y;
- model.controlPointNextX = controlPoints.next.x;
- model.controlPointNextY = controlPoints.next.y;
- }
- }
-
- if (chart.options.elements.line.capBezierPoints) {
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- model = points[i]._model;
- if (isPointInArea(model, area)) {
- if (i > 0 && isPointInArea(points[i - 1]._model, area)) {
- model.controlPointPreviousX = capControlPoint(model.controlPointPreviousX, area.left, area.right);
- model.controlPointPreviousY = capControlPoint(model.controlPointPreviousY, area.top, area.bottom);
- }
- if (i < points.length - 1 && isPointInArea(points[i + 1]._model, area)) {
- model.controlPointNextX = capControlPoint(model.controlPointNextX, area.left, area.right);
- model.controlPointNextY = capControlPoint(model.controlPointNextY, area.top, area.bottom);
- }
- }
- }
- }
- },
-
- draw: function() {
- var me = this;
- var chart = me.chart;
- var meta = me.getMeta();
- var points = meta.data || [];
- var area = chart.chartArea;
- var canvas = chart.canvas;
- var i = 0;
- var ilen = points.length;
- var clip;
-
- if (me._showLine) {
- clip = meta.dataset._model.clip;
-
- helpers$1.canvas.clipArea(chart.ctx, {
- left: clip.left === false ? 0 : area.left - clip.left,
- right: clip.right === false ? canvas.width : area.right + clip.right,
- top: clip.top === false ? 0 : area.top - clip.top,
- bottom: clip.bottom === false ? canvas.height : area.bottom + clip.bottom
- });
-
- meta.dataset.draw();
-
- helpers$1.canvas.unclipArea(chart.ctx);
- }
-
- // Draw the points
- for (; i < ilen; ++i) {
- points[i].draw(area);
- }
- },
-
- /**
- * @protected
- */
- setHoverStyle: function(point) {
- var model = point._model;
- var options = point._options;
- var getHoverColor = helpers$1.getHoverColor;
-
- point.$previousStyle = {
- backgroundColor: model.backgroundColor,
- borderColor: model.borderColor,
- borderWidth: model.borderWidth,
- radius: model.radius
- };
-
- model.backgroundColor = valueOrDefault$6(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
- model.borderColor = valueOrDefault$6(options.hoverBorderColor, getHoverColor(options.borderColor));
- model.borderWidth = valueOrDefault$6(options.hoverBorderWidth, options.borderWidth);
- model.radius = valueOrDefault$6(options.hoverRadius, options.radius);
- },
-});
-
-var resolve$3 = helpers$1.options.resolve;
-
-core_defaults._set('polarArea', {
- scale: {
- type: 'radialLinear',
- angleLines: {
- display: false
- },
- gridLines: {
- circular: true
- },
- pointLabels: {
- display: false
- },
- ticks: {
- beginAtZero: true
- }
- },
-
- // Boolean - Whether to animate the rotation of the chart
- animation: {
- animateRotate: true,
- animateScale: true
- },
-
- startAngle: -0.5 * Math.PI,
- legendCallback: function(chart) {
- var list = document.createElement('ul');
- var data = chart.data;
- var datasets = data.datasets;
- var labels = data.labels;
- var i, ilen, listItem, listItemSpan;
-
- list.setAttribute('class', chart.id + '-legend');
- if (datasets.length) {
- for (i = 0, ilen = datasets[0].data.length; i < ilen; ++i) {
- listItem = list.appendChild(document.createElement('li'));
- listItemSpan = listItem.appendChild(document.createElement('span'));
- listItemSpan.style.backgroundColor = datasets[0].backgroundColor[i];
- if (labels[i]) {
- listItem.appendChild(document.createTextNode(labels[i]));
- }
- }
- }
-
- return list.outerHTML;
- },
- legend: {
- labels: {
- generateLabels: function(chart) {
- var data = chart.data;
- if (data.labels.length && data.datasets.length) {
- return data.labels.map(function(label, i) {
- var meta = chart.getDatasetMeta(0);
- var style = meta.controller.getStyle(i);
-
- return {
- text: label,
- fillStyle: style.backgroundColor,
- strokeStyle: style.borderColor,
- lineWidth: style.borderWidth,
- hidden: isNaN(data.datasets[0].data[i]) || meta.data[i].hidden,
-
- // Extra data used for toggling the correct item
- index: i
- };
- });
- }
- return [];
- }
- },
-
- onClick: function(e, legendItem) {
- var index = legendItem.index;
- var chart = this.chart;
- var i, ilen, meta;
-
- for (i = 0, ilen = (chart.data.datasets || []).length; i < ilen; ++i) {
- meta = chart.getDatasetMeta(i);
- meta.data[index].hidden = !meta.data[index].hidden;
- }
-
- chart.update();
- }
- },
-
- // Need to override these to give a nice default
- tooltips: {
- callbacks: {
- title: function() {
- return '';
- },
- label: function(item, data) {
- return data.labels[item.index] + ': ' + item.yLabel;
- }
- }
- }
-});
-
-var controller_polarArea = core_datasetController.extend({
-
- dataElementType: elements.Arc,
-
- linkScales: helpers$1.noop,
-
- /**
- * @private
- */
- _dataElementOptions: [
- 'backgroundColor',
- 'borderColor',
- 'borderWidth',
- 'borderAlign',
- 'hoverBackgroundColor',
- 'hoverBorderColor',
- 'hoverBorderWidth',
- ],
-
- /**
- * @private
- */
- _getIndexScaleId: function() {
- return this.chart.scale.id;
- },
-
- /**
- * @private
- */
- _getValueScaleId: function() {
- return this.chart.scale.id;
- },
-
- update: function(reset) {
- var me = this;
- var dataset = me.getDataset();
- var meta = me.getMeta();
- var start = me.chart.options.startAngle || 0;
- var starts = me._starts = [];
- var angles = me._angles = [];
- var arcs = meta.data;
- var i, ilen, angle;
-
- me._updateRadius();
-
- meta.count = me.countVisibleElements();
-
- for (i = 0, ilen = dataset.data.length; i < ilen; i++) {
- starts[i] = start;
- angle = me._computeAngle(i);
- angles[i] = angle;
- start += angle;
- }
-
- for (i = 0, ilen = arcs.length; i < ilen; ++i) {
- arcs[i]._options = me._resolveDataElementOptions(arcs[i], i);
- me.updateElement(arcs[i], i, reset);
- }
- },
-
- /**
- * @private
- */
- _updateRadius: function() {
- var me = this;
- var chart = me.chart;
- var chartArea = chart.chartArea;
- var opts = chart.options;
- var minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);
-
- chart.outerRadius = Math.max(minSize / 2, 0);
- chart.innerRadius = Math.max(opts.cutoutPercentage ? (chart.outerRadius / 100) * (opts.cutoutPercentage) : 1, 0);
- chart.radiusLength = (chart.outerRadius - chart.innerRadius) / chart.getVisibleDatasetCount();
-
- me.outerRadius = chart.outerRadius - (chart.radiusLength * me.index);
- me.innerRadius = me.outerRadius - chart.radiusLength;
- },
-
- updateElement: function(arc, index, reset) {
- var me = this;
- var chart = me.chart;
- var dataset = me.getDataset();
- var opts = chart.options;
- var animationOpts = opts.animation;
- var scale = chart.scale;
- var labels = chart.data.labels;
-
- var centerX = scale.xCenter;
- var centerY = scale.yCenter;
-
- // var negHalfPI = -0.5 * Math.PI;
- var datasetStartAngle = opts.startAngle;
- var distance = arc.hidden ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
- var startAngle = me._starts[index];
- var endAngle = startAngle + (arc.hidden ? 0 : me._angles[index]);
-
- var resetRadius = animationOpts.animateScale ? 0 : scale.getDistanceFromCenterForValue(dataset.data[index]);
- var options = arc._options || {};
-
- helpers$1.extend(arc, {
- // Utility
- _datasetIndex: me.index,
- _index: index,
- _scale: scale,
-
- // Desired view properties
- _model: {
- backgroundColor: options.backgroundColor,
- borderColor: options.borderColor,
- borderWidth: options.borderWidth,
- borderAlign: options.borderAlign,
- x: centerX,
- y: centerY,
- innerRadius: 0,
- outerRadius: reset ? resetRadius : distance,
- startAngle: reset && animationOpts.animateRotate ? datasetStartAngle : startAngle,
- endAngle: reset && animationOpts.animateRotate ? datasetStartAngle : endAngle,
- label: helpers$1.valueAtIndexOrDefault(labels, index, labels[index])
- }
- });
-
- arc.pivot();
- },
-
- countVisibleElements: function() {
- var dataset = this.getDataset();
- var meta = this.getMeta();
- var count = 0;
-
- helpers$1.each(meta.data, function(element, index) {
- if (!isNaN(dataset.data[index]) && !element.hidden) {
- count++;
- }
- });
-
- return count;
- },
-
- /**
- * @protected
- */
- setHoverStyle: function(arc) {
- var model = arc._model;
- var options = arc._options;
- var getHoverColor = helpers$1.getHoverColor;
- var valueOrDefault = helpers$1.valueOrDefault;
-
- arc.$previousStyle = {
- backgroundColor: model.backgroundColor,
- borderColor: model.borderColor,
- borderWidth: model.borderWidth,
- };
-
- model.backgroundColor = valueOrDefault(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
- model.borderColor = valueOrDefault(options.hoverBorderColor, getHoverColor(options.borderColor));
- model.borderWidth = valueOrDefault(options.hoverBorderWidth, options.borderWidth);
- },
-
- /**
- * @private
- */
- _computeAngle: function(index) {
- var me = this;
- var count = this.getMeta().count;
- var dataset = me.getDataset();
- var meta = me.getMeta();
-
- if (isNaN(dataset.data[index]) || meta.data[index].hidden) {
- return 0;
- }
-
- // Scriptable options
- var context = {
- chart: me.chart,
- dataIndex: index,
- dataset: dataset,
- datasetIndex: me.index
- };
-
- return resolve$3([
- me.chart.options.elements.arc.angle,
- (2 * Math.PI) / count
- ], context, index);
- }
-});
-
-core_defaults._set('pie', helpers$1.clone(core_defaults.doughnut));
-core_defaults._set('pie', {
- cutoutPercentage: 0
-});
-
-// Pie charts are Doughnut chart with different defaults
-var controller_pie = controller_doughnut;
-
-var valueOrDefault$7 = helpers$1.valueOrDefault;
-
-core_defaults._set('radar', {
- spanGaps: false,
- scale: {
- type: 'radialLinear'
- },
- elements: {
- line: {
- fill: 'start',
- tension: 0 // no bezier in radar
- }
- }
-});
-
-var controller_radar = core_datasetController.extend({
- datasetElementType: elements.Line,
-
- dataElementType: elements.Point,
-
- linkScales: helpers$1.noop,
-
- /**
- * @private
- */
- _datasetElementOptions: [
- 'backgroundColor',
- 'borderWidth',
- 'borderColor',
- 'borderCapStyle',
- 'borderDash',
- 'borderDashOffset',
- 'borderJoinStyle',
- 'fill'
- ],
-
- /**
- * @private
- */
- _dataElementOptions: {
- backgroundColor: 'pointBackgroundColor',
- borderColor: 'pointBorderColor',
- borderWidth: 'pointBorderWidth',
- hitRadius: 'pointHitRadius',
- hoverBackgroundColor: 'pointHoverBackgroundColor',
- hoverBorderColor: 'pointHoverBorderColor',
- hoverBorderWidth: 'pointHoverBorderWidth',
- hoverRadius: 'pointHoverRadius',
- pointStyle: 'pointStyle',
- radius: 'pointRadius',
- rotation: 'pointRotation'
- },
-
- /**
- * @private
- */
- _getIndexScaleId: function() {
- return this.chart.scale.id;
- },
-
- /**
- * @private
- */
- _getValueScaleId: function() {
- return this.chart.scale.id;
- },
-
- update: function(reset) {
- var me = this;
- var meta = me.getMeta();
- var line = meta.dataset;
- var points = meta.data || [];
- var scale = me.chart.scale;
- var config = me._config;
- var i, ilen;
-
- // Compatibility: If the properties are defined with only the old name, use those values
- if (config.tension !== undefined && config.lineTension === undefined) {
- config.lineTension = config.tension;
- }
-
- // Utility
- line._scale = scale;
- line._datasetIndex = me.index;
- // Data
- line._children = points;
- line._loop = true;
- // Model
- line._model = me._resolveDatasetElementOptions(line);
-
- line.pivot();
-
- // Update Points
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- me.updateElement(points[i], i, reset);
- }
-
- // Update bezier control points
- me.updateBezierControlPoints();
-
- // Now pivot the point for animation
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- points[i].pivot();
- }
- },
-
- updateElement: function(point, index, reset) {
- var me = this;
- var custom = point.custom || {};
- var dataset = me.getDataset();
- var scale = me.chart.scale;
- var pointPosition = scale.getPointPositionForValue(index, dataset.data[index]);
- var options = me._resolveDataElementOptions(point, index);
- var lineModel = me.getMeta().dataset._model;
- var x = reset ? scale.xCenter : pointPosition.x;
- var y = reset ? scale.yCenter : pointPosition.y;
-
- // Utility
- point._scale = scale;
- point._options = options;
- point._datasetIndex = me.index;
- point._index = index;
-
- // Desired view properties
- point._model = {
- x: x, // value not used in dataset scale, but we want a consistent API between scales
- y: y,
- skip: custom.skip || isNaN(x) || isNaN(y),
- // Appearance
- radius: options.radius,
- pointStyle: options.pointStyle,
- rotation: options.rotation,
- backgroundColor: options.backgroundColor,
- borderColor: options.borderColor,
- borderWidth: options.borderWidth,
- tension: valueOrDefault$7(custom.tension, lineModel ? lineModel.tension : 0),
-
- // Tooltip
- hitRadius: options.hitRadius
- };
- },
-
- /**
- * @private
- */
- _resolveDatasetElementOptions: function() {
- var me = this;
- var config = me._config;
- var options = me.chart.options;
- var values = core_datasetController.prototype._resolveDatasetElementOptions.apply(me, arguments);
-
- values.spanGaps = valueOrDefault$7(config.spanGaps, options.spanGaps);
- values.tension = valueOrDefault$7(config.lineTension, options.elements.line.tension);
-
- return values;
- },
-
- updateBezierControlPoints: function() {
- var me = this;
- var meta = me.getMeta();
- var area = me.chart.chartArea;
- var points = meta.data || [];
- var i, ilen, model, controlPoints;
-
- // Only consider points that are drawn in case the spanGaps option is used
- if (meta.dataset._model.spanGaps) {
- points = points.filter(function(pt) {
- return !pt._model.skip;
- });
- }
-
- function capControlPoint(pt, min, max) {
- return Math.max(Math.min(pt, max), min);
- }
-
- for (i = 0, ilen = points.length; i < ilen; ++i) {
- model = points[i]._model;
- controlPoints = helpers$1.splineCurve(
- helpers$1.previousItem(points, i, true)._model,
- model,
- helpers$1.nextItem(points, i, true)._model,
- model.tension
- );
-
- // Prevent the bezier going outside of the bounds of the graph
- model.controlPointPreviousX = capControlPoint(controlPoints.previous.x, area.left, area.right);
- model.controlPointPreviousY = capControlPoint(controlPoints.previous.y, area.top, area.bottom);
- model.controlPointNextX = capControlPoint(controlPoints.next.x, area.left, area.right);
- model.controlPointNextY = capControlPoint(controlPoints.next.y, area.top, area.bottom);
- }
- },
-
- setHoverStyle: function(point) {
- var model = point._model;
- var options = point._options;
- var getHoverColor = helpers$1.getHoverColor;
-
- point.$previousStyle = {
- backgroundColor: model.backgroundColor,
- borderColor: model.borderColor,
- borderWidth: model.borderWidth,
- radius: model.radius
- };
-
- model.backgroundColor = valueOrDefault$7(options.hoverBackgroundColor, getHoverColor(options.backgroundColor));
- model.borderColor = valueOrDefault$7(options.hoverBorderColor, getHoverColor(options.borderColor));
- model.borderWidth = valueOrDefault$7(options.hoverBorderWidth, options.borderWidth);
- model.radius = valueOrDefault$7(options.hoverRadius, options.radius);
- }
-});
-
-core_defaults._set('scatter', {
- hover: {
- mode: 'single'
- },
-
- scales: {
- xAxes: [{
- id: 'x-axis-1', // need an ID so datasets can reference the scale
- type: 'linear', // scatter should not use a category axis
- position: 'bottom'
- }],
- yAxes: [{
- id: 'y-axis-1',
- type: 'linear',
- position: 'left'
- }]
- },
-
- tooltips: {
- callbacks: {
- title: function() {
- return ''; // doesn't make sense for scatter since data are formatted as a point
- },
- label: function(item) {
- return '(' + item.xLabel + ', ' + item.yLabel + ')';
- }
- }
- }
-});
-
-core_defaults._set('global', {
- datasets: {
- scatter: {
- showLine: false
- }
- }
-});
-
-// Scatter charts use line controllers
-var controller_scatter = controller_line;
-
-// NOTE export a map in which the key represents the controller type, not
-// the class, and so must be CamelCase in order to be correctly retrieved
-// by the controller in core.controller.js (`controllers[meta.type]`).
-
-var controllers = {
- bar: controller_bar,
- bubble: controller_bubble,
- doughnut: controller_doughnut,
- horizontalBar: controller_horizontalBar,
- line: controller_line,
- polarArea: controller_polarArea,
- pie: controller_pie,
- radar: controller_radar,
- scatter: controller_scatter
-};
-
-/**
- * Helper function to get relative position for an event
- * @param {Event|IEvent} event - The event to get the position for
- * @param {Chart} chart - The chart
- * @returns {object} the event position
- */
-function getRelativePosition(e, chart) {
- if (e.native) {
- return {
- x: e.x,
- y: e.y
- };
- }
-
- return helpers$1.getRelativePosition(e, chart);
-}
-
-/**
- * Helper function to traverse all of the visible elements in the chart
- * @param {Chart} chart - the chart
- * @param {function} handler - the callback to execute for each visible item
- */
-function parseVisibleItems(chart, handler) {
- var metasets = chart._getSortedVisibleDatasetMetas();
- var metadata, i, j, ilen, jlen, element;
-
- for (i = 0, ilen = metasets.length; i < ilen; ++i) {
- metadata = metasets[i].data;
- for (j = 0, jlen = metadata.length; j < jlen; ++j) {
- element = metadata[j];
- if (!element._view.skip) {
- handler(element);
- }
- }
- }
-}
-
-/**
- * Helper function to get the items that intersect the event position
- * @param {ChartElement[]} items - elements to filter
- * @param {object} position - the point to be nearest to
- * @return {ChartElement[]} the nearest items
- */
-function getIntersectItems(chart, position) {
- var elements = [];
-
- parseVisibleItems(chart, function(element) {
- if (element.inRange(position.x, position.y)) {
- elements.push(element);
- }
- });
-
- return elements;
-}
-
-/**
- * Helper function to get the items nearest to the event position considering all visible items in teh chart
- * @param {Chart} chart - the chart to look at elements from
- * @param {object} position - the point to be nearest to
- * @param {boolean} intersect - if true, only consider items that intersect the position
- * @param {function} distanceMetric - function to provide the distance between points
- * @return {ChartElement[]} the nearest items
- */
-function getNearestItems(chart, position, intersect, distanceMetric) {
- var minDistance = Number.POSITIVE_INFINITY;
- var nearestItems = [];
-
- parseVisibleItems(chart, function(element) {
- if (intersect && !element.inRange(position.x, position.y)) {
- return;
- }
-
- var center = element.getCenterPoint();
- var distance = distanceMetric(position, center);
- if (distance < minDistance) {
- nearestItems = [element];
- minDistance = distance;
- } else if (distance === minDistance) {
- // Can have multiple items at the same distance in which case we sort by size
- nearestItems.push(element);
- }
- });
-
- return nearestItems;
-}
-
-/**
- * Get a distance metric function for two points based on the
- * axis mode setting
- * @param {string} axis - the axis mode. x|y|xy
- */
-function getDistanceMetricForAxis(axis) {
- var useX = axis.indexOf('x') !== -1;
- var useY = axis.indexOf('y') !== -1;
-
- return function(pt1, pt2) {
- var deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;
- var deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;
- return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));
- };
-}
-
-function indexMode(chart, e, options) {
- var position = getRelativePosition(e, chart);
- // Default axis for index mode is 'x' to match old behaviour
- options.axis = options.axis || 'x';
- var distanceMetric = getDistanceMetricForAxis(options.axis);
- var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
- var elements = [];
-
- if (!items.length) {
- return [];
- }
-
- chart._getSortedVisibleDatasetMetas().forEach(function(meta) {
- var element = meta.data[items[0]._index];
-
- // don't count items that are skipped (null data)
- if (element && !element._view.skip) {
- elements.push(element);
- }
- });
-
- return elements;
-}
-
-/**
- * @interface IInteractionOptions
- */
-/**
- * If true, only consider items that intersect the point
- * @name IInterfaceOptions#boolean
- * @type Boolean
- */
-
-/**
- * Contains interaction related functions
- * @namespace Chart.Interaction
- */
-var core_interaction = {
- // Helper function for different modes
- modes: {
- single: function(chart, e) {
- var position = getRelativePosition(e, chart);
- var elements = [];
-
- parseVisibleItems(chart, function(element) {
- if (element.inRange(position.x, position.y)) {
- elements.push(element);
- return elements;
- }
- });
-
- return elements.slice(0, 1);
- },
-
- /**
- * @function Chart.Interaction.modes.label
- * @deprecated since version 2.4.0
- * @todo remove at version 3
- * @private
- */
- label: indexMode,
-
- /**
- * Returns items at the same index. If the options.intersect parameter is true, we only return items if we intersect something
- * If the options.intersect mode is false, we find the nearest item and return the items at the same index as that item
- * @function Chart.Interaction.modes.index
- * @since v2.4.0
- * @param {Chart} chart - the chart we are returning items from
- * @param {Event} e - the event we are find things at
- * @param {IInteractionOptions} options - options to use during interaction
- * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
- */
- index: indexMode,
-
- /**
- * Returns items in the same dataset. If the options.intersect parameter is true, we only return items if we intersect something
- * If the options.intersect is false, we find the nearest item and return the items in that dataset
- * @function Chart.Interaction.modes.dataset
- * @param {Chart} chart - the chart we are returning items from
- * @param {Event} e - the event we are find things at
- * @param {IInteractionOptions} options - options to use during interaction
- * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
- */
- dataset: function(chart, e, options) {
- var position = getRelativePosition(e, chart);
- options.axis = options.axis || 'xy';
- var distanceMetric = getDistanceMetricForAxis(options.axis);
- var items = options.intersect ? getIntersectItems(chart, position) : getNearestItems(chart, position, false, distanceMetric);
-
- if (items.length > 0) {
- items = chart.getDatasetMeta(items[0]._datasetIndex).data;
- }
-
- return items;
- },
-
- /**
- * @function Chart.Interaction.modes.x-axis
- * @deprecated since version 2.4.0. Use index mode and intersect == true
- * @todo remove at version 3
- * @private
- */
- 'x-axis': function(chart, e) {
- return indexMode(chart, e, {intersect: false});
- },
-
- /**
- * Point mode returns all elements that hit test based on the event position
- * of the event
- * @function Chart.Interaction.modes.intersect
- * @param {Chart} chart - the chart we are returning items from
- * @param {Event} e - the event we are find things at
- * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
- */
- point: function(chart, e) {
- var position = getRelativePosition(e, chart);
- return getIntersectItems(chart, position);
- },
-
- /**
- * nearest mode returns the element closest to the point
- * @function Chart.Interaction.modes.intersect
- * @param {Chart} chart - the chart we are returning items from
- * @param {Event} e - the event we are find things at
- * @param {IInteractionOptions} options - options to use
- * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
- */
- nearest: function(chart, e, options) {
- var position = getRelativePosition(e, chart);
- options.axis = options.axis || 'xy';
- var distanceMetric = getDistanceMetricForAxis(options.axis);
- return getNearestItems(chart, position, options.intersect, distanceMetric);
- },
-
- /**
- * x mode returns the elements that hit-test at the current x coordinate
- * @function Chart.Interaction.modes.x
- * @param {Chart} chart - the chart we are returning items from
- * @param {Event} e - the event we are find things at
- * @param {IInteractionOptions} options - options to use
- * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
- */
- x: function(chart, e, options) {
- var position = getRelativePosition(e, chart);
- var items = [];
- var intersectsItem = false;
-
- parseVisibleItems(chart, function(element) {
- if (element.inXRange(position.x)) {
- items.push(element);
- }
-
- if (element.inRange(position.x, position.y)) {
- intersectsItem = true;
- }
- });
-
- // If we want to trigger on an intersect and we don't have any items
- // that intersect the position, return nothing
- if (options.intersect && !intersectsItem) {
- items = [];
- }
- return items;
- },
-
- /**
- * y mode returns the elements that hit-test at the current y coordinate
- * @function Chart.Interaction.modes.y
- * @param {Chart} chart - the chart we are returning items from
- * @param {Event} e - the event we are find things at
- * @param {IInteractionOptions} options - options to use
- * @return {Chart.Element[]} Array of elements that are under the point. If none are found, an empty array is returned
- */
- y: function(chart, e, options) {
- var position = getRelativePosition(e, chart);
- var items = [];
- var intersectsItem = false;
-
- parseVisibleItems(chart, function(element) {
- if (element.inYRange(position.y)) {
- items.push(element);
- }
-
- if (element.inRange(position.x, position.y)) {
- intersectsItem = true;
- }
- });
-
- // If we want to trigger on an intersect and we don't have any items
- // that intersect the position, return nothing
- if (options.intersect && !intersectsItem) {
- items = [];
- }
- return items;
- }
- }
-};
-
-var extend = helpers$1.extend;
-
-function filterByPosition(array, position) {
- return helpers$1.where(array, function(v) {
- return v.pos === position;
- });
-}
-
-function sortByWeight(array, reverse) {
- return array.sort(function(a, b) {
- var v0 = reverse ? b : a;
- var v1 = reverse ? a : b;
- return v0.weight === v1.weight ?
- v0.index - v1.index :
- v0.weight - v1.weight;
- });
-}
-
-function wrapBoxes(boxes) {
- var layoutBoxes = [];
- var i, ilen, box;
-
- for (i = 0, ilen = (boxes || []).length; i < ilen; ++i) {
- box = boxes[i];
- layoutBoxes.push({
- index: i,
- box: box,
- pos: box.position,
- horizontal: box.isHorizontal(),
- weight: box.weight
- });
- }
- return layoutBoxes;
-}
-
-function setLayoutDims(layouts, params) {
- var i, ilen, layout;
- for (i = 0, ilen = layouts.length; i < ilen; ++i) {
- layout = layouts[i];
- // store width used instead of chartArea.w in fitBoxes
- layout.width = layout.horizontal
- ? layout.box.fullWidth && params.availableWidth
- : params.vBoxMaxWidth;
- // store height used instead of chartArea.h in fitBoxes
- layout.height = layout.horizontal && params.hBoxMaxHeight;
- }
-}
-
-function buildLayoutBoxes(boxes) {
- var layoutBoxes = wrapBoxes(boxes);
- var left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);
- var right = sortByWeight(filterByPosition(layoutBoxes, 'right'));
- var top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);
- var bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));
-
- return {
- leftAndTop: left.concat(top),
- rightAndBottom: right.concat(bottom),
- chartArea: filterByPosition(layoutBoxes, 'chartArea'),
- vertical: left.concat(right),
- horizontal: top.concat(bottom)
- };
-}
-
-function getCombinedMax(maxPadding, chartArea, a, b) {
- return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);
-}
-
-function updateDims(chartArea, params, layout) {
- var box = layout.box;
- var maxPadding = chartArea.maxPadding;
- var newWidth, newHeight;
-
- if (layout.size) {
- // this layout was already counted for, lets first reduce old size
- chartArea[layout.pos] -= layout.size;
- }
- layout.size = layout.horizontal ? box.height : box.width;
- chartArea[layout.pos] += layout.size;
-
- if (box.getPadding) {
- var boxPadding = box.getPadding();
- maxPadding.top = Math.max(maxPadding.top, boxPadding.top);
- maxPadding.left = Math.max(maxPadding.left, boxPadding.left);
- maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);
- maxPadding.right = Math.max(maxPadding.right, boxPadding.right);
- }
-
- newWidth = params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right');
- newHeight = params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom');
-
- if (newWidth !== chartArea.w || newHeight !== chartArea.h) {
- chartArea.w = newWidth;
- chartArea.h = newHeight;
-
- // return true if chart area changed in layout's direction
- var sizes = layout.horizontal ? [newWidth, chartArea.w] : [newHeight, chartArea.h];
- return sizes[0] !== sizes[1] && (!isNaN(sizes[0]) || !isNaN(sizes[1]));
- }
-}
-
-function handleMaxPadding(chartArea) {
- var maxPadding = chartArea.maxPadding;
-
- function updatePos(pos) {
- var change = Math.max(maxPadding[pos] - chartArea[pos], 0);
- chartArea[pos] += change;
- return change;
- }
- chartArea.y += updatePos('top');
- chartArea.x += updatePos('left');
- updatePos('right');
- updatePos('bottom');
-}
-
-function getMargins(horizontal, chartArea) {
- var maxPadding = chartArea.maxPadding;
-
- function marginForPositions(positions) {
- var margin = {left: 0, top: 0, right: 0, bottom: 0};
- positions.forEach(function(pos) {
- margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);
- });
- return margin;
- }
-
- return horizontal
- ? marginForPositions(['left', 'right'])
- : marginForPositions(['top', 'bottom']);
-}
-
-function fitBoxes(boxes, chartArea, params) {
- var refitBoxes = [];
- var i, ilen, layout, box, refit, changed;
-
- for (i = 0, ilen = boxes.length; i < ilen; ++i) {
- layout = boxes[i];
- box = layout.box;
-
- box.update(
- layout.width || chartArea.w,
- layout.height || chartArea.h,
- getMargins(layout.horizontal, chartArea)
- );
- if (updateDims(chartArea, params, layout)) {
- changed = true;
- if (refitBoxes.length) {
- // Dimensions changed and there were non full width boxes before this
- // -> we have to refit those
- refit = true;
- }
- }
- if (!box.fullWidth) { // fullWidth boxes don't need to be re-fitted in any case
- refitBoxes.push(layout);
- }
- }
-
- return refit ? fitBoxes(refitBoxes, chartArea, params) || changed : changed;
-}
-
-function placeBoxes(boxes, chartArea, params) {
- var userPadding = params.padding;
- var x = chartArea.x;
- var y = chartArea.y;
- var i, ilen, layout, box;
-
- for (i = 0, ilen = boxes.length; i < ilen; ++i) {
- layout = boxes[i];
- box = layout.box;
- if (layout.horizontal) {
- box.left = box.fullWidth ? userPadding.left : chartArea.left;
- box.right = box.fullWidth ? params.outerWidth - userPadding.right : chartArea.left + chartArea.w;
- box.top = y;
- box.bottom = y + box.height;
- box.width = box.right - box.left;
- y = box.bottom;
- } else {
- box.left = x;
- box.right = x + box.width;
- box.top = chartArea.top;
- box.bottom = chartArea.top + chartArea.h;
- box.height = box.bottom - box.top;
- x = box.right;
- }
- }
-
- chartArea.x = x;
- chartArea.y = y;
-}
-
-core_defaults._set('global', {
- layout: {
- padding: {
- top: 0,
- right: 0,
- bottom: 0,
- left: 0
- }
- }
-});
-
-/**
- * @interface ILayoutItem
- * @prop {string} position - The position of the item in the chart layout. Possible values are
- * 'left', 'top', 'right', 'bottom', and 'chartArea'
- * @prop {number} weight - The weight used to sort the item. Higher weights are further away from the chart area
- * @prop {boolean} fullWidth - if true, and the item is horizontal, then push vertical boxes down
- * @prop {function} isHorizontal - returns true if the layout item is horizontal (ie. top or bottom)
- * @prop {function} update - Takes two parameters: width and height. Returns size of item
- * @prop {function} getPadding - Returns an object with padding on the edges
- * @prop {number} width - Width of item. Must be valid after update()
- * @prop {number} height - Height of item. Must be valid after update()
- * @prop {number} left - Left edge of the item. Set by layout system and cannot be used in update
- * @prop {number} top - Top edge of the item. Set by layout system and cannot be used in update
- * @prop {number} right - Right edge of the item. Set by layout system and cannot be used in update
- * @prop {number} bottom - Bottom edge of the item. Set by layout system and cannot be used in update
- */
-
-// The layout service is very self explanatory. It's responsible for the layout within a chart.
-// Scales, Legends and Plugins all rely on the layout service and can easily register to be placed anywhere they need
-// It is this service's responsibility of carrying out that layout.
-var core_layouts = {
- defaults: {},
-
- /**
- * Register a box to a chart.
- * A box is simply a reference to an object that requires layout. eg. Scales, Legend, Title.
- * @param {Chart} chart - the chart to use
- * @param {ILayoutItem} item - the item to add to be layed out
- */
- addBox: function(chart, item) {
- if (!chart.boxes) {
- chart.boxes = [];
- }
-
- // initialize item with default values
- item.fullWidth = item.fullWidth || false;
- item.position = item.position || 'top';
- item.weight = item.weight || 0;
- item._layers = item._layers || function() {
- return [{
- z: 0,
- draw: function() {
- item.draw.apply(item, arguments);
- }
- }];
- };
-
- chart.boxes.push(item);
- },
-
- /**
- * Remove a layoutItem from a chart
- * @param {Chart} chart - the chart to remove the box from
- * @param {ILayoutItem} layoutItem - the item to remove from the layout
- */
- removeBox: function(chart, layoutItem) {
- var index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;
- if (index !== -1) {
- chart.boxes.splice(index, 1);
- }
- },
-
- /**
- * Sets (or updates) options on the given `item`.
- * @param {Chart} chart - the chart in which the item lives (or will be added to)
- * @param {ILayoutItem} item - the item to configure with the given options
- * @param {object} options - the new item options.
- */
- configure: function(chart, item, options) {
- var props = ['fullWidth', 'position', 'weight'];
- var ilen = props.length;
- var i = 0;
- var prop;
-
- for (; i < ilen; ++i) {
- prop = props[i];
- if (options.hasOwnProperty(prop)) {
- item[prop] = options[prop];
- }
- }
- },
-
- /**
- * Fits boxes of the given chart into the given size by having each box measure itself
- * then running a fitting algorithm
- * @param {Chart} chart - the chart
- * @param {number} width - the width to fit into
- * @param {number} height - the height to fit into
- */
- update: function(chart, width, height) {
- if (!chart) {
- return;
- }
-
- var layoutOptions = chart.options.layout || {};
- var padding = helpers$1.options.toPadding(layoutOptions.padding);
-
- var availableWidth = width - padding.width;
- var availableHeight = height - padding.height;
- var boxes = buildLayoutBoxes(chart.boxes);
- var verticalBoxes = boxes.vertical;
- var horizontalBoxes = boxes.horizontal;
-
- // Essentially we now have any number of boxes on each of the 4 sides.
- // Our canvas looks like the following.
- // The areas L1 and L2 are the left axes. R1 is the right axis, T1 is the top axis and
- // B1 is the bottom axis
- // There are also 4 quadrant-like locations (left to right instead of clockwise) reserved for chart overlays
- // These locations are single-box locations only, when trying to register a chartArea location that is already taken,
- // an error will be thrown.
- //
- // |----------------------------------------------------|
- // | T1 (Full Width) |
- // |----------------------------------------------------|
- // | | | T2 | |
- // | |----|-------------------------------------|----|
- // | | | C1 | | C2 | |
- // | | |----| |----| |
- // | | | | |
- // | L1 | L2 | ChartArea (C0) | R1 |
- // | | | | |
- // | | |----| |----| |
- // | | | C3 | | C4 | |
- // | |----|-------------------------------------|----|
- // | | | B1 | |
- // |----------------------------------------------------|
- // | B2 (Full Width) |
- // |----------------------------------------------------|
- //
-
- var params = Object.freeze({
- outerWidth: width,
- outerHeight: height,
- padding: padding,
- availableWidth: availableWidth,
- vBoxMaxWidth: availableWidth / 2 / verticalBoxes.length,
- hBoxMaxHeight: availableHeight / 2
- });
- var chartArea = extend({
- maxPadding: extend({}, padding),
- w: availableWidth,
- h: availableHeight,
- x: padding.left,
- y: padding.top
- }, padding);
-
- setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);
-
- // First fit vertical boxes
- fitBoxes(verticalBoxes, chartArea, params);
-
- // Then fit horizontal boxes
- if (fitBoxes(horizontalBoxes, chartArea, params)) {
- // if the area changed, re-fit vertical boxes
- fitBoxes(verticalBoxes, chartArea, params);
- }
-
- handleMaxPadding(chartArea);
-
- // Finally place the boxes to correct coordinates
- placeBoxes(boxes.leftAndTop, chartArea, params);
-
- // Move to opposite side of chart
- chartArea.x += chartArea.w;
- chartArea.y += chartArea.h;
-
- placeBoxes(boxes.rightAndBottom, chartArea, params);
-
- chart.chartArea = {
- left: chartArea.left,
- top: chartArea.top,
- right: chartArea.left + chartArea.w,
- bottom: chartArea.top + chartArea.h
- };
-
- // Finally update boxes in chartArea (radial scale for example)
- helpers$1.each(boxes.chartArea, function(layout) {
- var box = layout.box;
- extend(box, chart.chartArea);
- box.update(chartArea.w, chartArea.h);
- });
- }
-};
-
-/**
- * Platform fallback implementation (minimal).
- * @see https://github.com/chartjs/Chart.js/pull/4591#issuecomment-319575939
- */
-
-var platform_basic = {
- acquireContext: function(item) {
- if (item && item.canvas) {
- // Support for any object associated to a canvas (including a context2d)
- item = item.canvas;
- }
-
- return item && item.getContext('2d') || null;
- }
-};
-
-var platform_dom = "/*\r\n * DOM element rendering detection\r\n * https://davidwalsh.name/detect-node-insertion\r\n */\r\n@keyframes chartjs-render-animation {\r\n\tfrom { opacity: 0.99; }\r\n\tto { opacity: 1; }\r\n}\r\n\r\n.chartjs-render-monitor {\r\n\tanimation: chartjs-render-animation 0.001s;\r\n}\r\n\r\n/*\r\n * DOM element resizing detection\r\n * https://github.com/marcj/css-element-queries\r\n */\r\n.chartjs-size-monitor,\r\n.chartjs-size-monitor-expand,\r\n.chartjs-size-monitor-shrink {\r\n\tposition: absolute;\r\n\tdirection: ltr;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tbottom: 0;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\tvisibility: hidden;\r\n\tz-index: -1;\r\n}\r\n\r\n.chartjs-size-monitor-expand > div {\r\n\tposition: absolute;\r\n\twidth: 1000000px;\r\n\theight: 1000000px;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n\r\n.chartjs-size-monitor-shrink > div {\r\n\tposition: absolute;\r\n\twidth: 200%;\r\n\theight: 200%;\r\n\tleft: 0;\r\n\ttop: 0;\r\n}\r\n";
-
-var platform_dom$1 = /*#__PURE__*/Object.freeze({
-__proto__: null,
-'default': platform_dom
-});
-
-var stylesheet = getCjsExportFromNamespace(platform_dom$1);
-
-var EXPANDO_KEY = '$chartjs';
-var CSS_PREFIX = 'chartjs-';
-var CSS_SIZE_MONITOR = CSS_PREFIX + 'size-monitor';
-var CSS_RENDER_MONITOR = CSS_PREFIX + 'render-monitor';
-var CSS_RENDER_ANIMATION = CSS_PREFIX + 'render-animation';
-var ANIMATION_START_EVENTS = ['animationstart', 'webkitAnimationStart'];
-
-/**
- * DOM event types -> Chart.js event types.
- * Note: only events with different types are mapped.
- * @see https://developer.mozilla.org/en-US/docs/Web/Events
- */
-var EVENT_TYPES = {
- touchstart: 'mousedown',
- touchmove: 'mousemove',
- touchend: 'mouseup',
- pointerenter: 'mouseenter',
- pointerdown: 'mousedown',
- pointermove: 'mousemove',
- pointerup: 'mouseup',
- pointerleave: 'mouseout',
- pointerout: 'mouseout'
-};
-
-/**
- * The "used" size is the final value of a dimension property after all calculations have
- * been performed. This method uses the computed style of `element` but returns undefined
- * if the computed style is not expressed in pixels. That can happen in some cases where
- * `element` has a size relative to its parent and this last one is not yet displayed,
- * for example because of `display: none` on a parent node.
- * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value
- * @returns {number} Size in pixels or undefined if unknown.
- */
-function readUsedSize(element, property) {
- var value = helpers$1.getStyle(element, property);
- var matches = value && value.match(/^(\d+)(\.\d+)?px$/);
- return matches ? Number(matches[1]) : undefined;
-}
-
-/**
- * Initializes the canvas style and render size without modifying the canvas display size,
- * since responsiveness is handled by the controller.resize() method. The config is used
- * to determine the aspect ratio to apply in case no explicit height has been specified.
- */
-function initCanvas(canvas, config) {
- var style = canvas.style;
-
- // NOTE(SB) canvas.getAttribute('width') !== canvas.width: in the first case it
- // returns null or '' if no explicit value has been set to the canvas attribute.
- var renderHeight = canvas.getAttribute('height');
- var renderWidth = canvas.getAttribute('width');
-
- // Chart.js modifies some canvas values that we want to restore on destroy
- canvas[EXPANDO_KEY] = {
- initial: {
- height: renderHeight,
- width: renderWidth,
- style: {
- display: style.display,
- height: style.height,
- width: style.width
- }
- }
- };
-
- // Force canvas to display as block to avoid extra space caused by inline
- // elements, which would interfere with the responsive resize process.
- // https://github.com/chartjs/Chart.js/issues/2538
- style.display = style.display || 'block';
-
- if (renderWidth === null || renderWidth === '') {
- var displayWidth = readUsedSize(canvas, 'width');
- if (displayWidth !== undefined) {
- canvas.width = displayWidth;
- }
- }
-
- if (renderHeight === null || renderHeight === '') {
- if (canvas.style.height === '') {
- // If no explicit render height and style height, let's apply the aspect ratio,
- // which one can be specified by the user but also by charts as default option
- // (i.e. options.aspectRatio). If not specified, use canvas aspect ratio of 2.
- canvas.height = canvas.width / (config.options.aspectRatio || 2);
- } else {
- var displayHeight = readUsedSize(canvas, 'height');
- if (displayWidth !== undefined) {
- canvas.height = displayHeight;
- }
- }
- }
-
- return canvas;
-}
-
-/**
- * Detects support for options object argument in addEventListener.
- * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support
- * @private
- */
-var supportsEventListenerOptions = (function() {
- var supports = false;
- try {
- var options = Object.defineProperty({}, 'passive', {
- // eslint-disable-next-line getter-return
- get: function() {
- supports = true;
- }
- });
- window.addEventListener('e', null, options);
- } catch (e) {
- // continue regardless of error
- }
- return supports;
-}());
-
-// Default passive to true as expected by Chrome for 'touchstart' and 'touchend' events.
-// https://github.com/chartjs/Chart.js/issues/4287
-var eventListenerOptions = supportsEventListenerOptions ? {passive: true} : false;
-
-function addListener(node, type, listener) {
- node.addEventListener(type, listener, eventListenerOptions);
-}
-
-function removeListener(node, type, listener) {
- node.removeEventListener(type, listener, eventListenerOptions);
-}
-
-function createEvent(type, chart, x, y, nativeEvent) {
- return {
- type: type,
- chart: chart,
- native: nativeEvent || null,
- x: x !== undefined ? x : null,
- y: y !== undefined ? y : null,
- };
-}
-
-function fromNativeEvent(event, chart) {
- var type = EVENT_TYPES[event.type] || event.type;
- var pos = helpers$1.getRelativePosition(event, chart);
- return createEvent(type, chart, pos.x, pos.y, event);
-}
-
-function throttled(fn, thisArg) {
- var ticking = false;
- var args = [];
-
- return function() {
- args = Array.prototype.slice.call(arguments);
- thisArg = thisArg || this;
-
- if (!ticking) {
- ticking = true;
- helpers$1.requestAnimFrame.call(window, function() {
- ticking = false;
- fn.apply(thisArg, args);
- });
- }
- };
-}
-
-function createDiv(cls) {
- var el = document.createElement('div');
- el.className = cls || '';
- return el;
-}
-
-// Implementation based on https://github.com/marcj/css-element-queries
-function createResizer(handler) {
- var maxSize = 1000000;
-
- // NOTE(SB) Don't use innerHTML because it could be considered unsafe.
- // https://github.com/chartjs/Chart.js/issues/5902
- var resizer = createDiv(CSS_SIZE_MONITOR);
- var expand = createDiv(CSS_SIZE_MONITOR + '-expand');
- var shrink = createDiv(CSS_SIZE_MONITOR + '-shrink');
-
- expand.appendChild(createDiv());
- shrink.appendChild(createDiv());
-
- resizer.appendChild(expand);
- resizer.appendChild(shrink);
- resizer._reset = function() {
- expand.scrollLeft = maxSize;
- expand.scrollTop = maxSize;
- shrink.scrollLeft = maxSize;
- shrink.scrollTop = maxSize;
- };
-
- var onScroll = function() {
- resizer._reset();
- handler();
- };
-
- addListener(expand, 'scroll', onScroll.bind(expand, 'expand'));
- addListener(shrink, 'scroll', onScroll.bind(shrink, 'shrink'));
-
- return resizer;
-}
-
-// https://davidwalsh.name/detect-node-insertion
-function watchForRender(node, handler) {
- var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});
- var proxy = expando.renderProxy = function(e) {
- if (e.animationName === CSS_RENDER_ANIMATION) {
- handler();
- }
- };
-
- helpers$1.each(ANIMATION_START_EVENTS, function(type) {
- addListener(node, type, proxy);
- });
-
- // #4737: Chrome might skip the CSS animation when the CSS_RENDER_MONITOR class
- // is removed then added back immediately (same animation frame?). Accessing the
- // `offsetParent` property will force a reflow and re-evaluate the CSS animation.
- // https://gist.github.com/paulirish/5d52fb081b3570c81e3a#box-metrics
- // https://github.com/chartjs/Chart.js/issues/4737
- expando.reflow = !!node.offsetParent;
-
- node.classList.add(CSS_RENDER_MONITOR);
-}
-
-function unwatchForRender(node) {
- var expando = node[EXPANDO_KEY] || {};
- var proxy = expando.renderProxy;
-
- if (proxy) {
- helpers$1.each(ANIMATION_START_EVENTS, function(type) {
- removeListener(node, type, proxy);
- });
-
- delete expando.renderProxy;
- }
-
- node.classList.remove(CSS_RENDER_MONITOR);
-}
-
-function addResizeListener(node, listener, chart) {
- var expando = node[EXPANDO_KEY] || (node[EXPANDO_KEY] = {});
-
- // Let's keep track of this added resizer and thus avoid DOM query when removing it.
- var resizer = expando.resizer = createResizer(throttled(function() {
- if (expando.resizer) {
- var container = chart.options.maintainAspectRatio && node.parentNode;
- var w = container ? container.clientWidth : 0;
- listener(createEvent('resize', chart));
- if (container && container.clientWidth < w && chart.canvas) {
- // If the container size shrank during chart resize, let's assume
- // scrollbar appeared. So we resize again with the scrollbar visible -
- // effectively making chart smaller and the scrollbar hidden again.
- // Because we are inside `throttled`, and currently `ticking`, scroll
- // events are ignored during this whole 2 resize process.
- // If we assumed wrong and something else happened, we are resizing
- // twice in a frame (potential performance issue)
- listener(createEvent('resize', chart));
- }
- }
- }));
-
- // The resizer needs to be attached to the node parent, so we first need to be
- // sure that `node` is attached to the DOM before injecting the resizer element.
- watchForRender(node, function() {
- if (expando.resizer) {
- var container = node.parentNode;
- if (container && container !== resizer.parentNode) {
- container.insertBefore(resizer, container.firstChild);
- }
-
- // The container size might have changed, let's reset the resizer state.
- resizer._reset();
- }
- });
-}
-
-function removeResizeListener(node) {
- var expando = node[EXPANDO_KEY] || {};
- var resizer = expando.resizer;
-
- delete expando.resizer;
- unwatchForRender(node);
-
- if (resizer && resizer.parentNode) {
- resizer.parentNode.removeChild(resizer);
- }
-}
-
-/**
- * Injects CSS styles inline if the styles are not already present.
- * @param {HTMLDocument|ShadowRoot} rootNode - the node to contain the