├── .babelrc ├── .gitignore ├── LICENSE ├── README.md ├── dist ├── main.css ├── main.css.map ├── main.dev.js ├── main.dev.js.map └── main.prod.js ├── example ├── .babelrc ├── .gitignore ├── components │ └── App.vue ├── css │ └── style.css ├── dist │ └── main.bundle.js ├── index.html ├── main.js ├── package.json └── webpack.config.js ├── package-lock.json ├── package.json ├── src ├── components │ └── VueOdometer.vue └── index.js └── webpack.config.js /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["env"] 3 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | test/ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Jeffery ThaGintoki 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |



2 | Odometer 3 |

4 |

5 | 6 | # About Vue-Odometer 7 | Smoothly transitions numbers with ease. Use this library to give you application a smooth animation, only applicable on numbers, for more details about the OdometerJS pelase refer to: https://github.com/HubSpot/odometer 8 | 9 | ## Installation 10 | ```console 11 | npm install v-odometer 12 | ``` 13 | 14 | ## NOTE 15 | If you are getting the error of "Unknown Odometer keyword", this means that you are missing odometer library in your application, simply because the Odometer library is not yet exported as an AMD module and still only a commenJS file (refer to: [AMD exporting issues](https://github.com/HubSpot/odometer/pull/102)). 16 | However if you are not building your applciation in a webpack envirment or similar, and you include VueJS file from a public cdn, then you are fine to include the `./v-odometer/dist/main.prod.js`, the Vue will be public in your window there for this component will be automatically integrated as a global component and you can simply use it directly insidde your html file: 17 | 18 | ```html 19 | ... 20 | 21 | ... 22 | ``` 23 | 24 | ## Usage 25 | #### ECMAScript 6 (ES6)/ ECMAScript 2015 (ES2015) 26 | To cherry pick the component, start by importing it in the file where it is being used: 27 | ```javascript 28 | import VueOdometer from 'v-odometer/src' 29 | ``` 30 | Then add it to your component definition: 31 | 32 | ```javascript 33 | Vue.component('my-component', { 34 | components: { 35 | 'vue-odometer': VueOdometer 36 | } 37 | // ... 38 | }) 39 | ``` 40 | Or register it globally: 41 | 42 | ```javascript 43 | Vue.component('vue-odometer', VueOdometer); 44 | ``` 45 | #### ECMAScript 5 (ES5) 46 | ```xml 47 | ... 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | Odometer - VueJS component 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 |
66 | ... 67 | 68 | ... 69 |
70 | 71 | ... 72 | ``` 73 | 74 | ```javascript 75 | var app = new Vue({ 76 | data: { 77 | mynumber: "" 78 | } 79 | }) 80 | ``` 81 | **Properties:** 82 | ```typescript 83 | value: { type: Number, default: () => 0 }, 84 | theme: { type: String, default: () => 'minimal' }, 85 | format: { type: String, default: () => '(.ddd),dd' }, 86 | duration: { type: Number, default: () => 3000 }, 87 | className: { type: String, default: () => 'odometer' }, 88 | animation: { type: String, default: () => 'count' }, 89 | formatFunction: { type: Function }, 90 | ``` 91 | -------------------------------------------------------------------------------- /dist/main.css: -------------------------------------------------------------------------------- 1 | @import url(//fonts.googleapis.com/css?family=Arimo);.odometer.odometer-auto-theme, .odometer.odometer-theme-car { 2 | display: inline-block; 3 | vertical-align: middle; 4 | *vertical-align: auto; 5 | *zoom: 1; 6 | *display: inline; 7 | position: relative; 8 | } 9 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-car .odometer-digit { 10 | display: inline-block; 11 | vertical-align: middle; 12 | *vertical-align: auto; 13 | *zoom: 1; 14 | *display: inline; 15 | position: relative; 16 | } 17 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-car .odometer-digit .odometer-digit-spacer { 18 | display: inline-block; 19 | vertical-align: middle; 20 | *vertical-align: auto; 21 | *zoom: 1; 22 | *display: inline; 23 | visibility: hidden; 24 | } 25 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-car .odometer-digit .odometer-digit-inner { 26 | text-align: left; 27 | display: block; 28 | position: absolute; 29 | top: 0; 30 | left: 0; 31 | right: 0; 32 | bottom: 0; 33 | overflow: hidden; 34 | } 35 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-car .odometer-digit .odometer-ribbon { 36 | display: block; 37 | } 38 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-car .odometer-digit .odometer-ribbon-inner { 39 | display: block; 40 | -webkit-backface-visibility: hidden; 41 | } 42 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-car .odometer-digit .odometer-value { 43 | display: block; 44 | -webkit-transform: translateZ(0); 45 | } 46 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-car .odometer-digit .odometer-value.odometer-last-value { 47 | position: absolute; 48 | } 49 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-up .odometer-ribbon-inner { 50 | -webkit-transition: -webkit-transform 2s; 51 | -moz-transition: -moz-transform 2s; 52 | -ms-transition: -ms-transform 2s; 53 | -o-transition: -o-transform 2s; 54 | transition: transform 2s; 55 | } 56 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 57 | -webkit-transform: translateY(-100%); 58 | -moz-transform: translateY(-100%); 59 | -ms-transform: translateY(-100%); 60 | -o-transform: translateY(-100%); 61 | transform: translateY(-100%); 62 | } 63 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-down .odometer-ribbon-inner { 64 | -webkit-transform: translateY(-100%); 65 | -moz-transform: translateY(-100%); 66 | -ms-transform: translateY(-100%); 67 | -o-transform: translateY(-100%); 68 | transform: translateY(-100%); 69 | } 70 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 71 | -webkit-transition: -webkit-transform 2s; 72 | -moz-transition: -moz-transform 2s; 73 | -ms-transition: -ms-transform 2s; 74 | -o-transition: -o-transform 2s; 75 | transition: transform 2s; 76 | -webkit-transform: translateY(0); 77 | -moz-transform: translateY(0); 78 | -ms-transform: translateY(0); 79 | -o-transform: translateY(0); 80 | transform: translateY(0); 81 | } 82 | 83 | .odometer.odometer-auto-theme, .odometer.odometer-theme-car { 84 | -moz-border-radius: 0.34em; 85 | -webkit-border-radius: 0.34em; 86 | border-radius: 0.34em; 87 | font-family: "Arimo", monospace; 88 | padding: 0.15em; 89 | background: #000; 90 | color: #eee0d3; 91 | } 92 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-car .odometer-digit { 93 | -moz-box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); 94 | -webkit-box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); 95 | box-shadow: inset 0 0 0.3em rgba(0, 0, 0, 0.8); 96 | background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzMzMzMzMyIvPjxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjMzMzMzMzIi8+PHN0b3Agb2Zmc2V0PSI2MCUiIHN0b3AtY29sb3I9IiMxMDEwMTAiLz48c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iIzMzMzMzMyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzMzMzMzMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); 97 | background-size: 100%; 98 | background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #333333), color-stop(40%, #333333), color-stop(60%, #101010), color-stop(80%, #333333), color-stop(100%, #333333)); 99 | background-image: -moz-linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); 100 | background-image: -webkit-linear-gradient(top, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); 101 | background-image: linear-gradient(to bottom, #333333 0%, #333333 40%, #101010 60%, #333333 80%, #333333 100%); 102 | padding: 0 0.15em; 103 | } 104 | .odometer.odometer-auto-theme .odometer-digit:first-child, .odometer.odometer-theme-car .odometer-digit:first-child { 105 | -moz-border-radius: 0.2em 0 0 0.2em; 106 | -webkit-border-radius: 0.2em; 107 | border-radius: 0.2em 0 0 0.2em; 108 | } 109 | .odometer.odometer-auto-theme .odometer-digit:last-child, .odometer.odometer-theme-car .odometer-digit:last-child { 110 | -moz-border-radius: 0 0.2em 0.2em 0; 111 | -webkit-border-radius: 0; 112 | border-radius: 0 0.2em 0.2em 0; 113 | background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2VlZTBkMyIvPjxzdG9wIG9mZnNldD0iNDAlIiBzdG9wLWNvbG9yPSIjZWVlMGQzIi8+PHN0b3Agb2Zmc2V0PSI2MCUiIHN0b3AtY29sb3I9IiNiYmFhOWEiLz48c3RvcCBvZmZzZXQ9IjgwJSIgc3RvcC1jb2xvcj0iI2VlZTBkMyIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2VlZTBkMyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); 114 | background-size: 100%; 115 | background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #eee0d3), color-stop(40%, #eee0d3), color-stop(60%, #bbaa9a), color-stop(80%, #eee0d3), color-stop(100%, #eee0d3)); 116 | background-image: -moz-linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); 117 | background-image: -webkit-linear-gradient(top, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); 118 | background-image: linear-gradient(to bottom, #eee0d3 0%, #eee0d3 40%, #bbaa9a 60%, #eee0d3 80%, #eee0d3 100%); 119 | background-color: #eee0d3; 120 | color: #000; 121 | } 122 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-car .odometer-digit .odometer-digit-inner { 123 | left: 0.15em; 124 | } 125 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-car.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 126 | -webkit-transition-timing-function: linear; 127 | -moz-transition-timing-function: linear; 128 | -ms-transition-timing-function: linear; 129 | -o-transition-timing-function: linear; 130 | transition-timing-function: linear; 131 | } 132 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 133 | display: inline-block; 134 | vertical-align: middle; 135 | *vertical-align: auto; 136 | *zoom: 1; 137 | *display: inline; 138 | position: relative; 139 | } 140 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-default .odometer-digit { 141 | display: inline-block; 142 | vertical-align: middle; 143 | *vertical-align: auto; 144 | *zoom: 1; 145 | *display: inline; 146 | position: relative; 147 | } 148 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-default .odometer-digit .odometer-digit-spacer { 149 | display: inline-block; 150 | vertical-align: middle; 151 | *vertical-align: auto; 152 | *zoom: 1; 153 | *display: inline; 154 | visibility: hidden; 155 | } 156 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-default .odometer-digit .odometer-digit-inner { 157 | text-align: left; 158 | display: block; 159 | position: absolute; 160 | top: 0; 161 | left: 0; 162 | right: 0; 163 | bottom: 0; 164 | overflow: hidden; 165 | } 166 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon { 167 | display: block; 168 | } 169 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-default .odometer-digit .odometer-ribbon-inner { 170 | display: block; 171 | -webkit-backface-visibility: hidden; 172 | } 173 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-default .odometer-digit .odometer-value { 174 | display: block; 175 | -webkit-transform: translateZ(0); 176 | } 177 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-default .odometer-digit .odometer-value.odometer-last-value { 178 | position: absolute; 179 | } 180 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up .odometer-ribbon-inner { 181 | -webkit-transition: -webkit-transform 2s; 182 | -moz-transition: -moz-transform 2s; 183 | -ms-transition: -ms-transform 2s; 184 | -o-transition: -o-transform 2s; 185 | transition: transform 2s; 186 | } 187 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 188 | -webkit-transform: translateY(-100%); 189 | -moz-transform: translateY(-100%); 190 | -ms-transform: translateY(-100%); 191 | -o-transform: translateY(-100%); 192 | transform: translateY(-100%); 193 | } 194 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down .odometer-ribbon-inner { 195 | -webkit-transform: translateY(-100%); 196 | -moz-transform: translateY(-100%); 197 | -ms-transform: translateY(-100%); 198 | -o-transform: translateY(-100%); 199 | transform: translateY(-100%); 200 | } 201 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-default.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 202 | -webkit-transition: -webkit-transform 2s; 203 | -moz-transition: -moz-transform 2s; 204 | -ms-transition: -ms-transform 2s; 205 | -o-transition: -o-transform 2s; 206 | transition: transform 2s; 207 | -webkit-transform: translateY(0); 208 | -moz-transform: translateY(0); 209 | -ms-transform: translateY(0); 210 | -o-transform: translateY(0); 211 | transform: translateY(0); 212 | } 213 | 214 | .odometer.odometer-auto-theme, .odometer.odometer-theme-default { 215 | font-family: "Helvetica Neue", sans-serif; 216 | line-height: 1.1em; 217 | } 218 | .odometer.odometer-auto-theme .odometer-value, .odometer.odometer-theme-default .odometer-value { 219 | text-align: center; 220 | } 221 | @import url(//fonts.googleapis.com/css?family=Wallpoet);.odometer.odometer-auto-theme, .odometer.odometer-theme-digital { 222 | display: inline-block; 223 | vertical-align: middle; 224 | *vertical-align: auto; 225 | *zoom: 1; 226 | *display: inline; 227 | position: relative; 228 | } 229 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-digital .odometer-digit { 230 | display: inline-block; 231 | vertical-align: middle; 232 | *vertical-align: auto; 233 | *zoom: 1; 234 | *display: inline; 235 | position: relative; 236 | } 237 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-digital .odometer-digit .odometer-digit-spacer { 238 | display: inline-block; 239 | vertical-align: middle; 240 | *vertical-align: auto; 241 | *zoom: 1; 242 | *display: inline; 243 | visibility: hidden; 244 | } 245 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-digital .odometer-digit .odometer-digit-inner { 246 | text-align: left; 247 | display: block; 248 | position: absolute; 249 | top: 0; 250 | left: 0; 251 | right: 0; 252 | bottom: 0; 253 | overflow: hidden; 254 | } 255 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-digital .odometer-digit .odometer-ribbon { 256 | display: block; 257 | } 258 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-digital .odometer-digit .odometer-ribbon-inner { 259 | display: block; 260 | -webkit-backface-visibility: hidden; 261 | } 262 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-digital .odometer-digit .odometer-value { 263 | display: block; 264 | -webkit-transform: translateZ(0); 265 | } 266 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-digital .odometer-digit .odometer-value.odometer-last-value { 267 | position: absolute; 268 | } 269 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-up .odometer-ribbon-inner { 270 | -webkit-transition: -webkit-transform 2s; 271 | -moz-transition: -moz-transform 2s; 272 | -ms-transition: -ms-transform 2s; 273 | -o-transition: -o-transform 2s; 274 | transition: transform 2s; 275 | } 276 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 277 | -webkit-transform: translateY(-100%); 278 | -moz-transform: translateY(-100%); 279 | -ms-transform: translateY(-100%); 280 | -o-transform: translateY(-100%); 281 | transform: translateY(-100%); 282 | } 283 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-down .odometer-ribbon-inner { 284 | -webkit-transform: translateY(-100%); 285 | -moz-transform: translateY(-100%); 286 | -ms-transform: translateY(-100%); 287 | -o-transform: translateY(-100%); 288 | transform: translateY(-100%); 289 | } 290 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-digital.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 291 | -webkit-transition: -webkit-transform 2s; 292 | -moz-transition: -moz-transform 2s; 293 | -ms-transition: -ms-transform 2s; 294 | -o-transition: -o-transform 2s; 295 | transition: transform 2s; 296 | -webkit-transform: translateY(0); 297 | -moz-transform: translateY(0); 298 | -ms-transform: translateY(0); 299 | -o-transform: translateY(0); 300 | transform: translateY(0); 301 | } 302 | 303 | .odometer.odometer-auto-theme, .odometer.odometer-theme-digital { 304 | background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PHJhZGlhbEdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY3g9IjUwJSIgY3k9IjUwJSIgcj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzhiZjVhNSIgc3RvcC1vcGFjaXR5PSIwLjQiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiMwMDAwMDAiLz48L3JhZGlhbEdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); 305 | background-size: 100%; 306 | background-image: -moz-radial-gradient(rgba(139, 245, 165, 0.4), #000000); 307 | background-image: -webkit-radial-gradient(rgba(139, 245, 165, 0.4), #000000); 308 | background-image: radial-gradient(rgba(139, 245, 165, 0.4), #000000); 309 | background-color: #000; 310 | font-family: "Wallpoet", monospace; 311 | padding: 0 0.2em; 312 | line-height: 1.1em; 313 | color: #8bf5a5; 314 | } 315 | .odometer.odometer-auto-theme .odometer-digit + .odometer-digit, .odometer.odometer-theme-digital .odometer-digit + .odometer-digit { 316 | margin-left: 0.1em; 317 | } 318 | .odometer.odometer-auto-theme, .odometer.odometer-theme-minimal { 319 | display: inline-block; 320 | vertical-align: middle; 321 | *vertical-align: auto; 322 | *zoom: 1; 323 | *display: inline; 324 | position: relative; 325 | } 326 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-minimal .odometer-digit { 327 | display: inline-block; 328 | vertical-align: middle; 329 | *vertical-align: auto; 330 | *zoom: 1; 331 | *display: inline; 332 | position: relative; 333 | } 334 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-minimal .odometer-digit .odometer-digit-spacer { 335 | display: inline-block; 336 | vertical-align: middle; 337 | *vertical-align: auto; 338 | *zoom: 1; 339 | *display: inline; 340 | visibility: hidden; 341 | } 342 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-minimal .odometer-digit .odometer-digit-inner { 343 | text-align: left; 344 | display: block; 345 | position: absolute; 346 | top: 0; 347 | left: 0; 348 | right: 0; 349 | bottom: 0; 350 | overflow: hidden; 351 | } 352 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-minimal .odometer-digit .odometer-ribbon { 353 | display: block; 354 | } 355 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-minimal .odometer-digit .odometer-ribbon-inner { 356 | display: block; 357 | -webkit-backface-visibility: hidden; 358 | } 359 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-minimal .odometer-digit .odometer-value { 360 | display: block; 361 | -webkit-transform: translateZ(0); 362 | } 363 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-minimal .odometer-digit .odometer-value.odometer-last-value { 364 | position: absolute; 365 | } 366 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-up .odometer-ribbon-inner { 367 | -webkit-transition: -webkit-transform 2s; 368 | -moz-transition: -moz-transform 2s; 369 | -ms-transition: -ms-transform 2s; 370 | -o-transition: -o-transform 2s; 371 | transition: transform 2s; 372 | } 373 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 374 | -webkit-transform: translateY(-100%); 375 | -moz-transform: translateY(-100%); 376 | -ms-transform: translateY(-100%); 377 | -o-transform: translateY(-100%); 378 | transform: translateY(-100%); 379 | } 380 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-down .odometer-ribbon-inner { 381 | -webkit-transform: translateY(-100%); 382 | -moz-transform: translateY(-100%); 383 | -ms-transform: translateY(-100%); 384 | -o-transform: translateY(-100%); 385 | transform: translateY(-100%); 386 | } 387 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-minimal.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 388 | -webkit-transition: -webkit-transform 2s; 389 | -moz-transition: -moz-transform 2s; 390 | -ms-transition: -ms-transform 2s; 391 | -o-transition: -o-transform 2s; 392 | transition: transform 2s; 393 | -webkit-transform: translateY(0); 394 | -moz-transform: translateY(0); 395 | -ms-transform: translateY(0); 396 | -o-transform: translateY(0); 397 | transform: translateY(0); 398 | } 399 | .odometer.odometer-auto-theme, .odometer.odometer-theme-plaza { 400 | display: inline-block; 401 | vertical-align: middle; 402 | *vertical-align: auto; 403 | *zoom: 1; 404 | *display: inline; 405 | position: relative; 406 | } 407 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-plaza .odometer-digit { 408 | display: inline-block; 409 | vertical-align: middle; 410 | *vertical-align: auto; 411 | *zoom: 1; 412 | *display: inline; 413 | position: relative; 414 | } 415 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-plaza .odometer-digit .odometer-digit-spacer { 416 | display: inline-block; 417 | vertical-align: middle; 418 | *vertical-align: auto; 419 | *zoom: 1; 420 | *display: inline; 421 | visibility: hidden; 422 | } 423 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-plaza .odometer-digit .odometer-digit-inner { 424 | text-align: left; 425 | display: block; 426 | position: absolute; 427 | top: 0; 428 | left: 0; 429 | right: 0; 430 | bottom: 0; 431 | overflow: hidden; 432 | } 433 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-plaza .odometer-digit .odometer-ribbon { 434 | display: block; 435 | } 436 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-plaza .odometer-digit .odometer-ribbon-inner { 437 | display: block; 438 | -webkit-backface-visibility: hidden; 439 | } 440 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-plaza .odometer-digit .odometer-value { 441 | display: block; 442 | -webkit-transform: translateZ(0); 443 | } 444 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-plaza .odometer-digit .odometer-value.odometer-last-value { 445 | position: absolute; 446 | } 447 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-up .odometer-ribbon-inner { 448 | -webkit-transition: -webkit-transform 2s; 449 | -moz-transition: -moz-transform 2s; 450 | -ms-transition: -ms-transform 2s; 451 | -o-transition: -o-transform 2s; 452 | transition: transform 2s; 453 | } 454 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 455 | -webkit-transform: translateY(-100%); 456 | -moz-transform: translateY(-100%); 457 | -ms-transform: translateY(-100%); 458 | -o-transform: translateY(-100%); 459 | transform: translateY(-100%); 460 | } 461 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-down .odometer-ribbon-inner { 462 | -webkit-transform: translateY(-100%); 463 | -moz-transform: translateY(-100%); 464 | -ms-transform: translateY(-100%); 465 | -o-transform: translateY(-100%); 466 | transform: translateY(-100%); 467 | } 468 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-plaza.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 469 | -webkit-transition: -webkit-transform 2s; 470 | -moz-transition: -moz-transform 2s; 471 | -ms-transition: -ms-transform 2s; 472 | -o-transition: -o-transform 2s; 473 | transition: transform 2s; 474 | -webkit-transform: translateY(0); 475 | -moz-transform: translateY(0); 476 | -ms-transform: translateY(0); 477 | -o-transform: translateY(0); 478 | transform: translateY(0); 479 | } 480 | 481 | .odometer.odometer-auto-theme, .odometer.odometer-theme-plaza { 482 | -moz-border-radius: 0.15em; 483 | -webkit-border-radius: 0.15em; 484 | border-radius: 0.15em; 485 | background-color: #f0f8ff; 486 | font-family: "Helvetica Neue", sans-serif; 487 | font-weight: 100; 488 | padding: 0 0.12em; 489 | line-height: 1.2em; 490 | font-size: 1.2em; 491 | background-size: 16px 16px; 492 | } 493 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-plaza .odometer-digit { 494 | -moz-border-radius: 0.1em; 495 | -webkit-border-radius: 0.1em; 496 | border-radius: 0.1em; 497 | padding: 0 0.03em; 498 | color: #648baf; 499 | } 500 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-plaza .odometer-digit .odometer-digit-inner { 501 | left: 0.03em; 502 | } 503 | @import url(//fonts.googleapis.com/css?family=Rye);.odometer.odometer-auto-theme, .odometer.odometer-theme-slot-machine { 504 | display: inline-block; 505 | vertical-align: middle; 506 | *vertical-align: auto; 507 | *zoom: 1; 508 | *display: inline; 509 | position: relative; 510 | } 511 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-slot-machine .odometer-digit { 512 | display: inline-block; 513 | vertical-align: middle; 514 | *vertical-align: auto; 515 | *zoom: 1; 516 | *display: inline; 517 | position: relative; 518 | } 519 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-spacer { 520 | display: inline-block; 521 | vertical-align: middle; 522 | *vertical-align: auto; 523 | *zoom: 1; 524 | *display: inline; 525 | visibility: hidden; 526 | } 527 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-inner { 528 | text-align: left; 529 | display: block; 530 | position: absolute; 531 | top: 0; 532 | left: 0; 533 | right: 0; 534 | bottom: 0; 535 | overflow: hidden; 536 | } 537 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-ribbon { 538 | display: block; 539 | } 540 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-ribbon-inner { 541 | display: block; 542 | -webkit-backface-visibility: hidden; 543 | } 544 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-value { 545 | display: block; 546 | -webkit-transform: translateZ(0); 547 | } 548 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-value.odometer-last-value { 549 | position: absolute; 550 | } 551 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-up .odometer-ribbon-inner { 552 | -webkit-transition: -webkit-transform 2s; 553 | -moz-transition: -moz-transform 2s; 554 | -ms-transition: -ms-transform 2s; 555 | -o-transition: -o-transform 2s; 556 | transition: transform 2s; 557 | } 558 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 559 | -webkit-transform: translateY(-100%); 560 | -moz-transform: translateY(-100%); 561 | -ms-transform: translateY(-100%); 562 | -o-transform: translateY(-100%); 563 | transform: translateY(-100%); 564 | } 565 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-down .odometer-ribbon-inner { 566 | -webkit-transform: translateY(-100%); 567 | -moz-transform: translateY(-100%); 568 | -ms-transform: translateY(-100%); 569 | -o-transform: translateY(-100%); 570 | transform: translateY(-100%); 571 | } 572 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-slot-machine.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 573 | -webkit-transition: -webkit-transform 2s; 574 | -moz-transition: -moz-transform 2s; 575 | -ms-transition: -ms-transform 2s; 576 | -o-transition: -o-transform 2s; 577 | transition: transform 2s; 578 | -webkit-transform: translateY(0); 579 | -moz-transform: translateY(0); 580 | -ms-transform: translateY(0); 581 | -o-transform: translateY(0); 582 | transform: translateY(0); 583 | } 584 | 585 | .odometer.odometer-auto-theme, .odometer.odometer-theme-slot-machine { 586 | -moz-border-radius: 0.34em; 587 | -webkit-border-radius: 0.34em; 588 | border-radius: 0.34em; 589 | background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmYwMCIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iI2ZmYTUwMCIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); 590 | background-size: 100%; 591 | background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffff00), color-stop(100%, #ffa500)); 592 | background-image: -moz-linear-gradient(#ffff00, #ffa500); 593 | background-image: -webkit-linear-gradient(#ffff00, #ffa500); 594 | background-image: linear-gradient(#ffff00, #ffa500); 595 | background-color: #fc0; 596 | font-family: "Rye", monospace; 597 | padding: 0.15em; 598 | color: #f80000; 599 | line-height: 1.35em; 600 | border: 0.03em solid #000; 601 | -webkit-text-stroke: 0.05em #000; 602 | } 603 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-slot-machine .odometer-digit { 604 | -moz-box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 605 | -webkit-box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 606 | box-shadow: inset 0 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 607 | -moz-border-radius: 0.2em; 608 | -webkit-border-radius: 0.2em; 609 | border-radius: 0.2em; 610 | background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2NjY2NjYyIvPjxzdG9wIG9mZnNldD0iMjAlIiBzdG9wLWNvbG9yPSIjZmZmZmZmIi8+PHN0b3Agb2Zmc2V0PSI4MCUiIHN0b3AtY29sb3I9IiNmZmZmZmYiLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNjY2NjY2MiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48cmVjdCB4PSIwIiB5PSIwIiB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyYWQpIiAvPjwvc3ZnPiA='); 611 | background-size: 100%; 612 | background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cccccc), color-stop(20%, #ffffff), color-stop(80%, #ffffff), color-stop(100%, #cccccc)); 613 | background-image: -moz-linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); 614 | background-image: -webkit-linear-gradient(top, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); 615 | background-image: linear-gradient(to bottom, #cccccc 0%, #ffffff 20%, #ffffff 80%, #cccccc 100%); 616 | border: 0.03em solid #444; 617 | padding: 0.1em 0.15em 0; 618 | } 619 | .odometer.odometer-auto-theme .odometer-digit:first-child, .odometer.odometer-theme-slot-machine .odometer-digit:first-child { 620 | -moz-box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 621 | -webkit-box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 622 | box-shadow: inset 0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 623 | } 624 | .odometer.odometer-auto-theme .odometer-digit:last-child, .odometer.odometer-theme-slot-machine .odometer-digit:last-child { 625 | -moz-box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 626 | -webkit-box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 627 | box-shadow: inset -0.05em 0 0.1em rgba(0, 0, 0, 0.5), 0 0 0 0.03em #fff, 0 0 0 0.05em rgba(0, 0, 0, 0.2); 628 | } 629 | .odometer.odometer-auto-theme .odometer-digit + .odometer-digit, .odometer.odometer-theme-slot-machine .odometer-digit + .odometer-digit { 630 | margin-left: 0.15em; 631 | } 632 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-inner { 633 | padding-top: 0.08em; 634 | } 635 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-slot-machine .odometer-digit .odometer-value.odometer-last-value { 636 | left: 0; 637 | right: 0; 638 | text-align: center; 639 | } 640 | @import url(//fonts.googleapis.com/css?family=Economica);.odometer.odometer-auto-theme, .odometer.odometer-theme-train-station { 641 | display: inline-block; 642 | vertical-align: middle; 643 | *vertical-align: auto; 644 | *zoom: 1; 645 | *display: inline; 646 | position: relative; 647 | } 648 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-train-station .odometer-digit { 649 | display: inline-block; 650 | vertical-align: middle; 651 | *vertical-align: auto; 652 | *zoom: 1; 653 | *display: inline; 654 | position: relative; 655 | } 656 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-spacer, .odometer.odometer-theme-train-station .odometer-digit .odometer-digit-spacer { 657 | display: inline-block; 658 | vertical-align: middle; 659 | *vertical-align: auto; 660 | *zoom: 1; 661 | *display: inline; 662 | visibility: hidden; 663 | } 664 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-train-station .odometer-digit .odometer-digit-inner { 665 | text-align: left; 666 | display: block; 667 | position: absolute; 668 | top: 0; 669 | left: 0; 670 | right: 0; 671 | bottom: 0; 672 | overflow: hidden; 673 | } 674 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon, .odometer.odometer-theme-train-station .odometer-digit .odometer-ribbon { 675 | display: block; 676 | } 677 | .odometer.odometer-auto-theme .odometer-digit .odometer-ribbon-inner, .odometer.odometer-theme-train-station .odometer-digit .odometer-ribbon-inner { 678 | display: block; 679 | -webkit-backface-visibility: hidden; 680 | } 681 | .odometer.odometer-auto-theme .odometer-digit .odometer-value, .odometer.odometer-theme-train-station .odometer-digit .odometer-value { 682 | display: block; 683 | -webkit-transform: translateZ(0); 684 | } 685 | .odometer.odometer-auto-theme .odometer-digit .odometer-value.odometer-last-value, .odometer.odometer-theme-train-station .odometer-digit .odometer-value.odometer-last-value { 686 | position: absolute; 687 | } 688 | .odometer.odometer-auto-theme.odometer-animating-up .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-up .odometer-ribbon-inner { 689 | -webkit-transition: -webkit-transform 2s; 690 | -moz-transition: -moz-transform 2s; 691 | -ms-transition: -ms-transform 2s; 692 | -o-transition: -o-transform 2s; 693 | transition: transform 2s; 694 | } 695 | .odometer.odometer-auto-theme.odometer-animating-up.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-up.odometer-animating .odometer-ribbon-inner { 696 | -webkit-transform: translateY(-100%); 697 | -moz-transform: translateY(-100%); 698 | -ms-transform: translateY(-100%); 699 | -o-transform: translateY(-100%); 700 | transform: translateY(-100%); 701 | } 702 | .odometer.odometer-auto-theme.odometer-animating-down .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-down .odometer-ribbon-inner { 703 | -webkit-transform: translateY(-100%); 704 | -moz-transform: translateY(-100%); 705 | -ms-transform: translateY(-100%); 706 | -o-transform: translateY(-100%); 707 | transform: translateY(-100%); 708 | } 709 | .odometer.odometer-auto-theme.odometer-animating-down.odometer-animating .odometer-ribbon-inner, .odometer.odometer-theme-train-station.odometer-animating-down.odometer-animating .odometer-ribbon-inner { 710 | -webkit-transition: -webkit-transform 2s; 711 | -moz-transition: -moz-transform 2s; 712 | -ms-transition: -ms-transform 2s; 713 | -o-transition: -o-transform 2s; 714 | transition: transform 2s; 715 | -webkit-transform: translateY(0); 716 | -moz-transform: translateY(0); 717 | -ms-transform: translateY(0); 718 | -o-transform: translateY(0); 719 | transform: translateY(0); 720 | } 721 | 722 | .odometer.odometer-auto-theme, .odometer.odometer-theme-train-station { 723 | font-family: "Economica", sans-serif; 724 | } 725 | .odometer.odometer-auto-theme .odometer-digit, .odometer.odometer-theme-train-station .odometer-digit { 726 | display: inline-block; 727 | vertical-align: middle; 728 | *vertical-align: auto; 729 | *zoom: 1; 730 | *display: inline; 731 | -moz-border-radius: 0.1em; 732 | -webkit-border-radius: 0.1em; 733 | border-radius: 0.1em; 734 | background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4gPHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJncmFkIiBncmFkaWVudFVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgeDE9IjAuNSIgeTE9IjAuMCIgeDI9IjAuNSIgeTI9IjEuMCI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iIzExMTExMSIvPjxzdG9wIG9mZnNldD0iMzUlIiBzdG9wLWNvbG9yPSIjMTExMTExIi8+PHN0b3Agb2Zmc2V0PSI1NSUiIHN0b3AtY29sb3I9IiMzMzMzMzMiLz48c3RvcCBvZmZzZXQ9IjU1JSIgc3RvcC1jb2xvcj0iIzExMTExMSIvPjxzdG9wIG9mZnNldD0iMTAwJSIgc3RvcC1jb2xvcj0iIzExMTExMSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIGZpbGw9InVybCgjZ3JhZCkiIC8+PC9zdmc+IA=='); 735 | background-size: 100%; 736 | background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #111111), color-stop(35%, #111111), color-stop(55%, #333333), color-stop(55%, #111111), color-stop(100%, #111111)); 737 | background-image: -moz-linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); 738 | background-image: -webkit-linear-gradient(top, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); 739 | background-image: linear-gradient(to bottom, #111111 0%, #111111 35%, #333333 55%, #111111 55%, #111111 100%); 740 | background-color: #222; 741 | padding: 0 0.15em; 742 | color: #fff; 743 | } 744 | .odometer.odometer-auto-theme .odometer-digit + .odometer-digit, .odometer.odometer-theme-train-station .odometer-digit + .odometer-digit { 745 | margin-left: 0.1em; 746 | } 747 | .odometer.odometer-auto-theme .odometer-digit .odometer-digit-inner, .odometer.odometer-theme-train-station .odometer-digit .odometer-digit-inner { 748 | left: 0.15em; 749 | } 750 | -------------------------------------------------------------------------------- /dist/main.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":[],"names":[],"mappings":"","file":"main.css","sourceRoot":""} -------------------------------------------------------------------------------- /dist/main.dev.js: -------------------------------------------------------------------------------- 1 | /******/ (function(modules) { // webpackBootstrap 2 | /******/ // The module cache 3 | /******/ var installedModules = {}; 4 | /******/ 5 | /******/ // The require function 6 | /******/ function __webpack_require__(moduleId) { 7 | /******/ 8 | /******/ // Check if module is in cache 9 | /******/ if(installedModules[moduleId]) { 10 | /******/ return installedModules[moduleId].exports; 11 | /******/ } 12 | /******/ // Create a new module (and put it into the cache) 13 | /******/ var module = installedModules[moduleId] = { 14 | /******/ i: moduleId, 15 | /******/ l: false, 16 | /******/ exports: {} 17 | /******/ }; 18 | /******/ 19 | /******/ // Execute the module function 20 | /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21 | /******/ 22 | /******/ // Flag the module as loaded 23 | /******/ module.l = true; 24 | /******/ 25 | /******/ // Return the exports of the module 26 | /******/ return module.exports; 27 | /******/ } 28 | /******/ 29 | /******/ 30 | /******/ // expose the modules object (__webpack_modules__) 31 | /******/ __webpack_require__.m = modules; 32 | /******/ 33 | /******/ // expose the module cache 34 | /******/ __webpack_require__.c = installedModules; 35 | /******/ 36 | /******/ // define getter function for harmony exports 37 | /******/ __webpack_require__.d = function(exports, name, getter) { 38 | /******/ if(!__webpack_require__.o(exports, name)) { 39 | /******/ Object.defineProperty(exports, name, { 40 | /******/ configurable: false, 41 | /******/ enumerable: true, 42 | /******/ get: getter 43 | /******/ }); 44 | /******/ } 45 | /******/ }; 46 | /******/ 47 | /******/ // getDefaultExport function for compatibility with non-harmony modules 48 | /******/ __webpack_require__.n = function(module) { 49 | /******/ var getter = module && module.__esModule ? 50 | /******/ function getDefault() { return module['default']; } : 51 | /******/ function getModuleExports() { return module; }; 52 | /******/ __webpack_require__.d(getter, 'a', getter); 53 | /******/ return getter; 54 | /******/ }; 55 | /******/ 56 | /******/ // Object.prototype.hasOwnProperty.call 57 | /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 58 | /******/ 59 | /******/ // __webpack_public_path__ 60 | /******/ __webpack_require__.p = ""; 61 | /******/ 62 | /******/ // Load entry module and return exports 63 | /******/ return __webpack_require__(__webpack_require__.s = 0); 64 | /******/ }) 65 | /************************************************************************/ 66 | /******/ ([ 67 | /* 0 */ 68 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 69 | 70 | "use strict"; 71 | Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); 72 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_odometer_odometer_min_js__ = __webpack_require__(1); 73 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_odometer_odometer_min_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_odometer_odometer_min_js__); 74 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_odometer_themes_odometer_theme_car_css__ = __webpack_require__(2); 75 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_odometer_themes_odometer_theme_car_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_odometer_themes_odometer_theme_car_css__); 76 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_odometer_themes_odometer_theme_default_css__ = __webpack_require__(3); 77 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_odometer_themes_odometer_theme_default_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_odometer_themes_odometer_theme_default_css__); 78 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_odometer_themes_odometer_theme_digital_css__ = __webpack_require__(4); 79 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_odometer_themes_odometer_theme_digital_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_odometer_themes_odometer_theme_digital_css__); 80 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_odometer_themes_odometer_theme_minimal_css__ = __webpack_require__(5); 81 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4_odometer_themes_odometer_theme_minimal_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_4_odometer_themes_odometer_theme_minimal_css__); 82 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_odometer_themes_odometer_theme_plaza_css__ = __webpack_require__(6); 83 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_5_odometer_themes_odometer_theme_plaza_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_5_odometer_themes_odometer_theme_plaza_css__); 84 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_odometer_themes_odometer_theme_slot_machine_css__ = __webpack_require__(7); 85 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_6_odometer_themes_odometer_theme_slot_machine_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_6_odometer_themes_odometer_theme_slot_machine_css__); 86 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_odometer_themes_odometer_theme_train_station_css__ = __webpack_require__(8); 87 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_7_odometer_themes_odometer_theme_train_station_css___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_7_odometer_themes_odometer_theme_train_station_css__); 88 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_8__components_VueOdometer__ = __webpack_require__(9); 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | if (typeof window !== 'undefined' && window.Vue) 100 | { 101 | window.Vue.component('vue-odometer', __WEBPACK_IMPORTED_MODULE_8__components_VueOdometer__["a" /* default */]) 102 | } 103 | 104 | /* harmony default export */ __webpack_exports__["default"] = (__WEBPACK_IMPORTED_MODULE_8__components_VueOdometer__["a" /* default */]); 105 | 106 | /***/ }), 107 | /* 1 */ 108 | /***/ (function(module, exports, __webpack_require__) { 109 | 110 | var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*! odometer 0.4.8 */ 111 | (function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G=[].slice;q='',n=''+q+"",d='8'+n+"",g='',c="(,ddd).dd",h=/^\(?([^)]*)\)?(?:(.)(d+))?$/,i=30,f=2e3,a=20,j=2,e=.5,k=1e3/i,b=1e3/a,o="transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",y=document.createElement("div").style,p=null!=y.transition||null!=y.webkitTransition||null!=y.mozTransition||null!=y.oTransition,w=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,l=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,s=function(a){var b;return b=document.createElement("div"),b.innerHTML=a,b.children[0]},v=function(a,b){return a.className=a.className.replace(new RegExp("(^| )"+b.split(" ").join("|")+"( |$)","gi")," ")},r=function(a,b){return v(a,b),a.className+=" "+b},z=function(a,b){var c;return null!=document.createEvent?(c=document.createEvent("HTMLEvents"),c.initEvent(b,!0,!0),a.dispatchEvent(c)):void 0},u=function(){var a,b;return null!=(a=null!=(b=window.performance)&&"function"==typeof b.now?b.now():void 0)?a:+new Date},x=function(a,b){return null==b&&(b=0),b?(a*=Math.pow(10,b),a+=.5,a=Math.floor(a),a/=Math.pow(10,b)):Math.round(a)},A=function(a){return 0>a?Math.ceil(a):Math.floor(a)},t=function(a){return a-x(a)},C=!1,(B=function(){var a,b,c,d,e;if(!C&&null!=window.jQuery){for(C=!0,d=["html","text"],e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(function(a){var b;return b=window.jQuery.fn[a],window.jQuery.fn[a]=function(a){var c;return null==a||null==(null!=(c=this[0])?c.odometer:void 0)?b.apply(this,arguments):this[0].odometer.update(a)}}(a));return e}})(),setTimeout(B,0),m=function(){function a(b){var c,d,e,g,h,i,l,m,n,o,p=this;if(this.options=b,this.el=this.options.el,null!=this.el.odometer)return this.el.odometer;this.el.odometer=this,m=a.options;for(d in m)g=m[d],null==this.options[d]&&(this.options[d]=g);null==(h=this.options).duration&&(h.duration=f),this.MAX_VALUES=this.options.duration/k/j|0,this.resetFormat(),this.value=this.cleanValue(null!=(n=this.options.value)?n:""),this.renderInside(),this.render();try{for(o=["innerHTML","innerText","textContent"],i=0,l=o.length;l>i;i++)e=o[i],null!=this.el[e]&&!function(a){return Object.defineProperty(p.el,a,{get:function(){var b;return"innerHTML"===a?p.inside.outerHTML:null!=(b=p.inside.innerText)?b:p.inside.textContent},set:function(a){return p.update(a)}})}(e)}catch(q){c=q,this.watchForMutations()}}return a.prototype.renderInside=function(){return this.inside=document.createElement("div"),this.inside.className="odometer-inside",this.el.innerHTML="",this.el.appendChild(this.inside)},a.prototype.watchForMutations=function(){var a,b=this;if(null!=l)try{return null==this.observer&&(this.observer=new l(function(a){var c;return c=b.el.innerText,b.renderInside(),b.render(b.value),b.update(c)})),this.watchMutations=!0,this.startWatchingMutations()}catch(c){a=c}},a.prototype.startWatchingMutations=function(){return this.watchMutations?this.observer.observe(this.el,{childList:!0}):void 0},a.prototype.stopWatchingMutations=function(){var a;return null!=(a=this.observer)?a.disconnect():void 0},a.prototype.cleanValue=function(a){var b;return"string"==typeof a&&(a=a.replace(null!=(b=this.format.radix)?b:".",""),a=a.replace(/[.,]/g,""),a=a.replace("","."),a=parseFloat(a,10)||0),x(a,this.format.precision)},a.prototype.bindTransitionEnd=function(){var a,b,c,d,e,f,g=this;if(!this.transitionEndBound){for(this.transitionEndBound=!0,b=!1,e=o.split(" "),f=[],c=0,d=e.length;d>c;c++)a=e[c],f.push(this.el.addEventListener(a,function(){return b?!0:(b=!0,setTimeout(function(){return g.render(),b=!1,z(g.el,"odometerdone")},0),!0)},!1));return f}},a.prototype.resetFormat=function(){var a,b,d,e,f,g,i,j;if(a=null!=(i=this.options.format)?i:c,a||(a="d"),d=h.exec(a),!d)throw new Error("Odometer: Unparsable digit format");return j=d.slice(1,4),g=j[0],f=j[1],b=j[2],e=(null!=b?b.length:void 0)||0,this.format={repeating:g,radix:f,precision:e}},a.prototype.render=function(a){var b,c,d,e,f,g,h;for(null==a&&(a=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.innerHTML="",f=this.options.theme,b=this.el.className.split(" "),e=[],g=0,h=b.length;h>g;g++)c=b[g],c.length&&((d=/^odometer-theme-(.+)$/.exec(c))?f=d[1]:/^odometer(-|$)/.test(c)||e.push(c));return e.push("odometer"),p||e.push("odometer-no-transitions"),f?e.push("odometer-theme-"+f):e.push("odometer-auto-theme"),this.el.className=e.join(" "),this.ribbons={},this.formatDigits(a),this.startWatchingMutations()},a.prototype.formatDigits=function(a){var b,c,d,e,f,g,h,i,j,k;if(this.digits=[],this.options.formatFunction)for(d=this.options.formatFunction(a),j=d.split("").reverse(),f=0,h=j.length;h>f;f++)c=j[f],c.match(/0-9/)?(b=this.renderDigit(),b.querySelector(".odometer-value").innerHTML=c,this.digits.push(b),this.insertDigit(b)):this.addSpacer(c);else for(e=!this.format.precision||!t(a)||!1,k=a.toString().split("").reverse(),g=0,i=k.length;i>g;g++)b=k[g],"."===b&&(e=!0),this.addDigit(b,e)},a.prototype.update=function(a){var b,c=this;return a=this.cleanValue(a),(b=a-this.value)?(v(this.el,"odometer-animating-up odometer-animating-down odometer-animating"),b>0?r(this.el,"odometer-animating-up"):r(this.el,"odometer-animating-down"),this.stopWatchingMutations(),this.animate(a),this.startWatchingMutations(),setTimeout(function(){return c.el.offsetHeight,r(c.el,"odometer-animating")},0),this.value=a):void 0},a.prototype.renderDigit=function(){return s(d)},a.prototype.insertDigit=function(a,b){return null!=b?this.inside.insertBefore(a,b):this.inside.children.length?this.inside.insertBefore(a,this.inside.children[0]):this.inside.appendChild(a)},a.prototype.addSpacer=function(a,b,c){var d;return d=s(g),d.innerHTML=a,c&&r(d,c),this.insertDigit(d,b)},a.prototype.addDigit=function(a,b){var c,d,e,f;if(null==b&&(b=!0),"-"===a)return this.addSpacer(a,null,"odometer-negation-mark");if("."===a)return this.addSpacer(null!=(f=this.format.radix)?f:".",null,"odometer-radix-mark");if(b)for(e=!1;;){if(!this.format.repeating.length){if(e)throw new Error("Bad odometer format without digits");this.resetFormat(),e=!0}if(c=this.format.repeating[this.format.repeating.length-1],this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),"d"===c)break;this.addSpacer(c)}return d=this.renderDigit(),d.querySelector(".odometer-value").innerHTML=a,this.digits.push(d),this.insertDigit(d)},a.prototype.animate=function(a){return p&&"count"!==this.options.animation?this.animateSlide(a):this.animateCount(a)},a.prototype.animateCount=function(a){var c,d,e,f,g,h=this;if(d=+a-this.value)return f=e=u(),c=this.value,(g=function(){var i,j,k;return u()-f>h.options.duration?(h.value=a,h.render(),void z(h.el,"odometerdone")):(i=u()-e,i>b&&(e=u(),k=i/h.options.duration,j=d*k,c+=j,h.render(Math.round(c))),null!=w?w(g):setTimeout(g,b))})()},a.prototype.getDigitCount=function(){var a,b,c,d,e,f;for(d=1<=arguments.length?G.call(arguments,0):[],a=e=0,f=d.length;f>e;a=++e)c=d[a],d[a]=Math.abs(c);return b=Math.max.apply(Math,d),Math.ceil(Math.log(b+1)/Math.log(10))},a.prototype.getFractionalDigitCount=function(){var a,b,c,d,e,f,g;for(e=1<=arguments.length?G.call(arguments,0):[],b=/^\-?\d*\.(\d*?)0*$/,a=f=0,g=e.length;g>f;a=++f)d=e[a],e[a]=d.toString(),c=b.exec(e[a]),null==c?e[a]=0:e[a]=c[1].length;return Math.max.apply(Math,e)},a.prototype.resetDigits=function(){return this.digits=[],this.ribbons=[],this.inside.innerHTML="",this.resetFormat()},a.prototype.animateSlide=function(a){var b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,s,t,u,v,w,x,y,z,B,C,D,E;if(s=this.value,j=this.getFractionalDigitCount(s,a),j&&(a*=Math.pow(10,j),s*=Math.pow(10,j)),d=a-s){for(this.bindTransitionEnd(),f=this.getDigitCount(s,a),g=[],b=0,m=v=0;f>=0?f>v:v>f;m=f>=0?++v:--v){if(t=A(s/Math.pow(10,f-m-1)),i=A(a/Math.pow(10,f-m-1)),h=i-t,Math.abs(h)>this.MAX_VALUES){for(l=[],n=h/(this.MAX_VALUES+this.MAX_VALUES*b*e),c=t;h>0&&i>c||0>h&&c>i;)l.push(Math.round(c)),c+=n;l[l.length-1]!==i&&l.push(i),b++}else l=function(){E=[];for(var a=t;i>=t?i>=a:a>=i;i>=t?a++:a--)E.push(a);return E}.apply(this);for(m=w=0,y=l.length;y>w;m=++w)k=l[m],l[m]=Math.abs(k%10);g.push(l)}for(this.resetDigits(),D=g.reverse(),m=x=0,z=D.length;z>x;m=++x)for(l=D[m],this.digits[m]||this.addDigit(" ",m>=j),null==(u=this.ribbons)[m]&&(u[m]=this.digits[m].querySelector(".odometer-ribbon-inner")),this.ribbons[m].innerHTML="",0>d&&(l=l.reverse()),o=C=0,B=l.length;B>C;o=++C)k=l[o],q=document.createElement("div"),q.className="odometer-value",q.innerHTML=k,this.ribbons[m].appendChild(q),o===l.length-1&&r(q,"odometer-last-value"),0===o&&r(q,"odometer-first-value");return 0>t&&this.addDigit("-"),p=this.inside.querySelector(".odometer-radix-mark"),null!=p&&p.parent.removeChild(p),j?this.addSpacer(this.format.radix,this.digits[j-1],"odometer-radix-mark"):void 0}},a}(),m.options=null!=(E=window.odometerOptions)?E:{},setTimeout(function(){var a,b,c,d,e;if(window.odometerOptions){d=window.odometerOptions,e=[];for(a in d)b=d[a],e.push(null!=(c=m.options)[a]?(c=m.options)[a]:c[a]=b);return e}},0),m.init=function(){var a,b,c,d,e,f;if(null!=document.querySelectorAll){for(b=document.querySelectorAll(m.options.selector||".odometer"),f=[],c=0,d=b.length;d>c;c++)a=b[c],f.push(a.odometer=new m({el:a,value:null!=(e=a.innerText)?e:a.textContent}));return f}},null!=(null!=(F=document.documentElement)?F.doScroll:void 0)&&null!=document.createEventObject?(D=document.onreadystatechange,document.onreadystatechange=function(){return"complete"===document.readyState&&m.options.auto!==!1&&m.init(),null!=D?D.apply(this,arguments):void 0}):document.addEventListener("DOMContentLoaded",function(){return m.options.auto!==!1?m.init():void 0},!1), true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function(){return m}.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), 112 | __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):"undefined"!=typeof exports&&null!==exports?module.exports=m:window.Odometer=m}).call(this); 113 | 114 | 115 | /***/ }), 116 | /* 2 */ 117 | /***/ (function(module, exports) { 118 | 119 | // removed by extract-text-webpack-plugin 120 | 121 | /***/ }), 122 | /* 3 */ 123 | /***/ (function(module, exports) { 124 | 125 | // removed by extract-text-webpack-plugin 126 | 127 | /***/ }), 128 | /* 4 */ 129 | /***/ (function(module, exports) { 130 | 131 | // removed by extract-text-webpack-plugin 132 | 133 | /***/ }), 134 | /* 5 */ 135 | /***/ (function(module, exports) { 136 | 137 | // removed by extract-text-webpack-plugin 138 | 139 | /***/ }), 140 | /* 6 */ 141 | /***/ (function(module, exports) { 142 | 143 | // removed by extract-text-webpack-plugin 144 | 145 | /***/ }), 146 | /* 7 */ 147 | /***/ (function(module, exports) { 148 | 149 | // removed by extract-text-webpack-plugin 150 | 151 | /***/ }), 152 | /* 8 */ 153 | /***/ (function(module, exports) { 154 | 155 | // removed by extract-text-webpack-plugin 156 | 157 | /***/ }), 158 | /* 9 */ 159 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 160 | 161 | "use strict"; 162 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_bustCache_VueOdometer_vue__ = __webpack_require__(11); 163 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_bustCache_VueOdometer_vue___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_bustCache_VueOdometer_vue__); 164 | /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_59dff9dd_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_bustCache_VueOdometer_vue__ = __webpack_require__(12); 165 | var disposed = false 166 | var normalizeComponent = __webpack_require__(10) 167 | /* script */ 168 | 169 | /* template */ 170 | 171 | /* template functional */ 172 | var __vue_template_functional__ = false 173 | /* styles */ 174 | var __vue_styles__ = null 175 | /* scopeId */ 176 | var __vue_scopeId__ = null 177 | /* moduleIdentifier (server only) */ 178 | var __vue_module_identifier__ = null 179 | var Component = normalizeComponent( 180 | __WEBPACK_IMPORTED_MODULE_0__babel_loader_node_modules_vue_loader_lib_selector_type_script_index_0_bustCache_VueOdometer_vue___default.a, 181 | __WEBPACK_IMPORTED_MODULE_1__node_modules_vue_loader_lib_template_compiler_index_id_data_v_59dff9dd_hasScoped_false_buble_transforms_node_modules_vue_loader_lib_selector_type_template_index_0_bustCache_VueOdometer_vue__["a" /* default */], 182 | __vue_template_functional__, 183 | __vue_styles__, 184 | __vue_scopeId__, 185 | __vue_module_identifier__ 186 | ) 187 | Component.options.__file = "components\\VueOdometer.vue" 188 | if (Component.esModule && Object.keys(Component.esModule).some(function (key) { return key !== "default" && key.substr(0, 2) !== "__"})) { console.error("named exports are not supported in *.vue files.")} 189 | 190 | /* hot reload */ 191 | if (false) {(function () { 192 | var hotAPI = require("vue-hot-reload-api") 193 | hotAPI.install(require("vue"), false) 194 | if (!hotAPI.compatible) return 195 | module.hot.accept() 196 | if (!module.hot.data) { 197 | hotAPI.createRecord("data-v-59dff9dd", Component.options) 198 | } else { 199 | hotAPI.reload("data-v-59dff9dd", Component.options) 200 | ' + ' } 201 | module.hot.dispose(function (data) { 202 | disposed = true 203 | }) 204 | })()} 205 | 206 | /* harmony default export */ __webpack_exports__["a"] = (Component.exports); 207 | 208 | 209 | /***/ }), 210 | /* 10 */ 211 | /***/ (function(module, exports) { 212 | 213 | /* globals __VUE_SSR_CONTEXT__ */ 214 | 215 | // IMPORTANT: Do NOT use ES2015 features in this file. 216 | // This module is a runtime utility for cleaner component module output and will 217 | // be included in the final webpack user bundle. 218 | 219 | module.exports = function normalizeComponent ( 220 | rawScriptExports, 221 | compiledTemplate, 222 | functionalTemplate, 223 | injectStyles, 224 | scopeId, 225 | moduleIdentifier /* server only */ 226 | ) { 227 | var esModule 228 | var scriptExports = rawScriptExports = rawScriptExports || {} 229 | 230 | // ES6 modules interop 231 | var type = typeof rawScriptExports.default 232 | if (type === 'object' || type === 'function') { 233 | esModule = rawScriptExports 234 | scriptExports = rawScriptExports.default 235 | } 236 | 237 | // Vue.extend constructor export interop 238 | var options = typeof scriptExports === 'function' 239 | ? scriptExports.options 240 | : scriptExports 241 | 242 | // render functions 243 | if (compiledTemplate) { 244 | options.render = compiledTemplate.render 245 | options.staticRenderFns = compiledTemplate.staticRenderFns 246 | options._compiled = true 247 | } 248 | 249 | // functional template 250 | if (functionalTemplate) { 251 | options.functional = true 252 | } 253 | 254 | // scopedId 255 | if (scopeId) { 256 | options._scopeId = scopeId 257 | } 258 | 259 | var hook 260 | if (moduleIdentifier) { // server build 261 | hook = function (context) { 262 | // 2.3 injection 263 | context = 264 | context || // cached call 265 | (this.$vnode && this.$vnode.ssrContext) || // stateful 266 | (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional 267 | // 2.2 with runInNewContext: true 268 | if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') { 269 | context = __VUE_SSR_CONTEXT__ 270 | } 271 | // inject component styles 272 | if (injectStyles) { 273 | injectStyles.call(this, context) 274 | } 275 | // register component module identifier for async chunk inferrence 276 | if (context && context._registeredComponents) { 277 | context._registeredComponents.add(moduleIdentifier) 278 | } 279 | } 280 | // used by ssr in case component is cached and beforeCreate 281 | // never gets called 282 | options._ssrRegister = hook 283 | } else if (injectStyles) { 284 | hook = injectStyles 285 | } 286 | 287 | if (hook) { 288 | var functional = options.functional 289 | var existing = functional 290 | ? options.render 291 | : options.beforeCreate 292 | 293 | if (!functional) { 294 | // inject component registration as beforeCreate hook 295 | options.beforeCreate = existing 296 | ? [].concat(existing, hook) 297 | : [hook] 298 | } else { 299 | // for template-only hot-reload because in that case the render fn doesn't 300 | // go through the normalizer 301 | options._injectStyles = hook 302 | // register for functioal component in vue file 303 | options.render = function renderWithStyleInjection (h, context) { 304 | hook.call(context) 305 | return existing(h, context) 306 | } 307 | } 308 | } 309 | 310 | return { 311 | esModule: esModule, 312 | exports: scriptExports, 313 | options: options 314 | } 315 | } 316 | 317 | 318 | /***/ }), 319 | /* 11 */ 320 | /***/ (function(module, exports, __webpack_require__) { 321 | 322 | "use strict"; 323 | 324 | 325 | Object.defineProperty(exports, "__esModule", { 326 | value: true 327 | }); 328 | // 329 | // 330 | // 331 | // 332 | 333 | exports.default = { 334 | name: "VueOdometer", 335 | props: { 336 | className: { 337 | type: String, 338 | default: "odometer" 339 | }, 340 | value: { 341 | type: Number, 342 | required: false, 343 | default: 0 344 | }, 345 | format: { 346 | type: String, 347 | required: false, 348 | default: '(.ddd),dd' 349 | }, 350 | theme: { 351 | type: String, 352 | required: false, 353 | default: 'minimal' 354 | }, 355 | duration: { 356 | type: Number, 357 | required: false, 358 | default: 3000 359 | }, 360 | animation: { 361 | type: String, 362 | required: false, 363 | default: 'count' 364 | }, 365 | formatFunction: { 366 | type: Function, 367 | required: false 368 | } 369 | }, 370 | data: function data() { 371 | return { 372 | instance: null 373 | }; 374 | }, 375 | watch: { 376 | value: { 377 | handler: function handler(value) { 378 | if (this.instance && this.instance.update) { 379 | this.instance.update(value); 380 | } 381 | }, 382 | deep: false 383 | } 384 | }, 385 | mounted: function mounted() { 386 | this.instance = new Odometer({ 387 | el: this.$el, 388 | value: this.value, 389 | theme: this.theme, 390 | format: this.format, 391 | duration: this.duration, 392 | animation: this.animation 393 | }); 394 | 395 | this.instance.render(); 396 | } 397 | }; 398 | 399 | /***/ }), 400 | /* 12 */ 401 | /***/ (function(module, __webpack_exports__, __webpack_require__) { 402 | 403 | "use strict"; 404 | var render = function() { 405 | var _vm = this 406 | var _h = _vm.$createElement 407 | var _c = _vm._self._c || _h 408 | return _c("span", { class: _vm.className }) 409 | } 410 | var staticRenderFns = [] 411 | render._withStripped = true 412 | var esExports = { render: render, staticRenderFns: staticRenderFns } 413 | /* harmony default export */ __webpack_exports__["a"] = (esExports); 414 | if (false) { 415 | module.hot.accept() 416 | if (module.hot.data) { 417 | require("vue-hot-reload-api") .rerender("data-v-59dff9dd", esExports) 418 | } 419 | } 420 | 421 | /***/ }) 422 | /******/ ]); 423 | //# sourceMappingURL=main.dev.js.map -------------------------------------------------------------------------------- /dist/main.dev.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack/bootstrap 853403ec1bb3b8e1df6a","webpack:///./index.js","webpack:///../node_modules/odometer/odometer.min.js","webpack:///../node_modules/odometer/themes/odometer-theme-car.css","webpack:///../node_modules/odometer/themes/odometer-theme-default.css","webpack:///../node_modules/odometer/themes/odometer-theme-digital.css","webpack:///../node_modules/odometer/themes/odometer-theme-minimal.css","webpack:///../node_modules/odometer/themes/odometer-theme-plaza.css","webpack:///../node_modules/odometer/themes/odometer-theme-slot-machine.css","webpack:///../node_modules/odometer/themes/odometer-theme-train-station.css","webpack:///./components/VueOdometer.vue","webpack:///../node_modules/vue-loader/lib/component-normalizer.js","webpack:///components/VueOdometer.vue","webpack:///./components/VueOdometer.vue?c18d"],"names":[],"mappings":";AAAA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAK;AACL;AACA;;AAEA;AACA;AACA;AACA,mCAA2B,0BAA0B,EAAE;AACvD,yCAAiC,eAAe;AAChD;AACA;AACA;;AAEA;AACA,8DAAsD,+DAA+D;;AAErH;AACA;;AAEA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;AC7DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA,uI;;;;;;ACfA;AACA,YAAY,+EAA+E,60BAA60B,MAAM,mEAAmE,iBAAiB,oGAAoG,iBAAiB,iCAAiC,iBAAiB,MAAM,wHAAwH,cAAc,QAAQ,mGAAmG,iBAAiB,kGAAkG,eAAe,sCAAsC,eAAe,cAAc,oBAAoB,cAAc,4BAA4B,+CAA+C,IAAI,8BAA8B,MAAM,6DAA6D,MAAM,gHAAgH,KAAK,UAAU,iCAAiC,cAAc,+BAA+B,yFAAyF,kCAAkC,6DAA6D,+MAA+M,IAAI,6DAA6D,IAAI,0CAA0C,qCAAqC,eAAe,MAAM,6FAA6F,iBAAiB,oBAAoB,EAAE,IAAI,SAAS,8BAA8B,2CAA2C,+IAA+I,0CAA0C,aAAa,eAAe,6DAA6D,MAAM,uEAAuE,wDAAwD,SAAS,KAAK,+CAA+C,0DAA0D,aAAa,SAAS,8CAA8C,MAAM,qDAAqD,oCAAoC,MAAM,yLAAyL,0CAA0C,uBAAuB,6BAA6B,uEAAuE,IAAI,wDAAwD,wCAAwC,8CAA8C,QAAQ,MAAM,UAAU,oCAAoC,oBAAoB,sHAAsH,uFAAuF,iCAAiC,gCAAgC,kBAAkB,6KAA6K,IAAI,sGAAsG,wKAAwK,oDAAoD,sCAAsC,wBAAwB,0HAA0H,IAAI,0JAA0J,+FAA+F,IAAI,8CAA8C,gCAAgC,aAAa,ySAAyS,sDAAsD,yBAAyB,oCAAoC,YAAY,uCAAuC,wJAAwJ,uCAAuC,MAAM,4DAA4D,oCAAoC,YAAY,kFAAkF,+FAA+F,eAAe,EAAE,kCAAkC,2DAA2D,wBAAwB,iKAAiK,kBAAkB,mHAAmH,iCAAiC,qFAAqF,sCAAsC,qBAAqB,6DAA6D,UAAU,iMAAiM,IAAI,sCAAsC,gBAAgB,kEAAkE,IAAI,8BAA8B,sEAAsE,gDAAgD,kBAAkB,yFAAyF,IAAI,8EAA8E,8BAA8B,oCAAoC,kFAAkF,sCAAsC,0DAA0D,oGAAoG,sEAAsE,aAAa,gBAAgB,0FAA0F,uDAAuD,mBAAmB,4BAA4B,iCAAiC,kBAAkB,KAAK,YAAY,eAAe,uBAAuB,SAAS,aAAa,qBAAqB,IAAI,iCAAiC,UAAU,sDAAsD,IAAI,qNAAqN,IAAI,qMAAqM,uMAAuM,GAAG,kDAAkD,uBAAuB,cAAc,2BAA2B,8BAA8B,yEAAyE,UAAU,sBAAsB,gBAAgB,oCAAoC,qFAAqF,IAAI,oCAAoC,iDAAiD,GAAG,UAAU,sKAAsK,6GAA6G,0DAA0D,2CAA2C,2FAAgE,SAAS;AAAA,oLAAiF;;;;;;;ACDp/T,yC;;;;;;ACAA,yC;;;;;;ACAA,yC;;;;;;ACAA,yC;;;;;;ACAA,yC;;;;;;ACAA,yC;;;;;;ACAA,yC;;;;;;;;;ACAA;AAAA;AACA;AACA;AACA;AACA;AACwK;AACxK;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+EAA+E,wDAAwD,IAAI;;AAE3I;AACA,YAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;;;;;;;ACzCA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;ACjGA;;;OAEA;;;SAGA;YAEA;AAHA;;SAKA;aACA;YAEA;AAJA;;SAMA;aACA;YAEA;AAJA;;SAMA;aACA;YAEA;AAJA;;SAMA;aACA;YAEA;AAJA;;SAMA;aACA;YAEA;AAJA;;SAMA;aAGA;AAJA;AA9BA;uBAmCA;;aAGA;AAFA;AAGA;;;6BAGA,OACA;+CACA;0BACA;AACA;AACA;SAGA;AATA;AADA;6BAWA;;YAEA;eACA;eACA;gBACA;kBACA;mBAGA;AARA;;gBASA;AACA;AAhEA,E;;;;;;;ACNA;AACA;AACA;AACA;AACA,qBAAqB,uBAAuB;AAC5C;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,C","file":"main.dev.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 853403ec1bb3b8e1df6a","import Odometer from 'odometer/odometer.min.js'\r\nimport 'odometer/themes/odometer-theme-car.css'\r\nimport 'odometer/themes/odometer-theme-default.css'\r\nimport 'odometer/themes/odometer-theme-digital.css'\r\nimport 'odometer/themes/odometer-theme-minimal.css'\r\nimport 'odometer/themes/odometer-theme-plaza.css'\r\nimport 'odometer/themes/odometer-theme-slot-machine.css'\r\nimport 'odometer/themes/odometer-theme-train-station.css'\r\nimport VueOdometer from './components/VueOdometer'\r\n\r\nif (typeof window !== 'undefined' && window.Vue)\r\n{\r\n\twindow.Vue.component('vue-odometer', VueOdometer)\r\n}\r\n\r\nexport default VueOdometer\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./index.js\n// module id = 0\n// module chunks = 0","/*! odometer 0.4.8 */\n(function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G=[].slice;q='',n=''+q+\"\",d='8'+n+\"\",g='',c=\"(,ddd).dd\",h=/^\\(?([^)]*)\\)?(?:(.)(d+))?$/,i=30,f=2e3,a=20,j=2,e=.5,k=1e3/i,b=1e3/a,o=\"transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd\",y=document.createElement(\"div\").style,p=null!=y.transition||null!=y.webkitTransition||null!=y.mozTransition||null!=y.oTransition,w=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,l=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,s=function(a){var b;return b=document.createElement(\"div\"),b.innerHTML=a,b.children[0]},v=function(a,b){return a.className=a.className.replace(new RegExp(\"(^| )\"+b.split(\" \").join(\"|\")+\"( |$)\",\"gi\"),\" \")},r=function(a,b){return v(a,b),a.className+=\" \"+b},z=function(a,b){var c;return null!=document.createEvent?(c=document.createEvent(\"HTMLEvents\"),c.initEvent(b,!0,!0),a.dispatchEvent(c)):void 0},u=function(){var a,b;return null!=(a=null!=(b=window.performance)&&\"function\"==typeof b.now?b.now():void 0)?a:+new Date},x=function(a,b){return null==b&&(b=0),b?(a*=Math.pow(10,b),a+=.5,a=Math.floor(a),a/=Math.pow(10,b)):Math.round(a)},A=function(a){return 0>a?Math.ceil(a):Math.floor(a)},t=function(a){return a-x(a)},C=!1,(B=function(){var a,b,c,d,e;if(!C&&null!=window.jQuery){for(C=!0,d=[\"html\",\"text\"],e=[],b=0,c=d.length;c>b;b++)a=d[b],e.push(function(a){var b;return b=window.jQuery.fn[a],window.jQuery.fn[a]=function(a){var c;return null==a||null==(null!=(c=this[0])?c.odometer:void 0)?b.apply(this,arguments):this[0].odometer.update(a)}}(a));return e}})(),setTimeout(B,0),m=function(){function a(b){var c,d,e,g,h,i,l,m,n,o,p=this;if(this.options=b,this.el=this.options.el,null!=this.el.odometer)return this.el.odometer;this.el.odometer=this,m=a.options;for(d in m)g=m[d],null==this.options[d]&&(this.options[d]=g);null==(h=this.options).duration&&(h.duration=f),this.MAX_VALUES=this.options.duration/k/j|0,this.resetFormat(),this.value=this.cleanValue(null!=(n=this.options.value)?n:\"\"),this.renderInside(),this.render();try{for(o=[\"innerHTML\",\"innerText\",\"textContent\"],i=0,l=o.length;l>i;i++)e=o[i],null!=this.el[e]&&!function(a){return Object.defineProperty(p.el,a,{get:function(){var b;return\"innerHTML\"===a?p.inside.outerHTML:null!=(b=p.inside.innerText)?b:p.inside.textContent},set:function(a){return p.update(a)}})}(e)}catch(q){c=q,this.watchForMutations()}}return a.prototype.renderInside=function(){return this.inside=document.createElement(\"div\"),this.inside.className=\"odometer-inside\",this.el.innerHTML=\"\",this.el.appendChild(this.inside)},a.prototype.watchForMutations=function(){var a,b=this;if(null!=l)try{return null==this.observer&&(this.observer=new l(function(a){var c;return c=b.el.innerText,b.renderInside(),b.render(b.value),b.update(c)})),this.watchMutations=!0,this.startWatchingMutations()}catch(c){a=c}},a.prototype.startWatchingMutations=function(){return this.watchMutations?this.observer.observe(this.el,{childList:!0}):void 0},a.prototype.stopWatchingMutations=function(){var a;return null!=(a=this.observer)?a.disconnect():void 0},a.prototype.cleanValue=function(a){var b;return\"string\"==typeof a&&(a=a.replace(null!=(b=this.format.radix)?b:\".\",\"\"),a=a.replace(/[.,]/g,\"\"),a=a.replace(\"\",\".\"),a=parseFloat(a,10)||0),x(a,this.format.precision)},a.prototype.bindTransitionEnd=function(){var a,b,c,d,e,f,g=this;if(!this.transitionEndBound){for(this.transitionEndBound=!0,b=!1,e=o.split(\" \"),f=[],c=0,d=e.length;d>c;c++)a=e[c],f.push(this.el.addEventListener(a,function(){return b?!0:(b=!0,setTimeout(function(){return g.render(),b=!1,z(g.el,\"odometerdone\")},0),!0)},!1));return f}},a.prototype.resetFormat=function(){var a,b,d,e,f,g,i,j;if(a=null!=(i=this.options.format)?i:c,a||(a=\"d\"),d=h.exec(a),!d)throw new Error(\"Odometer: Unparsable digit format\");return j=d.slice(1,4),g=j[0],f=j[1],b=j[2],e=(null!=b?b.length:void 0)||0,this.format={repeating:g,radix:f,precision:e}},a.prototype.render=function(a){var b,c,d,e,f,g,h;for(null==a&&(a=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.innerHTML=\"\",f=this.options.theme,b=this.el.className.split(\" \"),e=[],g=0,h=b.length;h>g;g++)c=b[g],c.length&&((d=/^odometer-theme-(.+)$/.exec(c))?f=d[1]:/^odometer(-|$)/.test(c)||e.push(c));return e.push(\"odometer\"),p||e.push(\"odometer-no-transitions\"),f?e.push(\"odometer-theme-\"+f):e.push(\"odometer-auto-theme\"),this.el.className=e.join(\" \"),this.ribbons={},this.formatDigits(a),this.startWatchingMutations()},a.prototype.formatDigits=function(a){var b,c,d,e,f,g,h,i,j,k;if(this.digits=[],this.options.formatFunction)for(d=this.options.formatFunction(a),j=d.split(\"\").reverse(),f=0,h=j.length;h>f;f++)c=j[f],c.match(/0-9/)?(b=this.renderDigit(),b.querySelector(\".odometer-value\").innerHTML=c,this.digits.push(b),this.insertDigit(b)):this.addSpacer(c);else for(e=!this.format.precision||!t(a)||!1,k=a.toString().split(\"\").reverse(),g=0,i=k.length;i>g;g++)b=k[g],\".\"===b&&(e=!0),this.addDigit(b,e)},a.prototype.update=function(a){var b,c=this;return a=this.cleanValue(a),(b=a-this.value)?(v(this.el,\"odometer-animating-up odometer-animating-down odometer-animating\"),b>0?r(this.el,\"odometer-animating-up\"):r(this.el,\"odometer-animating-down\"),this.stopWatchingMutations(),this.animate(a),this.startWatchingMutations(),setTimeout(function(){return c.el.offsetHeight,r(c.el,\"odometer-animating\")},0),this.value=a):void 0},a.prototype.renderDigit=function(){return s(d)},a.prototype.insertDigit=function(a,b){return null!=b?this.inside.insertBefore(a,b):this.inside.children.length?this.inside.insertBefore(a,this.inside.children[0]):this.inside.appendChild(a)},a.prototype.addSpacer=function(a,b,c){var d;return d=s(g),d.innerHTML=a,c&&r(d,c),this.insertDigit(d,b)},a.prototype.addDigit=function(a,b){var c,d,e,f;if(null==b&&(b=!0),\"-\"===a)return this.addSpacer(a,null,\"odometer-negation-mark\");if(\".\"===a)return this.addSpacer(null!=(f=this.format.radix)?f:\".\",null,\"odometer-radix-mark\");if(b)for(e=!1;;){if(!this.format.repeating.length){if(e)throw new Error(\"Bad odometer format without digits\");this.resetFormat(),e=!0}if(c=this.format.repeating[this.format.repeating.length-1],this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),\"d\"===c)break;this.addSpacer(c)}return d=this.renderDigit(),d.querySelector(\".odometer-value\").innerHTML=a,this.digits.push(d),this.insertDigit(d)},a.prototype.animate=function(a){return p&&\"count\"!==this.options.animation?this.animateSlide(a):this.animateCount(a)},a.prototype.animateCount=function(a){var c,d,e,f,g,h=this;if(d=+a-this.value)return f=e=u(),c=this.value,(g=function(){var i,j,k;return u()-f>h.options.duration?(h.value=a,h.render(),void z(h.el,\"odometerdone\")):(i=u()-e,i>b&&(e=u(),k=i/h.options.duration,j=d*k,c+=j,h.render(Math.round(c))),null!=w?w(g):setTimeout(g,b))})()},a.prototype.getDigitCount=function(){var a,b,c,d,e,f;for(d=1<=arguments.length?G.call(arguments,0):[],a=e=0,f=d.length;f>e;a=++e)c=d[a],d[a]=Math.abs(c);return b=Math.max.apply(Math,d),Math.ceil(Math.log(b+1)/Math.log(10))},a.prototype.getFractionalDigitCount=function(){var a,b,c,d,e,f,g;for(e=1<=arguments.length?G.call(arguments,0):[],b=/^\\-?\\d*\\.(\\d*?)0*$/,a=f=0,g=e.length;g>f;a=++f)d=e[a],e[a]=d.toString(),c=b.exec(e[a]),null==c?e[a]=0:e[a]=c[1].length;return Math.max.apply(Math,e)},a.prototype.resetDigits=function(){return this.digits=[],this.ribbons=[],this.inside.innerHTML=\"\",this.resetFormat()},a.prototype.animateSlide=function(a){var b,c,d,f,g,h,i,j,k,l,m,n,o,p,q,s,t,u,v,w,x,y,z,B,C,D,E;if(s=this.value,j=this.getFractionalDigitCount(s,a),j&&(a*=Math.pow(10,j),s*=Math.pow(10,j)),d=a-s){for(this.bindTransitionEnd(),f=this.getDigitCount(s,a),g=[],b=0,m=v=0;f>=0?f>v:v>f;m=f>=0?++v:--v){if(t=A(s/Math.pow(10,f-m-1)),i=A(a/Math.pow(10,f-m-1)),h=i-t,Math.abs(h)>this.MAX_VALUES){for(l=[],n=h/(this.MAX_VALUES+this.MAX_VALUES*b*e),c=t;h>0&&i>c||0>h&&c>i;)l.push(Math.round(c)),c+=n;l[l.length-1]!==i&&l.push(i),b++}else l=function(){E=[];for(var a=t;i>=t?i>=a:a>=i;i>=t?a++:a--)E.push(a);return E}.apply(this);for(m=w=0,y=l.length;y>w;m=++w)k=l[m],l[m]=Math.abs(k%10);g.push(l)}for(this.resetDigits(),D=g.reverse(),m=x=0,z=D.length;z>x;m=++x)for(l=D[m],this.digits[m]||this.addDigit(\" \",m>=j),null==(u=this.ribbons)[m]&&(u[m]=this.digits[m].querySelector(\".odometer-ribbon-inner\")),this.ribbons[m].innerHTML=\"\",0>d&&(l=l.reverse()),o=C=0,B=l.length;B>C;o=++C)k=l[o],q=document.createElement(\"div\"),q.className=\"odometer-value\",q.innerHTML=k,this.ribbons[m].appendChild(q),o===l.length-1&&r(q,\"odometer-last-value\"),0===o&&r(q,\"odometer-first-value\");return 0>t&&this.addDigit(\"-\"),p=this.inside.querySelector(\".odometer-radix-mark\"),null!=p&&p.parent.removeChild(p),j?this.addSpacer(this.format.radix,this.digits[j-1],\"odometer-radix-mark\"):void 0}},a}(),m.options=null!=(E=window.odometerOptions)?E:{},setTimeout(function(){var a,b,c,d,e;if(window.odometerOptions){d=window.odometerOptions,e=[];for(a in d)b=d[a],e.push(null!=(c=m.options)[a]?(c=m.options)[a]:c[a]=b);return e}},0),m.init=function(){var a,b,c,d,e,f;if(null!=document.querySelectorAll){for(b=document.querySelectorAll(m.options.selector||\".odometer\"),f=[],c=0,d=b.length;d>c;c++)a=b[c],f.push(a.odometer=new m({el:a,value:null!=(e=a.innerText)?e:a.textContent}));return f}},null!=(null!=(F=document.documentElement)?F.doScroll:void 0)&&null!=document.createEventObject?(D=document.onreadystatechange,document.onreadystatechange=function(){return\"complete\"===document.readyState&&m.options.auto!==!1&&m.init(),null!=D?D.apply(this,arguments):void 0}):document.addEventListener(\"DOMContentLoaded\",function(){return m.options.auto!==!1?m.init():void 0},!1),\"function\"==typeof define&&define.amd?define([],function(){return m}):\"undefined\"!=typeof exports&&null!==exports?module.exports=m:window.Odometer=m}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/odometer.min.js\n// module id = 1\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-car.css\n// module id = 2\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-default.css\n// module id = 3\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-digital.css\n// module id = 4\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-minimal.css\n// module id = 5\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-plaza.css\n// module id = 6\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-slot-machine.css\n// module id = 7\n// module chunks = 0","// removed by extract-text-webpack-plugin\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/odometer/themes/odometer-theme-train-station.css\n// module id = 8\n// module chunks = 0","var disposed = false\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0&bustCache!./VueOdometer.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-59dff9dd\\\",\\\"hasScoped\\\":false,\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0&bustCache!./VueOdometer.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = null\n/* scopeId */\nvar __vue_scopeId__ = null\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\nComponent.options.__file = \"components\\\\VueOdometer.vue\"\nif (Component.esModule && Object.keys(Component.esModule).some(function (key) { return key !== \"default\" && key.substr(0, 2) !== \"__\"})) { console.error(\"named exports are not supported in *.vue files.\")}\n\n/* hot reload */\nif (module.hot) {(function () {\n var hotAPI = require(\"vue-hot-reload-api\")\n hotAPI.install(require(\"vue\"), false)\n if (!hotAPI.compatible) return\n module.hot.accept()\n if (!module.hot.data) {\n hotAPI.createRecord(\"data-v-59dff9dd\", Component.options)\n } else {\n hotAPI.reload(\"data-v-59dff9dd\", Component.options)\n' + ' }\n module.hot.dispose(function (data) {\n disposed = true\n })\n})()}\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./components/VueOdometer.vue\n// module id = 9\n// module chunks = 0","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file.\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nmodule.exports = function normalizeComponent (\n rawScriptExports,\n compiledTemplate,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier /* server only */\n) {\n var esModule\n var scriptExports = rawScriptExports = rawScriptExports || {}\n\n // ES6 modules interop\n var type = typeof rawScriptExports.default\n if (type === 'object' || type === 'function') {\n esModule = rawScriptExports\n scriptExports = rawScriptExports.default\n }\n\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (compiledTemplate) {\n options.render = compiledTemplate.render\n options.staticRenderFns = compiledTemplate.staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = injectStyles\n }\n\n if (hook) {\n var functional = options.functional\n var existing = functional\n ? options.render\n : options.beforeCreate\n\n if (!functional) {\n // inject component registration as beforeCreate hook\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n } else {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return existing(h, context)\n }\n }\n }\n\n return {\n esModule: esModule,\n exports: scriptExports,\n options: options\n }\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/vue-loader/lib/component-normalizer.js\n// module id = 10\n// module chunks = 0","\r\n\r\n\n\n\n// WEBPACK FOOTER //\n// components/VueOdometer.vue?20e685de","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"span\", { class: _vm.className })\n}\nvar staticRenderFns = []\nrender._withStripped = true\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\nif (module.hot) {\n module.hot.accept()\n if (module.hot.data) {\n require(\"vue-hot-reload-api\") .rerender(\"data-v-59dff9dd\", esExports)\n }\n}\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-59dff9dd\",\"hasScoped\":false,\"buble\":{\"transforms\":{}}}!../node_modules/vue-loader/lib/selector.js?type=template&index=0&bustCache!./components/VueOdometer.vue\n// module id = 12\n// module chunks = 0"],"sourceRoot":""} -------------------------------------------------------------------------------- /dist/main.prod.js: -------------------------------------------------------------------------------- 1 | !function(t){function e(i){if(n[i])return n[i].exports;var r=n[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,e),r.l=!0,r.exports}var n={};e.m=t,e.c=n,e.d=function(t,n,i){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:i})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=0)}([function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var i=n(2),r=(n.n(i),n(3)),o=(n.n(r),n(4)),s=(n.n(o),n(5)),a=(n.n(s),n(6)),u=(n.n(a),n(7)),d=(n.n(u),n(8)),l=(n.n(d),n(9));n(1);"undefined"!=typeof window&&window.Vue&&window.Vue.component("vue-odometer",l.a),e.default=l.a},function(t,e,n){var i,r;/*! odometer 0.4.8 */ 2 | (function(){var n,o,s,a,u,d,l,h,c,p,f,m,v,g,w,y,M,b,x,T,E,S,_,C,D,F,L,O,A,H,j,N,V=[].slice;M='',g=''+M+"",a='8'+g+"",l='',s="(,ddd).dd",h=/^\(?([^)]*)\)?(?:(.)(d+))?$/,c=30,d=2e3,n=20,p=2,u=.5,f=1e3/c,o=1e3/n,w="transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd",D=document.createElement("div").style,y=null!=D.transition||null!=D.webkitTransition||null!=D.mozTransition||null!=D.oTransition,_=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,m=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver,x=function(t){var e;return e=document.createElement("div"),e.innerHTML=t,e.children[0]},S=function(t,e){return t.className=t.className.replace(new RegExp("(^| )"+e.split(" ").join("|")+"( |$)","gi")," ")},b=function(t,e){return S(t,e),t.className+=" "+e},F=function(t,e){var n;return null!=document.createEvent?(n=document.createEvent("HTMLEvents"),n.initEvent(e,!0,!0),t.dispatchEvent(n)):void 0},E=function(){var t,e;return null!=(t=null!=(e=window.performance)&&"function"==typeof e.now?e.now():void 0)?t:+new Date},C=function(t,e){return null==e&&(e=0),e?(t*=Math.pow(10,e),t+=.5,t=Math.floor(t),t/=Math.pow(10,e)):Math.round(t)},L=function(t){return 0>t?Math.ceil(t):Math.floor(t)},T=function(t){return t-C(t)},A=!1,(O=function(){var t,e,n,i,r;if(!A&&null!=window.jQuery){for(A=!0,i=["html","text"],r=[],e=0,n=i.length;n>e;e++)t=i[e],r.push(function(t){var e;return e=window.jQuery.fn[t],window.jQuery.fn[t]=function(t){var n;return null==t||null==(null!=(n=this[0])?n.odometer:void 0)?e.apply(this,arguments):this[0].odometer.update(t)}}(t));return r}})(),setTimeout(O,0),v=function(){function t(e){var n,i,r,o,s,a,u,l,h,c=this;if(this.options=e,this.el=this.options.el,null!=this.el.odometer)return this.el.odometer;this.el.odometer=this,u=t.options;for(n in u)r=u[n],null==this.options[n]&&(this.options[n]=r);null==(o=this.options).duration&&(o.duration=d),this.MAX_VALUES=this.options.duration/f/p|0,this.resetFormat(),this.value=this.cleanValue(null!=(l=this.options.value)?l:""),this.renderInside(),this.render();try{for(h=["innerHTML","innerText","textContent"],s=0,a=h.length;a>s;s++)i=h[s],null!=this.el[i]&&function(t){Object.defineProperty(c.el,t,{get:function(){var e;return"innerHTML"===t?c.inside.outerHTML:null!=(e=c.inside.innerText)?e:c.inside.textContent},set:function(t){return c.update(t)}})}(i)}catch(t){t,this.watchForMutations()}}return t.prototype.renderInside=function(){return this.inside=document.createElement("div"),this.inside.className="odometer-inside",this.el.innerHTML="",this.el.appendChild(this.inside)},t.prototype.watchForMutations=function(){var t=this;if(null!=m)try{return null==this.observer&&(this.observer=new m(function(e){var n;return n=t.el.innerText,t.renderInside(),t.render(t.value),t.update(n)})),this.watchMutations=!0,this.startWatchingMutations()}catch(t){t}},t.prototype.startWatchingMutations=function(){return this.watchMutations?this.observer.observe(this.el,{childList:!0}):void 0},t.prototype.stopWatchingMutations=function(){var t;return null!=(t=this.observer)?t.disconnect():void 0},t.prototype.cleanValue=function(t){var e;return"string"==typeof t&&(t=t.replace(null!=(e=this.format.radix)?e:".",""),t=t.replace(/[.,]/g,""),t=t.replace("","."),t=parseFloat(t,10)||0),C(t,this.format.precision)},t.prototype.bindTransitionEnd=function(){var t,e,n,i,r,o,s=this;if(!this.transitionEndBound){for(this.transitionEndBound=!0,e=!1,r=w.split(" "),o=[],n=0,i=r.length;i>n;n++)t=r[n],o.push(this.el.addEventListener(t,function(){return!!e||(e=!0,setTimeout(function(){return s.render(),e=!1,F(s.el,"odometerdone")},0),!0)},!1));return o}},t.prototype.resetFormat=function(){var t,e,n,i,r,o,a,u;if(t=null!=(a=this.options.format)?a:s,t||(t="d"),!(n=h.exec(t)))throw new Error("Odometer: Unparsable digit format");return u=n.slice(1,4),o=u[0],r=u[1],e=u[2],i=(null!=e?e.length:void 0)||0,this.format={repeating:o,radix:r,precision:i}},t.prototype.render=function(t){var e,n,i,r,o,s,a;for(null==t&&(t=this.value),this.stopWatchingMutations(),this.resetFormat(),this.inside.innerHTML="",o=this.options.theme,e=this.el.className.split(" "),r=[],s=0,a=e.length;a>s;s++)n=e[s],n.length&&((i=/^odometer-theme-(.+)$/.exec(n))?o=i[1]:/^odometer(-|$)/.test(n)||r.push(n));return r.push("odometer"),y||r.push("odometer-no-transitions"),o?r.push("odometer-theme-"+o):r.push("odometer-auto-theme"),this.el.className=r.join(" "),this.ribbons={},this.formatDigits(t),this.startWatchingMutations()},t.prototype.formatDigits=function(t){var e,n,i,r,o,s,a,u,d,l;if(this.digits=[],this.options.formatFunction)for(i=this.options.formatFunction(t),d=i.split("").reverse(),o=0,a=d.length;a>o;o++)n=d[o],n.match(/0-9/)?(e=this.renderDigit(),e.querySelector(".odometer-value").innerHTML=n,this.digits.push(e),this.insertDigit(e)):this.addSpacer(n);else for(r=!this.format.precision||!T(t)||!1,l=t.toString().split("").reverse(),s=0,u=l.length;u>s;s++)e=l[s],"."===e&&(r=!0),this.addDigit(e,r)},t.prototype.update=function(t){var e,n=this;return t=this.cleanValue(t),(e=t-this.value)?(S(this.el,"odometer-animating-up odometer-animating-down odometer-animating"),e>0?b(this.el,"odometer-animating-up"):b(this.el,"odometer-animating-down"),this.stopWatchingMutations(),this.animate(t),this.startWatchingMutations(),setTimeout(function(){return n.el.offsetHeight,b(n.el,"odometer-animating")},0),this.value=t):void 0},t.prototype.renderDigit=function(){return x(a)},t.prototype.insertDigit=function(t,e){return null!=e?this.inside.insertBefore(t,e):this.inside.children.length?this.inside.insertBefore(t,this.inside.children[0]):this.inside.appendChild(t)},t.prototype.addSpacer=function(t,e,n){var i;return i=x(l),i.innerHTML=t,n&&b(i,n),this.insertDigit(i,e)},t.prototype.addDigit=function(t,e){var n,i,r,o;if(null==e&&(e=!0),"-"===t)return this.addSpacer(t,null,"odometer-negation-mark");if("."===t)return this.addSpacer(null!=(o=this.format.radix)?o:".",null,"odometer-radix-mark");if(e)for(r=!1;;){if(!this.format.repeating.length){if(r)throw new Error("Bad odometer format without digits");this.resetFormat(),r=!0}if(n=this.format.repeating[this.format.repeating.length-1],this.format.repeating=this.format.repeating.substring(0,this.format.repeating.length-1),"d"===n)break;this.addSpacer(n)}return i=this.renderDigit(),i.querySelector(".odometer-value").innerHTML=t,this.digits.push(i),this.insertDigit(i)},t.prototype.animate=function(t){return y&&"count"!==this.options.animation?this.animateSlide(t):this.animateCount(t)},t.prototype.animateCount=function(t){var e,n,i,r,s,a=this;if(n=+t-this.value)return r=i=E(),e=this.value,(s=function(){var u,d,l;return E()-r>a.options.duration?(a.value=t,a.render(),void F(a.el,"odometerdone")):(u=E()-i,u>o&&(i=E(),l=u/a.options.duration,d=n*l,e+=d,a.render(Math.round(e))),null!=_?_(s):setTimeout(s,o))})()},t.prototype.getDigitCount=function(){var t,e,n,i,r,o;for(i=1<=arguments.length?V.call(arguments,0):[],t=r=0,o=i.length;o>r;t=++r)n=i[t],i[t]=Math.abs(n);return e=Math.max.apply(Math,i),Math.ceil(Math.log(e+1)/Math.log(10))},t.prototype.getFractionalDigitCount=function(){var t,e,n,i,r,o,s;for(r=1<=arguments.length?V.call(arguments,0):[],e=/^\-?\d*\.(\d*?)0*$/,t=o=0,s=r.length;s>o;t=++o)i=r[t],r[t]=i.toString(),n=e.exec(r[t]),r[t]=null==n?0:n[1].length;return Math.max.apply(Math,r)},t.prototype.resetDigits=function(){return this.digits=[],this.ribbons=[],this.inside.innerHTML="",this.resetFormat()},t.prototype.animateSlide=function(t){var e,n,i,r,o,s,a,d,l,h,c,p,f,m,v,g,w,y,M,x,T,E,S,_,C,D,F;if(g=this.value,d=this.getFractionalDigitCount(g,t),d&&(t*=Math.pow(10,d),g*=Math.pow(10,d)),i=t-g){for(this.bindTransitionEnd(),r=this.getDigitCount(g,t),o=[],e=0,c=M=0;r>=0?r>M:M>r;c=r>=0?++M:--M){if(w=L(g/Math.pow(10,r-c-1)),a=L(t/Math.pow(10,r-c-1)),s=a-w,Math.abs(s)>this.MAX_VALUES){for(h=[],p=s/(this.MAX_VALUES+this.MAX_VALUES*e*u),n=w;s>0&&a>n||0>s&&n>a;)h.push(Math.round(n)),n+=p;h[h.length-1]!==a&&h.push(a),e++}else h=function(){F=[];for(var t=w;a>=w?a>=t:t>=a;a>=w?t++:t--)F.push(t);return F}.apply(this);for(c=x=0,E=h.length;E>x;c=++x)l=h[c],h[c]=Math.abs(l%10);o.push(h)}for(this.resetDigits(),D=o.reverse(),c=T=0,S=D.length;S>T;c=++T)for(h=D[c],this.digits[c]||this.addDigit(" ",c>=d),null==(y=this.ribbons)[c]&&(y[c]=this.digits[c].querySelector(".odometer-ribbon-inner")),this.ribbons[c].innerHTML="",0>i&&(h=h.reverse()),f=C=0,_=h.length;_>C;f=++C)l=h[f],v=document.createElement("div"),v.className="odometer-value",v.innerHTML=l,this.ribbons[c].appendChild(v),f===h.length-1&&b(v,"odometer-last-value"),0===f&&b(v,"odometer-first-value");return 0>w&&this.addDigit("-"),m=this.inside.querySelector(".odometer-radix-mark"),null!=m&&m.parent.removeChild(m),d?this.addSpacer(this.format.radix,this.digits[d-1],"odometer-radix-mark"):void 0}},t}(),v.options=null!=(j=window.odometerOptions)?j:{},setTimeout(function(){var t,e,n,i,r;if(window.odometerOptions){i=window.odometerOptions,r=[];for(t in i)e=i[t],r.push(null!=(n=v.options)[t]?(n=v.options)[t]:n[t]=e);return r}},0),v.init=function(){var t,e,n,i,r,o;if(null!=document.querySelectorAll){for(e=document.querySelectorAll(v.options.selector||".odometer"),o=[],n=0,i=e.length;i>n;n++)t=e[n],o.push(t.odometer=new v({el:t,value:null!=(r=t.innerText)?r:t.textContent}));return o}},null!=(null!=(N=document.documentElement)?N.doScroll:void 0)&&null!=document.createEventObject?(H=document.onreadystatechange,document.onreadystatechange=function(){return"complete"===document.readyState&&!1!==v.options.auto&&v.init(),null!=H?H.apply(this,arguments):void 0}):document.addEventListener("DOMContentLoaded",function(){return!1!==v.options.auto?v.init():void 0},!1),i=[],void 0!==(r=function(){return v}.apply(e,i))&&(t.exports=r)}).call(this)},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e){},function(t,e,n){"use strict";var i=n(11),r=n.n(i),o=n(12),s=n(10),a=s(r.a,o.a,!1,null,null,null);e.a=a.exports},function(t,e){t.exports=function(t,e,n,i,r,o){var s,a=t=t||{},u=typeof t.default;"object"!==u&&"function"!==u||(s=t,a=t.default);var d="function"==typeof a?a.options:a;e&&(d.render=e.render,d.staticRenderFns=e.staticRenderFns,d._compiled=!0),n&&(d.functional=!0),r&&(d._scopeId=r);var l;if(o?(l=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"==typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),i&&i.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(o)},d._ssrRegister=l):i&&(l=i),l){var h=d.functional,c=h?d.render:d.beforeCreate;h?(d._injectStyles=l,d.render=function(t,e){return l.call(e),c(t,e)}):d.beforeCreate=c?[].concat(c,l):[l]}return{esModule:s,exports:a,options:d}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"VueOdometer",props:{value:{type:Number,default:function(){return 0}},theme:{type:String,default:function(){return"minimal"}},format:{type:String,default:function(){return"(.ddd),dd"}},duration:{type:Number,default:function(){return 3e3}},className:{type:String,default:function(){return"odometer"}},animation:{type:String,default:function(){return"count"}},formatFunction:{type:Function}},data:function(){return{instance:null}},watch:{value:{handler:function(t){this.instance&&this.instance.update&&this.instance.update(t)},deep:!1}},mounted:function(){this.instance=new Odometer({el:this.$el,value:this.value,theme:this.theme,format:this.format,duration:this.duration,animation:this.animation}),this.instance.render()}}},function(t,e,n){"use strict";var i=function(){var t=this,e=t.$createElement;return(t._self._c||e)("span",{class:t.className})},r=[],o={render:i,staticRenderFns:r};e.a=o}]); -------------------------------------------------------------------------------- /example/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["env", { "modules": false }] 4 | ] 5 | } -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /example/components/App.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | -------------------------------------------------------------------------------- /example/css/style.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JefferyHus/v-odometer/8f68854bbd58d9f858b9e44b6a9b57954922f092/example/css/style.css -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Odometer - VueJS component 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /example/main.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import VueRouter from 'vue-router' 3 | import App from './components/App.vue' 4 | import * as _ from "lodash"; 5 | import moment from 'moment'; 6 | 7 | /** 8 | * Add the moment to the window 9 | */ 10 | window.moment = moment; 11 | 12 | /** 13 | * Change the behavior 14 | */ 15 | window.moment.relativeTimeThreshold('s', 60); 16 | window.moment.relativeTimeThreshold('m', 60); 17 | window.moment.relativeTimeThreshold('h', 24); 18 | window.moment.relativeTimeThreshold('d', 28); 19 | window.moment.relativeTimeThreshold('M', 12); 20 | /** 21 | * Start creating the DOM Vue controller 22 | */ 23 | 24 | Vue.use(VueRouter); 25 | Vue.use(require('vue-moment')); 26 | 27 | // Create routes for each component 28 | const routes = [ 29 | { 30 | path: '/', 31 | component: App 32 | } 33 | ] 34 | 35 | // Create the routing object 36 | const router = new VueRouter({ 37 | mode: 'history', 38 | base: __dirname, 39 | routes 40 | }) 41 | 42 | new Vue({ 43 | router, 44 | components: { App }, 45 | render: h => h(App) 46 | }).$mount('#app') -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "devDependencies": { 3 | "babel-core": "^6.26.0", 4 | "babel-loader": "^7.1.4", 5 | "babel-preset-env": "^1.6.0", 6 | "css-loader": "^0.28.11", 7 | "vue-html-loader": "^1.2.4", 8 | "vue-loader": "^13.7.1", 9 | "vue-router": "^2.7.0", 10 | "vue-template-compiler": "^2.5.16", 11 | "webpack": "^3.11.0", 12 | "webpack-dev-server": "^2.11.2" 13 | }, 14 | "dependencies": { 15 | "lodash": "^4.17.5", 16 | "v-odometer": "^1.0.2", 17 | "vue": "^2.5.16", 18 | "vue-moment": "^4.1.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /example/webpack.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Author: Jeffery Hussin. 3 | * Application: v-odometer example. 4 | * Description: A simple example of how to use this component. 5 | */ 6 | 7 | const path = require('path') 8 | const webpack = require('webpack') 9 | 10 | module.exports = { 11 | context: path.resolve(__dirname, ''), 12 | entry: './main.js', 13 | output: { 14 | path: path.resolve(__dirname, 'dist'), 15 | filename: '[name].bundle.js' 16 | }, 17 | resolve: { 18 | extensions: ['.vue', '.js'], 19 | }, 20 | module: { 21 | loaders: [ 22 | { 23 | test: /\.vue$/, 24 | loader: 'vue-loader' 25 | }, 26 | { 27 | test: /\.js$/, 28 | loader: 'babel-loader', 29 | exclude: /node_modules/ 30 | }, 31 | { 32 | test: /\.css$/, 33 | use: [ 'style-loader', 'css-loader' ] 34 | } 35 | ] 36 | } 37 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "v-odometer", 3 | "version": "2.0.1", 4 | "description": "Odometer VusJS component", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "webpack-dev-server --inline --hot --quiet --port=8000", 8 | "build": "cross-env NODE_ENV=production webpack --progress --hide-modules" 9 | }, 10 | "keywords": [ 11 | "odometer", 12 | "animation", 13 | "vuejs", 14 | "component" 15 | ], 16 | "author": "Jeffery Hussin (http://github.com/jefferyhus)", 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/JefferyHus/vue-odometer.git" 20 | }, 21 | "bugs": { 22 | "url": "https://github.com/JefferyHus/vue-odometer/issues" 23 | }, 24 | "homepage": "https://github.com/JefferyHus/vue-odometer#readme", 25 | "devDependencies": { 26 | "autoprefixer": "^10.4.13", 27 | "babel": "^6.23.0", 28 | "babel-core": "^6.26.3", 29 | "babel-loader": "^7.1.5", 30 | "babel-preset-env": "^1.7.0", 31 | "babel-preset-es2015": "^6.24.1", 32 | "cross-env": "^5.2.0", 33 | "css-loader": "^6.10.0", 34 | "extract-text-webpack-plugin": "^2.1.2", 35 | "html-webpack-plugin": "^5.5.0", 36 | "jasmine-core": "^2.99.1", 37 | "jsdom": "^16.5.0", 38 | "karma": "^6.3.14", 39 | "karma-chrome-launcher": "^2.2.0", 40 | "karma-jasmine": "^1.1.2", 41 | "karma-phantomjs-launcher": "^1.0.4", 42 | "karma-webpack": "^5.0.1", 43 | "style-loader": "^0.19.1", 44 | "vue": "^2.6.10", 45 | "vue-hot-reload-api": "^2.3.3", 46 | "vue-html-loader": "^1.2.4", 47 | "vue-loader": "^17.0.1", 48 | "vue-style-loader": "^3.1.2", 49 | "vue-template-compiler": "^2.6.10", 50 | "webpack": "^3.12.0", 51 | "webpack-dev-server": "^5.0.4" 52 | }, 53 | "dependencies": { 54 | "odometer": "^0.4.8" 55 | }, 56 | "license": "MIT" 57 | } 58 | -------------------------------------------------------------------------------- /src/components/VueOdometer.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 49 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const Odometer = require('odometer/odometer.min.js') 2 | 3 | import 'odometer/themes/odometer-theme-car.css' 4 | import 'odometer/themes/odometer-theme-default.css' 5 | import 'odometer/themes/odometer-theme-digital.css' 6 | import 'odometer/themes/odometer-theme-minimal.css' 7 | import 'odometer/themes/odometer-theme-plaza.css' 8 | import 'odometer/themes/odometer-theme-slot-machine.css' 9 | import 'odometer/themes/odometer-theme-train-station.css' 10 | import VueOdometer from './components/VueOdometer' 11 | 12 | if (typeof window !== 'undefined' && window.Vue) { 13 | window.Vue.component('vue-odometer', VueOdometer) 14 | } 15 | 16 | export default VueOdometer 17 | -------------------------------------------------------------------------------- /webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const webpack = require('webpack') 3 | const ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | module.exports = { 6 | context: path.resolve('src'), 7 | entry: './index.js', 8 | output: { 9 | path: path.resolve('dist'), 10 | filename: '[name].bundle.js', 11 | }, 12 | resolve: { 13 | extensions: ['.vue', '.js', '.css'], 14 | }, 15 | module: { 16 | loaders: [ 17 | { 18 | test: /\.vue$/, 19 | loader: 'vue-loader', 20 | options: { 21 | postcss: [ 22 | require('autoprefixer')({ 23 | browsers: [ 24 | 'last 2 versions', 25 | 'last 4 Android versions', 26 | 'last 3 iOS versions', 27 | ], 28 | }), 29 | ], 30 | }, 31 | }, 32 | { 33 | test: /\.js$/, 34 | loader: 'babel-loader', 35 | exclude: /node_modules/, 36 | include: path.resolve('node_modules/odometer/odometer.min.js'), 37 | }, 38 | { 39 | test: /\.css$/, 40 | use: ExtractTextPlugin.extract({ 41 | fallback: 'style-loader', 42 | use: 'css-loader', 43 | }), 44 | }, 45 | ], 46 | }, 47 | } 48 | 49 | // production configurations 50 | if (process.env.NODE_ENV === 'production') { 51 | module.exports.output.filename = '[name].prod.js' 52 | 53 | module.exports.plugins = [ 54 | new webpack.DefinePlugin({ 55 | 'process.env': { 56 | NODE_ENV: '"production"', 57 | }, 58 | }), 59 | new webpack.optimize.UglifyJsPlugin({ 60 | compress: { 61 | warnings: false, 62 | }, 63 | }), 64 | new webpack.optimize.OccurrenceOrderPlugin(), 65 | new ExtractTextPlugin({ filename: '[name].css', allChunks: true }), 66 | ] 67 | } else { 68 | // development configurations 69 | module.exports.output.filename = '[name].dev.js' 70 | 71 | module.exports.module.loaders = module.exports.module.loaders.concat([ 72 | { 73 | test: /\.css$/, 74 | use: ExtractTextPlugin.extract({ 75 | fallback: 'style-loader', 76 | use: 'css-loader', 77 | }), 78 | }, 79 | ]) 80 | 81 | module.exports.plugins = [ 82 | new ExtractTextPlugin({ filename: '[name].css', allChunks: true }), 83 | ] 84 | 85 | module.exports.devServer = { 86 | contentBase: './', 87 | } 88 | 89 | module.exports.devtool = '#source-map' 90 | } 91 | --------------------------------------------------------------------------------