| rev | line source | 
| bsw/jbe@1309 | 1 /** | 
| bsw/jbe@1309 | 2  * Copyright 2015 Google Inc. All Rights Reserved. | 
| bsw/jbe@1309 | 3  * | 
| bsw/jbe@1309 | 4  * Licensed under the Apache License, Version 2.0 (the "License"); | 
| bsw/jbe@1309 | 5  * you may not use this file except in compliance with the License. | 
| bsw/jbe@1309 | 6  * You may obtain a copy of the License at | 
| bsw/jbe@1309 | 7  * | 
| bsw/jbe@1309 | 8  *      http://www.apache.org/licenses/LICENSE-2.0 | 
| bsw/jbe@1309 | 9  * | 
| bsw/jbe@1309 | 10  * Unless required by applicable law or agreed to in writing, software | 
| bsw/jbe@1309 | 11  * distributed under the License is distributed on an "AS IS" BASIS, | 
| bsw/jbe@1309 | 12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
| bsw/jbe@1309 | 13  * See the License for the specific language governing permissions and | 
| bsw/jbe@1309 | 14  * limitations under the License. | 
| bsw/jbe@1309 | 15  */ | 
| bsw/jbe@1309 | 16 | 
| bsw/jbe@1309 | 17 @import "../variables"; | 
| bsw/jbe@1309 | 18 | 
| bsw/jbe@1309 | 19 | 
| bsw/jbe@1309 | 20 .mdl-spinner { | 
| bsw/jbe@1309 | 21   display: inline-block; | 
| bsw/jbe@1309 | 22   position: relative; | 
| bsw/jbe@1309 | 23   width: $spinner-size; | 
| bsw/jbe@1309 | 24   height: $spinner-size; | 
| bsw/jbe@1309 | 25 | 
| bsw/jbe@1309 | 26   &:not(.is-upgraded).is-active:after { | 
| bsw/jbe@1309 | 27     content: "Loading..."; | 
| bsw/jbe@1309 | 28   } | 
| bsw/jbe@1309 | 29 | 
| bsw/jbe@1309 | 30   &.is-upgraded.is-active { | 
| bsw/jbe@1309 | 31     animation: mdl-spinner__container-rotate $spinner-duration linear infinite; | 
| bsw/jbe@1309 | 32   } | 
| bsw/jbe@1309 | 33 } | 
| bsw/jbe@1309 | 34 | 
| bsw/jbe@1309 | 35 @keyframes mdl-spinner__container-rotate { | 
| bsw/jbe@1309 | 36   to { transform: rotate(360deg) } | 
| bsw/jbe@1309 | 37 } | 
| bsw/jbe@1309 | 38 | 
| bsw/jbe@1309 | 39 .mdl-spinner__layer { | 
| bsw/jbe@1309 | 40   position: absolute; | 
| bsw/jbe@1309 | 41   width: 100%; | 
| bsw/jbe@1309 | 42   height: 100%; | 
| bsw/jbe@1309 | 43   opacity: 0; | 
| bsw/jbe@1309 | 44 } | 
| bsw/jbe@1309 | 45 | 
| bsw/jbe@1309 | 46 .mdl-spinner__layer-1 { | 
| bsw/jbe@1309 | 47   border-color: $spinner-color-1; | 
| bsw/jbe@1309 | 48 | 
| bsw/jbe@1309 | 49   .mdl-spinner--single-color & { | 
| bsw/jbe@1309 | 50     border-color: $spinner-single-color; | 
| bsw/jbe@1309 | 51   } | 
| bsw/jbe@1309 | 52 | 
| bsw/jbe@1309 | 53   .mdl-spinner.is-active & { | 
| bsw/jbe@1309 | 54     animation: | 
| bsw/jbe@1309 | 55         mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 56             $animation-curve-fast-out-slow-in infinite both, | 
| bsw/jbe@1309 | 57         mdl-spinner__layer-1-fade-in-out (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 58             $animation-curve-fast-out-slow-in infinite both; | 
| bsw/jbe@1309 | 59   } | 
| bsw/jbe@1309 | 60 } | 
| bsw/jbe@1309 | 61 | 
| bsw/jbe@1309 | 62 .mdl-spinner__layer-2 { | 
| bsw/jbe@1309 | 63   border-color: $spinner-color-2; | 
| bsw/jbe@1309 | 64 | 
| bsw/jbe@1309 | 65   .mdl-spinner--single-color & { | 
| bsw/jbe@1309 | 66     border-color: $spinner-single-color; | 
| bsw/jbe@1309 | 67   } | 
| bsw/jbe@1309 | 68 | 
| bsw/jbe@1309 | 69   .mdl-spinner.is-active & { | 
| bsw/jbe@1309 | 70     animation: | 
| bsw/jbe@1309 | 71         mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 72             $animation-curve-fast-out-slow-in infinite both, | 
| bsw/jbe@1309 | 73         mdl-spinner__layer-2-fade-in-out (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 74             $animation-curve-fast-out-slow-in infinite both; | 
| bsw/jbe@1309 | 75   } | 
| bsw/jbe@1309 | 76 } | 
| bsw/jbe@1309 | 77 | 
| bsw/jbe@1309 | 78 .mdl-spinner__layer-3 { | 
| bsw/jbe@1309 | 79   border-color: $spinner-color-3; | 
| bsw/jbe@1309 | 80 | 
| bsw/jbe@1309 | 81   .mdl-spinner--single-color & { | 
| bsw/jbe@1309 | 82     border-color: $spinner-single-color; | 
| bsw/jbe@1309 | 83   } | 
| bsw/jbe@1309 | 84 | 
| bsw/jbe@1309 | 85   .mdl-spinner.is-active & { | 
| bsw/jbe@1309 | 86     animation: | 
| bsw/jbe@1309 | 87         mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 88             $animation-curve-fast-out-slow-in infinite both, | 
| bsw/jbe@1309 | 89         mdl-spinner__layer-3-fade-in-out (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 90             $animation-curve-fast-out-slow-in infinite both; | 
| bsw/jbe@1309 | 91   } | 
| bsw/jbe@1309 | 92 } | 
| bsw/jbe@1309 | 93 | 
| bsw/jbe@1309 | 94 .mdl-spinner__layer-4 { | 
| bsw/jbe@1309 | 95   border-color: $spinner-color-4; | 
| bsw/jbe@1309 | 96 | 
| bsw/jbe@1309 | 97   .mdl-spinner--single-color & { | 
| bsw/jbe@1309 | 98     border-color: $spinner-single-color; | 
| bsw/jbe@1309 | 99   } | 
| bsw/jbe@1309 | 100 | 
| bsw/jbe@1309 | 101   .mdl-spinner.is-active & { | 
| bsw/jbe@1309 | 102     animation: | 
| bsw/jbe@1309 | 103         mdl-spinner__fill-unfill-rotate (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 104             $animation-curve-fast-out-slow-in infinite both, | 
| bsw/jbe@1309 | 105         mdl-spinner__layer-4-fade-in-out (4 * $spinner-arc-time) | 
| bsw/jbe@1309 | 106             $animation-curve-fast-out-slow-in infinite both; | 
| bsw/jbe@1309 | 107   } | 
| bsw/jbe@1309 | 108 } | 
| bsw/jbe@1309 | 109 | 
| bsw/jbe@1309 | 110 @keyframes mdl-spinner__fill-unfill-rotate { | 
| bsw/jbe@1309 | 111   12.5% { transform: rotate(0.5 * $spinner-arc-size);  } | 
| bsw/jbe@1309 | 112   25%   { transform: rotate($spinner-arc-size);  } | 
| bsw/jbe@1309 | 113   37.5% { transform: rotate(1.5 * $spinner-arc-size);  } | 
| bsw/jbe@1309 | 114   50%   { transform: rotate(2 * $spinner-arc-size);  } | 
| bsw/jbe@1309 | 115   62.5% { transform: rotate(2.5 * $spinner-arc-size);  } | 
| bsw/jbe@1309 | 116   75%   { transform: rotate(3 * $spinner-arc-size);  } | 
| bsw/jbe@1309 | 117   87.5% { transform: rotate(3.5 * $spinner-arc-size); } | 
| bsw/jbe@1309 | 118   to    { transform: rotate(4 * $spinner-arc-size); } | 
| bsw/jbe@1309 | 119 } | 
| bsw/jbe@1309 | 120 | 
| bsw/jbe@1309 | 121 /** | 
| bsw/jbe@1309 | 122 * HACK: Even though the intention is to have the current .mdl-spinner__layer-N | 
| bsw/jbe@1309 | 123 * at `opacity: 1`, we set it to `opacity: 0.99` instead since this forces Chrome | 
| bsw/jbe@1309 | 124 * to do proper subpixel rendering for the elements being animated. This is | 
| bsw/jbe@1309 | 125 * especially visible in Chrome 39 on Ubuntu 14.04. See: | 
| bsw/jbe@1309 | 126 * | 
| bsw/jbe@1309 | 127 * - https://github.com/Polymer/paper-spinner/issues/9 | 
| bsw/jbe@1309 | 128 * - https://code.google.com/p/chromium/issues/detail?id=436255 | 
| bsw/jbe@1309 | 129 */ | 
| bsw/jbe@1309 | 130 @keyframes mdl-spinner__layer-1-fade-in-out { | 
| bsw/jbe@1309 | 131   from { opacity: 0.99; } | 
| bsw/jbe@1309 | 132   25% { opacity: 0.99; } | 
| bsw/jbe@1309 | 133   26% { opacity: 0; } | 
| bsw/jbe@1309 | 134   89% { opacity: 0; } | 
| bsw/jbe@1309 | 135   90% { opacity: 0.99; } | 
| bsw/jbe@1309 | 136   100% { opacity: 0.99; } | 
| bsw/jbe@1309 | 137 } | 
| bsw/jbe@1309 | 138 | 
| bsw/jbe@1309 | 139 @keyframes mdl-spinner__layer-2-fade-in-out { | 
| bsw/jbe@1309 | 140   from { opacity: 0; } | 
| bsw/jbe@1309 | 141   15% { opacity: 0; } | 
| bsw/jbe@1309 | 142   25% { opacity: 0.99; } | 
| bsw/jbe@1309 | 143   50% { opacity: 0.99; } | 
| bsw/jbe@1309 | 144   51% { opacity: 0; } | 
| bsw/jbe@1309 | 145 } | 
| bsw/jbe@1309 | 146 | 
| bsw/jbe@1309 | 147 @keyframes mdl-spinner__layer-3-fade-in-out { | 
| bsw/jbe@1309 | 148   from { opacity: 0; } | 
| bsw/jbe@1309 | 149   40% { opacity: 0; } | 
| bsw/jbe@1309 | 150   50% { opacity: 0.99; } | 
| bsw/jbe@1309 | 151   75% { opacity: 0.99; } | 
| bsw/jbe@1309 | 152   76% { opacity: 0; } | 
| bsw/jbe@1309 | 153 } | 
| bsw/jbe@1309 | 154 | 
| bsw/jbe@1309 | 155 @keyframes mdl-spinner__layer-4-fade-in-out { | 
| bsw/jbe@1309 | 156   from { opacity: 0; } | 
| bsw/jbe@1309 | 157   65% { opacity: 0; } | 
| bsw/jbe@1309 | 158   75% { opacity: 0.99; } | 
| bsw/jbe@1309 | 159   90% { opacity: 0.99; } | 
| bsw/jbe@1309 | 160   100% { opacity: 0; } | 
| bsw/jbe@1309 | 161 } | 
| bsw/jbe@1309 | 162 | 
| bsw/jbe@1309 | 163 /** | 
| bsw/jbe@1309 | 164 * Patch the gap that appear between the two adjacent | 
| bsw/jbe@1309 | 165 * div.mdl-spinner__circle-clipper while the spinner is rotating | 
| bsw/jbe@1309 | 166 * (appears on Chrome 38, Safari 7.1, and IE 11). | 
| bsw/jbe@1309 | 167 * | 
| bsw/jbe@1309 | 168 * Update: the gap no longer appears on Chrome when .mdl-spinner__layer-N's | 
| bsw/jbe@1309 | 169 * opacity is 0.99, but still does on Safari and IE. | 
| bsw/jbe@1309 | 170 */ | 
| bsw/jbe@1309 | 171 .mdl-spinner__gap-patch { | 
| bsw/jbe@1309 | 172   position: absolute; | 
| bsw/jbe@1309 | 173   box-sizing: border-box; | 
| bsw/jbe@1309 | 174   top: 0; | 
| bsw/jbe@1309 | 175   left: 45%; | 
| bsw/jbe@1309 | 176   width: 10%; | 
| bsw/jbe@1309 | 177   height: 100%; | 
| bsw/jbe@1309 | 178   overflow: hidden; | 
| bsw/jbe@1309 | 179   border-color: inherit; | 
| bsw/jbe@1309 | 180 | 
| bsw/jbe@1309 | 181   & .mdl-spinner__circle { | 
| bsw/jbe@1309 | 182     width: 1000%; | 
| bsw/jbe@1309 | 183     left: -450%; | 
| bsw/jbe@1309 | 184   } | 
| bsw/jbe@1309 | 185 } | 
| bsw/jbe@1309 | 186 | 
| bsw/jbe@1309 | 187 .mdl-spinner__circle-clipper { | 
| bsw/jbe@1309 | 188   display: inline-block; | 
| bsw/jbe@1309 | 189   position: relative; | 
| bsw/jbe@1309 | 190   width: 50%; | 
| bsw/jbe@1309 | 191   height: 100%; | 
| bsw/jbe@1309 | 192   overflow: hidden; | 
| bsw/jbe@1309 | 193   border-color: inherit; | 
| bsw/jbe@1309 | 194 | 
| bsw/jbe@1309 | 195   & .mdl-spinner__circle { | 
| bsw/jbe@1309 | 196     width: 200%; | 
| bsw/jbe@1309 | 197   } | 
| bsw/jbe@1309 | 198 } | 
| bsw/jbe@1309 | 199 | 
| bsw/jbe@1309 | 200 .mdl-spinner__circle { | 
| bsw/jbe@1309 | 201   box-sizing: border-box; | 
| bsw/jbe@1309 | 202   height: 100%; | 
| bsw/jbe@1309 | 203   border-width: $spinner-stroke-width; | 
| bsw/jbe@1309 | 204   border-style: solid; | 
| bsw/jbe@1309 | 205   border-color: inherit; | 
| bsw/jbe@1309 | 206   border-bottom-color: transparent !important; | 
| bsw/jbe@1309 | 207   border-radius: 50%; | 
| bsw/jbe@1309 | 208   animation: none; | 
| bsw/jbe@1309 | 209 | 
| bsw/jbe@1309 | 210   position: absolute; | 
| bsw/jbe@1309 | 211   top: 0; | 
| bsw/jbe@1309 | 212   right: 0; | 
| bsw/jbe@1309 | 213   bottom: 0; | 
| bsw/jbe@1309 | 214   left: 0; | 
| bsw/jbe@1309 | 215 | 
| bsw/jbe@1309 | 216   .mdl-spinner__left & { | 
| bsw/jbe@1309 | 217     border-right-color: transparent !important; | 
| bsw/jbe@1309 | 218     transform: rotate(129deg); | 
| bsw/jbe@1309 | 219 | 
| bsw/jbe@1309 | 220     .mdl-spinner.is-active & { | 
| bsw/jbe@1309 | 221       animation: mdl-spinner__left-spin $spinner-arc-time | 
| bsw/jbe@1309 | 222           $animation-curve-fast-out-slow-in infinite both; | 
| bsw/jbe@1309 | 223     } | 
| bsw/jbe@1309 | 224   } | 
| bsw/jbe@1309 | 225 | 
| bsw/jbe@1309 | 226   .mdl-spinner__right & { | 
| bsw/jbe@1309 | 227     left: -100%; | 
| bsw/jbe@1309 | 228     border-left-color: transparent !important; | 
| bsw/jbe@1309 | 229     transform: rotate(-129deg); | 
| bsw/jbe@1309 | 230 | 
| bsw/jbe@1309 | 231     .mdl-spinner.is-active & { | 
| bsw/jbe@1309 | 232       animation: mdl-spinner__right-spin $spinner-arc-time | 
| bsw/jbe@1309 | 233           $animation-curve-fast-out-slow-in infinite both; | 
| bsw/jbe@1309 | 234     } | 
| bsw/jbe@1309 | 235   } | 
| bsw/jbe@1309 | 236 } | 
| bsw/jbe@1309 | 237 | 
| bsw/jbe@1309 | 238 @keyframes mdl-spinner__left-spin { | 
| bsw/jbe@1309 | 239   from { transform: rotate(130deg); } | 
| bsw/jbe@1309 | 240   50% { transform: rotate(-5deg); } | 
| bsw/jbe@1309 | 241   to { transform: rotate(130deg); } | 
| bsw/jbe@1309 | 242 } | 
| bsw/jbe@1309 | 243 | 
| bsw/jbe@1309 | 244 @keyframes mdl-spinner__right-spin { | 
| bsw/jbe@1309 | 245   from { transform: rotate(-130deg); } | 
| bsw/jbe@1309 | 246   50% { transform: rotate(5deg); } | 
| bsw/jbe@1309 | 247   to { transform: rotate(-130deg); } | 
| bsw/jbe@1309 | 248 } |