blob: 645e188b09cc13526952b8c5de165e0d2176941a [file] [log] [blame]
@-webkit-keyframes v-rotate-360 {
to {-webkit-transform: rotate(360deg);}
}
@-moz-keyframes v-rotate-360 {
to {-moz-transform: rotate(360deg);}
}
@-o-keyframes v-rotate-360 {
to {-o-transform: rotate(360deg);}
}
@keyframes v-rotate-360 {
to {transform: rotate(360deg);}
}
/**
* Creates a spinner to be used as a loading indicator. On browsers which do not
* support CSS animations, an animated GIF image is used as a fallback.
*
* @param {size} $size (24px) - the diameter of the spinner, in pixels. Should be divisible by 2, increased by 1px if not
* @param {size} $thickness (2px) - the thickness or width of the border of the spinner
* @param {color} $color ($v-focus-color) - the color of the border of the spinner
* @param {time} $speed (500ms) - the speed of the spinning animation
*/
@mixin valo-spinner ($size: 24px, $thickness: 2px, $color: $v-focus-color, $speed: 500ms) {
// Make size divisible by 2, so that the rotation won't jiggle
$size: round($size) + round($size) % 2;
height: $size !important;
width: $size !important;
@include box-sizing(border-box);
border: $thickness solid transparentize($color, .8);
border-top-color: $color;
border-right-color: $color;
border-radius: 100%;
@include animation(v-rotate-360 $speed infinite linear);
pointer-events: none;
// No CSS animation in IE8 and IE9
.v-ie8 &,
.v-ie9 & {
border: none;
border-radius: $v-border-radius;
background: #fff url(#{$valo-shared-pathPrefix}img/spinner.gif) no-repeat 50% 50%;
background-size: 80%;
}
// No background-size for IE8
.v-ie8 & {
min-width: 30px;
min-height: 30px;
}
}
/**
* The color of the main loading indicator bar.
* @type color
*/
$v-loading-indicator-color: $v-focus-color !default;
/**
* The height of the main loading indicator bar.
*
* @type size
*/
$v-loading-indicator-bar-height: ceil($v-unit-size/10) !default;
/**
* The height of the main loading indicator bar when the request to the server
* is taking longer than usual and the user is notified that they should wait.
*
* @type size
*/
$v-loading-indicator-bar-height--wait: ceil($v-unit-size/6) !default;
@include keyframes(v-progress-start) {
0% { width: 0%; }
100% { width: 50%; }
}
@include keyframes(v-progress-delay) {
0% { width: 50%; }
100% { width: 90%; }
}
@include keyframes(v-progress-wait) {
0% { width: 90%; height: $v-loading-indicator-bar-height; }
3% { width: 91%; height: $v-loading-indicator-bar-height--wait; }
100% { width: 96%; height: $v-loading-indicator-bar-height--wait; }
}
@include keyframes(v-progress-wait-pulse) {
0% { opacity: 1; }
50% { opacity: .1; }
100% { opacity: 1; }
}
/*
* Outputs the necessary styles to create the main loading indicator bar.
*
* @access private
*/
@mixin valo-loading-bar {
.v-loading-indicator {
position: fixed !important;
z-index: 99999;
left: 0;
right: auto;
top: 0;
width: 50%;
opacity: 1;
height: $v-loading-indicator-bar-height;
background-color: $v-loading-indicator-color;
//@include linear-gradient(to right, rgba($v-loading-indicator-color,0) 0%, $v-loading-indicator-color 100%);
pointer-events: none;
@include transition(none);
@include animation(v-progress-start 1000ms 200ms both);
//@include animation-fill-mode(forwards);
&[style*="none"] {
// Chrome skips the transitions because it thinks the element is display: none;
display: block !important;
width: 100% !important;
opacity: 0;
@include animation(none);
@include transition(opacity 500ms 300ms, width 300ms);
}
}
.v-loading-indicator-delay {
width: 90%;
.v-ff & {
width: 50%;
}
@include animation(v-progress-delay 3.8s forwards);
}
.v-loading-indicator-wait {
width: 96%;
.v-ff & {
width: 90%;
}
@include animation(v-progress-wait 5s forwards, v-progress-wait-pulse 1s 4s infinite backwards);
}
}