├── .gitignore ├── README.md ├── audio ├── msg_other.wav └── qingchun.ogg ├── img ├── none.jpg ├── pic1.jpg ├── pic2.jpg ├── pic3.jpg ├── pic4.jpg ├── pic5.jpg ├── pic6.jpg └── setting.png ├── index.html ├── package.json ├── photos ├── 1.png ├── 2.png └── 3.png └── public ├── animate.css ├── jquery.js ├── lodash.min.js ├── socket.io.js └── socket.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | 5 | # Runtime data 6 | pids 7 | *.pid 8 | *.seed 9 | 10 | # Directory for instrumented libs generated by jscoverage/JSCover 11 | lib-cov 12 | 13 | # Coverage directory used by tools like istanbul 14 | coverage 15 | 16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 17 | .grunt 18 | 19 | # Compiled binary addons (http://nodejs.org/api/addons.html) 20 | build/Release 21 | 22 | # Dependency directory 23 | # Commenting this out is preferred by some people, see 24 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git- 25 | node_modules 26 | 27 | # Users Environment Variables 28 | .lock-wscript 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # freechat 2 | nodejs 的一个聊天软件,类似微信。 3 | - 模仿微信的界面,做到简单明了地聊天。 4 | - 无需注册,登录一次后,该电脑将记住用户名,下次直接进入聊天。旨在最简化聊天。 5 | - 支持聊天室,陌生人聊天。 6 | 7 | ## 软件框架 8 | - node webkit. 桌面客户端的寄宿环境。 9 | - socket.io 客户端与服务器进行通讯。 10 | - html5, css3 , js 客户端开发语言。 11 | 12 | ![img](https://github.com/BryanYang/freechat/blob/master/photos/1.png) 13 | ![img](https://github.com/BryanYang/freechat/blob/master/photos/2.png) 14 | ![img](https://github.com/BryanYang/freechat/blob/master/photos/3.png) 15 | 16 | ## 运行前,请先下载 nw.js 。地址:[nw首页](http://nwjs.io/) 17 | -------------------------------------------------------------------------------- /audio/msg_other.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/audio/msg_other.wav -------------------------------------------------------------------------------- /audio/qingchun.ogg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/audio/qingchun.ogg -------------------------------------------------------------------------------- /img/none.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/none.jpg -------------------------------------------------------------------------------- /img/pic1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/pic1.jpg -------------------------------------------------------------------------------- /img/pic2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/pic2.jpg -------------------------------------------------------------------------------- /img/pic3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/pic3.jpg -------------------------------------------------------------------------------- /img/pic4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/pic4.jpg -------------------------------------------------------------------------------- /img/pic5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/pic5.jpg -------------------------------------------------------------------------------- /img/pic6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/pic6.jpg -------------------------------------------------------------------------------- /img/setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/img/setting.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Free Chat 6 | 7 | 352 | 353 | 354 | 355 | 356 | 673 | 674 | 675 | 676 | 677 |
678 |
679 | 680 | 681 | 682 |
683 |
684 |
设置
685 |
686 |
声音
687 |
688 |
689 |
690 |
一起Music
691 |
692 |
693 |
695 | 696 |
697 |
698 |
699 |
700 |
701 | 725 | 726 |
727 |
728 |
729 | 732 | 739 | 740 | 741 |
742 |
743 | 744 |
© Gaofei Yang
745 |
746 | 747 |
748 | 749 | 750 | 751 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nw-demo", 3 | "main": "index.html", 4 | "window": { 5 | "toolbar": false, 6 | "width": 800, 7 | "height": 600, 8 | "positon":"mouse", 9 | "resizable":false, 10 | "show_in_taskbar":true, 11 | "frame":false 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /photos/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/photos/1.png -------------------------------------------------------------------------------- /photos/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/photos/2.png -------------------------------------------------------------------------------- /photos/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BryanYang/freechat/ec978f0da2e828786ff03a1305a7fe4deee6e3d0/photos/3.png -------------------------------------------------------------------------------- /public/animate.css: -------------------------------------------------------------------------------- 1 | @charset "UTF-8"; 2 | /*! 3 | Animate.css - http://daneden.me/animate 4 | Licensed under the MIT license - http://opensource.org/licenses/MIT 5 | 6 | Copyright (c) 2014 Daniel Eden 7 | */ 8 | 9 | .animated { 10 | -webkit-animation-duration: 1s; 11 | animation-duration: 1s; 12 | -webkit-animation-fill-mode: both; 13 | animation-fill-mode: both; 14 | } 15 | 16 | .animated.infinite { 17 | -webkit-animation-iteration-count: infinite; 18 | animation-iteration-count: infinite; 19 | } 20 | 21 | .animated.hinge { 22 | -webkit-animation-duration: 2s; 23 | animation-duration: 2s; 24 | } 25 | 26 | @-webkit-keyframes bounce { 27 | 0%, 20%, 53%, 80%, 100% { 28 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 29 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 30 | -webkit-transform: translate3d(0,0,0); 31 | transform: translate3d(0,0,0); 32 | } 33 | 34 | 40%, 43% { 35 | -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 36 | transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 37 | -webkit-transform: translate3d(0, -30px, 0); 38 | transform: translate3d(0, -30px, 0); 39 | } 40 | 41 | 70% { 42 | -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 43 | transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 44 | -webkit-transform: translate3d(0, -15px, 0); 45 | transform: translate3d(0, -15px, 0); 46 | } 47 | 48 | 90% { 49 | -webkit-transform: translate3d(0,-4px,0); 50 | transform: translate3d(0,-4px,0); 51 | } 52 | } 53 | 54 | @keyframes bounce { 55 | 0%, 20%, 53%, 80%, 100% { 56 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 57 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 58 | -webkit-transform: translate3d(0,0,0); 59 | transform: translate3d(0,0,0); 60 | } 61 | 62 | 40%, 43% { 63 | -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 64 | transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 65 | -webkit-transform: translate3d(0, -30px, 0); 66 | transform: translate3d(0, -30px, 0); 67 | } 68 | 69 | 70% { 70 | -webkit-transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 71 | transition-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060); 72 | -webkit-transform: translate3d(0, -15px, 0); 73 | transform: translate3d(0, -15px, 0); 74 | } 75 | 76 | 90% { 77 | -webkit-transform: translate3d(0,-4px,0); 78 | transform: translate3d(0,-4px,0); 79 | } 80 | } 81 | 82 | .bounce { 83 | -webkit-animation-name: bounce; 84 | animation-name: bounce; 85 | -webkit-transform-origin: center bottom; 86 | -ms-transform-origin: center bottom; 87 | transform-origin: center bottom; 88 | } 89 | 90 | @-webkit-keyframes flash { 91 | 0%, 50%, 100% { 92 | opacity: 1; 93 | } 94 | 95 | 25%, 75% { 96 | opacity: 0; 97 | } 98 | } 99 | 100 | @keyframes flash { 101 | 0%, 50%, 100% { 102 | opacity: 1; 103 | } 104 | 105 | 25%, 75% { 106 | opacity: 0; 107 | } 108 | } 109 | 110 | .flash { 111 | -webkit-animation-name: flash; 112 | animation-name: flash; 113 | } 114 | 115 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 116 | 117 | @-webkit-keyframes pulse { 118 | 0% { 119 | -webkit-transform: scale3d(1, 1, 1); 120 | transform: scale3d(1, 1, 1); 121 | } 122 | 123 | 50% { 124 | -webkit-transform: scale3d(1.05, 1.05, 1.05); 125 | transform: scale3d(1.05, 1.05, 1.05); 126 | } 127 | 128 | 100% { 129 | -webkit-transform: scale3d(1, 1, 1); 130 | transform: scale3d(1, 1, 1); 131 | } 132 | } 133 | 134 | @keyframes pulse { 135 | 0% { 136 | -webkit-transform: scale3d(1, 1, 1); 137 | transform: scale3d(1, 1, 1); 138 | } 139 | 140 | 50% { 141 | -webkit-transform: scale3d(1.05, 1.05, 1.05); 142 | transform: scale3d(1.05, 1.05, 1.05); 143 | } 144 | 145 | 100% { 146 | -webkit-transform: scale3d(1, 1, 1); 147 | transform: scale3d(1, 1, 1); 148 | } 149 | } 150 | 151 | .pulse { 152 | -webkit-animation-name: pulse; 153 | animation-name: pulse; 154 | } 155 | 156 | @-webkit-keyframes rubberBand { 157 | 0% { 158 | -webkit-transform: scale3d(1, 1, 1); 159 | transform: scale3d(1, 1, 1); 160 | } 161 | 162 | 30% { 163 | -webkit-transform: scale3d(1.25, 0.75, 1); 164 | transform: scale3d(1.25, 0.75, 1); 165 | } 166 | 167 | 40% { 168 | -webkit-transform: scale3d(0.75, 1.25, 1); 169 | transform: scale3d(0.75, 1.25, 1); 170 | } 171 | 172 | 50% { 173 | -webkit-transform: scale3d(1.15, 0.85, 1); 174 | transform: scale3d(1.15, 0.85, 1); 175 | } 176 | 177 | 65% { 178 | -webkit-transform: scale3d(.95, 1.05, 1); 179 | transform: scale3d(.95, 1.05, 1); 180 | } 181 | 182 | 75% { 183 | -webkit-transform: scale3d(1.05, .95, 1); 184 | transform: scale3d(1.05, .95, 1); 185 | } 186 | 187 | 100% { 188 | -webkit-transform: scale3d(1, 1, 1); 189 | transform: scale3d(1, 1, 1); 190 | } 191 | } 192 | 193 | @keyframes rubberBand { 194 | 0% { 195 | -webkit-transform: scale3d(1, 1, 1); 196 | transform: scale3d(1, 1, 1); 197 | } 198 | 199 | 30% { 200 | -webkit-transform: scale3d(1.25, 0.75, 1); 201 | transform: scale3d(1.25, 0.75, 1); 202 | } 203 | 204 | 40% { 205 | -webkit-transform: scale3d(0.75, 1.25, 1); 206 | transform: scale3d(0.75, 1.25, 1); 207 | } 208 | 209 | 50% { 210 | -webkit-transform: scale3d(1.15, 0.85, 1); 211 | transform: scale3d(1.15, 0.85, 1); 212 | } 213 | 214 | 65% { 215 | -webkit-transform: scale3d(.95, 1.05, 1); 216 | transform: scale3d(.95, 1.05, 1); 217 | } 218 | 219 | 75% { 220 | -webkit-transform: scale3d(1.05, .95, 1); 221 | transform: scale3d(1.05, .95, 1); 222 | } 223 | 224 | 100% { 225 | -webkit-transform: scale3d(1, 1, 1); 226 | transform: scale3d(1, 1, 1); 227 | } 228 | } 229 | 230 | .rubberBand { 231 | -webkit-animation-name: rubberBand; 232 | animation-name: rubberBand; 233 | } 234 | 235 | @-webkit-keyframes shake { 236 | 0%, 100% { 237 | -webkit-transform: translate3d(0, 0, 0); 238 | transform: translate3d(0, 0, 0); 239 | } 240 | 241 | 10%, 30%, 50%, 70%, 90% { 242 | -webkit-transform: translate3d(-10px, 0, 0); 243 | transform: translate3d(-10px, 0, 0); 244 | } 245 | 246 | 20%, 40%, 60%, 80% { 247 | -webkit-transform: translate3d(10px, 0, 0); 248 | transform: translate3d(10px, 0, 0); 249 | } 250 | } 251 | 252 | @keyframes shake { 253 | 0%, 100% { 254 | -webkit-transform: translate3d(0, 0, 0); 255 | transform: translate3d(0, 0, 0); 256 | } 257 | 258 | 10%, 30%, 50%, 70%, 90% { 259 | -webkit-transform: translate3d(-10px, 0, 0); 260 | transform: translate3d(-10px, 0, 0); 261 | } 262 | 263 | 20%, 40%, 60%, 80% { 264 | -webkit-transform: translate3d(10px, 0, 0); 265 | transform: translate3d(10px, 0, 0); 266 | } 267 | } 268 | 269 | .shake { 270 | -webkit-animation-name: shake; 271 | animation-name: shake; 272 | } 273 | 274 | @-webkit-keyframes swing { 275 | 20% { 276 | -webkit-transform: rotate3d(0, 0, 1, 15deg); 277 | transform: rotate3d(0, 0, 1, 15deg); 278 | } 279 | 280 | 40% { 281 | -webkit-transform: rotate3d(0, 0, 1, -10deg); 282 | transform: rotate3d(0, 0, 1, -10deg); 283 | } 284 | 285 | 60% { 286 | -webkit-transform: rotate3d(0, 0, 1, 5deg); 287 | transform: rotate3d(0, 0, 1, 5deg); 288 | } 289 | 290 | 80% { 291 | -webkit-transform: rotate3d(0, 0, 1, -5deg); 292 | transform: rotate3d(0, 0, 1, -5deg); 293 | } 294 | 295 | 100% { 296 | -webkit-transform: rotate3d(0, 0, 1, 0deg); 297 | transform: rotate3d(0, 0, 1, 0deg); 298 | } 299 | } 300 | 301 | @keyframes swing { 302 | 20% { 303 | -webkit-transform: rotate3d(0, 0, 1, 15deg); 304 | transform: rotate3d(0, 0, 1, 15deg); 305 | } 306 | 307 | 40% { 308 | -webkit-transform: rotate3d(0, 0, 1, -10deg); 309 | transform: rotate3d(0, 0, 1, -10deg); 310 | } 311 | 312 | 60% { 313 | -webkit-transform: rotate3d(0, 0, 1, 5deg); 314 | transform: rotate3d(0, 0, 1, 5deg); 315 | } 316 | 317 | 80% { 318 | -webkit-transform: rotate3d(0, 0, 1, -5deg); 319 | transform: rotate3d(0, 0, 1, -5deg); 320 | } 321 | 322 | 100% { 323 | -webkit-transform: rotate3d(0, 0, 1, 0deg); 324 | transform: rotate3d(0, 0, 1, 0deg); 325 | } 326 | } 327 | 328 | .swing { 329 | -webkit-transform-origin: top center; 330 | -ms-transform-origin: top center; 331 | transform-origin: top center; 332 | -webkit-animation-name: swing; 333 | animation-name: swing; 334 | } 335 | 336 | @-webkit-keyframes tada { 337 | 0% { 338 | -webkit-transform: scale3d(1, 1, 1); 339 | transform: scale3d(1, 1, 1); 340 | } 341 | 342 | 10%, 20% { 343 | -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); 344 | transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); 345 | } 346 | 347 | 30%, 50%, 70%, 90% { 348 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); 349 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); 350 | } 351 | 352 | 40%, 60%, 80% { 353 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); 354 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); 355 | } 356 | 357 | 100% { 358 | -webkit-transform: scale3d(1, 1, 1); 359 | transform: scale3d(1, 1, 1); 360 | } 361 | } 362 | 363 | @keyframes tada { 364 | 0% { 365 | -webkit-transform: scale3d(1, 1, 1); 366 | transform: scale3d(1, 1, 1); 367 | } 368 | 369 | 10%, 20% { 370 | -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); 371 | transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); 372 | } 373 | 374 | 30%, 50%, 70%, 90% { 375 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); 376 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); 377 | } 378 | 379 | 40%, 60%, 80% { 380 | -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); 381 | transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); 382 | } 383 | 384 | 100% { 385 | -webkit-transform: scale3d(1, 1, 1); 386 | transform: scale3d(1, 1, 1); 387 | } 388 | } 389 | 390 | .tada { 391 | -webkit-animation-name: tada; 392 | animation-name: tada; 393 | } 394 | 395 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 396 | 397 | @-webkit-keyframes wobble { 398 | 0% { 399 | -webkit-transform: none; 400 | transform: none; 401 | } 402 | 403 | 15% { 404 | -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); 405 | transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); 406 | } 407 | 408 | 30% { 409 | -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); 410 | transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); 411 | } 412 | 413 | 45% { 414 | -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); 415 | transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); 416 | } 417 | 418 | 60% { 419 | -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); 420 | transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); 421 | } 422 | 423 | 75% { 424 | -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); 425 | transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); 426 | } 427 | 428 | 100% { 429 | -webkit-transform: none; 430 | transform: none; 431 | } 432 | } 433 | 434 | @keyframes wobble { 435 | 0% { 436 | -webkit-transform: none; 437 | transform: none; 438 | } 439 | 440 | 15% { 441 | -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); 442 | transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); 443 | } 444 | 445 | 30% { 446 | -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); 447 | transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); 448 | } 449 | 450 | 45% { 451 | -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); 452 | transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); 453 | } 454 | 455 | 60% { 456 | -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); 457 | transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); 458 | } 459 | 460 | 75% { 461 | -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); 462 | transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); 463 | } 464 | 465 | 100% { 466 | -webkit-transform: none; 467 | transform: none; 468 | } 469 | } 470 | 471 | .wobble { 472 | -webkit-animation-name: wobble; 473 | animation-name: wobble; 474 | } 475 | 476 | @-webkit-keyframes bounceIn { 477 | 0%, 20%, 40%, 60%, 80%, 100% { 478 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 479 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 480 | } 481 | 482 | 0% { 483 | opacity: 0; 484 | -webkit-transform: scale3d(.3, .3, .3); 485 | transform: scale3d(.3, .3, .3); 486 | } 487 | 488 | 20% { 489 | -webkit-transform: scale3d(1.1, 1.1, 1.1); 490 | transform: scale3d(1.1, 1.1, 1.1); 491 | } 492 | 493 | 40% { 494 | -webkit-transform: scale3d(.9, .9, .9); 495 | transform: scale3d(.9, .9, .9); 496 | } 497 | 498 | 60% { 499 | opacity: 1; 500 | -webkit-transform: scale3d(1.03, 1.03, 1.03); 501 | transform: scale3d(1.03, 1.03, 1.03); 502 | } 503 | 504 | 80% { 505 | -webkit-transform: scale3d(.97, .97, .97); 506 | transform: scale3d(.97, .97, .97); 507 | } 508 | 509 | 100% { 510 | opacity: 1; 511 | -webkit-transform: scale3d(1, 1, 1); 512 | transform: scale3d(1, 1, 1); 513 | } 514 | } 515 | 516 | @keyframes bounceIn { 517 | 0%, 20%, 40%, 60%, 80%, 100% { 518 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 519 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 520 | } 521 | 522 | 0% { 523 | opacity: 0; 524 | -webkit-transform: scale3d(.3, .3, .3); 525 | transform: scale3d(.3, .3, .3); 526 | } 527 | 528 | 20% { 529 | -webkit-transform: scale3d(1.1, 1.1, 1.1); 530 | transform: scale3d(1.1, 1.1, 1.1); 531 | } 532 | 533 | 40% { 534 | -webkit-transform: scale3d(.9, .9, .9); 535 | transform: scale3d(.9, .9, .9); 536 | } 537 | 538 | 60% { 539 | opacity: 1; 540 | -webkit-transform: scale3d(1.03, 1.03, 1.03); 541 | transform: scale3d(1.03, 1.03, 1.03); 542 | } 543 | 544 | 80% { 545 | -webkit-transform: scale3d(.97, .97, .97); 546 | transform: scale3d(.97, .97, .97); 547 | } 548 | 549 | 100% { 550 | opacity: 1; 551 | -webkit-transform: scale3d(1, 1, 1); 552 | transform: scale3d(1, 1, 1); 553 | } 554 | } 555 | 556 | .bounceIn { 557 | -webkit-animation-name: bounceIn; 558 | animation-name: bounceIn; 559 | -webkit-animation-duration: .75s; 560 | animation-duration: .75s; 561 | } 562 | 563 | @-webkit-keyframes bounceInDown { 564 | 0%, 60%, 75%, 90%, 100% { 565 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 566 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 567 | } 568 | 569 | 0% { 570 | opacity: 0; 571 | -webkit-transform: translate3d(0, -3000px, 0); 572 | transform: translate3d(0, -3000px, 0); 573 | } 574 | 575 | 60% { 576 | opacity: 1; 577 | -webkit-transform: translate3d(0, 25px, 0); 578 | transform: translate3d(0, 25px, 0); 579 | } 580 | 581 | 75% { 582 | -webkit-transform: translate3d(0, -10px, 0); 583 | transform: translate3d(0, -10px, 0); 584 | } 585 | 586 | 90% { 587 | -webkit-transform: translate3d(0, 5px, 0); 588 | transform: translate3d(0, 5px, 0); 589 | } 590 | 591 | 100% { 592 | -webkit-transform: none; 593 | transform: none; 594 | } 595 | } 596 | 597 | @keyframes bounceInDown { 598 | 0%, 60%, 75%, 90%, 100% { 599 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 600 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 601 | } 602 | 603 | 0% { 604 | opacity: 0; 605 | -webkit-transform: translate3d(0, -3000px, 0); 606 | transform: translate3d(0, -3000px, 0); 607 | } 608 | 609 | 60% { 610 | opacity: 1; 611 | -webkit-transform: translate3d(0, 25px, 0); 612 | transform: translate3d(0, 25px, 0); 613 | } 614 | 615 | 75% { 616 | -webkit-transform: translate3d(0, -10px, 0); 617 | transform: translate3d(0, -10px, 0); 618 | } 619 | 620 | 90% { 621 | -webkit-transform: translate3d(0, 5px, 0); 622 | transform: translate3d(0, 5px, 0); 623 | } 624 | 625 | 100% { 626 | -webkit-transform: none; 627 | transform: none; 628 | } 629 | } 630 | 631 | .bounceInDown { 632 | -webkit-animation-name: bounceInDown; 633 | animation-name: bounceInDown; 634 | } 635 | 636 | @-webkit-keyframes bounceInLeft { 637 | 0%, 60%, 75%, 90%, 100% { 638 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 639 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 640 | } 641 | 642 | 0% { 643 | opacity: 0; 644 | -webkit-transform: translate3d(-3000px, 0, 0); 645 | transform: translate3d(-3000px, 0, 0); 646 | } 647 | 648 | 60% { 649 | opacity: 1; 650 | -webkit-transform: translate3d(25px, 0, 0); 651 | transform: translate3d(25px, 0, 0); 652 | } 653 | 654 | 75% { 655 | -webkit-transform: translate3d(-10px, 0, 0); 656 | transform: translate3d(-10px, 0, 0); 657 | } 658 | 659 | 90% { 660 | -webkit-transform: translate3d(5px, 0, 0); 661 | transform: translate3d(5px, 0, 0); 662 | } 663 | 664 | 100% { 665 | -webkit-transform: none; 666 | transform: none; 667 | } 668 | } 669 | 670 | @keyframes bounceInLeft { 671 | 0%, 60%, 75%, 90%, 100% { 672 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 673 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 674 | } 675 | 676 | 0% { 677 | opacity: 0; 678 | -webkit-transform: translate3d(-3000px, 0, 0); 679 | transform: translate3d(-3000px, 0, 0); 680 | } 681 | 682 | 60% { 683 | opacity: 1; 684 | -webkit-transform: translate3d(25px, 0, 0); 685 | transform: translate3d(25px, 0, 0); 686 | } 687 | 688 | 75% { 689 | -webkit-transform: translate3d(-10px, 0, 0); 690 | transform: translate3d(-10px, 0, 0); 691 | } 692 | 693 | 90% { 694 | -webkit-transform: translate3d(5px, 0, 0); 695 | transform: translate3d(5px, 0, 0); 696 | } 697 | 698 | 100% { 699 | -webkit-transform: none; 700 | transform: none; 701 | } 702 | } 703 | 704 | .bounceInLeft { 705 | -webkit-animation-name: bounceInLeft; 706 | animation-name: bounceInLeft; 707 | } 708 | 709 | @-webkit-keyframes bounceInRight { 710 | 0%, 60%, 75%, 90%, 100% { 711 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 712 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 713 | } 714 | 715 | 0% { 716 | opacity: 0; 717 | -webkit-transform: translate3d(3000px, 0, 0); 718 | transform: translate3d(3000px, 0, 0); 719 | } 720 | 721 | 60% { 722 | opacity: 1; 723 | -webkit-transform: translate3d(-25px, 0, 0); 724 | transform: translate3d(-25px, 0, 0); 725 | } 726 | 727 | 75% { 728 | -webkit-transform: translate3d(10px, 0, 0); 729 | transform: translate3d(10px, 0, 0); 730 | } 731 | 732 | 90% { 733 | -webkit-transform: translate3d(-5px, 0, 0); 734 | transform: translate3d(-5px, 0, 0); 735 | } 736 | 737 | 100% { 738 | -webkit-transform: none; 739 | transform: none; 740 | } 741 | } 742 | 743 | @keyframes bounceInRight { 744 | 0%, 60%, 75%, 90%, 100% { 745 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 746 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 747 | } 748 | 749 | 0% { 750 | opacity: 0; 751 | -webkit-transform: translate3d(3000px, 0, 0); 752 | transform: translate3d(3000px, 0, 0); 753 | } 754 | 755 | 60% { 756 | opacity: 1; 757 | -webkit-transform: translate3d(-25px, 0, 0); 758 | transform: translate3d(-25px, 0, 0); 759 | } 760 | 761 | 75% { 762 | -webkit-transform: translate3d(10px, 0, 0); 763 | transform: translate3d(10px, 0, 0); 764 | } 765 | 766 | 90% { 767 | -webkit-transform: translate3d(-5px, 0, 0); 768 | transform: translate3d(-5px, 0, 0); 769 | } 770 | 771 | 100% { 772 | -webkit-transform: none; 773 | transform: none; 774 | } 775 | } 776 | 777 | .bounceInRight { 778 | -webkit-animation-name: bounceInRight; 779 | animation-name: bounceInRight; 780 | } 781 | 782 | @-webkit-keyframes bounceInUp { 783 | 0%, 60%, 75%, 90%, 100% { 784 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 785 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 786 | } 787 | 788 | 0% { 789 | opacity: 0; 790 | -webkit-transform: translate3d(0, 3000px, 0); 791 | transform: translate3d(0, 3000px, 0); 792 | } 793 | 794 | 60% { 795 | opacity: 1; 796 | -webkit-transform: translate3d(0, -20px, 0); 797 | transform: translate3d(0, -20px, 0); 798 | } 799 | 800 | 75% { 801 | -webkit-transform: translate3d(0, 10px, 0); 802 | transform: translate3d(0, 10px, 0); 803 | } 804 | 805 | 90% { 806 | -webkit-transform: translate3d(0, -5px, 0); 807 | transform: translate3d(0, -5px, 0); 808 | } 809 | 810 | 100% { 811 | -webkit-transform: translate3d(0, 0, 0); 812 | transform: translate3d(0, 0, 0); 813 | } 814 | } 815 | 816 | @keyframes bounceInUp { 817 | 0%, 60%, 75%, 90%, 100% { 818 | -webkit-transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 819 | transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000); 820 | } 821 | 822 | 0% { 823 | opacity: 0; 824 | -webkit-transform: translate3d(0, 3000px, 0); 825 | transform: translate3d(0, 3000px, 0); 826 | } 827 | 828 | 60% { 829 | opacity: 1; 830 | -webkit-transform: translate3d(0, -20px, 0); 831 | transform: translate3d(0, -20px, 0); 832 | } 833 | 834 | 75% { 835 | -webkit-transform: translate3d(0, 10px, 0); 836 | transform: translate3d(0, 10px, 0); 837 | } 838 | 839 | 90% { 840 | -webkit-transform: translate3d(0, -5px, 0); 841 | transform: translate3d(0, -5px, 0); 842 | } 843 | 844 | 100% { 845 | -webkit-transform: translate3d(0, 0, 0); 846 | transform: translate3d(0, 0, 0); 847 | } 848 | } 849 | 850 | .bounceInUp { 851 | -webkit-animation-name: bounceInUp; 852 | animation-name: bounceInUp; 853 | } 854 | 855 | @-webkit-keyframes bounceOut { 856 | 20% { 857 | -webkit-transform: scale3d(.9, .9, .9); 858 | transform: scale3d(.9, .9, .9); 859 | } 860 | 861 | 50%, 55% { 862 | opacity: 1; 863 | -webkit-transform: scale3d(1.1, 1.1, 1.1); 864 | transform: scale3d(1.1, 1.1, 1.1); 865 | } 866 | 867 | 100% { 868 | opacity: 0; 869 | -webkit-transform: scale3d(.3, .3, .3); 870 | transform: scale3d(.3, .3, .3); 871 | } 872 | } 873 | 874 | @keyframes bounceOut { 875 | 20% { 876 | -webkit-transform: scale3d(.9, .9, .9); 877 | transform: scale3d(.9, .9, .9); 878 | } 879 | 880 | 50%, 55% { 881 | opacity: 1; 882 | -webkit-transform: scale3d(1.1, 1.1, 1.1); 883 | transform: scale3d(1.1, 1.1, 1.1); 884 | } 885 | 886 | 100% { 887 | opacity: 0; 888 | -webkit-transform: scale3d(.3, .3, .3); 889 | transform: scale3d(.3, .3, .3); 890 | } 891 | } 892 | 893 | .bounceOut { 894 | -webkit-animation-name: bounceOut; 895 | animation-name: bounceOut; 896 | -webkit-animation-duration: .75s; 897 | animation-duration: .75s; 898 | } 899 | 900 | @-webkit-keyframes bounceOutDown { 901 | 20% { 902 | -webkit-transform: translate3d(0, 10px, 0); 903 | transform: translate3d(0, 10px, 0); 904 | } 905 | 906 | 40%, 45% { 907 | opacity: 1; 908 | -webkit-transform: translate3d(0, -20px, 0); 909 | transform: translate3d(0, -20px, 0); 910 | } 911 | 912 | 100% { 913 | opacity: 0; 914 | -webkit-transform: translate3d(0, 2000px, 0); 915 | transform: translate3d(0, 2000px, 0); 916 | } 917 | } 918 | 919 | @keyframes bounceOutDown { 920 | 20% { 921 | -webkit-transform: translate3d(0, 10px, 0); 922 | transform: translate3d(0, 10px, 0); 923 | } 924 | 925 | 40%, 45% { 926 | opacity: 1; 927 | -webkit-transform: translate3d(0, -20px, 0); 928 | transform: translate3d(0, -20px, 0); 929 | } 930 | 931 | 100% { 932 | opacity: 0; 933 | -webkit-transform: translate3d(0, 2000px, 0); 934 | transform: translate3d(0, 2000px, 0); 935 | } 936 | } 937 | 938 | .bounceOutDown { 939 | -webkit-animation-name: bounceOutDown; 940 | animation-name: bounceOutDown; 941 | } 942 | 943 | @-webkit-keyframes bounceOutLeft { 944 | 20% { 945 | opacity: 1; 946 | -webkit-transform: translate3d(20px, 0, 0); 947 | transform: translate3d(20px, 0, 0); 948 | } 949 | 950 | 100% { 951 | opacity: 0; 952 | -webkit-transform: translate3d(-2000px, 0, 0); 953 | transform: translate3d(-2000px, 0, 0); 954 | } 955 | } 956 | 957 | @keyframes bounceOutLeft { 958 | 20% { 959 | opacity: 1; 960 | -webkit-transform: translate3d(20px, 0, 0); 961 | transform: translate3d(20px, 0, 0); 962 | } 963 | 964 | 100% { 965 | opacity: 0; 966 | -webkit-transform: translate3d(-2000px, 0, 0); 967 | transform: translate3d(-2000px, 0, 0); 968 | } 969 | } 970 | 971 | .bounceOutLeft { 972 | -webkit-animation-name: bounceOutLeft; 973 | animation-name: bounceOutLeft; 974 | } 975 | 976 | @-webkit-keyframes bounceOutRight { 977 | 20% { 978 | opacity: 1; 979 | -webkit-transform: translate3d(-20px, 0, 0); 980 | transform: translate3d(-20px, 0, 0); 981 | } 982 | 983 | 100% { 984 | opacity: 0; 985 | -webkit-transform: translate3d(2000px, 0, 0); 986 | transform: translate3d(2000px, 0, 0); 987 | } 988 | } 989 | 990 | @keyframes bounceOutRight { 991 | 20% { 992 | opacity: 1; 993 | -webkit-transform: translate3d(-20px, 0, 0); 994 | transform: translate3d(-20px, 0, 0); 995 | } 996 | 997 | 100% { 998 | opacity: 0; 999 | -webkit-transform: translate3d(2000px, 0, 0); 1000 | transform: translate3d(2000px, 0, 0); 1001 | } 1002 | } 1003 | 1004 | .bounceOutRight { 1005 | -webkit-animation-name: bounceOutRight; 1006 | animation-name: bounceOutRight; 1007 | } 1008 | 1009 | @-webkit-keyframes bounceOutUp { 1010 | 20% { 1011 | -webkit-transform: translate3d(0, -10px, 0); 1012 | transform: translate3d(0, -10px, 0); 1013 | } 1014 | 1015 | 40%, 45% { 1016 | opacity: 1; 1017 | -webkit-transform: translate3d(0, 20px, 0); 1018 | transform: translate3d(0, 20px, 0); 1019 | } 1020 | 1021 | 100% { 1022 | opacity: 0; 1023 | -webkit-transform: translate3d(0, -2000px, 0); 1024 | transform: translate3d(0, -2000px, 0); 1025 | } 1026 | } 1027 | 1028 | @keyframes bounceOutUp { 1029 | 20% { 1030 | -webkit-transform: translate3d(0, -10px, 0); 1031 | transform: translate3d(0, -10px, 0); 1032 | } 1033 | 1034 | 40%, 45% { 1035 | opacity: 1; 1036 | -webkit-transform: translate3d(0, 20px, 0); 1037 | transform: translate3d(0, 20px, 0); 1038 | } 1039 | 1040 | 100% { 1041 | opacity: 0; 1042 | -webkit-transform: translate3d(0, -2000px, 0); 1043 | transform: translate3d(0, -2000px, 0); 1044 | } 1045 | } 1046 | 1047 | .bounceOutUp { 1048 | -webkit-animation-name: bounceOutUp; 1049 | animation-name: bounceOutUp; 1050 | } 1051 | 1052 | @-webkit-keyframes fadeIn { 1053 | 0% {opacity: 0;} 1054 | 100% {opacity: 1;} 1055 | } 1056 | 1057 | @keyframes fadeIn { 1058 | 0% {opacity: 0;} 1059 | 100% {opacity: 1;} 1060 | } 1061 | 1062 | .fadeIn { 1063 | -webkit-animation-name: fadeIn; 1064 | animation-name: fadeIn; 1065 | } 1066 | 1067 | @-webkit-keyframes fadeInDown { 1068 | 0% { 1069 | opacity: 0; 1070 | -webkit-transform: translate3d(0, -100%, 0); 1071 | transform: translate3d(0, -100%, 0); 1072 | } 1073 | 1074 | 100% { 1075 | opacity: 1; 1076 | -webkit-transform: none; 1077 | transform: none; 1078 | } 1079 | } 1080 | 1081 | @keyframes fadeInDown { 1082 | 0% { 1083 | opacity: 0; 1084 | -webkit-transform: translate3d(0, -100%, 0); 1085 | transform: translate3d(0, -100%, 0); 1086 | } 1087 | 1088 | 100% { 1089 | opacity: 1; 1090 | -webkit-transform: none; 1091 | transform: none; 1092 | } 1093 | } 1094 | 1095 | .fadeInDown { 1096 | -webkit-animation-name: fadeInDown; 1097 | animation-name: fadeInDown; 1098 | } 1099 | 1100 | @-webkit-keyframes fadeInDownBig { 1101 | 0% { 1102 | opacity: 0; 1103 | -webkit-transform: translate3d(0, -2000px, 0); 1104 | transform: translate3d(0, -2000px, 0); 1105 | } 1106 | 1107 | 100% { 1108 | opacity: 1; 1109 | -webkit-transform: none; 1110 | transform: none; 1111 | } 1112 | } 1113 | 1114 | @keyframes fadeInDownBig { 1115 | 0% { 1116 | opacity: 0; 1117 | -webkit-transform: translate3d(0, -2000px, 0); 1118 | transform: translate3d(0, -2000px, 0); 1119 | } 1120 | 1121 | 100% { 1122 | opacity: 1; 1123 | -webkit-transform: none; 1124 | transform: none; 1125 | } 1126 | } 1127 | 1128 | .fadeInDownBig { 1129 | -webkit-animation-name: fadeInDownBig; 1130 | animation-name: fadeInDownBig; 1131 | } 1132 | 1133 | @-webkit-keyframes fadeInLeft { 1134 | 0% { 1135 | opacity: 0; 1136 | -webkit-transform: translate3d(-100%, 0, 0); 1137 | transform: translate3d(-100%, 0, 0); 1138 | } 1139 | 1140 | 100% { 1141 | opacity: 1; 1142 | -webkit-transform: none; 1143 | transform: none; 1144 | } 1145 | } 1146 | 1147 | @keyframes fadeInLeft { 1148 | 0% { 1149 | opacity: 0; 1150 | -webkit-transform: translate3d(-100%, 0, 0); 1151 | transform: translate3d(-100%, 0, 0); 1152 | } 1153 | 1154 | 100% { 1155 | opacity: 1; 1156 | -webkit-transform: none; 1157 | transform: none; 1158 | } 1159 | } 1160 | 1161 | .fadeInLeft { 1162 | -webkit-animation-name: fadeInLeft; 1163 | animation-name: fadeInLeft; 1164 | } 1165 | 1166 | @-webkit-keyframes fadeInLeftBig { 1167 | 0% { 1168 | opacity: 0; 1169 | -webkit-transform: translate3d(-2000px, 0, 0); 1170 | transform: translate3d(-2000px, 0, 0); 1171 | } 1172 | 1173 | 100% { 1174 | opacity: 1; 1175 | -webkit-transform: none; 1176 | transform: none; 1177 | } 1178 | } 1179 | 1180 | @keyframes fadeInLeftBig { 1181 | 0% { 1182 | opacity: 0; 1183 | -webkit-transform: translate3d(-2000px, 0, 0); 1184 | transform: translate3d(-2000px, 0, 0); 1185 | } 1186 | 1187 | 100% { 1188 | opacity: 1; 1189 | -webkit-transform: none; 1190 | transform: none; 1191 | } 1192 | } 1193 | 1194 | .fadeInLeftBig { 1195 | -webkit-animation-name: fadeInLeftBig; 1196 | animation-name: fadeInLeftBig; 1197 | } 1198 | 1199 | @-webkit-keyframes fadeInRight { 1200 | 0% { 1201 | opacity: 0; 1202 | -webkit-transform: translate3d(100%, 0, 0); 1203 | transform: translate3d(100%, 0, 0); 1204 | } 1205 | 1206 | 100% { 1207 | opacity: 1; 1208 | -webkit-transform: none; 1209 | transform: none; 1210 | } 1211 | } 1212 | 1213 | @keyframes fadeInRight { 1214 | 0% { 1215 | opacity: 0; 1216 | -webkit-transform: translate3d(100%, 0, 0); 1217 | transform: translate3d(100%, 0, 0); 1218 | } 1219 | 1220 | 100% { 1221 | opacity: 1; 1222 | -webkit-transform: none; 1223 | transform: none; 1224 | } 1225 | } 1226 | 1227 | .fadeInRight { 1228 | -webkit-animation-name: fadeInRight; 1229 | animation-name: fadeInRight; 1230 | } 1231 | 1232 | @-webkit-keyframes fadeInRightBig { 1233 | 0% { 1234 | opacity: 0; 1235 | -webkit-transform: translate3d(2000px, 0, 0); 1236 | transform: translate3d(2000px, 0, 0); 1237 | } 1238 | 1239 | 100% { 1240 | opacity: 1; 1241 | -webkit-transform: none; 1242 | transform: none; 1243 | } 1244 | } 1245 | 1246 | @keyframes fadeInRightBig { 1247 | 0% { 1248 | opacity: 0; 1249 | -webkit-transform: translate3d(2000px, 0, 0); 1250 | transform: translate3d(2000px, 0, 0); 1251 | } 1252 | 1253 | 100% { 1254 | opacity: 1; 1255 | -webkit-transform: none; 1256 | transform: none; 1257 | } 1258 | } 1259 | 1260 | .fadeInRightBig { 1261 | -webkit-animation-name: fadeInRightBig; 1262 | animation-name: fadeInRightBig; 1263 | } 1264 | 1265 | @-webkit-keyframes fadeInUp { 1266 | 0% { 1267 | opacity: 0; 1268 | -webkit-transform: translate3d(0, 100%, 0); 1269 | transform: translate3d(0, 100%, 0); 1270 | } 1271 | 1272 | 100% { 1273 | opacity: 1; 1274 | -webkit-transform: none; 1275 | transform: none; 1276 | } 1277 | } 1278 | 1279 | @keyframes fadeInUp { 1280 | 0% { 1281 | opacity: 0; 1282 | -webkit-transform: translate3d(0, 100%, 0); 1283 | transform: translate3d(0, 100%, 0); 1284 | } 1285 | 1286 | 100% { 1287 | opacity: 1; 1288 | -webkit-transform: none; 1289 | transform: none; 1290 | } 1291 | } 1292 | 1293 | .fadeInUp { 1294 | -webkit-animation-name: fadeInUp; 1295 | animation-name: fadeInUp; 1296 | } 1297 | 1298 | @-webkit-keyframes fadeInUpBig { 1299 | 0% { 1300 | opacity: 0; 1301 | -webkit-transform: translate3d(0, 2000px, 0); 1302 | transform: translate3d(0, 2000px, 0); 1303 | } 1304 | 1305 | 100% { 1306 | opacity: 1; 1307 | -webkit-transform: none; 1308 | transform: none; 1309 | } 1310 | } 1311 | 1312 | @keyframes fadeInUpBig { 1313 | 0% { 1314 | opacity: 0; 1315 | -webkit-transform: translate3d(0, 2000px, 0); 1316 | transform: translate3d(0, 2000px, 0); 1317 | } 1318 | 1319 | 100% { 1320 | opacity: 1; 1321 | -webkit-transform: none; 1322 | transform: none; 1323 | } 1324 | } 1325 | 1326 | .fadeInUpBig { 1327 | -webkit-animation-name: fadeInUpBig; 1328 | animation-name: fadeInUpBig; 1329 | } 1330 | 1331 | @-webkit-keyframes fadeOut { 1332 | 0% {opacity: 1;} 1333 | 100% {opacity: 0;} 1334 | } 1335 | 1336 | @keyframes fadeOut { 1337 | 0% {opacity: 1;} 1338 | 100% {opacity: 0;} 1339 | } 1340 | 1341 | .fadeOut { 1342 | -webkit-animation-name: fadeOut; 1343 | animation-name: fadeOut; 1344 | } 1345 | 1346 | @-webkit-keyframes fadeOutDown { 1347 | 0% { 1348 | opacity: 1; 1349 | } 1350 | 1351 | 100% { 1352 | opacity: 0; 1353 | -webkit-transform: translate3d(0, 100%, 0); 1354 | transform: translate3d(0, 100%, 0); 1355 | } 1356 | } 1357 | 1358 | @keyframes fadeOutDown { 1359 | 0% { 1360 | opacity: 1; 1361 | } 1362 | 1363 | 100% { 1364 | opacity: 0; 1365 | -webkit-transform: translate3d(0, 100%, 0); 1366 | transform: translate3d(0, 100%, 0); 1367 | } 1368 | } 1369 | 1370 | .fadeOutDown { 1371 | -webkit-animation-name: fadeOutDown; 1372 | animation-name: fadeOutDown; 1373 | } 1374 | 1375 | @-webkit-keyframes fadeOutDownBig { 1376 | 0% { 1377 | opacity: 1; 1378 | } 1379 | 1380 | 100% { 1381 | opacity: 0; 1382 | -webkit-transform: translate3d(0, 2000px, 0); 1383 | transform: translate3d(0, 2000px, 0); 1384 | } 1385 | } 1386 | 1387 | @keyframes fadeOutDownBig { 1388 | 0% { 1389 | opacity: 1; 1390 | } 1391 | 1392 | 100% { 1393 | opacity: 0; 1394 | -webkit-transform: translate3d(0, 2000px, 0); 1395 | transform: translate3d(0, 2000px, 0); 1396 | } 1397 | } 1398 | 1399 | .fadeOutDownBig { 1400 | -webkit-animation-name: fadeOutDownBig; 1401 | animation-name: fadeOutDownBig; 1402 | } 1403 | 1404 | @-webkit-keyframes fadeOutLeft { 1405 | 0% { 1406 | opacity: 1; 1407 | } 1408 | 1409 | 100% { 1410 | opacity: 0; 1411 | -webkit-transform: translate3d(-100%, 0, 0); 1412 | transform: translate3d(-100%, 0, 0); 1413 | } 1414 | } 1415 | 1416 | @keyframes fadeOutLeft { 1417 | 0% { 1418 | opacity: 1; 1419 | } 1420 | 1421 | 100% { 1422 | opacity: 0; 1423 | -webkit-transform: translate3d(-100%, 0, 0); 1424 | transform: translate3d(-100%, 0, 0); 1425 | } 1426 | } 1427 | 1428 | .fadeOutLeft { 1429 | -webkit-animation-name: fadeOutLeft; 1430 | animation-name: fadeOutLeft; 1431 | } 1432 | 1433 | @-webkit-keyframes fadeOutLeftBig { 1434 | 0% { 1435 | opacity: 1; 1436 | } 1437 | 1438 | 100% { 1439 | opacity: 0; 1440 | -webkit-transform: translate3d(-2000px, 0, 0); 1441 | transform: translate3d(-2000px, 0, 0); 1442 | } 1443 | } 1444 | 1445 | @keyframes fadeOutLeftBig { 1446 | 0% { 1447 | opacity: 1; 1448 | } 1449 | 1450 | 100% { 1451 | opacity: 0; 1452 | -webkit-transform: translate3d(-2000px, 0, 0); 1453 | transform: translate3d(-2000px, 0, 0); 1454 | } 1455 | } 1456 | 1457 | .fadeOutLeftBig { 1458 | -webkit-animation-name: fadeOutLeftBig; 1459 | animation-name: fadeOutLeftBig; 1460 | } 1461 | 1462 | @-webkit-keyframes fadeOutRight { 1463 | 0% { 1464 | opacity: 1; 1465 | } 1466 | 1467 | 100% { 1468 | opacity: 0; 1469 | -webkit-transform: translate3d(100%, 0, 0); 1470 | transform: translate3d(100%, 0, 0); 1471 | } 1472 | } 1473 | 1474 | @keyframes fadeOutRight { 1475 | 0% { 1476 | opacity: 1; 1477 | } 1478 | 1479 | 100% { 1480 | opacity: 0; 1481 | -webkit-transform: translate3d(100%, 0, 0); 1482 | transform: translate3d(100%, 0, 0); 1483 | } 1484 | } 1485 | 1486 | .fadeOutRight { 1487 | -webkit-animation-name: fadeOutRight; 1488 | animation-name: fadeOutRight; 1489 | } 1490 | 1491 | @-webkit-keyframes fadeOutRightBig { 1492 | 0% { 1493 | opacity: 1; 1494 | } 1495 | 1496 | 100% { 1497 | opacity: 0; 1498 | -webkit-transform: translate3d(2000px, 0, 0); 1499 | transform: translate3d(2000px, 0, 0); 1500 | } 1501 | } 1502 | 1503 | @keyframes fadeOutRightBig { 1504 | 0% { 1505 | opacity: 1; 1506 | } 1507 | 1508 | 100% { 1509 | opacity: 0; 1510 | -webkit-transform: translate3d(2000px, 0, 0); 1511 | transform: translate3d(2000px, 0, 0); 1512 | } 1513 | } 1514 | 1515 | .fadeOutRightBig { 1516 | -webkit-animation-name: fadeOutRightBig; 1517 | animation-name: fadeOutRightBig; 1518 | } 1519 | 1520 | @-webkit-keyframes fadeOutUp { 1521 | 0% { 1522 | opacity: 1; 1523 | } 1524 | 1525 | 100% { 1526 | opacity: 0; 1527 | -webkit-transform: translate3d(0, -100%, 0); 1528 | transform: translate3d(0, -100%, 0); 1529 | } 1530 | } 1531 | 1532 | @keyframes fadeOutUp { 1533 | 0% { 1534 | opacity: 1; 1535 | } 1536 | 1537 | 100% { 1538 | opacity: 0; 1539 | -webkit-transform: translate3d(0, -100%, 0); 1540 | transform: translate3d(0, -100%, 0); 1541 | } 1542 | } 1543 | 1544 | .fadeOutUp { 1545 | -webkit-animation-name: fadeOutUp; 1546 | animation-name: fadeOutUp; 1547 | } 1548 | 1549 | @-webkit-keyframes fadeOutUpBig { 1550 | 0% { 1551 | opacity: 1; 1552 | } 1553 | 1554 | 100% { 1555 | opacity: 0; 1556 | -webkit-transform: translate3d(0, -2000px, 0); 1557 | transform: translate3d(0, -2000px, 0); 1558 | } 1559 | } 1560 | 1561 | @keyframes fadeOutUpBig { 1562 | 0% { 1563 | opacity: 1; 1564 | } 1565 | 1566 | 100% { 1567 | opacity: 0; 1568 | -webkit-transform: translate3d(0, -2000px, 0); 1569 | transform: translate3d(0, -2000px, 0); 1570 | } 1571 | } 1572 | 1573 | .fadeOutUpBig { 1574 | -webkit-animation-name: fadeOutUpBig; 1575 | animation-name: fadeOutUpBig; 1576 | } 1577 | 1578 | @-webkit-keyframes flip { 1579 | 0% { 1580 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); 1581 | transform: perspective(400px) rotate3d(0, 1, 0, -360deg); 1582 | -webkit-animation-timing-function: ease-out; 1583 | animation-timing-function: ease-out; 1584 | } 1585 | 1586 | 40% { 1587 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); 1588 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); 1589 | -webkit-animation-timing-function: ease-out; 1590 | animation-timing-function: ease-out; 1591 | } 1592 | 1593 | 50% { 1594 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); 1595 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); 1596 | -webkit-animation-timing-function: ease-in; 1597 | animation-timing-function: ease-in; 1598 | } 1599 | 1600 | 80% { 1601 | -webkit-transform: perspective(400px) scale3d(.95, .95, .95); 1602 | transform: perspective(400px) scale3d(.95, .95, .95); 1603 | -webkit-animation-timing-function: ease-in; 1604 | animation-timing-function: ease-in; 1605 | } 1606 | 1607 | 100% { 1608 | -webkit-transform: perspective(400px); 1609 | transform: perspective(400px); 1610 | -webkit-animation-timing-function: ease-in; 1611 | animation-timing-function: ease-in; 1612 | } 1613 | } 1614 | 1615 | @keyframes flip { 1616 | 0% { 1617 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); 1618 | transform: perspective(400px) rotate3d(0, 1, 0, -360deg); 1619 | -webkit-animation-timing-function: ease-out; 1620 | animation-timing-function: ease-out; 1621 | } 1622 | 1623 | 40% { 1624 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); 1625 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); 1626 | -webkit-animation-timing-function: ease-out; 1627 | animation-timing-function: ease-out; 1628 | } 1629 | 1630 | 50% { 1631 | -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); 1632 | transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); 1633 | -webkit-animation-timing-function: ease-in; 1634 | animation-timing-function: ease-in; 1635 | } 1636 | 1637 | 80% { 1638 | -webkit-transform: perspective(400px) scale3d(.95, .95, .95); 1639 | transform: perspective(400px) scale3d(.95, .95, .95); 1640 | -webkit-animation-timing-function: ease-in; 1641 | animation-timing-function: ease-in; 1642 | } 1643 | 1644 | 100% { 1645 | -webkit-transform: perspective(400px); 1646 | transform: perspective(400px); 1647 | -webkit-animation-timing-function: ease-in; 1648 | animation-timing-function: ease-in; 1649 | } 1650 | } 1651 | 1652 | .animated.flip { 1653 | -webkit-backface-visibility: visible; 1654 | backface-visibility: visible; 1655 | -webkit-animation-name: flip; 1656 | animation-name: flip; 1657 | } 1658 | 1659 | @-webkit-keyframes flipInX { 1660 | 0% { 1661 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1662 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1663 | -webkit-transition-timing-function: ease-in; 1664 | transition-timing-function: ease-in; 1665 | opacity: 0; 1666 | } 1667 | 1668 | 40% { 1669 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1670 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1671 | -webkit-transition-timing-function: ease-in; 1672 | transition-timing-function: ease-in; 1673 | } 1674 | 1675 | 60% { 1676 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); 1677 | transform: perspective(400px) rotate3d(1, 0, 0, 10deg); 1678 | opacity: 1; 1679 | } 1680 | 1681 | 80% { 1682 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); 1683 | transform: perspective(400px) rotate3d(1, 0, 0, -5deg); 1684 | } 1685 | 1686 | 100% { 1687 | -webkit-transform: perspective(400px); 1688 | transform: perspective(400px); 1689 | } 1690 | } 1691 | 1692 | @keyframes flipInX { 1693 | 0% { 1694 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1695 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1696 | -webkit-transition-timing-function: ease-in; 1697 | transition-timing-function: ease-in; 1698 | opacity: 0; 1699 | } 1700 | 1701 | 40% { 1702 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1703 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1704 | -webkit-transition-timing-function: ease-in; 1705 | transition-timing-function: ease-in; 1706 | } 1707 | 1708 | 60% { 1709 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); 1710 | transform: perspective(400px) rotate3d(1, 0, 0, 10deg); 1711 | opacity: 1; 1712 | } 1713 | 1714 | 80% { 1715 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); 1716 | transform: perspective(400px) rotate3d(1, 0, 0, -5deg); 1717 | } 1718 | 1719 | 100% { 1720 | -webkit-transform: perspective(400px); 1721 | transform: perspective(400px); 1722 | } 1723 | } 1724 | 1725 | .flipInX { 1726 | -webkit-backface-visibility: visible !important; 1727 | backface-visibility: visible !important; 1728 | -webkit-animation-name: flipInX; 1729 | animation-name: flipInX; 1730 | } 1731 | 1732 | @-webkit-keyframes flipInY { 1733 | 0% { 1734 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1735 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1736 | -webkit-transition-timing-function: ease-in; 1737 | transition-timing-function: ease-in; 1738 | opacity: 0; 1739 | } 1740 | 1741 | 40% { 1742 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); 1743 | transform: perspective(400px) rotate3d(0, 1, 0, -20deg); 1744 | -webkit-transition-timing-function: ease-in; 1745 | transition-timing-function: ease-in; 1746 | } 1747 | 1748 | 60% { 1749 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); 1750 | transform: perspective(400px) rotate3d(0, 1, 0, 10deg); 1751 | opacity: 1; 1752 | } 1753 | 1754 | 80% { 1755 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); 1756 | transform: perspective(400px) rotate3d(0, 1, 0, -5deg); 1757 | } 1758 | 1759 | 100% { 1760 | -webkit-transform: perspective(400px); 1761 | transform: perspective(400px); 1762 | } 1763 | } 1764 | 1765 | @keyframes flipInY { 1766 | 0% { 1767 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1768 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1769 | -webkit-transition-timing-function: ease-in; 1770 | transition-timing-function: ease-in; 1771 | opacity: 0; 1772 | } 1773 | 1774 | 40% { 1775 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); 1776 | transform: perspective(400px) rotate3d(0, 1, 0, -20deg); 1777 | -webkit-transition-timing-function: ease-in; 1778 | transition-timing-function: ease-in; 1779 | } 1780 | 1781 | 60% { 1782 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); 1783 | transform: perspective(400px) rotate3d(0, 1, 0, 10deg); 1784 | opacity: 1; 1785 | } 1786 | 1787 | 80% { 1788 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); 1789 | transform: perspective(400px) rotate3d(0, 1, 0, -5deg); 1790 | } 1791 | 1792 | 100% { 1793 | -webkit-transform: perspective(400px); 1794 | transform: perspective(400px); 1795 | } 1796 | } 1797 | 1798 | .flipInY { 1799 | -webkit-backface-visibility: visible !important; 1800 | backface-visibility: visible !important; 1801 | -webkit-animation-name: flipInY; 1802 | animation-name: flipInY; 1803 | } 1804 | 1805 | @-webkit-keyframes flipOutX { 1806 | 0% { 1807 | -webkit-transform: perspective(400px); 1808 | transform: perspective(400px); 1809 | } 1810 | 1811 | 30% { 1812 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1813 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1814 | opacity: 1; 1815 | } 1816 | 1817 | 100% { 1818 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1819 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1820 | opacity: 0; 1821 | } 1822 | } 1823 | 1824 | @keyframes flipOutX { 1825 | 0% { 1826 | -webkit-transform: perspective(400px); 1827 | transform: perspective(400px); 1828 | } 1829 | 1830 | 30% { 1831 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1832 | transform: perspective(400px) rotate3d(1, 0, 0, -20deg); 1833 | opacity: 1; 1834 | } 1835 | 1836 | 100% { 1837 | -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1838 | transform: perspective(400px) rotate3d(1, 0, 0, 90deg); 1839 | opacity: 0; 1840 | } 1841 | } 1842 | 1843 | .flipOutX { 1844 | -webkit-animation-name: flipOutX; 1845 | animation-name: flipOutX; 1846 | -webkit-animation-duration: .75s; 1847 | animation-duration: .75s; 1848 | -webkit-backface-visibility: visible !important; 1849 | backface-visibility: visible !important; 1850 | } 1851 | 1852 | @-webkit-keyframes flipOutY { 1853 | 0% { 1854 | -webkit-transform: perspective(400px); 1855 | transform: perspective(400px); 1856 | } 1857 | 1858 | 30% { 1859 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); 1860 | transform: perspective(400px) rotate3d(0, 1, 0, -15deg); 1861 | opacity: 1; 1862 | } 1863 | 1864 | 100% { 1865 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1866 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1867 | opacity: 0; 1868 | } 1869 | } 1870 | 1871 | @keyframes flipOutY { 1872 | 0% { 1873 | -webkit-transform: perspective(400px); 1874 | transform: perspective(400px); 1875 | } 1876 | 1877 | 30% { 1878 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); 1879 | transform: perspective(400px) rotate3d(0, 1, 0, -15deg); 1880 | opacity: 1; 1881 | } 1882 | 1883 | 100% { 1884 | -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1885 | transform: perspective(400px) rotate3d(0, 1, 0, 90deg); 1886 | opacity: 0; 1887 | } 1888 | } 1889 | 1890 | .flipOutY { 1891 | -webkit-backface-visibility: visible !important; 1892 | backface-visibility: visible !important; 1893 | -webkit-animation-name: flipOutY; 1894 | animation-name: flipOutY; 1895 | -webkit-animation-duration: .75s; 1896 | animation-duration: .75s; 1897 | } 1898 | 1899 | @-webkit-keyframes lightSpeedIn { 1900 | 0% { 1901 | -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); 1902 | transform: translate3d(100%, 0, 0) skewX(-30deg); 1903 | opacity: 0; 1904 | } 1905 | 1906 | 60% { 1907 | -webkit-transform: skewX(20deg); 1908 | transform: skewX(20deg); 1909 | opacity: 1; 1910 | } 1911 | 1912 | 80% { 1913 | -webkit-transform: skewX(-5deg); 1914 | transform: skewX(-5deg); 1915 | opacity: 1; 1916 | } 1917 | 1918 | 100% { 1919 | -webkit-transform: none; 1920 | transform: none; 1921 | opacity: 1; 1922 | } 1923 | } 1924 | 1925 | @keyframes lightSpeedIn { 1926 | 0% { 1927 | -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); 1928 | transform: translate3d(100%, 0, 0) skewX(-30deg); 1929 | opacity: 0; 1930 | } 1931 | 1932 | 60% { 1933 | -webkit-transform: skewX(20deg); 1934 | transform: skewX(20deg); 1935 | opacity: 1; 1936 | } 1937 | 1938 | 80% { 1939 | -webkit-transform: skewX(-5deg); 1940 | transform: skewX(-5deg); 1941 | opacity: 1; 1942 | } 1943 | 1944 | 100% { 1945 | -webkit-transform: none; 1946 | transform: none; 1947 | opacity: 1; 1948 | } 1949 | } 1950 | 1951 | .lightSpeedIn { 1952 | -webkit-animation-name: lightSpeedIn; 1953 | animation-name: lightSpeedIn; 1954 | -webkit-animation-timing-function: ease-out; 1955 | animation-timing-function: ease-out; 1956 | } 1957 | 1958 | @-webkit-keyframes lightSpeedOut { 1959 | 0% { 1960 | opacity: 1; 1961 | } 1962 | 1963 | 100% { 1964 | -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); 1965 | transform: translate3d(100%, 0, 0) skewX(30deg); 1966 | opacity: 0; 1967 | } 1968 | } 1969 | 1970 | @keyframes lightSpeedOut { 1971 | 0% { 1972 | opacity: 1; 1973 | } 1974 | 1975 | 100% { 1976 | -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); 1977 | transform: translate3d(100%, 0, 0) skewX(30deg); 1978 | opacity: 0; 1979 | } 1980 | } 1981 | 1982 | .lightSpeedOut { 1983 | -webkit-animation-name: lightSpeedOut; 1984 | animation-name: lightSpeedOut; 1985 | -webkit-animation-timing-function: ease-in; 1986 | animation-timing-function: ease-in; 1987 | } 1988 | 1989 | @-webkit-keyframes rotateIn { 1990 | 0% { 1991 | -webkit-transform-origin: center; 1992 | transform-origin: center; 1993 | -webkit-transform: rotate3d(0, 0, 1, -200deg); 1994 | transform: rotate3d(0, 0, 1, -200deg); 1995 | opacity: 0; 1996 | } 1997 | 1998 | 100% { 1999 | -webkit-transform-origin: center; 2000 | transform-origin: center; 2001 | -webkit-transform: none; 2002 | transform: none; 2003 | opacity: 1; 2004 | } 2005 | } 2006 | 2007 | @keyframes rotateIn { 2008 | 0% { 2009 | -webkit-transform-origin: center; 2010 | transform-origin: center; 2011 | -webkit-transform: rotate3d(0, 0, 1, -200deg); 2012 | transform: rotate3d(0, 0, 1, -200deg); 2013 | opacity: 0; 2014 | } 2015 | 2016 | 100% { 2017 | -webkit-transform-origin: center; 2018 | transform-origin: center; 2019 | -webkit-transform: none; 2020 | transform: none; 2021 | opacity: 1; 2022 | } 2023 | } 2024 | 2025 | .rotateIn { 2026 | -webkit-animation-name: rotateIn; 2027 | animation-name: rotateIn; 2028 | } 2029 | 2030 | @-webkit-keyframes rotateInDownLeft { 2031 | 0% { 2032 | -webkit-transform-origin: left bottom; 2033 | transform-origin: left bottom; 2034 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 2035 | transform: rotate3d(0, 0, 1, -45deg); 2036 | opacity: 0; 2037 | } 2038 | 2039 | 100% { 2040 | -webkit-transform-origin: left bottom; 2041 | transform-origin: left bottom; 2042 | -webkit-transform: none; 2043 | transform: none; 2044 | opacity: 1; 2045 | } 2046 | } 2047 | 2048 | @keyframes rotateInDownLeft { 2049 | 0% { 2050 | -webkit-transform-origin: left bottom; 2051 | transform-origin: left bottom; 2052 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 2053 | transform: rotate3d(0, 0, 1, -45deg); 2054 | opacity: 0; 2055 | } 2056 | 2057 | 100% { 2058 | -webkit-transform-origin: left bottom; 2059 | transform-origin: left bottom; 2060 | -webkit-transform: none; 2061 | transform: none; 2062 | opacity: 1; 2063 | } 2064 | } 2065 | 2066 | .rotateInDownLeft { 2067 | -webkit-animation-name: rotateInDownLeft; 2068 | animation-name: rotateInDownLeft; 2069 | } 2070 | 2071 | @-webkit-keyframes rotateInDownRight { 2072 | 0% { 2073 | -webkit-transform-origin: right bottom; 2074 | transform-origin: right bottom; 2075 | -webkit-transform: rotate3d(0, 0, 1, 45deg); 2076 | transform: rotate3d(0, 0, 1, 45deg); 2077 | opacity: 0; 2078 | } 2079 | 2080 | 100% { 2081 | -webkit-transform-origin: right bottom; 2082 | transform-origin: right bottom; 2083 | -webkit-transform: none; 2084 | transform: none; 2085 | opacity: 1; 2086 | } 2087 | } 2088 | 2089 | @keyframes rotateInDownRight { 2090 | 0% { 2091 | -webkit-transform-origin: right bottom; 2092 | transform-origin: right bottom; 2093 | -webkit-transform: rotate3d(0, 0, 1, 45deg); 2094 | transform: rotate3d(0, 0, 1, 45deg); 2095 | opacity: 0; 2096 | } 2097 | 2098 | 100% { 2099 | -webkit-transform-origin: right bottom; 2100 | transform-origin: right bottom; 2101 | -webkit-transform: none; 2102 | transform: none; 2103 | opacity: 1; 2104 | } 2105 | } 2106 | 2107 | .rotateInDownRight { 2108 | -webkit-animation-name: rotateInDownRight; 2109 | animation-name: rotateInDownRight; 2110 | } 2111 | 2112 | @-webkit-keyframes rotateInUpLeft { 2113 | 0% { 2114 | -webkit-transform-origin: left bottom; 2115 | transform-origin: left bottom; 2116 | -webkit-transform: rotate3d(0, 0, 1, 45deg); 2117 | transform: rotate3d(0, 0, 1, 45deg); 2118 | opacity: 0; 2119 | } 2120 | 2121 | 100% { 2122 | -webkit-transform-origin: left bottom; 2123 | transform-origin: left bottom; 2124 | -webkit-transform: none; 2125 | transform: none; 2126 | opacity: 1; 2127 | } 2128 | } 2129 | 2130 | @keyframes rotateInUpLeft { 2131 | 0% { 2132 | -webkit-transform-origin: left bottom; 2133 | transform-origin: left bottom; 2134 | -webkit-transform: rotate3d(0, 0, 1, 45deg); 2135 | transform: rotate3d(0, 0, 1, 45deg); 2136 | opacity: 0; 2137 | } 2138 | 2139 | 100% { 2140 | -webkit-transform-origin: left bottom; 2141 | transform-origin: left bottom; 2142 | -webkit-transform: none; 2143 | transform: none; 2144 | opacity: 1; 2145 | } 2146 | } 2147 | 2148 | .rotateInUpLeft { 2149 | -webkit-animation-name: rotateInUpLeft; 2150 | animation-name: rotateInUpLeft; 2151 | } 2152 | 2153 | @-webkit-keyframes rotateInUpRight { 2154 | 0% { 2155 | -webkit-transform-origin: right bottom; 2156 | transform-origin: right bottom; 2157 | -webkit-transform: rotate3d(0, 0, 1, -90deg); 2158 | transform: rotate3d(0, 0, 1, -90deg); 2159 | opacity: 0; 2160 | } 2161 | 2162 | 100% { 2163 | -webkit-transform-origin: right bottom; 2164 | transform-origin: right bottom; 2165 | -webkit-transform: none; 2166 | transform: none; 2167 | opacity: 1; 2168 | } 2169 | } 2170 | 2171 | @keyframes rotateInUpRight { 2172 | 0% { 2173 | -webkit-transform-origin: right bottom; 2174 | transform-origin: right bottom; 2175 | -webkit-transform: rotate3d(0, 0, 1, -90deg); 2176 | transform: rotate3d(0, 0, 1, -90deg); 2177 | opacity: 0; 2178 | } 2179 | 2180 | 100% { 2181 | -webkit-transform-origin: right bottom; 2182 | transform-origin: right bottom; 2183 | -webkit-transform: none; 2184 | transform: none; 2185 | opacity: 1; 2186 | } 2187 | } 2188 | 2189 | .rotateInUpRight { 2190 | -webkit-animation-name: rotateInUpRight; 2191 | animation-name: rotateInUpRight; 2192 | } 2193 | 2194 | @-webkit-keyframes rotateOut { 2195 | 0% { 2196 | -webkit-transform-origin: center; 2197 | transform-origin: center; 2198 | opacity: 1; 2199 | } 2200 | 2201 | 100% { 2202 | -webkit-transform-origin: center; 2203 | transform-origin: center; 2204 | -webkit-transform: rotate3d(0, 0, 1, 200deg); 2205 | transform: rotate3d(0, 0, 1, 200deg); 2206 | opacity: 0; 2207 | } 2208 | } 2209 | 2210 | @keyframes rotateOut { 2211 | 0% { 2212 | -webkit-transform-origin: center; 2213 | transform-origin: center; 2214 | opacity: 1; 2215 | } 2216 | 2217 | 100% { 2218 | -webkit-transform-origin: center; 2219 | transform-origin: center; 2220 | -webkit-transform: rotate3d(0, 0, 1, 200deg); 2221 | transform: rotate3d(0, 0, 1, 200deg); 2222 | opacity: 0; 2223 | } 2224 | } 2225 | 2226 | .rotateOut { 2227 | -webkit-animation-name: rotateOut; 2228 | animation-name: rotateOut; 2229 | } 2230 | 2231 | @-webkit-keyframes rotateOutDownLeft { 2232 | 0% { 2233 | -webkit-transform-origin: left bottom; 2234 | transform-origin: left bottom; 2235 | opacity: 1; 2236 | } 2237 | 2238 | 100% { 2239 | -webkit-transform-origin: left bottom; 2240 | transform-origin: left bottom; 2241 | -webkit-transform: rotate3d(0, 0, 1, 45deg); 2242 | transform: rotate3d(0, 0, 1, 45deg); 2243 | opacity: 0; 2244 | } 2245 | } 2246 | 2247 | @keyframes rotateOutDownLeft { 2248 | 0% { 2249 | -webkit-transform-origin: left bottom; 2250 | transform-origin: left bottom; 2251 | opacity: 1; 2252 | } 2253 | 2254 | 100% { 2255 | -webkit-transform-origin: left bottom; 2256 | transform-origin: left bottom; 2257 | -webkit-transform: rotate3d(0, 0, 1, 45deg); 2258 | transform: rotate3d(0, 0, 1, 45deg); 2259 | opacity: 0; 2260 | } 2261 | } 2262 | 2263 | .rotateOutDownLeft { 2264 | -webkit-animation-name: rotateOutDownLeft; 2265 | animation-name: rotateOutDownLeft; 2266 | } 2267 | 2268 | @-webkit-keyframes rotateOutDownRight { 2269 | 0% { 2270 | -webkit-transform-origin: right bottom; 2271 | transform-origin: right bottom; 2272 | opacity: 1; 2273 | } 2274 | 2275 | 100% { 2276 | -webkit-transform-origin: right bottom; 2277 | transform-origin: right bottom; 2278 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 2279 | transform: rotate3d(0, 0, 1, -45deg); 2280 | opacity: 0; 2281 | } 2282 | } 2283 | 2284 | @keyframes rotateOutDownRight { 2285 | 0% { 2286 | -webkit-transform-origin: right bottom; 2287 | transform-origin: right bottom; 2288 | opacity: 1; 2289 | } 2290 | 2291 | 100% { 2292 | -webkit-transform-origin: right bottom; 2293 | transform-origin: right bottom; 2294 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 2295 | transform: rotate3d(0, 0, 1, -45deg); 2296 | opacity: 0; 2297 | } 2298 | } 2299 | 2300 | .rotateOutDownRight { 2301 | -webkit-animation-name: rotateOutDownRight; 2302 | animation-name: rotateOutDownRight; 2303 | } 2304 | 2305 | @-webkit-keyframes rotateOutUpLeft { 2306 | 0% { 2307 | -webkit-transform-origin: left bottom; 2308 | transform-origin: left bottom; 2309 | opacity: 1; 2310 | } 2311 | 2312 | 100% { 2313 | -webkit-transform-origin: left bottom; 2314 | transform-origin: left bottom; 2315 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 2316 | transform: rotate3d(0, 0, 1, -45deg); 2317 | opacity: 0; 2318 | } 2319 | } 2320 | 2321 | @keyframes rotateOutUpLeft { 2322 | 0% { 2323 | -webkit-transform-origin: left bottom; 2324 | transform-origin: left bottom; 2325 | opacity: 1; 2326 | } 2327 | 2328 | 100% { 2329 | -webkit-transform-origin: left bottom; 2330 | transform-origin: left bottom; 2331 | -webkit-transform: rotate3d(0, 0, 1, -45deg); 2332 | transform: rotate3d(0, 0, 1, -45deg); 2333 | opacity: 0; 2334 | } 2335 | } 2336 | 2337 | .rotateOutUpLeft { 2338 | -webkit-animation-name: rotateOutUpLeft; 2339 | animation-name: rotateOutUpLeft; 2340 | } 2341 | 2342 | @-webkit-keyframes rotateOutUpRight { 2343 | 0% { 2344 | -webkit-transform-origin: right bottom; 2345 | transform-origin: right bottom; 2346 | opacity: 1; 2347 | } 2348 | 2349 | 100% { 2350 | -webkit-transform-origin: right bottom; 2351 | transform-origin: right bottom; 2352 | -webkit-transform: rotate3d(0, 0, 1, 90deg); 2353 | transform: rotate3d(0, 0, 1, 90deg); 2354 | opacity: 0; 2355 | } 2356 | } 2357 | 2358 | @keyframes rotateOutUpRight { 2359 | 0% { 2360 | -webkit-transform-origin: right bottom; 2361 | transform-origin: right bottom; 2362 | opacity: 1; 2363 | } 2364 | 2365 | 100% { 2366 | -webkit-transform-origin: right bottom; 2367 | transform-origin: right bottom; 2368 | -webkit-transform: rotate3d(0, 0, 1, 90deg); 2369 | transform: rotate3d(0, 0, 1, 90deg); 2370 | opacity: 0; 2371 | } 2372 | } 2373 | 2374 | .rotateOutUpRight { 2375 | -webkit-animation-name: rotateOutUpRight; 2376 | animation-name: rotateOutUpRight; 2377 | } 2378 | 2379 | @-webkit-keyframes hinge { 2380 | 0% { 2381 | -webkit-transform-origin: top left; 2382 | transform-origin: top left; 2383 | -webkit-animation-timing-function: ease-in-out; 2384 | animation-timing-function: ease-in-out; 2385 | } 2386 | 2387 | 20%, 60% { 2388 | -webkit-transform: rotate3d(0, 0, 1, 80deg); 2389 | transform: rotate3d(0, 0, 1, 80deg); 2390 | -webkit-transform-origin: top left; 2391 | transform-origin: top left; 2392 | -webkit-animation-timing-function: ease-in-out; 2393 | animation-timing-function: ease-in-out; 2394 | } 2395 | 2396 | 40%, 80% { 2397 | -webkit-transform: rotate3d(0, 0, 1, 60deg); 2398 | transform: rotate3d(0, 0, 1, 60deg); 2399 | -webkit-transform-origin: top left; 2400 | transform-origin: top left; 2401 | -webkit-animation-timing-function: ease-in-out; 2402 | animation-timing-function: ease-in-out; 2403 | opacity: 1; 2404 | } 2405 | 2406 | 100% { 2407 | -webkit-transform: translate3d(0, 700px, 0); 2408 | transform: translate3d(0, 700px, 0); 2409 | opacity: 0; 2410 | } 2411 | } 2412 | 2413 | @keyframes hinge { 2414 | 0% { 2415 | -webkit-transform-origin: top left; 2416 | transform-origin: top left; 2417 | -webkit-animation-timing-function: ease-in-out; 2418 | animation-timing-function: ease-in-out; 2419 | } 2420 | 2421 | 20%, 60% { 2422 | -webkit-transform: rotate3d(0, 0, 1, 80deg); 2423 | transform: rotate3d(0, 0, 1, 80deg); 2424 | -webkit-transform-origin: top left; 2425 | transform-origin: top left; 2426 | -webkit-animation-timing-function: ease-in-out; 2427 | animation-timing-function: ease-in-out; 2428 | } 2429 | 2430 | 40%, 80% { 2431 | -webkit-transform: rotate3d(0, 0, 1, 60deg); 2432 | transform: rotate3d(0, 0, 1, 60deg); 2433 | -webkit-transform-origin: top left; 2434 | transform-origin: top left; 2435 | -webkit-animation-timing-function: ease-in-out; 2436 | animation-timing-function: ease-in-out; 2437 | opacity: 1; 2438 | } 2439 | 2440 | 100% { 2441 | -webkit-transform: translate3d(0, 700px, 0); 2442 | transform: translate3d(0, 700px, 0); 2443 | opacity: 0; 2444 | } 2445 | } 2446 | 2447 | .hinge { 2448 | -webkit-animation-name: hinge; 2449 | animation-name: hinge; 2450 | } 2451 | 2452 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 2453 | 2454 | @-webkit-keyframes rollIn { 2455 | 0% { 2456 | opacity: 0; 2457 | -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); 2458 | transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); 2459 | } 2460 | 2461 | 100% { 2462 | opacity: 1; 2463 | -webkit-transform: none; 2464 | transform: none; 2465 | } 2466 | } 2467 | 2468 | @keyframes rollIn { 2469 | 0% { 2470 | opacity: 0; 2471 | -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); 2472 | transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); 2473 | } 2474 | 2475 | 100% { 2476 | opacity: 1; 2477 | -webkit-transform: none; 2478 | transform: none; 2479 | } 2480 | } 2481 | 2482 | .rollIn { 2483 | -webkit-animation-name: rollIn; 2484 | animation-name: rollIn; 2485 | } 2486 | 2487 | /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ 2488 | 2489 | @-webkit-keyframes rollOut { 2490 | 0% { 2491 | opacity: 1; 2492 | } 2493 | 2494 | 100% { 2495 | opacity: 0; 2496 | -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); 2497 | transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); 2498 | } 2499 | } 2500 | 2501 | @keyframes rollOut { 2502 | 0% { 2503 | opacity: 1; 2504 | } 2505 | 2506 | 100% { 2507 | opacity: 0; 2508 | -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); 2509 | transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); 2510 | } 2511 | } 2512 | 2513 | .rollOut { 2514 | -webkit-animation-name: rollOut; 2515 | animation-name: rollOut; 2516 | } 2517 | 2518 | @-webkit-keyframes zoomIn { 2519 | 0% { 2520 | opacity: 0; 2521 | -webkit-transform: scale3d(.3, .3, .3); 2522 | transform: scale3d(.3, .3, .3); 2523 | } 2524 | 2525 | 100% { 2526 | opacity: 1; 2527 | } 2528 | } 2529 | 2530 | @keyframes zoomIn { 2531 | 0% { 2532 | opacity: 0; 2533 | -webkit-transform: scale3d(.3, .3, .3); 2534 | transform: scale3d(.3, .3, .3); 2535 | } 2536 | 2537 | 100% { 2538 | opacity: 1; 2539 | } 2540 | } 2541 | 2542 | .zoomIn { 2543 | -webkit-animation-name: zoomIn; 2544 | animation-name: zoomIn; 2545 | } 2546 | 2547 | @-webkit-keyframes zoomInDown { 2548 | 0% { 2549 | opacity: 0; 2550 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); 2551 | transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); 2552 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2553 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2554 | } 2555 | 2556 | 60% { 2557 | opacity: 1; 2558 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2559 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2560 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2561 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2562 | } 2563 | } 2564 | 2565 | @keyframes zoomInDown { 2566 | 0% { 2567 | opacity: 0; 2568 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); 2569 | transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); 2570 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2571 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2572 | } 2573 | 2574 | 60% { 2575 | opacity: 1; 2576 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2577 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2578 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2579 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2580 | } 2581 | } 2582 | 2583 | .zoomInDown { 2584 | -webkit-animation-name: zoomInDown; 2585 | animation-name: zoomInDown; 2586 | } 2587 | 2588 | @-webkit-keyframes zoomInLeft { 2589 | 0% { 2590 | opacity: 0; 2591 | -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); 2592 | transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); 2593 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2594 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2595 | } 2596 | 2597 | 60% { 2598 | opacity: 1; 2599 | -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); 2600 | transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); 2601 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2602 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2603 | } 2604 | } 2605 | 2606 | @keyframes zoomInLeft { 2607 | 0% { 2608 | opacity: 0; 2609 | -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); 2610 | transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); 2611 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2612 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2613 | } 2614 | 2615 | 60% { 2616 | opacity: 1; 2617 | -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); 2618 | transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); 2619 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2620 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2621 | } 2622 | } 2623 | 2624 | .zoomInLeft { 2625 | -webkit-animation-name: zoomInLeft; 2626 | animation-name: zoomInLeft; 2627 | } 2628 | 2629 | @-webkit-keyframes zoomInRight { 2630 | 0% { 2631 | opacity: 0; 2632 | -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); 2633 | transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); 2634 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2635 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2636 | } 2637 | 2638 | 60% { 2639 | opacity: 1; 2640 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); 2641 | transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); 2642 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2643 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2644 | } 2645 | } 2646 | 2647 | @keyframes zoomInRight { 2648 | 0% { 2649 | opacity: 0; 2650 | -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); 2651 | transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); 2652 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2653 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2654 | } 2655 | 2656 | 60% { 2657 | opacity: 1; 2658 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); 2659 | transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); 2660 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2661 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2662 | } 2663 | } 2664 | 2665 | .zoomInRight { 2666 | -webkit-animation-name: zoomInRight; 2667 | animation-name: zoomInRight; 2668 | } 2669 | 2670 | @-webkit-keyframes zoomInUp { 2671 | 0% { 2672 | opacity: 0; 2673 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); 2674 | transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); 2675 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2676 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2677 | } 2678 | 2679 | 60% { 2680 | opacity: 1; 2681 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2682 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2683 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2684 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2685 | } 2686 | } 2687 | 2688 | @keyframes zoomInUp { 2689 | 0% { 2690 | opacity: 0; 2691 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); 2692 | transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); 2693 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2694 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2695 | } 2696 | 2697 | 60% { 2698 | opacity: 1; 2699 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2700 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2701 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2702 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2703 | } 2704 | } 2705 | 2706 | .zoomInUp { 2707 | -webkit-animation-name: zoomInUp; 2708 | animation-name: zoomInUp; 2709 | } 2710 | 2711 | @-webkit-keyframes zoomOut { 2712 | 0% { 2713 | opacity: 1; 2714 | } 2715 | 2716 | 50% { 2717 | opacity: 0; 2718 | -webkit-transform: scale3d(.3, .3, .3); 2719 | transform: scale3d(.3, .3, .3); 2720 | } 2721 | 2722 | 100% { 2723 | opacity: 0; 2724 | } 2725 | } 2726 | 2727 | @keyframes zoomOut { 2728 | 0% { 2729 | opacity: 1; 2730 | } 2731 | 2732 | 50% { 2733 | opacity: 0; 2734 | -webkit-transform: scale3d(.3, .3, .3); 2735 | transform: scale3d(.3, .3, .3); 2736 | } 2737 | 2738 | 100% { 2739 | opacity: 0; 2740 | } 2741 | } 2742 | 2743 | .zoomOut { 2744 | -webkit-animation-name: zoomOut; 2745 | animation-name: zoomOut; 2746 | } 2747 | 2748 | @-webkit-keyframes zoomOutDown { 2749 | 40% { 2750 | opacity: 1; 2751 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2752 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2753 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2754 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2755 | } 2756 | 2757 | 100% { 2758 | opacity: 0; 2759 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); 2760 | transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); 2761 | -webkit-transform-origin: center bottom; 2762 | transform-origin: center bottom; 2763 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2764 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2765 | } 2766 | } 2767 | 2768 | @keyframes zoomOutDown { 2769 | 40% { 2770 | opacity: 1; 2771 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2772 | transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); 2773 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2774 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2775 | } 2776 | 2777 | 100% { 2778 | opacity: 0; 2779 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); 2780 | transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); 2781 | -webkit-transform-origin: center bottom; 2782 | transform-origin: center bottom; 2783 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2784 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2785 | } 2786 | } 2787 | 2788 | .zoomOutDown { 2789 | -webkit-animation-name: zoomOutDown; 2790 | animation-name: zoomOutDown; 2791 | } 2792 | 2793 | @-webkit-keyframes zoomOutLeft { 2794 | 40% { 2795 | opacity: 1; 2796 | -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); 2797 | transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); 2798 | } 2799 | 2800 | 100% { 2801 | opacity: 0; 2802 | -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); 2803 | transform: scale(.1) translate3d(-2000px, 0, 0); 2804 | -webkit-transform-origin: left center; 2805 | transform-origin: left center; 2806 | } 2807 | } 2808 | 2809 | @keyframes zoomOutLeft { 2810 | 40% { 2811 | opacity: 1; 2812 | -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); 2813 | transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); 2814 | } 2815 | 2816 | 100% { 2817 | opacity: 0; 2818 | -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); 2819 | transform: scale(.1) translate3d(-2000px, 0, 0); 2820 | -webkit-transform-origin: left center; 2821 | transform-origin: left center; 2822 | } 2823 | } 2824 | 2825 | .zoomOutLeft { 2826 | -webkit-animation-name: zoomOutLeft; 2827 | animation-name: zoomOutLeft; 2828 | } 2829 | 2830 | @-webkit-keyframes zoomOutRight { 2831 | 40% { 2832 | opacity: 1; 2833 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); 2834 | transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); 2835 | } 2836 | 2837 | 100% { 2838 | opacity: 0; 2839 | -webkit-transform: scale(.1) translate3d(2000px, 0, 0); 2840 | transform: scale(.1) translate3d(2000px, 0, 0); 2841 | -webkit-transform-origin: right center; 2842 | transform-origin: right center; 2843 | } 2844 | } 2845 | 2846 | @keyframes zoomOutRight { 2847 | 40% { 2848 | opacity: 1; 2849 | -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); 2850 | transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); 2851 | } 2852 | 2853 | 100% { 2854 | opacity: 0; 2855 | -webkit-transform: scale(.1) translate3d(2000px, 0, 0); 2856 | transform: scale(.1) translate3d(2000px, 0, 0); 2857 | -webkit-transform-origin: right center; 2858 | transform-origin: right center; 2859 | } 2860 | } 2861 | 2862 | .zoomOutRight { 2863 | -webkit-animation-name: zoomOutRight; 2864 | animation-name: zoomOutRight; 2865 | } 2866 | 2867 | @-webkit-keyframes zoomOutUp { 2868 | 40% { 2869 | opacity: 1; 2870 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2871 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2872 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2873 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2874 | } 2875 | 2876 | 100% { 2877 | opacity: 0; 2878 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); 2879 | transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); 2880 | -webkit-transform-origin: center bottom; 2881 | transform-origin: center bottom; 2882 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2883 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2884 | } 2885 | } 2886 | 2887 | @keyframes zoomOutUp { 2888 | 40% { 2889 | opacity: 1; 2890 | -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2891 | transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); 2892 | -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2893 | animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190); 2894 | } 2895 | 2896 | 100% { 2897 | opacity: 0; 2898 | -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); 2899 | transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); 2900 | -webkit-transform-origin: center bottom; 2901 | transform-origin: center bottom; 2902 | -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2903 | animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1); 2904 | } 2905 | } 2906 | 2907 | .zoomOutUp { 2908 | -webkit-animation-name: zoomOutUp; 2909 | animation-name: zoomOutUp; 2910 | } 2911 | 2912 | @-webkit-keyframes slideInDown { 2913 | 0% { 2914 | -webkit-transform: translateY(-100%); 2915 | transform: translateY(-100%); 2916 | visibility: visible; 2917 | } 2918 | 2919 | 100% { 2920 | -webkit-transform: translateY(0); 2921 | transform: translateY(0); 2922 | } 2923 | } 2924 | 2925 | @keyframes slideInDown { 2926 | 0% { 2927 | -webkit-transform: translateY(-100%); 2928 | transform: translateY(-100%); 2929 | visibility: visible; 2930 | } 2931 | 2932 | 100% { 2933 | -webkit-transform: translateY(0); 2934 | transform: translateY(0); 2935 | } 2936 | } 2937 | 2938 | .slideInDown { 2939 | -webkit-animation-name: slideInDown; 2940 | animation-name: slideInDown; 2941 | } 2942 | 2943 | @-webkit-keyframes slideInLeft { 2944 | 0% { 2945 | -webkit-transform: translateX(-100%); 2946 | transform: translateX(-100%); 2947 | visibility: visible; 2948 | } 2949 | 2950 | 100% { 2951 | -webkit-transform: translateX(0); 2952 | transform: translateX(0); 2953 | } 2954 | } 2955 | 2956 | @keyframes slideInLeft { 2957 | 0% { 2958 | -webkit-transform: translateX(-100%); 2959 | transform: translateX(-100%); 2960 | visibility: visible; 2961 | } 2962 | 2963 | 100% { 2964 | -webkit-transform: translateX(0); 2965 | transform: translateX(0); 2966 | } 2967 | } 2968 | 2969 | .slideInLeft { 2970 | -webkit-animation-name: slideInLeft; 2971 | animation-name: slideInLeft; 2972 | } 2973 | 2974 | @-webkit-keyframes slideInRight { 2975 | 0% { 2976 | -webkit-transform: translateX(100%); 2977 | transform: translateX(100%); 2978 | visibility: visible; 2979 | } 2980 | 2981 | 100% { 2982 | -webkit-transform: translateX(0); 2983 | transform: translateX(0); 2984 | } 2985 | } 2986 | 2987 | @keyframes slideInRight { 2988 | 0% { 2989 | -webkit-transform: translateX(100%); 2990 | transform: translateX(100%); 2991 | visibility: visible; 2992 | } 2993 | 2994 | 100% { 2995 | -webkit-transform: translateX(0); 2996 | transform: translateX(0); 2997 | } 2998 | } 2999 | 3000 | .slideInRight { 3001 | -webkit-animation-name: slideInRight; 3002 | animation-name: slideInRight; 3003 | } 3004 | 3005 | @-webkit-keyframes slideInUp { 3006 | 0% { 3007 | -webkit-transform: translateY(100%); 3008 | transform: translateY(100%); 3009 | visibility: visible; 3010 | } 3011 | 3012 | 100% { 3013 | -webkit-transform: translateY(0); 3014 | transform: translateY(0); 3015 | } 3016 | } 3017 | 3018 | @keyframes slideInUp { 3019 | 0% { 3020 | -webkit-transform: translateY(100%); 3021 | transform: translateY(100%); 3022 | visibility: visible; 3023 | } 3024 | 3025 | 100% { 3026 | -webkit-transform: translateY(0); 3027 | transform: translateY(0); 3028 | } 3029 | } 3030 | 3031 | .slideInUp { 3032 | -webkit-animation-name: slideInUp; 3033 | animation-name: slideInUp; 3034 | } 3035 | 3036 | @-webkit-keyframes slideOutDown { 3037 | 0% { 3038 | -webkit-transform: translateY(0); 3039 | transform: translateY(0); 3040 | } 3041 | 3042 | 100% { 3043 | visibility: hidden; 3044 | -webkit-transform: translateY(100%); 3045 | transform: translateY(100%); 3046 | } 3047 | } 3048 | 3049 | @keyframes slideOutDown { 3050 | 0% { 3051 | -webkit-transform: translateY(0); 3052 | transform: translateY(0); 3053 | } 3054 | 3055 | 100% { 3056 | visibility: hidden; 3057 | -webkit-transform: translateY(100%); 3058 | transform: translateY(100%); 3059 | } 3060 | } 3061 | 3062 | .slideOutDown { 3063 | -webkit-animation-name: slideOutDown; 3064 | animation-name: slideOutDown; 3065 | } 3066 | 3067 | @-webkit-keyframes slideOutLeft { 3068 | 0% { 3069 | -webkit-transform: translateX(0); 3070 | transform: translateX(0); 3071 | } 3072 | 3073 | 100% { 3074 | visibility: hidden; 3075 | -webkit-transform: translateX(-100%); 3076 | transform: translateX(-100%); 3077 | } 3078 | } 3079 | 3080 | @keyframes slideOutLeft { 3081 | 0% { 3082 | -webkit-transform: translateX(0); 3083 | transform: translateX(0); 3084 | } 3085 | 3086 | 100% { 3087 | visibility: hidden; 3088 | -webkit-transform: translateX(-100%); 3089 | transform: translateX(-100%); 3090 | } 3091 | } 3092 | 3093 | .slideOutLeft { 3094 | -webkit-animation-name: slideOutLeft; 3095 | animation-name: slideOutLeft; 3096 | } 3097 | 3098 | @-webkit-keyframes slideOutRight { 3099 | 0% { 3100 | -webkit-transform: translateX(0); 3101 | transform: translateX(0); 3102 | } 3103 | 3104 | 100% { 3105 | visibility: hidden; 3106 | -webkit-transform: translateX(100%); 3107 | transform: translateX(100%); 3108 | } 3109 | } 3110 | 3111 | @keyframes slideOutRight { 3112 | 0% { 3113 | -webkit-transform: translateX(0); 3114 | transform: translateX(0); 3115 | } 3116 | 3117 | 100% { 3118 | visibility: hidden; 3119 | -webkit-transform: translateX(100%); 3120 | transform: translateX(100%); 3121 | } 3122 | } 3123 | 3124 | .slideOutRight { 3125 | -webkit-animation-name: slideOutRight; 3126 | animation-name: slideOutRight; 3127 | } 3128 | 3129 | @-webkit-keyframes slideOutUp { 3130 | 0% { 3131 | -webkit-transform: translateY(0); 3132 | transform: translateY(0); 3133 | } 3134 | 3135 | 100% { 3136 | visibility: hidden; 3137 | -webkit-transform: translateY(-100%); 3138 | transform: translateY(-100%); 3139 | } 3140 | } 3141 | 3142 | @keyframes slideOutUp { 3143 | 0% { 3144 | -webkit-transform: translateY(0); 3145 | transform: translateY(0); 3146 | } 3147 | 3148 | 100% { 3149 | visibility: hidden; 3150 | -webkit-transform: translateY(-100%); 3151 | transform: translateY(-100%); 3152 | } 3153 | } 3154 | 3155 | .slideOutUp { 3156 | -webkit-animation-name: slideOutUp; 3157 | animation-name: slideOutUp; 3158 | } 3159 | 3160 | @-webkit-keyframes extend{ 3161 | 0% { 3162 | left:-380px; 3163 | } 3164 | 3165 | 100% { 3166 | left: 50px; 3167 | } 3168 | } 3169 | 3170 | .extend{ 3171 | -webkit-animation-name:extend; 3172 | animation-name:extend; 3173 | } 3174 | 3175 | @-webkit-keyframes contract{ 3176 | 0% { 3177 | left:50px; 3178 | } 3179 | 3180 | 100% { 3181 | left: -380px; 3182 | } 3183 | } 3184 | 3185 | .contract{ 3186 | -webkit-animation-name:contract; 3187 | animation-name:contract; 3188 | } 3189 | 3190 | 3191 | 3192 | .circle_cw{ 3193 | transform: rotate(180deg); 3194 | transition:all .7s; 3195 | } 3196 | 3197 | .circle_aw{ 3198 | transform: rotate(-180deg); 3199 | transition:all 1.2s; 3200 | } 3201 | 3202 | 3203 | @-webkit-keyframes music_playing { 3204 | 0%{ 3205 | -webkit-transform: rotate(0deg); 3206 | 3207 | } 3208 | 50%{ 3209 | -webkit-transform: rotate(180deg); 3210 | 3211 | } 3212 | 100%{ 3213 | -webkit-transform: rotate(360deg); 3214 | 3215 | } 3216 | } 3217 | 3218 | .music_playing{ 3219 | -webkit-animation:music_playing 9s infinite linear ; 3220 | } 3221 | 3222 | -------------------------------------------------------------------------------- /public/lodash.min.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * lodash 3.1.0 (Custom Build) lodash.com/license | Underscore.js 1.7.0 underscorejs.org/LICENSE 4 | * Build: `lodash modern -o ./lodash.js` 5 | */ 6 | ;(function(){function n(n,t){if(n!==t){var r=n===n,e=t===t;if(n>t||!r||typeof n=="undefined"&&e)return 1;if(n=n&&9<=n&&13>=n||32==n||160==n||5760==n||6158==n||8192<=n&&(8202>=n||8232==n||8233==n||8239==n||8287==n||12288==n||65279==n) 8 | }function v(n,t){for(var r=-1,e=n.length,u=-1,o=[];++re&&(e=u)}return e}function Yt(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++ui(r,f)&&u.push(f);return u}function or(n,t){var r=n?n.length:0;if(!ue(r))return gr(n,t);for(var e=-1,u=se(n);++et&&(t=-t>u?0:u+t),r=typeof r=="undefined"||r>u?u:+r||0,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=_u(u);++eu(f,s)&&((r||a)&&f.push(s),c.push(l))}return c}function Or(n,t){for(var r=-1,e=t.length,u=_u(e);++r>>1,i=n[o]; 22 | (r?i<=t:it||null==r)return r;if(3=o&&a<=i&&(e=O&&t>u||e>u&&t>=O)||o)&&(t&x&&(r[2]=p[2],a|=e&x?0:j),(e=p[3])&&(u=r[3],r[3]=u?Ur(u,e,p[4]):zt(e),r[4]=u?v(r[3],B):zt(p[4])),(e=p[5])&&(u=r[5],r[5]=u?Fr(u,e,p[6]):zt(e),r[6]=u?v(r[5],B):zt(p[6])),(e=p[7])&&(r[7]=zt(e)),t&C&&(r[8]=null==r[8]?p[8]:eo(r[8],p[8])),null==r[9]&&(r[9]=p[9]),r[0]=p[0],r[1]=a),t=r[1],a=r[9]}return r[9]=null==a?f?0:n.length:ro(a-c,0)||0,(p?mo:xo)(t==x?Br(r[0],r[2]):t!=R&&t!=(x|R)||r[4].length?qr.apply(null,r):Kr.apply(null,r),r) 29 | }function Yr(n,t,r,e,u,o,i){var a=-1,f=n.length,c=t.length,l=true;if(f!=c&&(!u||c<=f))return false;for(;l&&++au)||i===e&&i===o)&&(u=i,o=n) 31 | }),o}function Xr(n,t,r){var e=Wt.callback||pu,e=e===pu?tr:e;return r?e(n,t,r):e}function Hr(n,r,e){var u=Wt.indexOf||de,u=u===de?t:u;return n?u(n,r,e):u}function Qr(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&Wu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function ne(n){return n=n.constructor,typeof n=="function"&&n instanceof n||(n=ju),new n}function te(n,t,r){var e=n.constructor;switch(t){case J:return Nr(n);case M:case q:return new e(+n);case X:case H:case Q:case nt:case tt:case rt:case et:case ut:case ot:return t=n.buffer,new e(r?Nr(t):t,n.byteOffset,n.length); 32 | case V:case G:return new e(n);case Z:var u=new e(n.source,yt.exec(n));u.lastIndex=n.lastIndex}return u}function re(n,t){return n=+n,t=null==t?go:t,-1t?0:t)):[]}function he(n,t,r){var e=n?n.length:0;return e?((r?ee(n,t,r):null==t)&&(t=1),t=e-(+t||0),Er(n,0,0>t?0:t)):[]}function ge(n,t,r){var e=-1,u=n?n.length:0;for(t=Xr(t,r,3);++ee?ro(u+e,0):e||0;else if(e)return e=Tr(n,r),n=n[e],(r===r?r===n:n!==n)?e:-1; 35 | return t(n,r,e)}function ye(n){return pe(n,1)}function _e(n,r,e,u){if(!n||!n.length)return[];typeof r!="boolean"&&null!=r&&(u=e,e=ee(n,r,u)?null:r,r=false);var o=Xr();if((o!==tr||null!=e)&&(e=o(e,u,3)),r&&Hr()==t){r=e;var i;e=-1,u=n.length;for(var o=-1,a=[];++e>>0,e=_u(r);++tr?ro(e+r,0):r||0:0,typeof n=="string"||!Co(n)&&Qe(n)?rarguments.length,or)}function Te(n,t,r,e){return(Co(n)?Zt:kr)(n,Xr(t,e,4),r,3>arguments.length,ir)}function Se(n,t,r){return(r?ee(n,t,r):null==t)?(n=le(n),t=n.length,0t?0:+t||0,n.length),n) 38 | }function We(n){n=le(n);for(var t=-1,r=n.length,e=_u(r);++t=r||r>t?(a&&Du(a),r=p,a=s=p=b,r&&(h=Oo(),f=n.apply(l,i),s||a||(i=l=null))):s=Yu(e,r)}function u(){s&&Du(s),a=s=p=b,(v||g!==t)&&(h=Oo(),f=n.apply(l,i),s||a||(i=l=null)) 40 | }function o(){if(i=arguments,c=Oo(),l=this,p=v&&(s||!d),false===g)var r=d&&!s;else{a||d||(h=c);var o=g-(c-h),y=0>=o||o>g;y?(a&&(a=Du(a)),h=c,f=n.apply(l,i)):a||(a=Yu(u,o))}return y&&s?s=Du(s):s||t===g||(s=Yu(e,t)),r&&(y=true,f=n.apply(l,i)),!y||s||a||(i=l=null),f}var i,a,f,c,l,s,p,h=0,g=false,v=true;if(!Ze(n))throw new Ru($);if(t=0>t?0:t,true===r)var d=true,v=false;else Ge(r)&&(d=r.leading,g="maxWait"in r&&ro(+r.maxWait||0,t),v="trailing"in r?r.trailing:v);return o.cancel=function(){s&&Du(s),a&&Du(a),a=s=p=b},o}function De(){var n=arguments,t=n.length-1; 41 | if(0>t)return function(){};if(!qt(n,Ze))throw new Ru($);return function(){for(var r=t,e=n[r].apply(this,arguments);r--;)e=n[r].call(this,e);return e}}function Me(n,t){function r(){var e=r.cache,u=t?t.apply(this,arguments):arguments[0];if(e.has(u))return e.get(u);var o=n.apply(this,arguments);return e.set(u,o),o}if(!Ze(n)||t&&!Ze(t))throw new Ru($);return r.cache=new Me.Cache,r}function qe(n){var t=Er(arguments,1),r=v(t,qe.placeholder);return Vr(n,R,null,t,r)}function Pe(n){var t=Er(arguments,1),r=v(t,Pe.placeholder); 42 | return Vr(n,I,null,t,r)}function Ke(n){return ue(h(n)?n.length:b)&&Uu.call(n)==z||false}function Ve(n){return n&&1===n.nodeType&&h(n)&&-1t||!n||!no(t))return r;do t%2&&(r+=n),t=Mu(t/2),n+=n;while(t);return r}function cu(n,t,r){var u=n;return(n=e(n))?(r?ee(u,t,r):null==t)?n.slice(d(n),y(n)+1):(t+="",n.slice(o(n,t),i(n,t)+1)):n}function lu(n,t,r){return r&&ee(n,t,r)&&(t=null),n=e(n),n.match(t||Rt)||[] 45 | }function su(n){try{return n()}catch(t){return Ye(t)?t:bu(t)}}function pu(n,t,r){return r&&ee(n,t,r)&&(t=null),h(n)?vu(n):tr(n,t)}function hu(n){return function(){return n}}function gu(n){return n}function vu(n){return wr(rr(n,true))}function du(n,t,r){if(null==r){var e=Ge(t),u=e&&No(t);((u=u&&u.length&&dr(t,u))?u.length:e)||(u=false,r=t,t=n,n=this)}u||(u=dr(t,No(t)));var o=true,e=-1,i=Ze(n),a=u.length;false===r?o=false:Ge(r)&&"chain"in r&&(o=r.chain);for(;++e>>1,ho=Xu?Xu.BYTES_PER_ELEMENT:0,go=xu.pow(2,53)-1,vo=Ju&&new Ju,yo=Wt.support={};!function(n){yo.funcDecomp=!Je(g.WinRTError)&&kt.test(m),yo.funcNames=typeof wu.name=="string";try{yo.dom=11===Cu.createDocumentFragment().nodeType 48 | }catch(t){yo.dom=false}try{yo.nonEnumArgs=!Ku.call(arguments,1)}catch(r){yo.nonEnumArgs=true}}(0,0),Wt.templateSettings={escape:ht,evaluate:gt,interpolate:vt,variable:"",imports:{_:Wt}};var _o=function(){function n(){}return function(t){if(Ge(t)){n.prototype=t;var r=new n;n.prototype=null}return r||g.Object()}}(),mo=vo?function(n,t){return vo.set(n,t),n}:gu;Bu||(Nr=$u&&Gu?function(n){var t=n.byteLength,r=Xu?Mu(t/ho):0,e=r*ho,u=new $u(t);if(r){var o=new Xu(u,0,r);o.set(new Xu(n,0,r))}return t!=e&&(o=new Gu(u,e),o.set(new Gu(n,e))),u 49 | }:hu(null));var bo=Qu&&Vu?function(n){return new Lt(n)}:hu(null),wo=vo?function(n){return vo.get(n)}:yu,xo=function(){var n=0,t=0;return function(r,e){var u=Oo(),o=N-(u-t);if(t=u,0=W)return r}else n=0;return mo(r,e)}}(),Ao=Lr(function(n,t,r){Wu.call(n,r)?++n[r]:n[r]=1}),jo=Lr(function(n,t,r){Wu.call(n,r)?n[r].push(t):n[r]=[t]}),ko=Lr(function(n,t,r){n[r]=t}),Eo=Mr(Vt),Ro=Mr(function(n){for(var t=-1,r=n.length,e=co;++t--n?t.apply(this,arguments):void 0}},Wt.ary=function(n,t,r){return r&&ee(n,t,r)&&(t=null),t=n&&null==t?n.length:ro(+t||0,0),Vr(n,C,null,null,null,null,t)},Wt.assign=Wo,Wt.at=function(n){return ue(n?n.length:0)&&(n=le(n)),Qt(n,lr(arguments,false,false,1))},Wt.before=Ue,Wt.bind=Fe,Wt.bindAll=function(n){for(var t=n,r=1(s?Bt(s,a):o(l,a))){for(r=e;--r;){var p=u[r];if(0>(p?Bt(p,a):o(n[r],a)))continue n}s&&s.push(a),l.push(a) 58 | }return l},Wt.invert=function(n,t,r){r&&ee(n,t,r)&&(t=null),r=-1;for(var e=No(n),u=e.length,o={};++rt?0:t)):[] 63 | },Wt.takeRight=function(n,t,r){var e=n?n.length:0;return e?((r?ee(n,t,r):null==t)&&(t=1),t=e-(+t||0),Er(n,0>t?0:t)):[]},Wt.takeRightWhile=function(n,t,r){var e=n?n.length:0;if(!e)return[];for(t=Xr(t,r,3);e--&&t(n[e],e,n););return Er(n,e+1)},Wt.takeWhile=function(n,t,r){var e=n?n.length:0;if(!e)return[];var u=-1;for(t=Xr(t,r,3);++un||!no(n))return[];var e=-1,u=_u(eo(n,lo));for(t=Wr(t,r,1);++er?0:+r||0,u))-t.length,0<=r&&n.indexOf(t,r)==r},Wt.escape=function(n){return(n=e(n))&&pt.test(n)?n.replace(lt,l):n},Wt.escapeRegExp=iu,Wt.every=je,Wt.find=Ee,Wt.findIndex=ge,Wt.findKey=function(n,t,r){return t=Xr(t,r,3),cr(n,t,gr,true) 67 | },Wt.findLast=function(n,t,r){return t=Xr(t,r,3),cr(n,t,ir)},Wt.findLastIndex=function(n,t,r){var e=n?n.length:0;for(t=Xr(t,r,3);e--;)if(t(n[e],e,n))return e;return-1},Wt.findLastKey=function(n,t,r){return t=Xr(t,r,3),cr(n,t,vr,true)},Wt.findWhere=function(n,t){return Ee(n,wr(t))},Wt.first=ve,Wt.has=function(n,t){return n?Wu.call(n,t):false},Wt.identity=gu,Wt.includes=Ae,Wt.indexOf=de,Wt.isArguments=Ke,Wt.isArray=Co,Wt.isBoolean=function(n){return true===n||false===n||h(n)&&Uu.call(n)==M||false},Wt.isDate=function(n){return h(n)&&Uu.call(n)==q||false 68 | },Wt.isElement=Ve,Wt.isEmpty=function(n){if(null==n)return true;var t=n.length;return ue(t)&&(Co(n)||Qe(n)||Ke(n)||h(n)&&Ze(n.splice))?!t:!No(n).length},Wt.isEqual=function(n,t,r,e){return r=typeof r=="function"&&Wr(r,e,3),!r&&oe(n)&&oe(t)?n===t:(e=r?r(n,t):b,typeof e=="undefined"?_r(n,t,r):!!e)},Wt.isError=Ye,Wt.isFinite=To,Wt.isFunction=Ze,Wt.isMatch=function(n,t,r,e){var u=No(t),o=u.length;if(r=typeof r=="function"&&Wr(r,e,3),!r&&1==o){var i=u[0];if(e=t[i],oe(e))return null!=n&&e===n[i]&&Wu.call(n,i) 69 | }for(var i=_u(o),a=_u(o);o--;)e=i[o]=t[u[o]],a[o]=oe(e);return mr(n,u,i,a,r)},Wt.isNaN=function(n){return Xe(n)&&n!=+n},Wt.isNative=Je,Wt.isNull=function(n){return null===n},Wt.isNumber=Xe,Wt.isObject=Ge,Wt.isPlainObject=So,Wt.isRegExp=He,Wt.isString=Qe,Wt.isTypedArray=nu,Wt.isUndefined=function(n){return typeof n=="undefined"},Wt.kebabCase=Lo,Wt.last=function(n){var t=n?n.length:0;return t?n[t-1]:b},Wt.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(typeof r=="number")u=(0>r?ro(e+r,0):eo(r||0,e-1))+1; 70 | else if(r)return u=Tr(n,t,true)-1,n=n[u],(t===t?t===n:n!==n)?u:-1;if(t!==t)return p(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},Wt.max=Eo,Wt.min=Ro,Wt.noConflict=function(){return g._=Fu,this},Wt.noop=yu,Wt.now=Oo,Wt.pad=function(n,t,r){n=e(n),t=+t;var u=n.length;return ur?0:+r||0,n.length),n.lastIndexOf(t,r)==r},Wt.template=function(n,t,r){var u=Wt.templateSettings;r&&ee(n,t,r)&&(t=r=null),n=e(n),t=Ht(Ht({},r||t),u,Xt),r=Ht(Ht({},t.imports),u.imports,Xt);var o,i,a=No(r),f=Or(r,a),c=0;r=t.interpolate||xt;var l="__p+='";r=ku((t.escape||xt).source+"|"+r.source+"|"+(r===vt?dt:xt).source+"|"+(t.evaluate||xt).source+"|$","g"); 73 | var p="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,u,a,f){return e||(e=u),l+=n.slice(c,f).replace(Et,s),r&&(o=true,l+="'+__e("+r+")+'"),a&&(i=true,l+="';"+a+";\n__p+='"),e&&(l+="'+((__t=("+e+"))==null?'':__t)+'"),c=f+t.length,t}),l+="';",(t=t.variable)||(l="with(obj){"+l+"}"),l=(i?l.replace(it,""):l).replace(at,"$1").replace(ft,"$1;"),l="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(o?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+l+"return __p}",t=su(function(){return wu(a,p+"return "+l).apply(b,f) 74 | }),t.source=l,Ye(t))throw t;return t},Wt.trim=cu,Wt.trimLeft=function(n,t,r){var u=n;return(n=e(n))?n.slice((r?ee(u,t,r):null==t)?d(n):o(n,t+"")):n},Wt.trimRight=function(n,t,r){var u=n;return(n=e(n))?(r?ee(u,t,r):null==t)?n.slice(0,y(n)+1):n.slice(0,i(n,t+"")+1):n},Wt.trunc=function(n,t,r){r&&ee(n,t,r)&&(t=null);var u=T;if(r=S,null!=t)if(Ge(t)){var o="separator"in t?t.separator:o,u="length"in t?+t.length||0:u;r="omission"in t?e(t.omission):r}else u=+t||0;if(n=e(n),u>=n.length)return n;if(u-=r.length,1>u)return r; 75 | if(t=n.slice(0,u),null==o)return t+r;if(He(o)){if(n.slice(u).search(o)){var i,a=n.slice(0,u);for(o.global||(o=ku(o.source,(yt.exec(o)||"")+"g")),o.lastIndex=0;n=o.exec(a);)i=n.index;t=t.slice(0,null==i?u:i)}}else n.indexOf(o,u)!=u&&(o=t.lastIndexOf(o),-1u.dir,i.push({iteratee:Xr(n,e,3),type:t}),u 77 | }}),Mt(["drop","take"],function(n,t){var r=n+"Count",e=n+"While";Ut.prototype[n]=function(e){e=null==e?1:ro(+e||0,0);var u=this.clone();if(u.filtered){var o=u[r];u[r]=t?eo(o,e):o+e}else(u.views||(u.views=[])).push({size:e,type:n+(0>u.dir?"Right":"")});return u},Ut.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()},Ut.prototype[n+"RightWhile"]=function(n,t){return this.reverse()[e](n,t).reverse()}}),Mt(["first","last"],function(n,t){var r="take"+(t?"Right":"");Ut.prototype[n]=function(){return this[r](1).value()[0] 78 | }}),Mt(["initial","rest"],function(n,t){var r="drop"+(t?"":"Right");Ut.prototype[n]=function(){return this[r](1)}}),Mt(["pluck","where"],function(n,t){var r=t?"filter":"map",e=t?wr:Ar;Ut.prototype[n]=function(n){return this[r](e(t?n:n+""))}}),Ut.prototype.dropWhile=function(n,t){var r,e,u=0>this.dir;return n=Xr(n,t,3),this.filter(function(t,o,i){return r=r&&(u?oe),e=o,r||(r=!n(t,o,i))})},Ut.prototype.reject=function(n,t){return n=Xr(n,t,3),this.filter(function(t,r,e){return!n(t,r,e)})},Ut.prototype.slice=function(n,t){n=null==n?0:+n||0; 79 | var r=0>n?this.takeRight(-n):this.drop(n);return typeof t!="undefined"&&(t=+t||0,r=0>t?r.dropRight(-t):r.take(t-n)),r},gr(Ut.prototype,function(n,t){var r=Wt[t],e=/^(?:first|last)$/.test(t);Wt.prototype[t]=function(){function t(n){return n=[n],Pu.apply(n,o),r.apply(Wt,n)}var u=this.__wrapped__,o=arguments,i=this.__chain__,a=!!this.__actions__.length,f=u instanceof Ut,c=f&&!a;return e&&!i?c?n.call(u):r.call(Wt,this.value()):f||Co(u)?(u=n.apply(c?u:new Ut(this),o),e||!a&&!u.actions||(u.actions||(u.actions=[])).push({func:xe,args:[t],thisArg:Wt}),new Nt(u,i)):this.thru(t) 80 | }}),Mt("concat join pop push shift sort splice unshift".split(" "),function(n){var t=Iu[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:join|pop|shift)$/.test(n);Wt.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),Ut.prototype.clone=function(){var n=this.actions,t=this.iteratees,r=this.views,e=new Ut(this.wrapped);return e.actions=n?zt(n):null,e.dir=this.dir,e.dropCount=this.dropCount,e.filtered=this.filtered,e.iteratees=t?zt(t):null,e.takeCount=this.takeCount,e.views=r?zt(r):null,e 81 | },Ut.prototype.reverse=function(){if(this.filtered){var n=new Ut(this);n.dir=-1,n.filtered=true}else n=this.clone(),n.dir*=-1;return n},Ut.prototype.value=function(){var n=this.wrapped.value();if(!Co(n))return Cr(n,this.actions);var t,r=this.dir,e=0>r;t=n.length;for(var u=this.views,o=0,i=-1,a=u?u.length:0;++i"'`]/g,st=RegExp(ct.source),pt=RegExp(lt.source),ht=/<%-([\s\S]+?)%>/g,gt=/<%([\s\S]+?)%>/g,vt=/<%=([\s\S]+?)%>/g,dt=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,yt=/\w*$/,_t=/^\s*function[ \n\r\t]+\w/,mt=/^0[xX]/,bt=/^\[object .+?Constructor\]$/,wt=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,xt=/($^)/,At=/[.*+?^${}()|[\]\/\\]/g,jt=RegExp(At.source),kt=/\bthis\b/,Et=/['\n\r\u2028\u2029\\]/g,Rt=RegExp("[A-Z\\xc0-\\xd6\\xd8-\\xde]{2,}(?=[A-Z\\xc0-\\xd6\\xd8-\\xde][a-z\\xdf-\\xf6\\xf8-\\xff]+)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|[0-9]+","g"),It=" \t\x0b\f\xa0\ufeff\n\r\u2028\u2029\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000",Ot="Array ArrayBuffer Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Math Number Object RegExp Set String _ clearTimeout document isFinite parseInt setTimeout TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap window WinRTError".split(" "),Ct={}; 84 | Ct[X]=Ct[H]=Ct[Q]=Ct[nt]=Ct[tt]=Ct[rt]=Ct[et]=Ct[ut]=Ct[ot]=true,Ct[z]=Ct[D]=Ct[J]=Ct[M]=Ct[q]=Ct[P]=Ct[K]=Ct["[object Map]"]=Ct[V]=Ct[Y]=Ct[Z]=Ct["[object Set]"]=Ct[G]=Ct["[object WeakMap]"]=false;var Tt={};Tt[z]=Tt[D]=Tt[J]=Tt[M]=Tt[q]=Tt[X]=Tt[H]=Tt[Q]=Tt[nt]=Tt[tt]=Tt[V]=Tt[Y]=Tt[Z]=Tt[G]=Tt[rt]=Tt[et]=Tt[ut]=Tt[ot]=true,Tt[P]=Tt[K]=Tt["[object Map]"]=Tt["[object Set]"]=Tt["[object WeakMap]"]=false;var St={leading:false,maxWait:0,trailing:false},Wt={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss"},Nt={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},Ut={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},Ft={"function":true,object:true},Lt={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},$t=Ft[typeof window]&&window!==(this&&this.window)?window:this,Bt=Ft[typeof exports]&&exports&&!exports.nodeType&&exports,Ft=Ft[typeof module]&&module&&!module.nodeType&&module,zt=Bt&&Ft&&typeof global=="object"&&global; 85 | !zt||zt.global!==zt&&zt.window!==zt&&zt.self!==zt||($t=zt);var zt=Ft&&Ft.exports===Bt&&Bt,Dt=m();typeof define=="function"&&typeof define.amd=="object"&&define.amd?($t._=Dt, define(function(){return Dt})):Bt&&Ft?zt?(Ft.exports=Dt)._=Dt:Bt._=Dt:$t._=Dt}).call(this); -------------------------------------------------------------------------------- /public/socket.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * Module dependencies. 4 | */ 5 | 6 | var Emitter = require('events').EventEmitter; 7 | var parser = require('socket.io-parser'); 8 | var url = require('url'); 9 | var debug = require('debug')('socket.io:socket'); 10 | var hasBin = require('has-binary-data'); 11 | 12 | /** 13 | * Module exports. 14 | */ 15 | 16 | module.exports = exports = Socket; 17 | 18 | /** 19 | * Blacklisted events. 20 | * 21 | * @api public 22 | */ 23 | 24 | exports.events = [ 25 | 'error', 26 | 'connect', 27 | 'disconnect', 28 | 'newListener', 29 | 'removeListener' 30 | ]; 31 | 32 | /** 33 | * Flags. 34 | * 35 | * @api private 36 | */ 37 | 38 | var flags = [ 39 | 'json', 40 | 'volatile', 41 | 'broadcast' 42 | ]; 43 | 44 | /** 45 | * `EventEmitter#emit` reference. 46 | */ 47 | 48 | var emit = Emitter.prototype.emit; 49 | 50 | /** 51 | * Interface to a `Client` for a given `Namespace`. 52 | * 53 | * @param {Namespace} nsp 54 | * @param {Client} client 55 | * @api public 56 | */ 57 | 58 | function Socket(nsp, client){ 59 | this.nsp = nsp; 60 | this.server = nsp.server; 61 | this.adapter = this.nsp.adapter; 62 | this.id = client.id; 63 | this.request = client.request; 64 | this.client = client; 65 | this.conn = client.conn; 66 | this.rooms = []; 67 | this.acks = {}; 68 | this.connected = true; 69 | this.disconnected = false; 70 | this.handshake = this.buildHandshake(); 71 | } 72 | 73 | /** 74 | * Inherits from `EventEmitter`. 75 | */ 76 | 77 | Socket.prototype.__proto__ = Emitter.prototype; 78 | 79 | /** 80 | * Apply flags from `Socket`. 81 | */ 82 | 83 | flags.forEach(function(flag){ 84 | Socket.prototype.__defineGetter__(flag, function(){ 85 | this.flags = this.flags || {}; 86 | this.flags[flag] = true; 87 | return this; 88 | }); 89 | }); 90 | 91 | /** 92 | * `request` engine.io shorcut. 93 | * 94 | * @api public 95 | */ 96 | 97 | Socket.prototype.__defineGetter__('request', function(){ 98 | return this.conn.request; 99 | }); 100 | 101 | /** 102 | * Builds the `handshake` BC object 103 | * 104 | * @api private 105 | */ 106 | 107 | Socket.prototype.buildHandshake = function(){ 108 | return { 109 | headers: this.request.headers, 110 | time: (new Date) + '', 111 | address: this.conn.remoteAddress, 112 | xdomain: !!this.request.headers.origin, 113 | secure: !!this.request.connection.encrypted, 114 | issued: +(new Date), 115 | url: this.request.url, 116 | query: url.parse(this.request.url, true).query || {} 117 | }; 118 | }; 119 | 120 | /** 121 | * Emits to this client. 122 | * 123 | * @return {Socket} self 124 | * @api public 125 | */ 126 | 127 | Socket.prototype.emit = function(ev){ 128 | if (~exports.events.indexOf(ev)) { 129 | emit.apply(this, arguments); 130 | } else { 131 | var args = Array.prototype.slice.call(arguments); 132 | var packet = {}; 133 | packet.type = hasBin(args) ? parser.BINARY_EVENT : parser.EVENT; 134 | packet.data = args; 135 | 136 | // access last argument to see if it's an ACK callback 137 | if ('function' == typeof args[args.length - 1]) { 138 | if (this._rooms || (this.flags && this.flags.broadcast)) { 139 | throw new Error('Callbacks are not supported when broadcasting'); 140 | } 141 | 142 | debug('emitting packet with ack id %d', this.nsp.ids); 143 | this.acks[this.nsp.ids] = args.pop(); 144 | packet.id = this.nsp.ids++; 145 | } 146 | 147 | if (this._rooms || (this.flags && this.flags.broadcast)) { 148 | this.adapter.broadcast(packet, { 149 | except: [this.id], 150 | rooms: this._rooms, 151 | flags: this.flags 152 | }); 153 | } else { 154 | // dispatch packet 155 | this.packet(packet); 156 | } 157 | 158 | // reset flags 159 | delete this._rooms; 160 | delete this.flags; 161 | } 162 | return this; 163 | }; 164 | 165 | /** 166 | * Targets a room when broadcasting. 167 | * 168 | * @param {String} name 169 | * @return {Socket} self 170 | * @api public 171 | */ 172 | 173 | Socket.prototype.to = 174 | Socket.prototype.in = function(name){ 175 | this._rooms = this._rooms || []; 176 | if (!~this._rooms.indexOf(name)) this._rooms.push(name); 177 | return this; 178 | }; 179 | 180 | /** 181 | * Sends a `message` event. 182 | * 183 | * @return {Socket} self 184 | * @api public 185 | */ 186 | 187 | Socket.prototype.send = 188 | Socket.prototype.write = function(){ 189 | var args = Array.prototype.slice.call(arguments); 190 | args.unshift('message'); 191 | this.emit.apply(this, args); 192 | return this; 193 | }; 194 | 195 | /** 196 | * Writes a packet. 197 | * 198 | * @param {Object} packet object 199 | * @api private 200 | */ 201 | 202 | Socket.prototype.packet = function(packet, preEncoded){ 203 | packet.nsp = this.nsp.name; 204 | var volatile = this.flags && this.flags.volatile; 205 | this.client.packet(packet, preEncoded, volatile); 206 | }; 207 | 208 | /** 209 | * Joins a room. 210 | * 211 | * @param {String} room 212 | * @param {Function} optional, callback 213 | * @return {Socket} self 214 | * @api private 215 | */ 216 | 217 | Socket.prototype.join = function(room, fn){ 218 | debug('joining room %s', room); 219 | var self = this; 220 | if (~this.rooms.indexOf(room)) return this; 221 | this.adapter.add(this.id, room, function(err){ 222 | if (err) return fn && fn(err); 223 | debug('joined room %s', room); 224 | self.rooms.push(room); 225 | fn && fn(null); 226 | }); 227 | return this; 228 | }; 229 | 230 | /** 231 | * Leaves a room. 232 | * 233 | * @param {String} room 234 | * @param {Function} optional, callback 235 | * @return {Socket} self 236 | * @api private 237 | */ 238 | 239 | Socket.prototype.leave = function(room, fn){ 240 | debug('leave room %s', room); 241 | var self = this; 242 | this.adapter.del(this.id, room, function(err){ 243 | if (err) return fn && fn(err); 244 | debug('left room %s', room); 245 | var idx = self.rooms.indexOf(room); 246 | if (idx >= 0) { 247 | self.rooms.splice(idx, 1); 248 | } 249 | fn && fn(null); 250 | }); 251 | return this; 252 | }; 253 | 254 | /** 255 | * Leave all rooms. 256 | * 257 | * @api private 258 | */ 259 | 260 | Socket.prototype.leaveAll = function(){ 261 | this.adapter.delAll(this.id); 262 | this.rooms = []; 263 | }; 264 | 265 | /** 266 | * Called by `Namespace` upon succesful 267 | * middleware execution (ie: authorization). 268 | * 269 | * @api private 270 | */ 271 | 272 | Socket.prototype.onconnect = function(){ 273 | debug('socket connected - writing packet'); 274 | this.join(this.id); 275 | this.packet({ type: parser.CONNECT }); 276 | this.nsp.connected[this.id] = this; 277 | }; 278 | 279 | /** 280 | * Called with each packet. Called by `Client`. 281 | * 282 | * @param {Object} packet 283 | * @api private 284 | */ 285 | 286 | Socket.prototype.onpacket = function(packet){ 287 | debug('got packet %j', packet); 288 | switch (packet.type) { 289 | case parser.EVENT: 290 | this.onevent(packet); 291 | break; 292 | 293 | case parser.BINARY_EVENT: 294 | this.onevent(packet); 295 | break; 296 | 297 | case parser.ACK: 298 | this.onack(packet); 299 | break; 300 | 301 | case parser.BINARY_ACK: 302 | this.onack(packet); 303 | break; 304 | 305 | case parser.DISCONNECT: 306 | this.ondisconnect(); 307 | break; 308 | 309 | case parser.ERROR: 310 | this.emit('error', packet.data); 311 | } 312 | }; 313 | 314 | /** 315 | * Called upon event packet. 316 | * 317 | * @param {Object} packet object 318 | * @api private 319 | */ 320 | 321 | Socket.prototype.onevent = function(packet){ 322 | var args = packet.data || []; 323 | debug('emitting event %j', args); 324 | 325 | if (null != packet.id) { 326 | debug('attaching ack callback to event'); 327 | args.push(this.ack(packet.id)); 328 | } 329 | 330 | emit.apply(this, args); 331 | }; 332 | 333 | /** 334 | * Produces an ack callback to emit with an event. 335 | * 336 | * @param {Number} packet id 337 | * @api private 338 | */ 339 | 340 | Socket.prototype.ack = function(id){ 341 | var self = this; 342 | var sent = false; 343 | return function(){ 344 | // prevent double callbacks 345 | if (sent) return; 346 | var args = Array.prototype.slice.call(arguments); 347 | debug('sending ack %j', args); 348 | 349 | var type = hasBin(args) ? parser.BINARY_ACK : parser.ACK; 350 | self.packet({ 351 | id: id, 352 | type: type, 353 | data: args 354 | }); 355 | }; 356 | }; 357 | 358 | /** 359 | * Called upon ack packet. 360 | * 361 | * @api private 362 | */ 363 | 364 | Socket.prototype.onack = function(packet){ 365 | var ack = this.acks[packet.id]; 366 | if ('function' == typeof ack) { 367 | debug('calling ack %s with %j', packet.id, packet.data); 368 | ack.apply(this, packet.data); 369 | delete this.acks[packet.id]; 370 | } else { 371 | debug('bad ack %s', packet.id); 372 | } 373 | }; 374 | 375 | /** 376 | * Called upon client disconnect packet. 377 | * 378 | * @api private 379 | */ 380 | 381 | Socket.prototype.ondisconnect = function(){ 382 | debug('got disconnect packet'); 383 | this.onclose('client namespace disconnect'); 384 | }; 385 | 386 | /** 387 | * Handles a client error. 388 | * 389 | * @api private 390 | */ 391 | 392 | Socket.prototype.onerror = function(err){ 393 | if (this.listeners('error').length) { 394 | this.emit('error', err); 395 | } else { 396 | console.error('Missing error handler on `socket`.'); 397 | console.error(err.stack); 398 | } 399 | }; 400 | 401 | /** 402 | * Called upon closing. Called by `Client`. 403 | * 404 | * @param {String} reason 405 | * @param {Error} optional error object 406 | * @api private 407 | */ 408 | 409 | Socket.prototype.onclose = function(reason){ 410 | if (!this.connected) return this; 411 | debug('closing socket - reason %s', reason); 412 | this.leaveAll(); 413 | this.nsp.remove(this); 414 | this.client.remove(this); 415 | this.connected = false; 416 | this.disconnected = true; 417 | delete this.nsp.connected[this.id]; 418 | this.emit('disconnect', reason); 419 | }; 420 | 421 | /** 422 | * Produces an `error` packet. 423 | * 424 | * @param {Object} error object 425 | * @api private 426 | */ 427 | 428 | Socket.prototype.error = function(err){ 429 | this.packet({ type: parser.ERROR, data: err }); 430 | }; 431 | 432 | /** 433 | * Disconnects this client. 434 | * 435 | * @param {Boolean} if `true`, closes the underlying connection 436 | * @return {Socket} self 437 | * @api public 438 | */ 439 | 440 | Socket.prototype.disconnect = function(close){ 441 | if (!this.connected) return this; 442 | if (close) { 443 | this.client.disconnect(); 444 | } else { 445 | this.packet({ type: parser.DISCONNECT }); 446 | this.onclose('server namespace disconnect'); 447 | } 448 | return this; 449 | }; 450 | --------------------------------------------------------------------------------