Initial commit
This commit is contained in:
10
client/externalFiles/Chart.bundle.min.2.7.2.js
Normal file
10
client/externalFiles/Chart.bundle.min.2.7.2.js
Normal file
File diff suppressed because one or more lines are too long
7
client/externalFiles/Chart.bundle.min.2.8.4.js
Normal file
7
client/externalFiles/Chart.bundle.min.2.8.4.js
Normal file
File diff suppressed because one or more lines are too long
7
client/externalFiles/Chart.bundle.min.js
vendored
Normal file
7
client/externalFiles/Chart.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
20781
client/externalFiles/Chart.bundle.min.patched.js
Normal file
20781
client/externalFiles/Chart.bundle.min.patched.js
Normal file
File diff suppressed because it is too large
Load Diff
884
client/externalFiles/alertify.css
Normal file
884
client/externalFiles/alertify.css
Normal file
@ -0,0 +1,884 @@
|
||||
/**
|
||||
* alertifyjs 1.8.0 http://alertifyjs.com
|
||||
* AlertifyJS is a javascript framework for developing pretty browser dialogs and notifications.
|
||||
* Copyright 2016 Mohammad Younes <Mohammad@alertifyjs.com> (http://alertifyjs.com)
|
||||
* Licensed under GPL 3 <https://opensource.org/licenses/gpl-3.0>*/
|
||||
.alertify .ajs-dimmer {
|
||||
position: fixed;
|
||||
z-index: 1981;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background-color: #252525;
|
||||
opacity: .5;
|
||||
}
|
||||
.alertify .ajs-modal {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
padding: 0;
|
||||
overflow-y: auto;
|
||||
z-index: 1981;
|
||||
}
|
||||
.alertify .ajs-dialog {
|
||||
position: relative;
|
||||
margin: 5% auto;
|
||||
min-height: 110px;
|
||||
max-width: 500px;
|
||||
padding: 24px 24px 0 24px;
|
||||
outline: 0;
|
||||
background-color: #fff;
|
||||
}
|
||||
.alertify .ajs-dialog.ajs-capture:before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
display: block;
|
||||
z-index: 1;
|
||||
}
|
||||
.alertify .ajs-reset {
|
||||
position: absolute !important;
|
||||
display: inline !important;
|
||||
width: 0 !important;
|
||||
height: 0 !important;
|
||||
opacity: 0 !important;
|
||||
}
|
||||
.alertify .ajs-commands {
|
||||
position: absolute;
|
||||
right: 4px;
|
||||
margin: -14px 24px 0 0;
|
||||
z-index: 2;
|
||||
}
|
||||
.alertify .ajs-commands button {
|
||||
display: none;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
margin-left: 10px;
|
||||
padding: 10px;
|
||||
border: 0;
|
||||
background-color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-position: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
.alertify .ajs-commands button.ajs-close {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAh0lEQVQYlY2QsQ0EIQwEB9cBAR1CJUaI/gigDnwR6NBL/7/xWLNrZ2b8EwGotVpr7eOitWa1VjugiNB7R1UPrKrWe0dEAHBbXUqxMQbeewDmnHjvyTm7C3zDwAUd9c63YQdUVdu6EAJzzquz7HXvTiklt+H9DQFYaxFjvDqllFyMkbXWvfpXHjJrWFgdBq/hAAAAAElFTkSuQmCC);
|
||||
}
|
||||
.alertify .ajs-commands button.ajs-maximize {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAOUlEQVQYlWP8//8/AzGAhYGBgaG4uBiv6t7eXkYmooxjYGAgWiELsvHYFMCcRX2rSXcjoSBiJDbAAeD+EGu+8BZcAAAAAElFTkSuQmCC);
|
||||
}
|
||||
.alertify .ajs-header {
|
||||
margin: -24px;
|
||||
margin-bottom: 0;
|
||||
padding: 16px 24px;
|
||||
background-color: #fff;
|
||||
}
|
||||
.alertify .ajs-body {
|
||||
min-height: 56px;
|
||||
}
|
||||
.alertify .ajs-body .ajs-content {
|
||||
padding: 16px 24px 16px 16px;
|
||||
}
|
||||
.alertify .ajs-footer {
|
||||
padding: 4px;
|
||||
margin-left: -24px;
|
||||
margin-right: -24px;
|
||||
min-height: 43px;
|
||||
background-color: #fff;
|
||||
}
|
||||
.alertify .ajs-footer .ajs-buttons.ajs-primary {
|
||||
text-align: right;
|
||||
}
|
||||
.alertify .ajs-footer .ajs-buttons.ajs-primary .ajs-button {
|
||||
margin: 4px;
|
||||
}
|
||||
.alertify .ajs-footer .ajs-buttons.ajs-auxiliary {
|
||||
float: left;
|
||||
clear: none;
|
||||
text-align: left;
|
||||
}
|
||||
.alertify .ajs-footer .ajs-buttons.ajs-auxiliary .ajs-button {
|
||||
margin: 4px;
|
||||
}
|
||||
.alertify .ajs-footer .ajs-buttons .ajs-button {
|
||||
min-width: 88px;
|
||||
min-height: 35px;
|
||||
}
|
||||
.alertify .ajs-handle {
|
||||
position: absolute;
|
||||
display: none;
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
z-index: 1;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMS8xNEDQYmMAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAQ0lEQVQYlaXNMQoAIAxD0dT7H657l0KX3iJuUlBUNOsPPCGJm7VDp6ryeMxMuDsAQH7owW3pyn3RS26iKxERMLN3ugOaAkaL3sWVigAAAABJRU5ErkJggg==);
|
||||
-webkit-transform: scaleX(1) /*rtl:scaleX(-1)*/;
|
||||
transform: scaleX(1) /*rtl:scaleX(-1)*/;
|
||||
cursor: se-resize;
|
||||
}
|
||||
.alertify.ajs-no-overflow .ajs-body .ajs-content {
|
||||
overflow: hidden !important;
|
||||
}
|
||||
.alertify.ajs-no-padding.ajs-maximized .ajs-body .ajs-content {
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 0;
|
||||
}
|
||||
.alertify.ajs-no-padding:not(.ajs-maximized) .ajs-body {
|
||||
margin-left: -24px;
|
||||
margin-right: -24px;
|
||||
}
|
||||
.alertify.ajs-no-padding:not(.ajs-maximized) .ajs-body .ajs-content {
|
||||
padding: 0;
|
||||
}
|
||||
.alertify.ajs-no-padding.ajs-resizable .ajs-body .ajs-content {
|
||||
left: 0;
|
||||
right: 0;
|
||||
}
|
||||
.alertify.ajs-maximizable .ajs-commands button.ajs-maximize,
|
||||
.alertify.ajs-maximizable .ajs-commands button.ajs-restore {
|
||||
display: inline-block;
|
||||
}
|
||||
.alertify.ajs-closable .ajs-commands button.ajs-close {
|
||||
display: inline-block;
|
||||
}
|
||||
.alertify.ajs-maximized .ajs-dialog {
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
max-width: none !important;
|
||||
margin: 0 auto !important;
|
||||
top: 0 !important;
|
||||
left: 0 !important;
|
||||
}
|
||||
.alertify.ajs-maximized.ajs-modeless .ajs-modal {
|
||||
position: fixed !important;
|
||||
min-height: 100% !important;
|
||||
max-height: none !important;
|
||||
margin: 0 !important;
|
||||
}
|
||||
.alertify.ajs-maximized .ajs-commands button.ajs-maximize {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAASklEQVQYlZWQ0QkAMQhDtXRincOZX78KVtrDCwgqJNEoIB3MPLj7lRUROlpyVXGzby6zWuY+kz6tj5sBMTMAyVV3/595RbOh3cAXsww1raeiOcoAAAAASUVORK5CYII=);
|
||||
}
|
||||
.alertify.ajs-resizable .ajs-dialog,
|
||||
.alertify.ajs-maximized .ajs-dialog {
|
||||
padding: 0;
|
||||
}
|
||||
.alertify.ajs-resizable .ajs-commands,
|
||||
.alertify.ajs-maximized .ajs-commands {
|
||||
margin: 14px 24px 0 0;
|
||||
}
|
||||
.alertify.ajs-resizable .ajs-header,
|
||||
.alertify.ajs-maximized .ajs-header {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
padding: 16px 24px;
|
||||
}
|
||||
.alertify.ajs-resizable .ajs-body,
|
||||
.alertify.ajs-maximized .ajs-body {
|
||||
min-height: 224px;
|
||||
display: inline-block;
|
||||
}
|
||||
.alertify.ajs-resizable .ajs-body .ajs-content,
|
||||
.alertify.ajs-maximized .ajs-body .ajs-content {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
right: 24px;
|
||||
bottom: 50px;
|
||||
left: 24px;
|
||||
overflow: auto;
|
||||
}
|
||||
.alertify.ajs-resizable .ajs-footer,
|
||||
.alertify.ajs-maximized .ajs-footer {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
}
|
||||
.alertify.ajs-resizable:not(.ajs-maximized) .ajs-dialog {
|
||||
min-width: 548px;
|
||||
}
|
||||
.alertify.ajs-resizable:not(.ajs-maximized) .ajs-handle {
|
||||
display: block;
|
||||
}
|
||||
.alertify.ajs-movable:not(.ajs-maximized) .ajs-header {
|
||||
cursor: move;
|
||||
}
|
||||
.alertify.ajs-modeless .ajs-dimmer,
|
||||
.alertify.ajs-modeless .ajs-reset {
|
||||
display: none;
|
||||
}
|
||||
.alertify.ajs-modeless .ajs-modal {
|
||||
overflow: visible;
|
||||
max-width: none;
|
||||
max-height: 0;
|
||||
}
|
||||
.alertify.ajs-modeless.ajs-pinnable .ajs-commands button.ajs-pin {
|
||||
display: inline-block;
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAQklEQVQYlcWPMQ4AIAwCqU9u38GbcbHRWN1MvKQDhQFMEpKImGJA0gCgnYw0V0rwxseg5erT4oSkQVI5d9f+e9+xA0NbLpWfitPXAAAAAElFTkSuQmCC);
|
||||
}
|
||||
.alertify.ajs-modeless.ajs-unpinned .ajs-modal {
|
||||
position: absolute;
|
||||
}
|
||||
.alertify.ajs-modeless.ajs-unpinned .ajs-commands button.ajs-pin {
|
||||
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABZ0RVh0Q3JlYXRpb24gVGltZQAwNy8xMy8xNOrZqugAAAAcdEVYdFNvZnR3YXJlAEFkb2JlIEZpcmV3b3JrcyBDUzbovLKMAAAAO0lEQVQYlWP8//8/AzGAiShV6AqLi4txGs+CLoBLMYbC3t5eRmyaWfBZhwwYkX2NTxPRvibKjRhW4wMAhxkYGbLu3pEAAAAASUVORK5CYII=);
|
||||
}
|
||||
.alertify.ajs-modeless:not(.ajs-unpinned) .ajs-body {
|
||||
max-height: 500px;
|
||||
overflow: auto;
|
||||
}
|
||||
.alertify.ajs-basic .ajs-header {
|
||||
opacity: 0;
|
||||
}
|
||||
.alertify.ajs-basic .ajs-footer {
|
||||
visibility: hidden;
|
||||
}
|
||||
.alertify.ajs-frameless .ajs-header {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
min-height: 60px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
opacity: 0;
|
||||
z-index: 1;
|
||||
}
|
||||
.alertify.ajs-frameless .ajs-footer {
|
||||
display: none;
|
||||
}
|
||||
.alertify.ajs-frameless .ajs-body .ajs-content {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
.alertify.ajs-frameless:not(.ajs-resizable) .ajs-dialog {
|
||||
padding-top: 0;
|
||||
}
|
||||
.alertify.ajs-frameless:not(.ajs-resizable) .ajs-dialog .ajs-commands {
|
||||
margin-top: 0;
|
||||
}
|
||||
.ajs-no-overflow {
|
||||
overflow: hidden !important;
|
||||
outline: none;
|
||||
}
|
||||
.ajs-no-overflow.ajs-fixed {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
overflow-y: scroll!important;
|
||||
}
|
||||
.ajs-no-selection,
|
||||
.ajs-no-selection * {
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
@media screen and (max-width: 568px) {
|
||||
.alertify .ajs-dialog {
|
||||
min-width: 150px;
|
||||
}
|
||||
.alertify:not(.ajs-maximized) .ajs-modal {
|
||||
padding: 0 5%;
|
||||
}
|
||||
.alertify:not(.ajs-maximized).ajs-resizable .ajs-dialog {
|
||||
min-width: initial;
|
||||
min-width: auto /*IE fallback*/;
|
||||
}
|
||||
}
|
||||
@-moz-document url-prefix() {
|
||||
.alertify button:focus {
|
||||
outline: 1px dotted #3593D2;
|
||||
}
|
||||
}
|
||||
.alertify .ajs-dimmer,
|
||||
.alertify .ajs-modal {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
transition-property: opacity, visibility;
|
||||
transition-timing-function: linear;
|
||||
transition-duration: 250ms;
|
||||
}
|
||||
.alertify.ajs-hidden .ajs-dimmer,
|
||||
.alertify.ajs-hidden .ajs-modal {
|
||||
visibility: hidden;
|
||||
opacity: 0;
|
||||
}
|
||||
.alertify.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-duration: 500ms;
|
||||
animation-duration: 500ms;
|
||||
}
|
||||
.alertify.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-duration: 250ms;
|
||||
animation-duration: 250ms;
|
||||
}
|
||||
.alertify .ajs-dialog.ajs-shake {
|
||||
-webkit-animation-name: ajs-shake;
|
||||
animation-name: ajs-shake;
|
||||
-webkit-animation-duration: .1s;
|
||||
animation-duration: .1s;
|
||||
-webkit-animation-fill-mode: both;
|
||||
animation-fill-mode: both;
|
||||
}
|
||||
@-webkit-keyframes ajs-shake {
|
||||
0%,
|
||||
100% {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
10%,
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90% {
|
||||
-webkit-transform: translate3d(-10px, 0, 0);
|
||||
transform: translate3d(-10px, 0, 0);
|
||||
}
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80% {
|
||||
-webkit-transform: translate3d(10px, 0, 0);
|
||||
transform: translate3d(10px, 0, 0);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-shake {
|
||||
0%,
|
||||
100% {
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
10%,
|
||||
30%,
|
||||
50%,
|
||||
70%,
|
||||
90% {
|
||||
-webkit-transform: translate3d(-10px, 0, 0);
|
||||
transform: translate3d(-10px, 0, 0);
|
||||
}
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80% {
|
||||
-webkit-transform: translate3d(10px, 0, 0);
|
||||
transform: translate3d(10px, 0, 0);
|
||||
}
|
||||
}
|
||||
.alertify.ajs-slide.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-name: ajs-slideIn;
|
||||
animation-name: ajs-slideIn;
|
||||
-webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||||
animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||||
}
|
||||
.alertify.ajs-slide.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-name: ajs-slideOut;
|
||||
animation-name: ajs-slideOut;
|
||||
-webkit-animation-timing-function: cubic-bezier(0.6, -0.28, 0.735, 0.045);
|
||||
animation-timing-function: cubic-bezier(0.6, -0.28, 0.735, 0.045);
|
||||
}
|
||||
.alertify.ajs-zoom.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-name: ajs-zoomIn;
|
||||
animation-name: ajs-zoomIn;
|
||||
}
|
||||
.alertify.ajs-zoom.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-name: ajs-zoomOut;
|
||||
animation-name: ajs-zoomOut;
|
||||
}
|
||||
.alertify.ajs-fade.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-name: ajs-fadeIn;
|
||||
animation-name: ajs-fadeIn;
|
||||
}
|
||||
.alertify.ajs-fade.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-name: ajs-fadeOut;
|
||||
animation-name: ajs-fadeOut;
|
||||
}
|
||||
.alertify.ajs-pulse.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-name: ajs-pulseIn;
|
||||
animation-name: ajs-pulseIn;
|
||||
}
|
||||
.alertify.ajs-pulse.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-name: ajs-pulseOut;
|
||||
animation-name: ajs-pulseOut;
|
||||
}
|
||||
.alertify.ajs-flipx.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-name: ajs-flipInX;
|
||||
animation-name: ajs-flipInX;
|
||||
}
|
||||
.alertify.ajs-flipx.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-name: ajs-flipOutX;
|
||||
animation-name: ajs-flipOutX;
|
||||
}
|
||||
.alertify.ajs-flipy.ajs-in:not(.ajs-hidden) .ajs-dialog {
|
||||
-webkit-animation-name: ajs-flipInY;
|
||||
animation-name: ajs-flipInY;
|
||||
}
|
||||
.alertify.ajs-flipy.ajs-out.ajs-hidden .ajs-dialog {
|
||||
-webkit-animation-name: ajs-flipOutY;
|
||||
animation-name: ajs-flipOutY;
|
||||
}
|
||||
@-webkit-keyframes ajs-pulseIn {
|
||||
0%,
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80%,
|
||||
100% {
|
||||
transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
|
||||
}
|
||||
0% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: scale3d(1.1, 1.1, 1.1);
|
||||
transform: scale3d(1.1, 1.1, 1.1);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: scale3d(0.9, 0.9, 0.9);
|
||||
transform: scale3d(0.9, 0.9, 0.9);
|
||||
}
|
||||
60% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1.03, 1.03, 1.03);
|
||||
transform: scale3d(1.03, 1.03, 1.03);
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: scale3d(0.97, 0.97, 0.97);
|
||||
transform: scale3d(0.97, 0.97, 0.97);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-pulseIn {
|
||||
0%,
|
||||
20%,
|
||||
40%,
|
||||
60%,
|
||||
80%,
|
||||
100% {
|
||||
transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
|
||||
}
|
||||
0% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
20% {
|
||||
-webkit-transform: scale3d(1.1, 1.1, 1.1);
|
||||
transform: scale3d(1.1, 1.1, 1.1);
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: scale3d(0.9, 0.9, 0.9);
|
||||
transform: scale3d(0.9, 0.9, 0.9);
|
||||
}
|
||||
60% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1.03, 1.03, 1.03);
|
||||
transform: scale3d(1.03, 1.03, 1.03);
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: scale3d(0.97, 0.97, 0.97);
|
||||
transform: scale3d(0.97, 0.97, 0.97);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-pulseOut {
|
||||
20% {
|
||||
-webkit-transform: scale3d(0.9, 0.9, 0.9);
|
||||
transform: scale3d(0.9, 0.9, 0.9);
|
||||
}
|
||||
50%,
|
||||
55% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1.1, 1.1, 1.1);
|
||||
transform: scale3d(1.1, 1.1, 1.1);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-pulseOut {
|
||||
20% {
|
||||
-webkit-transform: scale3d(0.9, 0.9, 0.9);
|
||||
transform: scale3d(0.9, 0.9, 0.9);
|
||||
}
|
||||
50%,
|
||||
55% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1.1, 1.1, 1.1);
|
||||
transform: scale3d(1.1, 1.1, 1.1);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.3, 0.3, 0.3);
|
||||
transform: scale3d(0.3, 0.3, 0.3);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-zoomIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.25, 0.25, 0.25);
|
||||
transform: scale3d(0.25, 0.25, 0.25);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-zoomIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.25, 0.25, 0.25);
|
||||
transform: scale3d(0.25, 0.25, 0.25);
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-zoomOut {
|
||||
0% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.25, 0.25, 0.25);
|
||||
transform: scale3d(0.25, 0.25, 0.25);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-zoomOut {
|
||||
0% {
|
||||
opacity: 1;
|
||||
-webkit-transform: scale3d(1, 1, 1);
|
||||
transform: scale3d(1, 1, 1);
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
-webkit-transform: scale3d(0.25, 0.25, 0.25);
|
||||
transform: scale3d(0.25, 0.25, 0.25);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@keyframes ajs-fadeIn {
|
||||
0% {
|
||||
opacity: 0;
|
||||
}
|
||||
100% {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-fadeOut {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes ajs-fadeOut {
|
||||
0% {
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-flipInX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-flipOutX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes ajs-flipOutX {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-flipInY {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
@keyframes ajs-flipInY {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
transition-timing-function: ease-in;
|
||||
opacity: 0;
|
||||
}
|
||||
40% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
|
||||
transition-timing-function: ease-in;
|
||||
}
|
||||
60% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
|
||||
opacity: 1;
|
||||
}
|
||||
80% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-flipOutY {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@keyframes ajs-flipOutY {
|
||||
0% {
|
||||
-webkit-transform: perspective(400px);
|
||||
transform: perspective(400px);
|
||||
}
|
||||
30% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
|
||||
opacity: 1;
|
||||
}
|
||||
100% {
|
||||
-webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
|
||||
opacity: 0;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-slideIn {
|
||||
0% {
|
||||
margin-top: -100%;
|
||||
}
|
||||
100% {
|
||||
margin-top: 5%;
|
||||
}
|
||||
}
|
||||
@keyframes ajs-slideIn {
|
||||
0% {
|
||||
margin-top: -100%;
|
||||
}
|
||||
100% {
|
||||
margin-top: 5%;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes ajs-slideOut {
|
||||
0% {
|
||||
margin-top: 5%;
|
||||
}
|
||||
100% {
|
||||
margin-top: -100%;
|
||||
}
|
||||
}
|
||||
@keyframes ajs-slideOut {
|
||||
0% {
|
||||
margin-top: 5%;
|
||||
}
|
||||
100% {
|
||||
margin-top: -100%;
|
||||
}
|
||||
}
|
||||
.alertify-notifier {
|
||||
position: fixed;
|
||||
width: 0;
|
||||
overflow: visible;
|
||||
z-index: 1982;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
||||
.alertify-notifier .ajs-message {
|
||||
position: relative;
|
||||
width: 260px;
|
||||
max-height: 0;
|
||||
padding: 0;
|
||||
opacity: 0;
|
||||
margin: 0;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
transition-duration: 250ms;
|
||||
transition-timing-function: linear;
|
||||
}
|
||||
.alertify-notifier .ajs-message.ajs-visible {
|
||||
transition-duration: 500ms;
|
||||
transition-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1.275);
|
||||
opacity: 1;
|
||||
max-height: 100%;
|
||||
padding: 15px;
|
||||
margin-top: 10px;
|
||||
}
|
||||
.alertify-notifier .ajs-message.ajs-success {
|
||||
background: rgba(91, 189, 114, 0.95);
|
||||
}
|
||||
.alertify-notifier .ajs-message.ajs-error {
|
||||
background: rgba(217, 92, 92, 0.95);
|
||||
}
|
||||
.alertify-notifier .ajs-message.ajs-warning {
|
||||
background: rgba(252, 248, 215, 0.95);
|
||||
}
|
||||
.alertify-notifier.ajs-top {
|
||||
top: 10px;
|
||||
}
|
||||
.alertify-notifier.ajs-bottom {
|
||||
bottom: 10px;
|
||||
}
|
||||
.alertify-notifier.ajs-right {
|
||||
right: 10px;
|
||||
}
|
||||
.alertify-notifier.ajs-right .ajs-message {
|
||||
right: -320px;
|
||||
}
|
||||
.alertify-notifier.ajs-right .ajs-message.ajs-visible {
|
||||
right: 290px;
|
||||
}
|
||||
.alertify-notifier.ajs-left {
|
||||
left: 10px;
|
||||
}
|
||||
.alertify-notifier.ajs-left .ajs-message {
|
||||
left: -300px;
|
||||
}
|
||||
.alertify-notifier.ajs-left .ajs-message.ajs-visible {
|
||||
left: 0;
|
||||
}
|
3572
client/externalFiles/alertify.js
Normal file
3572
client/externalFiles/alertify.js
Normal file
File diff suppressed because it is too large
Load Diff
1650
client/externalFiles/alertify.min.css
vendored
Normal file
1650
client/externalFiles/alertify.min.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
3
client/externalFiles/alertify.min.js
vendored
Normal file
3
client/externalFiles/alertify.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
678
client/externalFiles/chartjs-zoom new.js
Normal file
678
client/externalFiles/chartjs-zoom new.js
Normal file
@ -0,0 +1,678 @@
|
||||
//'use strict';
|
||||
|
||||
import {Chart} from 'chart.js';
|
||||
import Hammer from 'hammerjs';
|
||||
|
||||
var helpers = Chart.helpers;
|
||||
|
||||
// Take the zoom namespace of Chart
|
||||
var zoomNS = Chart.Zoom = Chart.Zoom || {};
|
||||
|
||||
// Where we store functions to handle different scale types
|
||||
var zoomFunctions = zoomNS.zoomFunctions = zoomNS.zoomFunctions || {};
|
||||
var panFunctions = zoomNS.panFunctions = zoomNS.panFunctions || {};
|
||||
|
||||
function resolveOptions(chart, options) {
|
||||
var deprecatedOptions = {};
|
||||
if (typeof chart.options.pan !== 'undefined') {
|
||||
deprecatedOptions.pan = chart.options.pan;
|
||||
}
|
||||
if (typeof chart.options.zoom !== 'undefined') {
|
||||
deprecatedOptions.zoom = chart.options.zoom;
|
||||
}
|
||||
var props = chart.$zoom;
|
||||
options = props._options = helpers.merge({}, [options, deprecatedOptions]);
|
||||
|
||||
// Install listeners. Do this dynamically based on options so that we can turn zoom on and off
|
||||
// We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page
|
||||
// and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled
|
||||
var node = props._node;
|
||||
var zoomEnabled = options.zoom && options.zoom.enabled;
|
||||
var dragEnabled = options.zoom.drag;
|
||||
if (zoomEnabled && !dragEnabled) {
|
||||
node.addEventListener('wheel', props._wheelHandler);
|
||||
} else {
|
||||
node.removeEventListener('wheel', props._wheelHandler);
|
||||
}
|
||||
if (zoomEnabled && dragEnabled) {
|
||||
node.addEventListener('mousedown', props._mouseDownHandler);
|
||||
node.ownerDocument.addEventListener('mouseup', props._mouseUpHandler);
|
||||
} else {
|
||||
node.removeEventListener('mousedown', props._mouseDownHandler);
|
||||
node.removeEventListener('mousemove', props._mouseMoveHandler);
|
||||
node.ownerDocument.removeEventListener('mouseup', props._mouseUpHandler);
|
||||
}
|
||||
}
|
||||
|
||||
function storeOriginalOptions(chart) {
|
||||
var originalOptions = chart.$zoom._originalOptions;
|
||||
helpers.each(chart.scales, function(scale) {
|
||||
if (!originalOptions[scale.id]) {
|
||||
originalOptions[scale.id] = helpers.clone(scale.options);
|
||||
}
|
||||
});
|
||||
helpers.each(originalOptions, function(opt, key) {
|
||||
if (!chart.scales[key]) {
|
||||
delete originalOptions[key];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @param {string} mode can be 'x', 'y' or 'xy'
|
||||
* @param {string} dir can be 'x' or 'y'
|
||||
* @param {Chart} chart instance of the chart in question
|
||||
*/
|
||||
function directionEnabled(mode, dir, chart) {
|
||||
if (mode === undefined) {
|
||||
return true;
|
||||
} else if (typeof mode === 'string') {
|
||||
return mode.indexOf(dir) !== -1;
|
||||
} else if (typeof mode === 'function') {
|
||||
return mode({chart: chart}).indexOf(dir) !== -1;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
function rangeMaxLimiter(zoomPanOptions, newMax) {
|
||||
if (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMax &&
|
||||
!helpers.isNullOrUndef(zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes])) {
|
||||
var rangeMax = zoomPanOptions.rangeMax[zoomPanOptions.scaleAxes];
|
||||
if (newMax > rangeMax) {
|
||||
newMax = rangeMax;
|
||||
}
|
||||
}
|
||||
return newMax;
|
||||
}
|
||||
|
||||
function rangeMinLimiter(zoomPanOptions, newMin) {
|
||||
if (zoomPanOptions.scaleAxes && zoomPanOptions.rangeMin &&
|
||||
!helpers.isNullOrUndef(zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes])) {
|
||||
var rangeMin = zoomPanOptions.rangeMin[zoomPanOptions.scaleAxes];
|
||||
if (newMin < rangeMin) {
|
||||
newMin = rangeMin;
|
||||
}
|
||||
}
|
||||
return newMin;
|
||||
}
|
||||
|
||||
function zoomCategoryScale(scale, zoom, center, zoomOptions) {
|
||||
var labels = scale.chart.data.labels;
|
||||
var minIndex = scale.min;
|
||||
var lastLabelIndex = labels.length - 1;
|
||||
var maxIndex = scale.max;
|
||||
var sensitivity = zoomOptions.sensitivity;
|
||||
var chartCenter = scale.isHorizontal() ? scale.left + (scale.width / 2) : scale.top + (scale.height / 2);
|
||||
var centerPointer = scale.isHorizontal() ? center.x : center.y;
|
||||
|
||||
zoomNS.zoomCumulativeDelta = zoom > 1 ? zoomNS.zoomCumulativeDelta + 1 : zoomNS.zoomCumulativeDelta - 1;
|
||||
|
||||
if (Math.abs(zoomNS.zoomCumulativeDelta) > sensitivity) {
|
||||
if (zoomNS.zoomCumulativeDelta < 0) {
|
||||
if (centerPointer >= chartCenter) {
|
||||
if (minIndex <= 0) {
|
||||
maxIndex = Math.min(lastLabelIndex, maxIndex + 1);
|
||||
} else {
|
||||
minIndex = Math.max(0, minIndex - 1);
|
||||
}
|
||||
} else if (centerPointer < chartCenter) {
|
||||
if (maxIndex >= lastLabelIndex) {
|
||||
minIndex = Math.max(0, minIndex - 1);
|
||||
} else {
|
||||
maxIndex = Math.min(lastLabelIndex, maxIndex + 1);
|
||||
}
|
||||
}
|
||||
zoomNS.zoomCumulativeDelta = 0;
|
||||
} else if (zoomNS.zoomCumulativeDelta > 0) {
|
||||
if (centerPointer >= chartCenter) {
|
||||
minIndex = minIndex < maxIndex ? minIndex = Math.min(maxIndex, minIndex + 1) : minIndex;
|
||||
} else if (centerPointer < chartCenter) {
|
||||
maxIndex = maxIndex > minIndex ? maxIndex = Math.max(minIndex, maxIndex - 1) : maxIndex;
|
||||
}
|
||||
zoomNS.zoomCumulativeDelta = 0;
|
||||
}
|
||||
scale.options.min = rangeMinLimiter(zoomOptions, labels[minIndex]);
|
||||
scale.options.max = rangeMaxLimiter(zoomOptions, labels[maxIndex]);
|
||||
}
|
||||
}
|
||||
|
||||
function zoomNumericalScale(scale, zoom, center, zoomOptions) {
|
||||
var range = scale.max - scale.min;
|
||||
var newDiff = range * (zoom - 1);
|
||||
|
||||
var centerPoint = scale.isHorizontal() ? center.x : center.y;
|
||||
var minPercent = (scale.getValueForPixel(centerPoint) - scale.min) / range;
|
||||
var maxPercent = 1 - minPercent;
|
||||
|
||||
var minDelta = newDiff * minPercent;
|
||||
var maxDelta = newDiff * maxPercent;
|
||||
|
||||
console.log("SCOPT", scale.options)
|
||||
scale.options.min = rangeMinLimiter(zoomOptions, scale.min + minDelta);
|
||||
scale.options.max = rangeMaxLimiter(zoomOptions, scale.max - maxDelta);
|
||||
}
|
||||
|
||||
function zoomScale(scale, zoom, center, zoomOptions) {
|
||||
var fn = zoomFunctions[scale.type];
|
||||
if (fn) {
|
||||
fn(scale, zoom, center, zoomOptions);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param chart The chart instance
|
||||
* @param {number} percentZoomX The zoom percentage in the x direction
|
||||
* @param {number} percentZoomY The zoom percentage in the y direction
|
||||
* @param {{x: number, y: number}} focalPoint The x and y coordinates of zoom focal point. The point which doesn't change while zooming. E.g. the location of the mouse cursor when "drag: false"
|
||||
* @param {string} whichAxes `xy`, 'x', or 'y'
|
||||
* @param {number} animationDuration Duration of the animation of the redraw in milliseconds
|
||||
*/
|
||||
function doZoom(chart, percentZoomX, percentZoomY, focalPoint, whichAxes, animationDuration) {
|
||||
var ca = chart.chartArea;
|
||||
if (!focalPoint) {
|
||||
focalPoint = {
|
||||
x: (ca.left + ca.right) / 2,
|
||||
y: (ca.top + ca.bottom) / 2,
|
||||
};
|
||||
}
|
||||
|
||||
var zoomOptions = chart.$zoom._options.zoom;
|
||||
|
||||
if (zoomOptions.enabled) {
|
||||
storeOriginalOptions(chart);
|
||||
// Do the zoom here
|
||||
var zoomMode = typeof zoomOptions.mode === 'function' ? zoomOptions.mode({chart: chart}) : zoomOptions.mode;
|
||||
|
||||
// Which axe should be modified when figers were used.
|
||||
var _whichAxes;
|
||||
if (zoomMode === 'xy' && whichAxes !== undefined) {
|
||||
// based on fingers positions
|
||||
_whichAxes = whichAxes;
|
||||
} else {
|
||||
// no effect
|
||||
_whichAxes = 'xy';
|
||||
}
|
||||
|
||||
helpers.each(chart.scales, function(scale) {
|
||||
if (scale.isHorizontal() && directionEnabled(zoomMode, 'x', chart) && directionEnabled(_whichAxes, 'x', chart)) {
|
||||
zoomOptions.scaleAxes = 'x';
|
||||
zoomScale(scale, percentZoomX, focalPoint, zoomOptions);
|
||||
} else if (!scale.isHorizontal() && directionEnabled(zoomMode, 'y', chart) && directionEnabled(_whichAxes, 'y', chart)) {
|
||||
// Do Y zoom
|
||||
zoomOptions.scaleAxes = 'y';
|
||||
zoomScale(scale, percentZoomY, focalPoint, zoomOptions);
|
||||
}
|
||||
});
|
||||
|
||||
if (animationDuration) {
|
||||
// needs to create specific animation mode
|
||||
if (!chart.options.animation.zoom) {
|
||||
chart.options.animation.zoom = {
|
||||
duration: animationDuration,
|
||||
easing: 'easeOutQuad',
|
||||
};
|
||||
}
|
||||
chart.update('zoom');
|
||||
} else {
|
||||
chart.update('none');
|
||||
}
|
||||
|
||||
if (typeof zoomOptions.onZoom === 'function') {
|
||||
zoomOptions.onZoom({chart: chart});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function panCategoryScale(scale, delta, panOptions) {
|
||||
var labels = scale.chart.data.labels;
|
||||
var lastLabelIndex = labels.length - 1;
|
||||
var offsetAmt = Math.max(scale.ticks.length, 1);
|
||||
var panSpeed = panOptions.speed;
|
||||
var minIndex = scale.min;
|
||||
var step = Math.round(scale.width / (offsetAmt * panSpeed));
|
||||
var maxIndex;
|
||||
|
||||
zoomNS.panCumulativeDelta += delta;
|
||||
|
||||
minIndex = zoomNS.panCumulativeDelta > step ? Math.max(0, minIndex - 1) : zoomNS.panCumulativeDelta < -step ? Math.min(lastLabelIndex - offsetAmt + 1, minIndex + 1) : minIndex;
|
||||
zoomNS.panCumulativeDelta = minIndex !== scale.min ? 0 : zoomNS.panCumulativeDelta;
|
||||
|
||||
maxIndex = Math.min(lastLabelIndex, minIndex + offsetAmt - 1);
|
||||
|
||||
scale.options.min = rangeMinLimiter(panOptions, labels[minIndex]);
|
||||
scale.options.max = rangeMaxLimiter(panOptions, labels[maxIndex]);
|
||||
}
|
||||
|
||||
function panNumericalScale(scale, delta, panOptions) {
|
||||
var scaleOpts = scale.options;
|
||||
var prevStart = scale.min;
|
||||
var prevEnd = scale.max;
|
||||
var newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart) - delta);
|
||||
var newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd) - delta);
|
||||
var rangeMin = newMin;
|
||||
var rangeMax = newMax;
|
||||
var diff;
|
||||
|
||||
if (panOptions.scaleAxes && panOptions.rangeMin &&
|
||||
!helpers.isNullOrUndef(panOptions.rangeMin[panOptions.scaleAxes])) {
|
||||
rangeMin = panOptions.rangeMin[panOptions.scaleAxes];
|
||||
}
|
||||
if (panOptions.scaleAxes && panOptions.rangeMax &&
|
||||
!helpers.isNullOrUndef(panOptions.rangeMax[panOptions.scaleAxes])) {
|
||||
rangeMax = panOptions.rangeMax[panOptions.scaleAxes];
|
||||
}
|
||||
|
||||
console.log("SCOPT pan", scaleOpts);
|
||||
|
||||
if (newMin >= rangeMin && newMax <= rangeMax) {
|
||||
scaleOpts.min = newMin;
|
||||
scaleOpts.max = newMax;
|
||||
} else if (newMin < rangeMin) {
|
||||
diff = prevStart - rangeMin;
|
||||
scaleOpts.min = rangeMin;
|
||||
scaleOpts.max = prevEnd - diff;
|
||||
} else if (newMax > rangeMax) {
|
||||
diff = rangeMax - prevEnd;
|
||||
scaleOpts.max = rangeMax;
|
||||
scaleOpts.min = prevStart + diff;
|
||||
}
|
||||
}
|
||||
|
||||
function panScale(scale, delta, panOptions) {
|
||||
var fn = panFunctions[scale.type];
|
||||
if (fn) {
|
||||
fn(scale, delta, panOptions);
|
||||
}
|
||||
}
|
||||
|
||||
function doPan(chartInstance, deltaX, deltaY) {
|
||||
storeOriginalOptions(chartInstance);
|
||||
var panOptions = chartInstance.$zoom._options.pan;
|
||||
if (panOptions.enabled) {
|
||||
var panMode = typeof panOptions.mode === 'function' ? panOptions.mode({chart: chartInstance}) : panOptions.mode;
|
||||
|
||||
helpers.each(chartInstance.scales, function(scale) {
|
||||
if (scale.isHorizontal() && directionEnabled(panMode, 'x', chartInstance) && deltaX !== 0) {
|
||||
panOptions.scaleAxes = 'x';
|
||||
panScale(scale, deltaX, panOptions);
|
||||
} else if (!scale.isHorizontal() && directionEnabled(panMode, 'y', chartInstance) && deltaY !== 0) {
|
||||
panOptions.scaleAxes = 'y';
|
||||
panScale(scale, deltaY, panOptions);
|
||||
}
|
||||
});
|
||||
|
||||
chartInstance.update('none');
|
||||
|
||||
if (typeof panOptions.onPan === 'function') {
|
||||
panOptions.onPan({chart: chartInstance});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getXAxis(chartInstance) {
|
||||
var scales = chartInstance.scales;
|
||||
var scaleIds = Object.keys(scales);
|
||||
for (var i = 0; i < scaleIds.length; i++) {
|
||||
var scale = scales[scaleIds[i]];
|
||||
|
||||
if (scale.isHorizontal()) {
|
||||
return scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getYAxis(chartInstance) {
|
||||
var scales = chartInstance.scales;
|
||||
var scaleIds = Object.keys(scales);
|
||||
for (var i = 0; i < scaleIds.length; i++) {
|
||||
var scale = scales[scaleIds[i]];
|
||||
|
||||
if (!scale.isHorizontal()) {
|
||||
return scale;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Store these for later
|
||||
zoomNS.zoomFunctions.category = zoomCategoryScale;
|
||||
zoomNS.zoomFunctions.time = zoomNumericalScale;
|
||||
zoomNS.zoomFunctions.linear = zoomNumericalScale;
|
||||
zoomNS.zoomFunctions.logarithmic = zoomNumericalScale;
|
||||
zoomNS.panFunctions.category = panCategoryScale;
|
||||
zoomNS.panFunctions.time = panNumericalScale;
|
||||
zoomNS.panFunctions.linear = panNumericalScale;
|
||||
zoomNS.panFunctions.logarithmic = panNumericalScale;
|
||||
// Globals for category pan and zoom
|
||||
zoomNS.panCumulativeDelta = 0;
|
||||
zoomNS.zoomCumulativeDelta = 0;
|
||||
|
||||
// Chartjs Zoom Plugin
|
||||
var zoomPlugin = {
|
||||
id: 'zoom',
|
||||
|
||||
defaults: {
|
||||
pan: {
|
||||
enabled: false,
|
||||
mode: 'xy',
|
||||
speed: 20,
|
||||
threshold: 10
|
||||
},
|
||||
zoom: {
|
||||
enabled: false,
|
||||
mode: 'xy',
|
||||
sensitivity: 3,
|
||||
speed: 0.1
|
||||
}
|
||||
},
|
||||
|
||||
afterInit: function(chartInstance) {
|
||||
|
||||
chartInstance.resetZoom = function() {
|
||||
storeOriginalOptions(chartInstance);
|
||||
var originalOptions = chartInstance.$zoom._originalOptions;
|
||||
helpers.each(chartInstance.scales, function(scale) {
|
||||
|
||||
var options = scale.options;
|
||||
if (originalOptions[scale.id]) {
|
||||
options.min = originalOptions[scale.id].min;
|
||||
options.max = originalOptions[scale.id].max;
|
||||
} else {
|
||||
delete options.min;
|
||||
delete options.max;
|
||||
}
|
||||
});
|
||||
chartInstance.update();
|
||||
};
|
||||
|
||||
},
|
||||
|
||||
beforeUpdate: function(chart, args, options) {
|
||||
resolveOptions(chart, options);
|
||||
},
|
||||
|
||||
beforeInit: function(chartInstance, pluginOptions) {
|
||||
chartInstance.$zoom = {
|
||||
_originalOptions: {}
|
||||
};
|
||||
var node = chartInstance.$zoom._node = chartInstance.ctx.canvas;
|
||||
resolveOptions(chartInstance, pluginOptions);
|
||||
|
||||
var options = chartInstance.$zoom._options;
|
||||
var panThreshold = options.pan && options.pan.threshold;
|
||||
|
||||
chartInstance.$zoom._mouseDownHandler = function(event) {
|
||||
node.addEventListener('mousemove', chartInstance.$zoom._mouseMoveHandler);
|
||||
chartInstance.$zoom._dragZoomStart = event;
|
||||
};
|
||||
|
||||
chartInstance.$zoom._mouseMoveHandler = function(event) {
|
||||
if (chartInstance.$zoom._dragZoomStart) {
|
||||
chartInstance.$zoom._dragZoomEnd = event;
|
||||
chartInstance.update('none');
|
||||
}
|
||||
};
|
||||
|
||||
chartInstance.$zoom._mouseUpHandler = function(event) {
|
||||
if (!chartInstance.$zoom._dragZoomStart) {
|
||||
return;
|
||||
}
|
||||
|
||||
node.removeEventListener('mousemove', chartInstance.$zoom._mouseMoveHandler);
|
||||
|
||||
var beginPoint = chartInstance.$zoom._dragZoomStart;
|
||||
|
||||
var offsetX = beginPoint.target.getBoundingClientRect().left;
|
||||
var startX = Math.min(beginPoint.clientX, event.clientX) - offsetX;
|
||||
var endX = Math.max(beginPoint.clientX, event.clientX) - offsetX;
|
||||
|
||||
var offsetY = beginPoint.target.getBoundingClientRect().top;
|
||||
var startY = Math.min(beginPoint.clientY, event.clientY) - offsetY;
|
||||
var endY = Math.max(beginPoint.clientY, event.clientY) - offsetY;
|
||||
|
||||
var dragDistanceX = endX - startX;
|
||||
var dragDistanceY = endY - startY;
|
||||
|
||||
// Remove drag start and end before chart update to stop drawing selected area
|
||||
chartInstance.$zoom._dragZoomStart = null;
|
||||
chartInstance.$zoom._dragZoomEnd = null;
|
||||
|
||||
var zoomThreshold = (options.zoom && options.zoom.threshold) || 0;
|
||||
if (dragDistanceX <= zoomThreshold && dragDistanceY <= zoomThreshold) {
|
||||
return;
|
||||
}
|
||||
|
||||
var chartArea = chartInstance.chartArea;
|
||||
|
||||
var zoomOptions = chartInstance.$zoom._options.zoom;
|
||||
var chartDistanceX = chartArea.right - chartArea.left;
|
||||
var xEnabled = directionEnabled(zoomOptions.mode, 'x', chartInstance);
|
||||
var zoomX = xEnabled && dragDistanceX ? 1 + ((chartDistanceX - dragDistanceX) / chartDistanceX) : 1;
|
||||
|
||||
var chartDistanceY = chartArea.bottom - chartArea.top;
|
||||
var yEnabled = directionEnabled(zoomOptions.mode, 'y', chartInstance);
|
||||
var zoomY = yEnabled && dragDistanceY ? 1 + ((chartDistanceY - dragDistanceY) / chartDistanceY) : 1;
|
||||
|
||||
doZoom(chartInstance, zoomX, zoomY, {
|
||||
x: (startX - chartArea.left) / (1 - dragDistanceX / chartDistanceX) + chartArea.left,
|
||||
y: (startY - chartArea.top) / (1 - dragDistanceY / chartDistanceY) + chartArea.top
|
||||
}, undefined, zoomOptions.drag.animationDuration);
|
||||
|
||||
if (typeof zoomOptions.onZoomComplete === 'function') {
|
||||
zoomOptions.onZoomComplete({chart: chartInstance});
|
||||
}
|
||||
};
|
||||
|
||||
var _scrollTimeout = null;
|
||||
chartInstance.$zoom._wheelHandler = function(event) {
|
||||
// Prevent the event from triggering the default behavior (eg. Content scrolling).
|
||||
if (event.cancelable) {
|
||||
event.preventDefault();
|
||||
}
|
||||
|
||||
// Firefox always fires the wheel event twice:
|
||||
// First without the delta and right after that once with the delta properties.
|
||||
if (typeof event.deltaY === 'undefined') {
|
||||
return;
|
||||
}
|
||||
|
||||
var rect = event.target.getBoundingClientRect();
|
||||
var offsetX = event.clientX - rect.left;
|
||||
var offsetY = event.clientY - rect.top;
|
||||
|
||||
var center = {
|
||||
x: offsetX,
|
||||
y: offsetY
|
||||
};
|
||||
|
||||
var zoomOptions = chartInstance.$zoom._options.zoom;
|
||||
var speedPercent = zoomOptions.speed;
|
||||
|
||||
if (event.deltaY >= 0) {
|
||||
speedPercent = -speedPercent;
|
||||
}
|
||||
doZoom(chartInstance, 1 + speedPercent, 1 + speedPercent, center);
|
||||
|
||||
clearTimeout(_scrollTimeout);
|
||||
_scrollTimeout = setTimeout(function() {
|
||||
if (typeof zoomOptions.onZoomComplete === 'function') {
|
||||
zoomOptions.onZoomComplete({chart: chartInstance});
|
||||
}
|
||||
}, 250);
|
||||
};
|
||||
|
||||
if (Hammer) {
|
||||
var mc = new Hammer.Manager(node);
|
||||
mc.add(new Hammer.Pinch());
|
||||
mc.add(new Hammer.Pan({
|
||||
threshold: panThreshold
|
||||
}));
|
||||
|
||||
// Hammer reports the total scaling. We need the incremental amount
|
||||
var currentPinchScaling;
|
||||
var handlePinch = function(e) {
|
||||
var diff = 1 / (currentPinchScaling) * e.scale;
|
||||
var rect = e.target.getBoundingClientRect();
|
||||
var offsetX = e.center.x - rect.left;
|
||||
var offsetY = e.center.y - rect.top;
|
||||
var center = {
|
||||
x: offsetX,
|
||||
y: offsetY
|
||||
};
|
||||
|
||||
// fingers position difference
|
||||
var x = Math.abs(e.pointers[0].clientX - e.pointers[1].clientX);
|
||||
var y = Math.abs(e.pointers[0].clientY - e.pointers[1].clientY);
|
||||
|
||||
// diagonal fingers will change both (xy) axes
|
||||
var p = x / y;
|
||||
var xy;
|
||||
if (p > 0.3 && p < 1.7) {
|
||||
xy = 'xy';
|
||||
} else if (x > y) {
|
||||
xy = 'x'; // x axis
|
||||
} else {
|
||||
xy = 'y'; // y axis
|
||||
}
|
||||
|
||||
doZoom(chartInstance, diff, diff, center, xy);
|
||||
|
||||
var zoomOptions = chartInstance.$zoom._options.zoom;
|
||||
if (typeof zoomOptions.onZoomComplete === 'function') {
|
||||
zoomOptions.onZoomComplete({chart: chartInstance});
|
||||
}
|
||||
|
||||
// Keep track of overall scale
|
||||
currentPinchScaling = e.scale;
|
||||
};
|
||||
|
||||
mc.on('pinchstart', function() {
|
||||
currentPinchScaling = 1; // reset tracker
|
||||
});
|
||||
mc.on('pinch', handlePinch);
|
||||
mc.on('pinchend', function(e) {
|
||||
handlePinch(e);
|
||||
currentPinchScaling = null; // reset
|
||||
zoomNS.zoomCumulativeDelta = 0;
|
||||
});
|
||||
|
||||
var currentDeltaX = null;
|
||||
var currentDeltaY = null;
|
||||
var panning = false;
|
||||
var handlePan = function(e) {
|
||||
if (currentDeltaX !== null && currentDeltaY !== null) {
|
||||
panning = true;
|
||||
var deltaX = e.deltaX - currentDeltaX;
|
||||
var deltaY = e.deltaY - currentDeltaY;
|
||||
currentDeltaX = e.deltaX;
|
||||
currentDeltaY = e.deltaY;
|
||||
doPan(chartInstance, deltaX, deltaY);
|
||||
}
|
||||
};
|
||||
|
||||
mc.on('panstart', function(e) {
|
||||
currentDeltaX = 0;
|
||||
currentDeltaY = 0;
|
||||
handlePan(e);
|
||||
});
|
||||
mc.on('panmove', handlePan);
|
||||
mc.on('panend', function() {
|
||||
currentDeltaX = null;
|
||||
currentDeltaY = null;
|
||||
zoomNS.panCumulativeDelta = 0;
|
||||
setTimeout(function() {
|
||||
panning = false;
|
||||
}, 500);
|
||||
|
||||
var panOptions = chartInstance.$zoom._options.pan;
|
||||
if (typeof panOptions.onPanComplete === 'function') {
|
||||
panOptions.onPanComplete({chart: chartInstance});
|
||||
}
|
||||
});
|
||||
|
||||
chartInstance.$zoom._ghostClickHandler = function(e) {
|
||||
if (panning && e.cancelable) {
|
||||
e.stopImmediatePropagation();
|
||||
e.preventDefault();
|
||||
}
|
||||
};
|
||||
node.addEventListener('click', chartInstance.$zoom._ghostClickHandler);
|
||||
|
||||
chartInstance._mc = mc;
|
||||
}
|
||||
},
|
||||
|
||||
beforeDatasetsDraw: function(chartInstance) {
|
||||
var ctx = chartInstance.ctx;
|
||||
|
||||
if (chartInstance.$zoom._dragZoomEnd) {
|
||||
var xAxis = getXAxis(chartInstance);
|
||||
var yAxis = getYAxis(chartInstance);
|
||||
var beginPoint = chartInstance.$zoom._dragZoomStart;
|
||||
var endPoint = chartInstance.$zoom._dragZoomEnd;
|
||||
|
||||
var startX = xAxis.left;
|
||||
var endX = xAxis.right;
|
||||
var startY = yAxis.top;
|
||||
var endY = yAxis.bottom;
|
||||
|
||||
if (directionEnabled(chartInstance.$zoom._options.zoom.mode, 'x', chartInstance)) {
|
||||
var offsetX = beginPoint.target.getBoundingClientRect().left;
|
||||
startX = Math.min(beginPoint.clientX, endPoint.clientX) - offsetX;
|
||||
endX = Math.max(beginPoint.clientX, endPoint.clientX) - offsetX;
|
||||
}
|
||||
|
||||
if (directionEnabled(chartInstance.$zoom._options.zoom.mode, 'y', chartInstance)) {
|
||||
var offsetY = beginPoint.target.getBoundingClientRect().top;
|
||||
startY = Math.min(beginPoint.clientY, endPoint.clientY) - offsetY;
|
||||
endY = Math.max(beginPoint.clientY, endPoint.clientY) - offsetY;
|
||||
}
|
||||
|
||||
var rectWidth = endX - startX;
|
||||
var rectHeight = endY - startY;
|
||||
var dragOptions = chartInstance.$zoom._options.zoom.drag;
|
||||
|
||||
ctx.save();
|
||||
ctx.beginPath();
|
||||
ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)';
|
||||
ctx.fillRect(startX, startY, rectWidth, rectHeight);
|
||||
|
||||
if (dragOptions.borderWidth > 0) {
|
||||
ctx.lineWidth = dragOptions.borderWidth;
|
||||
ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)';
|
||||
ctx.strokeRect(startX, startY, rectWidth, rectHeight);
|
||||
}
|
||||
ctx.restore();
|
||||
}
|
||||
},
|
||||
|
||||
destroy: function(chartInstance) {
|
||||
if (!chartInstance.$zoom) {
|
||||
return;
|
||||
}
|
||||
var props = chartInstance.$zoom;
|
||||
var node = props._node;
|
||||
|
||||
node.removeEventListener('mousedown', props._mouseDownHandler);
|
||||
node.removeEventListener('mousemove', props._mouseMoveHandler);
|
||||
node.ownerDocument.removeEventListener('mouseup', props._mouseUpHandler);
|
||||
node.removeEventListener('wheel', props._wheelHandler);
|
||||
node.removeEventListener('click', props._ghostClickHandler);
|
||||
|
||||
delete chartInstance.$zoom;
|
||||
|
||||
var mc = chartInstance._mc;
|
||||
if (mc) {
|
||||
mc.remove('pinchstart');
|
||||
mc.remove('pinch');
|
||||
mc.remove('pinchend');
|
||||
mc.remove('panstart');
|
||||
mc.remove('pan');
|
||||
mc.remove('panend');
|
||||
mc.destroy();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Chart.register(zoomPlugin);
|
||||
export default zoomPlugin;
|
20
client/externalFiles/chartjs-zoom ticks.js
Normal file
20
client/externalFiles/chartjs-zoom ticks.js
Normal file
File diff suppressed because one or more lines are too long
20
client/externalFiles/chartjs-zoom.js
Normal file
20
client/externalFiles/chartjs-zoom.js
Normal file
File diff suppressed because one or more lines are too long
20
client/externalFiles/chartjs-zoom_orig.js
Normal file
20
client/externalFiles/chartjs-zoom_orig.js
Normal file
File diff suppressed because one or more lines are too long
8
client/externalFiles/d3.min.js
vendored
Normal file
8
client/externalFiles/d3.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
541
client/externalFiles/eventsource.js
Normal file
541
client/externalFiles/eventsource.js
Normal file
@ -0,0 +1,541 @@
|
||||
/** @license
|
||||
* eventsource.js
|
||||
* Available under MIT License (MIT)
|
||||
* https://github.com/Yaffle/EventSource/
|
||||
*/
|
||||
|
||||
/*jslint indent: 2, vars: true, plusplus: true */
|
||||
/*global setTimeout, clearTimeout */
|
||||
|
||||
(function (global) {
|
||||
"use strict";
|
||||
|
||||
var setTimeout = global.setTimeout;
|
||||
var clearTimeout = global.clearTimeout;
|
||||
|
||||
function Map() {
|
||||
this.data = {};
|
||||
}
|
||||
|
||||
Map.prototype.get = function (key) {
|
||||
return this.data[key + "~"];
|
||||
};
|
||||
Map.prototype.set = function (key, value) {
|
||||
this.data[key + "~"] = value;
|
||||
};
|
||||
Map.prototype["delete"] = function (key) {
|
||||
delete this.data[key + "~"];
|
||||
};
|
||||
|
||||
function EventTarget() {
|
||||
this.listeners = new Map();
|
||||
}
|
||||
|
||||
function throwError(e) {
|
||||
setTimeout(function () {
|
||||
throw e;
|
||||
}, 0);
|
||||
}
|
||||
|
||||
EventTarget.prototype.dispatchEvent = function (event) {
|
||||
event.target = this;
|
||||
var type = event.type.toString();
|
||||
var listeners = this.listeners;
|
||||
var typeListeners = listeners.get(type);
|
||||
if (typeListeners == undefined) {
|
||||
return;
|
||||
}
|
||||
var length = typeListeners.length;
|
||||
var i = -1;
|
||||
var listener = undefined;
|
||||
while (++i < length) {
|
||||
listener = typeListeners[i];
|
||||
try {
|
||||
listener.call(this, event);
|
||||
} catch (e) {
|
||||
throwError(e);
|
||||
}
|
||||
}
|
||||
};
|
||||
EventTarget.prototype.addEventListener = function (type, callback) {
|
||||
type = type.toString();
|
||||
var listeners = this.listeners;
|
||||
var typeListeners = listeners.get(type);
|
||||
if (typeListeners == undefined) {
|
||||
typeListeners = [];
|
||||
listeners.set(type, typeListeners);
|
||||
}
|
||||
var i = typeListeners.length;
|
||||
while (--i >= 0) {
|
||||
if (typeListeners[i] === callback) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
typeListeners.push(callback);
|
||||
};
|
||||
EventTarget.prototype.removeEventListener = function (type, callback) {
|
||||
type = type.toString();
|
||||
var listeners = this.listeners;
|
||||
var typeListeners = listeners.get(type);
|
||||
if (typeListeners == undefined) {
|
||||
return;
|
||||
}
|
||||
var length = typeListeners.length;
|
||||
var filtered = [];
|
||||
var i = -1;
|
||||
while (++i < length) {
|
||||
if (typeListeners[i] !== callback) {
|
||||
filtered.push(typeListeners[i]);
|
||||
}
|
||||
}
|
||||
if (filtered.length === 0) {
|
||||
listeners["delete"](type);
|
||||
} else {
|
||||
listeners.set(type, filtered);
|
||||
}
|
||||
};
|
||||
|
||||
function Event(type) {
|
||||
this.type = type;
|
||||
this.target = undefined;
|
||||
}
|
||||
|
||||
function MessageEvent(type, options) {
|
||||
Event.call(this, type);
|
||||
this.data = options.data;
|
||||
this.lastEventId = options.lastEventId;
|
||||
}
|
||||
|
||||
MessageEvent.prototype = Event.prototype;
|
||||
|
||||
var XHR = global.XMLHttpRequest;
|
||||
var XDR = global.XDomainRequest;
|
||||
var isCORSSupported = XHR != undefined && (new XHR()).withCredentials != undefined;
|
||||
var Transport = isCORSSupported || (XHR != undefined && XDR == undefined) ? XHR : XDR;
|
||||
|
||||
var WAITING = -1;
|
||||
var CONNECTING = 0;
|
||||
var OPEN = 1;
|
||||
var CLOSED = 2;
|
||||
var AFTER_CR = 3;
|
||||
var FIELD_START = 4;
|
||||
var FIELD = 5;
|
||||
var VALUE_START = 6;
|
||||
var VALUE = 7;
|
||||
var contentTypeRegExp = /^text\/event\-stream;?(\s*charset\=utf\-8)?$/i;
|
||||
|
||||
var MINIMUM_DURATION = 1000;
|
||||
var MAXIMUM_DURATION = 18000000;
|
||||
|
||||
function getDuration(value, def) {
|
||||
var n = value;
|
||||
if (n !== n) {
|
||||
n = def;
|
||||
}
|
||||
return (n < MINIMUM_DURATION ? MINIMUM_DURATION : (n > MAXIMUM_DURATION ? MAXIMUM_DURATION : n));
|
||||
}
|
||||
|
||||
function fire(that, f, event) {
|
||||
try {
|
||||
if (typeof f === "function") {
|
||||
f.call(that, event);
|
||||
}
|
||||
} catch (e) {
|
||||
throwError(e);
|
||||
}
|
||||
}
|
||||
|
||||
function EventSource(url, options) {
|
||||
url = url.toString();
|
||||
|
||||
var withCredentials = isCORSSupported && options != undefined && Boolean(options.withCredentials);
|
||||
var initialRetry = getDuration(1000, 0);
|
||||
var heartbeatTimeout = getDuration(45000, 0);
|
||||
|
||||
var lastEventId = "";
|
||||
var that = this;
|
||||
var retry = initialRetry;
|
||||
var wasActivity = false;
|
||||
var CurrentTransport = options != undefined && options.Transport != undefined ? options.Transport : Transport;
|
||||
var xhr = new CurrentTransport();
|
||||
var timeout = 0;
|
||||
var timeout0 = 0;
|
||||
var charOffset = 0;
|
||||
var currentState = WAITING;
|
||||
var dataBuffer = [];
|
||||
var lastEventIdBuffer = "";
|
||||
var eventTypeBuffer = "";
|
||||
var onTimeout = undefined;
|
||||
|
||||
var state = FIELD_START;
|
||||
var field = "";
|
||||
var value = "";
|
||||
|
||||
function close() {
|
||||
currentState = CLOSED;
|
||||
if (xhr != undefined) {
|
||||
xhr.abort();
|
||||
xhr = undefined;
|
||||
}
|
||||
if (timeout !== 0) {
|
||||
clearTimeout(timeout);
|
||||
timeout = 0;
|
||||
}
|
||||
if (timeout0 !== 0) {
|
||||
clearTimeout(timeout0);
|
||||
timeout0 = 0;
|
||||
}
|
||||
that.readyState = CLOSED;
|
||||
}
|
||||
|
||||
function onEvent(type) {
|
||||
var responseText = "";
|
||||
if (currentState === OPEN || currentState === CONNECTING) {
|
||||
try {
|
||||
responseText = xhr.responseText;
|
||||
} catch (error) {
|
||||
// IE 8 - 9 with XMLHttpRequest
|
||||
}
|
||||
}
|
||||
var event = undefined;
|
||||
var isWrongStatusCodeOrContentType = false;
|
||||
|
||||
if (currentState === CONNECTING) {
|
||||
var status = 0;
|
||||
var statusText = "";
|
||||
var contentType = undefined;
|
||||
if (!("contentType" in xhr)) {
|
||||
try {
|
||||
status = xhr.status;
|
||||
statusText = xhr.statusText;
|
||||
contentType = xhr.getResponseHeader("Content-Type");
|
||||
} catch (error) {
|
||||
// https://bugs.webkit.org/show_bug.cgi?id=29121
|
||||
status = 0;
|
||||
statusText = "";
|
||||
contentType = undefined;
|
||||
// FF < 14, WebKit
|
||||
// https://bugs.webkit.org/show_bug.cgi?id=29658
|
||||
// https://bugs.webkit.org/show_bug.cgi?id=77854
|
||||
}
|
||||
} else if (type !== "" && type !== "error") {
|
||||
status = 200;
|
||||
statusText = "OK";
|
||||
contentType = xhr.contentType;
|
||||
}
|
||||
if (contentType == undefined) {
|
||||
contentType = "";
|
||||
}
|
||||
if (status === 0 && statusText === "" && type === "load" && responseText !== "") {
|
||||
status = 200;
|
||||
statusText = "OK";
|
||||
if (contentType === "") { // Opera 12
|
||||
var tmp = (/^data\:([^,]*?)(?:;base64)?,[\S]*$/).exec(url);
|
||||
if (tmp != undefined) {
|
||||
contentType = tmp[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
if (status === 200 && contentTypeRegExp.test(contentType)) {
|
||||
currentState = OPEN;
|
||||
wasActivity = true;
|
||||
retry = initialRetry;
|
||||
that.readyState = OPEN;
|
||||
event = new Event("open");
|
||||
that.dispatchEvent(event);
|
||||
fire(that, that.onopen, event);
|
||||
if (currentState === CLOSED) {
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
// Opera 12
|
||||
if (status !== 0 && (status !== 200 || contentType !== "")) {
|
||||
var message = "";
|
||||
if (status !== 200) {
|
||||
message = "EventSource's response has a status " + status + " " + statusText.replace(/\s+/g, " ") + " that is not 200. Aborting the connection.";
|
||||
} else {
|
||||
message = "EventSource's response has a Content-Type specifying an unsupported type: " + contentType.replace(/\s+/g, " ") + ". Aborting the connection.";
|
||||
}
|
||||
setTimeout(function () {
|
||||
throw new Error(message);
|
||||
}, 0);
|
||||
isWrongStatusCodeOrContentType = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (currentState === OPEN) {
|
||||
if (responseText.length > charOffset) {
|
||||
wasActivity = true;
|
||||
}
|
||||
var i = charOffset - 1;
|
||||
var length = responseText.length;
|
||||
var c = "\n";
|
||||
while (++i < length) {
|
||||
c = responseText.charAt(i);
|
||||
if (state === AFTER_CR && c === "\n") {
|
||||
state = FIELD_START;
|
||||
} else {
|
||||
if (state === AFTER_CR) {
|
||||
state = FIELD_START;
|
||||
}
|
||||
if (c === "\r" || c === "\n") {
|
||||
if (field === "data") {
|
||||
dataBuffer.push(value);
|
||||
} else if (field === "id") {
|
||||
lastEventIdBuffer = value;
|
||||
} else if (field === "event") {
|
||||
eventTypeBuffer = value;
|
||||
} else if (field === "retry") {
|
||||
initialRetry = getDuration(Number(value), initialRetry);
|
||||
retry = initialRetry;
|
||||
} else if (field === "heartbeatTimeout") {
|
||||
heartbeatTimeout = getDuration(Number(value), heartbeatTimeout);
|
||||
if (timeout !== 0) {
|
||||
clearTimeout(timeout);
|
||||
timeout = setTimeout(onTimeout, heartbeatTimeout);
|
||||
}
|
||||
}
|
||||
value = "";
|
||||
field = "";
|
||||
if (state === FIELD_START) {
|
||||
if (dataBuffer.length !== 0) {
|
||||
lastEventId = lastEventIdBuffer;
|
||||
if (eventTypeBuffer === "") {
|
||||
eventTypeBuffer = "message";
|
||||
}
|
||||
event = new MessageEvent(eventTypeBuffer, {
|
||||
data: dataBuffer.join("\n"),
|
||||
lastEventId: lastEventIdBuffer
|
||||
});
|
||||
that.dispatchEvent(event);
|
||||
if (eventTypeBuffer === "message") {
|
||||
fire(that, that.onmessage, event);
|
||||
}
|
||||
if (currentState === CLOSED) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
dataBuffer.length = 0;
|
||||
eventTypeBuffer = "";
|
||||
}
|
||||
state = c === "\r" ? AFTER_CR : FIELD_START;
|
||||
} else {
|
||||
if (state === FIELD_START) {
|
||||
state = FIELD;
|
||||
}
|
||||
if (state === FIELD) {
|
||||
if (c === ":") {
|
||||
state = VALUE_START;
|
||||
} else {
|
||||
field += c;
|
||||
}
|
||||
} else if (state === VALUE_START) {
|
||||
if (c !== " ") {
|
||||
value += c;
|
||||
}
|
||||
state = VALUE;
|
||||
} else if (state === VALUE) {
|
||||
value += c;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
charOffset = length;
|
||||
}
|
||||
|
||||
if ((currentState === OPEN || currentState === CONNECTING) &&
|
||||
(type === "load" || type === "error" || isWrongStatusCodeOrContentType || (charOffset > 1024 * 1024) || (timeout === 0 && !wasActivity))) {
|
||||
if (isWrongStatusCodeOrContentType) {
|
||||
close();
|
||||
} else {
|
||||
if (type === "" && timeout === 0 && !wasActivity) {
|
||||
setTimeout(function () {
|
||||
throw new Error("No activity within " + heartbeatTimeout + " milliseconds. Reconnecting.");
|
||||
}, 0);
|
||||
}
|
||||
currentState = WAITING;
|
||||
xhr.abort();
|
||||
if (timeout !== 0) {
|
||||
clearTimeout(timeout);
|
||||
timeout = 0;
|
||||
}
|
||||
if (retry > initialRetry * 16) {
|
||||
retry = initialRetry * 16;
|
||||
}
|
||||
if (retry > MAXIMUM_DURATION) {
|
||||
retry = MAXIMUM_DURATION;
|
||||
}
|
||||
timeout = setTimeout(onTimeout, retry);
|
||||
retry = retry * 2 + 1;
|
||||
|
||||
that.readyState = CONNECTING;
|
||||
}
|
||||
event = new Event("error");
|
||||
that.dispatchEvent(event);
|
||||
fire(that, that.onerror, event);
|
||||
} else {
|
||||
if (timeout === 0) {
|
||||
wasActivity = false;
|
||||
timeout = setTimeout(onTimeout, heartbeatTimeout);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onProgress() {
|
||||
onEvent("progress");
|
||||
}
|
||||
|
||||
function onLoad() {
|
||||
onEvent("load");
|
||||
}
|
||||
|
||||
function onError() {
|
||||
onEvent("error");
|
||||
}
|
||||
|
||||
function onReadyStateChange() {
|
||||
if (xhr.readyState === 4) {
|
||||
if (xhr.status === 0) {
|
||||
onEvent("error");
|
||||
} else {
|
||||
onEvent("load");
|
||||
}
|
||||
} else {
|
||||
onEvent("progress");
|
||||
}
|
||||
}
|
||||
|
||||
if (("readyState" in xhr) && global.opera != undefined) {
|
||||
// workaround for Opera issue with "progress" events
|
||||
timeout0 = setTimeout(function f() {
|
||||
if (xhr.readyState === 3) {
|
||||
onEvent("progress");
|
||||
}
|
||||
timeout0 = setTimeout(f, 500);
|
||||
}, 0);
|
||||
}
|
||||
|
||||
onTimeout = function () {
|
||||
timeout = 0;
|
||||
if (currentState !== WAITING) {
|
||||
onEvent("");
|
||||
return;
|
||||
}
|
||||
|
||||
// loading indicator in Safari, Chrome < 14
|
||||
// loading indicator in Firefox
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=736723
|
||||
if ((!("ontimeout" in xhr) || ("sendAsBinary" in xhr) || ("mozAnon" in xhr)) && global.document != undefined && global.document.readyState != undefined && global.document.readyState !== "complete") {
|
||||
timeout = setTimeout(onTimeout, 4);
|
||||
return;
|
||||
}
|
||||
|
||||
// XDomainRequest#abort removes onprogress, onerror, onload
|
||||
xhr.onload = onLoad;
|
||||
xhr.onerror = onError;
|
||||
|
||||
if ("onabort" in xhr) {
|
||||
// improper fix to match Firefox behaviour, but it is better than just ignore abort
|
||||
// see https://bugzilla.mozilla.org/show_bug.cgi?id=768596
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=880200
|
||||
// https://code.google.com/p/chromium/issues/detail?id=153570
|
||||
xhr.onabort = onError;
|
||||
}
|
||||
|
||||
if ("onprogress" in xhr) {
|
||||
xhr.onprogress = onProgress;
|
||||
}
|
||||
// IE 8-9 (XMLHTTPRequest)
|
||||
// Firefox 3.5 - 3.6 - ? < 9.0
|
||||
// onprogress is not fired sometimes or delayed
|
||||
// see also #64
|
||||
if ("onreadystatechange" in xhr) {
|
||||
xhr.onreadystatechange = onReadyStateChange;
|
||||
}
|
||||
|
||||
wasActivity = false;
|
||||
timeout = setTimeout(onTimeout, heartbeatTimeout);
|
||||
|
||||
charOffset = 0;
|
||||
currentState = CONNECTING;
|
||||
dataBuffer.length = 0;
|
||||
eventTypeBuffer = "";
|
||||
lastEventIdBuffer = lastEventId;
|
||||
value = "";
|
||||
field = "";
|
||||
state = FIELD_START;
|
||||
|
||||
var s = url.slice(0, 5);
|
||||
if (s !== "data:" && s !== "blob:") {
|
||||
s = url + ((url.indexOf("?", 0) === -1 ? "?" : "&") + "lastEventId=" + encodeURIComponent(lastEventId) + "&r=" + (Math.random() + 1).toString().slice(2));
|
||||
} else {
|
||||
s = url;
|
||||
}
|
||||
xhr.open("GET", s, true);
|
||||
|
||||
if ("withCredentials" in xhr) {
|
||||
// withCredentials should be set after "open" for Safari and Chrome (< 19 ?)
|
||||
xhr.withCredentials = withCredentials;
|
||||
}
|
||||
|
||||
if ("responseType" in xhr) {
|
||||
xhr.responseType = "text";
|
||||
}
|
||||
|
||||
if ("setRequestHeader" in xhr) {
|
||||
// Request header field Cache-Control is not allowed by Access-Control-Allow-Headers.
|
||||
// "Cache-control: no-cache" are not honored in Chrome and Firefox
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=428916
|
||||
//xhr.setRequestHeader("Cache-Control", "no-cache");
|
||||
xhr.setRequestHeader("Accept", "text/event-stream");
|
||||
// Request header field Last-Event-ID is not allowed by Access-Control-Allow-Headers.
|
||||
//xhr.setRequestHeader("Last-Event-ID", lastEventId);
|
||||
}
|
||||
|
||||
xhr.send(undefined);
|
||||
};
|
||||
|
||||
EventTarget.call(this);
|
||||
this.close = close;
|
||||
this.url = url;
|
||||
this.readyState = CONNECTING;
|
||||
this.withCredentials = withCredentials;
|
||||
|
||||
this.onopen = undefined;
|
||||
this.onmessage = undefined;
|
||||
this.onerror = undefined;
|
||||
|
||||
onTimeout();
|
||||
}
|
||||
|
||||
function F() {
|
||||
this.CONNECTING = CONNECTING;
|
||||
this.OPEN = OPEN;
|
||||
this.CLOSED = CLOSED;
|
||||
}
|
||||
F.prototype = EventTarget.prototype;
|
||||
|
||||
EventSource.prototype = new F();
|
||||
F.call(EventSource);
|
||||
if (isCORSSupported) {
|
||||
EventSource.prototype.withCredentials = undefined;
|
||||
}
|
||||
|
||||
var isEventSourceSupported = function () {
|
||||
// Opera 12 fails this test, but this is fine.
|
||||
return global.EventSource != undefined && ("withCredentials" in global.EventSource.prototype);
|
||||
};
|
||||
|
||||
if (Transport != undefined && (global.EventSource == undefined || (isCORSSupported && !isEventSourceSupported()))) {
|
||||
// Why replace a native EventSource ?
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=444328
|
||||
// https://bugzilla.mozilla.org/show_bug.cgi?id=831392
|
||||
// https://code.google.com/p/chromium/issues/detail?id=260144
|
||||
// https://code.google.com/p/chromium/issues/detail?id=225654
|
||||
// ...
|
||||
global.NativeEventSource = global.EventSource;
|
||||
global.EventSource = EventSource;
|
||||
}
|
||||
|
||||
}(typeof window !== 'undefined' ? window : this));
|
6
client/externalFiles/hammer.js
Normal file
6
client/externalFiles/hammer.js
Normal file
File diff suppressed because one or more lines are too long
9041
client/externalFiles/mjs_plot_0_3_n.js
Normal file
9041
client/externalFiles/mjs_plot_0_3_n.js
Normal file
File diff suppressed because it is too large
Load Diff
15
client/externalFiles/oldswiper.min.css
vendored
Normal file
15
client/externalFiles/oldswiper.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
18
client/externalFiles/oldswiper.min.js
vendored
Normal file
18
client/externalFiles/oldswiper.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
576
client/externalFiles/swiper.css
Normal file
576
client/externalFiles/swiper.css
Normal file
@ -0,0 +1,576 @@
|
||||
/**
|
||||
* Swiper 3.4.0
|
||||
* Most modern mobile touch slider and framework with hardware accelerated transitions
|
||||
*
|
||||
* http://www.idangero.us/swiper/
|
||||
*
|
||||
* Copyright 2016, Vladimir Kharlampidi
|
||||
* The iDangero.us
|
||||
* http://www.idangero.us/
|
||||
*
|
||||
* Licensed under MIT
|
||||
*
|
||||
* Released on: October 16, 2016
|
||||
*/
|
||||
.swiper-container {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
/* Fix of Webkit flickering */
|
||||
z-index: 1;
|
||||
}
|
||||
.swiper-container-no-flexbox .swiper-slide {
|
||||
float: left;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-wrapper {
|
||||
-webkit-box-orient: vertical;
|
||||
-moz-box-orient: vertical;
|
||||
-ms-flex-direction: column;
|
||||
-webkit-flex-direction: column;
|
||||
flex-direction: column;
|
||||
}
|
||||
.swiper-wrapper {
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 1;
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-transition-property: -webkit-transform;
|
||||
-moz-transition-property: -moz-transform;
|
||||
-o-transition-property: -o-transform;
|
||||
-ms-transition-property: -ms-transform;
|
||||
transition-property: transform;
|
||||
-webkit-box-sizing: content-box;
|
||||
-moz-box-sizing: content-box;
|
||||
box-sizing: content-box;
|
||||
}
|
||||
.swiper-container-android .swiper-slide,
|
||||
.swiper-wrapper {
|
||||
-webkit-transform: translate3d(0px, 0, 0);
|
||||
-moz-transform: translate3d(0px, 0, 0);
|
||||
-o-transform: translate(0px, 0px);
|
||||
-ms-transform: translate3d(0px, 0, 0);
|
||||
transform: translate3d(0px, 0, 0);
|
||||
}
|
||||
.swiper-container-multirow > .swiper-wrapper {
|
||||
-webkit-box-lines: multiple;
|
||||
-moz-box-lines: multiple;
|
||||
-ms-flex-wrap: wrap;
|
||||
-webkit-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
.swiper-container-free-mode > .swiper-wrapper {
|
||||
-webkit-transition-timing-function: ease-out;
|
||||
-moz-transition-timing-function: ease-out;
|
||||
-ms-transition-timing-function: ease-out;
|
||||
-o-transition-timing-function: ease-out;
|
||||
transition-timing-function: ease-out;
|
||||
margin: 0 auto;
|
||||
}
|
||||
.swiper-slide {
|
||||
-webkit-flex-shrink: 0;
|
||||
-ms-flex: 0 0 auto;
|
||||
flex-shrink: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
/* Auto Height */
|
||||
.swiper-container-autoheight,
|
||||
.swiper-container-autoheight .swiper-slide {
|
||||
height: auto;
|
||||
}
|
||||
.swiper-container-autoheight .swiper-wrapper {
|
||||
-webkit-box-align: start;
|
||||
-ms-flex-align: start;
|
||||
-webkit-align-items: flex-start;
|
||||
align-items: flex-start;
|
||||
-webkit-transition-property: -webkit-transform, height;
|
||||
-moz-transition-property: -moz-transform;
|
||||
-o-transition-property: -o-transform;
|
||||
-ms-transition-property: -ms-transform;
|
||||
transition-property: transform, height;
|
||||
}
|
||||
/* a11y */
|
||||
.swiper-container .swiper-notification {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
pointer-events: none;
|
||||
opacity: 0;
|
||||
z-index: -1000;
|
||||
}
|
||||
/* IE10 Windows Phone 8 Fixes */
|
||||
.swiper-wp8-horizontal {
|
||||
-ms-touch-action: pan-y;
|
||||
touch-action: pan-y;
|
||||
}
|
||||
.swiper-wp8-vertical {
|
||||
-ms-touch-action: pan-x;
|
||||
touch-action: pan-x;
|
||||
}
|
||||
/* Arrows */
|
||||
.swiper-button-prev,
|
||||
.swiper-button-next {
|
||||
position: absolute;
|
||||
top: 70%;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
margin-top: -10px;
|
||||
z-index: 10;
|
||||
cursor: pointer;
|
||||
-moz-background-size: 27px 44px;
|
||||
-webkit-background-size: 27px 44px;
|
||||
background-size: 27px 44px;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 0.6;
|
||||
}
|
||||
.swiper-button-prev.swiper-button-disabled,
|
||||
.swiper-button-next.swiper-button-disabled {
|
||||
opacity: 0.2;
|
||||
cursor: auto;
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-button-prev,
|
||||
.swiper-container-rtl .swiper-button-next {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
|
||||
left: 10px;
|
||||
right: auto;
|
||||
}
|
||||
.swiper-button-prev.swiper-button-black,
|
||||
.swiper-container-rtl .swiper-button-next.swiper-button-black {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
.swiper-button-prev.swiper-button-white,
|
||||
.swiper-container-rtl .swiper-button-next.swiper-button-white {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M0%2C22L22%2C0l2.1%2C2.1L4.2%2C22l19.9%2C19.9L22%2C44L0%2C22L0%2C22L0%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
.swiper-button-next,
|
||||
.swiper-container-rtl .swiper-button-prev {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23007aff'%2F%3E%3C%2Fsvg%3E");
|
||||
right: 10px;
|
||||
left: auto;
|
||||
}
|
||||
.swiper-button-next.swiper-button-black,
|
||||
.swiper-container-rtl .swiper-button-prev.swiper-button-black {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23000000'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
.swiper-button-next.swiper-button-white,
|
||||
.swiper-container-rtl .swiper-button-prev.swiper-button-white {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%2027%2044'%3E%3Cpath%20d%3D'M27%2C22L27%2C22L5%2C44l-2.1-2.1L22.8%2C22L2.9%2C2.1L5%2C0L27%2C22L27%2C22z'%20fill%3D'%23ffffff'%2F%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
/* Pagination Styles */
|
||||
.swiper-pagination {
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
-webkit-transition: 300ms;
|
||||
-moz-transition: 300ms;
|
||||
-o-transition: 300ms;
|
||||
transition: 300ms;
|
||||
-webkit-transform: translate3d(0, 0, 0);
|
||||
-ms-transform: translate3d(0, 0, 0);
|
||||
-o-transform: translate3d(0, 0, 0);
|
||||
transform: translate3d(0, 0, 0);
|
||||
z-index: 10;
|
||||
}
|
||||
.swiper-pagination.swiper-pagination-hidden {
|
||||
opacity: 0;
|
||||
}
|
||||
/* Common Styles */
|
||||
.swiper-pagination-fraction,
|
||||
.swiper-pagination-custom,
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets {
|
||||
bottom: 10px;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
/* Bullets */
|
||||
.swiper-pagination-bullet {
|
||||
width: 8px;
|
||||
height: 8px;
|
||||
display: inline-block;
|
||||
border-radius: 100%;
|
||||
background: #000;
|
||||
opacity: 0.2;
|
||||
}
|
||||
button.swiper-pagination-bullet {
|
||||
border: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
box-shadow: none;
|
||||
-moz-appearance: none;
|
||||
-ms-appearance: none;
|
||||
-webkit-appearance: none;
|
||||
appearance: none;
|
||||
}
|
||||
.swiper-pagination-clickable .swiper-pagination-bullet {
|
||||
cursor: pointer;
|
||||
}
|
||||
.swiper-pagination-white .swiper-pagination-bullet {
|
||||
background: #fff;
|
||||
}
|
||||
.swiper-pagination-bullet-active {
|
||||
opacity: 1;
|
||||
background: #007aff;
|
||||
}
|
||||
.swiper-pagination-white .swiper-pagination-bullet-active {
|
||||
background: #fff;
|
||||
}
|
||||
.swiper-pagination-black .swiper-pagination-bullet-active {
|
||||
background: #000;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-pagination-bullets {
|
||||
right: 10px;
|
||||
top: 50%;
|
||||
-webkit-transform: translate3d(0px, -50%, 0);
|
||||
-moz-transform: translate3d(0px, -50%, 0);
|
||||
-o-transform: translate(0px, -50%);
|
||||
-ms-transform: translate3d(0px, -50%, 0);
|
||||
transform: translate3d(0px, -50%, 0);
|
||||
}
|
||||
.swiper-container-vertical > .swiper-pagination-bullets .swiper-pagination-bullet {
|
||||
margin: 5px 0;
|
||||
display: block;
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-pagination-bullets .swiper-pagination-bullet {
|
||||
margin: 0 5px;
|
||||
}
|
||||
/* Progress */
|
||||
.swiper-pagination-progress {
|
||||
background: rgba(0, 0, 0, 0.25);
|
||||
position: absolute;
|
||||
}
|
||||
.swiper-pagination-progress .swiper-pagination-progressbar {
|
||||
background: #007aff;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
-webkit-transform: scale(0);
|
||||
-ms-transform: scale(0);
|
||||
-o-transform: scale(0);
|
||||
transform: scale(0);
|
||||
-webkit-transform-origin: left top;
|
||||
-moz-transform-origin: left top;
|
||||
-ms-transform-origin: left top;
|
||||
-o-transform-origin: left top;
|
||||
transform-origin: left top;
|
||||
}
|
||||
.swiper-container-rtl .swiper-pagination-progress .swiper-pagination-progressbar {
|
||||
-webkit-transform-origin: right top;
|
||||
-moz-transform-origin: right top;
|
||||
-ms-transform-origin: right top;
|
||||
-o-transform-origin: right top;
|
||||
transform-origin: right top;
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-pagination-progress {
|
||||
width: 100%;
|
||||
height: 4px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-pagination-progress {
|
||||
width: 4px;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-pagination-progress.swiper-pagination-white {
|
||||
background: rgba(255, 255, 255, 0.5);
|
||||
}
|
||||
.swiper-pagination-progress.swiper-pagination-white .swiper-pagination-progressbar {
|
||||
background: #fff;
|
||||
}
|
||||
.swiper-pagination-progress.swiper-pagination-black .swiper-pagination-progressbar {
|
||||
background: #000;
|
||||
}
|
||||
/* 3D Container */
|
||||
.swiper-container-3d {
|
||||
-webkit-perspective: 1200px;
|
||||
-moz-perspective: 1200px;
|
||||
-o-perspective: 1200px;
|
||||
perspective: 1200px;
|
||||
}
|
||||
.swiper-container-3d .swiper-wrapper,
|
||||
.swiper-container-3d .swiper-slide,
|
||||
.swiper-container-3d .swiper-slide-shadow-left,
|
||||
.swiper-container-3d .swiper-slide-shadow-right,
|
||||
.swiper-container-3d .swiper-slide-shadow-top,
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom,
|
||||
.swiper-container-3d .swiper-cube-shadow {
|
||||
-webkit-transform-style: preserve-3d;
|
||||
-moz-transform-style: preserve-3d;
|
||||
-ms-transform-style: preserve-3d;
|
||||
transform-style: preserve-3d;
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-left,
|
||||
.swiper-container-3d .swiper-slide-shadow-right,
|
||||
.swiper-container-3d .swiper-slide-shadow-top,
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
pointer-events: none;
|
||||
z-index: 10;
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-left {
|
||||
background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-right {
|
||||
background-image: -webkit-gradient(linear, right top, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(left, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to right, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-top {
|
||||
background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
.swiper-container-3d .swiper-slide-shadow-bottom {
|
||||
background-image: -webkit-gradient(linear, left bottom, left top, from(rgba(0, 0, 0, 0.5)), to(rgba(0, 0, 0, 0)));
|
||||
/* Safari 4+, Chrome */
|
||||
background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Chrome 10+, Safari 5.1+, iOS 5+ */
|
||||
background-image: -moz-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 3.6-15 */
|
||||
background-image: -o-linear-gradient(top, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Opera 11.10-12.00 */
|
||||
background-image: linear-gradient(to bottom, rgba(0, 0, 0, 0.5), rgba(0, 0, 0, 0));
|
||||
/* Firefox 16+, IE10, Opera 12.50+ */
|
||||
}
|
||||
/* Coverflow */
|
||||
.swiper-container-coverflow .swiper-wrapper,
|
||||
.swiper-container-flip .swiper-wrapper {
|
||||
/* Windows 8 IE 10 fix */
|
||||
-ms-perspective: 1200px;
|
||||
}
|
||||
/* Cube + Flip */
|
||||
.swiper-container-cube,
|
||||
.swiper-container-flip {
|
||||
overflow: visible;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide,
|
||||
.swiper-container-flip .swiper-slide {
|
||||
pointer-events: none;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
z-index: 1;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide .swiper-slide,
|
||||
.swiper-container-flip .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-active,
|
||||
.swiper-container-flip .swiper-slide-active,
|
||||
.swiper-container-cube .swiper-slide-active .swiper-slide-active,
|
||||
.swiper-container-flip .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-shadow-top,
|
||||
.swiper-container-flip .swiper-slide-shadow-top,
|
||||
.swiper-container-cube .swiper-slide-shadow-bottom,
|
||||
.swiper-container-flip .swiper-slide-shadow-bottom,
|
||||
.swiper-container-cube .swiper-slide-shadow-left,
|
||||
.swiper-container-flip .swiper-slide-shadow-left,
|
||||
.swiper-container-cube .swiper-slide-shadow-right,
|
||||
.swiper-container-flip .swiper-slide-shadow-right {
|
||||
z-index: 0;
|
||||
-webkit-backface-visibility: hidden;
|
||||
-moz-backface-visibility: hidden;
|
||||
-ms-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
}
|
||||
/* Cube */
|
||||
.swiper-container-cube .swiper-slide {
|
||||
visibility: hidden;
|
||||
-webkit-transform-origin: 0 0;
|
||||
-moz-transform-origin: 0 0;
|
||||
-ms-transform-origin: 0 0;
|
||||
transform-origin: 0 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.swiper-container-cube.swiper-container-rtl .swiper-slide {
|
||||
-webkit-transform-origin: 100% 0;
|
||||
-moz-transform-origin: 100% 0;
|
||||
-ms-transform-origin: 100% 0;
|
||||
transform-origin: 100% 0;
|
||||
}
|
||||
.swiper-container-cube .swiper-slide-active,
|
||||
.swiper-container-cube .swiper-slide-next,
|
||||
.swiper-container-cube .swiper-slide-prev,
|
||||
.swiper-container-cube .swiper-slide-next + .swiper-slide {
|
||||
pointer-events: auto;
|
||||
visibility: visible;
|
||||
}
|
||||
.swiper-container-cube .swiper-cube-shadow {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
bottom: 0px;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background: #000;
|
||||
opacity: 0.6;
|
||||
-webkit-filter: blur(50px);
|
||||
filter: blur(50px);
|
||||
z-index: 0;
|
||||
}
|
||||
/* Fade */
|
||||
.swiper-container-fade.swiper-container-free-mode .swiper-slide {
|
||||
-webkit-transition-timing-function: ease-out;
|
||||
-moz-transition-timing-function: ease-out;
|
||||
-ms-transition-timing-function: ease-out;
|
||||
-o-transition-timing-function: ease-out;
|
||||
transition-timing-function: ease-out;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide {
|
||||
pointer-events: none;
|
||||
-webkit-transition-property: opacity;
|
||||
-moz-transition-property: opacity;
|
||||
-o-transition-property: opacity;
|
||||
transition-property: opacity;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide .swiper-slide {
|
||||
pointer-events: none;
|
||||
}
|
||||
.swiper-container-fade .swiper-slide-active,
|
||||
.swiper-container-fade .swiper-slide-active .swiper-slide-active {
|
||||
pointer-events: auto;
|
||||
}
|
||||
.swiper-zoom-container {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: -webkit-box;
|
||||
display: -moz-box;
|
||||
display: -ms-flexbox;
|
||||
display: -webkit-flex;
|
||||
display: flex;
|
||||
-webkit-box-pack: center;
|
||||
-moz-box-pack: center;
|
||||
-ms-flex-pack: center;
|
||||
-webkit-justify-content: center;
|
||||
justify-content: center;
|
||||
-webkit-box-align: center;
|
||||
-moz-box-align: center;
|
||||
-ms-flex-align: center;
|
||||
-webkit-align-items: center;
|
||||
align-items: center;
|
||||
text-align: center;
|
||||
}
|
||||
.swiper-zoom-container > img,
|
||||
.swiper-zoom-container > svg,
|
||||
.swiper-zoom-container > canvas {
|
||||
max-width: 100%;
|
||||
max-height: 100%;
|
||||
object-fit: contain;
|
||||
}
|
||||
/* Scrollbar */
|
||||
.swiper-scrollbar {
|
||||
border-radius: 10px;
|
||||
position: relative;
|
||||
-ms-touch-action: none;
|
||||
background: rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
.swiper-container-horizontal > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
left: 1%;
|
||||
bottom: 3px;
|
||||
z-index: 50;
|
||||
height: 5px;
|
||||
width: 98%;
|
||||
}
|
||||
.swiper-container-vertical > .swiper-scrollbar {
|
||||
position: absolute;
|
||||
right: 3px;
|
||||
top: 1%;
|
||||
z-index: 50;
|
||||
width: 5px;
|
||||
height: 98%;
|
||||
}
|
||||
.swiper-scrollbar-drag {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
position: relative;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
border-radius: 10px;
|
||||
left: 0;
|
||||
top: 0;
|
||||
}
|
||||
.swiper-scrollbar-cursor-drag {
|
||||
cursor: move;
|
||||
}
|
||||
/* Preloader */
|
||||
.swiper-lazy-preloader {
|
||||
width: 42px;
|
||||
height: 42px;
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
margin-left: -21px;
|
||||
margin-top: -21px;
|
||||
z-index: 10;
|
||||
-webkit-transform-origin: 50%;
|
||||
-moz-transform-origin: 50%;
|
||||
transform-origin: 50%;
|
||||
-webkit-animation: swiper-preloader-spin 1s steps(12, end) infinite;
|
||||
-moz-animation: swiper-preloader-spin 1s steps(12, end) infinite;
|
||||
animation: swiper-preloader-spin 1s steps(12, end) infinite;
|
||||
}
|
||||
.swiper-lazy-preloader:after {
|
||||
display: block;
|
||||
content: "";
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%236c6c6c'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||
background-position: 50%;
|
||||
-webkit-background-size: 100%;
|
||||
background-size: 100%;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
.swiper-lazy-preloader-white:after {
|
||||
background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg%20viewBox%3D'0%200%20120%20120'%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20xmlns%3Axlink%3D'http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink'%3E%3Cdefs%3E%3Cline%20id%3D'l'%20x1%3D'60'%20x2%3D'60'%20y1%3D'7'%20y2%3D'27'%20stroke%3D'%23fff'%20stroke-width%3D'11'%20stroke-linecap%3D'round'%2F%3E%3C%2Fdefs%3E%3Cg%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(30%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(60%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(90%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(120%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.27'%20transform%3D'rotate(150%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.37'%20transform%3D'rotate(180%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.46'%20transform%3D'rotate(210%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.56'%20transform%3D'rotate(240%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.66'%20transform%3D'rotate(270%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.75'%20transform%3D'rotate(300%2060%2C60)'%2F%3E%3Cuse%20xlink%3Ahref%3D'%23l'%20opacity%3D'.85'%20transform%3D'rotate(330%2060%2C60)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E");
|
||||
}
|
||||
@-webkit-keyframes swiper-preloader-spin {
|
||||
100% {
|
||||
-webkit-transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes swiper-preloader-spin {
|
||||
100% {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
5296
client/externalFiles/swiper.js
Normal file
5296
client/externalFiles/swiper.js
Normal file
File diff suppressed because it is too large
Load Diff
12
client/externalFiles/swiper.min.css
vendored
Normal file
12
client/externalFiles/swiper.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
13
client/externalFiles/swiper.min.js
vendored
Normal file
13
client/externalFiles/swiper.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
client/externalFiles/swiper.min.js.map
Normal file
1
client/externalFiles/swiper.min.js.map
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user