Custom Login - Version 3.2.9

Version Description

Download this release

Release Info

Developer austyfrosty
Plugin Icon 128x128 Custom Login
Version 3.2.9
Comparing to
See all releases

Code changes from version 3.2.8 to 3.2.9

Files changed (201) hide show
  1. README.md +70 -13
  2. css/_notes/dwsync.xml +0 -1
  3. css/admin.css +0 -0
  4. css/animate.css +2835 -2370
  5. css/animate.min.css +10 -5
  6. css/chosen/_notes/dwsync.xml +0 -1
  7. css/chosen/chosen-sprite.png +0 -0
  8. css/chosen/chosen-sprite@2x.png +0 -0
  9. css/chosen/chosen.css +123 -64
  10. css/chosen/chosen.min.css +10 -2
  11. css/login/_notes/dwsync.xml +0 -1
  12. css/login/login-rtl.css +0 -0
  13. css/login/login.css +0 -0
  14. custom-login.php +330 -329
  15. extensions.json +0 -0
  16. includes/_notes/dwsync.xml +0 -1
  17. includes/admin/_notes/dwsync.xml +0 -1
  18. includes/admin/dashboard.php +281 -252
  19. includes/admin/import-export.php +2 -2
  20. includes/admin/plugins.php +0 -0
  21. includes/admin/roost.php +0 -91
  22. includes/admin/tracking.php +3 -7
  23. includes/class-cl-common.php +189 -168
  24. includes/class-cl-cron.php +0 -0
  25. includes/class-cl-extensions.php +3 -3
  26. includes/class-cl-scripts-styles.php +0 -0
  27. includes/class-cl-settings-api.php +733 -674
  28. includes/class-cl-settings-upgrades.php +70 -70
  29. includes/class-cl-templates.php +0 -0
  30. includes/class-cl-wp-login.php +248 -276
  31. includes/default-settings.php +0 -0
  32. includes/functions.php +0 -0
  33. includes/libraries/_notes/dwsync.xml +0 -1
  34. includes/libraries/edd-remote-install-client/EDD_Remote_Install_Client.php +4 -4
  35. includes/libraries/edd-remote-install-client/_notes/dwsync.xml +0 -1
  36. includes/libraries/edd-remote-install-client/css/_notes/dwsync.xml +0 -1
  37. includes/libraries/edd-remote-install-client/css/edd-remote-install-admin.css +0 -0
  38. includes/libraries/edd-remote-install-client/js/_notes/dwsync.xml +0 -1
  39. includes/libraries/edd-remote-install-client/js/edd-remote-install-admin.js +0 -0
  40. js/_notes/dwsync.xml +0 -1
  41. js/ace/src-min-noconflict/ace.js +0 -0
  42. js/ace/src-min-noconflict/ext-beautify.js +0 -0
  43. js/ace/src-min-noconflict/ext-chromevox.js +0 -0
  44. js/ace/src-min-noconflict/ext-elastic_tabstops_lite.js +0 -0
  45. js/ace/src-min-noconflict/ext-emmet.js +0 -0
  46. js/ace/src-min-noconflict/ext-error_marker.js +0 -0
  47. js/ace/src-min-noconflict/ext-keybinding_menu.js +0 -0
  48. js/ace/src-min-noconflict/ext-language_tools.js +0 -0
  49. js/ace/src-min-noconflict/ext-linking.js +0 -0
  50. js/ace/src-min-noconflict/ext-modelist.js +0 -0
  51. js/ace/src-min-noconflict/ext-old_ie.js +0 -0
  52. js/ace/src-min-noconflict/ext-searchbox.js +0 -0
  53. js/ace/src-min-noconflict/ext-settings_menu.js +0 -0
  54. js/ace/src-min-noconflict/ext-spellcheck.js +0 -0
  55. js/ace/src-min-noconflict/ext-split.js +0 -0
  56. js/ace/src-min-noconflict/ext-static_highlight.js +0 -0
  57. js/ace/src-min-noconflict/ext-statusbar.js +0 -0
  58. js/ace/src-min-noconflict/ext-textarea.js +0 -0
  59. js/ace/src-min-noconflict/ext-themelist.js +0 -0
  60. js/ace/src-min-noconflict/ext-whitespace.js +0 -0
  61. js/ace/src-min-noconflict/keybinding-emacs.js +0 -0
  62. js/ace/src-min-noconflict/keybinding-vim.js +0 -0
  63. js/ace/src-min-noconflict/mode-css.js +0 -0
  64. js/ace/src-min-noconflict/mode-html.js +0 -0
  65. js/ace/src-min-noconflict/mode-javascript.js +0 -0
  66. js/ace/src-min-noconflict/snippets/abap.js +0 -0
  67. js/ace/src-min-noconflict/snippets/actionscript.js +0 -0
  68. js/ace/src-min-noconflict/snippets/ada.js +0 -0
  69. js/ace/src-min-noconflict/snippets/apache_conf.js +0 -0
  70. js/ace/src-min-noconflict/snippets/applescript.js +0 -0
  71. js/ace/src-min-noconflict/snippets/asciidoc.js +0 -0
  72. js/ace/src-min-noconflict/snippets/assembly_x86.js +0 -0
  73. js/ace/src-min-noconflict/snippets/autohotkey.js +0 -0
  74. js/ace/src-min-noconflict/snippets/batchfile.js +0 -0
  75. js/ace/src-min-noconflict/snippets/c9search.js +0 -0
  76. js/ace/src-min-noconflict/snippets/c_cpp.js +0 -0
  77. js/ace/src-min-noconflict/snippets/cirru.js +0 -0
  78. js/ace/src-min-noconflict/snippets/clojure.js +0 -0
  79. js/ace/src-min-noconflict/snippets/cobol.js +0 -0
  80. js/ace/src-min-noconflict/snippets/coffee.js +0 -0
  81. js/ace/src-min-noconflict/snippets/coldfusion.js +0 -0
  82. js/ace/src-min-noconflict/snippets/csharp.js +0 -0
  83. js/ace/src-min-noconflict/snippets/css.js +0 -0
  84. js/ace/src-min-noconflict/snippets/curly.js +0 -0
  85. js/ace/src-min-noconflict/snippets/d.js +0 -0
  86. js/ace/src-min-noconflict/snippets/dart.js +0 -0
  87. js/ace/src-min-noconflict/snippets/diff.js +0 -0
  88. js/ace/src-min-noconflict/snippets/django.js +0 -0
  89. js/ace/src-min-noconflict/snippets/dockerfile.js +0 -0
  90. js/ace/src-min-noconflict/snippets/dot.js +0 -0
  91. js/ace/src-min-noconflict/snippets/eiffel.js +0 -0
  92. js/ace/src-min-noconflict/snippets/ejs.js +0 -0
  93. js/ace/src-min-noconflict/snippets/elixir.js +0 -0
  94. js/ace/src-min-noconflict/snippets/elm.js +0 -0
  95. js/ace/src-min-noconflict/snippets/erlang.js +0 -0
  96. js/ace/src-min-noconflict/snippets/forth.js +0 -0
  97. js/ace/src-min-noconflict/snippets/ftl.js +0 -0
  98. js/ace/src-min-noconflict/snippets/gcode.js +0 -0
  99. js/ace/src-min-noconflict/snippets/gherkin.js +0 -0
  100. js/ace/src-min-noconflict/snippets/gitignore.js +0 -0
  101. js/ace/src-min-noconflict/snippets/glsl.js +0 -0
  102. js/ace/src-min-noconflict/snippets/golang.js +0 -0
  103. js/ace/src-min-noconflict/snippets/groovy.js +0 -0
  104. js/ace/src-min-noconflict/snippets/haml.js +0 -0
  105. js/ace/src-min-noconflict/snippets/handlebars.js +0 -0
  106. js/ace/src-min-noconflict/snippets/haskell.js +0 -0
  107. js/ace/src-min-noconflict/snippets/haxe.js +0 -0
  108. js/ace/src-min-noconflict/snippets/html.js +0 -0
  109. js/ace/src-min-noconflict/snippets/html_ruby.js +0 -0
  110. js/ace/src-min-noconflict/snippets/ini.js +0 -0
  111. js/ace/src-min-noconflict/snippets/io.js +0 -0
  112. js/ace/src-min-noconflict/snippets/jack.js +0 -0
  113. js/ace/src-min-noconflict/snippets/jade.js +0 -0
  114. js/ace/src-min-noconflict/snippets/java.js +0 -0
  115. js/ace/src-min-noconflict/snippets/javascript.js +0 -0
  116. js/ace/src-min-noconflict/snippets/json.js +0 -0
  117. js/ace/src-min-noconflict/snippets/jsoniq.js +0 -0
  118. js/ace/src-min-noconflict/snippets/jsp.js +0 -0
  119. js/ace/src-min-noconflict/snippets/jsx.js +0 -0
  120. js/ace/src-min-noconflict/snippets/julia.js +0 -0
  121. js/ace/src-min-noconflict/snippets/latex.js +0 -0
  122. js/ace/src-min-noconflict/snippets/less.js +0 -0
  123. js/ace/src-min-noconflict/snippets/liquid.js +0 -0
  124. js/ace/src-min-noconflict/snippets/lisp.js +0 -0
  125. js/ace/src-min-noconflict/snippets/livescript.js +0 -0
  126. js/ace/src-min-noconflict/snippets/logiql.js +0 -0
  127. js/ace/src-min-noconflict/snippets/lsl.js +0 -0
  128. js/ace/src-min-noconflict/snippets/lua.js +0 -0
  129. js/ace/src-min-noconflict/snippets/luapage.js +0 -0
  130. js/ace/src-min-noconflict/snippets/lucene.js +0 -0
  131. js/ace/src-min-noconflict/snippets/makefile.js +0 -0
  132. js/ace/src-min-noconflict/snippets/markdown.js +0 -0
  133. js/ace/src-min-noconflict/snippets/matlab.js +0 -0
  134. js/ace/src-min-noconflict/snippets/mel.js +0 -0
  135. js/ace/src-min-noconflict/snippets/mushcode.js +0 -0
  136. js/ace/src-min-noconflict/snippets/mysql.js +0 -0
  137. js/ace/src-min-noconflict/snippets/nix.js +0 -0
  138. js/ace/src-min-noconflict/snippets/objectivec.js +0 -0
  139. js/ace/src-min-noconflict/snippets/ocaml.js +0 -0
  140. js/ace/src-min-noconflict/snippets/pascal.js +0 -0
  141. js/ace/src-min-noconflict/snippets/perl.js +0 -0
  142. js/ace/src-min-noconflict/snippets/pgsql.js +0 -0
  143. js/ace/src-min-noconflict/snippets/php.js +0 -0
  144. js/ace/src-min-noconflict/snippets/plain_text.js +0 -0
  145. js/ace/src-min-noconflict/snippets/powershell.js +0 -0
  146. js/ace/src-min-noconflict/snippets/praat.js +0 -0
  147. js/ace/src-min-noconflict/snippets/prolog.js +0 -0
  148. js/ace/src-min-noconflict/snippets/properties.js +0 -0
  149. js/ace/src-min-noconflict/snippets/protobuf.js +0 -0
  150. js/ace/src-min-noconflict/snippets/python.js +0 -0
  151. js/ace/src-min-noconflict/snippets/r.js +0 -0
  152. js/ace/src-min-noconflict/snippets/rdoc.js +0 -0
  153. js/ace/src-min-noconflict/snippets/rhtml.js +0 -0
  154. js/ace/src-min-noconflict/snippets/ruby.js +0 -0
  155. js/ace/src-min-noconflict/snippets/rust.js +0 -0
  156. js/ace/src-min-noconflict/snippets/sass.js +0 -0
  157. js/ace/src-min-noconflict/snippets/scad.js +0 -0
  158. js/ace/src-min-noconflict/snippets/scala.js +0 -0
  159. js/ace/src-min-noconflict/snippets/scheme.js +0 -0
  160. js/ace/src-min-noconflict/snippets/scss.js +0 -0
  161. js/ace/src-min-noconflict/snippets/sh.js +0 -0
  162. js/ace/src-min-noconflict/snippets/sjs.js +0 -0
  163. js/ace/src-min-noconflict/snippets/smarty.js +0 -0
  164. js/ace/src-min-noconflict/snippets/snippets.js +0 -0
  165. js/ace/src-min-noconflict/snippets/soy_template.js +0 -0
  166. js/ace/src-min-noconflict/snippets/space.js +0 -0
  167. js/ace/src-min-noconflict/snippets/sql.js +0 -0
  168. js/ace/src-min-noconflict/snippets/stylus.js +0 -0
  169. js/ace/src-min-noconflict/snippets/svg.js +0 -0
  170. js/ace/src-min-noconflict/snippets/tcl.js +0 -0
  171. js/ace/src-min-noconflict/snippets/tex.js +0 -0
  172. js/ace/src-min-noconflict/snippets/text.js +0 -0
  173. js/ace/src-min-noconflict/snippets/textile.js +0 -0
  174. js/ace/src-min-noconflict/snippets/toml.js +0 -0
  175. js/ace/src-min-noconflict/snippets/twig.js +0 -0
  176. js/ace/src-min-noconflict/snippets/typescript.js +0 -0
  177. js/ace/src-min-noconflict/snippets/vala.js +0 -0
  178. js/ace/src-min-noconflict/snippets/vbscript.js +0 -0
  179. js/ace/src-min-noconflict/snippets/velocity.js +0 -0
  180. js/ace/src-min-noconflict/snippets/verilog.js +0 -0
  181. js/ace/src-min-noconflict/snippets/vhdl.js +0 -0
  182. js/ace/src-min-noconflict/snippets/xml.js +0 -0
  183. js/ace/src-min-noconflict/snippets/xquery.js +0 -0
  184. js/ace/src-min-noconflict/snippets/yaml.js +0 -0
  185. js/ace/src-min-noconflict/worker-coffee.js +0 -0
  186. js/ace/src-min-noconflict/worker-css.js +0 -0
  187. js/ace/src-min-noconflict/worker-html.js +0 -0
  188. js/ace/src-min-noconflict/worker-javascript.js +0 -0
  189. js/admin.js +420 -405
  190. js/chosen.jquery.js +463 -343
  191. js/chosen.jquery.min.js +3 -2
  192. js/jquery.sticky.js +238 -120
  193. languages/custom-login-tr_TR.mo +0 -0
  194. languages/custom-login-tr_TR.pot +0 -0
  195. languages/custom-login.mo +0 -0
  196. languages/custom-login.po +0 -0
  197. languages/custom-login.pot +0 -0
  198. readme.txt +70 -15
  199. templates/wp-login-script.php +6 -6
  200. templates/wp-login-style.php +6 -6
  201. uninstall.php +0 -0
README.md CHANGED
@@ -1,23 +1,29 @@
1
  # Custom Login #
2
- **Contributors:** austyfrosty, frostymedia
3
- **Donate link:** https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290
 
 
 
 
 
 
4
  **Tags:** admin, branding, customization, custom login, login, logo, error, login error, custom login pro
5
- **Requires at least:** 4.0
6
- **Tested up to:** 4.1
7
  **Stable tag:** trunk
8
  **License:** GPLv2 or later
9
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Custin Login allows you to easily customize your admin login page, works great for client sites!
12
 
13
  ## Description ##
14
 
15
- Custom Login 2.0 was 140% faster than version 1.0, and version 3.0 is now even better! *Minimum WordPress version is 4.0*
16
 
17
  For more information visit the official [Custom Login](https://frosty.media/plugins/custom-login/) page.
18
 
19
  > <strong>Support</strong><br>
20
- > [Austin](https://austin.passy.co) and the [Frosty Media](https://frosty.media/) team will always try our best to support the Custom Login plugin on the WordPress.org forum, but please note that we can not guarantee a response in a timely manner. If you have an issue we would appriciate you using GitHub or purchasing priority support on our site.
21
  >
22
  > Any extensions purchased on [Frosty Media](https://frosty.media/) (not hosted on WordPress.org) will not be supported on the WordPress.org forum. You can always browse our *small* but growing [documentation](https://frosty.media/docs) for further assistance. You need a valid license key to make support submissions *on our site*. We thank you in advance.
23
 
@@ -26,11 +32,11 @@ For more information visit the official [Custom Login](https://frosty.media/plug
26
 
27
  ### Video ###
28
 
29
- http://www.youtube.com/watch?v=hZkc-t36xYQ
30
 
31
  ### Extensions ###
32
 
33
- There are currently 5 premium extensions available, with more coming (suggestions welcome - and *will be offered for free to said user*).
34
 
35
  **Extensions available now**
36
 
@@ -39,6 +45,8 @@ There are currently 5 premium extensions available, with more coming (suggestion
39
  * [Login Redirects](https://frosty.media/plugins/custom-login-redirects/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Redirects") - Manage login redirects.
40
  * [No Password](https://frosty.media/plugins/custom-login-no-password-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login No Password logins") - allow users to login without a password.
41
  * [Style Pack #1](https://frosty.media/plugins/custom-login-style-pack-1?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #1") - four pre-designed login styles.
 
 
42
 
43
  **Extensions in development/extension ideas**
44
 
@@ -62,7 +70,7 @@ Activate the plugin and customize your WordPress login screen. It's as easy as m
62
  ### links ###
63
 
64
  * Premium Plugins: [https://frosty.media/plugins](https://frosty.media/plugins/ "Premium WordPress Plugins by Frosty")
65
- * Austins Blog: [https:/austin.passy.co/](https://austin.passy.co/ "Austin Passy's blog")
66
  * Austin on Twitter: @[TheFrosty](https:/twitter.com/TheFrosty "Austin TheFrosty' Passy on Twitter")
67
  * Frosty Media on Twitter: @[Frosty_Media](https:/twitter.com/Frosty_Media "Frosty Media on Twitter")
68
  * **Development welcomed on [GitHub](https://github.com/thefrosty/custom-login)**
@@ -87,7 +95,7 @@ Follow the steps below to install the plugin.
87
  They are additional plugins that add/extend functionality to the Custom Login plugin. You can find all Custom Login extensions on [Frosty.Media](http://frosty.media).
88
 
89
  ### My new settings aren't showing up ###
90
- This plugin caches all settings in a transient, try clicking the new 'Update stylesheet' button to delete and refresh the cache. *This applys to versions < 3.0*.
91
 
92
  ### Is there a PRO version? ###
93
  Well, yes and no. Since version 3.0 of Custom Login the [PRO](http://frosty.media/plugins/custom-login-pro/) version is a completely different plugin. Instead of settings to manage your login design there is a new post type where you can create unlimited "designs" and activate each one as needed. Since version 3.0 all Custom Login extensions no longer work with Custom Login Pro, but will be merged into it in the future.
@@ -99,7 +107,7 @@ I created this plugin to allow for custom login of any WordPress login screen. S
99
  Check out the [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
100
 
101
  ### I think i want to uninstall ###
102
- Just deactive it. Sad panda is sad.
103
 
104
  ## Screenshots ##
105
 
@@ -131,6 +139,55 @@ Custom Login showcase on the [Flickr group](http://flickr.com/groups/custom-logi
131
 
132
  ## Changelog ##
133
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
134
  ### Version 3.2 (02/09/15) ###
135
 
136
  * Message: Celebrate 500,000 downloads. Visit the settings page or [this post](https://frosty.media/?p=26056) to get any extension for free! *Restrictions may apply.
@@ -233,4 +290,4 @@ Celebrate 500,000 downloads w/ a FREE extension! Update to version 3.2 for more
233
  Fixes unable to login to admin site.
234
 
235
  ### 3.0.5 ###
236
- Complete rewrite of Custom Login, be sure to run the update script to keep your old settings.
1
  # Custom Login #
2
+
3
+ [![WordPress plugin](https://img.shields.io/wordpress/plugin/dt/custom-login.svg?style=flat)](https://wordpress.org/plugins/custom-login/)
4
+ [![WordPress plugin](https://img.shields.io/wordpress/plugin/v/custom-login.svg?style=flat)](https://wordpress.org/plugins/custom-login/)
5
+ [![WordPress](https://img.shields.io/wordpress/v/custom-login.svg?style=flat)]()
6
+ [![License](https://img.shields.io/badge/license-GPL--2.0%2B-red.svg)](https://github.com/thefrosty/custom-login/blob/master/license.txt)
7
+
8
+ **Contributors:** [austyfrosty](https://profiles.wordpress.org/austyfrosty), [frostymedia](https://profiles.wordpress.org/frostymedia)
9
+ **Donate link:** [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290)
10
  **Tags:** admin, branding, customization, custom login, login, logo, error, login error, custom login pro
11
+ **Requires at least:** 4.9
12
+ **Tested up to:** 5.2
13
  **Stable tag:** trunk
14
  **License:** GPLv2 or later
15
  **License URI:** http://www.gnu.org/licenses/gpl-2.0.html
16
 
17
+ Custom Login allows you to easily customize your admin login page, works great for client sites!
18
 
19
  ## Description ##
20
 
21
+ Custom Login 2.0 was 140% faster than version 1.0, and version 3.0 is now even better! *Minimum WordPress version is 4.9*
22
 
23
  For more information visit the official [Custom Login](https://frosty.media/plugins/custom-login/) page.
24
 
25
  > <strong>Support</strong><br>
26
+ > [Austin](http://austin.passy.co) and the [Frosty Media](https://frosty.media/) team will always try our best to support the Custom Login plugin on the WordPress.org forum, but please note that we can not guarantee a response in a timely manner. If you have an issue we would appriciate you using GitHub or purchasing priority support on our site.
27
  >
28
  > Any extensions purchased on [Frosty Media](https://frosty.media/) (not hosted on WordPress.org) will not be supported on the WordPress.org forum. You can always browse our *small* but growing [documentation](https://frosty.media/docs) for further assistance. You need a valid license key to make support submissions *on our site*. We thank you in advance.
29
 
32
 
33
  ### Video ###
34
 
35
+ [![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/hZkc-t36xYQ/0.jpg)](https://www.youtube.com/watch?v=hZkc-t36xYQ)
36
 
37
  ### Extensions ###
38
 
39
+ There are currently 7 premium extensions available, with more coming (suggestions welcome - and *will be offered for free to said user*).
40
 
41
  **Extensions available now**
42
 
45
  * [Login Redirects](https://frosty.media/plugins/custom-login-redirects/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Redirects") - Manage login redirects.
46
  * [No Password](https://frosty.media/plugins/custom-login-no-password-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login No Password logins") - allow users to login without a password.
47
  * [Style Pack #1](https://frosty.media/plugins/custom-login-style-pack-1?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #1") - four pre-designed login styles.
48
+ * [Style Pack #2](https://frosty.media/plugins/custom-login-style-pack-2?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #2") - four pre-designed fun login styles.
49
+ * [Style Pack #3](https://frosty.media/plugins/custom-login-style-pack-3?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #3") - four pre-designed holiday login styles.
50
 
51
  **Extensions in development/extension ideas**
52
 
70
  ### links ###
71
 
72
  * Premium Plugins: [https://frosty.media/plugins](https://frosty.media/plugins/ "Premium WordPress Plugins by Frosty")
73
+ * Austins Blog: [https:/austin.passy.co/](http://austin.passy.co/ "Austin Passy's blog")
74
  * Austin on Twitter: @[TheFrosty](https:/twitter.com/TheFrosty "Austin TheFrosty' Passy on Twitter")
75
  * Frosty Media on Twitter: @[Frosty_Media](https:/twitter.com/Frosty_Media "Frosty Media on Twitter")
76
  * **Development welcomed on [GitHub](https://github.com/thefrosty/custom-login)**
95
  They are additional plugins that add/extend functionality to the Custom Login plugin. You can find all Custom Login extensions on [Frosty.Media](http://frosty.media).
96
 
97
  ### My new settings aren't showing up ###
98
+ This plugin caches all settings in a transient, try clicking the new 'Update stylesheet' button to delete and refresh the cache. *This will apply to versions < 3.0*.
99
 
100
  ### Is there a PRO version? ###
101
  Well, yes and no. Since version 3.0 of Custom Login the [PRO](http://frosty.media/plugins/custom-login-pro/) version is a completely different plugin. Instead of settings to manage your login design there is a new post type where you can create unlimited "designs" and activate each one as needed. Since version 3.0 all Custom Login extensions no longer work with Custom Login Pro, but will be merged into it in the future.
107
  Check out the [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
108
 
109
  ### I think i want to uninstall ###
110
+ Just deactivate it. Sad panda is sad.
111
 
112
  ## Screenshots ##
113
 
139
 
140
  ## Changelog ##
141
 
142
+ ### Version 3.2.9 (2019/05/07) ###
143
+ * Tested up to WordPress 5.2.
144
+ * Update deprecated login text filter in WordPress 5.2.
145
+ * Update animate.css to version 3.7.0.
146
+ * Update chosen.js to 1.8.7.
147
+ * Update jQuery Sticky to 1.0.4.
148
+ * Fix spelling error in admin JS on typeof check for ACE JS.
149
+
150
+ ### Version 3.2.8 (12/11/17) ###
151
+
152
+ * Update notifications URL to current correct location for admin settings page.
153
+
154
+ ### Version 3.2.7 (11/13/17) ###
155
+
156
+ * Fix duplicate CSS output in head bug.
157
+ * Fix empty link URL and title on wp login page when on multisite.
158
+
159
+ ### Version 3.2.6 (11/10/17) ###
160
+
161
+ * Check compatibility with WordPress 4.9.
162
+ * Update Settings API to fix `Undefined index: active` message.
163
+
164
+ ### Version 3.2.5 (04/13/16) ###
165
+
166
+ * WordPress 4.5 compatible update (moves Custom Login css after WordPress' login style sheet).
167
+ * Fix issue where toggling the 'active' checkbox in the header doesn't activate or de-activate the plugin settings (updates via AJAX now).
168
+
169
+ ### Version 3.2.4 (09/16/15) ###
170
+
171
+ * Fix PHP Fatal error.
172
+ ** PHP Fatal error: Call to a member function get_permalink() on a non-object in /includes/admin/dashboard.php:114
173
+
174
+ ### Version 3.2.2 (05/04/15) ###
175
+
176
+ * May the fourth be with you.
177
+ * Cleaned up dashboard JS errors.
178
+
179
+ ### Version 3.2.2 (04/29/15) ###
180
+
181
+ * Update version number.
182
+ * Fix upgrade notice showing when not needed.
183
+ * Add class 'notice' and 'is-dismissible' to notice.
184
+ * Cleanup admin dashboard empty ob_get_clean() notice.
185
+
186
+ ### Version 3.2.1 (04/20/15) ###
187
+
188
+ * Fix: XSS security flaw.
189
+ * Fix: Settings page not showing. (Fixes Issue: [#6](https://github.com/thefrosty/custom-login/pull/6) /ht @[DrewAPicture](https://github.com/DrewAPicture).
190
+
191
  ### Version 3.2 (02/09/15) ###
192
 
193
  * Message: Celebrate 500,000 downloads. Visit the settings page or [this post](https://frosty.media/?p=26056) to get any extension for free! *Restrictions may apply.
290
  Fixes unable to login to admin site.
291
 
292
  ### 3.0.5 ###
293
+ Complete rewrite of Custom Login, be sure to run the update script to keep your old settings.
css/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
css/admin.css CHANGED
File without changes
css/animate.css CHANGED
@@ -1,3158 +1,3623 @@
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
- 50% {
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
- 50% {
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
  }
1
  @charset "UTF-8";
 
 
 
 
 
 
2
 
3
+ /*!
4
+ * animate.css -http://daneden.me/animate
5
+ * Version - 3.7.0
6
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
7
+ *
8
+ * Copyright (c) 2018 Daniel Eden
9
+ */
 
 
 
 
 
 
 
 
 
10
 
11
  @-webkit-keyframes bounce {
12
+ from,
13
+ 20%,
14
+ 53%,
15
+ 80%,
16
+ to {
17
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
18
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
19
+ -webkit-transform: translate3d(0, 0, 0);
20
+ transform: translate3d(0, 0, 0);
21
+ }
22
+
23
+ 40%,
24
+ 43% {
25
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
26
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
27
+ -webkit-transform: translate3d(0, -30px, 0);
28
+ transform: translate3d(0, -30px, 0);
29
+ }
30
+
31
+ 70% {
32
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
33
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
34
+ -webkit-transform: translate3d(0, -15px, 0);
35
+ transform: translate3d(0, -15px, 0);
36
+ }
37
+
38
+ 90% {
39
+ -webkit-transform: translate3d(0, -4px, 0);
40
+ transform: translate3d(0, -4px, 0);
41
+ }
42
  }
43
 
44
  @keyframes bounce {
45
+ from,
46
+ 20%,
47
+ 53%,
48
+ 80%,
49
+ to {
50
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
51
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
52
+ -webkit-transform: translate3d(0, 0, 0);
53
+ transform: translate3d(0, 0, 0);
54
+ }
55
+
56
+ 40%,
57
+ 43% {
58
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
59
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
60
+ -webkit-transform: translate3d(0, -30px, 0);
61
+ transform: translate3d(0, -30px, 0);
62
+ }
63
+
64
+ 70% {
65
+ -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
66
+ animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06);
67
+ -webkit-transform: translate3d(0, -15px, 0);
68
+ transform: translate3d(0, -15px, 0);
69
+ }
70
+
71
+ 90% {
72
+ -webkit-transform: translate3d(0, -4px, 0);
73
+ transform: translate3d(0, -4px, 0);
74
+ }
75
  }
76
 
77
  .bounce {
78
+ -webkit-animation-name: bounce;
79
+ animation-name: bounce;
80
+ -webkit-transform-origin: center bottom;
81
+ transform-origin: center bottom;
 
82
  }
83
 
84
  @-webkit-keyframes flash {
85
+ from,
86
+ 50%,
87
+ to {
88
+ opacity: 1;
89
+ }
90
 
91
+ 25%,
92
+ 75% {
93
+ opacity: 0;
94
+ }
95
  }
96
 
97
  @keyframes flash {
98
+ from,
99
+ 50%,
100
+ to {
101
+ opacity: 1;
102
+ }
103
 
104
+ 25%,
105
+ 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
+ from {
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
+ to {
129
+ -webkit-transform: scale3d(1, 1, 1);
130
+ transform: scale3d(1, 1, 1);
131
+ }
132
  }
133
 
134
  @keyframes pulse {
135
+ from {
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
+ to {
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
+ from {
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(0.95, 1.05, 1);
179
+ transform: scale3d(0.95, 1.05, 1);
180
+ }
181
+
182
+ 75% {
183
+ -webkit-transform: scale3d(1.05, 0.95, 1);
184
+ transform: scale3d(1.05, 0.95, 1);
185
+ }
186
+
187
+ to {
188
+ -webkit-transform: scale3d(1, 1, 1);
189
+ transform: scale3d(1, 1, 1);
190
+ }
191
  }
192
 
193
  @keyframes rubberBand {
194
+ from {
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(0.95, 1.05, 1);
216
+ transform: scale3d(0.95, 1.05, 1);
217
+ }
218
+
219
+ 75% {
220
+ -webkit-transform: scale3d(1.05, 0.95, 1);
221
+ transform: scale3d(1.05, 0.95, 1);
222
+ }
223
+
224
+ to {
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
+ from,
237
+ to {
238
+ -webkit-transform: translate3d(0, 0, 0);
239
+ transform: translate3d(0, 0, 0);
240
+ }
241
+
242
+ 10%,
243
+ 30%,
244
+ 50%,
245
+ 70%,
246
+ 90% {
247
+ -webkit-transform: translate3d(-10px, 0, 0);
248
+ transform: translate3d(-10px, 0, 0);
249
+ }
250
+
251
+ 20%,
252
+ 40%,
253
+ 60%,
254
+ 80% {
255
+ -webkit-transform: translate3d(10px, 0, 0);
256
+ transform: translate3d(10px, 0, 0);
257
+ }
258
  }
259
 
260
  @keyframes shake {
261
+ from,
262
+ to {
263
+ -webkit-transform: translate3d(0, 0, 0);
264
+ transform: translate3d(0, 0, 0);
265
+ }
266
+
267
+ 10%,
268
+ 30%,
269
+ 50%,
270
+ 70%,
271
+ 90% {
272
+ -webkit-transform: translate3d(-10px, 0, 0);
273
+ transform: translate3d(-10px, 0, 0);
274
+ }
275
+
276
+ 20%,
277
+ 40%,
278
+ 60%,
279
+ 80% {
280
+ -webkit-transform: translate3d(10px, 0, 0);
281
+ transform: translate3d(10px, 0, 0);
282
+ }
283
  }
284
 
285
  .shake {
286
+ -webkit-animation-name: shake;
287
+ animation-name: shake;
288
+ }
289
+
290
+ @-webkit-keyframes headShake {
291
+ 0% {
292
+ -webkit-transform: translateX(0);
293
+ transform: translateX(0);
294
+ }
295
+
296
+ 6.5% {
297
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
298
+ transform: translateX(-6px) rotateY(-9deg);
299
+ }
300
+
301
+ 18.5% {
302
+ -webkit-transform: translateX(5px) rotateY(7deg);
303
+ transform: translateX(5px) rotateY(7deg);
304
+ }
305
+
306
+ 31.5% {
307
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
308
+ transform: translateX(-3px) rotateY(-5deg);
309
+ }
310
+
311
+ 43.5% {
312
+ -webkit-transform: translateX(2px) rotateY(3deg);
313
+ transform: translateX(2px) rotateY(3deg);
314
+ }
315
+
316
+ 50% {
317
+ -webkit-transform: translateX(0);
318
+ transform: translateX(0);
319
+ }
320
+ }
321
+
322
+ @keyframes headShake {
323
+ 0% {
324
+ -webkit-transform: translateX(0);
325
+ transform: translateX(0);
326
+ }
327
+
328
+ 6.5% {
329
+ -webkit-transform: translateX(-6px) rotateY(-9deg);
330
+ transform: translateX(-6px) rotateY(-9deg);
331
+ }
332
+
333
+ 18.5% {
334
+ -webkit-transform: translateX(5px) rotateY(7deg);
335
+ transform: translateX(5px) rotateY(7deg);
336
+ }
337
+
338
+ 31.5% {
339
+ -webkit-transform: translateX(-3px) rotateY(-5deg);
340
+ transform: translateX(-3px) rotateY(-5deg);
341
+ }
342
+
343
+ 43.5% {
344
+ -webkit-transform: translateX(2px) rotateY(3deg);
345
+ transform: translateX(2px) rotateY(3deg);
346
+ }
347
+
348
+ 50% {
349
+ -webkit-transform: translateX(0);
350
+ transform: translateX(0);
351
+ }
352
+ }
353
+
354
+ .headShake {
355
+ -webkit-animation-timing-function: ease-in-out;
356
+ animation-timing-function: ease-in-out;
357
+ -webkit-animation-name: headShake;
358
+ animation-name: headShake;
359
  }
360
 
361
  @-webkit-keyframes swing {
362
+ 20% {
363
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
364
+ transform: rotate3d(0, 0, 1, 15deg);
365
+ }
366
 
367
+ 40% {
368
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
369
+ transform: rotate3d(0, 0, 1, -10deg);
370
+ }
371
 
372
+ 60% {
373
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
374
+ transform: rotate3d(0, 0, 1, 5deg);
375
+ }
376
 
377
+ 80% {
378
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
379
+ transform: rotate3d(0, 0, 1, -5deg);
380
+ }
381
 
382
+ to {
383
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
384
+ transform: rotate3d(0, 0, 1, 0deg);
385
+ }
386
  }
387
 
388
  @keyframes swing {
389
+ 20% {
390
+ -webkit-transform: rotate3d(0, 0, 1, 15deg);
391
+ transform: rotate3d(0, 0, 1, 15deg);
392
+ }
393
 
394
+ 40% {
395
+ -webkit-transform: rotate3d(0, 0, 1, -10deg);
396
+ transform: rotate3d(0, 0, 1, -10deg);
397
+ }
398
 
399
+ 60% {
400
+ -webkit-transform: rotate3d(0, 0, 1, 5deg);
401
+ transform: rotate3d(0, 0, 1, 5deg);
402
+ }
403
 
404
+ 80% {
405
+ -webkit-transform: rotate3d(0, 0, 1, -5deg);
406
+ transform: rotate3d(0, 0, 1, -5deg);
407
+ }
408
 
409
+ to {
410
+ -webkit-transform: rotate3d(0, 0, 1, 0deg);
411
+ transform: rotate3d(0, 0, 1, 0deg);
412
+ }
413
  }
414
 
415
  .swing {
416
+ -webkit-transform-origin: top center;
417
+ transform-origin: top center;
418
+ -webkit-animation-name: swing;
419
+ animation-name: swing;
 
420
  }
421
 
422
  @-webkit-keyframes tada {
423
+ from {
424
+ -webkit-transform: scale3d(1, 1, 1);
425
+ transform: scale3d(1, 1, 1);
426
+ }
427
+
428
+ 10%,
429
+ 20% {
430
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
431
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
432
+ }
433
+
434
+ 30%,
435
+ 50%,
436
+ 70%,
437
+ 90% {
438
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
439
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
440
+ }
441
+
442
+ 40%,
443
+ 60%,
444
+ 80% {
445
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
446
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
447
+ }
448
+
449
+ to {
450
+ -webkit-transform: scale3d(1, 1, 1);
451
+ transform: scale3d(1, 1, 1);
452
+ }
453
  }
454
 
455
  @keyframes tada {
456
+ from {
457
+ -webkit-transform: scale3d(1, 1, 1);
458
+ transform: scale3d(1, 1, 1);
459
+ }
460
+
461
+ 10%,
462
+ 20% {
463
+ -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
464
+ transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg);
465
+ }
466
+
467
+ 30%,
468
+ 50%,
469
+ 70%,
470
+ 90% {
471
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
472
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
473
+ }
474
+
475
+ 40%,
476
+ 60%,
477
+ 80% {
478
+ -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
479
+ transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
480
+ }
481
+
482
+ to {
483
+ -webkit-transform: scale3d(1, 1, 1);
484
+ transform: scale3d(1, 1, 1);
485
+ }
486
  }
487
 
488
  .tada {
489
+ -webkit-animation-name: tada;
490
+ animation-name: tada;
491
  }
492
 
493
  /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
494
 
495
  @-webkit-keyframes wobble {
496
+ from {
497
+ -webkit-transform: translate3d(0, 0, 0);
498
+ transform: translate3d(0, 0, 0);
499
+ }
500
+
501
+ 15% {
502
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
503
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
504
+ }
505
+
506
+ 30% {
507
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
508
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
509
+ }
510
+
511
+ 45% {
512
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
513
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
514
+ }
515
+
516
+ 60% {
517
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
518
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
519
+ }
520
+
521
+ 75% {
522
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
523
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
524
+ }
525
+
526
+ to {
527
+ -webkit-transform: translate3d(0, 0, 0);
528
+ transform: translate3d(0, 0, 0);
529
+ }
530
  }
531
 
532
  @keyframes wobble {
533
+ from {
534
+ -webkit-transform: translate3d(0, 0, 0);
535
+ transform: translate3d(0, 0, 0);
536
+ }
537
+
538
+ 15% {
539
+ -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
540
+ transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
541
+ }
542
+
543
+ 30% {
544
+ -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
545
+ transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
546
+ }
547
+
548
+ 45% {
549
+ -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
550
+ transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
551
+ }
552
+
553
+ 60% {
554
+ -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
555
+ transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
556
+ }
557
+
558
+ 75% {
559
+ -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
560
+ transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
561
+ }
562
+
563
+ to {
564
+ -webkit-transform: translate3d(0, 0, 0);
565
+ transform: translate3d(0, 0, 0);
566
+ }
567
  }
568
 
569
  .wobble {
570
+ -webkit-animation-name: wobble;
571
+ animation-name: wobble;
572
+ }
573
+
574
+ @-webkit-keyframes jello {
575
+ from,
576
+ 11.1%,
577
+ to {
578
+ -webkit-transform: translate3d(0, 0, 0);
579
+ transform: translate3d(0, 0, 0);
580
+ }
581
+
582
+ 22.2% {
583
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
584
+ transform: skewX(-12.5deg) skewY(-12.5deg);
585
+ }
586
+
587
+ 33.3% {
588
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
589
+ transform: skewX(6.25deg) skewY(6.25deg);
590
+ }
591
+
592
+ 44.4% {
593
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
594
+ transform: skewX(-3.125deg) skewY(-3.125deg);
595
+ }
596
+
597
+ 55.5% {
598
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
599
+ transform: skewX(1.5625deg) skewY(1.5625deg);
600
+ }
601
+
602
+ 66.6% {
603
+ -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
604
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
605
+ }
606
+
607
+ 77.7% {
608
+ -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
609
+ transform: skewX(0.390625deg) skewY(0.390625deg);
610
+ }
611
+
612
+ 88.8% {
613
+ -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
614
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
615
+ }
616
+ }
617
+
618
+ @keyframes jello {
619
+ from,
620
+ 11.1%,
621
+ to {
622
+ -webkit-transform: translate3d(0, 0, 0);
623
+ transform: translate3d(0, 0, 0);
624
+ }
625
+
626
+ 22.2% {
627
+ -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
628
+ transform: skewX(-12.5deg) skewY(-12.5deg);
629
+ }
630
+
631
+ 33.3% {
632
+ -webkit-transform: skewX(6.25deg) skewY(6.25deg);
633
+ transform: skewX(6.25deg) skewY(6.25deg);
634
+ }
635
+
636
+ 44.4% {
637
+ -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
638
+ transform: skewX(-3.125deg) skewY(-3.125deg);
639
+ }
640
+
641
+ 55.5% {
642
+ -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
643
+ transform: skewX(1.5625deg) skewY(1.5625deg);
644
+ }
645
+
646
+ 66.6% {
647
+ -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
648
+ transform: skewX(-0.78125deg) skewY(-0.78125deg);
649
+ }
650
+
651
+ 77.7% {
652
+ -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
653
+ transform: skewX(0.390625deg) skewY(0.390625deg);
654
+ }
655
+
656
+ 88.8% {
657
+ -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
658
+ transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
659
+ }
660
+ }
661
+
662
+ .jello {
663
+ -webkit-animation-name: jello;
664
+ animation-name: jello;
665
+ -webkit-transform-origin: center;
666
+ transform-origin: center;
667
+ }
668
+
669
+ @-webkit-keyframes heartBeat {
670
+ 0% {
671
+ -webkit-transform: scale(1);
672
+ transform: scale(1);
673
+ }
674
+
675
+ 14% {
676
+ -webkit-transform: scale(1.3);
677
+ transform: scale(1.3);
678
+ }
679
+
680
+ 28% {
681
+ -webkit-transform: scale(1);
682
+ transform: scale(1);
683
+ }
684
+
685
+ 42% {
686
+ -webkit-transform: scale(1.3);
687
+ transform: scale(1.3);
688
+ }
689
+
690
+ 70% {
691
+ -webkit-transform: scale(1);
692
+ transform: scale(1);
693
+ }
694
+ }
695
+
696
+ @keyframes heartBeat {
697
+ 0% {
698
+ -webkit-transform: scale(1);
699
+ transform: scale(1);
700
+ }
701
+
702
+ 14% {
703
+ -webkit-transform: scale(1.3);
704
+ transform: scale(1.3);
705
+ }
706
+
707
+ 28% {
708
+ -webkit-transform: scale(1);
709
+ transform: scale(1);
710
+ }
711
+
712
+ 42% {
713
+ -webkit-transform: scale(1.3);
714
+ transform: scale(1.3);
715
+ }
716
+
717
+ 70% {
718
+ -webkit-transform: scale(1);
719
+ transform: scale(1);
720
+ }
721
+ }
722
+
723
+ .heartBeat {
724
+ -webkit-animation-name: heartBeat;
725
+ animation-name: heartBeat;
726
+ -webkit-animation-duration: 1.3s;
727
+ animation-duration: 1.3s;
728
+ -webkit-animation-timing-function: ease-in-out;
729
+ animation-timing-function: ease-in-out;
730
  }
731
 
732
  @-webkit-keyframes bounceIn {
733
+ from,
734
+ 20%,
735
+ 40%,
736
+ 60%,
737
+ 80%,
738
+ to {
739
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
740
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
741
+ }
742
+
743
+ 0% {
744
+ opacity: 0;
745
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
746
+ transform: scale3d(0.3, 0.3, 0.3);
747
+ }
748
+
749
+ 20% {
750
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
751
+ transform: scale3d(1.1, 1.1, 1.1);
752
+ }
753
+
754
+ 40% {
755
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
756
+ transform: scale3d(0.9, 0.9, 0.9);
757
+ }
758
+
759
+ 60% {
760
+ opacity: 1;
761
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
762
+ transform: scale3d(1.03, 1.03, 1.03);
763
+ }
764
+
765
+ 80% {
766
+ -webkit-transform: scale3d(0.97, 0.97, 0.97);
767
+ transform: scale3d(0.97, 0.97, 0.97);
768
+ }
769
+
770
+ to {
771
+ opacity: 1;
772
+ -webkit-transform: scale3d(1, 1, 1);
773
+ transform: scale3d(1, 1, 1);
774
+ }
775
  }
776
 
777
  @keyframes bounceIn {
778
+ from,
779
+ 20%,
780
+ 40%,
781
+ 60%,
782
+ 80%,
783
+ to {
784
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
785
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
786
+ }
787
+
788
+ 0% {
789
+ opacity: 0;
790
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
791
+ transform: scale3d(0.3, 0.3, 0.3);
792
+ }
793
+
794
+ 20% {
795
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
796
+ transform: scale3d(1.1, 1.1, 1.1);
797
+ }
798
+
799
+ 40% {
800
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
801
+ transform: scale3d(0.9, 0.9, 0.9);
802
+ }
803
+
804
+ 60% {
805
+ opacity: 1;
806
+ -webkit-transform: scale3d(1.03, 1.03, 1.03);
807
+ transform: scale3d(1.03, 1.03, 1.03);
808
+ }
809
+
810
+ 80% {
811
+ -webkit-transform: scale3d(0.97, 0.97, 0.97);
812
+ transform: scale3d(0.97, 0.97, 0.97);
813
+ }
814
+
815
+ to {
816
+ opacity: 1;
817
+ -webkit-transform: scale3d(1, 1, 1);
818
+ transform: scale3d(1, 1, 1);
819
+ }
820
  }
821
 
822
  .bounceIn {
823
+ -webkit-animation-duration: 0.75s;
824
+ animation-duration: 0.75s;
825
+ -webkit-animation-name: bounceIn;
826
+ animation-name: bounceIn;
827
  }
828
 
829
  @-webkit-keyframes bounceInDown {
830
+ from,
831
+ 60%,
832
+ 75%,
833
+ 90%,
834
+ to {
835
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
836
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
837
+ }
838
+
839
+ 0% {
840
+ opacity: 0;
841
+ -webkit-transform: translate3d(0, -3000px, 0);
842
+ transform: translate3d(0, -3000px, 0);
843
+ }
844
+
845
+ 60% {
846
+ opacity: 1;
847
+ -webkit-transform: translate3d(0, 25px, 0);
848
+ transform: translate3d(0, 25px, 0);
849
+ }
850
+
851
+ 75% {
852
+ -webkit-transform: translate3d(0, -10px, 0);
853
+ transform: translate3d(0, -10px, 0);
854
+ }
855
+
856
+ 90% {
857
+ -webkit-transform: translate3d(0, 5px, 0);
858
+ transform: translate3d(0, 5px, 0);
859
+ }
860
+
861
+ to {
862
+ -webkit-transform: translate3d(0, 0, 0);
863
+ transform: translate3d(0, 0, 0);
864
+ }
865
  }
866
 
867
  @keyframes bounceInDown {
868
+ from,
869
+ 60%,
870
+ 75%,
871
+ 90%,
872
+ to {
873
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
874
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
875
+ }
876
+
877
+ 0% {
878
+ opacity: 0;
879
+ -webkit-transform: translate3d(0, -3000px, 0);
880
+ transform: translate3d(0, -3000px, 0);
881
+ }
882
+
883
+ 60% {
884
+ opacity: 1;
885
+ -webkit-transform: translate3d(0, 25px, 0);
886
+ transform: translate3d(0, 25px, 0);
887
+ }
888
+
889
+ 75% {
890
+ -webkit-transform: translate3d(0, -10px, 0);
891
+ transform: translate3d(0, -10px, 0);
892
+ }
893
+
894
+ 90% {
895
+ -webkit-transform: translate3d(0, 5px, 0);
896
+ transform: translate3d(0, 5px, 0);
897
+ }
898
+
899
+ to {
900
+ -webkit-transform: translate3d(0, 0, 0);
901
+ transform: translate3d(0, 0, 0);
902
+ }
903
  }
904
 
905
  .bounceInDown {
906
+ -webkit-animation-name: bounceInDown;
907
+ animation-name: bounceInDown;
908
  }
909
 
910
  @-webkit-keyframes bounceInLeft {
911
+ from,
912
+ 60%,
913
+ 75%,
914
+ 90%,
915
+ to {
916
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
917
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
918
+ }
919
+
920
+ 0% {
921
+ opacity: 0;
922
+ -webkit-transform: translate3d(-3000px, 0, 0);
923
+ transform: translate3d(-3000px, 0, 0);
924
+ }
925
+
926
+ 60% {
927
+ opacity: 1;
928
+ -webkit-transform: translate3d(25px, 0, 0);
929
+ transform: translate3d(25px, 0, 0);
930
+ }
931
+
932
+ 75% {
933
+ -webkit-transform: translate3d(-10px, 0, 0);
934
+ transform: translate3d(-10px, 0, 0);
935
+ }
936
+
937
+ 90% {
938
+ -webkit-transform: translate3d(5px, 0, 0);
939
+ transform: translate3d(5px, 0, 0);
940
+ }
941
+
942
+ to {
943
+ -webkit-transform: translate3d(0, 0, 0);
944
+ transform: translate3d(0, 0, 0);
945
+ }
946
  }
947
 
948
  @keyframes bounceInLeft {
949
+ from,
950
+ 60%,
951
+ 75%,
952
+ 90%,
953
+ to {
954
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
955
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
956
+ }
957
+
958
+ 0% {
959
+ opacity: 0;
960
+ -webkit-transform: translate3d(-3000px, 0, 0);
961
+ transform: translate3d(-3000px, 0, 0);
962
+ }
963
+
964
+ 60% {
965
+ opacity: 1;
966
+ -webkit-transform: translate3d(25px, 0, 0);
967
+ transform: translate3d(25px, 0, 0);
968
+ }
969
+
970
+ 75% {
971
+ -webkit-transform: translate3d(-10px, 0, 0);
972
+ transform: translate3d(-10px, 0, 0);
973
+ }
974
+
975
+ 90% {
976
+ -webkit-transform: translate3d(5px, 0, 0);
977
+ transform: translate3d(5px, 0, 0);
978
+ }
979
+
980
+ to {
981
+ -webkit-transform: translate3d(0, 0, 0);
982
+ transform: translate3d(0, 0, 0);
983
+ }
984
  }
985
 
986
  .bounceInLeft {
987
+ -webkit-animation-name: bounceInLeft;
988
+ animation-name: bounceInLeft;
989
  }
990
 
991
  @-webkit-keyframes bounceInRight {
992
+ from,
993
+ 60%,
994
+ 75%,
995
+ 90%,
996
+ to {
997
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
998
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
999
+ }
1000
+
1001
+ from {
1002
+ opacity: 0;
1003
+ -webkit-transform: translate3d(3000px, 0, 0);
1004
+ transform: translate3d(3000px, 0, 0);
1005
+ }
1006
+
1007
+ 60% {
1008
+ opacity: 1;
1009
+ -webkit-transform: translate3d(-25px, 0, 0);
1010
+ transform: translate3d(-25px, 0, 0);
1011
+ }
1012
+
1013
+ 75% {
1014
+ -webkit-transform: translate3d(10px, 0, 0);
1015
+ transform: translate3d(10px, 0, 0);
1016
+ }
1017
+
1018
+ 90% {
1019
+ -webkit-transform: translate3d(-5px, 0, 0);
1020
+ transform: translate3d(-5px, 0, 0);
1021
+ }
1022
+
1023
+ to {
1024
+ -webkit-transform: translate3d(0, 0, 0);
1025
+ transform: translate3d(0, 0, 0);
1026
+ }
1027
  }
1028
 
1029
  @keyframes bounceInRight {
1030
+ from,
1031
+ 60%,
1032
+ 75%,
1033
+ 90%,
1034
+ to {
1035
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
1036
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
1037
+ }
1038
+
1039
+ from {
1040
+ opacity: 0;
1041
+ -webkit-transform: translate3d(3000px, 0, 0);
1042
+ transform: translate3d(3000px, 0, 0);
1043
+ }
1044
+
1045
+ 60% {
1046
+ opacity: 1;
1047
+ -webkit-transform: translate3d(-25px, 0, 0);
1048
+ transform: translate3d(-25px, 0, 0);
1049
+ }
1050
+
1051
+ 75% {
1052
+ -webkit-transform: translate3d(10px, 0, 0);
1053
+ transform: translate3d(10px, 0, 0);
1054
+ }
1055
+
1056
+ 90% {
1057
+ -webkit-transform: translate3d(-5px, 0, 0);
1058
+ transform: translate3d(-5px, 0, 0);
1059
+ }
1060
+
1061
+ to {
1062
+ -webkit-transform: translate3d(0, 0, 0);
1063
+ transform: translate3d(0, 0, 0);
1064
+ }
1065
  }
1066
 
1067
  .bounceInRight {
1068
+ -webkit-animation-name: bounceInRight;
1069
+ animation-name: bounceInRight;
1070
  }
1071
 
1072
  @-webkit-keyframes bounceInUp {
1073
+ from,
1074
+ 60%,
1075
+ 75%,
1076
+ 90%,
1077
+ to {
1078
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
1079
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
1080
+ }
1081
+
1082
+ from {
1083
+ opacity: 0;
1084
+ -webkit-transform: translate3d(0, 3000px, 0);
1085
+ transform: translate3d(0, 3000px, 0);
1086
+ }
1087
+
1088
+ 60% {
1089
+ opacity: 1;
1090
+ -webkit-transform: translate3d(0, -20px, 0);
1091
+ transform: translate3d(0, -20px, 0);
1092
+ }
1093
+
1094
+ 75% {
1095
+ -webkit-transform: translate3d(0, 10px, 0);
1096
+ transform: translate3d(0, 10px, 0);
1097
+ }
1098
+
1099
+ 90% {
1100
+ -webkit-transform: translate3d(0, -5px, 0);
1101
+ transform: translate3d(0, -5px, 0);
1102
+ }
1103
+
1104
+ to {
1105
+ -webkit-transform: translate3d(0, 0, 0);
1106
+ transform: translate3d(0, 0, 0);
1107
+ }
1108
  }
1109
 
1110
  @keyframes bounceInUp {
1111
+ from,
1112
+ 60%,
1113
+ 75%,
1114
+ 90%,
1115
+ to {
1116
+ -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
1117
+ animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);
1118
+ }
1119
+
1120
+ from {
1121
+ opacity: 0;
1122
+ -webkit-transform: translate3d(0, 3000px, 0);
1123
+ transform: translate3d(0, 3000px, 0);
1124
+ }
1125
+
1126
+ 60% {
1127
+ opacity: 1;
1128
+ -webkit-transform: translate3d(0, -20px, 0);
1129
+ transform: translate3d(0, -20px, 0);
1130
+ }
1131
+
1132
+ 75% {
1133
+ -webkit-transform: translate3d(0, 10px, 0);
1134
+ transform: translate3d(0, 10px, 0);
1135
+ }
1136
+
1137
+ 90% {
1138
+ -webkit-transform: translate3d(0, -5px, 0);
1139
+ transform: translate3d(0, -5px, 0);
1140
+ }
1141
+
1142
+ to {
1143
+ -webkit-transform: translate3d(0, 0, 0);
1144
+ transform: translate3d(0, 0, 0);
1145
+ }
1146
  }
1147
 
1148
  .bounceInUp {
1149
+ -webkit-animation-name: bounceInUp;
1150
+ animation-name: bounceInUp;
1151
  }
1152
 
1153
  @-webkit-keyframes bounceOut {
1154
+ 20% {
1155
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
1156
+ transform: scale3d(0.9, 0.9, 0.9);
1157
+ }
1158
 
1159
+ 50%,
1160
+ 55% {
1161
+ opacity: 1;
1162
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
1163
+ transform: scale3d(1.1, 1.1, 1.1);
1164
+ }
1165
 
1166
+ to {
1167
+ opacity: 0;
1168
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
1169
+ transform: scale3d(0.3, 0.3, 0.3);
1170
+ }
1171
  }
1172
 
1173
  @keyframes bounceOut {
1174
+ 20% {
1175
+ -webkit-transform: scale3d(0.9, 0.9, 0.9);
1176
+ transform: scale3d(0.9, 0.9, 0.9);
1177
+ }
1178
 
1179
+ 50%,
1180
+ 55% {
1181
+ opacity: 1;
1182
+ -webkit-transform: scale3d(1.1, 1.1, 1.1);
1183
+ transform: scale3d(1.1, 1.1, 1.1);
1184
+ }
1185
 
1186
+ to {
1187
+ opacity: 0;
1188
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
1189
+ transform: scale3d(0.3, 0.3, 0.3);
1190
+ }
1191
  }
1192
 
1193
  .bounceOut {
1194
+ -webkit-animation-duration: 0.75s;
1195
+ animation-duration: 0.75s;
1196
+ -webkit-animation-name: bounceOut;
1197
+ animation-name: bounceOut;
1198
  }
1199
 
1200
  @-webkit-keyframes bounceOutDown {
1201
+ 20% {
1202
+ -webkit-transform: translate3d(0, 10px, 0);
1203
+ transform: translate3d(0, 10px, 0);
1204
+ }
1205
 
1206
+ 40%,
1207
+ 45% {
1208
+ opacity: 1;
1209
+ -webkit-transform: translate3d(0, -20px, 0);
1210
+ transform: translate3d(0, -20px, 0);
1211
+ }
1212
 
1213
+ to {
1214
+ opacity: 0;
1215
+ -webkit-transform: translate3d(0, 2000px, 0);
1216
+ transform: translate3d(0, 2000px, 0);
1217
+ }
1218
  }
1219
 
1220
  @keyframes bounceOutDown {
1221
+ 20% {
1222
+ -webkit-transform: translate3d(0, 10px, 0);
1223
+ transform: translate3d(0, 10px, 0);
1224
+ }
1225
 
1226
+ 40%,
1227
+ 45% {
1228
+ opacity: 1;
1229
+ -webkit-transform: translate3d(0, -20px, 0);
1230
+ transform: translate3d(0, -20px, 0);
1231
+ }
1232
 
1233
+ to {
1234
+ opacity: 0;
1235
+ -webkit-transform: translate3d(0, 2000px, 0);
1236
+ transform: translate3d(0, 2000px, 0);
1237
+ }
1238
  }
1239
 
1240
  .bounceOutDown {
1241
+ -webkit-animation-name: bounceOutDown;
1242
+ animation-name: bounceOutDown;
1243
  }
1244
 
1245
  @-webkit-keyframes bounceOutLeft {
1246
+ 20% {
1247
+ opacity: 1;
1248
+ -webkit-transform: translate3d(20px, 0, 0);
1249
+ transform: translate3d(20px, 0, 0);
1250
+ }
1251
 
1252
+ to {
1253
+ opacity: 0;
1254
+ -webkit-transform: translate3d(-2000px, 0, 0);
1255
+ transform: translate3d(-2000px, 0, 0);
1256
+ }
1257
  }
1258
 
1259
  @keyframes bounceOutLeft {
1260
+ 20% {
1261
+ opacity: 1;
1262
+ -webkit-transform: translate3d(20px, 0, 0);
1263
+ transform: translate3d(20px, 0, 0);
1264
+ }
1265
 
1266
+ to {
1267
+ opacity: 0;
1268
+ -webkit-transform: translate3d(-2000px, 0, 0);
1269
+ transform: translate3d(-2000px, 0, 0);
1270
+ }
1271
  }
1272
 
1273
  .bounceOutLeft {
1274
+ -webkit-animation-name: bounceOutLeft;
1275
+ animation-name: bounceOutLeft;
1276
  }
1277
 
1278
  @-webkit-keyframes bounceOutRight {
1279
+ 20% {
1280
+ opacity: 1;
1281
+ -webkit-transform: translate3d(-20px, 0, 0);
1282
+ transform: translate3d(-20px, 0, 0);
1283
+ }
1284
 
1285
+ to {
1286
+ opacity: 0;
1287
+ -webkit-transform: translate3d(2000px, 0, 0);
1288
+ transform: translate3d(2000px, 0, 0);
1289
+ }
1290
  }
1291
 
1292
  @keyframes bounceOutRight {
1293
+ 20% {
1294
+ opacity: 1;
1295
+ -webkit-transform: translate3d(-20px, 0, 0);
1296
+ transform: translate3d(-20px, 0, 0);
1297
+ }
1298
 
1299
+ to {
1300
+ opacity: 0;
1301
+ -webkit-transform: translate3d(2000px, 0, 0);
1302
+ transform: translate3d(2000px, 0, 0);
1303
+ }
1304
  }
1305
 
1306
  .bounceOutRight {
1307
+ -webkit-animation-name: bounceOutRight;
1308
+ animation-name: bounceOutRight;
1309
  }
1310
 
1311
  @-webkit-keyframes bounceOutUp {
1312
+ 20% {
1313
+ -webkit-transform: translate3d(0, -10px, 0);
1314
+ transform: translate3d(0, -10px, 0);
1315
+ }
1316
 
1317
+ 40%,
1318
+ 45% {
1319
+ opacity: 1;
1320
+ -webkit-transform: translate3d(0, 20px, 0);
1321
+ transform: translate3d(0, 20px, 0);
1322
+ }
1323
 
1324
+ to {
1325
+ opacity: 0;
1326
+ -webkit-transform: translate3d(0, -2000px, 0);
1327
+ transform: translate3d(0, -2000px, 0);
1328
+ }
1329
  }
1330
 
1331
  @keyframes bounceOutUp {
1332
+ 20% {
1333
+ -webkit-transform: translate3d(0, -10px, 0);
1334
+ transform: translate3d(0, -10px, 0);
1335
+ }
1336
 
1337
+ 40%,
1338
+ 45% {
1339
+ opacity: 1;
1340
+ -webkit-transform: translate3d(0, 20px, 0);
1341
+ transform: translate3d(0, 20px, 0);
1342
+ }
1343
 
1344
+ to {
1345
+ opacity: 0;
1346
+ -webkit-transform: translate3d(0, -2000px, 0);
1347
+ transform: translate3d(0, -2000px, 0);
1348
+ }
1349
  }
1350
 
1351
  .bounceOutUp {
1352
+ -webkit-animation-name: bounceOutUp;
1353
+ animation-name: bounceOutUp;
1354
  }
1355
 
1356
  @-webkit-keyframes fadeIn {
1357
+ from {
1358
+ opacity: 0;
1359
+ }
1360
+
1361
+ to {
1362
+ opacity: 1;
1363
+ }
1364
  }
1365
 
1366
  @keyframes fadeIn {
1367
+ from {
1368
+ opacity: 0;
1369
+ }
1370
+
1371
+ to {
1372
+ opacity: 1;
1373
+ }
1374
  }
1375
 
1376
  .fadeIn {
1377
+ -webkit-animation-name: fadeIn;
1378
+ animation-name: fadeIn;
1379
  }
1380
 
1381
  @-webkit-keyframes fadeInDown {
1382
+ from {
1383
+ opacity: 0;
1384
+ -webkit-transform: translate3d(0, -100%, 0);
1385
+ transform: translate3d(0, -100%, 0);
1386
+ }
1387
 
1388
+ to {
1389
+ opacity: 1;
1390
+ -webkit-transform: translate3d(0, 0, 0);
1391
+ transform: translate3d(0, 0, 0);
1392
+ }
1393
  }
1394
 
1395
  @keyframes fadeInDown {
1396
+ from {
1397
+ opacity: 0;
1398
+ -webkit-transform: translate3d(0, -100%, 0);
1399
+ transform: translate3d(0, -100%, 0);
1400
+ }
1401
 
1402
+ to {
1403
+ opacity: 1;
1404
+ -webkit-transform: translate3d(0, 0, 0);
1405
+ transform: translate3d(0, 0, 0);
1406
+ }
1407
  }
1408
 
1409
  .fadeInDown {
1410
+ -webkit-animation-name: fadeInDown;
1411
+ animation-name: fadeInDown;
1412
  }
1413
 
1414
  @-webkit-keyframes fadeInDownBig {
1415
+ from {
1416
+ opacity: 0;
1417
+ -webkit-transform: translate3d(0, -2000px, 0);
1418
+ transform: translate3d(0, -2000px, 0);
1419
+ }
1420
 
1421
+ to {
1422
+ opacity: 1;
1423
+ -webkit-transform: translate3d(0, 0, 0);
1424
+ transform: translate3d(0, 0, 0);
1425
+ }
1426
  }
1427
 
1428
  @keyframes fadeInDownBig {
1429
+ from {
1430
+ opacity: 0;
1431
+ -webkit-transform: translate3d(0, -2000px, 0);
1432
+ transform: translate3d(0, -2000px, 0);
1433
+ }
1434
 
1435
+ to {
1436
+ opacity: 1;
1437
+ -webkit-transform: translate3d(0, 0, 0);
1438
+ transform: translate3d(0, 0, 0);
1439
+ }
1440
  }
1441
 
1442
  .fadeInDownBig {
1443
+ -webkit-animation-name: fadeInDownBig;
1444
+ animation-name: fadeInDownBig;
1445
  }
1446
 
1447
  @-webkit-keyframes fadeInLeft {
1448
+ from {
1449
+ opacity: 0;
1450
+ -webkit-transform: translate3d(-100%, 0, 0);
1451
+ transform: translate3d(-100%, 0, 0);
1452
+ }
1453
 
1454
+ to {
1455
+ opacity: 1;
1456
+ -webkit-transform: translate3d(0, 0, 0);
1457
+ transform: translate3d(0, 0, 0);
1458
+ }
1459
  }
1460
 
1461
  @keyframes fadeInLeft {
1462
+ from {
1463
+ opacity: 0;
1464
+ -webkit-transform: translate3d(-100%, 0, 0);
1465
+ transform: translate3d(-100%, 0, 0);
1466
+ }
1467
 
1468
+ to {
1469
+ opacity: 1;
1470
+ -webkit-transform: translate3d(0, 0, 0);
1471
+ transform: translate3d(0, 0, 0);
1472
+ }
1473
  }
1474
 
1475
  .fadeInLeft {
1476
+ -webkit-animation-name: fadeInLeft;
1477
+ animation-name: fadeInLeft;
1478
  }
1479
 
1480
  @-webkit-keyframes fadeInLeftBig {
1481
+ from {
1482
+ opacity: 0;
1483
+ -webkit-transform: translate3d(-2000px, 0, 0);
1484
+ transform: translate3d(-2000px, 0, 0);
1485
+ }
1486
 
1487
+ to {
1488
+ opacity: 1;
1489
+ -webkit-transform: translate3d(0, 0, 0);
1490
+ transform: translate3d(0, 0, 0);
1491
+ }
1492
  }
1493
 
1494
  @keyframes fadeInLeftBig {
1495
+ from {
1496
+ opacity: 0;
1497
+ -webkit-transform: translate3d(-2000px, 0, 0);
1498
+ transform: translate3d(-2000px, 0, 0);
1499
+ }
1500
 
1501
+ to {
1502
+ opacity: 1;
1503
+ -webkit-transform: translate3d(0, 0, 0);
1504
+ transform: translate3d(0, 0, 0);
1505
+ }
1506
  }
1507
 
1508
  .fadeInLeftBig {
1509
+ -webkit-animation-name: fadeInLeftBig;
1510
+ animation-name: fadeInLeftBig;
1511
  }
1512
 
1513
  @-webkit-keyframes fadeInRight {
1514
+ from {
1515
+ opacity: 0;
1516
+ -webkit-transform: translate3d(100%, 0, 0);
1517
+ transform: translate3d(100%, 0, 0);
1518
+ }
1519
 
1520
+ to {
1521
+ opacity: 1;
1522
+ -webkit-transform: translate3d(0, 0, 0);
1523
+ transform: translate3d(0, 0, 0);
1524
+ }
1525
  }
1526
 
1527
  @keyframes fadeInRight {
1528
+ from {
1529
+ opacity: 0;
1530
+ -webkit-transform: translate3d(100%, 0, 0);
1531
+ transform: translate3d(100%, 0, 0);
1532
+ }
1533
 
1534
+ to {
1535
+ opacity: 1;
1536
+ -webkit-transform: translate3d(0, 0, 0);
1537
+ transform: translate3d(0, 0, 0);
1538
+ }
1539
  }
1540
 
1541
  .fadeInRight {
1542
+ -webkit-animation-name: fadeInRight;
1543
+ animation-name: fadeInRight;
1544
  }
1545
 
1546
  @-webkit-keyframes fadeInRightBig {
1547
+ from {
1548
+ opacity: 0;
1549
+ -webkit-transform: translate3d(2000px, 0, 0);
1550
+ transform: translate3d(2000px, 0, 0);
1551
+ }
1552
 
1553
+ to {
1554
+ opacity: 1;
1555
+ -webkit-transform: translate3d(0, 0, 0);
1556
+ transform: translate3d(0, 0, 0);
1557
+ }
1558
  }
1559
 
1560
  @keyframes fadeInRightBig {
1561
+ from {
1562
+ opacity: 0;
1563
+ -webkit-transform: translate3d(2000px, 0, 0);
1564
+ transform: translate3d(2000px, 0, 0);
1565
+ }
1566
 
1567
+ to {
1568
+ opacity: 1;
1569
+ -webkit-transform: translate3d(0, 0, 0);
1570
+ transform: translate3d(0, 0, 0);
1571
+ }
1572
  }
1573
 
1574
  .fadeInRightBig {
1575
+ -webkit-animation-name: fadeInRightBig;
1576
+ animation-name: fadeInRightBig;
1577
  }
1578
 
1579
  @-webkit-keyframes fadeInUp {
1580
+ from {
1581
+ opacity: 0;
1582
+ -webkit-transform: translate3d(0, 100%, 0);
1583
+ transform: translate3d(0, 100%, 0);
1584
+ }
1585
 
1586
+ to {
1587
+ opacity: 1;
1588
+ -webkit-transform: translate3d(0, 0, 0);
1589
+ transform: translate3d(0, 0, 0);
1590
+ }
1591
  }
1592
 
1593
  @keyframes fadeInUp {
1594
+ from {
1595
+ opacity: 0;
1596
+ -webkit-transform: translate3d(0, 100%, 0);
1597
+ transform: translate3d(0, 100%, 0);
1598
+ }
1599
 
1600
+ to {
1601
+ opacity: 1;
1602
+ -webkit-transform: translate3d(0, 0, 0);
1603
+ transform: translate3d(0, 0, 0);
1604
+ }
1605
  }
1606
 
1607
  .fadeInUp {
1608
+ -webkit-animation-name: fadeInUp;
1609
+ animation-name: fadeInUp;
1610
  }
1611
 
1612
  @-webkit-keyframes fadeInUpBig {
1613
+ from {
1614
+ opacity: 0;
1615
+ -webkit-transform: translate3d(0, 2000px, 0);
1616
+ transform: translate3d(0, 2000px, 0);
1617
+ }
1618
 
1619
+ to {
1620
+ opacity: 1;
1621
+ -webkit-transform: translate3d(0, 0, 0);
1622
+ transform: translate3d(0, 0, 0);
1623
+ }
1624
  }
1625
 
1626
  @keyframes fadeInUpBig {
1627
+ from {
1628
+ opacity: 0;
1629
+ -webkit-transform: translate3d(0, 2000px, 0);
1630
+ transform: translate3d(0, 2000px, 0);
1631
+ }
1632
 
1633
+ to {
1634
+ opacity: 1;
1635
+ -webkit-transform: translate3d(0, 0, 0);
1636
+ transform: translate3d(0, 0, 0);
1637
+ }
1638
  }
1639
 
1640
  .fadeInUpBig {
1641
+ -webkit-animation-name: fadeInUpBig;
1642
+ animation-name: fadeInUpBig;
1643
  }
1644
 
1645
  @-webkit-keyframes fadeOut {
1646
+ from {
1647
+ opacity: 1;
1648
+ }
1649
+
1650
+ to {
1651
+ opacity: 0;
1652
+ }
1653
  }
1654
 
1655
  @keyframes fadeOut {
1656
+ from {
1657
+ opacity: 1;
1658
+ }
1659
+
1660
+ to {
1661
+ opacity: 0;
1662
+ }
1663
  }
1664
 
1665
  .fadeOut {
1666
+ -webkit-animation-name: fadeOut;
1667
+ animation-name: fadeOut;
1668
  }
1669
 
1670
  @-webkit-keyframes fadeOutDown {
1671
+ from {
1672
+ opacity: 1;
1673
+ }
1674
 
1675
+ to {
1676
+ opacity: 0;
1677
+ -webkit-transform: translate3d(0, 100%, 0);
1678
+ transform: translate3d(0, 100%, 0);
1679
+ }
1680
  }
1681
 
1682
  @keyframes fadeOutDown {
1683
+ from {
1684
+ opacity: 1;
1685
+ }
1686
 
1687
+ to {
1688
+ opacity: 0;
1689
+ -webkit-transform: translate3d(0, 100%, 0);
1690
+ transform: translate3d(0, 100%, 0);
1691
+ }
1692
  }
1693
 
1694
  .fadeOutDown {
1695
+ -webkit-animation-name: fadeOutDown;
1696
+ animation-name: fadeOutDown;
1697
  }
1698
 
1699
  @-webkit-keyframes fadeOutDownBig {
1700
+ from {
1701
+ opacity: 1;
1702
+ }
1703
 
1704
+ to {
1705
+ opacity: 0;
1706
+ -webkit-transform: translate3d(0, 2000px, 0);
1707
+ transform: translate3d(0, 2000px, 0);
1708
+ }
1709
  }
1710
 
1711
  @keyframes fadeOutDownBig {
1712
+ from {
1713
+ opacity: 1;
1714
+ }
1715
 
1716
+ to {
1717
+ opacity: 0;
1718
+ -webkit-transform: translate3d(0, 2000px, 0);
1719
+ transform: translate3d(0, 2000px, 0);
1720
+ }
1721
  }
1722
 
1723
  .fadeOutDownBig {
1724
+ -webkit-animation-name: fadeOutDownBig;
1725
+ animation-name: fadeOutDownBig;
1726
  }
1727
 
1728
  @-webkit-keyframes fadeOutLeft {
1729
+ from {
1730
+ opacity: 1;
1731
+ }
1732
 
1733
+ to {
1734
+ opacity: 0;
1735
+ -webkit-transform: translate3d(-100%, 0, 0);
1736
+ transform: translate3d(-100%, 0, 0);
1737
+ }
1738
  }
1739
 
1740
  @keyframes fadeOutLeft {
1741
+ from {
1742
+ opacity: 1;
1743
+ }
1744
 
1745
+ to {
1746
+ opacity: 0;
1747
+ -webkit-transform: translate3d(-100%, 0, 0);
1748
+ transform: translate3d(-100%, 0, 0);
1749
+ }
1750
  }
1751
 
1752
  .fadeOutLeft {
1753
+ -webkit-animation-name: fadeOutLeft;
1754
+ animation-name: fadeOutLeft;
1755
  }
1756
 
1757
  @-webkit-keyframes fadeOutLeftBig {
1758
+ from {
1759
+ opacity: 1;
1760
+ }
1761
 
1762
+ to {
1763
+ opacity: 0;
1764
+ -webkit-transform: translate3d(-2000px, 0, 0);
1765
+ transform: translate3d(-2000px, 0, 0);
1766
+ }
1767
  }
1768
 
1769
  @keyframes fadeOutLeftBig {
1770
+ from {
1771
+ opacity: 1;
1772
+ }
1773
 
1774
+ to {
1775
+ opacity: 0;
1776
+ -webkit-transform: translate3d(-2000px, 0, 0);
1777
+ transform: translate3d(-2000px, 0, 0);
1778
+ }
1779
  }
1780
 
1781
  .fadeOutLeftBig {
1782
+ -webkit-animation-name: fadeOutLeftBig;
1783
+ animation-name: fadeOutLeftBig;
1784
  }
1785
 
1786
  @-webkit-keyframes fadeOutRight {
1787
+ from {
1788
+ opacity: 1;
1789
+ }
1790
 
1791
+ to {
1792
+ opacity: 0;
1793
+ -webkit-transform: translate3d(100%, 0, 0);
1794
+ transform: translate3d(100%, 0, 0);
1795
+ }
1796
  }
1797
 
1798
  @keyframes fadeOutRight {
1799
+ from {
1800
+ opacity: 1;
1801
+ }
1802
 
1803
+ to {
1804
+ opacity: 0;
1805
+ -webkit-transform: translate3d(100%, 0, 0);
1806
+ transform: translate3d(100%, 0, 0);
1807
+ }
1808
  }
1809
 
1810
  .fadeOutRight {
1811
+ -webkit-animation-name: fadeOutRight;
1812
+ animation-name: fadeOutRight;
1813
  }
1814
 
1815
  @-webkit-keyframes fadeOutRightBig {
1816
+ from {
1817
+ opacity: 1;
1818
+ }
1819
 
1820
+ to {
1821
+ opacity: 0;
1822
+ -webkit-transform: translate3d(2000px, 0, 0);
1823
+ transform: translate3d(2000px, 0, 0);
1824
+ }
1825
  }
1826
 
1827
  @keyframes fadeOutRightBig {
1828
+ from {
1829
+ opacity: 1;
1830
+ }
1831
 
1832
+ to {
1833
+ opacity: 0;
1834
+ -webkit-transform: translate3d(2000px, 0, 0);
1835
+ transform: translate3d(2000px, 0, 0);
1836
+ }
1837
  }
1838
 
1839
  .fadeOutRightBig {
1840
+ -webkit-animation-name: fadeOutRightBig;
1841
+ animation-name: fadeOutRightBig;
1842
  }
1843
 
1844
  @-webkit-keyframes fadeOutUp {
1845
+ from {
1846
+ opacity: 1;
1847
+ }
1848
 
1849
+ to {
1850
+ opacity: 0;
1851
+ -webkit-transform: translate3d(0, -100%, 0);
1852
+ transform: translate3d(0, -100%, 0);
1853
+ }
1854
  }
1855
 
1856
  @keyframes fadeOutUp {
1857
+ from {
1858
+ opacity: 1;
1859
+ }
1860
 
1861
+ to {
1862
+ opacity: 0;
1863
+ -webkit-transform: translate3d(0, -100%, 0);
1864
+ transform: translate3d(0, -100%, 0);
1865
+ }
1866
  }
1867
 
1868
  .fadeOutUp {
1869
+ -webkit-animation-name: fadeOutUp;
1870
+ animation-name: fadeOutUp;
1871
  }
1872
 
1873
  @-webkit-keyframes fadeOutUpBig {
1874
+ from {
1875
+ opacity: 1;
1876
+ }
1877
 
1878
+ to {
1879
+ opacity: 0;
1880
+ -webkit-transform: translate3d(0, -2000px, 0);
1881
+ transform: translate3d(0, -2000px, 0);
1882
+ }
1883
  }
1884
 
1885
  @keyframes fadeOutUpBig {
1886
+ from {
1887
+ opacity: 1;
1888
+ }
1889
 
1890
+ to {
1891
+ opacity: 0;
1892
+ -webkit-transform: translate3d(0, -2000px, 0);
1893
+ transform: translate3d(0, -2000px, 0);
1894
+ }
1895
  }
1896
 
1897
  .fadeOutUpBig {
1898
+ -webkit-animation-name: fadeOutUpBig;
1899
+ animation-name: fadeOutUpBig;
1900
  }
1901
 
1902
  @-webkit-keyframes flip {
1903
+ from {
1904
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
1905
+ rotate3d(0, 1, 0, -360deg);
1906
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
1907
+ -webkit-animation-timing-function: ease-out;
1908
+ animation-timing-function: ease-out;
1909
+ }
1910
+
1911
+ 40% {
1912
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1913
+ rotate3d(0, 1, 0, -190deg);
1914
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1915
+ rotate3d(0, 1, 0, -190deg);
1916
+ -webkit-animation-timing-function: ease-out;
1917
+ animation-timing-function: ease-out;
1918
+ }
1919
+
1920
+ 50% {
1921
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1922
+ rotate3d(0, 1, 0, -170deg);
1923
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1924
+ rotate3d(0, 1, 0, -170deg);
1925
+ -webkit-animation-timing-function: ease-in;
1926
+ animation-timing-function: ease-in;
1927
+ }
1928
+
1929
+ 80% {
1930
+ -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
1931
+ rotate3d(0, 1, 0, 0deg);
1932
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
1933
+ rotate3d(0, 1, 0, 0deg);
1934
+ -webkit-animation-timing-function: ease-in;
1935
+ animation-timing-function: ease-in;
1936
+ }
1937
+
1938
+ to {
1939
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
1940
+ rotate3d(0, 1, 0, 0deg);
1941
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
1942
+ -webkit-animation-timing-function: ease-in;
1943
+ animation-timing-function: ease-in;
1944
+ }
1945
  }
1946
 
1947
  @keyframes flip {
1948
+ from {
1949
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
1950
+ rotate3d(0, 1, 0, -360deg);
1951
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg);
1952
+ -webkit-animation-timing-function: ease-out;
1953
+ animation-timing-function: ease-out;
1954
+ }
1955
+
1956
+ 40% {
1957
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1958
+ rotate3d(0, 1, 0, -190deg);
1959
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1960
+ rotate3d(0, 1, 0, -190deg);
1961
+ -webkit-animation-timing-function: ease-out;
1962
+ animation-timing-function: ease-out;
1963
+ }
1964
+
1965
+ 50% {
1966
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1967
+ rotate3d(0, 1, 0, -170deg);
1968
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px)
1969
+ rotate3d(0, 1, 0, -170deg);
1970
+ -webkit-animation-timing-function: ease-in;
1971
+ animation-timing-function: ease-in;
1972
+ }
1973
+
1974
+ 80% {
1975
+ -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
1976
+ rotate3d(0, 1, 0, 0deg);
1977
+ transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0)
1978
+ rotate3d(0, 1, 0, 0deg);
1979
+ -webkit-animation-timing-function: ease-in;
1980
+ animation-timing-function: ease-in;
1981
+ }
1982
+
1983
+ to {
1984
+ -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0)
1985
+ rotate3d(0, 1, 0, 0deg);
1986
+ transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg);
1987
+ -webkit-animation-timing-function: ease-in;
1988
+ animation-timing-function: ease-in;
1989
+ }
1990
  }
1991
 
1992
  .animated.flip {
1993
+ -webkit-backface-visibility: visible;
1994
+ backface-visibility: visible;
1995
+ -webkit-animation-name: flip;
1996
+ animation-name: flip;
1997
  }
1998
 
1999
  @-webkit-keyframes flipInX {
2000
+ from {
2001
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2002
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2003
+ -webkit-animation-timing-function: ease-in;
2004
+ animation-timing-function: ease-in;
2005
+ opacity: 0;
2006
+ }
2007
+
2008
+ 40% {
2009
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2010
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2011
+ -webkit-animation-timing-function: ease-in;
2012
+ animation-timing-function: ease-in;
2013
+ }
2014
+
2015
+ 60% {
2016
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
2017
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
2018
+ opacity: 1;
2019
+ }
2020
+
2021
+ 80% {
2022
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
2023
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
2024
+ }
2025
+
2026
+ to {
2027
+ -webkit-transform: perspective(400px);
2028
+ transform: perspective(400px);
2029
+ }
2030
  }
2031
 
2032
  @keyframes flipInX {
2033
+ from {
2034
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2035
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2036
+ -webkit-animation-timing-function: ease-in;
2037
+ animation-timing-function: ease-in;
2038
+ opacity: 0;
2039
+ }
2040
+
2041
+ 40% {
2042
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2043
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2044
+ -webkit-animation-timing-function: ease-in;
2045
+ animation-timing-function: ease-in;
2046
+ }
2047
+
2048
+ 60% {
2049
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
2050
+ transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
2051
+ opacity: 1;
2052
+ }
2053
+
2054
+ 80% {
2055
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
2056
+ transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
2057
+ }
2058
+
2059
+ to {
2060
+ -webkit-transform: perspective(400px);
2061
+ transform: perspective(400px);
2062
+ }
2063
  }
2064
 
2065
  .flipInX {
2066
+ -webkit-backface-visibility: visible !important;
2067
+ backface-visibility: visible !important;
2068
+ -webkit-animation-name: flipInX;
2069
+ animation-name: flipInX;
2070
  }
2071
 
2072
  @-webkit-keyframes flipInY {
2073
+ from {
2074
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2075
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2076
+ -webkit-animation-timing-function: ease-in;
2077
+ animation-timing-function: ease-in;
2078
+ opacity: 0;
2079
+ }
2080
+
2081
+ 40% {
2082
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
2083
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
2084
+ -webkit-animation-timing-function: ease-in;
2085
+ animation-timing-function: ease-in;
2086
+ }
2087
+
2088
+ 60% {
2089
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
2090
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
2091
+ opacity: 1;
2092
+ }
2093
+
2094
+ 80% {
2095
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
2096
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
2097
+ }
2098
+
2099
+ to {
2100
+ -webkit-transform: perspective(400px);
2101
+ transform: perspective(400px);
2102
+ }
2103
  }
2104
 
2105
  @keyframes flipInY {
2106
+ from {
2107
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2108
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2109
+ -webkit-animation-timing-function: ease-in;
2110
+ animation-timing-function: ease-in;
2111
+ opacity: 0;
2112
+ }
2113
+
2114
+ 40% {
2115
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
2116
+ transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
2117
+ -webkit-animation-timing-function: ease-in;
2118
+ animation-timing-function: ease-in;
2119
+ }
2120
+
2121
+ 60% {
2122
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
2123
+ transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
2124
+ opacity: 1;
2125
+ }
2126
+
2127
+ 80% {
2128
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
2129
+ transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
2130
+ }
2131
+
2132
+ to {
2133
+ -webkit-transform: perspective(400px);
2134
+ transform: perspective(400px);
2135
+ }
2136
  }
2137
 
2138
  .flipInY {
2139
+ -webkit-backface-visibility: visible !important;
2140
+ backface-visibility: visible !important;
2141
+ -webkit-animation-name: flipInY;
2142
+ animation-name: flipInY;
2143
  }
2144
 
2145
  @-webkit-keyframes flipOutX {
2146
+ from {
2147
+ -webkit-transform: perspective(400px);
2148
+ transform: perspective(400px);
2149
+ }
2150
 
2151
+ 30% {
2152
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2153
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2154
+ opacity: 1;
2155
+ }
2156
 
2157
+ to {
2158
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2159
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2160
+ opacity: 0;
2161
+ }
2162
  }
2163
 
2164
  @keyframes flipOutX {
2165
+ from {
2166
+ -webkit-transform: perspective(400px);
2167
+ transform: perspective(400px);
2168
+ }
2169
 
2170
+ 30% {
2171
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2172
+ transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
2173
+ opacity: 1;
2174
+ }
2175
 
2176
+ to {
2177
+ -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2178
+ transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
2179
+ opacity: 0;
2180
+ }
2181
  }
2182
 
2183
  .flipOutX {
2184
+ -webkit-animation-duration: 0.75s;
2185
+ animation-duration: 0.75s;
2186
+ -webkit-animation-name: flipOutX;
2187
+ animation-name: flipOutX;
2188
+ -webkit-backface-visibility: visible !important;
2189
+ backface-visibility: visible !important;
2190
  }
2191
 
2192
  @-webkit-keyframes flipOutY {
2193
+ from {
2194
+ -webkit-transform: perspective(400px);
2195
+ transform: perspective(400px);
2196
+ }
2197
 
2198
+ 30% {
2199
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
2200
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
2201
+ opacity: 1;
2202
+ }
2203
 
2204
+ to {
2205
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2206
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2207
+ opacity: 0;
2208
+ }
2209
  }
2210
 
2211
  @keyframes flipOutY {
2212
+ from {
2213
+ -webkit-transform: perspective(400px);
2214
+ transform: perspective(400px);
2215
+ }
2216
 
2217
+ 30% {
2218
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
2219
+ transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
2220
+ opacity: 1;
2221
+ }
2222
 
2223
+ to {
2224
+ -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2225
+ transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
2226
+ opacity: 0;
2227
+ }
2228
  }
2229
 
2230
  .flipOutY {
2231
+ -webkit-animation-duration: 0.75s;
2232
+ animation-duration: 0.75s;
2233
+ -webkit-backface-visibility: visible !important;
2234
+ backface-visibility: visible !important;
2235
+ -webkit-animation-name: flipOutY;
2236
+ animation-name: flipOutY;
2237
  }
2238
 
2239
  @-webkit-keyframes lightSpeedIn {
2240
+ from {
2241
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
2242
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
2243
+ opacity: 0;
2244
+ }
2245
+
2246
+ 60% {
2247
+ -webkit-transform: skewX(20deg);
2248
+ transform: skewX(20deg);
2249
+ opacity: 1;
2250
+ }
2251
+
2252
+ 80% {
2253
+ -webkit-transform: skewX(-5deg);
2254
+ transform: skewX(-5deg);
2255
+ }
2256
+
2257
+ to {
2258
+ -webkit-transform: translate3d(0, 0, 0);
2259
+ transform: translate3d(0, 0, 0);
2260
+ }
 
 
2261
  }
2262
 
2263
  @keyframes lightSpeedIn {
2264
+ from {
2265
+ -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
2266
+ transform: translate3d(100%, 0, 0) skewX(-30deg);
2267
+ opacity: 0;
2268
+ }
2269
+
2270
+ 60% {
2271
+ -webkit-transform: skewX(20deg);
2272
+ transform: skewX(20deg);
2273
+ opacity: 1;
2274
+ }
2275
+
2276
+ 80% {
2277
+ -webkit-transform: skewX(-5deg);
2278
+ transform: skewX(-5deg);
2279
+ }
2280
+
2281
+ to {
2282
+ -webkit-transform: translate3d(0, 0, 0);
2283
+ transform: translate3d(0, 0, 0);
2284
+ }
 
 
2285
  }
2286
 
2287
  .lightSpeedIn {
2288
+ -webkit-animation-name: lightSpeedIn;
2289
+ animation-name: lightSpeedIn;
2290
+ -webkit-animation-timing-function: ease-out;
2291
+ animation-timing-function: ease-out;
2292
  }
2293
 
2294
  @-webkit-keyframes lightSpeedOut {
2295
+ from {
2296
+ opacity: 1;
2297
+ }
2298
 
2299
+ to {
2300
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
2301
+ transform: translate3d(100%, 0, 0) skewX(30deg);
2302
+ opacity: 0;
2303
+ }
2304
  }
2305
 
2306
  @keyframes lightSpeedOut {
2307
+ from {
2308
+ opacity: 1;
2309
+ }
2310
 
2311
+ to {
2312
+ -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
2313
+ transform: translate3d(100%, 0, 0) skewX(30deg);
2314
+ opacity: 0;
2315
+ }
2316
  }
2317
 
2318
  .lightSpeedOut {
2319
+ -webkit-animation-name: lightSpeedOut;
2320
+ animation-name: lightSpeedOut;
2321
+ -webkit-animation-timing-function: ease-in;
2322
+ animation-timing-function: ease-in;
2323
  }
2324
 
2325
  @-webkit-keyframes rotateIn {
2326
+ from {
2327
+ -webkit-transform-origin: center;
2328
+ transform-origin: center;
2329
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
2330
+ transform: rotate3d(0, 0, 1, -200deg);
2331
+ opacity: 0;
2332
+ }
2333
+
2334
+ to {
2335
+ -webkit-transform-origin: center;
2336
+ transform-origin: center;
2337
+ -webkit-transform: translate3d(0, 0, 0);
2338
+ transform: translate3d(0, 0, 0);
2339
+ opacity: 1;
2340
+ }
2341
  }
2342
 
2343
  @keyframes rotateIn {
2344
+ from {
2345
+ -webkit-transform-origin: center;
2346
+ transform-origin: center;
2347
+ -webkit-transform: rotate3d(0, 0, 1, -200deg);
2348
+ transform: rotate3d(0, 0, 1, -200deg);
2349
+ opacity: 0;
2350
+ }
2351
+
2352
+ to {
2353
+ -webkit-transform-origin: center;
2354
+ transform-origin: center;
2355
+ -webkit-transform: translate3d(0, 0, 0);
2356
+ transform: translate3d(0, 0, 0);
2357
+ opacity: 1;
2358
+ }
2359
  }
2360
 
2361
  .rotateIn {
2362
+ -webkit-animation-name: rotateIn;
2363
+ animation-name: rotateIn;
2364
  }
2365
 
2366
  @-webkit-keyframes rotateInDownLeft {
2367
+ from {
2368
+ -webkit-transform-origin: left bottom;
2369
+ transform-origin: left bottom;
2370
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
2371
+ transform: rotate3d(0, 0, 1, -45deg);
2372
+ opacity: 0;
2373
+ }
2374
+
2375
+ to {
2376
+ -webkit-transform-origin: left bottom;
2377
+ transform-origin: left bottom;
2378
+ -webkit-transform: translate3d(0, 0, 0);
2379
+ transform: translate3d(0, 0, 0);
2380
+ opacity: 1;
2381
+ }
2382
  }
2383
 
2384
  @keyframes rotateInDownLeft {
2385
+ from {
2386
+ -webkit-transform-origin: left bottom;
2387
+ transform-origin: left bottom;
2388
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
2389
+ transform: rotate3d(0, 0, 1, -45deg);
2390
+ opacity: 0;
2391
+ }
2392
+
2393
+ to {
2394
+ -webkit-transform-origin: left bottom;
2395
+ transform-origin: left bottom;
2396
+ -webkit-transform: translate3d(0, 0, 0);
2397
+ transform: translate3d(0, 0, 0);
2398
+ opacity: 1;
2399
+ }
2400
  }
2401
 
2402
  .rotateInDownLeft {
2403
+ -webkit-animation-name: rotateInDownLeft;
2404
+ animation-name: rotateInDownLeft;
2405
  }
2406
 
2407
  @-webkit-keyframes rotateInDownRight {
2408
+ from {
2409
+ -webkit-transform-origin: right bottom;
2410
+ transform-origin: right bottom;
2411
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
2412
+ transform: rotate3d(0, 0, 1, 45deg);
2413
+ opacity: 0;
2414
+ }
2415
+
2416
+ to {
2417
+ -webkit-transform-origin: right bottom;
2418
+ transform-origin: right bottom;
2419
+ -webkit-transform: translate3d(0, 0, 0);
2420
+ transform: translate3d(0, 0, 0);
2421
+ opacity: 1;
2422
+ }
2423
  }
2424
 
2425
  @keyframes rotateInDownRight {
2426
+ from {
2427
+ -webkit-transform-origin: right bottom;
2428
+ transform-origin: right bottom;
2429
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
2430
+ transform: rotate3d(0, 0, 1, 45deg);
2431
+ opacity: 0;
2432
+ }
2433
+
2434
+ to {
2435
+ -webkit-transform-origin: right bottom;
2436
+ transform-origin: right bottom;
2437
+ -webkit-transform: translate3d(0, 0, 0);
2438
+ transform: translate3d(0, 0, 0);
2439
+ opacity: 1;
2440
+ }
2441
  }
2442
 
2443
  .rotateInDownRight {
2444
+ -webkit-animation-name: rotateInDownRight;
2445
+ animation-name: rotateInDownRight;
2446
  }
2447
 
2448
  @-webkit-keyframes rotateInUpLeft {
2449
+ from {
2450
+ -webkit-transform-origin: left bottom;
2451
+ transform-origin: left bottom;
2452
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
2453
+ transform: rotate3d(0, 0, 1, 45deg);
2454
+ opacity: 0;
2455
+ }
2456
+
2457
+ to {
2458
+ -webkit-transform-origin: left bottom;
2459
+ transform-origin: left bottom;
2460
+ -webkit-transform: translate3d(0, 0, 0);
2461
+ transform: translate3d(0, 0, 0);
2462
+ opacity: 1;
2463
+ }
2464
  }
2465
 
2466
  @keyframes rotateInUpLeft {
2467
+ from {
2468
+ -webkit-transform-origin: left bottom;
2469
+ transform-origin: left bottom;
2470
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
2471
+ transform: rotate3d(0, 0, 1, 45deg);
2472
+ opacity: 0;
2473
+ }
2474
+
2475
+ to {
2476
+ -webkit-transform-origin: left bottom;
2477
+ transform-origin: left bottom;
2478
+ -webkit-transform: translate3d(0, 0, 0);
2479
+ transform: translate3d(0, 0, 0);
2480
+ opacity: 1;
2481
+ }
2482
  }
2483
 
2484
  .rotateInUpLeft {
2485
+ -webkit-animation-name: rotateInUpLeft;
2486
+ animation-name: rotateInUpLeft;
2487
  }
2488
 
2489
  @-webkit-keyframes rotateInUpRight {
2490
+ from {
2491
+ -webkit-transform-origin: right bottom;
2492
+ transform-origin: right bottom;
2493
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
2494
+ transform: rotate3d(0, 0, 1, -90deg);
2495
+ opacity: 0;
2496
+ }
2497
+
2498
+ to {
2499
+ -webkit-transform-origin: right bottom;
2500
+ transform-origin: right bottom;
2501
+ -webkit-transform: translate3d(0, 0, 0);
2502
+ transform: translate3d(0, 0, 0);
2503
+ opacity: 1;
2504
+ }
2505
  }
2506
 
2507
  @keyframes rotateInUpRight {
2508
+ from {
2509
+ -webkit-transform-origin: right bottom;
2510
+ transform-origin: right bottom;
2511
+ -webkit-transform: rotate3d(0, 0, 1, -90deg);
2512
+ transform: rotate3d(0, 0, 1, -90deg);
2513
+ opacity: 0;
2514
+ }
2515
+
2516
+ to {
2517
+ -webkit-transform-origin: right bottom;
2518
+ transform-origin: right bottom;
2519
+ -webkit-transform: translate3d(0, 0, 0);
2520
+ transform: translate3d(0, 0, 0);
2521
+ opacity: 1;
2522
+ }
2523
  }
2524
 
2525
  .rotateInUpRight {
2526
+ -webkit-animation-name: rotateInUpRight;
2527
+ animation-name: rotateInUpRight;
2528
  }
2529
 
2530
  @-webkit-keyframes rotateOut {
2531
+ from {
2532
+ -webkit-transform-origin: center;
2533
+ transform-origin: center;
2534
+ opacity: 1;
2535
+ }
2536
 
2537
+ to {
2538
+ -webkit-transform-origin: center;
2539
+ transform-origin: center;
2540
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
2541
+ transform: rotate3d(0, 0, 1, 200deg);
2542
+ opacity: 0;
2543
+ }
2544
  }
2545
 
2546
  @keyframes rotateOut {
2547
+ from {
2548
+ -webkit-transform-origin: center;
2549
+ transform-origin: center;
2550
+ opacity: 1;
2551
+ }
2552
 
2553
+ to {
2554
+ -webkit-transform-origin: center;
2555
+ transform-origin: center;
2556
+ -webkit-transform: rotate3d(0, 0, 1, 200deg);
2557
+ transform: rotate3d(0, 0, 1, 200deg);
2558
+ opacity: 0;
2559
+ }
2560
  }
2561
 
2562
  .rotateOut {
2563
+ -webkit-animation-name: rotateOut;
2564
+ animation-name: rotateOut;
2565
  }
2566
 
2567
  @-webkit-keyframes rotateOutDownLeft {
2568
+ from {
2569
+ -webkit-transform-origin: left bottom;
2570
+ transform-origin: left bottom;
2571
+ opacity: 1;
2572
+ }
2573
 
2574
+ to {
2575
+ -webkit-transform-origin: left bottom;
2576
+ transform-origin: left bottom;
2577
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
2578
+ transform: rotate3d(0, 0, 1, 45deg);
2579
+ opacity: 0;
2580
+ }
2581
  }
2582
 
2583
  @keyframes rotateOutDownLeft {
2584
+ from {
2585
+ -webkit-transform-origin: left bottom;
2586
+ transform-origin: left bottom;
2587
+ opacity: 1;
2588
+ }
2589
 
2590
+ to {
2591
+ -webkit-transform-origin: left bottom;
2592
+ transform-origin: left bottom;
2593
+ -webkit-transform: rotate3d(0, 0, 1, 45deg);
2594
+ transform: rotate3d(0, 0, 1, 45deg);
2595
+ opacity: 0;
2596
+ }
2597
  }
2598
 
2599
  .rotateOutDownLeft {
2600
+ -webkit-animation-name: rotateOutDownLeft;
2601
+ animation-name: rotateOutDownLeft;
2602
  }
2603
 
2604
  @-webkit-keyframes rotateOutDownRight {
2605
+ from {
2606
+ -webkit-transform-origin: right bottom;
2607
+ transform-origin: right bottom;
2608
+ opacity: 1;
2609
+ }
2610
 
2611
+ to {
2612
+ -webkit-transform-origin: right bottom;
2613
+ transform-origin: right bottom;
2614
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
2615
+ transform: rotate3d(0, 0, 1, -45deg);
2616
+ opacity: 0;
2617
+ }
2618
  }
2619
 
2620
  @keyframes rotateOutDownRight {
2621
+ from {
2622
+ -webkit-transform-origin: right bottom;
2623
+ transform-origin: right bottom;
2624
+ opacity: 1;
2625
+ }
2626
 
2627
+ to {
2628
+ -webkit-transform-origin: right bottom;
2629
+ transform-origin: right bottom;
2630
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
2631
+ transform: rotate3d(0, 0, 1, -45deg);
2632
+ opacity: 0;
2633
+ }
2634
  }
2635
 
2636
  .rotateOutDownRight {
2637
+ -webkit-animation-name: rotateOutDownRight;
2638
+ animation-name: rotateOutDownRight;
2639
  }
2640
 
2641
  @-webkit-keyframes rotateOutUpLeft {
2642
+ from {
2643
+ -webkit-transform-origin: left bottom;
2644
+ transform-origin: left bottom;
2645
+ opacity: 1;
2646
+ }
2647
 
2648
+ to {
2649
+ -webkit-transform-origin: left bottom;
2650
+ transform-origin: left bottom;
2651
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
2652
+ transform: rotate3d(0, 0, 1, -45deg);
2653
+ opacity: 0;
2654
+ }
2655
  }
2656
 
2657
  @keyframes rotateOutUpLeft {
2658
+ from {
2659
+ -webkit-transform-origin: left bottom;
2660
+ transform-origin: left bottom;
2661
+ opacity: 1;
2662
+ }
2663
 
2664
+ to {
2665
+ -webkit-transform-origin: left bottom;
2666
+ transform-origin: left bottom;
2667
+ -webkit-transform: rotate3d(0, 0, 1, -45deg);
2668
+ transform: rotate3d(0, 0, 1, -45deg);
2669
+ opacity: 0;
2670
+ }
2671
  }
2672
 
2673
  .rotateOutUpLeft {
2674
+ -webkit-animation-name: rotateOutUpLeft;
2675
+ animation-name: rotateOutUpLeft;
2676
  }
2677
 
2678
  @-webkit-keyframes rotateOutUpRight {
2679
+ from {
2680
+ -webkit-transform-origin: right bottom;
2681
+ transform-origin: right bottom;
2682
+ opacity: 1;
2683
+ }
2684
 
2685
+ to {
2686
+ -webkit-transform-origin: right bottom;
2687
+ transform-origin: right bottom;
2688
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
2689
+ transform: rotate3d(0, 0, 1, 90deg);
2690
+ opacity: 0;
2691
+ }
2692
  }
2693
 
2694
  @keyframes rotateOutUpRight {
2695
+ from {
2696
+ -webkit-transform-origin: right bottom;
2697
+ transform-origin: right bottom;
2698
+ opacity: 1;
2699
+ }
2700
 
2701
+ to {
2702
+ -webkit-transform-origin: right bottom;
2703
+ transform-origin: right bottom;
2704
+ -webkit-transform: rotate3d(0, 0, 1, 90deg);
2705
+ transform: rotate3d(0, 0, 1, 90deg);
2706
+ opacity: 0;
2707
+ }
2708
  }
2709
 
2710
  .rotateOutUpRight {
2711
+ -webkit-animation-name: rotateOutUpRight;
2712
+ animation-name: rotateOutUpRight;
2713
  }
2714
 
2715
  @-webkit-keyframes hinge {
2716
+ 0% {
2717
+ -webkit-transform-origin: top left;
2718
+ transform-origin: top left;
2719
+ -webkit-animation-timing-function: ease-in-out;
2720
+ animation-timing-function: ease-in-out;
2721
+ }
2722
+
2723
+ 20%,
2724
+ 60% {
2725
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
2726
+ transform: rotate3d(0, 0, 1, 80deg);
2727
+ -webkit-transform-origin: top left;
2728
+ transform-origin: top left;
2729
+ -webkit-animation-timing-function: ease-in-out;
2730
+ animation-timing-function: ease-in-out;
2731
+ }
2732
+
2733
+ 40%,
2734
+ 80% {
2735
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
2736
+ transform: rotate3d(0, 0, 1, 60deg);
2737
+ -webkit-transform-origin: top left;
2738
+ transform-origin: top left;
2739
+ -webkit-animation-timing-function: ease-in-out;
2740
+ animation-timing-function: ease-in-out;
2741
+ opacity: 1;
2742
+ }
2743
+
2744
+ to {
2745
+ -webkit-transform: translate3d(0, 700px, 0);
2746
+ transform: translate3d(0, 700px, 0);
2747
+ opacity: 0;
2748
+ }
2749
  }
2750
 
2751
  @keyframes hinge {
2752
+ 0% {
2753
+ -webkit-transform-origin: top left;
2754
+ transform-origin: top left;
2755
+ -webkit-animation-timing-function: ease-in-out;
2756
+ animation-timing-function: ease-in-out;
2757
+ }
2758
+
2759
+ 20%,
2760
+ 60% {
2761
+ -webkit-transform: rotate3d(0, 0, 1, 80deg);
2762
+ transform: rotate3d(0, 0, 1, 80deg);
2763
+ -webkit-transform-origin: top left;
2764
+ transform-origin: top left;
2765
+ -webkit-animation-timing-function: ease-in-out;
2766
+ animation-timing-function: ease-in-out;
2767
+ }
2768
+
2769
+ 40%,
2770
+ 80% {
2771
+ -webkit-transform: rotate3d(0, 0, 1, 60deg);
2772
+ transform: rotate3d(0, 0, 1, 60deg);
2773
+ -webkit-transform-origin: top left;
2774
+ transform-origin: top left;
2775
+ -webkit-animation-timing-function: ease-in-out;
2776
+ animation-timing-function: ease-in-out;
2777
+ opacity: 1;
2778
+ }
2779
+
2780
+ to {
2781
+ -webkit-transform: translate3d(0, 700px, 0);
2782
+ transform: translate3d(0, 700px, 0);
2783
+ opacity: 0;
2784
+ }
2785
  }
2786
 
2787
  .hinge {
2788
+ -webkit-animation-duration: 2s;
2789
+ animation-duration: 2s;
2790
+ -webkit-animation-name: hinge;
2791
+ animation-name: hinge;
2792
+ }
2793
+
2794
+ @-webkit-keyframes jackInTheBox {
2795
+ from {
2796
+ opacity: 0;
2797
+ -webkit-transform: scale(0.1) rotate(30deg);
2798
+ transform: scale(0.1) rotate(30deg);
2799
+ -webkit-transform-origin: center bottom;
2800
+ transform-origin: center bottom;
2801
+ }
2802
+
2803
+ 50% {
2804
+ -webkit-transform: rotate(-10deg);
2805
+ transform: rotate(-10deg);
2806
+ }
2807
+
2808
+ 70% {
2809
+ -webkit-transform: rotate(3deg);
2810
+ transform: rotate(3deg);
2811
+ }
2812
+
2813
+ to {
2814
+ opacity: 1;
2815
+ -webkit-transform: scale(1);
2816
+ transform: scale(1);
2817
+ }
2818
+ }
2819
+
2820
+ @keyframes jackInTheBox {
2821
+ from {
2822
+ opacity: 0;
2823
+ -webkit-transform: scale(0.1) rotate(30deg);
2824
+ transform: scale(0.1) rotate(30deg);
2825
+ -webkit-transform-origin: center bottom;
2826
+ transform-origin: center bottom;
2827
+ }
2828
+
2829
+ 50% {
2830
+ -webkit-transform: rotate(-10deg);
2831
+ transform: rotate(-10deg);
2832
+ }
2833
+
2834
+ 70% {
2835
+ -webkit-transform: rotate(3deg);
2836
+ transform: rotate(3deg);
2837
+ }
2838
+
2839
+ to {
2840
+ opacity: 1;
2841
+ -webkit-transform: scale(1);
2842
+ transform: scale(1);
2843
+ }
2844
+ }
2845
+
2846
+ .jackInTheBox {
2847
+ -webkit-animation-name: jackInTheBox;
2848
+ animation-name: jackInTheBox;
2849
  }
2850
 
2851
  /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
2852
 
2853
  @-webkit-keyframes rollIn {
2854
+ from {
2855
+ opacity: 0;
2856
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2857
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2858
+ }
2859
 
2860
+ to {
2861
+ opacity: 1;
2862
+ -webkit-transform: translate3d(0, 0, 0);
2863
+ transform: translate3d(0, 0, 0);
2864
+ }
2865
  }
2866
 
2867
  @keyframes rollIn {
2868
+ from {
2869
+ opacity: 0;
2870
+ -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2871
+ transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
2872
+ }
2873
 
2874
+ to {
2875
+ opacity: 1;
2876
+ -webkit-transform: translate3d(0, 0, 0);
2877
+ transform: translate3d(0, 0, 0);
2878
+ }
2879
  }
2880
 
2881
  .rollIn {
2882
+ -webkit-animation-name: rollIn;
2883
+ animation-name: rollIn;
2884
  }
2885
 
2886
  /* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
2887
 
2888
  @-webkit-keyframes rollOut {
2889
+ from {
2890
+ opacity: 1;
2891
+ }
2892
 
2893
+ to {
2894
+ opacity: 0;
2895
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2896
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2897
+ }
2898
  }
2899
 
2900
  @keyframes rollOut {
2901
+ from {
2902
+ opacity: 1;
2903
+ }
2904
 
2905
+ to {
2906
+ opacity: 0;
2907
+ -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2908
+ transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
2909
+ }
2910
  }
2911
 
2912
  .rollOut {
2913
+ -webkit-animation-name: rollOut;
2914
+ animation-name: rollOut;
2915
  }
2916
 
2917
  @-webkit-keyframes zoomIn {
2918
+ from {
2919
+ opacity: 0;
2920
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
2921
+ transform: scale3d(0.3, 0.3, 0.3);
2922
+ }
2923
 
2924
+ 50% {
2925
+ opacity: 1;
2926
+ }
2927
  }
2928
 
2929
  @keyframes zoomIn {
2930
+ from {
2931
+ opacity: 0;
2932
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
2933
+ transform: scale3d(0.3, 0.3, 0.3);
2934
+ }
2935
 
2936
+ 50% {
2937
+ opacity: 1;
2938
+ }
2939
  }
2940
 
2941
  .zoomIn {
2942
+ -webkit-animation-name: zoomIn;
2943
+ animation-name: zoomIn;
2944
  }
2945
 
2946
  @-webkit-keyframes zoomInDown {
2947
+ from {
2948
+ opacity: 0;
2949
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
2950
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
2951
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
2952
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
2953
+ }
2954
+
2955
+ 60% {
2956
+ opacity: 1;
2957
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
2958
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
2959
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
2960
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
2961
+ }
2962
  }
2963
 
2964
  @keyframes zoomInDown {
2965
+ from {
2966
+ opacity: 0;
2967
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
2968
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0);
2969
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
2970
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
2971
+ }
2972
+
2973
+ 60% {
2974
+ opacity: 1;
2975
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
2976
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
2977
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
2978
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
2979
+ }
2980
  }
2981
 
2982
  .zoomInDown {
2983
+ -webkit-animation-name: zoomInDown;
2984
+ animation-name: zoomInDown;
2985
  }
2986
 
2987
  @-webkit-keyframes zoomInLeft {
2988
+ from {
2989
+ opacity: 0;
2990
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
2991
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
2992
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
2993
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
2994
+ }
2995
+
2996
+ 60% {
2997
+ opacity: 1;
2998
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
2999
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
3000
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3001
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3002
+ }
3003
  }
3004
 
3005
  @keyframes zoomInLeft {
3006
+ from {
3007
+ opacity: 0;
3008
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
3009
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0);
3010
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3011
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3012
+ }
3013
+
3014
+ 60% {
3015
+ opacity: 1;
3016
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
3017
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0);
3018
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3019
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3020
+ }
3021
  }
3022
 
3023
  .zoomInLeft {
3024
+ -webkit-animation-name: zoomInLeft;
3025
+ animation-name: zoomInLeft;
3026
  }
3027
 
3028
  @-webkit-keyframes zoomInRight {
3029
+ from {
3030
+ opacity: 0;
3031
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
3032
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
3033
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3034
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3035
+ }
3036
+
3037
+ 60% {
3038
+ opacity: 1;
3039
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
3040
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
3041
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3042
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3043
+ }
3044
  }
3045
 
3046
  @keyframes zoomInRight {
3047
+ from {
3048
+ opacity: 0;
3049
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
3050
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0);
3051
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3052
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3053
+ }
3054
+
3055
+ 60% {
3056
+ opacity: 1;
3057
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
3058
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0);
3059
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3060
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3061
+ }
3062
  }
3063
 
3064
  .zoomInRight {
3065
+ -webkit-animation-name: zoomInRight;
3066
+ animation-name: zoomInRight;
3067
  }
3068
 
3069
  @-webkit-keyframes zoomInUp {
3070
+ from {
3071
+ opacity: 0;
3072
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
3073
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
3074
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3075
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3076
+ }
3077
+
3078
+ 60% {
3079
+ opacity: 1;
3080
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3081
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3082
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3083
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3084
+ }
3085
  }
3086
 
3087
  @keyframes zoomInUp {
3088
+ from {
3089
+ opacity: 0;
3090
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
3091
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0);
3092
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3093
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3094
+ }
3095
+
3096
+ 60% {
3097
+ opacity: 1;
3098
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3099
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3100
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3101
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3102
+ }
3103
  }
3104
 
3105
  .zoomInUp {
3106
+ -webkit-animation-name: zoomInUp;
3107
+ animation-name: zoomInUp;
3108
  }
3109
 
3110
  @-webkit-keyframes zoomOut {
3111
+ from {
3112
+ opacity: 1;
3113
+ }
3114
 
3115
+ 50% {
3116
+ opacity: 0;
3117
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
3118
+ transform: scale3d(0.3, 0.3, 0.3);
3119
+ }
3120
 
3121
+ to {
3122
+ opacity: 0;
3123
+ }
3124
  }
3125
 
3126
  @keyframes zoomOut {
3127
+ from {
3128
+ opacity: 1;
3129
+ }
3130
 
3131
+ 50% {
3132
+ opacity: 0;
3133
+ -webkit-transform: scale3d(0.3, 0.3, 0.3);
3134
+ transform: scale3d(0.3, 0.3, 0.3);
3135
+ }
3136
 
3137
+ to {
3138
+ opacity: 0;
3139
+ }
3140
  }
3141
 
3142
  .zoomOut {
3143
+ -webkit-animation-name: zoomOut;
3144
+ animation-name: zoomOut;
3145
  }
3146
 
3147
  @-webkit-keyframes zoomOutDown {
3148
+ 40% {
3149
+ opacity: 1;
3150
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3151
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3152
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3153
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3154
+ }
3155
+
3156
+ to {
3157
+ opacity: 0;
3158
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
3159
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
3160
+ -webkit-transform-origin: center bottom;
3161
+ transform-origin: center bottom;
3162
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3163
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3164
+ }
3165
  }
3166
 
3167
  @keyframes zoomOutDown {
3168
+ 40% {
3169
+ opacity: 1;
3170
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3171
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0);
3172
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3173
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3174
+ }
3175
+
3176
+ to {
3177
+ opacity: 0;
3178
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
3179
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0);
3180
+ -webkit-transform-origin: center bottom;
3181
+ transform-origin: center bottom;
3182
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3183
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3184
+ }
3185
  }
3186
 
3187
  .zoomOutDown {
3188
+ -webkit-animation-name: zoomOutDown;
3189
+ animation-name: zoomOutDown;
3190
  }
3191
 
3192
  @-webkit-keyframes zoomOutLeft {
3193
+ 40% {
3194
+ opacity: 1;
3195
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
3196
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
3197
+ }
3198
 
3199
+ to {
3200
+ opacity: 0;
3201
+ -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
3202
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
3203
+ -webkit-transform-origin: left center;
3204
+ transform-origin: left center;
3205
+ }
3206
  }
3207
 
3208
  @keyframes zoomOutLeft {
3209
+ 40% {
3210
+ opacity: 1;
3211
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
3212
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0);
3213
+ }
3214
 
3215
+ to {
3216
+ opacity: 0;
3217
+ -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0);
3218
+ transform: scale(0.1) translate3d(-2000px, 0, 0);
3219
+ -webkit-transform-origin: left center;
3220
+ transform-origin: left center;
3221
+ }
3222
  }
3223
 
3224
  .zoomOutLeft {
3225
+ -webkit-animation-name: zoomOutLeft;
3226
+ animation-name: zoomOutLeft;
3227
  }
3228
 
3229
  @-webkit-keyframes zoomOutRight {
3230
+ 40% {
3231
+ opacity: 1;
3232
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
3233
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
3234
+ }
3235
 
3236
+ to {
3237
+ opacity: 0;
3238
+ -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
3239
+ transform: scale(0.1) translate3d(2000px, 0, 0);
3240
+ -webkit-transform-origin: right center;
3241
+ transform-origin: right center;
3242
+ }
3243
  }
3244
 
3245
  @keyframes zoomOutRight {
3246
+ 40% {
3247
+ opacity: 1;
3248
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
3249
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0);
3250
+ }
3251
 
3252
+ to {
3253
+ opacity: 0;
3254
+ -webkit-transform: scale(0.1) translate3d(2000px, 0, 0);
3255
+ transform: scale(0.1) translate3d(2000px, 0, 0);
3256
+ -webkit-transform-origin: right center;
3257
+ transform-origin: right center;
3258
+ }
3259
  }
3260
 
3261
  .zoomOutRight {
3262
+ -webkit-animation-name: zoomOutRight;
3263
+ animation-name: zoomOutRight;
3264
  }
3265
 
3266
  @-webkit-keyframes zoomOutUp {
3267
+ 40% {
3268
+ opacity: 1;
3269
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
3270
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
3271
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3272
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3273
+ }
3274
+
3275
+ to {
3276
+ opacity: 0;
3277
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
3278
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
3279
+ -webkit-transform-origin: center bottom;
3280
+ transform-origin: center bottom;
3281
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3282
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3283
+ }
3284
  }
3285
 
3286
  @keyframes zoomOutUp {
3287
+ 40% {
3288
+ opacity: 1;
3289
+ -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
3290
+ transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0);
3291
+ -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3292
+ animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19);
3293
+ }
3294
+
3295
+ to {
3296
+ opacity: 0;
3297
+ -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
3298
+ transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0);
3299
+ -webkit-transform-origin: center bottom;
3300
+ transform-origin: center bottom;
3301
+ -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3302
+ animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1);
3303
+ }
3304
  }
3305
 
3306
  .zoomOutUp {
3307
+ -webkit-animation-name: zoomOutUp;
3308
+ animation-name: zoomOutUp;
3309
  }
3310
 
3311
  @-webkit-keyframes slideInDown {
3312
+ from {
3313
+ -webkit-transform: translate3d(0, -100%, 0);
3314
+ transform: translate3d(0, -100%, 0);
3315
+ visibility: visible;
3316
+ }
3317
 
3318
+ to {
3319
+ -webkit-transform: translate3d(0, 0, 0);
3320
+ transform: translate3d(0, 0, 0);
3321
+ }
3322
  }
3323
 
3324
  @keyframes slideInDown {
3325
+ from {
3326
+ -webkit-transform: translate3d(0, -100%, 0);
3327
+ transform: translate3d(0, -100%, 0);
3328
+ visibility: visible;
3329
+ }
3330
 
3331
+ to {
3332
+ -webkit-transform: translate3d(0, 0, 0);
3333
+ transform: translate3d(0, 0, 0);
3334
+ }
3335
  }
3336
 
3337
  .slideInDown {
3338
+ -webkit-animation-name: slideInDown;
3339
+ animation-name: slideInDown;
3340
  }
3341
 
3342
  @-webkit-keyframes slideInLeft {
3343
+ from {
3344
+ -webkit-transform: translate3d(-100%, 0, 0);
3345
+ transform: translate3d(-100%, 0, 0);
3346
+ visibility: visible;
3347
+ }
3348
 
3349
+ to {
3350
+ -webkit-transform: translate3d(0, 0, 0);
3351
+ transform: translate3d(0, 0, 0);
3352
+ }
3353
  }
3354
 
3355
  @keyframes slideInLeft {
3356
+ from {
3357
+ -webkit-transform: translate3d(-100%, 0, 0);
3358
+ transform: translate3d(-100%, 0, 0);
3359
+ visibility: visible;
3360
+ }
3361
 
3362
+ to {
3363
+ -webkit-transform: translate3d(0, 0, 0);
3364
+ transform: translate3d(0, 0, 0);
3365
+ }
3366
  }
3367
 
3368
  .slideInLeft {
3369
+ -webkit-animation-name: slideInLeft;
3370
+ animation-name: slideInLeft;
3371
  }
3372
 
3373
  @-webkit-keyframes slideInRight {
3374
+ from {
3375
+ -webkit-transform: translate3d(100%, 0, 0);
3376
+ transform: translate3d(100%, 0, 0);
3377
+ visibility: visible;
3378
+ }
3379
 
3380
+ to {
3381
+ -webkit-transform: translate3d(0, 0, 0);
3382
+ transform: translate3d(0, 0, 0);
3383
+ }
3384
  }
3385
 
3386
  @keyframes slideInRight {
3387
+ from {
3388
+ -webkit-transform: translate3d(100%, 0, 0);
3389
+ transform: translate3d(100%, 0, 0);
3390
+ visibility: visible;
3391
+ }
3392
 
3393
+ to {
3394
+ -webkit-transform: translate3d(0, 0, 0);
3395
+ transform: translate3d(0, 0, 0);
3396
+ }
3397
  }
3398
 
3399
  .slideInRight {
3400
+ -webkit-animation-name: slideInRight;
3401
+ animation-name: slideInRight;
3402
  }
3403
 
3404
  @-webkit-keyframes slideInUp {
3405
+ from {
3406
+ -webkit-transform: translate3d(0, 100%, 0);
3407
+ transform: translate3d(0, 100%, 0);
3408
+ visibility: visible;
3409
+ }
3410
 
3411
+ to {
3412
+ -webkit-transform: translate3d(0, 0, 0);
3413
+ transform: translate3d(0, 0, 0);
3414
+ }
3415
  }
3416
 
3417
  @keyframes slideInUp {
3418
+ from {
3419
+ -webkit-transform: translate3d(0, 100%, 0);
3420
+ transform: translate3d(0, 100%, 0);
3421
+ visibility: visible;
3422
+ }
3423
 
3424
+ to {
3425
+ -webkit-transform: translate3d(0, 0, 0);
3426
+ transform: translate3d(0, 0, 0);
3427
+ }
3428
  }
3429
 
3430
  .slideInUp {
3431
+ -webkit-animation-name: slideInUp;
3432
+ animation-name: slideInUp;
3433
  }
3434
 
3435
  @-webkit-keyframes slideOutDown {
3436
+ from {
3437
+ -webkit-transform: translate3d(0, 0, 0);
3438
+ transform: translate3d(0, 0, 0);
3439
+ }
3440
 
3441
+ to {
3442
+ visibility: hidden;
3443
+ -webkit-transform: translate3d(0, 100%, 0);
3444
+ transform: translate3d(0, 100%, 0);
3445
+ }
3446
  }
3447
 
3448
  @keyframes slideOutDown {
3449
+ from {
3450
+ -webkit-transform: translate3d(0, 0, 0);
3451
+ transform: translate3d(0, 0, 0);
3452
+ }
3453
 
3454
+ to {
3455
+ visibility: hidden;
3456
+ -webkit-transform: translate3d(0, 100%, 0);
3457
+ transform: translate3d(0, 100%, 0);
3458
+ }
3459
  }
3460
 
3461
  .slideOutDown {
3462
+ -webkit-animation-name: slideOutDown;
3463
+ animation-name: slideOutDown;
3464
  }
3465
 
3466
  @-webkit-keyframes slideOutLeft {
3467
+ from {
3468
+ -webkit-transform: translate3d(0, 0, 0);
3469
+ transform: translate3d(0, 0, 0);
3470
+ }
3471
 
3472
+ to {
3473
+ visibility: hidden;
3474
+ -webkit-transform: translate3d(-100%, 0, 0);
3475
+ transform: translate3d(-100%, 0, 0);
3476
+ }
3477
  }
3478
 
3479
  @keyframes slideOutLeft {
3480
+ from {
3481
+ -webkit-transform: translate3d(0, 0, 0);
3482
+ transform: translate3d(0, 0, 0);
3483
+ }
3484
 
3485
+ to {
3486
+ visibility: hidden;
3487
+ -webkit-transform: translate3d(-100%, 0, 0);
3488
+ transform: translate3d(-100%, 0, 0);
3489
+ }
3490
  }
3491
 
3492
  .slideOutLeft {
3493
+ -webkit-animation-name: slideOutLeft;
3494
+ animation-name: slideOutLeft;
3495
  }
3496
 
3497
  @-webkit-keyframes slideOutRight {
3498
+ from {
3499
+ -webkit-transform: translate3d(0, 0, 0);
3500
+ transform: translate3d(0, 0, 0);
3501
+ }
3502
 
3503
+ to {
3504
+ visibility: hidden;
3505
+ -webkit-transform: translate3d(100%, 0, 0);
3506
+ transform: translate3d(100%, 0, 0);
3507
+ }
3508
  }
3509
 
3510
  @keyframes slideOutRight {
3511
+ from {
3512
+ -webkit-transform: translate3d(0, 0, 0);
3513
+ transform: translate3d(0, 0, 0);
3514
+ }
3515
 
3516
+ to {
3517
+ visibility: hidden;
3518
+ -webkit-transform: translate3d(100%, 0, 0);
3519
+ transform: translate3d(100%, 0, 0);
3520
+ }
3521
  }
3522
 
3523
  .slideOutRight {
3524
+ -webkit-animation-name: slideOutRight;
3525
+ animation-name: slideOutRight;
3526
  }
3527
 
3528
  @-webkit-keyframes slideOutUp {
3529
+ from {
3530
+ -webkit-transform: translate3d(0, 0, 0);
3531
+ transform: translate3d(0, 0, 0);
3532
+ }
3533
 
3534
+ to {
3535
+ visibility: hidden;
3536
+ -webkit-transform: translate3d(0, -100%, 0);
3537
+ transform: translate3d(0, -100%, 0);
3538
+ }
3539
  }
3540
 
3541
  @keyframes slideOutUp {
3542
+ from {
3543
+ -webkit-transform: translate3d(0, 0, 0);
3544
+ transform: translate3d(0, 0, 0);
3545
+ }
3546
 
3547
+ to {
3548
+ visibility: hidden;
3549
+ -webkit-transform: translate3d(0, -100%, 0);
3550
+ transform: translate3d(0, -100%, 0);
3551
+ }
3552
  }
3553
 
3554
  .slideOutUp {
3555
+ -webkit-animation-name: slideOutUp;
3556
+ animation-name: slideOutUp;
3557
+ }
3558
+
3559
+ .animated {
3560
+ -webkit-animation-duration: 1s;
3561
+ animation-duration: 1s;
3562
+ -webkit-animation-fill-mode: both;
3563
+ animation-fill-mode: both;
3564
+ }
3565
+
3566
+ .animated.infinite {
3567
+ -webkit-animation-iteration-count: infinite;
3568
+ animation-iteration-count: infinite;
3569
+ }
3570
+
3571
+ .animated.delay-1s {
3572
+ -webkit-animation-delay: 1s;
3573
+ animation-delay: 1s;
3574
+ }
3575
+
3576
+ .animated.delay-2s {
3577
+ -webkit-animation-delay: 2s;
3578
+ animation-delay: 2s;
3579
+ }
3580
+
3581
+ .animated.delay-3s {
3582
+ -webkit-animation-delay: 3s;
3583
+ animation-delay: 3s;
3584
+ }
3585
+
3586
+ .animated.delay-4s {
3587
+ -webkit-animation-delay: 4s;
3588
+ animation-delay: 4s;
3589
+ }
3590
+
3591
+ .animated.delay-5s {
3592
+ -webkit-animation-delay: 5s;
3593
+ animation-delay: 5s;
3594
+ }
3595
+
3596
+ .animated.fast {
3597
+ -webkit-animation-duration: 800ms;
3598
+ animation-duration: 800ms;
3599
+ }
3600
+
3601
+ .animated.faster {
3602
+ -webkit-animation-duration: 500ms;
3603
+ animation-duration: 500ms;
3604
+ }
3605
+
3606
+ .animated.slow {
3607
+ -webkit-animation-duration: 2s;
3608
+ animation-duration: 2s;
3609
+ }
3610
+
3611
+ .animated.slower {
3612
+ -webkit-animation-duration: 3s;
3613
+ animation-duration: 3s;
3614
+ }
3615
+
3616
+ @media (print), (prefers-reduced-motion) {
3617
+ .animated {
3618
+ -webkit-animation: unset !important;
3619
+ animation: unset !important;
3620
+ -webkit-transition: none !important;
3621
+ transition: none !important;
3622
+ }
3623
  }
css/animate.min.css CHANGED
@@ -1,6 +1,11 @@
1
- @charset "UTF-8";/*!
2
- Animate.css - http://daneden.me/animate
3
- Licensed under the MIT license - http://opensource.org/licenses/MIT
4
 
5
- Copyright (c) 2014 Daniel Eden
6
- */.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{-webkit-transform:translateY(-100%);transform:translateY(-100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{-webkit-transform:translateX(-100%);transform:translateX(-100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translateX(100%);transform:translateX(100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{-webkit-transform:translateX(100%);transform:translateX(100%);visibility:visible}100%{-webkit-transform:translateX(0);transform:translateX(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translateY(100%);transform:translateY(100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInUp{0%{-webkit-transform:translateY(100%);transform:translateY(100%);visibility:visible}100%{-webkit-transform:translateY(0);transform:translateY(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}}@keyframes slideOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(100%);transform:translateY(100%)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(-100%);transform:translateX(-100%)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{visibility:hidden;-webkit-transform:translateX(100%);transform:translateX(100%)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{visibility:hidden;-webkit-transform:translateY(-100%);transform:translateY(-100%)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}
 
 
 
 
 
 
 
1
+ @charset "UTF-8";
 
 
2
 
3
+ /*!
4
+ * animate.css -http://daneden.me/animate
5
+ * Version - 3.7.0
6
+ * Licensed under the MIT license - http://opensource.org/licenses/MIT
7
+ *
8
+ * Copyright (c) 2018 Daniel Eden
9
+ */
10
+
11
+ @-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);animation-timing-function:cubic-bezier(.215,.61,.355,1);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);animation-timing-function:cubic-bezier(.755,.05,.855,.06);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;-webkit-transform-origin:center bottom;animation-name:bounce;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-name:headShake;-webkit-animation-timing-function:ease-in-out;animation-name:headShake;animation-timing-function:ease-in-out}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-animation-name:swing;-webkit-transform-origin:top center;animation-name:swing;transform-origin:top center}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;-webkit-transform-origin:center;animation-name:jello;transform-origin:center}@-webkit-keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes heartBeat{0%{-webkit-transform:scale(1);transform:scale(1)}14%{-webkit-transform:scale(1.3);transform:scale(1.3)}28%{-webkit-transform:scale(1);transform:scale(1)}42%{-webkit-transform:scale(1.3);transform:scale(1.3)}70%{-webkit-transform:scale(1);transform:scale(1)}}.heartBeat{-webkit-animation-duration:1.3s;-webkit-animation-name:heartBeat;-webkit-animation-timing-function:ease-in-out;animation-duration:1.3s;animation-name:heartBeat;animation-timing-function:ease-in-out}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{-webkit-transform:scale3d(1.03,1.03,1.03);opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{-webkit-transform:scaleX(1);opacity:1;transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{-webkit-transform:scale3d(1.03,1.03,1.03);opacity:1;transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{-webkit-transform:scaleX(1);opacity:1;transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;-webkit-animation-name:bounceIn;animation-duration:.75s;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,-3000px,0);opacity:0;transform:translate3d(0,-3000px,0)}60%{-webkit-transform:translate3d(0,25px,0);opacity:1;transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,-3000px,0);opacity:0;transform:translate3d(0,-3000px,0)}60%{-webkit-transform:translate3d(0,25px,0);opacity:1;transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(-3000px,0,0);opacity:0;transform:translate3d(-3000px,0,0)}60%{-webkit-transform:translate3d(25px,0,0);opacity:1;transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(-3000px,0,0);opacity:0;transform:translate3d(-3000px,0,0)}60%{-webkit-transform:translate3d(25px,0,0);opacity:1;transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(3000px,0,0);opacity:0;transform:translate3d(3000px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);opacity:1;transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(3000px,0,0);opacity:0;transform:translate3d(3000px,0,0)}60%{-webkit-transform:translate3d(-25px,0,0);opacity:1;transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,3000px,0);opacity:0;transform:translate3d(0,3000px,0)}60%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{-webkit-transform:translate3d(0,3000px,0);opacity:0;transform:translate3d(0,3000px,0)}60%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{-webkit-transform:scale3d(1.1,1.1,1.1);opacity:1;transform:scale3d(1.1,1.1,1.1)}to{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{-webkit-transform:scale3d(1.1,1.1,1.1);opacity:1;transform:scale3d(1.1,1.1,1.1)}to{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;-webkit-animation-name:bounceOut;animation-duration:.75s;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{-webkit-transform:translate3d(0,-20px,0);opacity:1;transform:translate3d(0,-20px,0)}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{-webkit-transform:translate3d(20px,0,0);opacity:1;transform:translate3d(20px,0,0)}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{-webkit-transform:translate3d(20px,0,0);opacity:1;transform:translate3d(20px,0,0)}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{-webkit-transform:translate3d(-20px,0,0);opacity:1;transform:translate3d(-20px,0,0)}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{-webkit-transform:translate3d(-20px,0,0);opacity:1;transform:translate3d(-20px,0,0)}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{-webkit-transform:translate3d(0,20px,0);opacity:1;transform:translate3d(0,20px,0)}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{-webkit-transform:translate3d(0,20px,0);opacity:1;transform:translate3d(0,20px,0)}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInDown{0%{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInDownBig{0%{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInLeft{0%{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInRight{0%{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInRightBig{0%{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInUp{0%{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes fadeInUpBig{0%{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{-webkit-transform:translate3d(0,100%,0);opacity:0;transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{-webkit-transform:translate3d(0,2000px,0);opacity:0;transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{-webkit-transform:translate3d(-100%,0,0);opacity:0;transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{-webkit-transform:translate3d(-2000px,0,0);opacity:0;transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0);opacity:0;transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{-webkit-transform:translate3d(2000px,0,0);opacity:0;transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{-webkit-transform:translate3d(0,-100%,0);opacity:0;transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{-webkit-transform:translate3d(0,-2000px,0);opacity:0;transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg)}to{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg)}}@keyframes flip{0%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(-1turn)}40%{-webkit-animation-timing-function:ease-out;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg);animation-timing-function:ease-out;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-190deg)}50%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(150px) rotateY(-170deg)}80%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scale3d(.95,.95,.95) translateZ(0) rotateY(0deg)}to{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg);animation-timing-function:ease-in;transform:perspective(400px) scaleX(1) translateZ(0) rotateY(0deg)}}.animated.flip{-webkit-animation-name:flip;-webkit-backface-visibility:visible;animation-name:flip;backface-visibility:visible}@-webkit-keyframes flipInX{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{-webkit-transform:perspective(400px) rotateX(10deg);opacity:1;transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateX(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateX(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateX(-20deg)}60%{-webkit-transform:perspective(400px) rotateX(10deg);opacity:1;transform:perspective(400px) rotateX(10deg)}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-animation-name:flipInX;-webkit-backface-visibility:visible!important;animation-name:flipInX;backface-visibility:visible!important}@-webkit-keyframes flipInY{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{-webkit-transform:perspective(400px) rotateY(10deg);opacity:1;transform:perspective(400px) rotateY(10deg)}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(90deg);animation-timing-function:ease-in;opacity:0;transform:perspective(400px) rotateY(90deg)}40%{-webkit-animation-timing-function:ease-in;-webkit-transform:perspective(400px) rotateY(-20deg);animation-timing-function:ease-in;transform:perspective(400px) rotateY(-20deg)}60%{-webkit-transform:perspective(400px) rotateY(10deg);opacity:1;transform:perspective(400px) rotateY(10deg)}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-animation-name:flipInY;-webkit-backface-visibility:visible!important;animation-name:flipInY;backface-visibility:visible!important}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);opacity:1;transform:perspective(400px) rotateX(-20deg)}to{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0;transform:perspective(400px) rotateX(90deg)}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);opacity:1;transform:perspective(400px) rotateX(-20deg)}to{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0;transform:perspective(400px) rotateX(90deg)}}.flipOutX{-webkit-animation-duration:.75s;-webkit-animation-name:flipOutX;-webkit-backface-visibility:visible!important;animation-duration:.75s;animation-name:flipOutX;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);opacity:1;transform:perspective(400px) rotateY(-15deg)}to{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0;transform:perspective(400px) rotateY(90deg)}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);opacity:1;transform:perspective(400px) rotateY(-15deg)}to{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0;transform:perspective(400px) rotateY(90deg)}}.flipOutY{-webkit-animation-duration:.75s;-webkit-animation-name:flipOutY;-webkit-backface-visibility:visible!important;animation-duration:.75s;animation-name:flipOutY;backface-visibility:visible!important}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{-webkit-transform:skewX(20deg);opacity:1;transform:skewX(20deg)}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);opacity:0;transform:translate3d(100%,0,0) skewX(-30deg)}60%{-webkit-transform:skewX(20deg);opacity:1;transform:skewX(20deg)}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-name:lightSpeedIn;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);opacity:0;transform:translate3d(100%,0,0) skewX(30deg)}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-name:lightSpeedOut;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(-200deg);transform-origin:center}to{-webkit-transform:translateZ(0);-webkit-transform-origin:center;opacity:1;transform:translateZ(0);transform-origin:center}}@keyframes rotateIn{0%{-webkit-transform:rotate(-200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(-200deg);transform-origin:center}to{-webkit-transform:translateZ(0);-webkit-transform-origin:center;opacity:1;transform:translateZ(0);transform-origin:center}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}@keyframes rotateInDownLeft{0%{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(45deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}@keyframes rotateInDownRight{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(45deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}@keyframes rotateInUpLeft{0%{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:left bottom;opacity:1;transform:translateZ(0);transform-origin:left bottom}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-90deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}@keyframes rotateInUpRight{0%{-webkit-transform:rotate(-90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-90deg);transform-origin:right bottom}to{-webkit-transform:translateZ(0);-webkit-transform-origin:right bottom;opacity:1;transform:translateZ(0);transform-origin:right bottom}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;opacity:1;transform-origin:center}to{-webkit-transform:rotate(200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(200deg);transform-origin:center}}@keyframes rotateOut{0%{-webkit-transform-origin:center;opacity:1;transform-origin:center}to{-webkit-transform:rotate(200deg);-webkit-transform-origin:center;opacity:0;transform:rotate(200deg);transform-origin:center}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(45deg);transform-origin:left bottom}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-45deg);transform-origin:right bottom}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(-45deg);transform-origin:right bottom}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;opacity:1;transform-origin:left bottom}to{-webkit-transform:rotate(-45deg);-webkit-transform-origin:left bottom;opacity:0;transform:rotate(-45deg);transform-origin:left bottom}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(90deg);transform-origin:right bottom}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;opacity:1;transform-origin:right bottom}to{-webkit-transform:rotate(90deg);-webkit-transform-origin:right bottom;opacity:0;transform:rotate(90deg);transform-origin:right bottom}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform-origin:top left}20%,60%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(80deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform:rotate(80deg);transform-origin:top left}40%,80%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(60deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg);transform-origin:top left}to{-webkit-transform:translate3d(0,700px,0);opacity:0;transform:translate3d(0,700px,0)}}@keyframes hinge{0%{-webkit-animation-timing-function:ease-in-out;-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform-origin:top left}20%,60%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(80deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;transform:rotate(80deg);transform-origin:top left}40%,80%{-webkit-animation-timing-function:ease-in-out;-webkit-transform:rotate(60deg);-webkit-transform-origin:top left;animation-timing-function:ease-in-out;opacity:1;transform:rotate(60deg);transform-origin:top left}to{-webkit-transform:translate3d(0,700px,0);opacity:0;transform:translate3d(0,700px,0)}}.hinge{-webkit-animation-duration:2s;-webkit-animation-name:hinge;animation-duration:2s;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{-webkit-transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{-webkit-transform:scale(1);opacity:1;transform:scale(1)}}@keyframes jackInTheBox{0%{-webkit-transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;opacity:0;transform:scale(.1) rotate(30deg);transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{-webkit-transform:scale(1);opacity:1;transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}@keyframes rollIn{0%{-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);opacity:0;transform:translate3d(-100%,0,0) rotate(-120deg)}to{-webkit-transform:translateZ(0);opacity:1;transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) rotate(120deg);opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) rotate(120deg);opacity:0;transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}@keyframes zoomInDown{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}@keyframes zoomInLeft{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(10px,0,0)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}@keyframes zoomInRight{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(1000px,0,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-10px,0,0)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}@keyframes zoomInUp{0%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,1000px,0)}60%{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{-webkit-transform:scale3d(.3,.3,.3);opacity:0;transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom}}@keyframes zoomOutDown{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,-60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform-origin:center bottom}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{-webkit-transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}@keyframes zoomOutLeft{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{-webkit-transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;opacity:0;transform:scale(.1) translate3d(-2000px,0,0);transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{-webkit-transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}@keyframes zoomOutRight{40%{-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);opacity:1;transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{-webkit-transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;opacity:0;transform:scale(.1) translate3d(2000px,0,0);transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom}}@keyframes zoomOutUp{40%{-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);animation-timing-function:cubic-bezier(.55,.055,.675,.19);opacity:1;transform:scale3d(.475,.475,.475) translate3d(0,60px,0)}to{-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;animation-timing-function:cubic-bezier(.175,.885,.32,1);opacity:0;transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform-origin:center bottom}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:hidden}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:hidden}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:hidden}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:hidden}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:hidden}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:hidden}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:hidden}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}.animated{-webkit-animation-duration:1s;-webkit-animation-fill-mode:both;animation-duration:1s;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.delay-1s{-webkit-animation-delay:1s;animation-delay:1s}.animated.delay-2s{-webkit-animation-delay:2s;animation-delay:2s}.animated.delay-3s{-webkit-animation-delay:3s;animation-delay:3s}.animated.delay-4s{-webkit-animation-delay:4s;animation-delay:4s}.animated.delay-5s{-webkit-animation-delay:5s;animation-delay:5s}.animated.fast{-webkit-animation-duration:.8s;animation-duration:.8s}.animated.faster{-webkit-animation-duration:.5s;animation-duration:.5s}.animated.slow{-webkit-animation-duration:2s;animation-duration:2s}.animated.slower{-webkit-animation-duration:3s;animation-duration:3s}@media (prefers-reduced-motion),(print){.animated{-webkit-animation:unset!important;-webkit-transition:none!important;animation:unset!important;transition:none!important}}
css/chosen/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
css/chosen/chosen-sprite.png CHANGED
File without changes
css/chosen/chosen-sprite@2x.png CHANGED
File without changes
css/chosen/chosen.css CHANGED
@@ -2,9 +2,9 @@
2
  Chosen, a Select Box Enhancer for jQuery and Prototype
3
  by Patrick Filler for Harvest, http://getharvest.com
4
 
5
- Version 1.3.0
6
  Full source at https://github.com/harvesthq/chosen
7
- Copyright (c) 2011-2014 Harvest http://getharvest.com
8
 
9
  MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
  This file is generated by `grunt build`, do not edit it by hand.
@@ -16,35 +16,57 @@ This file is generated by `grunt build`, do not edit it by hand.
16
  display: inline-block;
17
  vertical-align: middle;
18
  font-size: 13px;
19
- zoom: 1;
20
- *display: inline;
21
  -webkit-user-select: none;
22
- -moz-user-select: none;
23
- user-select: none;
 
24
  }
 
25
  .chosen-container * {
26
  -webkit-box-sizing: border-box;
27
- -moz-box-sizing: border-box;
28
- box-sizing: border-box;
29
  }
 
30
  .chosen-container .chosen-drop {
31
  position: absolute;
32
  top: 100%;
33
- left: -9999px;
34
  z-index: 1010;
35
  width: 100%;
36
  border: 1px solid #aaa;
37
  border-top: 0;
38
  background: #fff;
39
- box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
 
 
 
 
40
  }
 
41
  .chosen-container.chosen-with-drop .chosen-drop {
42
- left: 0;
 
 
43
  }
 
44
  .chosen-container a {
45
  cursor: pointer;
46
  }
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  /* @end */
49
  /* @group Single Chosen */
50
  .chosen-container-single .chosen-single {
@@ -56,21 +78,21 @@ This file is generated by `grunt build`, do not edit it by hand.
56
  border: 1px solid #aaa;
57
  border-radius: 5px;
58
  background-color: #fff;
59
- background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));
60
- background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
61
- background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
62
- background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
63
- background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);
64
  background-clip: padding-box;
65
- box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);
 
66
  color: #444;
67
  text-decoration: none;
68
  white-space: nowrap;
69
  line-height: 24px;
70
  }
 
71
  .chosen-container-single .chosen-default {
72
  color: #999;
73
  }
 
74
  .chosen-container-single .chosen-single span {
75
  display: block;
76
  overflow: hidden;
@@ -78,9 +100,11 @@ This file is generated by `grunt build`, do not edit it by hand.
78
  text-overflow: ellipsis;
79
  white-space: nowrap;
80
  }
 
81
  .chosen-container-single .chosen-single-with-deselect span {
82
  margin-right: 38px;
83
  }
 
84
  .chosen-container-single .chosen-single abbr {
85
  position: absolute;
86
  top: 6px;
@@ -88,15 +112,18 @@ This file is generated by `grunt build`, do not edit it by hand.
88
  display: block;
89
  width: 12px;
90
  height: 12px;
91
- background: url('chosen-sprite.png') -42px 1px no-repeat;
92
  font-size: 1px;
93
  }
 
94
  .chosen-container-single .chosen-single abbr:hover {
95
  background-position: -42px -10px;
96
  }
 
97
  .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
98
  background-position: -42px -10px;
99
  }
 
100
  .chosen-container-single .chosen-single div {
101
  position: absolute;
102
  top: 0;
@@ -105,12 +132,14 @@ This file is generated by `grunt build`, do not edit it by hand.
105
  width: 18px;
106
  height: 100%;
107
  }
 
108
  .chosen-container-single .chosen-single div b {
109
  display: block;
110
  width: 100%;
111
  height: 100%;
112
- background: url('chosen-sprite.png') no-repeat 0px 2px;
113
  }
 
114
  .chosen-container-single .chosen-search {
115
  position: relative;
116
  z-index: 1010;
@@ -118,6 +147,7 @@ This file is generated by `grunt build`, do not edit it by hand.
118
  padding: 3px 4px;
119
  white-space: nowrap;
120
  }
 
121
  .chosen-container-single .chosen-search input[type="text"] {
122
  margin: 1px 0;
123
  padding: 4px 20px 4px 5px;
@@ -125,21 +155,24 @@ This file is generated by `grunt build`, do not edit it by hand.
125
  height: auto;
126
  outline: 0;
127
  border: 1px solid #aaa;
128
- background: white url('chosen-sprite.png') no-repeat 100% -20px;
129
- background: url('chosen-sprite.png') no-repeat 100% -20px;
130
  font-size: 1em;
131
  font-family: sans-serif;
132
  line-height: normal;
133
  border-radius: 0;
134
  }
 
135
  .chosen-container-single .chosen-drop {
136
  margin-top: -1px;
137
  border-radius: 0 0 4px 4px;
138
  background-clip: padding-box;
139
  }
 
140
  .chosen-container-single.chosen-container-single-nosearch .chosen-search {
141
  position: absolute;
142
- left: -9999px;
 
 
143
  }
144
 
145
  /* @end */
@@ -154,6 +187,7 @@ This file is generated by `grunt build`, do not edit it by hand.
154
  max-height: 240px;
155
  -webkit-overflow-scrolling: touch;
156
  }
 
157
  .chosen-container .chosen-results li {
158
  display: none;
159
  margin: 0;
@@ -163,37 +197,41 @@ This file is generated by `grunt build`, do not edit it by hand.
163
  word-wrap: break-word;
164
  -webkit-touch-callout: none;
165
  }
 
166
  .chosen-container .chosen-results li.active-result {
167
  display: list-item;
168
  cursor: pointer;
169
  }
 
170
  .chosen-container .chosen-results li.disabled-result {
171
  display: list-item;
172
  color: #ccc;
173
  cursor: default;
174
  }
 
175
  .chosen-container .chosen-results li.highlighted {
176
  background-color: #3875d7;
177
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
178
- background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);
179
- background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);
180
- background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);
181
  background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
182
  color: #fff;
183
  }
 
184
  .chosen-container .chosen-results li.no-results {
185
  color: #777;
186
  display: list-item;
187
  background: #f4f4f4;
188
  }
 
189
  .chosen-container .chosen-results li.group-result {
190
  display: list-item;
191
  font-weight: bold;
192
  cursor: default;
193
  }
 
194
  .chosen-container .chosen-results li.group-option {
195
  padding-left: 15px;
196
  }
 
197
  .chosen-container .chosen-results li em {
198
  font-style: normal;
199
  text-decoration: underline;
@@ -207,26 +245,25 @@ This file is generated by `grunt build`, do not edit it by hand.
207
  margin: 0;
208
  padding: 0 5px;
209
  width: 100%;
210
- height: auto !important;
211
- height: 1%;
212
  border: 1px solid #aaa;
213
  background-color: #fff;
214
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));
215
- background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);
216
- background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);
217
- background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);
218
- background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);
219
  cursor: text;
220
  }
 
221
  .chosen-container-multi .chosen-choices li {
222
  float: left;
223
  list-style: none;
224
  }
 
225
  .chosen-container-multi .chosen-choices li.search-field {
226
  margin: 0;
227
  padding: 0;
228
  white-space: nowrap;
229
  }
 
230
  .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
231
  margin: 1px 0;
232
  padding: 0;
@@ -234,13 +271,16 @@ This file is generated by `grunt build`, do not edit it by hand.
234
  outline: 0;
235
  border: 0 !important;
236
  background: transparent !important;
237
- box-shadow: none;
 
238
  color: #999;
239
  font-size: 100%;
240
  font-family: sans-serif;
241
  line-height: normal;
242
  border-radius: 0;
 
243
  }
 
244
  .chosen-container-multi .chosen-choices li.search-choice {
245
  position: relative;
246
  margin: 3px 5px 3px 0;
@@ -249,22 +289,22 @@ This file is generated by `grunt build`, do not edit it by hand.
249
  max-width: 100%;
250
  border-radius: 3px;
251
  background-color: #eeeeee;
252
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
253
- background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
254
- background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
255
- background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
256
- background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
257
  background-size: 100% 19px;
258
  background-repeat: repeat-x;
259
  background-clip: padding-box;
260
- box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);
 
261
  color: #333;
262
  line-height: 13px;
263
  cursor: default;
264
  }
 
265
  .chosen-container-multi .chosen-choices li.search-choice span {
266
  word-wrap: break-word;
267
  }
 
268
  .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
269
  position: absolute;
270
  top: 4px;
@@ -272,33 +312,36 @@ This file is generated by `grunt build`, do not edit it by hand.
272
  display: block;
273
  width: 12px;
274
  height: 12px;
275
- background: url('chosen-sprite.png') -42px 1px no-repeat;
276
  font-size: 1px;
277
  }
 
278
  .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
279
  background-position: -42px -10px;
280
  }
 
281
  .chosen-container-multi .chosen-choices li.search-choice-disabled {
282
  padding-right: 5px;
283
  border: 1px solid #ccc;
284
  background-color: #e4e4e4;
285
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));
286
- background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
287
- background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
288
- background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
289
- background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);
290
  color: #666;
291
  }
 
292
  .chosen-container-multi .chosen-choices li.search-choice-focus {
293
  background: #d4d4d4;
294
  }
 
295
  .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
296
  background-position: -42px -10px;
297
  }
 
298
  .chosen-container-multi .chosen-results {
299
  margin: 0;
300
  padding: 0;
301
  }
 
302
  .chosen-container-multi .chosen-drop .result-selected {
303
  display: list-item;
304
  color: #ccc;
@@ -309,32 +352,35 @@ This file is generated by `grunt build`, do not edit it by hand.
309
  /* @group Active */
310
  .chosen-container-active .chosen-single {
311
  border: 1px solid #5897fb;
312
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
 
313
  }
 
314
  .chosen-container-active.chosen-with-drop .chosen-single {
315
  border: 1px solid #aaa;
316
- -moz-border-radius-bottomright: 0;
317
  border-bottom-right-radius: 0;
318
- -moz-border-radius-bottomleft: 0;
319
  border-bottom-left-radius: 0;
320
- background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));
321
- background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);
322
- background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);
323
- background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);
324
- background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);
325
- box-shadow: 0 1px 0 #fff inset;
326
  }
 
327
  .chosen-container-active.chosen-with-drop .chosen-single div {
328
  border-left: none;
329
  background: transparent;
330
  }
 
331
  .chosen-container-active.chosen-with-drop .chosen-single div b {
332
  background-position: -18px 2px;
333
  }
 
334
  .chosen-container-active .chosen-choices {
335
  border: 1px solid #5897fb;
336
- box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
 
337
  }
 
338
  .chosen-container-active .chosen-choices li.search-field input[type="text"] {
339
  color: #222 !important;
340
  }
@@ -345,9 +391,11 @@ This file is generated by `grunt build`, do not edit it by hand.
345
  opacity: 0.5 !important;
346
  cursor: default;
347
  }
 
348
  .chosen-disabled .chosen-single {
349
  cursor: default;
350
  }
 
351
  .chosen-disabled .chosen-choices .search-choice .search-choice-close {
352
  cursor: default;
353
  }
@@ -357,71 +405,81 @@ This file is generated by `grunt build`, do not edit it by hand.
357
  .chosen-rtl {
358
  text-align: right;
359
  }
 
360
  .chosen-rtl .chosen-single {
361
  overflow: visible;
362
  padding: 0 8px 0 0;
363
  }
 
364
  .chosen-rtl .chosen-single span {
365
  margin-right: 0;
366
  margin-left: 26px;
367
  direction: rtl;
368
  }
 
369
  .chosen-rtl .chosen-single-with-deselect span {
370
  margin-left: 38px;
371
  }
 
372
  .chosen-rtl .chosen-single div {
373
  right: auto;
374
  left: 3px;
375
  }
 
376
  .chosen-rtl .chosen-single abbr {
377
  right: auto;
378
  left: 26px;
379
  }
 
380
  .chosen-rtl .chosen-choices li {
381
  float: right;
382
  }
 
383
  .chosen-rtl .chosen-choices li.search-field input[type="text"] {
384
  direction: rtl;
385
  }
 
386
  .chosen-rtl .chosen-choices li.search-choice {
387
  margin: 3px 5px 3px 0;
388
  padding: 3px 5px 3px 19px;
389
  }
 
390
  .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
391
  right: auto;
392
  left: 4px;
393
  }
394
- .chosen-rtl.chosen-container-single-nosearch .chosen-search,
395
- .chosen-rtl .chosen-drop {
396
- left: 9999px;
397
- }
398
  .chosen-rtl.chosen-container-single .chosen-results {
399
  margin: 0 0 4px 4px;
400
  padding: 0 4px 0 0;
401
  }
 
402
  .chosen-rtl .chosen-results li.group-option {
403
  padding-right: 15px;
404
  padding-left: 0;
405
  }
 
406
  .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
407
  border-right: none;
408
  }
 
409
  .chosen-rtl .chosen-search input[type="text"] {
410
  padding: 4px 5px 4px 20px;
411
- background: white url('chosen-sprite.png') no-repeat -30px -20px;
412
- background: url('chosen-sprite.png') no-repeat -30px -20px;
413
  direction: rtl;
414
  }
 
415
  .chosen-rtl.chosen-container-single .chosen-single div b {
416
  background-position: 6px 2px;
417
  }
 
418
  .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
419
  background-position: -12px 2px;
420
  }
421
 
422
  /* @end */
423
  /* @group Retina compatibility */
424
- @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {
425
  .chosen-rtl .chosen-search input[type="text"],
426
  .chosen-container-single .chosen-single abbr,
427
  .chosen-container-single .chosen-single div b,
@@ -429,9 +487,10 @@ This file is generated by `grunt build`, do not edit it by hand.
429
  .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
430
  .chosen-container .chosen-results-scroll-down span,
431
  .chosen-container .chosen-results-scroll-up span {
432
- background-image: url('chosen-sprite@2x.png') !important;
433
  background-size: 52px 37px !important;
434
  background-repeat: no-repeat !important;
435
  }
436
  }
 
437
  /* @end */
2
  Chosen, a Select Box Enhancer for jQuery and Prototype
3
  by Patrick Filler for Harvest, http://getharvest.com
4
 
5
+ Version 1.8.7
6
  Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011-2018 Harvest http://getharvest.com
8
 
9
  MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
  This file is generated by `grunt build`, do not edit it by hand.
16
  display: inline-block;
17
  vertical-align: middle;
18
  font-size: 13px;
 
 
19
  -webkit-user-select: none;
20
+ -moz-user-select: none;
21
+ -ms-user-select: none;
22
+ user-select: none;
23
  }
24
+
25
  .chosen-container * {
26
  -webkit-box-sizing: border-box;
27
+ box-sizing: border-box;
 
28
  }
29
+
30
  .chosen-container .chosen-drop {
31
  position: absolute;
32
  top: 100%;
 
33
  z-index: 1010;
34
  width: 100%;
35
  border: 1px solid #aaa;
36
  border-top: 0;
37
  background: #fff;
38
+ -webkit-box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
39
+ box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);
40
+ clip: rect(0, 0, 0, 0);
41
+ -webkit-clip-path: inset(100% 100%);
42
+ clip-path: inset(100% 100%);
43
  }
44
+
45
  .chosen-container.chosen-with-drop .chosen-drop {
46
+ clip: auto;
47
+ -webkit-clip-path: none;
48
+ clip-path: none;
49
  }
50
+
51
  .chosen-container a {
52
  cursor: pointer;
53
  }
54
 
55
+ .chosen-container .search-choice .group-name, .chosen-container .chosen-single .group-name {
56
+ margin-right: 4px;
57
+ overflow: hidden;
58
+ white-space: nowrap;
59
+ text-overflow: ellipsis;
60
+ font-weight: normal;
61
+ color: #999999;
62
+ }
63
+
64
+ .chosen-container .search-choice .group-name:after, .chosen-container .chosen-single .group-name:after {
65
+ content: ":";
66
+ padding-left: 2px;
67
+ vertical-align: top;
68
+ }
69
+
70
  /* @end */
71
  /* @group Single Chosen */
72
  .chosen-container-single .chosen-single {
78
  border: 1px solid #aaa;
79
  border-radius: 5px;
80
  background-color: #fff;
81
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #fff), color-stop(50%, #f6f6f6), color-stop(52%, #eee), to(#f4f4f4));
82
+ background: linear-gradient(#fff 20%, #f6f6f6 50%, #eee 52%, #f4f4f4 100%);
 
 
 
83
  background-clip: padding-box;
84
+ -webkit-box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
85
+ box-shadow: 0 0 3px #fff inset, 0 1px 1px rgba(0, 0, 0, 0.1);
86
  color: #444;
87
  text-decoration: none;
88
  white-space: nowrap;
89
  line-height: 24px;
90
  }
91
+
92
  .chosen-container-single .chosen-default {
93
  color: #999;
94
  }
95
+
96
  .chosen-container-single .chosen-single span {
97
  display: block;
98
  overflow: hidden;
100
  text-overflow: ellipsis;
101
  white-space: nowrap;
102
  }
103
+
104
  .chosen-container-single .chosen-single-with-deselect span {
105
  margin-right: 38px;
106
  }
107
+
108
  .chosen-container-single .chosen-single abbr {
109
  position: absolute;
110
  top: 6px;
112
  display: block;
113
  width: 12px;
114
  height: 12px;
115
+ background: url("chosen-sprite.png") -42px 1px no-repeat;
116
  font-size: 1px;
117
  }
118
+
119
  .chosen-container-single .chosen-single abbr:hover {
120
  background-position: -42px -10px;
121
  }
122
+
123
  .chosen-container-single.chosen-disabled .chosen-single abbr:hover {
124
  background-position: -42px -10px;
125
  }
126
+
127
  .chosen-container-single .chosen-single div {
128
  position: absolute;
129
  top: 0;
132
  width: 18px;
133
  height: 100%;
134
  }
135
+
136
  .chosen-container-single .chosen-single div b {
137
  display: block;
138
  width: 100%;
139
  height: 100%;
140
+ background: url("chosen-sprite.png") no-repeat 0px 2px;
141
  }
142
+
143
  .chosen-container-single .chosen-search {
144
  position: relative;
145
  z-index: 1010;
147
  padding: 3px 4px;
148
  white-space: nowrap;
149
  }
150
+
151
  .chosen-container-single .chosen-search input[type="text"] {
152
  margin: 1px 0;
153
  padding: 4px 20px 4px 5px;
155
  height: auto;
156
  outline: 0;
157
  border: 1px solid #aaa;
158
+ background: url("chosen-sprite.png") no-repeat 100% -20px;
 
159
  font-size: 1em;
160
  font-family: sans-serif;
161
  line-height: normal;
162
  border-radius: 0;
163
  }
164
+
165
  .chosen-container-single .chosen-drop {
166
  margin-top: -1px;
167
  border-radius: 0 0 4px 4px;
168
  background-clip: padding-box;
169
  }
170
+
171
  .chosen-container-single.chosen-container-single-nosearch .chosen-search {
172
  position: absolute;
173
+ clip: rect(0, 0, 0, 0);
174
+ -webkit-clip-path: inset(100% 100%);
175
+ clip-path: inset(100% 100%);
176
  }
177
 
178
  /* @end */
187
  max-height: 240px;
188
  -webkit-overflow-scrolling: touch;
189
  }
190
+
191
  .chosen-container .chosen-results li {
192
  display: none;
193
  margin: 0;
197
  word-wrap: break-word;
198
  -webkit-touch-callout: none;
199
  }
200
+
201
  .chosen-container .chosen-results li.active-result {
202
  display: list-item;
203
  cursor: pointer;
204
  }
205
+
206
  .chosen-container .chosen-results li.disabled-result {
207
  display: list-item;
208
  color: #ccc;
209
  cursor: default;
210
  }
211
+
212
  .chosen-container .chosen-results li.highlighted {
213
  background-color: #3875d7;
214
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));
 
 
 
215
  background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);
216
  color: #fff;
217
  }
218
+
219
  .chosen-container .chosen-results li.no-results {
220
  color: #777;
221
  display: list-item;
222
  background: #f4f4f4;
223
  }
224
+
225
  .chosen-container .chosen-results li.group-result {
226
  display: list-item;
227
  font-weight: bold;
228
  cursor: default;
229
  }
230
+
231
  .chosen-container .chosen-results li.group-option {
232
  padding-left: 15px;
233
  }
234
+
235
  .chosen-container .chosen-results li em {
236
  font-style: normal;
237
  text-decoration: underline;
245
  margin: 0;
246
  padding: 0 5px;
247
  width: 100%;
248
+ height: auto;
 
249
  border: 1px solid #aaa;
250
  background-color: #fff;
251
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(1%, #eee), color-stop(15%, #fff));
252
+ background-image: linear-gradient(#eee 1%, #fff 15%);
 
 
 
253
  cursor: text;
254
  }
255
+
256
  .chosen-container-multi .chosen-choices li {
257
  float: left;
258
  list-style: none;
259
  }
260
+
261
  .chosen-container-multi .chosen-choices li.search-field {
262
  margin: 0;
263
  padding: 0;
264
  white-space: nowrap;
265
  }
266
+
267
  .chosen-container-multi .chosen-choices li.search-field input[type="text"] {
268
  margin: 1px 0;
269
  padding: 0;
271
  outline: 0;
272
  border: 0 !important;
273
  background: transparent !important;
274
+ -webkit-box-shadow: none;
275
+ box-shadow: none;
276
  color: #999;
277
  font-size: 100%;
278
  font-family: sans-serif;
279
  line-height: normal;
280
  border-radius: 0;
281
+ width: 25px;
282
  }
283
+
284
  .chosen-container-multi .chosen-choices li.search-choice {
285
  position: relative;
286
  margin: 3px 5px 3px 0;
289
  max-width: 100%;
290
  border-radius: 3px;
291
  background-color: #eeeeee;
292
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), to(#eee));
293
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
 
 
 
294
  background-size: 100% 19px;
295
  background-repeat: repeat-x;
296
  background-clip: padding-box;
297
+ -webkit-box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
298
+ box-shadow: 0 0 2px #fff inset, 0 1px 0 rgba(0, 0, 0, 0.05);
299
  color: #333;
300
  line-height: 13px;
301
  cursor: default;
302
  }
303
+
304
  .chosen-container-multi .chosen-choices li.search-choice span {
305
  word-wrap: break-word;
306
  }
307
+
308
  .chosen-container-multi .chosen-choices li.search-choice .search-choice-close {
309
  position: absolute;
310
  top: 4px;
312
  display: block;
313
  width: 12px;
314
  height: 12px;
315
+ background: url("chosen-sprite.png") -42px 1px no-repeat;
316
  font-size: 1px;
317
  }
318
+
319
  .chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {
320
  background-position: -42px -10px;
321
  }
322
+
323
  .chosen-container-multi .chosen-choices li.search-choice-disabled {
324
  padding-right: 5px;
325
  border: 1px solid #ccc;
326
  background-color: #e4e4e4;
327
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), to(#eee));
328
+ background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eee 100%);
 
 
 
329
  color: #666;
330
  }
331
+
332
  .chosen-container-multi .chosen-choices li.search-choice-focus {
333
  background: #d4d4d4;
334
  }
335
+
336
  .chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {
337
  background-position: -42px -10px;
338
  }
339
+
340
  .chosen-container-multi .chosen-results {
341
  margin: 0;
342
  padding: 0;
343
  }
344
+
345
  .chosen-container-multi .chosen-drop .result-selected {
346
  display: list-item;
347
  color: #ccc;
352
  /* @group Active */
353
  .chosen-container-active .chosen-single {
354
  border: 1px solid #5897fb;
355
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
356
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
357
  }
358
+
359
  .chosen-container-active.chosen-with-drop .chosen-single {
360
  border: 1px solid #aaa;
 
361
  border-bottom-right-radius: 0;
 
362
  border-bottom-left-radius: 0;
363
+ background-image: -webkit-gradient(linear, left top, left bottom, color-stop(20%, #eee), color-stop(80%, #fff));
364
+ background-image: linear-gradient(#eee 20%, #fff 80%);
365
+ -webkit-box-shadow: 0 1px 0 #fff inset;
366
+ box-shadow: 0 1px 0 #fff inset;
 
 
367
  }
368
+
369
  .chosen-container-active.chosen-with-drop .chosen-single div {
370
  border-left: none;
371
  background: transparent;
372
  }
373
+
374
  .chosen-container-active.chosen-with-drop .chosen-single div b {
375
  background-position: -18px 2px;
376
  }
377
+
378
  .chosen-container-active .chosen-choices {
379
  border: 1px solid #5897fb;
380
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
381
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
382
  }
383
+
384
  .chosen-container-active .chosen-choices li.search-field input[type="text"] {
385
  color: #222 !important;
386
  }
391
  opacity: 0.5 !important;
392
  cursor: default;
393
  }
394
+
395
  .chosen-disabled .chosen-single {
396
  cursor: default;
397
  }
398
+
399
  .chosen-disabled .chosen-choices .search-choice .search-choice-close {
400
  cursor: default;
401
  }
405
  .chosen-rtl {
406
  text-align: right;
407
  }
408
+
409
  .chosen-rtl .chosen-single {
410
  overflow: visible;
411
  padding: 0 8px 0 0;
412
  }
413
+
414
  .chosen-rtl .chosen-single span {
415
  margin-right: 0;
416
  margin-left: 26px;
417
  direction: rtl;
418
  }
419
+
420
  .chosen-rtl .chosen-single-with-deselect span {
421
  margin-left: 38px;
422
  }
423
+
424
  .chosen-rtl .chosen-single div {
425
  right: auto;
426
  left: 3px;
427
  }
428
+
429
  .chosen-rtl .chosen-single abbr {
430
  right: auto;
431
  left: 26px;
432
  }
433
+
434
  .chosen-rtl .chosen-choices li {
435
  float: right;
436
  }
437
+
438
  .chosen-rtl .chosen-choices li.search-field input[type="text"] {
439
  direction: rtl;
440
  }
441
+
442
  .chosen-rtl .chosen-choices li.search-choice {
443
  margin: 3px 5px 3px 0;
444
  padding: 3px 5px 3px 19px;
445
  }
446
+
447
  .chosen-rtl .chosen-choices li.search-choice .search-choice-close {
448
  right: auto;
449
  left: 4px;
450
  }
451
+
 
 
 
452
  .chosen-rtl.chosen-container-single .chosen-results {
453
  margin: 0 0 4px 4px;
454
  padding: 0 4px 0 0;
455
  }
456
+
457
  .chosen-rtl .chosen-results li.group-option {
458
  padding-right: 15px;
459
  padding-left: 0;
460
  }
461
+
462
  .chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {
463
  border-right: none;
464
  }
465
+
466
  .chosen-rtl .chosen-search input[type="text"] {
467
  padding: 4px 5px 4px 20px;
468
+ background: url("chosen-sprite.png") no-repeat -30px -20px;
 
469
  direction: rtl;
470
  }
471
+
472
  .chosen-rtl.chosen-container-single .chosen-single div b {
473
  background-position: 6px 2px;
474
  }
475
+
476
  .chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {
477
  background-position: -12px 2px;
478
  }
479
 
480
  /* @end */
481
  /* @group Retina compatibility */
482
+ @media only screen and (-webkit-min-device-pixel-ratio: 1.5), only screen and (min-resolution: 144dpi), only screen and (min-resolution: 1.5dppx) {
483
  .chosen-rtl .chosen-search input[type="text"],
484
  .chosen-container-single .chosen-single abbr,
485
  .chosen-container-single .chosen-single div b,
487
  .chosen-container-multi .chosen-choices .search-choice .search-choice-close,
488
  .chosen-container .chosen-results-scroll-down span,
489
  .chosen-container .chosen-results-scroll-up span {
490
+ background-image: url("chosen-sprite@2x.png") !important;
491
  background-size: 52px 37px !important;
492
  background-repeat: no-repeat !important;
493
  }
494
  }
495
+
496
  /* @end */
css/chosen/chosen.min.css CHANGED
@@ -1,3 +1,11 @@
1
- /* Chosen v1.3.0 | (c) 2011-2014 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
 
 
2
 
3
- .chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;zoom:1;*display:inline;-webkit-user-select:none;-moz-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;left:-9999px;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;box-shadow:0 4px 5px rgba(0,0,0,.15)}.chosen-container.chosen-with-drop .chosen-drop{left:0}.chosen-container a{cursor:pointer}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),color-stop(100%,#f4f4f4));background:-webkit-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-moz-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:-o-linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background:linear-gradient(top,#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:#fff url(chosen-sprite.png) no-repeat 100% -20px;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;left:-9999px}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:-webkit-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-moz-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:-o-linear-gradient(#3875d7 20%,#2a62bc 90%);background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto!important;height:1%;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(1%,#eee),color-stop(15%,#fff));background-image:-webkit-linear-gradient(#eee 1%,#fff 15%);background-image:-moz-linear-gradient(#eee 1%,#fff 15%);background-image:-o-linear-gradient(#eee 1%,#fff 15%);background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:transparent!important;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),color-stop(100%,#eee));background-image:-webkit-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-moz-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:-o-linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-image:linear-gradient(top,#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;-moz-border-radius-bottomright:0;border-bottom-right-radius:0;-moz-border-radius-bottomleft:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,50% 0,50% 100%,color-stop(20%,#eee),color-stop(80%,#fff));background-image:-webkit-linear-gradient(#eee 20%,#fff 80%);background-image:-moz-linear-gradient(#eee 20%,#fff 80%);background-image:-o-linear-gradient(#eee 20%,#fff 80%);background-image:linear-gradient(#eee 20%,#fff 80%);box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:0;background:transparent}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single-nosearch .chosen-search,.chosen-rtl .chosen-drop{left:9999px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:0}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:#fff url(chosen-sprite.png) no-repeat -30px -20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min-resolution:144dpi){.chosen-rtl .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-container-single .chosen-search input[type=text],.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}
 
 
 
 
 
 
1
+ /*!
2
+ Chosen, a Select Box Enhancer for jQuery and Prototype
3
+ by Patrick Filler for Harvest, http://getharvest.com
4
 
5
+ Version 1.8.7
6
+ Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011-2018 Harvest http://getharvest.com
8
+
9
+ MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
+ This file is generated by `grunt build`, do not edit it by hand.
11
+ */.chosen-container{position:relative;display:inline-block;vertical-align:middle;font-size:13px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.chosen-container *{-webkit-box-sizing:border-box;box-sizing:border-box}.chosen-container .chosen-drop{position:absolute;top:100%;z-index:1010;width:100%;border:1px solid #aaa;border-top:0;background:#fff;-webkit-box-shadow:0 4px 5px rgba(0,0,0,.15);box-shadow:0 4px 5px rgba(0,0,0,.15);clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container.chosen-with-drop .chosen-drop{clip:auto;-webkit-clip-path:none;clip-path:none}.chosen-container a{cursor:pointer}.chosen-container .chosen-single .group-name,.chosen-container .search-choice .group-name{margin-right:4px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;font-weight:400;color:#999}.chosen-container .chosen-single .group-name:after,.chosen-container .search-choice .group-name:after{content:":";padding-left:2px;vertical-align:top}.chosen-container-single .chosen-single{position:relative;display:block;overflow:hidden;padding:0 0 0 8px;height:25px;border:1px solid #aaa;border-radius:5px;background-color:#fff;background:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#fff),color-stop(50%,#f6f6f6),color-stop(52%,#eee),to(#f4f4f4));background:linear-gradient(#fff 20%,#f6f6f6 50%,#eee 52%,#f4f4f4 100%);background-clip:padding-box;-webkit-box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);box-shadow:0 0 3px #fff inset,0 1px 1px rgba(0,0,0,.1);color:#444;text-decoration:none;white-space:nowrap;line-height:24px}.chosen-container-single .chosen-default{color:#999}.chosen-container-single .chosen-single span{display:block;overflow:hidden;margin-right:26px;text-overflow:ellipsis;white-space:nowrap}.chosen-container-single .chosen-single-with-deselect span{margin-right:38px}.chosen-container-single .chosen-single abbr{position:absolute;top:6px;right:26px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-single .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single.chosen-disabled .chosen-single abbr:hover{background-position:-42px -10px}.chosen-container-single .chosen-single div{position:absolute;top:0;right:0;display:block;width:18px;height:100%}.chosen-container-single .chosen-single div b{display:block;width:100%;height:100%;background:url(chosen-sprite.png) no-repeat 0 2px}.chosen-container-single .chosen-search{position:relative;z-index:1010;margin:0;padding:3px 4px;white-space:nowrap}.chosen-container-single .chosen-search input[type=text]{margin:1px 0;padding:4px 20px 4px 5px;width:100%;height:auto;outline:0;border:1px solid #aaa;background:url(chosen-sprite.png) no-repeat 100% -20px;font-size:1em;font-family:sans-serif;line-height:normal;border-radius:0}.chosen-container-single .chosen-drop{margin-top:-1px;border-radius:0 0 4px 4px;background-clip:padding-box}.chosen-container-single.chosen-container-single-nosearch .chosen-search{position:absolute;clip:rect(0,0,0,0);-webkit-clip-path:inset(100% 100%);clip-path:inset(100% 100%)}.chosen-container .chosen-results{color:#444;position:relative;overflow-x:hidden;overflow-y:auto;margin:0 4px 4px 0;padding:0 0 0 4px;max-height:240px;-webkit-overflow-scrolling:touch}.chosen-container .chosen-results li{display:none;margin:0;padding:5px 6px;list-style:none;line-height:15px;word-wrap:break-word;-webkit-touch-callout:none}.chosen-container .chosen-results li.active-result{display:list-item;cursor:pointer}.chosen-container .chosen-results li.disabled-result{display:list-item;color:#ccc;cursor:default}.chosen-container .chosen-results li.highlighted{background-color:#3875d7;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#3875d7),color-stop(90%,#2a62bc));background-image:linear-gradient(#3875d7 20%,#2a62bc 90%);color:#fff}.chosen-container .chosen-results li.no-results{color:#777;display:list-item;background:#f4f4f4}.chosen-container .chosen-results li.group-result{display:list-item;font-weight:700;cursor:default}.chosen-container .chosen-results li.group-option{padding-left:15px}.chosen-container .chosen-results li em{font-style:normal;text-decoration:underline}.chosen-container-multi .chosen-choices{position:relative;overflow:hidden;margin:0;padding:0 5px;width:100%;height:auto;border:1px solid #aaa;background-color:#fff;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(1%,#eee),color-stop(15%,#fff));background-image:linear-gradient(#eee 1%,#fff 15%);cursor:text}.chosen-container-multi .chosen-choices li{float:left;list-style:none}.chosen-container-multi .chosen-choices li.search-field{margin:0;padding:0;white-space:nowrap}.chosen-container-multi .chosen-choices li.search-field input[type=text]{margin:1px 0;padding:0;height:25px;outline:0;border:0!important;background:0 0!important;-webkit-box-shadow:none;box-shadow:none;color:#999;font-size:100%;font-family:sans-serif;line-height:normal;border-radius:0;width:25px}.chosen-container-multi .chosen-choices li.search-choice{position:relative;margin:3px 5px 3px 0;padding:3px 20px 3px 5px;border:1px solid #aaa;max-width:100%;border-radius:3px;background-color:#eee;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);background-size:100% 19px;background-repeat:repeat-x;background-clip:padding-box;-webkit-box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);box-shadow:0 0 2px #fff inset,0 1px 0 rgba(0,0,0,.05);color:#333;line-height:13px;cursor:default}.chosen-container-multi .chosen-choices li.search-choice span{word-wrap:break-word}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close{position:absolute;top:4px;right:3px;display:block;width:12px;height:12px;background:url(chosen-sprite.png) -42px 1px no-repeat;font-size:1px}.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover{background-position:-42px -10px}.chosen-container-multi .chosen-choices li.search-choice-disabled{padding-right:5px;border:1px solid #ccc;background-color:#e4e4e4;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#f4f4f4),color-stop(50%,#f0f0f0),color-stop(52%,#e8e8e8),to(#eee));background-image:linear-gradient(#f4f4f4 20%,#f0f0f0 50%,#e8e8e8 52%,#eee 100%);color:#666}.chosen-container-multi .chosen-choices li.search-choice-focus{background:#d4d4d4}.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close{background-position:-42px -10px}.chosen-container-multi .chosen-results{margin:0;padding:0}.chosen-container-multi .chosen-drop .result-selected{display:list-item;color:#ccc;cursor:default}.chosen-container-active .chosen-single{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active.chosen-with-drop .chosen-single{border:1px solid #aaa;border-bottom-right-radius:0;border-bottom-left-radius:0;background-image:-webkit-gradient(linear,left top,left bottom,color-stop(20%,#eee),color-stop(80%,#fff));background-image:linear-gradient(#eee 20%,#fff 80%);-webkit-box-shadow:0 1px 0 #fff inset;box-shadow:0 1px 0 #fff inset}.chosen-container-active.chosen-with-drop .chosen-single div{border-left:none;background:0 0}.chosen-container-active.chosen-with-drop .chosen-single div b{background-position:-18px 2px}.chosen-container-active .chosen-choices{border:1px solid #5897fb;-webkit-box-shadow:0 0 5px rgba(0,0,0,.3);box-shadow:0 0 5px rgba(0,0,0,.3)}.chosen-container-active .chosen-choices li.search-field input[type=text]{color:#222!important}.chosen-disabled{opacity:.5!important;cursor:default}.chosen-disabled .chosen-single{cursor:default}.chosen-disabled .chosen-choices .search-choice .search-choice-close{cursor:default}.chosen-rtl{text-align:right}.chosen-rtl .chosen-single{overflow:visible;padding:0 8px 0 0}.chosen-rtl .chosen-single span{margin-right:0;margin-left:26px;direction:rtl}.chosen-rtl .chosen-single-with-deselect span{margin-left:38px}.chosen-rtl .chosen-single div{right:auto;left:3px}.chosen-rtl .chosen-single abbr{right:auto;left:26px}.chosen-rtl .chosen-choices li{float:right}.chosen-rtl .chosen-choices li.search-field input[type=text]{direction:rtl}.chosen-rtl .chosen-choices li.search-choice{margin:3px 5px 3px 0;padding:3px 5px 3px 19px}.chosen-rtl .chosen-choices li.search-choice .search-choice-close{right:auto;left:4px}.chosen-rtl.chosen-container-single .chosen-results{margin:0 0 4px 4px;padding:0 4px 0 0}.chosen-rtl .chosen-results li.group-option{padding-right:15px;padding-left:0}.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div{border-right:none}.chosen-rtl .chosen-search input[type=text]{padding:4px 5px 4px 20px;background:url(chosen-sprite.png) no-repeat -30px -20px;direction:rtl}.chosen-rtl.chosen-container-single .chosen-single div b{background-position:6px 2px}.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b{background-position:-12px 2px}@media only screen and (-webkit-min-device-pixel-ratio:1.5),only screen and (min-resolution:144dpi),only screen and (min-resolution:1.5dppx){.chosen-container .chosen-results-scroll-down span,.chosen-container .chosen-results-scroll-up span,.chosen-container-multi .chosen-choices .search-choice .search-choice-close,.chosen-container-single .chosen-search input[type=text],.chosen-container-single .chosen-single abbr,.chosen-container-single .chosen-single div b,.chosen-rtl .chosen-search input[type=text]{background-image:url(chosen-sprite@2x.png)!important;background-size:52px 37px!important;background-repeat:no-repeat!important}}
css/login/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
css/login/login-rtl.css CHANGED
File without changes
css/login/login.css CHANGED
File without changes
custom-login.php CHANGED
@@ -3,16 +3,16 @@
3
  * Plugin Name: Custom Login
4
  * Plugin URI: https://frosty.media/plugins/custom-login
5
  * Description: A simple way to customize your WordPress <code>wp-login.php</code> screen! A <a href="https://frosty.media/">Frosty Media</a> plugin.
6
- * Version: 3.2
7
  * Author: Austin Passy
8
  * Author URI: https://austin.passy.co
9
  * Text Domain: custom-login
10
  * GitHub Plugin URI: https://github.com/thefrosty/custom-login
11
  * GitHub Branch: master
12
  *
13
- * @copyright 2012 - 2015
14
  * @author Austin Passy
15
- * @link http://austin.passy.co/
16
  * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
17
  *
18
  * This program is distributed in the hope that it will be useful,
@@ -22,329 +22,330 @@
22
  * @class Custom_Login
23
  */
24
 
25
- if ( !class_exists( 'Custom_Login' ) ) :
26
-
27
- /**
28
- * Main Custom_Login Class
29
- *
30
- * @since 2.0
31
- */
32
- final class Custom_Login {
33
-
34
- /** Singleton *************************************************************/
35
- private static $instance;
36
-
37
- /**
38
- * Plugin vars
39
- * @return string
40
- */
41
- var $version = '3.2',
42
- $menu_page,
43
- $prefix;
44
-
45
- /**
46
- * Private settings
47
- */
48
- public $settings_api;
49
-
50
- /**
51
- * Main Instance
52
- *
53
- * @staticvar array $instance
54
- * @return The one true instance
55
- */
56
- public static function instance() {
57
- if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Custom_Login ) ) {
58
- self::$instance = new Custom_Login;
59
- self::$instance->setup_constants();
60
-
61
- add_action( 'plugins_loaded', array( self::$instance, 'plugin_textdomain' ) );
62
-
63
- self::$instance->includes();
64
- self::$instance->actions();
65
- }
66
- return self::$instance;
67
- }
68
-
69
- /**
70
- * Setup plugin constants
71
- *
72
- * @access private
73
- * @since 3.0
74
- * @return void
75
- */
76
- private function setup_constants() {
77
-
78
- // API URL
79
- if ( ! defined( 'CUSTOM_LOGIN_API_URL' ) ) {
80
- define( 'CUSTOM_LOGIN_API_URL', 'https://frosty.media/' );
81
- }
82
-
83
- // Plugin version
84
- if ( ! defined( 'CUSTOM_LOGIN_VERSION' ) ) {
85
- define( 'CUSTOM_LOGIN_VERSION', $this->version );
86
- }
87
-
88
- // Plugin Root File
89
- if ( ! defined( 'CUSTOM_LOGIN_FILE' ) ) {
90
- define( 'CUSTOM_LOGIN_FILE', __FILE__ );
91
- }
92
-
93
- // Plugin Folder Path
94
- if ( ! defined( 'CUSTOM_LOGIN_DIR' ) ) {
95
- define( 'CUSTOM_LOGIN_DIR', plugin_dir_path( CUSTOM_LOGIN_FILE ) );
96
- }
97
-
98
- // Plugin Folder URL
99
- if ( ! defined( 'CUSTOM_LOGIN_URL' ) ) {
100
- define( 'CUSTOM_LOGIN_URL', plugin_dir_url( CUSTOM_LOGIN_FILE ) );
101
- }
102
-
103
- // Plugin Root Basename
104
- if ( ! defined( 'CUSTOM_LOGIN_BASENAME' ) ) {
105
- define( 'CUSTOM_LOGIN_BASENAME', plugin_basename( CUSTOM_LOGIN_FILE ) );
106
- }
107
-
108
- // Plugin Dirname
109
- if ( ! defined( 'CUSTOM_LOGIN_DIRNAME' ) ) {
110
- define( 'CUSTOM_LOGIN_DIRNAME', dirname( CUSTOM_LOGIN_BASENAME ) );
111
- }
112
-
113
- // Plugin Settings Name
114
- if ( ! defined( 'CUSTOM_LOGIN_OPTION' ) ) {
115
- define( 'CUSTOM_LOGIN_OPTION', str_replace( '-', '_', CUSTOM_LOGIN_DIRNAME ) );
116
- }
117
- }
118
-
119
- /**
120
- * Load the plugin translations
121
- *
122
- */
123
- public function plugin_textdomain() {
124
- load_plugin_textdomain( CUSTOM_LOGIN_DIRNAME, false, CUSTOM_LOGIN_DIRNAME . '/languages/' );
125
- }
126
-
127
- /**
128
- * Includes required functions
129
- *
130
- */
131
- private function includes() {
132
-
133
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-common.php' );
134
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-cron.php' );
135
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-extensions.php' );
136
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-templates.php' );
137
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-scripts-styles.php' );
138
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-settings-api.php' );
139
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-settings-upgrades.php' );
140
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-wp-login.php' );
141
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/functions.php' );
142
-
143
- if ( is_admin() ) {
144
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/dashboard.php' );
145
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/plugins.php' );
146
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/import-export.php' );
147
- require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/tracking.php' );
148
- // require_once( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/roost.php' ); // Not enabled until global domains available.
149
- }
150
- }
151
-
152
- /**
153
- * To infinity and beyond
154
- */
155
- private function actions() {
156
-
157
- $this->prefix = CUSTOM_LOGIN_OPTION;
158
-
159
- register_activation_hook( CUSTOM_LOGIN_FILE, array( $this, 'activate' ) );
160
-
161
- add_action( 'login_head', array( $this, 'cl_version_in_header' ), 1 );
162
- add_action( 'wp_head', array( $this, 'cl_version_in_header' ) );
163
- add_action( 'admin_menu', array( $this, 'admin_menu' ), 9 );
164
- add_action( 'admin_init', array( $this, 'load_settings' ), 8 );
165
- add_action( $this->prefix . '_after_sanitize_options', array( $this, 'delete_transients' ), 8 );
166
-
167
- add_action( 'admin_notices', array( $this, 'show_notifications' ) );
168
- add_action( 'admin_init', array( $this, 'notification_ignore' ) );
169
-
170
- do_action( $this->prefix . '_actions' );
171
- }
172
-
173
- /**
174
- * Runs on plugin install.
175
- *
176
- * @since 3.1
177
- * @return void
178
- */
179
- function activate() {
180
- }
181
-
182
- /**
183
- * Adds CL Version to the <head> tag
184
- *
185
- * @since 3.0.0
186
- * @return void
187
- */
188
- function cl_version_in_header(){
189
- echo '<meta name="generator" content="Custom Login v' . CUSTOM_LOGIN_VERSION . '" />' . "\n";
190
- }
191
 
192
  /**
193
- * Register the plugin page
194
- */
195
- public function admin_menu() {
196
-
197
- $capability = CL_Common::get_option( 'capability', 'general', 'manage_options' );
198
-
199
- $this->menu_page = add_options_page(
200
- __( 'Custom Login Settings', CUSTOM_LOGIN_DIRNAME ),
201
- __( 'Custom Login', CUSTOM_LOGIN_DIRNAME ),
202
- $capability,
203
- CUSTOM_LOGIN_DIRNAME,
204
- array( $this, 'settings_page' )
205
- );
206
- }
207
-
208
- /**
209
- * Display the plugin settings options page
210
- */
211
- public function settings_page() { ?>
212
-
213
- <div class="wrap">
214
- <?php $this->settings_api->settings_html(); ?>
215
- </div><?php
216
- }
217
-
218
- /**
219
- * Display the plugin settings options page
220
- */
221
- public function load_settings() {
222
-
223
- include( trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/default-settings.php' );
224
- $this->settings_api = new CL_Settings_API(
225
- $sections,
226
- $fields,
227
- array(
228
- 'option_name' => CUSTOM_LOGIN_OPTION,
229
- 'option_group' => CUSTOM_LOGIN_OPTION . '_group',
230
- 'domain' => CUSTOM_LOGIN_DIRNAME,
231
- 'prefix' => $this->prefix,
232
- 'version' => $this->version,
233
- 'menu_page' => $this->menu_page,
234
- 'nonce' => CUSTOM_LOGIN_OPTION . '_nonce_' . CUSTOM_LOGIN_BASENAME,
235
- 'file' => CUSTOM_LOGIN_FILE,
236
- )
237
- );
238
- $this->settings_api->admin_init();
239
- }
240
-
241
- /**
242
- * Hook into the 'sanitize_options' hook in the Settings API
243
- * and remove the transient settings for the style and script.
244
- *
245
- * @since 3.0.0
246
- */
247
- public function delete_transients() {
248
- delete_transient( CL_Common::get_transient_key( 'style' ) );
249
- delete_transient( CL_Common::get_transient_key( 'script' ) );
250
- }
251
-
252
- /**
253
- * Show global notifications if they are allowed.
254
- *
255
- */
256
- function show_notifications() {
257
-
258
- $is_cl_screen = CL_Common::is_settings_page();
259
- $transient_key = CL_Common::get_transient_key( 'announcement' );
260
- $ignore_key = CUSTOM_LOGIN_OPTION . '_ignore_announcement';
261
- $old_message = get_option( CUSTOM_LOGIN_OPTION . '_announcement_message' );
262
- $user_meta = get_user_meta( get_current_user_id(), $ignore_key, true );
263
- $capability = CL_Common::get_option( 'capability', 'general', 'manage_options' );
264
-
265
- /**
266
- delete_user_meta( get_current_user_id(), $ignore_key, 1 );
267
- delete_transient( $transient_key );
268
- update_option( CUSTOM_LOGIN_OPTION . '_announcement_message', '' ); //*/
269
-
270
- // Current user can't manage options
271
- if ( !current_user_can( $capability ) )
272
- return;
273
-
274
- if ( !$is_cl_screen ) {
275
-
276
- // Let's not show this at all if not on out menu page. @since 3.1
277
- return;
278
-
279
- // Global notifications
280
- if ( 'off' === CL_Common::get_option( 'admin_notices', 'general', 'off' ) )
281
- return;
282
-
283
- // Make sure 'Frosty_Media_Notifications' isn't activated
284
- if ( class_exists( 'Frosty_Media_Notifications' ) )
285
- return;
286
- }
287
-
288
- // https://raw.github.com/thefrosty/custom-login/master/extensions.json
289
- $message_url = add_query_arg( array( 'edd_action' => 'cl_announcements' ), trailingslashit( CUSTOM_LOGIN_API_URL ) . 'cl-checkin-api/' );
290
-
291
- $announcement = CL_Common::wp_remote_get(
292
- $message_url,
293
- $transient_key,
294
- DAY_IN_SECONDS,
295
- 'CustomLogin' // We need our custom $user_agent
296
- );
297
-
298
- // Bail if errors
299
- if ( is_wp_error( $announcement ) )
300
- return;
301
-
302
- // Bail if false or empty
303
- if ( !$announcement || empty( $announcement ) )
304
- return;
305
-
306
- if ( trim( $old_message ) !== trim( $announcement->message ) && !empty( $old_message ) ) {
307
- delete_user_meta( get_current_user_id(), $ignore_key );
308
- delete_transient( $transient_key );
309
- update_option( CUSTOM_LOGIN_OPTION . '_announcement_message', $announcement->message );
310
- }
311
-
312
- $html = '<div class="updated"><p>';
313
- $html .= !$is_cl_screen ? // If we're on our settings page let not show the dismiss notice link.
314
- sprintf( '%2$s <span class="alignright">| <a href="%3$s">%1$s</a></span>',
315
- __( 'Dismiss', CUSTOM_LOGIN_DIRNAME ),
316
- $announcement->message,
317
- esc_url( add_query_arg( $ignore_key, wp_create_nonce( $ignore_key ), admin_url( 'options-general.php?page=custom-login' ) ) ),
318
- esc_url( admin_url( 'options-general.php?page=custom-login#custom_login_general' ) )
319
- ) :
320
- sprintf( '%s', $announcement->message );
321
- $html .= '</p></div>';
322
-
323
- if ( ( !$user_meta && 1 !== $user_meta ) || $is_cl_screen )
324
- echo $html;
325
- }
326
-
327
- /**
328
- * Remove the admin notification.
329
- *
330
- * @return void
331
- */
332
- function notification_ignore() {
333
-
334
- $ignore_key = CUSTOM_LOGIN_OPTION . '_ignore_announcement';
335
-
336
- // Bail if not set
337
- if ( !isset( $_GET[$ignore_key] ) )
338
- return;
339
-
340
- // Check nonce
341
- check_admin_referer( $ignore_key, $ignore_key );
342
-
343
- // If user clicks to ignore the notice, add that to their user meta
344
- add_user_meta( get_current_user_id(), $ignore_key, 1, true );
345
- }
346
 
347
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
348
 
349
  endif; // End if class_exists check
350
 
@@ -357,13 +358,13 @@ endif; // End if class_exists check
357
  *
358
  * Example: <?php $custom_login = CUSTOMLOGIN(); ?>
359
  *
360
- * @return The one true Instance
361
  */
362
- if ( !function_exists( 'CUSTOMLOGIN' ) ) {
363
- function CUSTOMLOGIN() {
364
- return Custom_Login::instance();
365
- }
366
  }
367
 
368
  // Out of the frying pan, and into the fire.
369
- CUSTOMLOGIN();
3
  * Plugin Name: Custom Login
4
  * Plugin URI: https://frosty.media/plugins/custom-login
5
  * Description: A simple way to customize your WordPress <code>wp-login.php</code> screen! A <a href="https://frosty.media/">Frosty Media</a> plugin.
6
+ * Version: 3.2.9
7
  * Author: Austin Passy
8
  * Author URI: https://austin.passy.co
9
  * Text Domain: custom-login
10
  * GitHub Plugin URI: https://github.com/thefrosty/custom-login
11
  * GitHub Branch: master
12
  *
13
+ * @copyright 2012 - 2019
14
  * @author Austin Passy
15
+ * @link https://austin.passy.co/
16
  * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
17
  *
18
  * This program is distributed in the hope that it will be useful,
22
  * @class Custom_Login
23
  */
24
 
25
+ if ( ! class_exists( 'Custom_Login' ) ) :
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
  /**
28
+ * Main Custom_Login Class
29
+ *
30
+ * @since 2.0
31
+ */
32
+ final class Custom_Login {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
 
34
+ /** Singleton *************************************************************/
35
+ private static $instance;
36
+
37
+ /**
38
+ * Plugin vars
39
+ *
40
+ * @return string
41
+ */
42
+ var $version = '3.2.9',
43
+ $menu_page,
44
+ $prefix;
45
+
46
+ /**
47
+ * Custom Login Settings API
48
+ *
49
+ * @var CL_Settings_API $settings_api
50
+ */
51
+ public $settings_api;
52
+
53
+ /**
54
+ * Main Instance
55
+ *
56
+ * @return Custom_Login The one true instance
57
+ */
58
+ public static function instance() {
59
+ if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Custom_Login ) ) {
60
+ self::$instance = new Custom_Login;
61
+ self::$instance->setup_constants();
62
+
63
+ add_action( 'plugins_loaded', array( self::$instance, 'plugin_textdomain' ) );
64
+
65
+ self::$instance->includes();
66
+ self::$instance->actions();
67
+ }
68
+
69
+ return self::$instance;
70
+ }
71
+
72
+ /**
73
+ * Setup plugin constants
74
+ *
75
+ * @access private
76
+ * @since 3.0
77
+ * @return void
78
+ */
79
+ private function setup_constants() {
80
+ // API URL
81
+ if ( ! defined( 'CUSTOM_LOGIN_API_URL' ) ) {
82
+ define( 'CUSTOM_LOGIN_API_URL', 'https://frosty.media/' );
83
+ }
84
+
85
+ // Plugin version
86
+ if ( ! defined( 'CUSTOM_LOGIN_VERSION' ) ) {
87
+ define( 'CUSTOM_LOGIN_VERSION', $this->version );
88
+ }
89
+
90
+ // Plugin Root File
91
+ if ( ! defined( 'CUSTOM_LOGIN_FILE' ) ) {
92
+ define( 'CUSTOM_LOGIN_FILE', __FILE__ );
93
+ }
94
+
95
+ // Plugin Folder Path
96
+ if ( ! defined( 'CUSTOM_LOGIN_DIR' ) ) {
97
+ define( 'CUSTOM_LOGIN_DIR', plugin_dir_path( CUSTOM_LOGIN_FILE ) );
98
+ }
99
+
100
+ // Plugin Folder URL
101
+ if ( ! defined( 'CUSTOM_LOGIN_URL' ) ) {
102
+ define( 'CUSTOM_LOGIN_URL', plugin_dir_url( CUSTOM_LOGIN_FILE ) );
103
+ }
104
+
105
+ // Plugin Root Basename
106
+ if ( ! defined( 'CUSTOM_LOGIN_BASENAME' ) ) {
107
+ define( 'CUSTOM_LOGIN_BASENAME', plugin_basename( CUSTOM_LOGIN_FILE ) );
108
+ }
109
+
110
+ // Plugin Dirname
111
+ if ( ! defined( 'CUSTOM_LOGIN_DIRNAME' ) ) {
112
+ define( 'CUSTOM_LOGIN_DIRNAME', dirname( CUSTOM_LOGIN_BASENAME ) );
113
+ }
114
+
115
+ // Plugin Settings Name
116
+ if ( ! defined( 'CUSTOM_LOGIN_OPTION' ) ) {
117
+ define( 'CUSTOM_LOGIN_OPTION', str_replace( '-', '_', CUSTOM_LOGIN_DIRNAME ) );
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Load the plugin translations
123
+ *
124
+ */
125
+ public function plugin_textdomain() {
126
+ load_plugin_textdomain( CUSTOM_LOGIN_DIRNAME, false, CUSTOM_LOGIN_DIRNAME . '/languages/' );
127
+ }
128
+
129
+ /**
130
+ * Includes required functions
131
+ *
132
+ */
133
+ private function includes() {
134
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-common.php';
135
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-cron.php';
136
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-extensions.php';
137
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-templates.php';
138
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-scripts-styles.php';
139
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-settings-api.php';
140
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-settings-upgrades.php';
141
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/class-cl-wp-login.php';
142
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/functions.php';
143
+
144
+ if ( is_admin() ) {
145
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/dashboard.php';
146
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/plugins.php';
147
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/import-export.php';
148
+ require_once trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/admin/tracking.php';
149
+ }
150
+ }
151
+
152
+ /**
153
+ * To infinity and beyond
154
+ */
155
+ private function actions() {
156
+ $this->prefix = CUSTOM_LOGIN_OPTION;
157
+
158
+ register_activation_hook( CUSTOM_LOGIN_FILE, array( $this, 'activate' ) );
159
+
160
+ add_action( 'login_head', array( $this, 'cl_version_in_header' ), 1 );
161
+ add_action( 'wp_head', array( $this, 'cl_version_in_header' ) );
162
+ add_action( 'admin_menu', array( $this, 'admin_menu' ), 9 );
163
+ add_action( 'admin_init', array( $this, 'load_settings' ), 8 );
164
+ add_action( $this->prefix . '_after_sanitize_options', array( $this, 'delete_transients' ), 8 );
165
+
166
+ add_action( 'admin_notices', array( $this, 'show_notifications' ) );
167
+ add_action( 'admin_init', array( $this, 'notification_ignore' ) );
168
+
169
+ do_action( $this->prefix . '_actions' );
170
+ }
171
+
172
+ /**
173
+ * Runs on plugin install.
174
+ *
175
+ * @since 3.1
176
+ */
177
+ function activate() {
178
+ }
179
+
180
+ /**
181
+ * Adds CL Version to the <head> tag
182
+ *
183
+ * @since 3.0.0
184
+ * @return void
185
+ */
186
+ function cl_version_in_header() {
187
+ echo '<meta name="generator" content="Custom Login v' . CUSTOM_LOGIN_VERSION . '" />' . "\n";
188
+ }
189
+
190
+ /**
191
+ * Register the plugin page
192
+ */
193
+ public function admin_menu() {
194
+ $capability = CL_Common::get_option( 'capability', 'general', 'manage_options' );
195
+
196
+ $this->menu_page = add_options_page(
197
+ __( 'Custom Login Settings', CUSTOM_LOGIN_DIRNAME ),
198
+ __( 'Custom Login', CUSTOM_LOGIN_DIRNAME ),
199
+ $capability,
200
+ CUSTOM_LOGIN_DIRNAME,
201
+ array( $this, 'settings_page' )
202
+ );
203
+ }
204
+
205
+ /**
206
+ * Display the plugin settings options page
207
+ */
208
+ public function settings_page() { ?>
209
+ <div class="wrap">
210
+ <?php $this->settings_api->settings_html(); ?>
211
+ </div><?php
212
+ }
213
+
214
+ /**
215
+ * Display the plugin settings options page
216
+ */
217
+ public function load_settings() {
218
+
219
+ include trailingslashit( CUSTOM_LOGIN_DIR ) . 'includes/default-settings.php';
220
+ $this->settings_api = new CL_Settings_API(
221
+ $sections,
222
+ $fields,
223
+ array(
224
+ 'option_name' => CUSTOM_LOGIN_OPTION,
225
+ 'option_group' => CUSTOM_LOGIN_OPTION . '_group',
226
+ 'domain' => CUSTOM_LOGIN_DIRNAME,
227
+ 'prefix' => $this->prefix,
228
+ 'version' => $this->version,
229
+ 'menu_page' => $this->menu_page,
230
+ 'nonce' => CUSTOM_LOGIN_OPTION . '_nonce_' . CUSTOM_LOGIN_BASENAME,
231
+ 'file' => CUSTOM_LOGIN_FILE,
232
+ )
233
+ );
234
+ $this->settings_api->admin_init();
235
+ }
236
+
237
+ /**
238
+ * Hook into the 'sanitize_options' hook in the Settings API
239
+ * and remove the transient settings for the style and script.
240
+ *
241
+ * @since 3.0.0
242
+ */
243
+ public function delete_transients() {
244
+ delete_transient( CL_Common::get_transient_key( 'style' ) );
245
+ delete_transient( CL_Common::get_transient_key( 'script' ) );
246
+ }
247
+
248
+ /**
249
+ * Show global notifications if they are allowed.
250
+ *
251
+ */
252
+ public function show_notifications() {
253
+ $is_cl_screen = CL_Common::is_settings_page();
254
+ $transient_key = CL_Common::get_transient_key( 'announcement' );
255
+ $ignore_key = CUSTOM_LOGIN_OPTION . '_ignore_announcement';
256
+ $old_message = get_option( CUSTOM_LOGIN_OPTION . '_announcement_message' );
257
+ $user_meta = get_user_meta( get_current_user_id(), $ignore_key, true );
258
+ $capability = CL_Common::get_option( 'capability', 'general', 'manage_options' );
259
+
260
+ /**
261
+ * delete_user_meta( get_current_user_id(), $ignore_key, 1 );
262
+ * delete_transient( $transient_key );
263
+ * update_option( CUSTOM_LOGIN_OPTION . '_announcement_message', '' );
264
+ */
265
+
266
+ // Current user can't manage options
267
+ if ( ! current_user_can( $capability ) ) {
268
+ return;
269
+ }
270
+
271
+ if ( ! $is_cl_screen ) {
272
+
273
+ // Make sure 'Frosty_Media_Notifications' isn't activated
274
+ if ( class_exists( 'Frosty_Media_Notifications' ) ) {
275
+ return;
276
+ }
277
+
278
+ // Global notifications
279
+ if ( 'off' === CL_Common::get_option( 'admin_notices', 'general', 'off' ) ) {
280
+ return;
281
+ }
282
+
283
+ // Let's not show this at all if not on out menu page. @since 3.1
284
+ return;
285
+ }
286
+
287
+ $message_url = esc_url( add_query_arg( array( 'get_notifications' => 'true' ), CUSTOM_LOGIN_API_URL) );
288
+
289
+ $announcement = CL_Common::wp_remote_get(
290
+ $message_url,
291
+ $transient_key,
292
+ DAY_IN_SECONDS,
293
+ 'WordPress' // We need our custom $user_agent
294
+ );
295
+
296
+ // Bail if errors
297
+ if ( is_wp_error( $announcement ) ) {
298
+ return;
299
+ }
300
+
301
+ // Bail if false or empty
302
+ if ( ! $announcement || empty( $announcement[0] ) ) {
303
+ return;
304
+ }
305
+
306
+ if ( trim( $old_message ) !== trim( $announcement[0]->message ) && ! empty( $old_message ) ) {
307
+ delete_user_meta( get_current_user_id(), $ignore_key );
308
+ delete_transient( $transient_key );
309
+ update_option( CUSTOM_LOGIN_OPTION . '_announcement_message', $announcement[0]->message );
310
+ }
311
+
312
+ $html = '<div class="updated"><p>';
313
+ $html .= ! $is_cl_screen ? // If we're on our settings page let not show the dismiss notice link.
314
+ sprintf( '%2$s <span class="alignright">| <a href="%3$s">%1$s</a></span>',
315
+ __( 'Dismiss', CUSTOM_LOGIN_DIRNAME ),
316
+ $announcement[0]->message,
317
+ esc_url( add_query_arg( $ignore_key, wp_create_nonce( $ignore_key ), admin_url( 'options-general.php?page=custom-login' ) ) ),
318
+ esc_url( admin_url( 'options-general.php?page=custom-login#custom_login_general' ) )
319
+ ) :
320
+ sprintf( '%s', $announcement[0]->message );
321
+ $html .= '</p></div>';
322
+
323
+ if ( ( ! $user_meta && 1 !== $user_meta ) || $is_cl_screen ) {
324
+ echo $html;
325
+ }
326
+ }
327
+
328
+ /**
329
+ * Remove the admin notification.
330
+ *
331
+ * @return void
332
+ */
333
+ public function notification_ignore() {
334
+ $ignore_key = CUSTOM_LOGIN_OPTION . '_ignore_announcement';
335
+
336
+ // Bail if not set
337
+ if ( ! isset( $_GET[ $ignore_key ] ) ) {
338
+ return;
339
+ }
340
+
341
+ // Check nonce
342
+ check_admin_referer( $ignore_key, $ignore_key );
343
+
344
+ // If user clicks to ignore the notice, add that to their user meta
345
+ add_user_meta( get_current_user_id(), $ignore_key, 1, true );
346
+ }
347
+
348
+ }
349
 
350
  endif; // End if class_exists check
351
 
358
  *
359
  * Example: <?php $custom_login = CUSTOMLOGIN(); ?>
360
  *
361
+ * @return Custom_Login
362
  */
363
+ if ( ! function_exists( 'CUSTOMLOGIN' ) ) {
364
+ function CUSTOMLOGIN() {
365
+ return Custom_Login::instance();
366
+ }
367
  }
368
 
369
  // Out of the frying pan, and into the fire.
370
+ CUSTOMLOGIN();
extensions.json CHANGED
File without changes
includes/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
includes/admin/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
includes/admin/dashboard.php CHANGED
@@ -20,258 +20,287 @@ if ( ! defined( 'ABSPATH' ) ) exit;
20
  */
21
  class CL_Dashboard {
22
 
23
- /** Singleton *************************************************************/
24
- private static $instance;
25
-
26
- private $id;
27
-
28
- /**
29
- * Main Instance
30
- *
31
- * @staticvar array $instance
32
- * @return The one true instance
33
- */
34
- public static function instance() {
35
- if ( ! isset( self::$instance ) ) {
36
- self::$instance = new self;
37
- self::$instance->id = sprintf( '%s-dashboard', CUSTOM_LOGIN_DIRNAME );
38
- self::$instance->actions();
39
- }
40
- return self::$instance;
41
- }
42
-
43
- private function actions() {
44
-
45
- add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widget' ) );
46
- add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
47
- add_action( 'admin_enqueue_scripts', array( $this, 'inline_scripts' ) );
48
- }
49
-
50
- /**
51
- * Check if the dashboard widget is allowed.
52
- *
53
- * @access private
54
- * @return bool
55
- */
56
- private function dashboard_allowed() {
57
- $tracking = CL_Common::get_option( 'dashboard_widget', 'general', 'off' );
58
-
59
- if ( 'on' === $tracking )
60
- return true;
61
-
62
- return false;
63
- }
64
-
65
- /**
66
- * Add Dashboard widget
67
- */
68
- public function add_dashboard_widget() {
69
-
70
- if ( !$this->dashboard_allowed() )
71
- return;
72
-
73
- wp_add_dashboard_widget(
74
- $this->id,
75
- __( 'Frosty Media', CUSTOM_LOGIN_DIRNAME ),
76
- array( $this, 'widget' )
77
- );
78
- }
79
-
80
- /**
81
- * Scripts & Styles
82
- */
83
- public function enqueue_scripts() {
84
-
85
- if ( $this->dashboard_allowed() ) {
86
- wp_enqueue_style( $this->id, $this->add_query_arg( 'css' ), null, null, 'screen' );
87
- }
88
- else {
89
- wp_enqueue_script( $this->id, $this->add_query_arg( 'js' ), array( 'jquery' ), null, true );
90
- }
91
- }
92
-
93
- private function get_feed( $count = 1, $feed = 'https://frosty.media/feed/' ) {
94
- return CL_Common::fetch_rss_items( $count, $feed );
95
- }
96
-
97
- private function get_feed_url( $key = 0 ) {
98
-
99
- $rss_items = $this->get_feed();
100
- $feed_url = preg_replace( '/#.*/', '', esc_url( $rss_items[ $key ]->get_permalink(), null, 'display' ) );
101
-
102
- return add_query_arg( array( 'utm_medium' => 'wpadmin_dashboard', 'utm_term' => 'newsitem', 'utm_campaign' => CUSTOM_LOGIN_DIRNAME ), $feed_url );
103
- }
104
-
105
- private function get_feed_title( $key = 0 ) {
106
- $rss_items = $this->get_feed();
107
-
108
- return esc_html( $rss_items[ $key ]->get_title() );
109
- }
110
-
111
- /**
112
- * Dashboard widget
113
- */
114
- public function widget() {
115
-
116
- // FEED
117
- $rss_items = $this->get_feed( 1, 'https://frosty.media/feed/' );
118
-
119
- $content = '<div class="rss-widget">';
120
- $content .= '<ul>';
121
-
122
- if ( !$rss_items ) {
123
- $content .= '<li>' . __( 'Error fetching feed', CUSTOM_LOGIN_DIRNAME ) . '</li>';
124
- }
125
- else {
126
- $count = 1;
127
- foreach ( $rss_items as $key => $item ) {
128
- $feed_url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
129
- $content .= '<li>';
130
- $content .= '<a class="rsswidget" href="' . add_query_arg( array( 'utm_medium' => 'wpadmin_dashboard', 'utm_term' => 'newsitem', 'utm_campaign' => CUSTOM_LOGIN_DIRNAME ), $feed_url ) . '">' . esc_html( $item->get_title() ) . '</a>';
131
- $content .= $count === 1 ? '&nbsp;&nbsp;&nbsp;<span class="rss-date">' . $item->get_date( get_option( 'date_format' ) ) . '</span>' : '';
132
- $content .= $count === 1 ? '<div class="rssSummary">' . strip_tags( wp_trim_words( $item->get_description(), 28 ) ) . '</div>' : '';
133
- $content .= '</li>';
134
- $count++;
135
- }
136
- }
137
- $content .= '</ul>';
138
- $content .= '</div>';
139
-
140
-
141
- // Plugins
142
- $rss_items = CL_Common::fetch_rss_items( 3, 'https://frosty.media/feed/?post_type=plugin&plugin_tag=custom-login-extension' );
143
-
144
- $content .= '<div class="rss-widget">';
145
- $content .= '<ul>';
146
- //$content .= '<li><strong>' . __( 'Custom Login Extensions:', CUSTOM_LOGIN_DIRNAME ) . '</strong></li>';
147
-
148
- if ( !$rss_items ) {
149
- $content .= '<li>' . __( 'Error fetching feed', CUSTOM_LOGIN_DIRNAME ) . '</li>';
150
- }
151
- else {
152
- foreach ( $rss_items as $item ) {
153
- $url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
154
- $content .= '<li>';
155
- $content .= '<a class="rsswidget" href="' . add_query_arg( array( 'utm_medium' => 'wpadmin_dashboard', 'utm_term' => 'newsitem', 'utm_campaign' => CUSTOM_LOGIN_DIRNAME ), $url ) . '">' . esc_html( $item->get_title() ) . '</a>';
156
- # $content .= '<div class="rssSummary">' . strip_tags( wp_trim_words( $item->get_description(), 10 ) ) . '</div>';
157
- $content .= '</li>';
158
- }
159
- }
160
- $content .= '</ul>';
161
- $content .= '</div>';
162
-
163
- $content .= '<div class="rss-widget">';
164
- $content .= '<ul class="social">';
165
- $content .= '<li>';
166
- $content .= '<a href="https://www.facebook.com/FrostyMediaWP"><span class="dashicons dashicons-facebook"></span>/FrostyMediaWP</a> | ';
167
- $content .= '<a href="https://twitter.com/Frosty_Media"><span class="dashicons dashicons-twitter"></span>/Frosty_Media</a> | ';
168
- $content .= '<a href="https://twitter.com/TheFrosty"><span class="dashicons dashicons-twitter"></span>/TheFrosty</a>';
169
- $content .= '</li>';
170
- $content .= '</ul>';
171
-
172
- $content .= '</div>';
173
-
174
- echo $content;
175
- }
176
-
177
- /**
178
- * Generate the custom CSS/JS.
179
- *
180
- */
181
- public function inline_scripts() {
182
-
183
- if ( isset( $_GET[ $this->id ] ) && intval( $_GET[ $this->id ] ) === 1 ) {
184
-
185
- if ( isset( $_GET['type'] ) && $_GET['type'] === 'css' ) {
186
-
187
- if ( !headers_sent() ) {
188
- header("content-type:text/css");
189
- }
190
- ob_start();
191
- str_replace( ob_end_clean(), '', ob_end_clean() );
192
- $this->CSS();
193
- echo ob_get_clean();
194
- die;
195
- }
196
- elseif ( isset( $_GET['type'] ) && $_GET['type'] === 'js' ) {
197
-
198
- if ( !headers_sent() ) {
199
- header("content-type:application/x-javascript");
200
- }
201
- ob_start();
202
- str_replace( ob_end_clean(), '', ob_end_clean() );
203
- $this->jQuery();
204
- echo ob_get_clean();
205
- die;
206
- }
207
- }
208
- }
209
-
210
- /**
211
- * Helper function to return the proper query arg.
212
- */
213
- private function add_query_arg( $type = 'js' ) {
214
- $url = add_query_arg(
215
- array(
216
- $this->id => '1',
217
- 'type' => $type
218
- ),
219
- trailingslashit( admin_url() )
220
- );
221
- return esc_url( $url );
222
- }
223
-
224
- /**
225
- * Create the CSS.
226
- *
227
- * @param bool $remove_wrapper
228
- */
229
- private function CSS( $remove_wrapper = true ) {
230
- if ( !$remove_wrapper ) { ?>
231
- <style>
232
- <?php } ?>
233
- #<?php echo $this->id; ?> .inside {
234
- margin: 0;
235
- padding: 0;
236
- }
237
- #<?php echo $this->id; ?> .rss-widget {
238
- border-bottom: 1px solid #eee;
239
- font-size: 13px;
240
- padding: 8px 12px 10px;
241
- }
242
- <?php if ( !$remove_wrapper ) { ?>
243
- </style>
244
- <?php }
245
- }
246
-
247
- /**
248
- * Create the jQuery.
249
- *
250
- * @param bool $remove_wrapper
251
- */
252
- private function jQuery( $remove_wrapper = true ) {
253
- if ( !$remove_wrapper ) { ?>
254
- <script>
255
- <?php } ?>
256
- jQuery(document).ready(function($) {
257
-
258
- var CL_Timeout = 200;
259
-
260
- if ( !$('#dashboard_primary .rss-widget').eq(1).length ) {
261
- CL_Timeout = 2500;
262
- }
263
-
264
- setTimeout( function() {
265
- $('#dashboard_primary .rss-widget:eq(1) ul').append('<a class="rsswidget" href="<?php echo $this->get_feed_url(); ?>">FrostyMedia: <?php echo $this->get_feed_title(); ?></a>');
266
- }, CL_Timeout );
267
-
268
- });
269
- <?php if ( !$remove_wrapper ) { ?>
270
- </script>
271
- <?php }
272
- }
273
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  }
275
 
276
  // Only load on the WordPress Dashboard (index.php) page.
277
- add_action( 'load-index.php', array( 'CL_Dashboard', 'instance' ) );
20
  */
21
  class CL_Dashboard {
22
 
23
+ /** Singleton *************************************************************/
24
+ private static $instance;
25
+
26
+ private $id;
27
+
28
+ private static $headers = array();
29
+ private static $scripts = array();
30
+
31
+ const FEED_URL = 'https://frosty.media/feed/';
32
+
33
+ /**
34
+ * Main Instance
35
+ *
36
+ * @staticvar array $instance
37
+ * @return CL_Dashboard The one true instance
38
+ */
39
+ public static function instance() {
40
+ if ( ! isset( self::$instance ) ) {
41
+ self::$instance = new self;
42
+ self::$instance->id = sprintf( '%s-dashboard', CUSTOM_LOGIN_DIRNAME );
43
+ self::$instance->actions();
44
+ }
45
+ return self::$instance;
46
+ }
47
+
48
+ private function actions() {
49
+
50
+ if ( !is_admin() )
51
+ return;
52
+
53
+ add_action( 'wp_dashboard_setup', array( $this, 'add_dashboard_widget' ) );
54
+ // add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_scripts' ) );
55
+ add_action( 'admin_enqueue_scripts', array( $this, 'inline_scripts' ) );
56
+ add_action( 'admin_footer', array( $this, 'admin_footer' ) );
57
+ }
58
+
59
+ /**
60
+ * Check if the dashboard widget is allowed.
61
+ *
62
+ * @access private
63
+ * @return bool
64
+ */
65
+ private function dashboard_allowed() {
66
+ $dashboard = CL_Common::get_option( 'dashboard_widget', 'general', 'off' );
67
+
68
+ if ( 'on' === $dashboard )
69
+ return true;
70
+
71
+ return false;
72
+ }
73
+
74
+ /**
75
+ * Add Dashboard widget
76
+ */
77
+ public function add_dashboard_widget() {
78
+
79
+ if ( !$this->dashboard_allowed() )
80
+ return;
81
+
82
+ wp_add_dashboard_widget(
83
+ $this->id,
84
+ __( 'Frosty Media', CUSTOM_LOGIN_DIRNAME ),
85
+ array( $this, 'widget' )
86
+ );
87
+ }
88
+
89
+ /**
90
+ * Scripts & Styles
91
+ */
92
+ public function enqueue_scripts() {
93
+
94
+ if ( $this->dashboard_allowed() ) {
95
+ wp_enqueue_style( $this->id, $this->add_query_arg( 'css' ), null, null, 'screen' );
96
+ }
97
+ else {
98
+ wp_enqueue_script( $this->id, $this->add_query_arg( 'js' ), array( 'jquery' ), null, true );
99
+ }
100
+ }
101
+
102
+ public function admin_footer() {
103
+ if ( $this->dashboard_allowed() ) {
104
+ echo $this->CSS( false );
105
+ }
106
+ else {
107
+ echo $this->jQuery( false );
108
+ }
109
+ }
110
+
111
+ private function get_feed( $count = 1, $feed = self::FEED_URL ) {
112
+ return CL_Common::fetch_rss_items( $count, $feed );
113
+ }
114
+
115
+ private function get_feed_url() {
116
+
117
+ $rss_items = $this->get_feed();
118
+
119
+ if ( false !== $rss_items && isset( $rss_items[0] ) ) {
120
+
121
+ $feed_url = preg_replace( '/#.*/', '', esc_url( $rss_items[0]->get_permalink(), null, 'display' ) );
122
+
123
+ return esc_url( add_query_arg( array( 'utm_medium' => 'wpadmin_dashboard', 'utm_term' => 'newsitem', 'utm_campaign' => CUSTOM_LOGIN_DIRNAME ), $feed_url ) );
124
+ }
125
+
126
+ return esc_url( self::FEED_URL );
127
+ }
128
+
129
+ private function get_feed_title() {
130
+
131
+ $rss_items = $this->get_feed();
132
+
133
+ return isset( $rss_items[0] ) ? esc_html( $rss_items[0]->get_title() ) : 'Unknown';
134
+ }
135
+
136
+ /**
137
+ * Dashboard widget
138
+ */
139
+ public function widget() {
140
+
141
+ // FEED
142
+ $rss_items = $this->get_feed();
143
+
144
+ $content = '<div class="rss-widget">';
145
+ $content .= '<ul>';
146
+
147
+ if ( !$rss_items ) {
148
+ $content .= '<li>' . __( 'Error fetching feed', CUSTOM_LOGIN_DIRNAME ) . '</li>';
149
+ }
150
+ else {
151
+ $count = 1;
152
+ foreach ( $rss_items as $key => $item ) {
153
+ $feed_url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
154
+ $content .= '<li>';
155
+ $content .= '<a class="rsswidget" href="' . esc_url( add_query_arg( array( 'utm_medium' => 'wpadmin_dashboard', 'utm_term' => 'newsitem', 'utm_campaign' => CUSTOM_LOGIN_DIRNAME ), $feed_url ) ) . '">' . esc_html( $item->get_title() ) . '</a>';
156
+ $content .= $count === 1 ? '&nbsp;&nbsp;&nbsp;<span class="rss-date">' . $item->get_date( get_option( 'date_format' ) ) . '</span>' : '';
157
+ $content .= $count === 1 ? '<div class="rssSummary">' . strip_tags( wp_trim_words( $item->get_description(), 28 ) ) . '</div>' : '';
158
+ $content .= '</li>';
159
+ $count++;
160
+ }
161
+ }
162
+ $content .= '</ul>';
163
+ $content .= '</div>';
164
+
165
+
166
+ // Plugins
167
+ $rss_items = $this->get_feed( 3, sprintf( '%s?post_type=plugin&plugin_tag=custom-login-extension', self::FEED_URL ) );
168
+
169
+ $content .= '<div class="rss-widget">';
170
+ $content .= '<ul>';
171
+ //$content .= '<li><strong>' . __( 'Custom Login Extensions:', CUSTOM_LOGIN_DIRNAME ) . '</strong></li>';
172
+
173
+ if ( !$rss_items ) {
174
+ $content .= '<li>' . __( 'Error fetching feed', CUSTOM_LOGIN_DIRNAME ) . '</li>';
175
+ }
176
+ else {
177
+ foreach ( $rss_items as $item ) {
178
+ $url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
179
+ $content .= '<li>';
180
+ $content .= '<a class="rsswidget" href="' . esc_url( add_query_arg( array( 'utm_medium' => 'wpadmin_dashboard', 'utm_term' => 'newsitem', 'utm_campaign' => CUSTOM_LOGIN_DIRNAME ), $url ) ) . '">' . esc_html( $item->get_title() ) . '</a>';
181
+ # $content .= '<div class="rssSummary">' . strip_tags( wp_trim_words( $item->get_description(), 10 ) ) . '</div>';
182
+ $content .= '</li>';
183
+ }
184
+ }
185
+ $content .= '</ul>';
186
+ $content .= '</div>';
187
+
188
+ $content .= '<div class="rss-widget">';
189
+ $content .= '<ul class="social">';
190
+ $content .= '<li>';
191
+ $content .= '<a href="https://www.facebook.com/FrostyMediaWP"><span class="dashicons dashicons-facebook"></span>/FrostyMediaWP</a> | ';
192
+ $content .= '<a href="https://twitter.com/Frosty_Media"><span class="dashicons dashicons-twitter"></span>/Frosty_Media</a> | ';
193
+ $content .= '<a href="https://twitter.com/TheFrosty"><span class="dashicons dashicons-twitter"></span>/TheFrosty</a>';
194
+ $content .= '</li>';
195
+ $content .= '</ul>';
196
+
197
+ $content .= '</div>';
198
+
199
+ echo $content;
200
+ }
201
+
202
+ /**
203
+ * Generate the custom CSS/JS.
204
+ *
205
+ */
206
+ public function inline_scripts() {
207
+
208
+ if ( isset( $_GET[ $this->id ] ) && intval( $_GET[ $this->id ] ) === 1 ) {
209
+
210
+ if ( isset( $_GET['type'] ) && $_GET['type'] === 'css' ) {
211
+
212
+ if ( !headers_sent() ) {
213
+ header("content-type:text/css");
214
+ }
215
+ ob_start();
216
+ str_replace( ob_end_clean(), '', ob_end_clean() );
217
+ $this->CSS();
218
+ if ( ob_get_level() ) echo ob_get_clean();
219
+ die;
220
+ }
221
+ elseif ( isset( $_GET['type'] ) && $_GET['type'] === 'js' ) {
222
+
223
+ if ( !headers_sent() ) {
224
+ header("content-type:application/x-javascript");
225
+ }
226
+ ob_start();
227
+ str_replace( ob_end_clean(), '', ob_end_clean() );
228
+ $this->jQuery();
229
+ if ( ob_get_level() ) echo ob_get_clean();
230
+ die;
231
+ }
232
+ }
233
+ }
234
+
235
+ public function clean_ob_contents( $contents ) {
236
+ return str_replace( $contents, '', $contents );
237
+ }
238
+
239
+ /**
240
+ * Helper function to return the proper query arg.
241
+ */
242
+ private function add_query_arg( $type = 'js' ) {
243
+ $url = add_query_arg(
244
+ array(
245
+ $this->id => '1',
246
+ 'type' => $type
247
+ ),
248
+ trailingslashit( admin_url() )
249
+ );
250
+ return esc_url( $url );
251
+ }
252
+
253
+ /**
254
+ * Create the CSS.
255
+ *
256
+ * @param bool $remove_wrapper
257
+ */
258
+ private function CSS( $remove_wrapper = true ) {
259
+ if ( !$remove_wrapper ) { ?>
260
+ <style>
261
+ <?php }
262
+ #<?php echo $this->id; ?> .inside {
263
+ margin: 0;
264
+ padding: 0;
265
+ }
266
+ #<?php echo $this->id; ?> .rss-widget {
267
+ border-bottom: 1px solid #eee;
268
+ font-size: 13px;
269
+ padding: 8px 12px 10px;
270
+ }
271
+ <?php if ( !$remove_wrapper ) { ?>
272
+ </style>
273
+ <?php }
274
+ }
275
+
276
+ /**
277
+ * Create the jQuery.
278
+ *
279
+ * @param bool $remove_wrapper
280
+ */
281
+ private function jQuery( $remove_wrapper = true ) {
282
+ if ( !$remove_wrapper ) { ?>
283
+ <script>
284
+ <?php } ?>
285
+ jQuery(document).ready(function($) {
286
+
287
+ var CL_Timeout = 200;
288
+
289
+ if ( !$('#dashboard_primary .rss-widget').eq(1).length ) {
290
+ CL_Timeout = 2500;
291
+ }
292
+
293
+ setTimeout( function() {
294
+ $('#dashboard_primary .rss-widget:eq(1) ul').append('<a class="rsswidget" href="<?php echo $this->get_feed_url(); ?>">FrostyMedia: <?php echo $this->get_feed_title(); ?></a>');
295
+ }, CL_Timeout );
296
+
297
+ });
298
+ <?php if ( !$remove_wrapper ) { ?>
299
+ </script>
300
+ <?php }
301
+ }
302
+
303
  }
304
 
305
  // Only load on the WordPress Dashboard (index.php) page.
306
+ add_action( 'load-index.php', array( 'CL_Dashboard', 'instance' ), 99 );
includes/admin/import-export.php CHANGED
@@ -79,13 +79,13 @@ class CL_Import_Export {
79
  'name' => 'export',
80
  'label' => __( 'Export', CUSTOM_LOGIN_DIRNAME ),
81
  'desc' => sprintf( __( 'This textarea is always pre-filled with the current settings. Copy these settings for import at a later time, or <a href="%s">download</a> them.', CUSTOM_LOGIN_DIRNAME ),
82
- wp_nonce_url(
83
  add_query_arg( array( 'action' => CUSTOM_LOGIN_OPTION . '_download_export' ),
84
  ''
85
  ),
86
  'export',
87
  'cl_nonce'
88
- )
89
  ),
90
  'default' => $this->get_custom_login_settings(),
91
  'type' => 'textarea',
79
  'name' => 'export',
80
  'label' => __( 'Export', CUSTOM_LOGIN_DIRNAME ),
81
  'desc' => sprintf( __( 'This textarea is always pre-filled with the current settings. Copy these settings for import at a later time, or <a href="%s">download</a> them.', CUSTOM_LOGIN_DIRNAME ),
82
+ esc_url( wp_nonce_url(
83
  add_query_arg( array( 'action' => CUSTOM_LOGIN_OPTION . '_download_export' ),
84
  ''
85
  ),
86
  'export',
87
  'cl_nonce'
88
+ ) )
89
  ),
90
  'default' => $this->get_custom_login_settings(),
91
  'type' => 'textarea',
includes/admin/plugins.php CHANGED
File without changes
includes/admin/roost.php DELETED
@@ -1,91 +0,0 @@
1
- <?php
2
- /**
3
- * @package CustomLogin
4
- * @subpackage Classes/CL_Roost
5
- * @author Austin Passy <http://austin.passy.co>
6
- * @copyright Copyright (c) 2015, Austin Passy
7
- * @license http://opensource.org/licenses/gpl-2.0.php GNU Public License
8
- */
9
-
10
- // Exit if accessed directly
11
- if ( !defined( 'ABSPATH' ) ) exit;
12
-
13
- // Is Roost allowed?
14
- if ( !defined( 'CL_ALLOW_ROOST' ) ) return;
15
-
16
- /**
17
- * Roost (push notifications) signup
18
- *
19
- * @access public
20
- * @since 3.2
21
- * @return void
22
- */
23
- class CL_Roost {
24
-
25
- /**
26
- * Roost API Key.
27
- *
28
- * @access private
29
- */
30
- private $api_key;
31
-
32
- /**
33
- * Get things going
34
- *
35
- * @access public
36
- * @return void
37
- */
38
- public function __construct() {
39
-
40
- $this->api_key = '7fe37450d6104fd8929240faa803caf1';
41
-
42
- add_action( 'admin_action_' . CUSTOM_LOGIN_OPTION . '_allow_push', array( $this, 'admin_action_hook' ) );
43
- add_action( CUSTOM_LOGIN_OPTION . '_settings_sidebars', array( $this, 'settings_sidebar' ), 23 );
44
- }
45
-
46
- /**
47
- * Action hook called on 'admin_action_' $_REQUEST
48
- *
49
- * @return void
50
- */
51
- public function admin_action_hook() {
52
-
53
- add_action( 'admin_head', array( $this, 'admin_head' ), 99 );
54
- }
55
-
56
- /**
57
- * Output our script to the admin header.
58
- *
59
- * @ref https://goroost.com/push-notification-documentation#document-2
60
- * @return void
61
- */
62
- public function admin_head() {
63
- echo '<script src="https://cdn.goroost.com/roostjs/' . $this->api_key . '" async></script>';
64
- echo "<script>\n";
65
- echo "var _roost = _roost || [];\n";
66
- echo "_roost.push([\"segments_add\", \"customlogin\"]);\n";
67
- echo "</script>\n";
68
- }
69
-
70
- /**
71
- * Box with a link to output our script.
72
- *
73
- * @return string
74
- */
75
- public function settings_sidebar( $args ) {
76
-
77
- $user_agent = $_SERVER['HTTP_USER_AGENT'];
78
-
79
- if ( !preg_match('/macintosh|mac os x/i', $user_agent ) )
80
- return;
81
-
82
- if ( !preg_match('/safari/i', $user_agent ) )
83
- return;
84
-
85
- $content = sprintf( __( 'Stay up to date with desktop push notifications: <a href="%s">click here</a>, then click "allow".', CUSTOM_LOGIN_DIRNAME ), add_query_arg( 'action', sprintf( '%s_allow_push', CUSTOM_LOGIN_OPTION ), admin_url() ) );
86
-
87
- CUSTOMLOGIN()->settings_api->postbox( 'custom-login-roost', sprintf( __( '%sPush Notifications', CUSTOM_LOGIN_DIRNAME ), '*' ), $content );
88
- }
89
-
90
- }
91
- new CL_Roost;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
includes/admin/tracking.php CHANGED
@@ -144,7 +144,7 @@ class CL_Tracking {
144
 
145
  $this->setup_data( $extra_data );
146
 
147
- $response = wp_remote_post( $this->api, array(
148
  'method' => 'POST',
149
  'timeout' => apply_filters( 'cl_wp_remote_post_timeout', (int) 15 ),
150
  'redirection' => 5,
@@ -186,15 +186,13 @@ class CL_Tracking {
186
 
187
  $options = get_option( $this->option, array() );
188
 
189
- #var_dump( $options ); exit;
190
-
191
  $options['tracking'] = 'on';
192
  update_option( $this->option, $options );
193
  update_option( 'custom_login_hide_tracking_notice', '1' );
194
 
195
  $this->send_checkin( true, array( 'on_activation' => 'admin notice', 'mailchimp_sub' => 'yes' ) );
196
 
197
- wp_redirect( remove_query_arg( 'action' ) );
198
  exit;
199
  }
200
 
@@ -208,13 +206,11 @@ class CL_Tracking {
208
 
209
  $options = get_option( $this->option, array() );
210
 
211
- #var_dump( $options ); exit;
212
-
213
  $options['tracking'] = 'off';
214
  update_option( $this->option, $options );
215
  update_option( 'custom_login_hide_tracking_notice', '1' );
216
 
217
- wp_redirect( remove_query_arg( 'action' ) );
218
  exit;
219
  }
220
 
144
 
145
  $this->setup_data( $extra_data );
146
 
147
+ $response = wp_remote_post( esc_url_raw( $this->api ), array(
148
  'method' => 'POST',
149
  'timeout' => apply_filters( 'cl_wp_remote_post_timeout', (int) 15 ),
150
  'redirection' => 5,
186
 
187
  $options = get_option( $this->option, array() );
188
 
 
 
189
  $options['tracking'] = 'on';
190
  update_option( $this->option, $options );
191
  update_option( 'custom_login_hide_tracking_notice', '1' );
192
 
193
  $this->send_checkin( true, array( 'on_activation' => 'admin notice', 'mailchimp_sub' => 'yes' ) );
194
 
195
+ wp_redirect( esc_url( remove_query_arg( 'action' ) ) );
196
  exit;
197
  }
198
 
206
 
207
  $options = get_option( $this->option, array() );
208
 
 
 
209
  $options['tracking'] = 'off';
210
  update_option( $this->option, $options );
211
  update_option( 'custom_login_hide_tracking_notice', '1' );
212
 
213
+ wp_redirect( esc_url( remove_query_arg( 'action' ) ) );
214
  exit;
215
  }
216
 
includes/class-cl-common.php CHANGED
@@ -11,67 +11,88 @@
11
  if ( !defined( 'ABSPATH' ) ) exit;
12
 
13
  class CL_Common {
14
-
15
- /**
16
- * Fetch RSS items from the feed.
17
- *
18
- * @param int $num Number of items to fetch.
19
- * @param string $feed The feed to fetch.
20
- * @return array|bool False on error, array of RSS items on success.
21
- */
22
- public static function fetch_rss_items( $num, $feed ) {
23
-
24
- if ( !function_exists( 'fetch_feed' ) )
25
- include_once( ABSPATH . WPINC . '/feed.php' );
26
-
27
- $rss = fetch_feed( $feed );
28
-
29
- // Bail if feed doesn't work
30
- if ( !$rss || is_wp_error( $rss ) )
31
- return false;
32
-
33
- $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
34
-
35
- // If the feed was erroneous
36
- if ( !$rss_items ) {
37
- $md5 = md5( $feed );
38
- delete_transient( 'feed_' . $md5 );
39
- delete_transient( 'feed_mod_' . $md5 );
40
- $rss = fetch_feed( $feed );
41
- $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
42
- }
43
-
44
- return $rss_items;
45
- }
46
-
47
- /**
48
- * Helper function to return the data URI.
49
- *
50
- * @return string
51
- */
52
- public static function get_data_uri( $_image, $mime = '' ) {
53
-
54
- $image = trailingslashit( CUSTOM_LOGIN_URL );
55
- $image .= $_image;
56
-
57
- $data = file_exists( $image ) ? base64_encode( file_get_contents( $image ) ) : '';
58
-
59
- return !empty( $data ) ? 'data:image/' . $mime . ';base64,' . $data : '';
60
- }
61
-
62
- /**
63
- * Get's the cached transient key.
64
- *
65
- * @return string
66
- */
67
- public static function get_transient_key( $input ) {
68
-
69
- $len = is_multisite() ? 40 : 45;
70
- $key = 'custom_login_';
71
- $key = $key . substr( md5( $input ), 0, $len - strlen( $key ) );
72
-
73
- return $key;
74
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
 
76
  /**
77
  * Get the value of a settings field
@@ -79,119 +100,119 @@ class CL_Common {
79
  * @param string $option settings field name
80
  * @param string $subsection the section name this field belongs to
81
  * @param string $default default text if it's not found
82
- *
83
  * @return string
84
  */
85
  public static function get_option( $option, $subsection = '', $default = '' ) {
86
-
87
- $section = CUSTOM_LOGIN_OPTION . '_' . $subsection;
88
- $setting = get_option( $section, array() );
89
-
90
- if ( isset( $setting[$option] ) ) {
91
- return $setting[$option];
92
- }
93
-
94
- return $default;
95
  }
96
 
97
  /**
98
- * Get all values of a settings section
99
- *
100
- * @param string $subsection the section name this field belongs to
101
- *
102
- * @return array
103
- */
104
  public static function get_options( $subsection = 'design' ) {
105
-
106
- $section = CUSTOM_LOGIN_OPTION . '_' . $subsection;
107
- $settings = get_option( $section, array() );
108
-
109
- return $settings;
110
  }
111
-
112
- /**
113
- * Helper function to make remote calls
114
- *
115
- * @since 3.0.0
116
- * @updated 3.0.8
117
- */
118
  public static function wp_remote_get( $url = false, $transient_key, $expiration = null, $user_agent = 'WordPress' ) {
119
-
120
- if ( !$url ) return false;
121
-
122
- if ( 'WordPress' == $user_agent ) {
123
- global $wp_version;
124
- $_version = $wp_version;
125
- }
126
- else {
127
- $_version = CUSTOM_LOGIN_VERSION;
128
- }
129
-
130
- $expiration = null !== $expiration ? $expiration : WEEK_IN_SECONDS;
131
-
132
- # delete_transient( $transient_key );
133
- if ( false === ( $json = get_transient( $transient_key ) ) ) {
134
-
135
- $response = wp_remote_get(
136
- esc_url( $url ),
137
- array(
138
- 'timeout' => apply_filters( 'cl_wp_remote_get_timeout', (int) 15 ),
139
- 'sslverify' => false,
140
- 'user-agent' => $user_agent . '/' . $_version . '; ' . get_bloginfo( 'url' ),
141
- )
142
- );
143
-
144
- if ( !is_wp_error( $response ) ) {
145
-
146
- if ( isset( $response['body'] ) && strlen( $response['body'] ) > 0 ) {
147
-
148
- $json = json_decode( wp_remote_retrieve_body( $response ) );
149
-
150
- // Discount, double check?
151
- if ( is_wp_error( $json ) )
152
- return false;
153
-
154
- // Cache the results for '$expiration'
155
- set_transient( $transient_key, $json, $expiration );
156
-
157
- // Return the data
158
- return $json;
159
- }
160
- }
161
- else {
162
- return false; // Error, lets return!
163
- }
164
- }
165
-
166
- return $json;
167
- }
168
-
169
- /**
170
- * Helper function check if we're on our settings page.
171
- *
172
- * @since 3.0.9
173
- */
174
- public static function is_settings_page( $page = '' ) {
175
-
176
- $return = true;
177
- $screen = get_current_screen();
178
-
179
- if ( null !== $screen ) {
180
-
181
- if ( $screen->id != ( CUSTOMLOGIN()->menu_page ) )
182
- $return = false;
183
- }
184
- else {
185
- global $pagenow;
186
-
187
- if ( 'options-general.php' != $pagenow )
188
- $return = false;
189
-
190
- if ( !isset( $_GET['page'] ) || CUSTOM_LOGIN_DIRNAME != $_GET['page'] )
191
- $return = false;
192
- }
193
-
194
- return $return;
195
- }
196
-
197
- }
11
  if ( !defined( 'ABSPATH' ) ) exit;
12
 
13
  class CL_Common {
14
+
15
+ /**
16
+ * Return the RSS feed object.
17
+ *
18
+ * @param string $feed The feed to fetch.
19
+ *
20
+ * @return object
21
+ */
22
+ public static function fetch_feed( $feed ) {
23
+
24
+ if ( !function_exists( 'fetch_feed' ) ) {
25
+ include_once( ABSPATH . WPINC . '/feed.php' );
26
+ }
27
+
28
+ return fetch_feed( $feed );
29
+ }
30
+
31
+ /**
32
+ * Fetch RSS items from the feed.
33
+ *
34
+ * @param int $num Number of items to fetch.
35
+ * @param string $feed The feed to fetch.
36
+ * @return array|bool False on error, array of RSS items on success.
37
+ */
38
+ public static function fetch_rss_items( $num, $feed ) {
39
+
40
+ $rss = self::fetch_feed( $feed );
41
+ $maxitems = 0;
42
+
43
+ if ( !is_wp_error( $rss ) ) { // Checks that the object is created correctly
44
+
45
+ // Figure out how many total items there are, but limit it to 5.
46
+ $maxitems = $rss->get_item_quantity( $num );
47
+
48
+ // Build an array of all the items, starting with element 0 (first element).
49
+ $rss_items = $rss->get_items( 0, $maxitems );
50
+
51
+ }
52
+ else {
53
+ return false;
54
+ }
55
+
56
+ // If the feed was erroneous
57
+ if ( !$rss_items || $maxitems == 0 ) {
58
+ $md5 = md5( $feed );
59
+ delete_transient( 'feed_' . $md5 );
60
+ delete_transient( 'feed_mod_' . $md5 );
61
+ $rss = self::fetch_feed( $feed );
62
+ $rss_items = $rss->get_items( 0, $rss->get_item_quantity( $num ) );
63
+ }
64
+
65
+ return $rss_items;
66
+ }
67
+
68
+ /**
69
+ * Helper function to return the data URI.
70
+ *
71
+ * @return string
72
+ */
73
+ public static function get_data_uri( $_image, $mime = '' ) {
74
+
75
+ $image = trailingslashit( CUSTOM_LOGIN_URL );
76
+ $image .= $_image;
77
+
78
+ $data = file_exists( $image ) ? base64_encode( file_get_contents( $image ) ) : '';
79
+
80
+ return !empty( $data ) ? 'data:image/' . $mime . ';base64,' . $data : '';
81
+ }
82
+
83
+ /**
84
+ * Get's the cached transient key.
85
+ *
86
+ * @return string
87
+ */
88
+ public static function get_transient_key( $input ) {
89
+
90
+ $len = is_multisite() ? 40 : 45;
91
+ $key = 'custom_login_';
92
+ $key = $key . substr( md5( $input ), 0, $len - strlen( $key ) );
93
+
94
+ return $key;
95
+ }
96
 
97
  /**
98
  * Get the value of a settings field
100
  * @param string $option settings field name
101
  * @param string $subsection the section name this field belongs to
102
  * @param string $default default text if it's not found
103
+ *
104
  * @return string
105
  */
106
  public static function get_option( $option, $subsection = '', $default = '' ) {
107
+
108
+ $section = CUSTOM_LOGIN_OPTION . '_' . $subsection;
109
+ $setting = get_option( $section, array() );
110
+
111
+ if ( isset( $setting[$option] ) ) {
112
+ return $setting[$option];
113
+ }
114
+
115
+ return $default;
116
  }
117
 
118
  /**
119
+ * Get all values of a settings section
120
+ *
121
+ * @param string $subsection the section name this field belongs to
122
+ *
123
+ * @return array
124
+ */
125
  public static function get_options( $subsection = 'design' ) {
126
+
127
+ $section = CUSTOM_LOGIN_OPTION . '_' . $subsection;
128
+ $settings = get_option( $section, array() );
129
+
130
+ return $settings;
131
  }
132
+
133
+ /**
134
+ * Helper function to make remote calls
135
+ *
136
+ * @since 3.0.0
137
+ * @updated 3.0.8
138
+ */
139
  public static function wp_remote_get( $url = false, $transient_key, $expiration = null, $user_agent = 'WordPress' ) {
140
+
141
+ if ( !$url ) return false;
142
+
143
+ if ( 'WordPress' == $user_agent ) {
144
+ global $wp_version;
145
+ $_version = $wp_version;
146
+ }
147
+ else {
148
+ $_version = CUSTOM_LOGIN_VERSION;
149
+ }
150
+
151
+ $expiration = null !== $expiration ? $expiration : WEEK_IN_SECONDS;
152
+
153
+ # delete_transient( $transient_key );
154
+ if ( false === ( $json = get_transient( $transient_key ) ) ) {
155
+
156
+ $response = wp_remote_get(
157
+ esc_url( $url ),
158
+ array(
159
+ 'timeout' => apply_filters( 'cl_wp_remote_get_timeout', (int) 15 ),
160
+ 'sslverify' => false,
161
+ 'user-agent' => $user_agent . '/' . $_version . '; ' . get_bloginfo( 'url' ),
162
+ )
163
+ );
164
+
165
+ if ( !is_wp_error( $response ) ) {
166
+
167
+ if ( isset( $response['body'] ) && strlen( $response['body'] ) > 0 ) {
168
+
169
+ $json = json_decode( wp_remote_retrieve_body( $response ) );
170
+
171
+ // Discount, double check?
172
+ if ( is_wp_error( $json ) )
173
+ return false;
174
+
175
+ // Cache the results for '$expiration'
176
+ set_transient( $transient_key, $json, $expiration );
177
+
178
+ // Return the data
179
+ return $json;
180
+ }
181
+ }
182
+ else {
183
+ return false; // Error, lets return!
184
+ }
185
+ }
186
+
187
+ return $json;
188
+ }
189
+
190
+ /**
191
+ * Helper function check if we're on our settings page.
192
+ *
193
+ * @since 3.0.9
194
+ */
195
+ public static function is_settings_page( $page = '' ) {
196
+
197
+ $return = true;
198
+ $screen = get_current_screen();
199
+
200
+ if ( null !== $screen ) {
201
+
202
+ if ( $screen->id != ( CUSTOMLOGIN()->menu_page ) )
203
+ $return = false;
204
+ }
205
+ else {
206
+ global $pagenow;
207
+
208
+ if ( 'options-general.php' != $pagenow )
209
+ $return = false;
210
+
211
+ if ( !isset( $_GET['page'] ) || CUSTOM_LOGIN_DIRNAME != $_GET['page'] )
212
+ $return = false;
213
+ }
214
+
215
+ return $return;
216
+ }
217
+
218
+ }
includes/class-cl-cron.php CHANGED
File without changes
includes/class-cl-extensions.php CHANGED
@@ -217,7 +217,7 @@ class CL_Extensions {
217
  $html .= '<div class="col span_1_of_3 eddri-addon">';
218
  $html .= '<div class="eddri-addon-container">';
219
  $html .= '<div class="eddri-img-wrap">';
220
- $html .= '<a href="' . add_query_arg( array( 'utm_source' => 'wordpressorg', 'utm_medium' => 'custom-login', 'utm_campaign' => 'eddri' ), $extension['url'] ) . '" target="_blank"><img class="eddri-thumbnail" src="' . $extension['image'] . '"></a>';
221
  $html .= '<p>' . $extension['description'] . '</p>';
222
  $html .= '</div>';
223
 
@@ -230,9 +230,9 @@ class CL_Extensions {
230
  $html .= '<ul>';
231
  foreach( $extension['links'] as $link ) {
232
  $html .= '<li>';
233
- $html .= $link['description'] . ' (' . $link['price'] . '): <a href="' . add_query_arg( array( 'edd_action' => 'straight_to_gateway', 'download_id' => $link['download_id'], 'edd_options[price_id]' => $link['price_id'] ), $this->checkout_url ) . '">PayPal</a>';
234
  $html .= ' | ';
235
- $html .= '<a href="' . add_query_arg( array( 'edd_action' => 'add_to_cart', 'download_id' => $link['download_id'], 'edd_options[price_id]' => $link['price_id'] ), $this->checkout_url ) . '">Credit Card</a>';
236
  $html .= '</li>';
237
  }
238
  $html .= '</ul>';
217
  $html .= '<div class="col span_1_of_3 eddri-addon">';
218
  $html .= '<div class="eddri-addon-container">';
219
  $html .= '<div class="eddri-img-wrap">';
220
+ $html .= '<a href="' . esc_url( add_query_arg( array( 'utm_source' => 'wordpressorg', 'utm_medium' => 'custom-login', 'utm_campaign' => 'eddri' ), $extension['url'] ) ) . '" target="_blank"><img class="eddri-thumbnail" src="' . $extension['image'] . '"></a>';
221
  $html .= '<p>' . $extension['description'] . '</p>';
222
  $html .= '</div>';
223
 
230
  $html .= '<ul>';
231
  foreach( $extension['links'] as $link ) {
232
  $html .= '<li>';
233
+ $html .= $link['description'] . ' (' . $link['price'] . '): <a href="' . esc_url( add_query_arg( array( 'edd_action' => 'straight_to_gateway', 'download_id' => $link['download_id'], 'edd_options[price_id]' => $link['price_id'] ), $this->checkout_url ) ) . '">PayPal</a>';
234
  $html .= ' | ';
235
+ $html .= '<a href="' . esc_url( add_query_arg( array( 'edd_action' => 'add_to_cart', 'download_id' => $link['download_id'], 'edd_options[price_id]' => $link['price_id'] ), $this->checkout_url ) ) . '">Credit Card</a>';
236
  $html .= '</li>';
237
  }
238
  $html .= '</ul>';
includes/class-cl-scripts-styles.php CHANGED
File without changes
includes/class-cl-settings-api.php CHANGED
@@ -1,174 +1,188 @@
1
  <?php
2
 
3
  // Exit if accessed directly
4
- if ( ! defined( 'ABSPATH' ) ) exit;
 
 
5
 
6
  /**
7
  * Custom Login Settings API
8
  */
9
  class CL_Settings_API {
10
-
11
- /**
12
- * Version
13
- */
14
- var $api_version = '2.0.3';
15
-
16
- /**
17
- * @var array
18
- */
19
- private $settings_sections = array();
20
- private $settings_fields = array();
21
- private $settings_sidebars = array();
22
- private $localize_array = array();
23
-
24
- /**
25
- * @var array
26
- */
27
- private $settings = array();
28
-
29
- /**
30
- * Fire away captain!
31
- */
32
  public function __construct( $sections = array(), $fields = array(), $args = array() ) {
33
-
34
- $this->settings = $args;
35
-
36
- if ( !empty( $sections ) ) {
37
- $this->set_sections( $sections );
38
- }
39
-
40
- if ( !empty( $fields ) ) {
41
- $this->set_fields( $fields );
42
- }
43
-
44
- add_action( 'load-' . $this->settings['menu_page'], array( $this, 'init' ), 89 );
45
- add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
46
- add_action( 'admin_footer', array( $this, 'wp_localize_script' ), 99 );
47
- add_action( 'wp_ajax_' . $this->settings['prefix'] . '_get_form', array( $this, 'get_form' ), 99 );
48
- }
49
-
50
- /**
51
- * Fire any actions needed a little late
52
- *
53
- * @return void
54
- */
55
- public function init() {
56
-
57
- add_action( 'admin_notices', array( $this, 'upgrade_notices' ) );
58
- add_action( $this->settings['prefix'] . '_sticky_admin_notice', array( $this, 'sticky_admin_notice_social_links' ), 10 );
59
- add_action( $this->settings['prefix'] . '_before_submit_button', array( $this, 'is_active_toggle' ), 10 );
60
- add_action( $this->settings['prefix'] . '_settings_sidebars', array( $this, 'about_the_author' ), 19 );
61
- add_action( $this->settings['prefix'] . '_settings_sidebars', array( $this, 'sidebar_feed' ), 20 );
62
- }
63
-
64
- /**
65
- * Enqueue scripts and styles
66
- */
 
 
 
 
67
  public function admin_enqueue_scripts( $hook ) {
68
- if ( 'settings_page_' . $this->settings['domain'] !== $hook )
69
- return;
70
-
71
- /* Core */
72
- wp_enqueue_media();
73
- wp_enqueue_script( array( 'wp-color-picker', 'plugin-install' ) );
74
- wp_enqueue_style( array( 'wp-color-picker', 'thickbox', 'plugin-install' ) );
75
-
76
- /* jQuery Chosen */
77
- wp_enqueue_script( 'chosen', plugins_url( 'js/chosen.jquery.min.js', $this->settings['file'] ), array( 'jquery' ), '1.3.0', true );
78
- wp_enqueue_style( 'chosen', plugins_url( 'css/chosen/chosen.min.css', $this->settings['file'] ), null, '1.3.0', 'screen' );
79
-
80
- /* jQuery Sticky */
81
- wp_enqueue_script( 'sticky', plugins_url( 'js/jquery.sticky.js', $this->settings['file'] ), array( 'jquery' ), '1.0.0', true );
82
-
83
- /* Ace */
84
- wp_enqueue_script( 'ace', plugins_url( 'js/ace/src-min-noconflict/ace.js', $this->settings['file'] ), null, '20.12.14', true );
85
-
86
- /* Dashicons */
87
- wp_enqueue_style( 'dashicons' );
88
-
89
- /* Admin */
90
- wp_enqueue_script( $this->settings['domain'], plugins_url( 'js/admin.js', $this->settings['file'] ), array( 'jquery', 'jquery-form' ), $this->settings['version'], true );
91
- wp_enqueue_style( $this->settings['domain'], plugins_url( 'css/admin.css', $this->settings['file'] ), false, $this->settings['version'], 'screen' );
92
-
93
- do_action( "{$this->settings['domain']}_admin_enqueue_scripts" );
94
- }
95
-
96
- /**
97
- * Localize our script array.
98
- */
 
 
 
 
99
  public function wp_localize_script() {
100
- $this->localize_array['prefix'] = $this->settings['prefix'];
101
- $this->localize_array['blog_id'] = get_current_blog_id();
102
- $this->localize_array['nonce'] = wp_create_nonce( $this->settings['nonce'] );
103
- wp_localize_script( $this->settings['domain'], 'cl_settings_api', $this->localize_array );
104
  }
105
 
106
- /**
107
- * Set settings sections
108
- *
109
- * @param array $sections setting sections array
110
- */
111
  public function set_sections( $sections ) {
112
-
113
- $sections = apply_filters( $this->settings['prefix'] . '_add_settings_sections', $sections );
114
- $this->settings_sections = $sections;
115
- return $this;
 
116
  }
117
 
118
  /**
119
  * Add a single section
120
  *
121
- * @param array $section
122
  */
123
  public function add_section( $section ) {
124
-
125
- $this->settings_sections[] = $section;
126
- return $this;
 
127
  }
128
 
129
  /**
130
  * Set settings fields
131
  *
132
- * @param array $fields settings fields array
133
  */
134
  public function set_fields( $fields ) {
135
-
136
- $fields = apply_filters( $this->settings['prefix'] . '_add_settings_fields', $fields );
137
- $this->settings_fields = $fields;
138
- return $this;
 
139
  }
140
 
141
  /**
142
  * Add a single field
143
  *
144
- * @param array $section
145
- * @param array $field
146
  */
147
  public function add_field( $section, $field ) {
148
-
149
- $defaults = array(
150
- 'name' => '',
151
- 'label' => '',
152
- 'desc' => '',
153
- 'type' => 'text',
154
- );
155
 
156
- $args = wp_parse_args( $field, $defaults );
157
- $this->settings_fields[$section][] = $args;
158
- return $this;
 
 
 
 
 
 
 
 
159
  }
160
 
161
  /**
162
  * Add a single section
163
  *
164
- * @param array $section
165
  */
166
  public function add_sidebar( $sidebar = array() ) {
167
-
168
- $sidebar = apply_filters( $this->settings['prefix'] . '_add_settings_sidebar', $sidebar );
169
- if ( !empty( $sidebar ) ) {
170
- $this->settings_sidebars[] = $sidebar;
171
- }
172
  }
173
 
174
  /**
@@ -180,474 +194,487 @@ class CL_Settings_API {
180
  * registers them to WordPress and ready for use.
181
  */
182
  public function admin_init() {
183
-
184
- //register settings sections
185
- foreach ( $this->settings_sections as $section ) {
186
- if ( false == get_option( $section['id'] ) && ( isset( $section['option'] ) && false !== $section['option'] ) ) {
187
- add_option( $section['id'] );
188
- }
189
-
190
- add_settings_section( $section['id'], $section['title'], '__return_false', $section['id'] );
191
- }
192
-
193
- //register settings fields
194
- foreach ( $this->settings_fields as $section => $field ) {
195
- foreach ( $field as $option ) {
196
-
197
- $type = isset( $option['type'] ) ? $option['type'] : 'text';
198
-
199
- $args = array(
200
- 'id' => $option['name'],
201
- 'desc' => isset( $option['desc'] ) ? $option['desc'] : '',
202
- 'name' => $option['label'],
203
- 'section' => $section,
204
- 'size' => isset( $option['size'] ) ? $option['size'] : null,
205
- 'options' => isset( $option['options'] ) ? $option['options'] : '',
206
- 'default' => isset( $option['default'] ) ? $option['default'] : '',
207
- 'sanitize' => isset( $option['sanitize'] ) ? $option['sanitize'] : '',
208
- 'class' => isset( $option['class'] ) ? $option['class'] : $this,
209
- );
210
- $args = wp_parse_args( $args, $option );
211
-
212
- add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], array( $args['class'], 'callback_' . $type ), $section, $section, $args );
213
- }
214
- }
215
-
216
- // creates our settings in the options table
217
- foreach ( $this->settings_sections as $section ) {
218
- register_setting( $section['id'], $section['id'], array( $this, 'sanitize_options' ) );
219
- }
 
 
 
220
  }
221
 
222
  /**
223
  * Displays a text field for a settings field
224
  *
225
- * @param array $args settings field args
226
- * @updated 2.0.2
 
227
  */
228
  function callback_text( $args ) {
229
 
230
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
231
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
232
- $type = isset( $args['type'] ) && !is_null( $args['type'] ) ? $args['type'] : 'text';
233
-
234
- $html = sprintf( '<input type="%1$s" class="%2$s-text" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s">', $type, $size, $args['section'], $args['id'], $value );
235
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
236
-
237
- echo $html;
238
  }
239
 
240
  /**
241
  * Displays a text field for a settings field
242
  *
243
- * @param array $args settings field args
244
- * @since 2.0.2
 
245
  */
246
  function callback_text_number( $args ) {
247
-
248
- $args['type'] = 'number';
249
- $this->callback_text( $args );
250
  }
251
 
252
  /**
253
  * Displays a text field for a settings field
254
  *
255
- * @param array $args settings field args
256
  */
257
  function callback_text_array( $args ) {
258
-
259
- $value = $this->get_option( $args['id'], $args['section'], $args['default'] );
260
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
261
-
262
- $html = '<ul style="margin-top:0">';
263
-
264
- if ( is_array( $value ) ) {
265
- foreach ( $value as $key => $val ) {
266
- $html .= '<li>';
267
- $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s][]" value="%4$s" data-key="%5$s">', $size, $args['section'], $args['id'], esc_attr( $val ), $key );
268
- $html .= sprintf( '<a href="#" class="button dodelete-%1$s[%2$s]">-</a>', $args['section'], $args['id'] );
269
- $html .= '</li>';
270
- }
271
- }
272
- else {
273
- $html .= '<li>';
274
- $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s][]" value="%4$s" data-key="0" data-array="false">', $size, $args['section'], $args['id'], esc_attr( $value ) );
275
- $html .= sprintf( '<a href="#" class="button dodelete-%1$s[%2$s]">-</a>', $args['section'], $args['id'] );
276
- $html .= '</li>';
277
- }
278
-
279
- $html .= '</ul>';
280
- $html .= sprintf( '<a href="#" class="button docopy-%1$s[%2$s]">+</a>', $args['section'], $args['id'] );
281
-
282
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
283
-
284
- echo $html;
285
- }
286
-
287
- /**
288
- * Displays a text field for a settings field
289
- *
290
- * @param array $args settings field args
291
- */
292
  function callback_colorpicker( $args ) {
293
-
294
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
295
- $check = esc_attr( $this->get_option( $args['id'] . '_checkbox', $args['section'], $args['default'] ) );
296
- $opacity = esc_attr( $this->get_option( $args['id'] . '_opacity', $args['section'], $args['default'] ) );
297
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'small';
298
- $options = array( '1', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1', '0', );
299
- $class = 'on' != $check ? ' hidden' : '';
300
-
301
- /* Localize the array */
302
- $this->localize_array['callback_colorpicker'][] = array( 'id' => $args['id'], 'section' => $args['section'] );
303
-
304
- /* Color */
305
- $html = '<div class="cl-colorpicker-wrap">';
306
- $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" style="float:left">', $size, $args['section'], $args['id'], $value );
307
-
308
- /* Allow Opacity */
309
- $html .= '<div class="checkbox-wrap">';
310
- $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" >', $args['section'], $args['id'] . '_checkbox' );
311
- $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s >', $args['section'], $args['id'] . '_checkbox', $check, checked( $check, 'on', false ) );
312
- $html .= sprintf( __( '<label for="%1$s[%2$s]">Opacity</label>', $this->settings['domain'] ), $args['section'], $args['id'] . '_checkbox' );
313
- $html .= '</div>';
314
-
315
- /* Opacity */
316
- $html .= sprintf( '<select class="%1$s%4$s" name="%2$s[%3$s]" id="%2$s[%3$s]" style="margin-left:70px;">', $size, $args['section'], $args['id'] . '_opacity', $class );
317
- foreach ( $options as $key ) {
318
- $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $opacity, $key, false ), $key );
319
- }
320
- $html .= '</select>';
321
- $html .= '<br class="clear">';
322
- $html .= '</div>';
323
-
324
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
325
-
326
- echo $html;
327
  }
328
 
329
  /**
330
  * Displays a checkbox for a settings field
331
  *
332
- * @param array $args settings field args
333
  */
334
  function callback_checkbox( $args ) {
335
 
336
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
337
-
338
- $html = '<div class="checkbox-wrap">';
339
- $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" >', $args['section'], $args['id'] );
340
- $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s >', $args['section'], $args['id'], $value, checked( $value, 'on', false ) );
341
- $html .= sprintf( '<label for="%1$s[%2$s]"></label>', $args['section'], $args['id'] );
342
- $html .= '</div>';
343
-
344
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
345
 
346
- echo $html;
 
 
347
  }
348
 
349
  /**
350
  * Displays a multicheckbox a settings field
351
  *
352
- * @param array $args settings field args
353
  */
354
  function callback_multicheck( $args ) {
355
 
356
- $value = $this->get_option( $args['id'], $args['section'], $args['default'] );
357
-
358
- $html = '<div class="checkbox-wrap">';
359
- $html .= '<ul>';
360
- foreach ( $args['options'] as $key => $label ) {
361
- $checked = isset( $value[$key] ) ? $value[$key] : '0';
362
- $html .= '<li>';
363
- $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s][%3$s]" name="%1$s[%2$s][%3$s]" value="%3$s"%4$s >', $args['section'], $args['id'], $key, checked( $checked, $key, false ) );
364
- $html .= sprintf( '<label for="%1$s[%2$s][%4$s]" title="%3$s"> %3$s</label>', $args['section'], $args['id'], $label, $key );
365
- $html .= '</li>';
366
- }
367
- $html .= '</ul>';
368
- $html .= '</div>';
369
-
370
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
371
-
372
- echo $html;
373
  }
374
 
375
  /**
376
  * Displays a multicheckbox a settings field
377
  *
378
- * @param array $args settings field args
379
  */
380
  function callback_radio( $args ) {
381
 
382
- $value = $this->get_option( $args['id'], $args['section'], $args['default'] );
383
-
384
- $html = '<div class="radio-wrap">';
385
- $html .= '<ul>';
386
- foreach ( $args['options'] as $key => $label ) {
387
- $html .= '<li>';
388
- $html .= sprintf( '<input type="radio" class="radio" id="%1$s[%2$s][%3$s]" name="%1$s[%2$s]" value="%3$s"%4$s >', $args['section'], $args['id'], $key, checked( $value, $key, false ) );
389
- $html .= sprintf( '<label for="%1$s[%2$s][%4$s]" title="%3$s"> %3$s</label><br>', $args['section'], $args['id'], $label, $key );
390
- $html .= '</li>';
391
- }
392
- $html .= '</ul>';
393
- $html .= '</div>';
394
-
395
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
396
-
397
- echo $html;
398
  }
399
 
400
  /**
401
  * Displays a selectbox for a settings field
402
  *
403
- * @param array $args settings field args
404
  */
405
  function callback_select( $args ) {
406
 
407
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
408
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
409
-
410
- /* Localize the array */
411
- $this->localize_array['callback_select'][] = array( 'id' => $args['id'], 'section' => $args['section'] );
412
-
413
- $html = sprintf( '<select class="%1$s" name="%2$s[%3$s]" id="%2$s[%3$s]">', $size, $args['section'], $args['id'] );
414
- foreach ( $args['options'] as $key => $label ) {
415
- $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $value, $key, false ), $label );
416
- }
417
- $html .= sprintf( '</select>' );
418
-
419
- $html .= !empty( $args['desc'] ) ? sprintf( '<br><span class="description"> %s</span>', $args['desc'] ) : '';
420
 
421
- echo $html;
 
 
 
 
 
 
 
 
 
 
 
422
  }
423
 
424
  /**
425
  * Displays a textarea for a settings field
426
  *
427
- * @param array $args settings field args
428
  */
429
  function callback_textarea( $args ) {
430
 
431
- $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
432
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
433
- $extra = isset( $args['extra'] ) && is_array( $args['extra'] ) ? $args['extra'] : null;
434
- $param = '';
435
-
436
- if ( null !== $extra ) {
437
- foreach( $extra as $p_key => $p_value ) {
438
- $param .= $p_key . '="' . $p_value . '"';
439
- }
440
- }
441
-
442
- $html = sprintf( '<textarea rows="5" cols="55" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]"%5$s>%4$s</textarea>', $size, $args['section'], $args['id'], stripslashes( $value ), $param );
443
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
444
-
445
- echo $html;
446
  }
447
 
448
  /**
449
  * Displays a HTML for a settings field
450
  *
451
- * @param array $args settings field args
452
  */
453
  function callback_html( $args ) {
454
- static $counter = 0;
455
-
456
- $html = isset( $args['desc'] ) ? sprintf( '<div class="section-%s-%d">%s</div><hr>', $args['section'], $counter, $args['desc'] ) : '';
457
- $counter++;
458
-
459
- echo $html;
460
  }
461
 
462
  /**
463
  * Displays raw HTML for a settings field
464
  *
465
- * @param array $args settings field args
466
  */
467
  function callback_raw( $args ) {
468
-
469
- $html = isset( $args['desc'] ) ? sprintf( '<div class="raw-html">%s</div>', $args['desc'] ) : '';
470
-
471
- echo $html;
472
  }
473
 
474
  /**
475
  * Displays a rich text textarea for a settings field
476
  *
477
- * @param array $args settings field args
478
  */
479
  function callback_wysiwyg( $args ) {
480
 
481
- $value = wpautop( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
482
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : '500px';
483
-
484
- $html = sprintf( '<div style="width: %s">', $size );
485
-
486
- ob_start();
487
- wp_editor( $value, $args['section'] . '[' . $args['id'] . ']', array( 'teeny' => true, 'textarea_rows' => 10 ) );
488
-
489
- $html .= ob_get_clean();
490
- $html .= '</div>';
491
-
492
- $html .= !empty( $args['desc'] ) ? sprintf( '<br><span class="description"> %s</span>', $args['desc'] ) : '';
493
-
494
- echo $html;
 
 
 
495
  }
496
 
497
  /**
498
  * Displays a file upload field for a settings field
499
  *
500
- * @param array $args settings field args
501
  */
502
  function callback_file( $args ) {
503
- static $counter = 0;
504
-
505
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
506
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
507
- $id = $args['section'] . '[' . $args['id'] . ']';
508
-
509
- /* Localize the array */
510
- $this->localize_array['callback_file'][] = array( 'id' => $args['id'], 'section' => $args['section'] );
511
-
512
- $html = sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s">', $size, $args['section'], $args['id'], $value );
513
- $html .= '<input type="button" class="button '. $args['id'] .'-browse" id="'. $id .'_button" value="Browse" style="margin-left:5px" >';
514
- $html .= '<input type="button" class="button '. $args['id'] .'-clear" id="'. $id .'_clear" value="Clear" style="margin-left:5px" >';
515
-
516
- $html .= !empty( $args['desc'] ) ? sprintf( '<br><span class="description"> %s</span>', $args['desc'] ) : '';
517
-
518
- /* Image */
519
- $html .= '<div id="' . $id . '_preview" class="' . $id . '_preview">';
520
- if ( $value != '' ) {
521
- $check_image = preg_match( '/(^.*\.jpg|jpeg|png|gif|ico*)/i', $value );
522
- if ( $check_image ) {
523
- $html .= '<div class="img-wrapper">';
524
- $html .= '<img src="' . $value . '" alt="" >';
525
- $html .= '<a href="#" class="remove_file_button" rel="' . $id . '">Remove Image</a>';
526
- $html .= '</div>';
527
- }
528
- }
529
- $html .= '</div>';
530
-
531
- echo $html;
532
  }
533
 
534
  /**
535
  * Displays a password field for a settings field
536
  *
537
- * @param array $args settings field args
538
  */
539
  function callback_password( $args ) {
540
 
541
- $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
542
- $size = isset( $args['size'] ) && !is_null( $args['size'] ) ? $args['size'] : 'regular';
543
-
544
- $html = sprintf( '<input type="password" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s">', $size, $args['section'], $args['id'], $value );
545
- $html .= !empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
546
-
547
- echo $html;
548
  }
549
 
550
  /**
551
  * Sanitize callback for Settings API
552
- */
553
  function sanitize_options( $options ) {
554
-
555
- if ( is_null( $options ) )
556
- return $options;
557
-
558
- do_action( $this->settings['prefix'] . '_before_sanitize_options', $options );
559
-
560
- foreach( $options as $option_slug => $option_value ) {
561
- $sanitize_callback = $this->get_sanitize_callback( $option_slug );
562
-
563
- // If callback is set, call it
564
- if ( $sanitize_callback ) {
565
- $options[ $option_slug ] = call_user_func( $sanitize_callback, $option_value );
566
- continue;
567
- }
568
-
569
- // Treat everything that's not an array as a string
570
- if ( !is_array( $option_value ) ) {
571
- $options[ $option_slug ] = sanitize_text_field( $option_value );
572
- continue;
573
- }
574
- }
575
-
576
- do_action( $this->settings['prefix'] . '_after_sanitize_options', $options );
577
-
578
- return $options;
579
- }
580
-
 
581
  /**
582
  * Get sanitization callback for given option slug
583
- *
584
  * @param string $slug option slug
585
- *
586
  * @return mixed string or bool false
587
- */
588
  function get_sanitize_callback( $slug = '' ) {
589
-
590
- if ( empty( $slug ) )
591
- return false;
592
-
593
- // Iterate over registered fields and see if we can find proper callback
594
- foreach( $this->settings_fields as $section => $options ) {
595
- foreach ( $options as $option ) {
596
- if ( $option['name'] != $slug )
597
- continue;
598
- // Return the callback name
599
- return isset( $option['sanitize'] ) && is_callable( $option['sanitize'] ) ? $option['sanitize'] : false;
600
- }
601
- }
602
- return false;
603
- }
604
-
605
- /**
606
- * Outpute our settings HTML
607
- *
608
- */
609
- public function settings_html() { ?>
610
-
611
- <div class="cl-container">
612
-
613
- <div class="cl-header">
614
- <h3><?php _e( 'Custom Login', $this->settings['domain'] ); ?></h3>
615
- <span><?php echo $this->settings['version']; ?></span>
616
- <div>
617
- <?php echo sprintf( __( 'A %s plugin', $this->settings['domain'] ), '<strong><a href="https://frosty.media/" target="_blank">Frosty Media</a></strong>' ); ?>
618
- &nbsp;&nbsp;|&nbsp;&nbsp;<a href="https://twitter.com/Frosty_Media"><span class="dashicons dashicons-twitter"></span></a>
619
- </div>
620
- </div><!-- #cl-header -->
621
-
622
- <div id="cl-notices">
623
- <h2></h2>
624
- </div><!-- #cl-text -->
625
-
626
- <div id="cl-sticky">
627
- <div class="wrap">
628
- <div id="sticky-admin-notice">
629
- <?php do_action( $this->settings['prefix'] . '_sticky_admin_notice' ); ?>
630
- </div>
631
- <div class="alignright">
632
- <?php do_action( $this->settings['prefix'] . '_before_submit_button' ); ?>
633
- <?php submit_button( __( 'Save Changes', $this->settings['domain'] ), 'primary', 'cl_save', false ); ?>
634
- </div>
635
- <br class="clear">
636
- </div>
637
- </div><!-- #cl-sticky -->
638
-
639
- <div class="cl-sidebar">
640
- <?php $this->show_navigation(); ?>
641
- <?php do_action( $this->settings['prefix'] . '_settings_sidebars', $this->settings_sidebars ); ?>
642
- </div><!-- #cl-header -->
643
-
644
- <div class="cl-main">
645
- <?php $this->show_forms(); ?>
646
- </div><!-- #cl-header -->
647
-
648
- </div><!-- #cl-wrapper -->
649
- <?php
650
- }
 
 
 
 
 
651
 
652
  /**
653
  * Show navigation as lists
@@ -655,7 +682,7 @@ class CL_Settings_API {
655
  * Shows all the settings section labels as list items
656
  */
657
  private function show_navigation() {
658
-
659
  $html = '<ul class="cl-sections-menu">';
660
  foreach ( $this->settings_sections as $tab ) {
661
  $html .= sprintf( '<li><a href="%1$s">%2$s</a></li>', isset( $tab['href'] ) ? $tab['href'] : '#' . $tab['id'], $tab['title'] );
@@ -671,22 +698,23 @@ class CL_Settings_API {
671
  * This function displays every sections in a different form
672
  */
673
  private function show_forms() {
674
-
675
- foreach ( $this->settings_sections as $form ) {
676
- $form_id = $form['id']; ?>
677
- <div id="<?php echo $form_id; ?>" class="group">
678
- <form action="options.php" id="<?php echo $form_id; ?>form" method="post" >
679
- <?php do_action( $this->settings['prefix'] . '_form_top_' . $form_id, $form ); ?>
680
- <?php settings_fields( $form_id ); ?>
681
- <?php do_settings_sections( $form_id ); ?>
682
- <?php do_action( $this->settings['prefix'] . '_form_bottom_' . $form_id, $form ); ?>
683
- <?php if ( isset( $form['submit'] ) && $form['submit'] )
684
- submit_button( sprintf( __( 'Save %s', $this->settings['domain'] ), $form['title'] ) ); ?>
685
- </form>
686
- </div><?php
687
- # var_dump( $form_id, get_option( $form_id ) );
688
- }
689
- do_action( $this->settings['prefix'] . '_after_settings_sections_form' );
 
690
  }
691
 
692
  /**
@@ -695,61 +723,91 @@ class CL_Settings_API {
695
  * This function displays every sections in a different form
696
  */
697
  public function get_form() {
698
-
699
- check_ajax_referer( $this->settings['nonce'], 'nonce' );
700
-
701
- if ( isset( $_POST['form_id'] ) ) {
702
-
703
- $setting_form = array();
704
- $setting_form['error'] = 1;
705
-
706
- foreach ( $this->settings_sections as $form ) {
707
- $form_id = $form['id'];
708
- if ( str_replace( '#', '', $_POST['form_id'] ) !== $form_id ) {
709
- continue;
710
- }
711
- ob_start(); ?><form action="options.php" id="<?php echo $form_id; ?>form" method="post" >
712
- <?php do_action( $this->settings['prefix'] . '_form_top_' . $form['id'], $form ); ?>
713
- <?php settings_fields( $form['id'] ); ?>
714
- <?php do_settings_sections( $form['id'] ); ?>
715
- <?php do_action( $this->settings['prefix'] . '_form_bottom_' . $form['id'], $form ); ?>
716
- <?php submit_button( sprintf( __( 'Save %s Changes', $this->settings['domain'] ), $form_id ) ); ?>
717
- </form><?php
718
- $setting_form['error'] = 0;
719
- $setting_form['html'] = ob_get_clean();
720
- }
721
-
722
- header('Content-Type: application/json');
723
- echo json_encode( $setting_form );
724
- die();
725
- }
726
- }
727
-
728
- /**
729
- * Create a potbox widget.
730
- *
731
- * @param string $id ID of the postbox.
732
- * @param string $title Title of the postbox.
733
- * @param string $content Content of the postbox.
734
- */
735
- public function postbox( $id, $title, $content, $group = false ) { ?>
736
-
737
- <div class="metabox-holder<?php if ( $group ) echo ' group'; ?>" id="<?php echo $id; ?>">
738
- <div class="postbox">
739
- <h3><?php echo $title; ?></h3>
740
- <div class="inside"><?php echo $content; ?></div>
741
- </div>
742
- </div><?php
743
- }
744
-
745
- /**
746
- * Global 'active' checkbox notification.
747
- *
748
- * @ref http://codepen.io/pklada/pen/jEGwMB
749
- */
750
- function is_active_toggle() { ?>
751
- <label class="tgl">
752
- <span class="tgl_input"></span>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
753
  <span class="tgl_body">
754
  <span class="tgl_switch"></span>
755
  <span class="tgl_track">
@@ -757,140 +815,141 @@ class CL_Settings_API {
757
  <span class="tgl_bgd tgl_bgd-negative"></span>
758
  </span>
759
  </span>
760
- </label><?php
761
- }
762
-
763
- /**
764
- * Box with latest plugins from Extendd.com for sidebar
765
- */
766
- function about_the_author( $args ) {
767
-
768
- $content = sprintf( '%s: <a href="https://wordpress.org/support/view/plugin-reviews/custom-login" class="star-rating" target="_blank">
769
  <i class="dashicons dashicons-star-filled"></i>
770
  <i class="dashicons dashicons-star-filled"></i>
771
  <i class="dashicons dashicons-star-filled"></i>
772
  <i class="dashicons dashicons-star-filled"></i>
773
  <i class="dashicons dashicons-star-filled"></i>
774
  </a>', _x( 'Rate', 'rate; as in rate this plugin', $this->settings['domain'] ) );
775
-
776
- $content .= '<ul>';
777
- $content .= sprintf( '<li>%s: <a href="https://austin.passy.co" target="_blank">Austin Passy</a></li>', _x( 'Author', 'the author of this plugin', $this->settings['domain'] ) );
778
- $content .= sprintf( '<li>%s: <a href="https://twitter.com/TheFrosty" target="_blank">TheFrosty</a></li>', __( 'Twitter', $this->settings['domain'] ) );
779
- $content .= '</ul>';
780
-
781
- $content .= sprintf( __( '<small>If you have suggestions for a new add-on, feel free to open a support request on <a href="%s" target="_blank">GitHub</a>. Want regular updates? Follow me on <a href="%s" target="_blank">Twitter</a> or visit my <a href="%s" target="_blank">blog</a>.</small>' ),
782
- 'https://github.com/thefrosty/custom-login/issues',
783
- 'https://twitter.com/TheFrosty',
784
- 'https://austin.passy.co'
785
- );
786
-
787
- $this->postbox( 'frosty-media-author', __( 'Custom Login', $this->settings['domain'] ), $content );
788
- }
789
-
790
- /**
791
- * Box with latest plugins from Extendd.com for sidebar
792
- */
793
- function sidebar_feed( $args ) {
794
-
795
- $defaults = array(
796
- 'items' => 6,
797
- 'feed' => 'https://frosty.media/feed/?post_type=plugin&plugin_tag=custom-login-extension',
798
- );
799
-
800
- $args = wp_parse_args( $args, $defaults );
801
-
802
- $rss_items = CL_Common::fetch_rss_items( $args['items'], $args['feed'] );
803
-
804
- $content = '<ul>';
805
- if ( !$rss_items ) {
806
- $content .= '<li>' . __( 'Error fetching feed', $this->settings['domain'] ) . '</li>';
807
- }
808
- else {
809
- foreach ( $rss_items as $item ) {
810
- $url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
811
- $content .= '<li>';
812
- $content .= '<a href="' . $url . '?utm_source=wpadmin&utm_medium=sidebarwidget&utm_term=newsite&utm_campaign=' . $this->settings['prefix'] . '_settings-api" target="_blank">' . esc_html( $item->get_title() ) . '</a>';
813
- $content .= '</li>';
814
- }
815
- }
816
- $content .= '</ul>';
817
-
818
- $this->postbox( 'custom-login-extensions', sprintf( __( 'Custom Login Extensions %s', $this->settings['domain'] ), '<small class="dashicons dashicons-external"></small>' ), $content );
819
- }
820
-
821
- /**
822
- * Display Upgrade Notices
823
- *
824
- * @access private
825
- * @since 3.0.3
826
- * @return void
827
- */
828
- public function upgrade_notices() {
829
-
830
- $show_upgrade_notice = false;
831
-
832
- // Version < 2.0
833
- if ( false !== get_option( 'custom_login_settings', false ) ) {
834
- $show_upgrade_notice = true;
835
- }
836
-
837
- // Version > 2.0
838
- if ( false !== get_option( 'custom_login', false ) ) {
839
- $show_upgrade_notice = true;
840
- }
841
-
842
- if ( $show_upgrade_notice && ( '' === get_option( CUSTOM_LOGIN_OPTION . '_general', '' ) ) ) {
843
- remove_action( 'admin_notice', array( CL_Settings_Upgrade::instance(), 'upgrade_notices' ) );
844
- printf(
845
- '<div class="error"><p>' . esc_html__( 'Custom Login has detected old settings. If you wish to use them please run %sthis%s script before making any changes below.', CUSTOM_LOGIN_DIRNAME ) . '</p></div>',
846
- '<a href="' . esc_url( admin_url( 'options.php?page=custom-login-upgrades' ) ) . '">',
847
- '</a>'
848
- );
849
- }
850
- }
851
-
852
- /**
853
- * Box with latest plugins from Extendd.com for sidebar
854
- */
855
- public function sticky_admin_notice_social_links() {
856
-
857
- $content = '<ul class="social">';
858
- $content .= '<li><a href="https://www.facebook.com/FrostyMediaWP" target="_blank"><span class="dashicons dashicons-facebook"></span></a></li>';
859
- $content .= '<li><a href="https://twitter.com/Frosty_Media" target="_blank"><span class="dashicons dashicons-twitter"></span></a></li>';
860
- $content .= '<li><a href="https://plus.google.com/+FrostyMedia/" target="_blank"><span class="dashicons dashicons-googleplus"></span></a></li>';
861
- $content .= '<li><a href="http://eepurl.com/bbj0bD" target="_blank"><span class="dashicons dashicons-email"></span></a></li>';
862
- $content .= '</ul>';
863
-
864
- echo $content;
865
- }
866
-
867
  /**
868
  * Replace all square brackets with and underscore.
869
  *
870
- * @param string $input
 
871
  * @return string
872
  */
873
- private function replace_bracket_underscore( $input ) {
874
- return preg_replace( '/[\[\]]/', '_', $input );
875
- }
876
 
877
  /**
878
  * Get the value of a settings field
879
  *
880
- * @param string $option settings field name
881
- * @param string $section the section name this field belongs to
882
- * @param string $default default text if it's not found
 
883
  * @return string
884
  */
885
- function get_option( $option, $section, $default = '' ) {
886
-
887
- $options = get_option( $section, array() );
888
-
889
- if ( isset( $options[$option] ) ) {
890
- return $options[$option];
891
- }
892
-
893
- return $default;
894
- }
895
 
896
  }
1
  <?php
2
 
3
  // Exit if accessed directly
4
+ if ( ! defined( 'ABSPATH' ) ) {
5
+ exit;
6
+ }
7
 
8
  /**
9
  * Custom Login Settings API
10
  */
11
  class CL_Settings_API {
12
+
13
+ /**
14
+ * Version
15
+ */
16
+ var $api_version = '2.1.0';
17
+
18
+ /**
19
+ * @var array
20
+ */
21
+ private $settings_sections = array();
22
+ private $settings_fields = array();
23
+ private $settings_sidebars = array();
24
+ private $localize_array = array();
25
+
26
+ /**
27
+ * @var array
28
+ */
29
+ private $settings = array();
30
+
31
+ /**
32
+ * Fire away captain!
33
+ */
34
  public function __construct( $sections = array(), $fields = array(), $args = array() ) {
35
+
36
+ $this->settings = $args;
37
+
38
+ if ( ! empty( $sections ) ) {
39
+ $this->set_sections( $sections );
40
+ }
41
+
42
+ if ( ! empty( $fields ) ) {
43
+ $this->set_fields( $fields );
44
+ }
45
+
46
+ add_action( 'load-' . $this->settings['menu_page'], array( $this, 'init' ), 89 );
47
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
48
+ add_action( 'admin_footer', array( $this, 'wp_localize_script' ), 99 );
49
+ add_action( 'wp_ajax_' . $this->settings['prefix'] . '_get_form', array( $this, 'get_form' ), 99 );
50
+ add_action( 'wp_ajax_' . $this->settings['prefix'] . '_activate_check', array( $this, 'activate_check_ajax' ) );
51
+ }
52
+
53
+ /**
54
+ * Fire any actions needed a little late
55
+ *
56
+ * @return void
57
+ */
58
+ public function init() {
59
+
60
+ add_action( 'admin_notices', array( $this, 'upgrade_notices' ) );
61
+ add_action( $this->settings['prefix'] . '_sticky_admin_notice', array(
62
+ $this,
63
+ 'sticky_admin_notice_social_links',
64
+ ), 10 );
65
+ add_action( $this->settings['prefix'] . '_before_submit_button', array( $this, 'is_active_toggle' ), 10 );
66
+ add_action( $this->settings['prefix'] . '_settings_sidebars', array( $this, 'about_the_author' ), 19 );
67
+ add_action( $this->settings['prefix'] . '_settings_sidebars', array( $this, 'sidebar_feed' ), 20 );
68
+ }
69
+
70
+ /**
71
+ * Enqueue scripts and styles
72
+ */
73
  public function admin_enqueue_scripts( $hook ) {
74
+ if ( 'settings_page_' . $this->settings['domain'] !== $hook ) {
75
+ return;
76
+ }
77
+
78
+ /* Core */
79
+ wp_enqueue_media();
80
+ wp_enqueue_script( array( 'wp-color-picker', 'plugin-install' ) );
81
+ wp_enqueue_style( array( 'wp-color-picker', 'thickbox', 'plugin-install' ) );
82
+
83
+ /* jQuery Chosen */
84
+ wp_enqueue_script( 'chosen', plugins_url( 'js/chosen.jquery.min.js', $this->settings['file'] ), array( 'jquery' ), '1.3.0', true );
85
+ wp_enqueue_style( 'chosen', plugins_url( 'css/chosen/chosen.min.css', $this->settings['file'] ), null, '1.3.0', 'screen' );
86
+
87
+ /* jQuery Sticky */
88
+ wp_enqueue_script( 'sticky', plugins_url( 'js/jquery.sticky.js', $this->settings['file'] ), array( 'jquery' ), '1.0.0', true );
89
+
90
+ /* Ace */
91
+ wp_enqueue_script( 'ace', plugins_url( 'js/ace/src-min-noconflict/ace.js', $this->settings['file'] ), null, '20.12.14', true );
92
+
93
+ /* Dashicons */
94
+ wp_enqueue_style( 'dashicons' );
95
+
96
+ /* Admin */
97
+ wp_enqueue_script( $this->settings['domain'], plugins_url( 'js/admin.js', $this->settings['file'] ), array(
98
+ 'jquery',
99
+ 'jquery-form',
100
+ ), $this->settings['version'], true );
101
+ wp_enqueue_style( $this->settings['domain'], plugins_url( 'css/admin.css', $this->settings['file'] ), false, $this->settings['version'], 'screen' );
102
+
103
+ do_action( "{$this->settings['domain']}_admin_enqueue_scripts" );
104
+ }
105
+
106
+ /**
107
+ * Localize our script array.
108
+ */
109
  public function wp_localize_script() {
110
+ $this->localize_array['prefix'] = $this->settings['prefix'];
111
+ $this->localize_array['blog_id'] = get_current_blog_id();
112
+ $this->localize_array['nonce'] = wp_create_nonce( $this->settings['nonce'] );
113
+ wp_localize_script( $this->settings['domain'], 'cl_settings_api', $this->localize_array );
114
  }
115
 
116
+ /**
117
+ * Set settings sections
118
+ *
119
+ * @param array $sections setting sections array
120
+ */
121
  public function set_sections( $sections ) {
122
+
123
+ $sections = apply_filters( $this->settings['prefix'] . '_add_settings_sections', $sections );
124
+ $this->settings_sections = $sections;
125
+
126
+ return $this;
127
  }
128
 
129
  /**
130
  * Add a single section
131
  *
132
+ * @param array $section
133
  */
134
  public function add_section( $section ) {
135
+
136
+ $this->settings_sections[] = $section;
137
+
138
+ return $this;
139
  }
140
 
141
  /**
142
  * Set settings fields
143
  *
144
+ * @param array $fields settings fields array
145
  */
146
  public function set_fields( $fields ) {
147
+
148
+ $fields = apply_filters( $this->settings['prefix'] . '_add_settings_fields', $fields );
149
+ $this->settings_fields = $fields;
150
+
151
+ return $this;
152
  }
153
 
154
  /**
155
  * Add a single field
156
  *
157
+ * @param array $section
158
+ * @param array $field
159
  */
160
  public function add_field( $section, $field ) {
 
 
 
 
 
 
 
161
 
162
+ $defaults = array(
163
+ 'name' => '',
164
+ 'label' => '',
165
+ 'desc' => '',
166
+ 'type' => 'text',
167
+ );
168
+
169
+ $args = wp_parse_args( $field, $defaults );
170
+ $this->settings_fields[ $section ][] = $args;
171
+
172
+ return $this;
173
  }
174
 
175
  /**
176
  * Add a single section
177
  *
178
+ * @param array $section
179
  */
180
  public function add_sidebar( $sidebar = array() ) {
181
+
182
+ $sidebar = apply_filters( $this->settings['prefix'] . '_add_settings_sidebar', $sidebar );
183
+ if ( ! empty( $sidebar ) ) {
184
+ $this->settings_sidebars[] = $sidebar;
185
+ }
186
  }
187
 
188
  /**
194
  * registers them to WordPress and ready for use.
195
  */
196
  public function admin_init() {
197
+
198
+ //register settings sections
199
+ foreach ( $this->settings_sections as $section ) {
200
+ if ( false == get_option( $section['id'] ) && ( isset( $section['option'] ) && false !== $section['option'] ) ) {
201
+ add_option( $section['id'] );
202
+ }
203
+
204
+ add_settings_section( $section['id'], $section['title'], '__return_false', $section['id'] );
205
+ }
206
+
207
+ //register settings fields
208
+ foreach ( $this->settings_fields as $section => $field ) {
209
+ foreach ( $field as $option ) {
210
+
211
+ $type = isset( $option['type'] ) ? $option['type'] : 'text';
212
+
213
+ $args = array(
214
+ 'id' => $option['name'],
215
+ 'desc' => isset( $option['desc'] ) ? $option['desc'] : '',
216
+ 'name' => $option['label'],
217
+ 'section' => $section,
218
+ 'size' => isset( $option['size'] ) ? $option['size'] : null,
219
+ 'options' => isset( $option['options'] ) ? $option['options'] : '',
220
+ 'default' => isset( $option['default'] ) ? $option['default'] : '',
221
+ 'sanitize' => isset( $option['sanitize'] ) ? $option['sanitize'] : '',
222
+ 'callback' => isset( $option['class'] ) ? $option['class'] : $this,
223
+ );
224
+ $args = wp_parse_args( $args, $option );
225
+
226
+ add_settings_field( $section . '[' . $option['name'] . ']', $option['label'], array(
227
+ $args['callback'],
228
+ 'callback_' . $type,
229
+ ), $section, $section, $args );
230
+ }
231
+ }
232
+
233
+ // creates our settings in the options table
234
+ foreach ( $this->settings_sections as $section ) {
235
+ register_setting( $section['id'], $section['id'], array( $this, 'sanitize_options' ) );
236
+ }
237
  }
238
 
239
  /**
240
  * Displays a text field for a settings field
241
  *
242
+ * @param array $args settings field args
243
+ *
244
+ * @updated 2.0.2
245
  */
246
  function callback_text( $args ) {
247
 
248
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
249
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
250
+ $type = isset( $args['type'] ) && ! is_null( $args['type'] ) ? $args['type'] : 'text';
251
+
252
+ $html = sprintf( '<input type="%1$s" class="%2$s-text" id="%3$s[%4$s]" name="%3$s[%4$s]" value="%5$s">', $type, $size, $args['section'], $args['id'], $value );
253
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
254
+
255
+ echo $html;
256
  }
257
 
258
  /**
259
  * Displays a text field for a settings field
260
  *
261
+ * @param array $args settings field args
262
+ *
263
+ * @since 2.0.2
264
  */
265
  function callback_text_number( $args ) {
266
+
267
+ $args['type'] = 'number';
268
+ $this->callback_text( $args );
269
  }
270
 
271
  /**
272
  * Displays a text field for a settings field
273
  *
274
+ * @param array $args settings field args
275
  */
276
  function callback_text_array( $args ) {
277
+
278
+ $value = $this->get_option( $args['id'], $args['section'], $args['default'] );
279
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
280
+
281
+ $html = '<ul style="margin-top:0">';
282
+
283
+ if ( is_array( $value ) ) {
284
+ foreach ( $value as $key => $val ) {
285
+ $html .= '<li>';
286
+ $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s][]" value="%4$s" data-key="%5$s">', $size, $args['section'], $args['id'], esc_attr( $val ), $key );
287
+ $html .= sprintf( '<a href="#" class="button dodelete-%1$s[%2$s]">-</a>', $args['section'], $args['id'] );
288
+ $html .= '</li>';
289
+ }
290
+ } else {
291
+ $html .= '<li>';
292
+ $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s][]" value="%4$s" data-key="0" data-array="false">', $size, $args['section'], $args['id'], esc_attr( $value ) );
293
+ $html .= sprintf( '<a href="#" class="button dodelete-%1$s[%2$s]">-</a>', $args['section'], $args['id'] );
294
+ $html .= '</li>';
295
+ }
296
+
297
+ $html .= '</ul>';
298
+ $html .= sprintf( '<a href="#" class="button docopy-%1$s[%2$s]">+</a>', $args['section'], $args['id'] );
299
+
300
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
301
+
302
+ echo $html;
303
+ }
304
+
305
+ /**
306
+ * Displays a text field for a settings field
307
+ *
308
+ * @param array $args settings field args
309
+ */
 
310
  function callback_colorpicker( $args ) {
311
+
312
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
313
+ $check = esc_attr( $this->get_option( $args['id'] . '_checkbox', $args['section'], $args['default'] ) );
314
+ $opacity = esc_attr( $this->get_option( $args['id'] . '_opacity', $args['section'], $args['default'] ) );
315
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'small';
316
+ $options = array( '1', '0.9', '0.8', '0.7', '0.6', '0.5', '0.4', '0.3', '0.2', '0.1', '0', );
317
+ $class = 'on' != $check ? ' hidden' : '';
318
+
319
+ /* Localize the array */
320
+ $this->localize_array['callback_colorpicker'][] = array( 'id' => $args['id'], 'section' => $args['section'] );
321
+
322
+ /* Color */
323
+ $html = '<div class="cl-colorpicker-wrap">';
324
+ $html .= sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s" style="float:left">', $size, $args['section'], $args['id'], $value );
325
+
326
+ /* Allow Opacity */
327
+ $html .= '<div class="checkbox-wrap">';
328
+ $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" >', $args['section'], $args['id'] . '_checkbox' );
329
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s >', $args['section'], $args['id'] . '_checkbox', $check, checked( $check, 'on', false ) );
330
+ $html .= sprintf( __( '<label for="%1$s[%2$s]">Opacity</label>', $this->settings['domain'] ), $args['section'], $args['id'] . '_checkbox' );
331
+ $html .= '</div>';
332
+
333
+ /* Opacity */
334
+ $html .= sprintf( '<select class="%1$s%4$s" name="%2$s[%3$s]" id="%2$s[%3$s]" style="margin-left:70px;">', $size, $args['section'], $args['id'] . '_opacity', $class );
335
+ foreach ( $options as $key ) {
336
+ $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $opacity, $key, false ), $key );
337
+ }
338
+ $html .= '</select>';
339
+ $html .= '<br class="clear">';
340
+ $html .= '</div>';
341
+
342
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
343
+
344
+ echo $html;
345
  }
346
 
347
  /**
348
  * Displays a checkbox for a settings field
349
  *
350
+ * @param array $args settings field args
351
  */
352
  function callback_checkbox( $args ) {
353
 
354
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
355
+
356
+ $html = '<div class="checkbox-wrap">';
357
+ $html .= sprintf( '<input type="hidden" name="%1$s[%2$s]" value="off" >', $args['section'], $args['id'] );
358
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s]" name="%1$s[%2$s]" value="on"%4$s >', $args['section'], $args['id'], $value, checked( $value, 'on', false ) );
359
+ $html .= sprintf( '<label for="%1$s[%2$s]"></label>', $args['section'], $args['id'] );
360
+ $html .= '</div>';
 
 
361
 
362
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
363
+
364
+ echo $html;
365
  }
366
 
367
  /**
368
  * Displays a multicheckbox a settings field
369
  *
370
+ * @param array $args settings field args
371
  */
372
  function callback_multicheck( $args ) {
373
 
374
+ $value = $this->get_option( $args['id'], $args['section'], $args['default'] );
375
+
376
+ $html = '<div class="checkbox-wrap">';
377
+ $html .= '<ul>';
378
+ foreach ( $args['options'] as $key => $label ) {
379
+ $checked = isset( $value[ $key ] ) ? $value[ $key ] : '0';
380
+ $html .= '<li>';
381
+ $html .= sprintf( '<input type="checkbox" class="checkbox" id="%1$s[%2$s][%3$s]" name="%1$s[%2$s][%3$s]" value="%3$s"%4$s >', $args['section'], $args['id'], $key, checked( $checked, $key, false ) );
382
+ $html .= sprintf( '<label for="%1$s[%2$s][%4$s]" title="%3$s"> %3$s</label>', $args['section'], $args['id'], $label, $key );
383
+ $html .= '</li>';
384
+ }
385
+ $html .= '</ul>';
386
+ $html .= '</div>';
387
+
388
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
389
+
390
+ echo $html;
391
  }
392
 
393
  /**
394
  * Displays a multicheckbox a settings field
395
  *
396
+ * @param array $args settings field args
397
  */
398
  function callback_radio( $args ) {
399
 
400
+ $value = $this->get_option( $args['id'], $args['section'], $args['default'] );
401
+
402
+ $html = '<div class="radio-wrap">';
403
+ $html .= '<ul>';
404
+ foreach ( $args['options'] as $key => $label ) {
405
+ $html .= '<li>';
406
+ $html .= sprintf( '<input type="radio" class="radio" id="%1$s[%2$s][%3$s]" name="%1$s[%2$s]" value="%3$s"%4$s >', $args['section'], $args['id'], $key, checked( $value, $key, false ) );
407
+ $html .= sprintf( '<label for="%1$s[%2$s][%4$s]" title="%3$s"> %3$s</label><br>', $args['section'], $args['id'], $label, $key );
408
+ $html .= '</li>';
409
+ }
410
+ $html .= '</ul>';
411
+ $html .= '</div>';
412
+
413
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
414
+
415
+ echo $html;
416
  }
417
 
418
  /**
419
  * Displays a selectbox for a settings field
420
  *
421
+ * @param array $args settings field args
422
  */
423
  function callback_select( $args ) {
424
 
425
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
426
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
 
 
 
 
 
 
 
 
 
 
 
427
 
428
+ /* Localize the array */
429
+ $this->localize_array['callback_select'][] = array( 'id' => $args['id'], 'section' => $args['section'] );
430
+
431
+ $html = sprintf( '<select class="%1$s" name="%2$s[%3$s]" id="%2$s[%3$s]">', $size, $args['section'], $args['id'] );
432
+ foreach ( $args['options'] as $key => $label ) {
433
+ $html .= sprintf( '<option value="%s"%s>%s</option>', $key, selected( $value, $key, false ), $label );
434
+ }
435
+ $html .= sprintf( '</select>' );
436
+
437
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<br><span class="description"> %s</span>', $args['desc'] ) : '';
438
+
439
+ echo $html;
440
  }
441
 
442
  /**
443
  * Displays a textarea for a settings field
444
  *
445
+ * @param array $args settings field args
446
  */
447
  function callback_textarea( $args ) {
448
 
449
+ $value = esc_textarea( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
450
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
451
+ $extra = isset( $args['extra'] ) && is_array( $args['extra'] ) ? $args['extra'] : null;
452
+ $param = '';
453
+
454
+ if ( null !== $extra ) {
455
+ foreach ( $extra as $p_key => $p_value ) {
456
+ $param .= $p_key . '="' . $p_value . '"';
457
+ }
458
+ }
459
+
460
+ $html = sprintf( '<textarea rows="5" cols="55" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]"%5$s>%4$s</textarea>', $size, $args['section'], $args['id'], stripslashes( $value ), $param );
461
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
462
+
463
+ echo $html;
464
  }
465
 
466
  /**
467
  * Displays a HTML for a settings field
468
  *
469
+ * @param array $args settings field args
470
  */
471
  function callback_html( $args ) {
472
+ static $counter = 0;
473
+
474
+ $html = isset( $args['desc'] ) ? sprintf( '<div class="section-%s-%d">%s</div><hr>', $args['section'], $counter, $args['desc'] ) : '';
475
+ $counter ++;
476
+
477
+ echo $html;
478
  }
479
 
480
  /**
481
  * Displays raw HTML for a settings field
482
  *
483
+ * @param array $args settings field args
484
  */
485
  function callback_raw( $args ) {
486
+
487
+ $html = isset( $args['desc'] ) ? sprintf( '<div class="raw-html">%s</div>', $args['desc'] ) : '';
488
+
489
+ echo $html;
490
  }
491
 
492
  /**
493
  * Displays a rich text textarea for a settings field
494
  *
495
+ * @param array $args settings field args
496
  */
497
  function callback_wysiwyg( $args ) {
498
 
499
+ $value = wpautop( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
500
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : '500px';
501
+
502
+ $html = sprintf( '<div style="width: %s">', $size );
503
+
504
+ ob_start();
505
+ wp_editor( $value, $args['section'] . '[' . $args['id'] . ']', array(
506
+ 'teeny' => true,
507
+ 'textarea_rows' => 10,
508
+ ) );
509
+
510
+ $html .= ob_get_clean();
511
+ $html .= '</div>';
512
+
513
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<br><span class="description"> %s</span>', $args['desc'] ) : '';
514
+
515
+ echo $html;
516
  }
517
 
518
  /**
519
  * Displays a file upload field for a settings field
520
  *
521
+ * @param array $args settings field args
522
  */
523
  function callback_file( $args ) {
524
+ static $counter = 0;
525
+
526
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
527
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
528
+ $id = $args['section'] . '[' . $args['id'] . ']';
529
+
530
+ /* Localize the array */
531
+ $this->localize_array['callback_file'][] = array( 'id' => $args['id'], 'section' => $args['section'] );
532
+
533
+ $html = sprintf( '<input type="text" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s">', $size, $args['section'], $args['id'], $value );
534
+ $html .= '<input type="button" class="button ' . $args['id'] . '-browse" id="' . $id . '_button" value="Browse" style="margin-left:5px" >';
535
+ $html .= '<input type="button" class="button ' . $args['id'] . '-clear" id="' . $id . '_clear" value="Clear" style="margin-left:5px" >';
536
+
537
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<br><span class="description"> %s</span>', $args['desc'] ) : '';
538
+
539
+ /* Image */
540
+ $html .= '<div id="' . $id . '_preview" class="' . $id . '_preview">';
541
+ if ( $value != '' ) {
542
+ $check_image = preg_match( '/(^.*\.jpg|jpeg|png|gif|ico*)/i', $value );
543
+ if ( $check_image ) {
544
+ $html .= '<div class="img-wrapper">';
545
+ $html .= '<img src="' . $value . '" alt="" >';
546
+ $html .= '<a href="#" class="remove_file_button" rel="' . $id . '">Remove Image</a>';
547
+ $html .= '</div>';
548
+ }
549
+ }
550
+ $html .= '</div>';
551
+
552
+ echo $html;
553
  }
554
 
555
  /**
556
  * Displays a password field for a settings field
557
  *
558
+ * @param array $args settings field args
559
  */
560
  function callback_password( $args ) {
561
 
562
+ $value = esc_attr( $this->get_option( $args['id'], $args['section'], $args['default'] ) );
563
+ $size = isset( $args['size'] ) && ! is_null( $args['size'] ) ? $args['size'] : 'regular';
564
+
565
+ $html = sprintf( '<input type="password" class="%1$s-text" id="%2$s[%3$s]" name="%2$s[%3$s]" value="%4$s">', $size, $args['section'], $args['id'], $value );
566
+ $html .= ! empty( $args['desc'] ) ? sprintf( '<span class="description"> %s</span>', $args['desc'] ) : '';
567
+
568
+ echo $html;
569
  }
570
 
571
  /**
572
  * Sanitize callback for Settings API
573
+ */
574
  function sanitize_options( $options ) {
575
+
576
+ if ( is_null( $options ) ) {
577
+ return $options;
578
+ }
579
+
580
+ do_action( $this->settings['prefix'] . '_before_sanitize_options', $options );
581
+
582
+ foreach ( $options as $option_slug => $option_value ) {
583
+ $sanitize_callback = $this->get_sanitize_callback( $option_slug );
584
+
585
+ // If callback is set, call it
586
+ if ( $sanitize_callback ) {
587
+ $options[ $option_slug ] = call_user_func( $sanitize_callback, $option_value );
588
+ continue;
589
+ }
590
+
591
+ // Treat everything that's not an array as a string
592
+ if ( ! is_array( $option_value ) ) {
593
+ $options[ $option_slug ] = sanitize_text_field( $option_value );
594
+ continue;
595
+ }
596
+ }
597
+
598
+ do_action( $this->settings['prefix'] . '_after_sanitize_options', $options );
599
+
600
+ return $options;
601
+ }
602
+
603
  /**
604
  * Get sanitization callback for given option slug
605
+ *
606
  * @param string $slug option slug
607
+ *
608
  * @return mixed string or bool false
609
+ */
610
  function get_sanitize_callback( $slug = '' ) {
611
+
612
+ if ( empty( $slug ) ) {
613
+ return false;
614
+ }
615
+
616
+ // Iterate over registered fields and see if we can find proper callback
617
+ foreach ( $this->settings_fields as $section => $options ) {
618
+ foreach ( $options as $option ) {
619
+ if ( $option['name'] != $slug ) {
620
+ continue;
621
+ }
622
+
623
+ // Return the callback name
624
+ return isset( $option['sanitize'] ) && is_callable( $option['sanitize'] ) ? $option['sanitize'] : false;
625
+ }
626
+ }
627
+
628
+ return false;
629
+ }
630
+
631
+ /**
632
+ * Output our settings HTML
633
+ *
634
+ */
635
+ public function settings_html() { ?>
636
+
637
+ <div class="cl-container">
638
+
639
+ <div class="cl-header">
640
+ <h3><?php _e( 'Custom Login', $this->settings['domain'] ); ?></h3>
641
+ <span><?php echo $this->settings['version']; ?></span>
642
+ <div>
643
+ <?php echo sprintf( __( 'A %s plugin', $this->settings['domain'] ), '<strong><a href="https://frosty.media/" target="_blank">Frosty Media</a></strong>' ); ?>
644
+ &nbsp;&nbsp;|&nbsp;&nbsp;<a href="https://twitter.com/Frosty_Media"><span
645
+ class="dashicons dashicons-twitter"></span></a>
646
+ </div>
647
+ </div><!-- #cl-header -->
648
+
649
+ <div id="cl-notices">
650
+ <h2></h2>
651
+ </div><!-- #cl-text -->
652
+
653
+ <div id="cl-sticky">
654
+ <div class="wrap">
655
+ <div id="sticky-admin-notice">
656
+ <?php do_action( $this->settings['prefix'] . '_sticky_admin_notice' ); ?>
657
+ </div>
658
+ <div class="alignright">
659
+ <?php do_action( $this->settings['prefix'] . '_before_submit_button' ); ?>
660
+ <?php submit_button( __( 'Save Changes', $this->settings['domain'] ), 'primary', 'cl_save', false ); ?>
661
+ </div>
662
+ <br class="clear">
663
+ </div>
664
+ </div><!-- #cl-sticky -->
665
+
666
+ <div class="cl-sidebar">
667
+ <?php $this->show_navigation(); ?>
668
+ <?php do_action( $this->settings['prefix'] . '_settings_sidebars', $this->settings_sidebars ); ?>
669
+ </div><!-- #cl-header -->
670
+
671
+ <div class="cl-main">
672
+ <?php $this->show_forms(); ?>
673
+ </div><!-- #cl-header -->
674
+
675
+ </div><!-- #cl-wrapper -->
676
+ <?php
677
+ }
678
 
679
  /**
680
  * Show navigation as lists
682
  * Shows all the settings section labels as list items
683
  */
684
  private function show_navigation() {
685
+
686
  $html = '<ul class="cl-sections-menu">';
687
  foreach ( $this->settings_sections as $tab ) {
688
  $html .= sprintf( '<li><a href="%1$s">%2$s</a></li>', isset( $tab['href'] ) ? $tab['href'] : '#' . $tab['id'], $tab['title'] );
698
  * This function displays every sections in a different form
699
  */
700
  private function show_forms() {
701
+
702
+ foreach ( $this->settings_sections as $form ) {
703
+ $form_id = $form['id']; ?>
704
+ <div id="<?php echo $form_id; ?>" class="group">
705
+ <form action="options.php" id="<?php echo $form_id; ?>form" method="post">
706
+ <?php do_action( $this->settings['prefix'] . '_form_top_' . $form_id, $form ); ?>
707
+ <?php settings_fields( $form_id ); ?>
708
+ <?php do_settings_sections( $form_id ); ?>
709
+ <?php do_action( $this->settings['prefix'] . '_form_bottom_' . $form_id, $form ); ?>
710
+ <?php if ( isset( $form['submit'] ) && $form['submit'] ) {
711
+ submit_button( sprintf( __( 'Save %s', $this->settings['domain'] ), $form['title'] ) );
712
+ } ?>
713
+ </form>
714
+ </div><?php
715
+ # var_dump( $form_id, get_option( $form_id ) );
716
+ }
717
+ do_action( $this->settings['prefix'] . '_after_settings_sections_form' );
718
  }
719
 
720
  /**
723
  * This function displays every sections in a different form
724
  */
725
  public function get_form() {
726
+
727
+ check_ajax_referer( $this->settings['nonce'], 'nonce' );
728
+
729
+ if ( isset( $_POST['form_id'] ) ) {
730
+
731
+ $setting_form = array();
732
+ $setting_form['error'] = 1;
733
+
734
+ foreach ( $this->settings_sections as $form ) {
735
+ $form_id = $form['id'];
736
+ if ( str_replace( '#', '', $_POST['form_id'] ) !== $form_id ) {
737
+ continue;
738
+ }
739
+ ob_start(); ?>
740
+ <form action="options.php" id="<?php echo $form_id; ?>form" method="post">
741
+ <?php do_action( $this->settings['prefix'] . '_form_top_' . $form['id'], $form ); ?>
742
+ <?php settings_fields( $form['id'] ); ?>
743
+ <?php do_settings_sections( $form['id'] ); ?>
744
+ <?php do_action( $this->settings['prefix'] . '_form_bottom_' . $form['id'], $form ); ?>
745
+ <?php submit_button( sprintf( __( 'Save %s Changes', $this->settings['domain'] ), $form_id ) ); ?>
746
+ </form><?php
747
+ $setting_form['error'] = 0;
748
+ $setting_form['html'] = ob_get_clean();
749
+ }
750
+
751
+ header( 'Content-Type: application/json' );
752
+ echo json_encode( $setting_form );
753
+ die();
754
+ }
755
+ }
756
+
757
+ /**
758
+ * Show the section settings forms
759
+ *
760
+ * This function displays every sections in a different form
761
+ */
762
+ public function activate_check_ajax() {
763
+
764
+ if ( empty( $_POST ) || ! check_ajax_referer( $this->settings['nonce'], 'nonce', false ) ) {
765
+ wp_send_json_error();
766
+ }
767
+
768
+ $settings = CL_Common::get_options( 'general' );
769
+ $active_value = isset( $_POST['active_value'] ) && 'true' == $_POST['active_value'] ? 'on' : 'off';
770
+
771
+ if ( isset( $settings['active'] ) && $settings['active'] !== $active_value ) {
772
+ $settings['active'] = $active_value;
773
+
774
+ if ( update_option( CUSTOM_LOGIN_OPTION . '_general', $settings ) ) {
775
+ wp_send_json_success();
776
+ } else {
777
+ wp_send_json_error();
778
+ }
779
+ }
780
+
781
+ wp_send_json_success();
782
+ }
783
+
784
+ /**
785
+ * Create a potbox widget.
786
+ *
787
+ * @param string $id ID of the postbox.
788
+ * @param string $title Title of the postbox.
789
+ * @param string $content Content of the postbox.
790
+ */
791
+ public function postbox( $id, $title, $content, $group = false ) { ?>
792
+
793
+ <div class="metabox-holder<?php if ( $group ) {
794
+ echo ' group';
795
+ } ?>" id="<?php echo $id; ?>">
796
+ <div class="postbox">
797
+ <h3><?php echo $title; ?></h3>
798
+ <div class="inside"><?php echo $content; ?></div>
799
+ </div>
800
+ </div><?php
801
+ }
802
+
803
+ /**
804
+ * Global 'active' checkbox notification.
805
+ *
806
+ * @ref http://codepen.io/pklada/pen/jEGwMB
807
+ */
808
+ function is_active_toggle() { ?>
809
+ <label class="tgl">
810
+ <span class="tgl_input"></span>
811
  <span class="tgl_body">
812
  <span class="tgl_switch"></span>
813
  <span class="tgl_track">
815
  <span class="tgl_bgd tgl_bgd-negative"></span>
816
  </span>
817
  </span>
818
+ </label><?php
819
+ }
820
+
821
+ /**
822
+ * Box with latest plugins from Extendd.com for sidebar
823
+ */
824
+ function about_the_author( $args ) {
825
+
826
+ $content = sprintf( '%s: <a href="https://wordpress.org/support/view/plugin-reviews/custom-login" class="star-rating" target="_blank">
827
  <i class="dashicons dashicons-star-filled"></i>
828
  <i class="dashicons dashicons-star-filled"></i>
829
  <i class="dashicons dashicons-star-filled"></i>
830
  <i class="dashicons dashicons-star-filled"></i>
831
  <i class="dashicons dashicons-star-filled"></i>
832
  </a>', _x( 'Rate', 'rate; as in rate this plugin', $this->settings['domain'] ) );
833
+
834
+ $content .= '<ul>';
835
+ $content .= sprintf( '<li>%s: <a href="http://austin.passy.co" target="_blank">Austin Passy</a></li>', _x( 'Author', 'the author of this plugin', $this->settings['domain'] ) );
836
+ $content .= sprintf( '<li>%s: <a href="https://twitter.com/TheFrosty" target="_blank">TheFrosty</a></li>', __( 'Twitter', $this->settings['domain'] ) );
837
+ $content .= '</ul>';
838
+
839
+ $content .= sprintf( __( '<small>If you have suggestions for a new add-on, feel free to open a support request on <a href="%s" target="_blank">GitHub</a>. Want regular updates? Follow me on <a href="%s" target="_blank">Twitter</a> or visit my <a href="%s" target="_blank">blog</a>.</small>' ),
840
+ 'https://github.com/thefrosty/custom-login/issues',
841
+ 'https://twitter.com/TheFrosty',
842
+ 'http://austin.passy.co'
843
+ );
844
+
845
+ $this->postbox( 'frosty-media-author', __( 'Custom Login', $this->settings['domain'] ), $content );
846
+ }
847
+
848
+ /**
849
+ * Box with latest plugins from Extendd.com for sidebar
850
+ */
851
+ function sidebar_feed( $args ) {
852
+
853
+ $defaults = array(
854
+ 'items' => 6,
855
+ 'feed' => 'https://frosty.media/feed/?post_type=plugin&plugin_tag=custom-login-extension',
856
+ );
857
+
858
+ $args = wp_parse_args( $args, $defaults );
859
+
860
+ $rss_items = CL_Common::fetch_rss_items( $args['items'], $args['feed'] );
861
+
862
+ $content = '<ul>';
863
+ if ( ! $rss_items ) {
864
+ $content .= '<li>' . __( 'Error fetching feed', $this->settings['domain'] ) . '</li>';
865
+ } else {
866
+ foreach ( $rss_items as $item ) {
867
+ $url = preg_replace( '/#.*/', '', esc_url( $item->get_permalink(), null, 'display' ) );
868
+ $content .= '<li>';
869
+ $content .= '<a href="' . $url . '?utm_source=wpadmin&utm_medium=sidebarwidget&utm_term=newsite&utm_campaign=' . $this->settings['prefix'] . '_settings-api" target="_blank">' . esc_html( $item->get_title() ) . '</a>';
870
+ $content .= '</li>';
871
+ }
872
+ }
873
+ $content .= '</ul>';
874
+
875
+ $this->postbox( 'custom-login-extensions', sprintf( __( 'Custom Login Extensions %s', $this->settings['domain'] ), '<small class="dashicons dashicons-external"></small>' ), $content );
876
+ }
877
+
878
+ /**
879
+ * Display Upgrade Notices
880
+ *
881
+ * @access private
882
+ * @since 3.0.3
883
+ * @return void
884
+ */
885
+ public function upgrade_notices() {
886
+
887
+ $show_upgrade_notice = false;
888
+
889
+ // Version < 2.0
890
+ if ( false !== get_option( 'custom_login_settings', false ) ) {
891
+ $show_upgrade_notice = true;
892
+ }
893
+
894
+ // Version > 2.0
895
+ if ( false !== get_option( 'custom_login', false ) ) {
896
+ $show_upgrade_notice = true;
897
+ }
898
+
899
+ if ( $show_upgrade_notice && ( '' === get_option( CUSTOM_LOGIN_OPTION . '_general', '' ) ) ) {
900
+ remove_action( 'admin_notice', array( CL_Settings_Upgrade::instance(), 'upgrade_notices' ) );
901
+ printf(
902
+ '<div class="error"><p>' . esc_html__( 'Custom Login has detected old settings. If you wish to use them please run %sthis%s script before making any changes below.', CUSTOM_LOGIN_DIRNAME ) . '</p></div>',
903
+ '<a href="' . esc_url( admin_url( 'options.php?page=custom-login-upgrades' ) ) . '">',
904
+ '</a>'
905
+ );
906
+ }
907
+ }
908
+
909
+ /**
910
+ * Box with latest plugins from Extendd.com for sidebar
911
+ */
912
+ public function sticky_admin_notice_social_links() {
913
+
914
+ $content = '<ul class="social">';
915
+ $content .= '<li><a href="https://www.facebook.com/FrostyMediaWP" target="_blank"><span class="dashicons dashicons-facebook"></span></a></li>';
916
+ $content .= '<li><a href="https://twitter.com/Frosty_Media" target="_blank"><span class="dashicons dashicons-twitter"></span></a></li>';
917
+ $content .= '<li><a href="https://plus.google.com/+FrostyMedia/" target="_blank"><span class="dashicons dashicons-googleplus"></span></a></li>';
918
+ $content .= '<li><a href="http://eepurl.com/bbj0bD" target="_blank"><span class="dashicons dashicons-email"></span></a></li>';
919
+ $content .= '</ul>';
920
+
921
+ echo $content;
922
+ }
923
+
 
924
  /**
925
  * Replace all square brackets with and underscore.
926
  *
927
+ * @param string $input
928
+ *
929
  * @return string
930
  */
931
+ private function replace_bracket_underscore( $input ) {
932
+ return preg_replace( '/[\[\]]/', '_', $input );
933
+ }
934
 
935
  /**
936
  * Get the value of a settings field
937
  *
938
+ * @param string $option settings field name
939
+ * @param string $section the section name this field belongs to
940
+ * @param string $default default text if it's not found
941
+ *
942
  * @return string
943
  */
944
+ function get_option( $option, $section, $default = '' ) {
945
+
946
+ $options = get_option( $section, array() );
947
+
948
+ if ( isset( $options[ $option ] ) ) {
949
+ return $options[ $option ];
950
+ }
951
+
952
+ return $default;
953
+ }
954
 
955
  }
includes/class-cl-settings-upgrades.php CHANGED
@@ -14,7 +14,7 @@ class CL_Settings_Upgrade {
14
 
15
  /** Singleton *************************************************************/
16
  private static $instance;
17
-
18
  protected $parent;
19
 
20
  /**
@@ -31,9 +31,9 @@ class CL_Settings_Upgrade {
31
  }
32
  return self::$instance;
33
  }
34
-
35
  private function actions() {
36
-
37
  add_action( 'admin_notices', array( $this, 'upgrade_notices' ) );
38
  add_action( 'admin_menu', array( $this, 'add_submenu_page' ) );
39
  add_action( 'wp_ajax_custom_login_trigger_upgrades', array( $this, 'trigger_upgrades' ) );
@@ -47,41 +47,41 @@ class CL_Settings_Upgrade {
47
  * @return void
48
  */
49
  public function upgrade_notices() {
50
-
51
  if ( isset( $_GET['page'] ) && $_GET['page'] == ( 'custom-login-upgrades' || 'custom-login' ) )
52
  return; // Don't show notices on the upgrades page
53
-
54
  $cl_version = get_option( CUSTOM_LOGIN_OPTION . '_version' );
55
-
56
  if ( ! $cl_version ) {
57
  // 2.0 is the first version to use this option so we must add it
58
  $cl_version = '2.0';
59
  }
60
-
61
  $cl_version = preg_replace( '/[^0-9.].*/', '', $cl_version );
62
-
63
  // Version less than 2.0 (settings exist)
64
  if ( false !== ( $old_settings = get_option( 'custom_login_settings', false ) ) ) {
65
-
66
  // New install
67
  if ( !$old_settings )
68
  return;
69
-
70
  if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
71
  $cl_version = $old_settings['version'];
72
-
73
  // Versions less than 2.0
74
  if ( version_compare( $cl_version, '2.0', '<' ) ) {
75
  printf(
76
  '<div class="updated"><p>' . __( 'Custom Login needs to upgrade the settings, please click <a href="%s">here</a> to start the upgrade.', CUSTOM_LOGIN_DIRNAME ) . '</p></div>',
77
- add_query_arg( array( 'ver' => '2.0' ), admin_url( 'options.php?page=custom-login-upgrades' ) )
78
  );
79
  }
80
  } // 2.0
81
-
82
  // Version less than 3.0 (settings exist)
83
  if ( false !== ( $old_settings = get_option( 'custom_login', false ) ) ) {
84
-
85
  // Versions less than 3.0
86
  if ( version_compare( $cl_version, '3.0', '<' ) ) {
87
  printf(
@@ -90,16 +90,16 @@ class CL_Settings_Upgrade {
90
  );
91
  }
92
  } // 3.0
93
-
94
  // Version less than 3.1
95
- if ( version_compare( $cl_version, '3.1', '<' ) ) {
96
  printf(
97
- '<div class="updated"><p>' . __( 'Custom Login needs to upgrade the database, please click <a href="%s">here</a> to start the upgrade.', CUSTOM_LOGIN_DIRNAME ) . '</p></div>',
98
- add_query_arg( array( 'ver' => '3.1' ), admin_url( 'options.php?page=custom-login-upgrades' ) )
99
  );
100
  } // 3.1
101
  }
102
-
103
  /**
104
  * Add Submenu Upgrade page
105
  *
@@ -107,8 +107,8 @@ class CL_Settings_Upgrade {
107
  * @since 1.0
108
  * @return void
109
  */
110
- public function add_submenu_page() {
111
-
112
  add_submenu_page(
113
  null,
114
  __( 'Custom Login Upgrades', CUSTOM_LOGIN_DIRNAME ),
@@ -154,7 +154,7 @@ class CL_Settings_Upgrade {
154
  </div>
155
  <?php
156
  }
157
-
158
  /**
159
  * Triggers all upgrade functions
160
  *
@@ -164,57 +164,57 @@ class CL_Settings_Upgrade {
164
  * @since 2.0
165
  */
166
  public function trigger_upgrades() {
167
-
168
  check_ajax_referer( 'CL_Settings_Upgrade' . basename( __FILE__ ), 'nonce' );
169
-
170
  $cl_version = get_option( CUSTOM_LOGIN_OPTION . '_version' );
171
-
172
  if ( ! $cl_version ) {
173
  // 2.0 is the first version to use this option so we must add it
174
  $cl_version = '2.0';
175
  add_option( CUSTOM_LOGIN_OPTION . '_version', $cl_version );
176
  }
177
-
178
  // Version less than 2.0
179
  if ( false !== ( $old_settings = get_option( 'custom_login_settings', false ) ) ) {
180
-
181
  $cl_version = '1.0';
182
-
183
  if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
184
  $cl_version = $old_settings['version'];
185
-
186
  if ( version_compare( $cl_version, '2.0', '<' ) ) {
187
  $this->cl_v20_upgrades();
188
  }
189
-
190
  } // 2.0
191
-
192
  // Version less than 3.0
193
  if ( false !== ( $old_settings = get_option( 'custom_login', false ) ) ) {
194
-
195
  $cl_version = '2.0';
196
-
197
  if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
198
  $cl_version = $old_settings['version'];
199
-
200
  if ( version_compare( $cl_version, '3.0', '<' ) ) {
201
  $this->cl_v30_upgrades();
202
  }
203
-
204
  } // 3.0
205
-
206
  // Version less than 3.1
207
  if ( version_compare( $cl_version, '3.1', '<' ) ) {
208
  $this->cl_v31_upgrades();
209
  } // 3.1
210
-
211
  update_option( CUSTOM_LOGIN_OPTION . '_version', CUSTOM_LOGIN_VERSION );
212
-
213
  if ( DOING_AJAX ) {
214
  die( 'complete' );
215
  }
216
  }
217
-
218
  /**
219
  * Upgrade routine for v2.0
220
  *
@@ -223,10 +223,10 @@ class CL_Settings_Upgrade {
223
  * @return void
224
  */
225
  private function cl_v20_upgrades() {
226
-
227
  $old_settings = get_option( 'custom_login_settings' );
228
  $new_settings = get_option( 'custom_login', array() );
229
-
230
  $new_settings['version'] = $this->parent->version;
231
  $new_settings['active'] = true === $old_settings['custom'] ? 'on' : 'off';
232
  $new_settings['html_background_color'] = CL_Scripts_Styles::is_rgba( $old_settings['html_background_color'] ) ? CL_Scripts_Styles::rgba2hex( $old_settings['html_background_color'] ) : $old_settings['html_background_color'];
@@ -275,12 +275,12 @@ class CL_Settings_Upgrade {
275
  $new_settings['custom_css'] = wp_filter_nohtml_kses( $old_settings['custom_css'] );
276
  $new_settings['custom_html'] = wp_kses_post( $old_settings['custom_html'] );
277
  $new_settings['custom_jquery'] = wp_specialchars_decode( stripslashes( $old_settings['custom_jquery'] ), 1, 0, 1 );
278
-
279
  update_option( 'custom_login', $new_settings );
280
  delete_option( 'custom_login_settings' );
281
  return true;
282
  }
283
-
284
  /**
285
  * Upgrade routine for v3.0
286
  *
@@ -289,11 +289,11 @@ class CL_Settings_Upgrade {
289
  * @return void
290
  */
291
  private function cl_v30_upgrades() {
292
-
293
  $old_settings = get_option( 'custom_login', array() );
294
  $design_settings = get_option( CUSTOM_LOGIN_OPTION . '_design', array() );
295
  $general_settings = get_option( CUSTOM_LOGIN_OPTION . '_general', array() );
296
-
297
  /** Design */
298
  $design_settings['html_background_color'] = $this->get_old_setting( $old_settings, 'html_background_color' );
299
  $design_settings['html_background_color_checkbox'] = $this->get_old_setting( $old_settings, 'html_background_color_checkbox' );
@@ -302,7 +302,7 @@ class CL_Settings_Upgrade {
302
  $design_settings['html_background_position'] = $this->get_old_setting( $old_settings, 'html_background_position' );
303
  $design_settings['html_background_repeat'] = $this->get_old_setting( $old_settings, 'html_background_repeat' );
304
  $design_settings['html_background_size'] = $this->get_old_setting( $old_settings, 'html_background_size' );
305
-
306
  $design_settings['logo_force_form_max_width'] = 'off'; // New
307
  $design_settings['hide_wp_logo'] = $this->get_old_setting( $old_settings, 'hide_wp_logo' );
308
  $design_settings['logo_background_url'] = $this->get_old_setting( $old_settings, 'logo_background_url' );
@@ -311,9 +311,9 @@ class CL_Settings_Upgrade {
311
  $design_settings['logo_background_position'] = $this->get_old_setting( $old_settings, 'logo_background_position' );
312
  $design_settings['logo_background_repeat'] = $this->get_old_setting( $old_settings, 'logo_background_repeat' );
313
  $design_settings['logo_background_size'] = $this->get_old_setting( $old_settings, 'logo_background_size' );
314
-
315
  $design_settings['login_form_width'] = ''; // New
316
-
317
  $design_settings['login_form_background_color'] = $this->get_old_setting( $old_settings, 'login_form_background_color' );
318
  $design_settings['login_form_background_color_checkbox'] = $this->get_old_setting( $old_settings, 'login_form_background_color_checkbox' );
319
  $design_settings['login_form_background_color_opacity'] = $this->get_old_setting( $old_settings, 'login_form_background_color_opacity' );
@@ -321,7 +321,7 @@ class CL_Settings_Upgrade {
321
  $design_settings['login_form_background_position'] = $this->get_old_setting( $old_settings, 'login_form_background_position' );
322
  $design_settings['login_form_background_repeat'] = $this->get_old_setting( $old_settings, 'login_form_background_repeat' );
323
  $design_settings['login_form_background_size'] = $this->get_old_setting( $old_settings, 'login_form_background_size' );
324
-
325
  $design_settings['login_form_border_radius'] = $this->get_old_setting( $old_settings, 'login_form_border_radius' );
326
  $design_settings['login_form_border_size'] = $this->get_old_setting( $old_settings, 'login_form_border_size' );
327
  $design_settings['login_form_border_color'] = $this->get_old_setting( $old_settings, 'login_form_border_color' );
@@ -331,11 +331,11 @@ class CL_Settings_Upgrade {
331
  $design_settings['login_form_box_shadow_color'] = $this->get_old_setting( $old_settings, 'login_form_box_shadow_color' );
332
  $design_settings['login_form_box_shadow_color_checkbox'] = $this->get_old_setting( $old_settings, 'login_form_box_shadow_color_checkbox' );
333
  $design_settings['login_form_box_shadow_color_opacity'] = $this->get_old_setting( $old_settings, 'login_form_box_shadow_color_opacity' );
334
-
335
  $design_settings['label_color'] = $this->get_old_setting( $old_settings, 'label_color' );
336
  $design_settings['label_color_checkbox'] = $this->get_old_setting( $old_settings, 'label_color_checkbox' );
337
  $design_settings['label_color_opacity'] = $this->get_old_setting( $old_settings, 'label_color_opacity' );
338
-
339
  $design_settings['nav_color'] = $this->get_old_setting( $old_settings, 'nav_color' );
340
  $design_settings['nav_color_checkbox'] = $this->get_old_setting( $old_settings, 'nav_color_checkbox' );
341
  $design_settings['nav_color_opacity'] = $this->get_old_setting( $old_settings, 'nav_color_opacity' );
@@ -348,12 +348,12 @@ class CL_Settings_Upgrade {
348
  $design_settings['nav_text_shadow_hover_color'] = $this->get_old_setting( $old_settings, 'nav_text_shadow_hover_color' );
349
  $design_settings['nav_text_shadow_hover_color_checkbox'] = $this->get_old_setting( $old_settings, 'nav_text_shadow_hover_color_checkbox' );
350
  $design_settings['nav_text_shadow_hover_color_opacity'] = $this->get_old_setting( $old_settings, 'nav_text_shadow_hover_color_opacity' );
351
-
352
  $design_settings['custom_css'] = wp_filter_nohtml_kses( $this->get_old_setting( $old_settings, 'custom_css' ) );
353
  $design_settings['animate.css'] = 'off'; // New
354
  $design_settings['custom_html'] = wp_kses_post( $this->get_old_setting( $old_settings, 'custom_html' ) );
355
  $design_settings['custom_jquery'] = wp_specialchars_decode( stripslashes( $this->get_old_setting( $old_settings, 'custom_jquery' ) ), 1, 0, 1 );
356
-
357
  /** General */
358
  $general_settings['active'] = $this->get_old_setting( $old_settings, 'active', 'on' );
359
  $general_settings['capability'] = 'manage_options'; // New
@@ -361,14 +361,14 @@ class CL_Settings_Upgrade {
361
  $general_settings['admin_notices'] = 'off'; // New
362
  $general_settings['wp_shake_js'] = 'off'; // New
363
  $general_settings['remove_login_css'] = 'off'; // New
364
- $general_settings['lostpassword_text'] = 'off'; // New
365
-
366
  update_option( CUSTOM_LOGIN_OPTION . '_design', $design_settings );
367
  update_option( CUSTOM_LOGIN_OPTION . '_general', $general_settings );
368
  delete_option( 'custom_login' );
369
  return true;
370
  }
371
-
372
  /**
373
  * Upgrade routine for v3.1
374
  *
@@ -377,36 +377,36 @@ class CL_Settings_Upgrade {
377
  * @return void
378
  */
379
  private function cl_v31_upgrades() {
380
-
381
  $general_settings = get_option( CUSTOM_LOGIN_OPTION . '_general', array() );
382
-
383
- // Remove old settings
384
  unset( $general_settings['allow_password_reset'] );
385
  unset( $general_settings['auth_timeout'] );
386
  unset( $general_settings['auth_timeout_remember'] );
387
-
388
  // Leave
389
  $general_settings['active'] = $this->get_old_setting( $general_settings, 'active', 'on' );
390
-
391
  // New settings
392
  $general_settings['dashboard_widget'] = 'off';
393
-
394
  update_option( CUSTOM_LOGIN_OPTION . '_general', $general_settings );
395
-
396
  // Update tracking options name
397
  update_option( CUSTOM_LOGIN_OPTION . '_tracking_last_send', get_option( 'cl_tracking_last_send' ) );
398
  update_option( CUSTOM_LOGIN_OPTION . '_tracking_notice', get_option( 'cl_tracking_notice' ) );
399
  delete_option( 'cl_tracking_last_send' );
400
  delete_option( 'cl_tracking_notice' );
401
-
402
  delete_option( CUSTOM_LOGIN_OPTION . '_announcement_message' );
403
-
404
  /** Cleanup Cron Events */
405
  wp_clear_scheduled_hook( 'cl_daily_scheduled_events' );
406
  wp_clear_scheduled_hook( 'cl_weekly_scheduled_events' );
407
  return true;
408
  }
409
-
410
  /**
411
  * Helper function to check if option isset
412
  *
@@ -415,12 +415,12 @@ class CL_Settings_Upgrade {
415
  private function get_old_setting( $setting = array(), $option = null, $default = '' ) {
416
  if ( is_null( $option ) )
417
  return $default;
418
-
419
  if ( isset( $setting[$option] ) )
420
  return $setting[$option];
421
-
422
  return $default;
423
  }
424
-
425
  }
426
- CL_Settings_Upgrade::instance();
14
 
15
  /** Singleton *************************************************************/
16
  private static $instance;
17
+
18
  protected $parent;
19
 
20
  /**
31
  }
32
  return self::$instance;
33
  }
34
+
35
  private function actions() {
36
+
37
  add_action( 'admin_notices', array( $this, 'upgrade_notices' ) );
38
  add_action( 'admin_menu', array( $this, 'add_submenu_page' ) );
39
  add_action( 'wp_ajax_custom_login_trigger_upgrades', array( $this, 'trigger_upgrades' ) );
47
  * @return void
48
  */
49
  public function upgrade_notices() {
50
+
51
  if ( isset( $_GET['page'] ) && $_GET['page'] == ( 'custom-login-upgrades' || 'custom-login' ) )
52
  return; // Don't show notices on the upgrades page
53
+
54
  $cl_version = get_option( CUSTOM_LOGIN_OPTION . '_version' );
55
+
56
  if ( ! $cl_version ) {
57
  // 2.0 is the first version to use this option so we must add it
58
  $cl_version = '2.0';
59
  }
60
+
61
  $cl_version = preg_replace( '/[^0-9.].*/', '', $cl_version );
62
+
63
  // Version less than 2.0 (settings exist)
64
  if ( false !== ( $old_settings = get_option( 'custom_login_settings', false ) ) ) {
65
+
66
  // New install
67
  if ( !$old_settings )
68
  return;
69
+
70
  if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
71
  $cl_version = $old_settings['version'];
72
+
73
  // Versions less than 2.0
74
  if ( version_compare( $cl_version, '2.0', '<' ) ) {
75
  printf(
76
  '<div class="updated"><p>' . __( 'Custom Login needs to upgrade the settings, please click <a href="%s">here</a> to start the upgrade.', CUSTOM_LOGIN_DIRNAME ) . '</p></div>',
77
+ esc_url( add_query_arg( array( 'ver' => '2.0' ), admin_url( 'options.php?page=custom-login-upgrades' ) ) )
78
  );
79
  }
80
  } // 2.0
81
+
82
  // Version less than 3.0 (settings exist)
83
  if ( false !== ( $old_settings = get_option( 'custom_login', false ) ) ) {
84
+
85
  // Versions less than 3.0
86
  if ( version_compare( $cl_version, '3.0', '<' ) ) {
87
  printf(
90
  );
91
  }
92
  } // 3.0
93
+
94
  // Version less than 3.1
95
+ if ( version_compare( CUSTOM_LOGIN_VERSION, '3.1', '<' ) ) {
96
  printf(
97
+ '<div class="notice is-dismissible"><p>' . __( 'Custom Login needs to upgrade the database, please click <a href="%s">here</a> to start the upgrade.', CUSTOM_LOGIN_DIRNAME ) . '</p></div>',
98
+ esc_url( add_query_arg( array( 'ver' => '3.1' ), admin_url( 'options.php?page=custom-login-upgrades' ) ) )
99
  );
100
  } // 3.1
101
  }
102
+
103
  /**
104
  * Add Submenu Upgrade page
105
  *
107
  * @since 1.0
108
  * @return void
109
  */
110
+ public function add_submenu_page() {
111
+
112
  add_submenu_page(
113
  null,
114
  __( 'Custom Login Upgrades', CUSTOM_LOGIN_DIRNAME ),
154
  </div>
155
  <?php
156
  }
157
+
158
  /**
159
  * Triggers all upgrade functions
160
  *
164
  * @since 2.0
165
  */
166
  public function trigger_upgrades() {
167
+
168
  check_ajax_referer( 'CL_Settings_Upgrade' . basename( __FILE__ ), 'nonce' );
169
+
170
  $cl_version = get_option( CUSTOM_LOGIN_OPTION . '_version' );
171
+
172
  if ( ! $cl_version ) {
173
  // 2.0 is the first version to use this option so we must add it
174
  $cl_version = '2.0';
175
  add_option( CUSTOM_LOGIN_OPTION . '_version', $cl_version );
176
  }
177
+
178
  // Version less than 2.0
179
  if ( false !== ( $old_settings = get_option( 'custom_login_settings', false ) ) ) {
180
+
181
  $cl_version = '1.0';
182
+
183
  if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
184
  $cl_version = $old_settings['version'];
185
+
186
  if ( version_compare( $cl_version, '2.0', '<' ) ) {
187
  $this->cl_v20_upgrades();
188
  }
189
+
190
  } // 2.0
191
+
192
  // Version less than 3.0
193
  if ( false !== ( $old_settings = get_option( 'custom_login', false ) ) ) {
194
+
195
  $cl_version = '2.0';
196
+
197
  if ( !empty( $old_settings ) && !empty( $old_settings['version'] ) )
198
  $cl_version = $old_settings['version'];
199
+
200
  if ( version_compare( $cl_version, '3.0', '<' ) ) {
201
  $this->cl_v30_upgrades();
202
  }
203
+
204
  } // 3.0
205
+
206
  // Version less than 3.1
207
  if ( version_compare( $cl_version, '3.1', '<' ) ) {
208
  $this->cl_v31_upgrades();
209
  } // 3.1
210
+
211
  update_option( CUSTOM_LOGIN_OPTION . '_version', CUSTOM_LOGIN_VERSION );
212
+
213
  if ( DOING_AJAX ) {
214
  die( 'complete' );
215
  }
216
  }
217
+
218
  /**
219
  * Upgrade routine for v2.0
220
  *
223
  * @return void
224
  */
225
  private function cl_v20_upgrades() {
226
+
227
  $old_settings = get_option( 'custom_login_settings' );
228
  $new_settings = get_option( 'custom_login', array() );
229
+
230
  $new_settings['version'] = $this->parent->version;
231
  $new_settings['active'] = true === $old_settings['custom'] ? 'on' : 'off';
232
  $new_settings['html_background_color'] = CL_Scripts_Styles::is_rgba( $old_settings['html_background_color'] ) ? CL_Scripts_Styles::rgba2hex( $old_settings['html_background_color'] ) : $old_settings['html_background_color'];
275
  $new_settings['custom_css'] = wp_filter_nohtml_kses( $old_settings['custom_css'] );
276
  $new_settings['custom_html'] = wp_kses_post( $old_settings['custom_html'] );
277
  $new_settings['custom_jquery'] = wp_specialchars_decode( stripslashes( $old_settings['custom_jquery'] ), 1, 0, 1 );
278
+
279
  update_option( 'custom_login', $new_settings );
280
  delete_option( 'custom_login_settings' );
281
  return true;
282
  }
283
+
284
  /**
285
  * Upgrade routine for v3.0
286
  *
289
  * @return void
290
  */
291
  private function cl_v30_upgrades() {
292
+
293
  $old_settings = get_option( 'custom_login', array() );
294
  $design_settings = get_option( CUSTOM_LOGIN_OPTION . '_design', array() );
295
  $general_settings = get_option( CUSTOM_LOGIN_OPTION . '_general', array() );
296
+
297
  /** Design */
298
  $design_settings['html_background_color'] = $this->get_old_setting( $old_settings, 'html_background_color' );
299
  $design_settings['html_background_color_checkbox'] = $this->get_old_setting( $old_settings, 'html_background_color_checkbox' );
302
  $design_settings['html_background_position'] = $this->get_old_setting( $old_settings, 'html_background_position' );
303
  $design_settings['html_background_repeat'] = $this->get_old_setting( $old_settings, 'html_background_repeat' );
304
  $design_settings['html_background_size'] = $this->get_old_setting( $old_settings, 'html_background_size' );
305
+
306
  $design_settings['logo_force_form_max_width'] = 'off'; // New
307
  $design_settings['hide_wp_logo'] = $this->get_old_setting( $old_settings, 'hide_wp_logo' );
308
  $design_settings['logo_background_url'] = $this->get_old_setting( $old_settings, 'logo_background_url' );
311
  $design_settings['logo_background_position'] = $this->get_old_setting( $old_settings, 'logo_background_position' );
312
  $design_settings['logo_background_repeat'] = $this->get_old_setting( $old_settings, 'logo_background_repeat' );
313
  $design_settings['logo_background_size'] = $this->get_old_setting( $old_settings, 'logo_background_size' );
314
+
315
  $design_settings['login_form_width'] = ''; // New
316
+
317
  $design_settings['login_form_background_color'] = $this->get_old_setting( $old_settings, 'login_form_background_color' );
318
  $design_settings['login_form_background_color_checkbox'] = $this->get_old_setting( $old_settings, 'login_form_background_color_checkbox' );
319
  $design_settings['login_form_background_color_opacity'] = $this->get_old_setting( $old_settings, 'login_form_background_color_opacity' );
321
  $design_settings['login_form_background_position'] = $this->get_old_setting( $old_settings, 'login_form_background_position' );
322
  $design_settings['login_form_background_repeat'] = $this->get_old_setting( $old_settings, 'login_form_background_repeat' );
323
  $design_settings['login_form_background_size'] = $this->get_old_setting( $old_settings, 'login_form_background_size' );
324
+
325
  $design_settings['login_form_border_radius'] = $this->get_old_setting( $old_settings, 'login_form_border_radius' );
326
  $design_settings['login_form_border_size'] = $this->get_old_setting( $old_settings, 'login_form_border_size' );
327
  $design_settings['login_form_border_color'] = $this->get_old_setting( $old_settings, 'login_form_border_color' );
331
  $design_settings['login_form_box_shadow_color'] = $this->get_old_setting( $old_settings, 'login_form_box_shadow_color' );
332
  $design_settings['login_form_box_shadow_color_checkbox'] = $this->get_old_setting( $old_settings, 'login_form_box_shadow_color_checkbox' );
333
  $design_settings['login_form_box_shadow_color_opacity'] = $this->get_old_setting( $old_settings, 'login_form_box_shadow_color_opacity' );
334
+
335
  $design_settings['label_color'] = $this->get_old_setting( $old_settings, 'label_color' );
336
  $design_settings['label_color_checkbox'] = $this->get_old_setting( $old_settings, 'label_color_checkbox' );
337
  $design_settings['label_color_opacity'] = $this->get_old_setting( $old_settings, 'label_color_opacity' );
338
+
339
  $design_settings['nav_color'] = $this->get_old_setting( $old_settings, 'nav_color' );
340
  $design_settings['nav_color_checkbox'] = $this->get_old_setting( $old_settings, 'nav_color_checkbox' );
341
  $design_settings['nav_color_opacity'] = $this->get_old_setting( $old_settings, 'nav_color_opacity' );
348
  $design_settings['nav_text_shadow_hover_color'] = $this->get_old_setting( $old_settings, 'nav_text_shadow_hover_color' );
349
  $design_settings['nav_text_shadow_hover_color_checkbox'] = $this->get_old_setting( $old_settings, 'nav_text_shadow_hover_color_checkbox' );
350
  $design_settings['nav_text_shadow_hover_color_opacity'] = $this->get_old_setting( $old_settings, 'nav_text_shadow_hover_color_opacity' );
351
+
352
  $design_settings['custom_css'] = wp_filter_nohtml_kses( $this->get_old_setting( $old_settings, 'custom_css' ) );
353
  $design_settings['animate.css'] = 'off'; // New
354
  $design_settings['custom_html'] = wp_kses_post( $this->get_old_setting( $old_settings, 'custom_html' ) );
355
  $design_settings['custom_jquery'] = wp_specialchars_decode( stripslashes( $this->get_old_setting( $old_settings, 'custom_jquery' ) ), 1, 0, 1 );
356
+
357
  /** General */
358
  $general_settings['active'] = $this->get_old_setting( $old_settings, 'active', 'on' );
359
  $general_settings['capability'] = 'manage_options'; // New
361
  $general_settings['admin_notices'] = 'off'; // New
362
  $general_settings['wp_shake_js'] = 'off'; // New
363
  $general_settings['remove_login_css'] = 'off'; // New
364
+ $general_settings['lostpassword_text'] = 'off'; // New
365
+
366
  update_option( CUSTOM_LOGIN_OPTION . '_design', $design_settings );
367
  update_option( CUSTOM_LOGIN_OPTION . '_general', $general_settings );
368
  delete_option( 'custom_login' );
369
  return true;
370
  }
371
+
372
  /**
373
  * Upgrade routine for v3.1
374
  *
377
  * @return void
378
  */
379
  private function cl_v31_upgrades() {
380
+
381
  $general_settings = get_option( CUSTOM_LOGIN_OPTION . '_general', array() );
382
+
383
+ // Remove old settings
384
  unset( $general_settings['allow_password_reset'] );
385
  unset( $general_settings['auth_timeout'] );
386
  unset( $general_settings['auth_timeout_remember'] );
387
+
388
  // Leave
389
  $general_settings['active'] = $this->get_old_setting( $general_settings, 'active', 'on' );
390
+
391
  // New settings
392
  $general_settings['dashboard_widget'] = 'off';
393
+
394
  update_option( CUSTOM_LOGIN_OPTION . '_general', $general_settings );
395
+
396
  // Update tracking options name
397
  update_option( CUSTOM_LOGIN_OPTION . '_tracking_last_send', get_option( 'cl_tracking_last_send' ) );
398
  update_option( CUSTOM_LOGIN_OPTION . '_tracking_notice', get_option( 'cl_tracking_notice' ) );
399
  delete_option( 'cl_tracking_last_send' );
400
  delete_option( 'cl_tracking_notice' );
401
+
402
  delete_option( CUSTOM_LOGIN_OPTION . '_announcement_message' );
403
+
404
  /** Cleanup Cron Events */
405
  wp_clear_scheduled_hook( 'cl_daily_scheduled_events' );
406
  wp_clear_scheduled_hook( 'cl_weekly_scheduled_events' );
407
  return true;
408
  }
409
+
410
  /**
411
  * Helper function to check if option isset
412
  *
415
  private function get_old_setting( $setting = array(), $option = null, $default = '' ) {
416
  if ( is_null( $option ) )
417
  return $default;
418
+
419
  if ( isset( $setting[$option] ) )
420
  return $setting[$option];
421
+
422
  return $default;
423
  }
424
+
425
  }
426
+ CL_Settings_Upgrade::instance();
includes/class-cl-templates.php CHANGED
File without changes
includes/class-cl-wp-login.php CHANGED
@@ -8,283 +8,255 @@
8
  */
9
 
10
  // Exit if accessed directly
11
- if ( !defined( 'ABSPATH' ) ) exit;
 
 
12
 
13
  class CL_WP_Login {
14
 
15
- /** Singleton *************************************************************/
16
- private static $instance;
17
-
18
- /**
19
- * Main Instance
20
- *
21
- * @staticvar array $instance
22
- * @return The one true instance
23
- */
24
- public static function instance() {
25
- if ( ! isset( self::$instance ) ) {
26
- self::$instance = new self;
27
- self::$instance->init();
28
- }
29
- return self::$instance;
30
- }
31
-
32
- private function init() {
33
-
34
- if ( 'off' === CL_Common::get_option( 'active', 'general', 'off' ) )
35
- return;
36
-
37
- $this->actions();
38
- $this->filters();
39
- }
40
-
41
- private function actions() {
42
-
43
- add_action( 'login_enqueue_scripts', array( $this, 'login_enqueue_scripts' ) );
44
- add_action( 'login_footer', array( $this, 'login_footer_html' ), 8 );
45
- add_action( 'login_footer', array( $this, 'login_footer_jquery' ), 19 );
46
-
47
- add_action( 'init', array( $this, 'login_remove_scripts' ) );
48
- add_action( 'login_head', array( $this, 'login_head' ), 10 );
49
- add_filter( 'login_headerurl', array( $this, 'login_headerurl' ) );
50
- add_filter( 'login_headertitle', array( $this, 'login_headertitle' ) );
51
- }
52
-
53
- private function filters() {
54
-
55
- # add_filter( 'auth_cookie_expiration', array( $this, 'auth_cookie_expiration' ), 99, 3 ); // @removed 3.1
56
- # add_filter( 'allow_password_reset', array( $this, 'allow_password_reset' ) ); // @removed 3.1
57
- add_filter( 'gettext', array( $this, 'remove_lostpassword_text' ), 20, 2 );
58
- }
59
-
60
- /**
61
- *************************************************************
62
- **************** ACTIONS **********************************
63
- *************************************************************
64
- */
65
-
66
- /**
67
- * Enqueue additional scripts.
68
- *
69
- * @since 2.0
70
- * @updated 3.2
71
- */
72
- function login_enqueue_scripts() {
73
- global $cl_css_atts;
74
-
75
- $cl_css_atts = array(
76
- 'version' => CUSTOM_LOGIN_VERSION,
77
- 'trans_key' => CL_Common::get_transient_key( 'style' ),
78
- );
79
- $cl_css_atts = wp_parse_args( CL_Common::get_options( 'design' ), $cl_css_atts );
80
-
81
- ob_start();
82
- echo "<style type=\"text/css\">\n";
83
- CL_Templates::get_template_part( 'wp-login', 'style' );
84
- echo "\n</style>\n";
85
- echo ob_get_clean();
86
-
87
- /**
88
- * Animate.css
89
- * @ref https://github.com/daneden/animate.css/blob/master/animate.min.css
90
- */
91
- $animate_css = CL_Common::get_option( 'animate.css', 'design', 'off' );
92
- if ( 'on' == $animate_css ) {
93
- wp_enqueue_style( 'animate.css', plugins_url( 'css/animate.min.css', CUSTOM_LOGIN_FILE ), array( 'login' ), '08112014', 'screen' );
94
- }
95
-
96
- /* Custom jQuery */
97
- $jquery = CL_Common::get_option( 'custom_jquery', 'design', '' );
98
- if ( '' != $jquery ) {
99
- wp_enqueue_script( array( 'jquery' ) );
100
- }
101
- }
102
-
103
- /**
104
- * If there is custom HTML set in the settings echo it to the
105
- * 'login_footer' hook in wp-login.php.
106
- *
107
- * @return string|void
108
- */
109
- public function login_footer_html() {
110
-
111
- $custom_html = CL_Common::get_option( 'custom_html', 'design', false );
112
-
113
- if ( $custom_html ) {
114
- $html = wp_kses_post( $custom_html );
115
- $html .= "\n";
116
-
117
- echo $html;
118
- }
119
- }
120
-
121
- /**
122
- * Database access to the scripts and styles.
123
- *
124
- * @since 2.1
125
- * @return string|void
126
- */
127
- public function login_footer_jquery() {
128
-
129
- $jquery = CL_Common::get_option( 'custom_jquery', 'design', '' );
130
-
131
- if ( '' != $jquery ) {
132
-
133
- global $cl_js_atts;
134
-
135
- $cl_js_atts = array(
136
- 'version' => CUSTOM_LOGIN_VERSION,
137
- 'trans_key' => CL_Common::get_transient_key( 'script' ),
138
- );
139
- $cl_js_atts = wp_parse_args( CL_Common::get_options( 'design' ), $cl_js_atts );
140
-
141
- foreach( $cl_js_atts as $atts => $value ) {
142
- if ( 'custom_jquery' !== $atts && 'version' !== $atts && 'trans_key' !== $atts )
143
- unset( $cl_js_atts[$atts] );
144
- }
145
-
146
- ob_start();
147
- echo "<script type=\"text/javascript\">\n";
148
- CL_Templates::get_template_part( 'wp-login', 'script' );
149
- echo "\n</script>\n";
150
- echo ob_get_clean();
151
- }
152
- }
153
-
154
- /**
155
- * Finds the global page for the wp-login.php. When on the page
156
- * remove default stylesheets so we can add our own.
157
- *
158
- * @return void
159
- */
160
- function login_remove_scripts() {
161
- global $pagenow;
162
-
163
- if ( 'wp-login.php' == $pagenow ) {
164
-
165
- $suffix = is_rtl() ? '-rtl' : '';
166
- $suffix .= defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; // Don't have minified version in place.
167
-
168
- /**
169
- * User reports on messed up checkboxes
170
- *
171
- * Probobly easier to use WordPress login CSS
172
- *
173
- wp_deregister_style( array( 'login' ) );
174
-
175
- wp_enqueue_style( 'forms', get_admin_url( get_current_blog_id(), "css/forms{$suffix}.css", 'admin' ), null, CUSTOM_LOGIN_VERSION, 'screen' );
176
- wp_enqueue_style( 'l10n', get_admin_url( get_current_blog_id(), "css/l10n{$suffix}.css", 'admin' ), null, CUSTOM_LOGIN_VERSION, 'screen' );
177
- wp_register_style( 'login', plugins_url( "css/login/login{$suffix}.css", CUSTOM_LOGIN_FILE ), array( 'buttons' ), CUSTOM_LOGIN_VERSION, 'all' );
178
- */
179
-
180
- if ( 'on' === CL_Common::get_option( 'remove_login_css', 'general' ) ) {
181
- add_filter( 'wp_admin_css', '__return_false' );
182
- wp_deregister_style( array( 'login' ) );
183
- }
184
- }
185
- }
186
-
187
- /**
188
- * Actions hooked into login_head
189
- *
190
- */
191
- public function login_head() {
192
-
193
- if ( 'on' === CL_Common::get_option( 'wp_shake_js', 'general' ) ) {
194
- remove_action( 'login_head', 'wp_shake_js', 12 );
195
- }
196
- }
197
-
198
- /**
199
- * Replace the default link to your URL
200
- */
201
- public function login_headerurl() {
202
-
203
- if ( !is_multisite() ) return home_url();
204
- }
205
-
206
- /**
207
- * Replace the default title to your description
208
- */
209
- public function login_headertitle() {
210
-
211
- if ( !is_multisite() ) return get_bloginfo( 'description' );
212
- }
213
-
214
- /**
215
- *************************************************************
216
- **************** FILTERS **********************************
217
- *************************************************************
218
- */
219
-
220
- /**
221
- * Allow password reset.
222
- *
223
- * @added 3.0.5
224
- * @updated 3.0.8
225
- * @disabled 3.1.0
226
- * @ref https://wordpress.org/plugins/configure-login-timeout/
227
- * @removed 3.1
228
- */
229
- public function auth_cookie_expiration( $seconds, $user_id, $remember ) {
230
-
231
- $expire_in = 0;
232
-
233
- if ( $remember ) {
234
- $expire_in = (int) CL_Common::get_option( 'auth_timeout_remember', 'general', 14 * DAY_IN_SECONDS );
235
- if ( $expire_in <= 0 )
236
- $expire_in = 14 * DAY_IN_SECONDS;
237
- }
238
- else {
239
- $expire_in = (int) CL_Common::get_option( 'auth_timeout', 'general', 2 * DAY_IN_SECONDS );
240
- if ( $expire_in <= 0 )
241
- $expire_in = 2 * DAY_IN_SECONDS;
242
- }
243
-
244
- // check for Year 2038 problem - http://en.wikipedia.org/wiki/Year_2038_problem
245
- if ( PHP_INT_MAX - time() < $expire_in ) {
246
- $expire_in = PHP_INT_MAX - time() - 5;
247
- }
248
-
249
- return $expire_in;
250
- }
251
-
252
- /**
253
- * Allow password reset.
254
- *
255
- * 'on' equals don't allow. :/
256
- *
257
- * @updated 3.0.5
258
- * @removed 3.1
259
- */
260
- public function allow_password_reset( $user_id ) {
261
- if ( 'on' === CL_Common::get_option( 'allow_password_reset', 'general', 'off' ) )
262
- return false;
263
-
264
- return true;
265
- }
266
-
267
- /**
268
- * Remove the "Lost your password?" text.
269
- */
270
- public function remove_lostpassword_text( $translated_text, $untranslated_text ) {
271
- global $pagenow;
272
-
273
- if ( 'wp-login.php' == $pagenow ) {
274
-
275
- if ( 'off' !== CL_Common::get_option( 'lostpassword_text', 'general' ) ) {
276
- //make the changes to the text
277
- switch( $untranslated_text ) {
278
-
279
- case 'Lost your password?':
280
- $translated_text = '';
281
- break;
282
- }
283
- }
284
- }
285
-
286
- return $translated_text;
287
- }
288
-
289
  }
290
- add_action( CUSTOM_LOGIN_OPTION . '_actions', array( 'CL_WP_Login', 'instance' ) );
 
8
  */
9
 
10
  // Exit if accessed directly
11
+ if ( ! defined( 'ABSPATH' ) ) {
12
+ exit;
13
+ }
14
 
15
  class CL_WP_Login {
16
 
17
+ /** Singleton *************************************************************/
18
+ private static $instance;
19
+
20
+ /**
21
+ * Main Instance
22
+ *
23
+ * @staticvar array $instance
24
+ * @return self The one true instance
25
+ */
26
+ public static function instance() {
27
+ if ( ! isset( self::$instance ) ) {
28
+ self::$instance = new self;
29
+ self::$instance->init();
30
+ }
31
+
32
+ return self::$instance;
33
+ }
34
+
35
+ private function init() {
36
+
37
+ if ( 'off' === CL_Common::get_option( 'active', 'general', 'off' ) ) {
38
+ return;
39
+ }
40
+
41
+ $this->actions();
42
+ $this->filters();
43
+ }
44
+
45
+ private function actions() {
46
+ add_action( 'login_enqueue_scripts', array( $this, 'login_enqueue_scripts' ) );
47
+ add_action( 'login_footer', array( $this, 'login_footer_html' ), 8 );
48
+ add_action( 'login_footer', array( $this, 'login_footer_jquery' ), 19 );
49
+
50
+ add_action( 'init', array( $this, 'login_remove_scripts' ) );
51
+ add_action( 'login_head', array( $this, 'login_head' ), 10 );
52
+ add_filter( 'login_headerurl', array( $this, 'login_headerurl' ) );
53
+ if (version_compare($GLOBALS['wp_version'],'5.2', '>=')) {
54
+ add_filter('login_headertext', [$this, 'login_headertitle']);
55
+ } else {
56
+ add_filter('login_headertitle', [$this, 'login_headertitle']);
57
+ }
58
+ }
59
+
60
+ private function filters() {
61
+ add_filter( 'gettext', array( $this, 'remove_lostpassword_text' ), 20, 2 );
62
+ }
63
+
64
+ /**
65
+ *************************************************************
66
+ **************** ACTIONS **********************************
67
+ *************************************************************
68
+ */
69
+
70
+ /**
71
+ * Enqueue additional scripts.
72
+ *
73
+ * @since 2.0
74
+ * @updated 3.2
75
+ */
76
+ public function login_enqueue_scripts() {
77
+ /**
78
+ * Animate.css
79
+ * @ref https://github.com/daneden/animate.css/blob/master/animate.min.css
80
+ */
81
+ $animate_css = CL_Common::get_option( 'animate.css', 'design', 'off' );
82
+ if ( 'on' == $animate_css ) {
83
+ wp_enqueue_style( 'animate.css', plugins_url( 'css/animate.min.css', CUSTOM_LOGIN_FILE ), array( 'login' ), '08112014', 'screen' );
84
+ }
85
+
86
+ /* Custom jQuery */
87
+ $jquery = CL_Common::get_option( 'custom_jquery', 'design', '' );
88
+ if ( '' !== $jquery ) {
89
+ wp_enqueue_script( 'jquery' );
90
+ }
91
+ }
92
+
93
+ /**
94
+ * If there is custom HTML set in the settings echo it to the
95
+ * 'login_footer' hook in wp-login.php.
96
+ *
97
+ * @return string|void
98
+ */
99
+ public function login_footer_html() {
100
+
101
+ $custom_html = CL_Common::get_option( 'custom_html', 'design', false );
102
+
103
+ if ( $custom_html ) {
104
+ $html = wp_kses_post( $custom_html );
105
+ $html .= "\n";
106
+
107
+ echo $html;
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Database access to the scripts and styles.
113
+ *
114
+ * @since 2.1
115
+ * @return string|void
116
+ */
117
+ public function login_footer_jquery() {
118
+
119
+ $jquery = CL_Common::get_option( 'custom_jquery', 'design', '' );
120
+
121
+ if ( '' != $jquery ) {
122
+
123
+ global $cl_js_atts;
124
+
125
+ $cl_js_atts = array(
126
+ 'version' => CUSTOM_LOGIN_VERSION,
127
+ 'trans_key' => CL_Common::get_transient_key( 'script' ),
128
+ );
129
+ $cl_js_atts = wp_parse_args( CL_Common::get_options( 'design' ), $cl_js_atts );
130
+
131
+ foreach ( $cl_js_atts as $atts => $value ) {
132
+ if ( 'custom_jquery' !== $atts && 'version' !== $atts && 'trans_key' !== $atts ) {
133
+ unset( $cl_js_atts[ $atts ] );
134
+ }
135
+ }
136
+
137
+ ob_start();
138
+ echo "<script type=\"text/javascript\">\n";
139
+ CL_Templates::get_template_part( 'wp-login', 'script' );
140
+ echo "\n</script>\n";
141
+ echo ob_get_clean();
142
+ }
143
+ }
144
+
145
+ /**
146
+ * Finds the global page for the wp-login.php. When on the page
147
+ * remove default stylesheets so we can add our own.
148
+ *
149
+ * @return void
150
+ */
151
+ function login_remove_scripts() {
152
+ global $pagenow;
153
+
154
+ if ( 'wp-login.php' == $pagenow ) {
155
+
156
+ $suffix = is_rtl() ? '-rtl' : '';
157
+ $suffix .= defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; // Don't have minified version in place.
158
+
159
+ /**
160
+ * User reports on messed up checkboxes
161
+ *
162
+ * Probobly easier to use WordPress login CSS
163
+ *
164
+ * wp_deregister_style( array( 'login' ) );
165
+ *
166
+ * wp_enqueue_style( 'forms', get_admin_url( get_current_blog_id(), "css/forms{$suffix}.css", 'admin' ), null, CUSTOM_LOGIN_VERSION, 'screen' );
167
+ * wp_enqueue_style( 'l10n', get_admin_url( get_current_blog_id(), "css/l10n{$suffix}.css", 'admin' ), null, CUSTOM_LOGIN_VERSION, 'screen' );
168
+ * wp_register_style( 'login', plugins_url( "css/login/login{$suffix}.css", CUSTOM_LOGIN_FILE ), array( 'buttons' ), CUSTOM_LOGIN_VERSION, 'all' );
169
+ */
170
+
171
+ if ( 'on' === CL_Common::get_option( 'remove_login_css', 'general' ) ) {
172
+ add_filter( 'wp_admin_css', '__return_false' );
173
+ wp_deregister_style( 'login' );
174
+ }
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Actions hooked into login_head
180
+ *
181
+ */
182
+ public function login_head() {
183
+ global $cl_css_atts;
184
+
185
+ $cl_css_atts = array(
186
+ 'version' => CUSTOM_LOGIN_VERSION,
187
+ 'trans_key' => CL_Common::get_transient_key( 'style' ),
188
+ );
189
+ $cl_css_atts = wp_parse_args( CL_Common::get_options( 'design' ), $cl_css_atts );
190
+
191
+ ob_start();
192
+ echo "<style type=\"text/css\">\n";
193
+ CL_Templates::get_template_part( 'wp-login', 'style' );
194
+ echo "\n</style>\n";
195
+ echo ob_get_clean();
196
+
197
+ if ( 'on' === CL_Common::get_option( 'wp_shake_js', 'general' ) ) {
198
+ remove_action( 'login_head', 'wp_shake_js', 12 );
199
+ }
200
+ }
201
+
202
+ /**
203
+ * Replace the default link to your URL
204
+ *
205
+ * @param string $url
206
+ *
207
+ * @return string
208
+ */
209
+ public function login_headerurl( $url ) {
210
+ if ( ! is_multisite() ) {
211
+ return home_url();
212
+ }
213
+
214
+ return $url;
215
+ }
216
+
217
+ /**
218
+ * Replace the default title to your description
219
+ *
220
+ * @param string $title
221
+ *
222
+ * @return string
223
+ */
224
+ public function login_headertitle( $title ) {
225
+ if ( ! is_multisite() ) {
226
+ return get_bloginfo( 'description' );
227
+ }
228
+
229
+ return $title;
230
+ }
231
+
232
+ /**
233
+ *************************************************************
234
+ **************** FILTERS **********************************
235
+ *************************************************************
236
+ */
237
+
238
+ /**
239
+ * Remove the "Lost your password?" text.
240
+ */
241
+ public function remove_lostpassword_text( $translated_text, $untranslated_text ) {
242
+ global $pagenow;
243
+
244
+ if ( 'wp-login.php' == $pagenow ) {
245
+
246
+ if ( 'off' !== CL_Common::get_option( 'lostpassword_text', 'general' ) ) {
247
+ //make the changes to the text
248
+ switch ( $untranslated_text ) {
249
+
250
+ case 'Lost your password?':
251
+ $translated_text = '';
252
+ break;
253
+ }
254
+ }
255
+ }
256
+
257
+ return $translated_text;
258
+ }
259
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
  }
261
+
262
+ add_action( CUSTOM_LOGIN_OPTION . '_actions', array( 'CL_WP_Login', 'instance' ) );
includes/default-settings.php CHANGED
File without changes
includes/functions.php CHANGED
File without changes
includes/libraries/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
includes/libraries/edd-remote-install-client/EDD_Remote_Install_Client.php CHANGED
@@ -124,7 +124,7 @@ class CL_Remote_Install_Client {
124
  'license' => urlencode( $_GET['license'] )
125
  );
126
 
127
- $download_link = add_query_arg($api_params, $this->api_url);
128
 
129
  ///////////// NEW /////////////////
130
  $download_id = $this->get_remote_download_id( $_GET['name'] );
@@ -314,7 +314,7 @@ class CL_Remote_Install_Client {
314
  );
315
 
316
  // Call the custom API.
317
- $response = wp_remote_get( add_query_arg( $api_params, $this->api_url ), array( 'timeout' => 15, 'sslverify' => false ) );
318
 
319
  // make sure the response came back okay
320
  if ( is_wp_error( $response ) )
@@ -371,7 +371,7 @@ class CL_Remote_Install_Client {
371
  'item_name' => urlencode( $download_title )
372
  );
373
 
374
- $response = wp_remote_get( add_query_arg( $api_params, $this->api_url ), array( 'timeout' => 15, 'sslverify' => false ) );
375
 
376
  if ( !is_wp_error( $response ) )
377
  $download_id = json_decode( wp_remote_retrieve_body( $response ) );
@@ -388,7 +388,7 @@ class CL_Remote_Install_Client {
388
  'expires' => rawurlencode( base64_encode( strtotime( '+1 hour' ) ) )
389
  ), $this->api_url );
390
 
391
- return apply_filters( 'edd_sl_encoded_package_url', $package_url );
392
 
393
  }
394
  }
124
  'license' => urlencode( $_GET['license'] )
125
  );
126
 
127
+ $download_link = esc_url( add_query_arg($api_params, $this->api_url) );
128
 
129
  ///////////// NEW /////////////////
130
  $download_id = $this->get_remote_download_id( $_GET['name'] );
314
  );
315
 
316
  // Call the custom API.
317
+ $response = wp_remote_get( esc_url( add_query_arg( $api_params, $this->api_url ) ), array( 'timeout' => 15, 'sslverify' => false ) );
318
 
319
  // make sure the response came back okay
320
  if ( is_wp_error( $response ) )
371
  'item_name' => urlencode( $download_title )
372
  );
373
 
374
+ $response = wp_remote_get( esc_url( add_query_arg( $api_params, $this->api_url ) ), array( 'timeout' => 15, 'sslverify' => false ) );
375
 
376
  if ( !is_wp_error( $response ) )
377
  $download_id = json_decode( wp_remote_retrieve_body( $response ) );
388
  'expires' => rawurlencode( base64_encode( strtotime( '+1 hour' ) ) )
389
  ), $this->api_url );
390
 
391
+ return apply_filters( 'edd_sl_encoded_package_url', esc_url( $package_url ) );
392
 
393
  }
394
  }
includes/libraries/edd-remote-install-client/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
includes/libraries/edd-remote-install-client/css/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
includes/libraries/edd-remote-install-client/css/edd-remote-install-admin.css CHANGED
File without changes
includes/libraries/edd-remote-install-client/js/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
includes/libraries/edd-remote-install-client/js/edd-remote-install-admin.js CHANGED
File without changes
js/_notes/dwsync.xml DELETED
@@ -1 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8" ?>
 
js/ace/src-min-noconflict/ace.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-beautify.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-chromevox.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-elastic_tabstops_lite.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-emmet.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-error_marker.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-keybinding_menu.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-language_tools.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-linking.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-modelist.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-old_ie.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-searchbox.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-settings_menu.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-spellcheck.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-split.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-static_highlight.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-statusbar.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-textarea.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-themelist.js CHANGED
File without changes
js/ace/src-min-noconflict/ext-whitespace.js CHANGED
File without changes
js/ace/src-min-noconflict/keybinding-emacs.js CHANGED
File without changes
js/ace/src-min-noconflict/keybinding-vim.js CHANGED
File without changes
js/ace/src-min-noconflict/mode-css.js CHANGED
File without changes
js/ace/src-min-noconflict/mode-html.js CHANGED
File without changes
js/ace/src-min-noconflict/mode-javascript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/abap.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/actionscript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/ada.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/apache_conf.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/applescript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/asciidoc.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/assembly_x86.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/autohotkey.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/batchfile.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/c9search.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/c_cpp.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/cirru.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/clojure.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/cobol.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/coffee.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/coldfusion.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/csharp.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/css.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/curly.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/d.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/dart.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/diff.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/django.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/dockerfile.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/dot.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/eiffel.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/ejs.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/elixir.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/elm.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/erlang.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/forth.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/ftl.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/gcode.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/gherkin.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/gitignore.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/glsl.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/golang.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/groovy.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/haml.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/handlebars.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/haskell.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/haxe.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/html.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/html_ruby.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/ini.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/io.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/jack.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/jade.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/java.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/javascript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/json.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/jsoniq.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/jsp.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/jsx.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/julia.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/latex.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/less.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/liquid.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/lisp.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/livescript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/logiql.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/lsl.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/lua.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/luapage.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/lucene.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/makefile.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/markdown.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/matlab.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/mel.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/mushcode.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/mysql.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/nix.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/objectivec.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/ocaml.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/pascal.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/perl.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/pgsql.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/php.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/plain_text.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/powershell.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/praat.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/prolog.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/properties.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/protobuf.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/python.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/r.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/rdoc.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/rhtml.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/ruby.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/rust.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/sass.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/scad.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/scala.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/scheme.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/scss.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/sh.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/sjs.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/smarty.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/snippets.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/soy_template.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/space.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/sql.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/stylus.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/svg.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/tcl.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/tex.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/text.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/textile.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/toml.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/twig.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/typescript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/vala.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/vbscript.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/velocity.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/verilog.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/vhdl.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/xml.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/xquery.js CHANGED
File without changes
js/ace/src-min-noconflict/snippets/yaml.js CHANGED
File without changes
js/ace/src-min-noconflict/worker-coffee.js CHANGED
File without changes
js/ace/src-min-noconflict/worker-css.js CHANGED
File without changes
js/ace/src-min-noconflict/worker-html.js CHANGED
File without changes
js/ace/src-min-noconflict/worker-javascript.js CHANGED
File without changes
js/admin.js CHANGED
@@ -1,408 +1,423 @@
1
- (function($) {
2
-
3
- "use strict";
4
-
5
- /**
6
- * Match the header with the WP-admin user color selection.
7
- * Load before the document is ready.
8
- */
9
- $('.cl-header').css('background-color', $('#adminmenuwrap').css('background-color'));
10
-
11
- $(document).ready(function() {
12
-
13
- /**
14
- * Global vars
15
- *
16
- * @return string
17
- */
18
- var $this = null,
19
- activetab,
20
- clicked_group,
21
- loaded = [],
22
- form;
23
-
24
- /**
25
- *** Header *************************
26
- ************************************
27
- ************************************
28
- */
29
- $('.cl-header').contrastColor();
30
-
31
- /**
32
- *** Active *************************
33
- ************************************
34
- ************************************
35
- */
36
- $('span.tgl_input').replaceWith( $('input[id="custom_login_general[active]"]').clone() );
37
-
38
- $(document).on('click change', 'input[id="custom_login_general[active]"]', function() {
39
- // console.log(this.checked);
40
- $('input[id="custom_login_general[active]"]').prop('checked', this.checked);
41
- });
42
-
43
- /**
44
- *** Sidebar Nav + Main Group *******
45
- ************************************
46
- ************************************
47
- */
48
- //localStorage.setItem('activetab', '');
49
- $('.cl-main .group').hide();
50
- if (typeof(localStorage) != 'undefined' ) {
51
- activetab = localStorage.getItem('activetab');
52
- }
53
- if (activetab != '' && $(activetab).length ) {
54
- $(activetab).fadeIn();
55
- $('input[id="cl_save"]').val( 'Save ' + $('a[href="' + activetab + '"]').text() );
56
- }
57
- else {
58
- var first_group = $('.cl-main .group:first');
59
- first_group.fadeIn();
60
- $('input[id="cl_save"]').val( 'Save ' + $('.cl-sidebar .cl-sections-menu li:first a').text() );
61
- }
62
-
63
- if (activetab != '' && $('.cl-sections-menu a[href="' + activetab + '"]').length ) {
64
- $('.cl-sections-menu a[href="' + activetab + '"]').addClass('active');
65
- }
66
- else {
67
- $('.cl-sections-menu a:first').addClass('active');
68
- }
69
- // on.click event
70
- $('.cl-sections-menu a').on('click',function(e) {
71
- $this = $(this);
72
- clicked_group = $this.attr('href');
73
-
74
- $('input[id="cl_save"]').val( 'Save ' + $('a[href="' + clicked_group + '"]').text() );
75
-
76
- $('.cl-sections-menu a').removeClass('active');
77
- $this.addClass('active').blur();
78
- if (typeof(localStorage) != 'undefined' ) {
79
- localStorage.setItem('activetab', clicked_group);
80
- }
81
-
82
- $('[class^="chosen-"]').each(function(index, element) {
83
- if ( $(this).css('width') == '0px' ) $(this).css('width','220px');
84
- });
85
-
86
- $('.cl-main .group').hide();
87
- $(clicked_group).fadeIn();
88
- e.preventDefault();
89
- });
90
-
91
- /**
92
- *** Sticky *************************
93
- ************************************
94
- ************************************
95
- */
96
- var $sticky = $('#cl-sticky').sticky({
97
- topSpacing : $('#wpadminbar').length ? $('#wpadminbar').height() : 0,
98
- getWidthFrom : $('.cl-container')
99
- });
100
- $(window).scroll(function() {
101
- if ( $(window).scrollTop() + $(window).height() > $(document).height() - 200) {
102
- $sticky.hide();
103
- } else {
104
- $sticky.show();
105
- }
106
- });
107
-
108
- /**
109
- *** Form Submit ********************
110
- ************************************
111
- ************************************
112
- */
113
- $(document.body).on('click', 'input[name="cl_save"]', function(e) {
114
- $this = $(this);
115
- form = $('.cl-main > div.group:visible > form');
116
- $this.attr('form',form.attr('id'));
117
- form.submit();
118
- }); //*/
119
-
120
- /**
121
- *** callback_html ******************
122
- ************************************
123
- ************************************
124
- *
125
- $.each( $('div[class^="section-custom_login"]'), function( index, value ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  $(value).parents('tr').find('th').prop('colspan','2').append('<hr>');
127
  $(value).parent('td').remove();
128
  }); //*/
129
-
130
- /**
131
- *** callback_raw *******************
132
- ************************************
133
- ************************************
134
- */
135
- $.each( $('div[class="raw-html"]'), function( index, value ) {
136
- $(value).parents('tr').find('td').prop('colspan','2');
137
- $(value).parents('tr').find('th').remove();
138
- });
139
-
140
- /**
141
- *** callback_text_array ************
142
- ************************************
143
- ************************************
144
- */
145
- $('body').on('click', 'a[class^="button docopy-"]', function(e) {
146
- e.preventDefault();
147
-
148
- $this = $(this).prev().children();
149
- var clone = $('input[id="' + $this.children().prop('id') + '"]');
150
- var value = clone.data('key');
151
- var newValue = parseInt(value) + 1;
152
-
153
- var newInput = $this.last().clone();
154
- newInput.insertAfter( clone.parent().last() );
155
- newInput.children().val('').data('key',newValue);
156
- return false;
157
- });
158
- $('body').on('click', 'a[class^="button dodelete-"]', function(e) {
159
- e.preventDefault();
160
-
161
- $(this).parent().remove();
162
- });
163
-
164
- /**
165
- *** callback_colorpicker ***********
166
- ************************************
167
- ************************************
168
- */
169
- if ( cl_settings_api.callback_colorpicker ) {
170
- $.each( cl_settings_api.callback_colorpicker, function( index, value ) {
171
- $this = value.section + '[' + value.id;
172
- $('input[name="' + $this + ']"]').wpColorPicker();
173
-
174
- if ( $('select[name="' + $this + '_opacity]"]').hasClass('hidden') ) {
175
- $('select[name="' + $this + '_opacity]"]').removeClass('hidden').chosen().addClass('hidden');
176
- } else {
177
- $('select[name="' + $this + '_opacity]"]').chosen();
178
- }
179
- $('select[name="' + $this + '_opacity]"]').trigger('chosen:updated');
180
-
181
- /**
182
- * .replace @ref http://stackoverflow.com/a/3812077/558561
183
- */
184
- var str = $this + '_opacity';
185
- if ( !$('input[name="' + $this + '_checkbox]"]').is(':checked') ) {
186
- $('#' + str.replace( /[\[\]]/g, '_' ) + '__chosen').hide();
187
- }
188
-
189
- $('input[name="' + $this + '_checkbox]"]').on('change', function() {
190
- $('#' + str.replace( /[\[\]]/g, '_' ) + '__chosen').toggle();
191
- });
192
- });
193
- }
194
-
195
- /**
196
- *** callback_select ****************
197
- ************************************
198
- ************************************
199
- */
200
- if ( cl_settings_api.callback_select ) {
201
- $.each( cl_settings_api.callback_select, function( index, value ) {
202
- $('select[name="' + value.section + '[' + value.id + ']"]').chosen();
203
- $('select[name="' + value.section + '[' + value.id + ']"]').trigger('chosen:updated');
204
- });
205
- }
206
-
207
- /**
208
- *** callback_file ******************
209
- ************************************
210
- ************************************
211
- */
212
- if ( cl_settings_api.callback_file ) {
213
- $.each( cl_settings_api.callback_file, function( index, value ) {
214
- // WP 3.5+ uploader
215
- var file_frame;
216
- var wp_media_post_id = wp.media.model.settings.post.id;
217
- var set_to_post_id = 0;
218
- window.formfield = '';
219
-
220
- $(document.body).on('click', 'input[type="button"].button.' + value.id + '-browse', function(e) {
221
- e.preventDefault();
222
-
223
- $this = $(this);
224
- window.formfield = $this.closest('td');
225
-
226
- // If the media frame already exists, reopen it.
227
- if ( file_frame ) {
228
- file_frame.uploader.uploader.param( 'post_id', set_to_post_id );
229
- file_frame.open();
230
- return;
231
- } else {
232
- // Set the wp.media post id so the uploader grabs the ID we want when initialised
233
- wp.media.model.settings.post.id = set_to_post_id;
234
- }
235
-
236
- // Create the media frame.
237
- file_frame = wp.media.frames.file_frame = wp.media({
238
- frame: 'post',
239
- state: 'insert',
240
- title: $this.data( 'uploader_title' ),
241
- button: {
242
- text: $this.data( 'uploader_button_text' ),
243
- },
244
- library: {
245
- type: 'image',
246
- },
247
- multiple: false // Set to true to allow multiple files to be selected
248
- });
249
-
250
- file_frame.on( 'menu:render:default', function(view) {
251
- // Store our views in an object.
252
- var views = {};
253
-
254
- // Unset default menu items
255
- view.unset('library-separator');
256
- view.unset('gallery');
257
- view.unset('featured-image');
258
- view.unset('embed');
259
-
260
- // Initialize the views in our view object.
261
- view.set(views);
262
- });
263
-
264
- // When an image is selected, run a callback.
265
- file_frame.on( 'insert', function() {
266
- var attachment = file_frame.state().get('selection').first().toJSON();
267
-
268
- // console.log(attachment);
269
- // console.log(window.formfield.find('input[type="text"]').attr('id'));
270
-
271
- window.formfield.find('input[type="text"]').val(attachment.url);
272
- window.formfield.find('#' + value.id + '_preview').html('<div class="img-wrapper" style="width:250px"><img src="' + attachment.url + '" alt="" ><a href="#" class="remove_file_button" rel="' + value.id + '">Remove Image</a></div>');
273
-
274
- // @since 3.0.1
275
- // @updated 3.0.3
276
- if ( window.formfield.find('input[type="text"]').attr('id') == 'custom_login_design[logo_background_url]' ) {
277
- window.formfield.parents('table').find('input[name="custom_login_design[logo_background_size_width]"]').val(attachment.width);
278
- window.formfield.parents('table').find('input[name="custom_login_design[logo_background_size_height]"]').val(attachment.height);
279
- }
280
-
281
- });
282
-
283
- // Finally, open the modal
284
- file_frame.open();
285
- });
286
-
287
- $('input[type="button"].button.' + value.id + '-clear').on('click', function(e) {
288
- e.preventDefault();
289
- $(this).closest('td').find('input[type="text"]').val('');
290
- $(this).closest('td').find('#' + $(this).prop('id').replace( '_clear', '_preview') + ' div.image').remove();
291
- });
292
- $('a.remove_file_button').on( 'click', function(e) {
293
- e.preventDefault();
294
- $(this).closest('td').find('input[type="text"]').val('');
295
- $(this).parent().slideUp().remove();
296
- });
297
- });
298
- }
299
-
300
- if ( typeof( ace ) !== 'undefinded' ) {
301
-
302
- /**
303
- *** Custom CSS Textarea ************
304
- */
305
- var custom_css_textarea = $('textarea[id$="custom_css]"]');
306
- custom_css_textarea.parents('tr').find('td').prop('colspan','2');
307
- custom_css_textarea.parents('tr').find('th').remove();
308
- $('<div id="custom_login[custom_css]_ace"/>').insertAfter(custom_css_textarea);
309
- var custom_css = ace.edit("custom_login[custom_css]_ace");
310
- custom_css.setOptions({
311
- maxLines: 30,
312
- autoScrollEditorIntoView: true
313
- });
314
- custom_css.getSession().setMode("ace/mode/css");
315
- custom_css.setTheme("ace/theme/github");
316
- custom_css_textarea.hide();
317
- custom_css.getSession().setValue(custom_css_textarea.val());
318
- custom_css.getSession().on('change', function(){
319
- custom_css_textarea.val(custom_css.getSession().getValue());
320
- });
321
-
322
- /**
323
- *** Custom HTML Textarea ***********
324
- */
325
- var custom_html_textarea = $('textarea[id$="custom_html]"]');
326
- custom_html_textarea.parents('tr').find('td').prop('colspan','2');
327
- custom_html_textarea.parents('tr').find('th').remove();
328
- $('<div id="custom_login[custom_html]_ace"/>').insertAfter(custom_html_textarea);
329
- var custom_html = ace.edit("custom_login[custom_html]_ace");
330
- custom_html.setOptions({
331
- maxLines: 30,
332
- autoScrollEditorIntoView: true
333
- });
334
- custom_html.getSession().setMode("ace/mode/html");
335
- custom_html.setTheme("ace/theme/github");
336
- custom_html_textarea.hide();
337
- custom_html.getSession().setValue(custom_html_textarea.val());
338
- custom_html.getSession().on('change', function(){
339
- custom_html_textarea.val(custom_html.getSession().getValue());
340
- });
341
-
342
- /**
343
- *** Custom JS Textarea *************
344
- */
345
- var custom_js_textarea = $('textarea[id$="custom_jquery]"]');
346
- custom_js_textarea.parents('tr').find('td').prop('colspan','2');
347
- custom_js_textarea.parents('tr').find('th').remove();
348
- $('<div id="custom_login[custom_jquery]_ace"/>').insertAfter(custom_js_textarea);
349
- var custom_js = ace.edit("custom_login[custom_jquery]_ace");
350
- custom_js.setOptions({
351
- maxLines: 30,
352
- autoScrollEditorIntoView: true
353
- });
354
- custom_js.getSession().setMode("ace/mode/javascript");
355
- custom_js.setTheme("ace/theme/github");
356
- custom_js_textarea.hide();
357
- custom_js.getSession().setValue(custom_js_textarea.val());
358
- custom_js.getSession().on('change', function(){
359
- custom_js_textarea.val(custom_js.getSession().getValue());
360
- });
361
- } // ace
362
-
363
- /**
364
- *** Setting Function ***************
365
- ************************************
366
- ************************************
367
- */
368
- function get_setting( id ) {
369
-
370
- // @ref http://stackoverflow.com/a/8769051/558561
371
- if ( $.inArray(id, loaded) === -1 ) {
372
-
373
- var jqxhr = $.post( ajaxurl, {
374
- action : cl_settings_api.prefix + '_get_form',
375
- nonce : cl_settings_api.nonce,
376
- form_id : id,
377
- }, function(response) {
378
- if ( response.error == 0 ) {
379
- $(id).html(response.html);
380
- }
381
- }, 'json' );
382
-
383
- loaded.push( id );
384
- }
385
-
386
- } // get_setting()
387
-
388
- }); // (document)
389
-
390
- /**
391
- * Helper function to create contracting color
392
- * @ref http://codeitdown.com/jquery-color-contrast/
393
- */
394
- $.fn.contrastColor = function() {
395
- return this.each(function() {
396
- var bg = $(this).css('background-color');
397
- //get r,g,b and decide
398
- var rgb = bg.replace(/^(rgb|rgba)\(/,'').replace(/\)$/,'').replace(/\s/g,'').split(',');
399
- var yiq = ((rgb[0]*299)+(rgb[1]*587)+(rgb[2]*114))/1000;
400
- if ( yiq >= 128 ) {
401
- $(this).children().css('color','#111111');
402
- } else {
403
- $(this).children().css('color','#ffffff');
404
- }
405
- });
406
- };
407
-
408
- }(jQuery));
1
+ (function ($) {
2
+ "use strict";
3
+
4
+ /**
5
+ * Match the header with the WP-admin user color selection.
6
+ * Load before the document is ready.
7
+ */
8
+ $('.cl-header').css('background-color', $('#adminmenuwrap').css('background-color'));
9
+
10
+ $(document).ready(function () {
11
+
12
+ /**
13
+ * Global vars
14
+ *
15
+ * @return string
16
+ */
17
+ var $this = null,
18
+ activetab,
19
+ clicked_group,
20
+ loaded = [],
21
+ form;
22
+
23
+ /**
24
+ *** Header *************************
25
+ ************************************
26
+ ************************************
27
+ */
28
+ $('.cl-header').contrastColor();
29
+
30
+ /**
31
+ *** Active *************************
32
+ ************************************
33
+ ************************************
34
+ */
35
+ $('span.tgl_input').replaceWith($('input[id="custom_login_general[active]"]').clone());
36
+
37
+ $(document).on('change', 'input[id="custom_login_general[active]"]', function () {
38
+ $('input[id="custom_login_general[active]"]').prop('checked', this.checked);
39
+ $.ajax({
40
+ type: "POST",
41
+ data: {
42
+ action: cl_settings_api.prefix + '_activate_check',
43
+ nonce: cl_settings_api.nonce,
44
+ active_value: this.checked.toString()
45
+ },
46
+ dataType: "json",
47
+ url: ajaxurl
48
+ })
49
+ .done(function (response) {
50
+ if (response.success) {
51
+ } else {
52
+
53
+ }
54
+ })
55
+ .fail(function () {
56
+ throw new Error('Error');
57
+ });
58
+ });
59
+
60
+ /**
61
+ *** Sidebar Nav + Main Group *******
62
+ ************************************
63
+ ************************************
64
+ */
65
+ //localStorage.setItem('activetab', '');
66
+ $('.cl-main .group').hide();
67
+ if (typeof localStorage !== 'undefined') {
68
+ activetab = localStorage.getItem('activetab');
69
+ }
70
+ if (activetab !== '' && $(activetab).length) {
71
+ $(activetab).fadeIn();
72
+ $('input[id="cl_save"]').val('Save ' + $('a[href="' + activetab + '"]').text());
73
+ } else {
74
+ var first_group = $('.cl-main .group:first');
75
+ first_group.fadeIn();
76
+ $('input[id="cl_save"]').val('Save ' + $('.cl-sidebar .cl-sections-menu li:first a').text());
77
+ }
78
+
79
+ if (activetab !== '' && $('.cl-sections-menu a[href="' + activetab + '"]').length) {
80
+ $('.cl-sections-menu a[href="' + activetab + '"]').addClass('active');
81
+ } else {
82
+ $('.cl-sections-menu a:first').addClass('active');
83
+ }
84
+ // on.click event
85
+ $('.cl-sections-menu a').on('click', function (e) {
86
+ $this = $(this);
87
+ clicked_group = $this.attr('href');
88
+
89
+ $('input[id="cl_save"]').val('Save ' + $('a[href="' + clicked_group + '"]').text());
90
+
91
+ $('.cl-sections-menu a').removeClass('active');
92
+ $this.addClass('active').blur();
93
+ if (typeof (localStorage) != 'undefined') {
94
+ localStorage.setItem('activetab', clicked_group);
95
+ }
96
+
97
+ $('[class^="chosen-"]').each(function () {
98
+ if ($(this).css('width') === '0px') $(this).css('width', '220px');
99
+ });
100
+
101
+ $('.cl-main .group').hide();
102
+ $(clicked_group).fadeIn();
103
+ e.preventDefault();
104
+ });
105
+
106
+ /**
107
+ *** Sticky *************************
108
+ ************************************
109
+ ************************************
110
+ */
111
+ var $sticky = $('#cl-sticky').sticky({
112
+ topSpacing: $('#wpadminbar').length ? $('#wpadminbar').height() : 0,
113
+ getWidthFrom: $('.cl-container')
114
+ });
115
+ $(window).scroll(function () {
116
+ if ($(window).scrollTop() + $(window).height() > $(document).height() - 200) {
117
+ $sticky.hide();
118
+ } else {
119
+ $sticky.show();
120
+ }
121
+ });
122
+
123
+ /**
124
+ *** Form Submit ********************
125
+ ************************************
126
+ ************************************
127
+ */
128
+ $(document.body).on('click', 'input[name="cl_save"]', function (e) {
129
+ $this = $(this);
130
+ form = $('.cl-main > div.group:visible > form');
131
+ $this.attr('form', form.attr('id'));
132
+ form.submit();
133
+ }); //*/
134
+
135
+ /**
136
+ *** callback_html ******************
137
+ ************************************
138
+ ************************************
139
+ *
140
+ $.each( $('div[class^="section-custom_login"]'), function( index, value ) {
141
  $(value).parents('tr').find('th').prop('colspan','2').append('<hr>');
142
  $(value).parent('td').remove();
143
  }); //*/
144
+
145
+ /**
146
+ *** callback_raw *******************
147
+ ************************************
148
+ ************************************
149
+ */
150
+ $.each($('div[class="raw-html"]'), function (index, value) {
151
+ $(value).parents('tr').find('td').prop('colspan', '2');
152
+ $(value).parents('tr').find('th').remove();
153
+ });
154
+
155
+ /**
156
+ *** callback_text_array ************
157
+ ************************************
158
+ ************************************
159
+ */
160
+ $('body').on('click', 'a[class^="button docopy-"]', function (e) {
161
+ e.preventDefault();
162
+
163
+ $this = $(this).prev().children();
164
+ var clone = $('input[id="' + $this.children().prop('id') + '"]');
165
+ var value = clone.data('key');
166
+ var newValue = parseInt(value) + 1;
167
+
168
+ var newInput = $this.last().clone();
169
+ newInput.insertAfter(clone.parent().last());
170
+ newInput.children().val('').data('key', newValue);
171
+ return false;
172
+ });
173
+ $('body').on('click', 'a[class^="button dodelete-"]', function (e) {
174
+ e.preventDefault();
175
+
176
+ $(this).parent().remove();
177
+ });
178
+
179
+ /**
180
+ *** callback_colorpicker ***********
181
+ ************************************
182
+ ************************************
183
+ */
184
+ if (cl_settings_api.callback_colorpicker) {
185
+ $.each(cl_settings_api.callback_colorpicker, function (index, value) {
186
+ $this = value.section + '[' + value.id;
187
+ $('input[name="' + $this + ']"]').wpColorPicker();
188
+
189
+ if ($('select[name="' + $this + '_opacity]"]').hasClass('hidden')) {
190
+ $('select[name="' + $this + '_opacity]"]').removeClass('hidden').chosen().addClass('hidden');
191
+ } else {
192
+ $('select[name="' + $this + '_opacity]"]').chosen();
193
+ }
194
+ $('select[name="' + $this + '_opacity]"]').trigger('chosen:updated');
195
+
196
+ /**
197
+ * .replace @ref http://stackoverflow.com/a/3812077/558561
198
+ */
199
+ var str = $this + '_opacity';
200
+ if (!$('input[name="' + $this + '_checkbox]"]').is(':checked')) {
201
+ $('#' + str.replace(/[\[\]]/g, '_') + '__chosen').hide();
202
+ }
203
+
204
+ $('input[name="' + $this + '_checkbox]"]').on('change', function () {
205
+ $('#' + str.replace(/[\[\]]/g, '_') + '__chosen').toggle();
206
+ });
207
+ });
208
+ }
209
+
210
+ /**
211
+ *** callback_select ****************
212
+ ************************************
213
+ ************************************
214
+ */
215
+ if (cl_settings_api.callback_select) {
216
+ $.each(cl_settings_api.callback_select, function (index, value) {
217
+ $('select[name="' + value.section + '[' + value.id + ']"]').chosen();
218
+ $('select[name="' + value.section + '[' + value.id + ']"]').trigger('chosen:updated');
219
+ });
220
+ }
221
+
222
+ /**
223
+ *** callback_file ******************
224
+ ************************************
225
+ ************************************
226
+ */
227
+ if (cl_settings_api.callback_file) {
228
+ $.each(cl_settings_api.callback_file, function (index, value) {
229
+ // WP 3.5+ uploader
230
+ var file_frame;
231
+ var wp_media_post_id = wp.media.model.settings.post.id;
232
+ var set_to_post_id = 0;
233
+ window.formfield = '';
234
+
235
+ $(document.body).on('click', 'input[type="button"].button.' + value.id + '-browse', function (e) {
236
+ e.preventDefault();
237
+
238
+ $this = $(this);
239
+ window.formfield = $this.closest('td');
240
+
241
+ // If the media frame already exists, reopen it.
242
+ if (file_frame) {
243
+ file_frame.uploader.uploader.param('post_id', set_to_post_id);
244
+ file_frame.open();
245
+ return;
246
+ } else {
247
+ // Set the wp.media post id so the uploader grabs the ID we want when initialised
248
+ wp.media.model.settings.post.id = set_to_post_id;
249
+ }
250
+
251
+ // Create the media frame.
252
+ file_frame = wp.media.frames.file_frame = wp.media({
253
+ frame: 'post',
254
+ state: 'insert',
255
+ title: $this.data('uploader_title'),
256
+ button: {
257
+ text: $this.data('uploader_button_text'),
258
+ },
259
+ library: {
260
+ type: 'image',
261
+ },
262
+ multiple: false // Set to true to allow multiple files to be selected
263
+ });
264
+
265
+ file_frame.on('menu:render:default', function (view) {
266
+ // Store our views in an object.
267
+ var views = {};
268
+
269
+ // Unset default menu items
270
+ view.unset('library-separator');
271
+ view.unset('gallery');
272
+ view.unset('featured-image');
273
+ view.unset('embed');
274
+
275
+ // Initialize the views in our view object.
276
+ view.set(views);
277
+ });
278
+
279
+ // When an image is selected, run a callback.
280
+ file_frame.on('insert', function () {
281
+ var attachment = file_frame.state().get('selection').first().toJSON();
282
+
283
+ // console.log(attachment);
284
+ // console.log(window.formfield.find('input[type="text"]').attr('id'));
285
+
286
+ window.formfield.find('input[type="text"]').val(attachment.url);
287
+ window.formfield.find('#' + value.id + '_preview').html('<div class="img-wrapper" style="width:250px"><img src="' + attachment.url + '" alt="" ><a href="#" class="remove_file_button" rel="' + value.id + '">Remove Image</a></div>');
288
+
289
+ // @since 3.0.1
290
+ // @updated 3.0.3
291
+ if (window.formfield.find('input[type="text"]').attr('id') == 'custom_login_design[logo_background_url]') {
292
+ window.formfield.parents('table').find('input[name="custom_login_design[logo_background_size_width]"]').val(attachment.width);
293
+ window.formfield.parents('table').find('input[name="custom_login_design[logo_background_size_height]"]').val(attachment.height);
294
+ }
295
+
296
+ });
297
+
298
+ // Finally, open the modal
299
+ file_frame.open();
300
+ });
301
+
302
+ $('input[type="button"].button.' + value.id + '-clear').on('click', function (e) {
303
+ e.preventDefault();
304
+ $(this).closest('td').find('input[type="text"]').val('');
305
+ $(this).closest('td').find('#' + $(this).prop('id').replace('_clear', '_preview') + ' div.image').remove();
306
+ });
307
+ $('a.remove_file_button').on('click', function (e) {
308
+ e.preventDefault();
309
+ $(this).closest('td').find('input[type="text"]').val('');
310
+ $(this).parent().slideUp().remove();
311
+ });
312
+ });
313
+ }
314
+
315
+ if (typeof ace !== 'undefined') {
316
+
317
+ /**
318
+ *** Custom CSS Textarea ************
319
+ */
320
+ var custom_css_textarea = $('textarea[id$="custom_css]"]');
321
+ custom_css_textarea.parents('tr').find('td').prop('colspan', '2');
322
+ custom_css_textarea.parents('tr').find('th').remove();
323
+ $('<div id="custom_login[custom_css]_ace"/>').insertAfter(custom_css_textarea);
324
+ var custom_css = ace.edit("custom_login[custom_css]_ace");
325
+ custom_css.setOptions({
326
+ maxLines: 30,
327
+ autoScrollEditorIntoView: true
328
+ });
329
+ custom_css.getSession().setMode("ace/mode/css");
330
+ custom_css.setTheme("ace/theme/github");
331
+ custom_css_textarea.hide();
332
+ custom_css.getSession().setValue(custom_css_textarea.val());
333
+ custom_css.getSession().on('change', function () {
334
+ custom_css_textarea.val(custom_css.getSession().getValue());
335
+ });
336
+
337
+ /**
338
+ *** Custom HTML Textarea ***********
339
+ */
340
+ var custom_html_textarea = $('textarea[id$="custom_html]"]');
341
+ custom_html_textarea.parents('tr').find('td').prop('colspan', '2');
342
+ custom_html_textarea.parents('tr').find('th').remove();
343
+ $('<div id="custom_login[custom_html]_ace"/>').insertAfter(custom_html_textarea);
344
+ var custom_html = ace.edit("custom_login[custom_html]_ace");
345
+ custom_html.setOptions({
346
+ maxLines: 30,
347
+ autoScrollEditorIntoView: true
348
+ });
349
+ custom_html.getSession().setMode("ace/mode/html");
350
+ custom_html.setTheme("ace/theme/github");
351
+ custom_html_textarea.hide();
352
+ custom_html.getSession().setValue(custom_html_textarea.val());
353
+ custom_html.getSession().on('change', function () {
354
+ custom_html_textarea.val(custom_html.getSession().getValue());
355
+ });
356
+
357
+ /**
358
+ *** Custom JS Textarea *************
359
+ */
360
+ var custom_js_textarea = $('textarea[id$="custom_jquery]"]');
361
+ custom_js_textarea.parents('tr').find('td').prop('colspan', '2');
362
+ custom_js_textarea.parents('tr').find('th').remove();
363
+ $('<div id="custom_login[custom_jquery]_ace"/>').insertAfter(custom_js_textarea);
364
+ var custom_js = ace.edit("custom_login[custom_jquery]_ace");
365
+ custom_js.setOptions({
366
+ maxLines: 30,
367
+ autoScrollEditorIntoView: true
368
+ });
369
+ custom_js.getSession().setMode("ace/mode/javascript");
370
+ custom_js.setTheme("ace/theme/github");
371
+ custom_js_textarea.hide();
372
+ custom_js.getSession().setValue(custom_js_textarea.val());
373
+ custom_js.getSession().on('change', function () {
374
+ custom_js_textarea.val(custom_js.getSession().getValue());
375
+ });
376
+ } // ace
377
+
378
+ /**
379
+ *** Setting Function ***************
380
+ ************************************
381
+ ************************************
382
+ */
383
+ function get_setting(id) {
384
+
385
+ // @ref http://stackoverflow.com/a/8769051/558561
386
+ if ($.inArray(id, loaded) === -1) {
387
+
388
+ var jqxhr = $.post(ajaxurl, {
389
+ action: cl_settings_api.prefix + '_get_form',
390
+ nonce: cl_settings_api.nonce,
391
+ form_id: id,
392
+ }, function (response) {
393
+ if (response.error === 0) {
394
+ $(id).html(response.html);
395
+ }
396
+ }, 'json');
397
+
398
+ loaded.push(id);
399
+ }
400
+
401
+ } // get_setting()
402
+
403
+ }); // (document)
404
+
405
+ /**
406
+ * Helper function to create contracting color
407
+ * @ref http://codeitdown.com/jquery-color-contrast/
408
+ */
409
+ $.fn.contrastColor = function () {
410
+ return this.each(function () {
411
+ var bg = $(this).css('background-color');
412
+ //get r,g,b and decide
413
+ var rgb = bg.replace(/^(rgb|rgba)\(/, '').replace(/\)$/, '').replace(/\s/g, '').split(',');
414
+ var yiq = ((rgb[0] * 299) + (rgb[1] * 587) + (rgb[2] * 114)) / 1000;
415
+ if (yiq >= 128) {
416
+ $(this).children().css('color', '#111111');
417
+ } else {
418
+ $(this).children().css('color', '#ffffff');
419
+ }
420
+ });
421
+ };
422
+
423
+ }(jQuery));
js/chosen.jquery.js CHANGED
@@ -2,18 +2,19 @@
2
  Chosen, a Select Box Enhancer for jQuery and Prototype
3
  by Patrick Filler for Harvest, http://getharvest.com
4
 
5
- Version 1.3.0
6
  Full source at https://github.com/harvesthq/chosen
7
- Copyright (c) 2011-2014 Harvest http://getharvest.com
8
 
9
  MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
  This file is generated by `grunt build`, do not edit it by hand.
11
  */
12
 
13
  (function() {
14
- var $, AbstractChosen, Chosen, SelectParser, _ref,
15
- __hasProp = {}.hasOwnProperty,
16
- __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
 
17
 
18
  SelectParser = (function() {
19
  function SelectParser() {
@@ -30,23 +31,24 @@ This file is generated by `grunt build`, do not edit it by hand.
30
  };
31
 
32
  SelectParser.prototype.add_group = function(group) {
33
- var group_position, option, _i, _len, _ref, _results;
34
  group_position = this.parsed.length;
35
  this.parsed.push({
36
  array_index: group_position,
37
  group: true,
38
- label: this.escapeExpression(group.label),
 
39
  children: 0,
40
  disabled: group.disabled,
41
  classes: group.className
42
  });
43
- _ref = group.childNodes;
44
- _results = [];
45
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
46
- option = _ref[_i];
47
- _results.push(this.add_option(option, group_position, group.disabled));
48
  }
49
- return _results;
50
  };
51
 
52
  SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
@@ -61,9 +63,11 @@ This file is generated by `grunt build`, do not edit it by hand.
61
  value: option.value,
62
  text: option.text,
63
  html: option.innerHTML,
 
64
  selected: option.selected,
65
  disabled: group_disabled === true ? group_disabled : option.disabled,
66
  group_array_index: group_position,
 
67
  classes: option.className,
68
  style: option.style.cssText
69
  });
@@ -78,46 +82,26 @@ This file is generated by `grunt build`, do not edit it by hand.
78
  }
79
  };
80
 
81
- SelectParser.prototype.escapeExpression = function(text) {
82
- var map, unsafe_chars;
83
- if ((text == null) || text === false) {
84
- return "";
85
- }
86
- if (!/[\&\<\>\"\'\`]/.test(text)) {
87
- return text;
88
- }
89
- map = {
90
- "<": "&lt;",
91
- ">": "&gt;",
92
- '"': "&quot;",
93
- "'": "&#x27;",
94
- "`": "&#x60;"
95
- };
96
- unsafe_chars = /&(?!\w+;)|[\<\>\"\'\`]/g;
97
- return text.replace(unsafe_chars, function(chr) {
98
- return map[chr] || "&amp;";
99
- });
100
- };
101
-
102
  return SelectParser;
103
 
104
  })();
105
 
106
  SelectParser.select_to_array = function(select) {
107
- var child, parser, _i, _len, _ref;
108
  parser = new SelectParser();
109
- _ref = select.childNodes;
110
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
111
- child = _ref[_i];
112
  parser.add_node(child);
113
  }
114
  return parser.parsed;
115
  };
116
 
117
  AbstractChosen = (function() {
118
- function AbstractChosen(form_field, options) {
119
  this.form_field = form_field;
120
- this.options = options != null ? options : {};
 
121
  if (!AbstractChosen.browser_is_supported()) {
122
  return;
123
  }
@@ -131,17 +115,21 @@ This file is generated by `grunt build`, do not edit it by hand.
131
  }
132
 
133
  AbstractChosen.prototype.set_default_values = function() {
134
- var _this = this;
135
- this.click_test_action = function(evt) {
136
- return _this.test_active_click(evt);
137
- };
138
- this.activate_action = function(evt) {
139
- return _this.activate_field(evt);
140
- };
 
 
 
141
  this.active_field = false;
142
  this.mouse_on_container = false;
143
  this.results_showing = false;
144
  this.result_highlighted = null;
 
145
  this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
146
  this.disable_search_threshold = this.options.disable_search_threshold || 0;
147
  this.disable_search = this.options.disable_search || false;
@@ -152,7 +140,11 @@ This file is generated by `grunt build`, do not edit it by hand.
152
  this.max_selected_options = this.options.max_selected_options || Infinity;
153
  this.inherit_select_classes = this.options.inherit_select_classes || false;
154
  this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
155
- return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
 
 
 
 
156
  };
157
 
158
  AbstractChosen.prototype.set_default_text = function() {
@@ -163,9 +155,18 @@ This file is generated by `grunt build`, do not edit it by hand.
163
  } else {
164
  this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
165
  }
 
166
  return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
167
  };
168
 
 
 
 
 
 
 
 
 
169
  AbstractChosen.prototype.mouse_enter = function() {
170
  return this.mouse_on_container = true;
171
  };
@@ -175,12 +176,13 @@ This file is generated by `grunt build`, do not edit it by hand.
175
  };
176
 
177
  AbstractChosen.prototype.input_focus = function(evt) {
178
- var _this = this;
179
  if (this.is_multiple) {
180
  if (!this.active_field) {
181
- return setTimeout((function() {
182
- return _this.container_mousedown();
183
- }), 50);
 
 
184
  }
185
  } else {
186
  if (!this.active_field) {
@@ -190,33 +192,51 @@ This file is generated by `grunt build`, do not edit it by hand.
190
  };
191
 
192
  AbstractChosen.prototype.input_blur = function(evt) {
193
- var _this = this;
194
  if (!this.mouse_on_container) {
195
  this.active_field = false;
196
- return setTimeout((function() {
197
- return _this.blur_test();
198
- }), 100);
 
 
 
 
 
 
 
 
 
 
199
  }
200
  };
201
 
202
  AbstractChosen.prototype.results_option_build = function(options) {
203
- var content, data, _i, _len, _ref;
204
  content = '';
205
- _ref = this.results_data;
206
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
207
- data = _ref[_i];
 
 
208
  if (data.group) {
209
- content += this.result_add_group(data);
210
  } else {
211
- content += this.result_add_option(data);
 
 
 
 
212
  }
213
  if (options != null ? options.first : void 0) {
214
  if (data.selected && this.is_multiple) {
215
  this.choice_build(data);
216
  } else if (data.selected && !this.is_multiple) {
217
- this.single_set_selected_text(data.text);
218
  }
219
  }
 
 
 
220
  }
221
  return content;
222
  };
@@ -247,9 +267,14 @@ This file is generated by `grunt build`, do not edit it by hand.
247
  }
248
  option_el = document.createElement("li");
249
  option_el.className = classes.join(" ");
250
- option_el.style.cssText = option.style;
 
 
251
  option_el.setAttribute("data-option-array-index", option.array_index);
252
- option_el.innerHTML = option.search_text;
 
 
 
253
  return this.outerHTML(option_el);
254
  };
255
 
@@ -268,7 +293,10 @@ This file is generated by `grunt build`, do not edit it by hand.
268
  }
269
  group_el = document.createElement("li");
270
  group_el.className = classes.join(" ");
271
- group_el.innerHTML = group.search_text;
 
 
 
272
  return this.outerHTML(group_el);
273
  };
274
 
@@ -285,18 +313,18 @@ This file is generated by `grunt build`, do not edit it by hand.
285
  };
286
 
287
  AbstractChosen.prototype.reset_single_select_options = function() {
288
- var result, _i, _len, _ref, _results;
289
- _ref = this.results_data;
290
- _results = [];
291
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
292
- result = _ref[_i];
293
  if (result.selected) {
294
- _results.push(result.selected = false);
295
  } else {
296
- _results.push(void 0);
297
  }
298
  }
299
- return _results;
300
  };
301
 
302
  AbstractChosen.prototype.results_toggle = function() {
@@ -315,19 +343,20 @@ This file is generated by `grunt build`, do not edit it by hand.
315
  }
316
  };
317
 
318
- AbstractChosen.prototype.winnow_results = function() {
319
- var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;
320
  this.no_results_clear();
321
  results = 0;
322
- searchText = this.get_search_text();
323
- escapedSearchText = searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
324
- zregex = new RegExp(escapedSearchText, 'i');
325
- regex = this.get_search_regex(escapedSearchText);
326
- _ref = this.results_data;
327
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
328
- option = _ref[_i];
329
  option.search_match = false;
330
  results_group = null;
 
 
331
  if (this.include_option_in_results(option)) {
332
  if (option.group) {
333
  option.group_match = false;
@@ -340,17 +369,20 @@ This file is generated by `grunt build`, do not edit it by hand.
340
  }
341
  results_group.active_options += 1;
342
  }
 
343
  if (!(option.group && !this.group_search)) {
344
- option.search_text = option.group ? option.label : option.text;
345
- option.search_match = this.search_string_match(option.search_text, regex);
346
  if (option.search_match && !option.group) {
347
  results += 1;
348
  }
349
  if (option.search_match) {
350
- if (searchText.length) {
351
- startpos = option.search_text.search(zregex);
352
- text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);
353
- option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
 
 
354
  }
355
  if (results_group != null) {
356
  results_group.group_match = true;
@@ -362,47 +394,45 @@ This file is generated by `grunt build`, do not edit it by hand.
362
  }
363
  }
364
  this.result_clear_highlight();
365
- if (results < 1 && searchText.length) {
366
  this.update_results_content("");
367
- return this.no_results(searchText);
368
  } else {
369
  this.update_results_content(this.results_option_build());
370
- return this.winnow_results_set_highlight();
 
 
371
  }
372
  };
373
 
374
  AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
375
- var regex_anchor;
376
- regex_anchor = this.search_contains ? "" : "^";
377
- return new RegExp(regex_anchor + escaped_search_string, 'i');
 
 
 
 
378
  };
379
 
380
  AbstractChosen.prototype.search_string_match = function(search_string, regex) {
381
- var part, parts, _i, _len;
382
- if (regex.test(search_string)) {
383
- return true;
384
- } else if (this.enable_split_word_search && (search_string.indexOf(" ") >= 0 || search_string.indexOf("[") === 0)) {
385
- parts = search_string.replace(/\[|\]/g, "").split(" ");
386
- if (parts.length) {
387
- for (_i = 0, _len = parts.length; _i < _len; _i++) {
388
- part = parts[_i];
389
- if (regex.test(part)) {
390
- return true;
391
- }
392
- }
393
- }
394
  }
 
395
  };
396
 
397
  AbstractChosen.prototype.choices_count = function() {
398
- var option, _i, _len, _ref;
399
  if (this.selected_option_count != null) {
400
  return this.selected_option_count;
401
  }
402
  this.selected_option_count = 0;
403
- _ref = this.form_field.options;
404
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
405
- option = _ref[_i];
406
  if (option.selected) {
407
  this.selected_option_count += 1;
408
  }
@@ -412,59 +442,109 @@ This file is generated by `grunt build`, do not edit it by hand.
412
 
413
  AbstractChosen.prototype.choices_click = function(evt) {
414
  evt.preventDefault();
 
415
  if (!(this.results_showing || this.is_disabled)) {
416
  return this.results_show();
417
  }
418
  };
419
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
420
  AbstractChosen.prototype.keyup_checker = function(evt) {
421
- var stroke, _ref;
422
- stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;
423
  this.search_field_scale();
424
  switch (stroke) {
425
  case 8:
426
  if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
427
- return this.keydown_backstroke();
428
  } else if (!this.pending_backstroke) {
429
  this.result_clear_highlight();
430
- return this.results_search();
431
  }
432
  break;
433
  case 13:
434
  evt.preventDefault();
435
  if (this.results_showing) {
436
- return this.result_select(evt);
437
  }
438
  break;
439
  case 27:
440
  if (this.results_showing) {
441
  this.results_hide();
442
  }
443
- return true;
444
  case 9:
 
 
 
445
  case 38:
446
  case 40:
447
- case 16:
448
  case 91:
449
- case 17:
450
  break;
451
  default:
452
- return this.results_search();
 
453
  }
454
  };
455
 
456
  AbstractChosen.prototype.clipboard_event_checker = function(evt) {
457
- var _this = this;
458
- return setTimeout((function() {
459
- return _this.results_search();
460
- }), 50);
 
 
 
 
461
  };
462
 
463
  AbstractChosen.prototype.container_width = function() {
464
  if (this.options.width != null) {
465
  return this.options.width;
466
  } else {
467
- return "" + this.form_field.offsetWidth + "px";
468
  }
469
  };
470
 
@@ -507,18 +587,25 @@ This file is generated by `grunt build`, do not edit it by hand.
507
  return tmp.innerHTML;
508
  };
509
 
 
 
 
 
 
 
 
 
 
 
 
 
510
  AbstractChosen.browser_is_supported = function() {
511
- if (window.navigator.appName === "Microsoft Internet Explorer") {
512
  return document.documentMode >= 8;
513
  }
514
- if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
515
  return false;
516
  }
517
- if (/Android/i.test(window.navigator.userAgent)) {
518
- if (/Mobile/i.test(window.navigator.userAgent)) {
519
- return false;
520
- }
521
- }
522
  return true;
523
  };
524
 
@@ -543,27 +630,29 @@ This file is generated by `grunt build`, do not edit it by hand.
543
  var $this, chosen;
544
  $this = $(this);
545
  chosen = $this.data('chosen');
546
- if (options === 'destroy' && chosen instanceof Chosen) {
547
- chosen.destroy();
548
- } else if (!(chosen instanceof Chosen)) {
 
 
 
 
549
  $this.data('chosen', new Chosen(this, options));
550
  }
551
  });
552
  }
553
  });
554
 
555
- Chosen = (function(_super) {
556
- __extends(Chosen, _super);
557
 
558
  function Chosen() {
559
- _ref = Chosen.__super__.constructor.apply(this, arguments);
560
- return _ref;
561
  }
562
 
563
  Chosen.prototype.setup = function() {
564
  this.form_field_jq = $(this.form_field);
565
- this.current_selectedIndex = this.form_field.selectedIndex;
566
- return this.is_rtl = this.form_field_jq.hasClass("chosen-rtl");
567
  };
568
 
569
  Chosen.prototype.set_up_html = function() {
@@ -578,17 +667,17 @@ This file is generated by `grunt build`, do not edit it by hand.
578
  }
579
  container_props = {
580
  'class': container_classes.join(' '),
581
- 'style': "width: " + (this.container_width()) + ";",
582
  'title': this.form_field.title
583
  };
584
  if (this.form_field.id.length) {
585
  container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
586
  }
587
  this.container = $("<div />", container_props);
 
588
  if (this.is_multiple) {
589
- this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="' + this.default_text + '" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>');
590
  } else {
591
- this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>' + this.default_text + '</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>');
592
  }
593
  this.form_field_jq.hide().after(this.container);
594
  this.dropdown = this.container.find('div.chosen-drop').first();
@@ -615,89 +704,139 @@ This file is generated by `grunt build`, do not edit it by hand.
615
  };
616
 
617
  Chosen.prototype.register_observers = function() {
618
- var _this = this;
619
- this.container.bind('touchstart.chosen', function(evt) {
620
- _this.container_mousedown(evt);
621
- });
622
- this.container.bind('touchend.chosen', function(evt) {
623
- _this.container_mouseup(evt);
624
- });
625
- this.container.bind('mousedown.chosen', function(evt) {
626
- _this.container_mousedown(evt);
627
- });
628
- this.container.bind('mouseup.chosen', function(evt) {
629
- _this.container_mouseup(evt);
630
- });
631
- this.container.bind('mouseenter.chosen', function(evt) {
632
- _this.mouse_enter(evt);
633
- });
634
- this.container.bind('mouseleave.chosen', function(evt) {
635
- _this.mouse_leave(evt);
636
- });
637
- this.search_results.bind('mouseup.chosen', function(evt) {
638
- _this.search_results_mouseup(evt);
639
- });
640
- this.search_results.bind('mouseover.chosen', function(evt) {
641
- _this.search_results_mouseover(evt);
642
- });
643
- this.search_results.bind('mouseout.chosen', function(evt) {
644
- _this.search_results_mouseout(evt);
645
- });
646
- this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {
647
- _this.search_results_mousewheel(evt);
648
- });
649
- this.search_results.bind('touchstart.chosen', function(evt) {
650
- _this.search_results_touchstart(evt);
651
- });
652
- this.search_results.bind('touchmove.chosen', function(evt) {
653
- _this.search_results_touchmove(evt);
654
- });
655
- this.search_results.bind('touchend.chosen', function(evt) {
656
- _this.search_results_touchend(evt);
657
- });
658
- this.form_field_jq.bind("chosen:updated.chosen", function(evt) {
659
- _this.results_update_field(evt);
660
- });
661
- this.form_field_jq.bind("chosen:activate.chosen", function(evt) {
662
- _this.activate_field(evt);
663
- });
664
- this.form_field_jq.bind("chosen:open.chosen", function(evt) {
665
- _this.container_mousedown(evt);
666
- });
667
- this.form_field_jq.bind("chosen:close.chosen", function(evt) {
668
- _this.input_blur(evt);
669
- });
670
- this.search_field.bind('blur.chosen', function(evt) {
671
- _this.input_blur(evt);
672
- });
673
- this.search_field.bind('keyup.chosen', function(evt) {
674
- _this.keyup_checker(evt);
675
- });
676
- this.search_field.bind('keydown.chosen', function(evt) {
677
- _this.keydown_checker(evt);
678
- });
679
- this.search_field.bind('focus.chosen', function(evt) {
680
- _this.input_focus(evt);
681
- });
682
- this.search_field.bind('cut.chosen', function(evt) {
683
- _this.clipboard_event_checker(evt);
684
- });
685
- this.search_field.bind('paste.chosen', function(evt) {
686
- _this.clipboard_event_checker(evt);
687
- });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
688
  if (this.is_multiple) {
689
- return this.search_choices.bind('click.chosen', function(evt) {
690
- _this.choices_click(evt);
691
- });
 
 
692
  } else {
693
- return this.container.bind('click.chosen', function(evt) {
694
  evt.preventDefault();
695
  });
696
  }
697
  };
698
 
699
  Chosen.prototype.destroy = function() {
700
- $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
 
 
 
701
  if (this.search_field[0].tabIndex) {
702
  this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
703
  }
@@ -707,41 +846,39 @@ This file is generated by `grunt build`, do not edit it by hand.
707
  };
708
 
709
  Chosen.prototype.search_field_disabled = function() {
710
- this.is_disabled = this.form_field_jq[0].disabled;
 
 
 
 
 
711
  if (this.is_disabled) {
712
- this.container.addClass('chosen-disabled');
713
- this.search_field[0].disabled = true;
714
- if (!this.is_multiple) {
715
- this.selected_item.unbind("focus.chosen", this.activate_action);
716
- }
717
  return this.close_field();
718
- } else {
719
- this.container.removeClass('chosen-disabled');
720
- this.search_field[0].disabled = false;
721
- if (!this.is_multiple) {
722
- return this.selected_item.bind("focus.chosen", this.activate_action);
723
- }
724
  }
725
  };
726
 
727
  Chosen.prototype.container_mousedown = function(evt) {
728
- if (!this.is_disabled) {
729
- if (evt && evt.type === "mousedown" && !this.results_showing) {
730
- evt.preventDefault();
731
- }
732
- if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
733
- if (!this.active_field) {
734
- if (this.is_multiple) {
735
- this.search_field.val("");
736
- }
737
- $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);
738
- this.results_show();
739
- } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
740
- evt.preventDefault();
741
- this.results_toggle();
742
  }
743
- return this.activate_field();
 
 
 
 
744
  }
 
745
  }
746
  };
747
 
@@ -772,16 +909,20 @@ This file is generated by `grunt build`, do not edit it by hand.
772
  };
773
 
774
  Chosen.prototype.close_field = function() {
775
- $(this.container[0].ownerDocument).unbind("click.chosen", this.click_test_action);
776
  this.active_field = false;
777
  this.results_hide();
778
  this.container.removeClass("chosen-container-active");
779
  this.clear_backstroke();
780
  this.show_search_field_default();
781
- return this.search_field_scale();
 
782
  };
783
 
784
  Chosen.prototype.activate_field = function() {
 
 
 
785
  this.container.addClass("chosen-container-active");
786
  this.active_field = true;
787
  this.search_field.val(this.search_field.val());
@@ -804,7 +945,7 @@ This file is generated by `grunt build`, do not edit it by hand.
804
  this.results_data = SelectParser.select_to_array(this.form_field);
805
  if (this.is_multiple) {
806
  this.search_choices.find("li.search-choice").remove();
807
- } else if (!this.is_multiple) {
808
  this.single_set_selected_text();
809
  if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
810
  this.search_field[0].readOnly = true;
@@ -859,7 +1000,7 @@ This file is generated by `grunt build`, do not edit it by hand.
859
  this.container.addClass("chosen-with-drop");
860
  this.results_showing = true;
861
  this.search_field.focus();
862
- this.search_field.val(this.search_field.val());
863
  this.winnow_results();
864
  return this.form_field_jq.trigger("chosen:showing_dropdown", {
865
  chosen: this
@@ -891,19 +1032,12 @@ This file is generated by `grunt build`, do not edit it by hand.
891
  };
892
 
893
  Chosen.prototype.set_label_behavior = function() {
894
- var _this = this;
895
  this.form_field_label = this.form_field_jq.parents("label");
896
  if (!this.form_field_label.length && this.form_field.id.length) {
897
  this.form_field_label = $("label[for='" + this.form_field.id + "']");
898
  }
899
  if (this.form_field_label.length > 0) {
900
- return this.form_field_label.bind('click.chosen', function(evt) {
901
- if (_this.is_multiple) {
902
- return _this.container_mousedown(evt);
903
- } else {
904
- return _this.activate_field();
905
- }
906
- });
907
  }
908
  };
909
 
@@ -936,17 +1070,16 @@ This file is generated by `grunt build`, do not edit it by hand.
936
  };
937
 
938
  Chosen.prototype.search_results_mouseout = function(evt) {
939
- if ($(evt.target).hasClass("active-result" || $(evt.target).parents('.active-result').first())) {
940
  return this.result_clear_highlight();
941
  }
942
  };
943
 
944
  Chosen.prototype.choice_build = function(item) {
945
- var choice, close_link,
946
- _this = this;
947
  choice = $('<li />', {
948
  "class": "search-choice"
949
- }).html("<span>" + item.html + "</span>");
950
  if (item.disabled) {
951
  choice.addClass('search-choice-disabled');
952
  } else {
@@ -954,9 +1087,11 @@ This file is generated by `grunt build`, do not edit it by hand.
954
  "class": 'search-choice-close',
955
  'data-option-array-index': item.array_index
956
  });
957
- close_link.bind('click.chosen', function(evt) {
958
- return _this.choice_destroy_link_click(evt);
959
- });
 
 
960
  choice.append(close_link);
961
  }
962
  return this.search_container.before(choice);
@@ -972,8 +1107,12 @@ This file is generated by `grunt build`, do not edit it by hand.
972
 
973
  Chosen.prototype.choice_destroy = function(link) {
974
  if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
975
- this.show_search_field_default();
976
- if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {
 
 
 
 
977
  this.results_hide();
978
  }
979
  link.parents('li').first().remove();
@@ -987,7 +1126,7 @@ This file is generated by `grunt build`, do not edit it by hand.
987
  this.single_set_selected_text();
988
  this.show_search_field_default();
989
  this.results_reset_cleanup();
990
- this.form_field_jq.trigger("change");
991
  if (this.active_field) {
992
  return this.results_hide();
993
  }
@@ -1014,6 +1153,7 @@ This file is generated by `grunt build`, do not edit it by hand.
1014
  } else {
1015
  this.reset_single_select_options();
1016
  }
 
1017
  item = this.results_data[high[0].getAttribute("data-option-array-index")];
1018
  item.selected = true;
1019
  this.form_field.options[item.options_index].selected = true;
@@ -1021,18 +1161,28 @@ This file is generated by `grunt build`, do not edit it by hand.
1021
  if (this.is_multiple) {
1022
  this.choice_build(item);
1023
  } else {
1024
- this.single_set_selected_text(item.text);
1025
  }
1026
- if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {
 
 
 
 
 
 
 
 
 
1027
  this.results_hide();
 
1028
  }
1029
- this.search_field.val("");
1030
  if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
1031
- this.form_field_jq.trigger("change", {
1032
- 'selected': this.form_field.options[item.options_index].value
1033
  });
1034
  }
1035
  this.current_selectedIndex = this.form_field.selectedIndex;
 
1036
  return this.search_field_scale();
1037
  }
1038
  };
@@ -1047,7 +1197,7 @@ This file is generated by `grunt build`, do not edit it by hand.
1047
  this.single_deselect_control_build();
1048
  this.selected_item.removeClass("chosen-default");
1049
  }
1050
- return this.selected_item.find("span").text(text);
1051
  };
1052
 
1053
  Chosen.prototype.result_deselect = function(pos) {
@@ -1061,7 +1211,7 @@ This file is generated by `grunt build`, do not edit it by hand.
1061
  if (this.results_showing) {
1062
  this.winnow_results();
1063
  }
1064
- this.form_field_jq.trigger("change", {
1065
  deselected: this.form_field.options[result_data.options_index].value
1066
  });
1067
  this.search_field_scale();
@@ -1081,12 +1231,16 @@ This file is generated by `grunt build`, do not edit it by hand.
1081
  return this.selected_item.addClass("chosen-single-with-deselect");
1082
  };
1083
 
 
 
 
 
1084
  Chosen.prototype.get_search_text = function() {
1085
- if (this.search_field.val() === this.default_text) {
1086
- return "";
1087
- } else {
1088
- return $('<div/>').text($.trim(this.search_field.val())).html();
1089
- }
1090
  };
1091
 
1092
  Chosen.prototype.winnow_results_set_highlight = function() {
@@ -1100,8 +1254,7 @@ This file is generated by `grunt build`, do not edit it by hand.
1100
 
1101
  Chosen.prototype.no_results = function(terms) {
1102
  var no_results_html;
1103
- no_results_html = $('<li class="no-results">' + this.results_none_found + ' "<span></span>"</li>');
1104
- no_results_html.find("span").first().html(terms);
1105
  this.search_results.append(no_results_html);
1106
  return this.form_field_jq.trigger("chosen:no_results", {
1107
  chosen: this
@@ -1166,70 +1319,37 @@ This file is generated by `grunt build`, do not edit it by hand.
1166
  return this.pending_backstroke = null;
1167
  };
1168
 
1169
- Chosen.prototype.keydown_checker = function(evt) {
1170
- var stroke, _ref1;
1171
- stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;
1172
- this.search_field_scale();
1173
- if (stroke !== 8 && this.pending_backstroke) {
1174
- this.clear_backstroke();
1175
  }
1176
- switch (stroke) {
1177
- case 8:
1178
- this.backstroke_length = this.search_field.val().length;
1179
- break;
1180
- case 9:
1181
- if (this.results_showing && !this.is_multiple) {
1182
- this.result_select(evt);
1183
- }
1184
- this.mouse_on_container = false;
1185
- break;
1186
- case 13:
1187
- if (this.results_showing) {
1188
- evt.preventDefault();
1189
- }
1190
- break;
1191
- case 32:
1192
- if (this.disable_search) {
1193
- evt.preventDefault();
1194
- }
1195
- break;
1196
- case 38:
1197
- evt.preventDefault();
1198
- this.keyup_arrow();
1199
- break;
1200
- case 40:
1201
- evt.preventDefault();
1202
- this.keydown_arrow();
1203
- break;
1204
  }
 
1205
  };
1206
 
1207
- Chosen.prototype.search_field_scale = function() {
1208
- var div, f_width, h, style, style_block, styles, w, _i, _len;
1209
- if (this.is_multiple) {
1210
- h = 0;
1211
- w = 0;
1212
- style_block = "position:absolute; left: -1000px; top: -1000px; display:none;";
1213
- styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];
1214
- for (_i = 0, _len = styles.length; _i < _len; _i++) {
1215
- style = styles[_i];
1216
- style_block += style + ":" + this.search_field.css(style) + ";";
1217
- }
1218
- div = $('<div />', {
1219
- 'style': style_block
1220
- });
1221
- div.text(this.search_field.val());
1222
- $('body').append(div);
1223
- w = div.width() + 25;
1224
- div.remove();
1225
- f_width = this.container.outerWidth();
1226
- if (w > f_width - 10) {
1227
- w = f_width - 10;
1228
- }
1229
- return this.search_field.css({
1230
- 'width': w + 'px'
1231
- });
1232
- }
1233
  };
1234
 
1235
  return Chosen;
2
  Chosen, a Select Box Enhancer for jQuery and Prototype
3
  by Patrick Filler for Harvest, http://getharvest.com
4
 
5
+ Version 1.8.7
6
  Full source at https://github.com/harvesthq/chosen
7
+ Copyright (c) 2011-2018 Harvest http://getharvest.com
8
 
9
  MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md
10
  This file is generated by `grunt build`, do not edit it by hand.
11
  */
12
 
13
  (function() {
14
+ var $, AbstractChosen, Chosen, SelectParser,
15
+ bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
16
+ extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
17
+ hasProp = {}.hasOwnProperty;
18
 
19
  SelectParser = (function() {
20
  function SelectParser() {
31
  };
32
 
33
  SelectParser.prototype.add_group = function(group) {
34
+ var group_position, i, len, option, ref, results1;
35
  group_position = this.parsed.length;
36
  this.parsed.push({
37
  array_index: group_position,
38
  group: true,
39
+ label: group.label,
40
+ title: group.title ? group.title : void 0,
41
  children: 0,
42
  disabled: group.disabled,
43
  classes: group.className
44
  });
45
+ ref = group.childNodes;
46
+ results1 = [];
47
+ for (i = 0, len = ref.length; i < len; i++) {
48
+ option = ref[i];
49
+ results1.push(this.add_option(option, group_position, group.disabled));
50
  }
51
+ return results1;
52
  };
53
 
54
  SelectParser.prototype.add_option = function(option, group_position, group_disabled) {
63
  value: option.value,
64
  text: option.text,
65
  html: option.innerHTML,
66
+ title: option.title ? option.title : void 0,
67
  selected: option.selected,
68
  disabled: group_disabled === true ? group_disabled : option.disabled,
69
  group_array_index: group_position,
70
+ group_label: group_position != null ? this.parsed[group_position].label : null,
71
  classes: option.className,
72
  style: option.style.cssText
73
  });
82
  }
83
  };
84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
85
  return SelectParser;
86
 
87
  })();
88
 
89
  SelectParser.select_to_array = function(select) {
90
+ var child, i, len, parser, ref;
91
  parser = new SelectParser();
92
+ ref = select.childNodes;
93
+ for (i = 0, len = ref.length; i < len; i++) {
94
+ child = ref[i];
95
  parser.add_node(child);
96
  }
97
  return parser.parsed;
98
  };
99
 
100
  AbstractChosen = (function() {
101
+ function AbstractChosen(form_field, options1) {
102
  this.form_field = form_field;
103
+ this.options = options1 != null ? options1 : {};
104
+ this.label_click_handler = bind(this.label_click_handler, this);
105
  if (!AbstractChosen.browser_is_supported()) {
106
  return;
107
  }
115
  }
116
 
117
  AbstractChosen.prototype.set_default_values = function() {
118
+ this.click_test_action = (function(_this) {
119
+ return function(evt) {
120
+ return _this.test_active_click(evt);
121
+ };
122
+ })(this);
123
+ this.activate_action = (function(_this) {
124
+ return function(evt) {
125
+ return _this.activate_field(evt);
126
+ };
127
+ })(this);
128
  this.active_field = false;
129
  this.mouse_on_container = false;
130
  this.results_showing = false;
131
  this.result_highlighted = null;
132
+ this.is_rtl = this.options.rtl || /\bchosen-rtl\b/.test(this.form_field.className);
133
  this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === "" ? this.options.allow_single_deselect : false;
134
  this.disable_search_threshold = this.options.disable_search_threshold || 0;
135
  this.disable_search = this.options.disable_search || false;
140
  this.max_selected_options = this.options.max_selected_options || Infinity;
141
  this.inherit_select_classes = this.options.inherit_select_classes || false;
142
  this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;
143
+ this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;
144
+ this.include_group_label_in_selected = this.options.include_group_label_in_selected || false;
145
+ this.max_shown_results = this.options.max_shown_results || Number.POSITIVE_INFINITY;
146
+ this.case_sensitive_search = this.options.case_sensitive_search || false;
147
+ return this.hide_results_on_select = this.options.hide_results_on_select != null ? this.options.hide_results_on_select : true;
148
  };
149
 
150
  AbstractChosen.prototype.set_default_text = function() {
155
  } else {
156
  this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;
157
  }
158
+ this.default_text = this.escape_html(this.default_text);
159
  return this.results_none_found = this.form_field.getAttribute("data-no_results_text") || this.options.no_results_text || AbstractChosen.default_no_result_text;
160
  };
161
 
162
+ AbstractChosen.prototype.choice_label = function(item) {
163
+ if (this.include_group_label_in_selected && (item.group_label != null)) {
164
+ return "<b class='group-name'>" + (this.escape_html(item.group_label)) + "</b>" + item.html;
165
+ } else {
166
+ return item.html;
167
+ }
168
+ };
169
+
170
  AbstractChosen.prototype.mouse_enter = function() {
171
  return this.mouse_on_container = true;
172
  };
176
  };
177
 
178
  AbstractChosen.prototype.input_focus = function(evt) {
 
179
  if (this.is_multiple) {
180
  if (!this.active_field) {
181
+ return setTimeout(((function(_this) {
182
+ return function() {
183
+ return _this.container_mousedown();
184
+ };
185
+ })(this)), 50);
186
  }
187
  } else {
188
  if (!this.active_field) {
192
  };
193
 
194
  AbstractChosen.prototype.input_blur = function(evt) {
 
195
  if (!this.mouse_on_container) {
196
  this.active_field = false;
197
+ return setTimeout(((function(_this) {
198
+ return function() {
199
+ return _this.blur_test();
200
+ };
201
+ })(this)), 100);
202
+ }
203
+ };
204
+
205
+ AbstractChosen.prototype.label_click_handler = function(evt) {
206
+ if (this.is_multiple) {
207
+ return this.container_mousedown(evt);
208
+ } else {
209
+ return this.activate_field();
210
  }
211
  };
212
 
213
  AbstractChosen.prototype.results_option_build = function(options) {
214
+ var content, data, data_content, i, len, ref, shown_results;
215
  content = '';
216
+ shown_results = 0;
217
+ ref = this.results_data;
218
+ for (i = 0, len = ref.length; i < len; i++) {
219
+ data = ref[i];
220
+ data_content = '';
221
  if (data.group) {
222
+ data_content = this.result_add_group(data);
223
  } else {
224
+ data_content = this.result_add_option(data);
225
+ }
226
+ if (data_content !== '') {
227
+ shown_results++;
228
+ content += data_content;
229
  }
230
  if (options != null ? options.first : void 0) {
231
  if (data.selected && this.is_multiple) {
232
  this.choice_build(data);
233
  } else if (data.selected && !this.is_multiple) {
234
+ this.single_set_selected_text(this.choice_label(data));
235
  }
236
  }
237
+ if (shown_results >= this.max_shown_results) {
238
+ break;
239
+ }
240
  }
241
  return content;
242
  };
267
  }
268
  option_el = document.createElement("li");
269
  option_el.className = classes.join(" ");
270
+ if (option.style) {
271
+ option_el.style.cssText = option.style;
272
+ }
273
  option_el.setAttribute("data-option-array-index", option.array_index);
274
+ option_el.innerHTML = option.highlighted_html || option.html;
275
+ if (option.title) {
276
+ option_el.title = option.title;
277
+ }
278
  return this.outerHTML(option_el);
279
  };
280
 
293
  }
294
  group_el = document.createElement("li");
295
  group_el.className = classes.join(" ");
296
+ group_el.innerHTML = group.highlighted_html || this.escape_html(group.label);
297
+ if (group.title) {
298
+ group_el.title = group.title;
299
+ }
300
  return this.outerHTML(group_el);
301
  };
302
 
313
  };
314
 
315
  AbstractChosen.prototype.reset_single_select_options = function() {
316
+ var i, len, ref, result, results1;
317
+ ref = this.results_data;
318
+ results1 = [];
319
+ for (i = 0, len = ref.length; i < len; i++) {
320
+ result = ref[i];
321
  if (result.selected) {
322
+ results1.push(result.selected = false);
323
  } else {
324
+ results1.push(void 0);
325
  }
326
  }
327
+ return results1;
328
  };
329
 
330
  AbstractChosen.prototype.results_toggle = function() {
343
  }
344
  };
345
 
346
+ AbstractChosen.prototype.winnow_results = function(options) {
347
+ var escapedQuery, fix, i, len, option, prefix, query, ref, regex, results, results_group, search_match, startpos, suffix, text;
348
  this.no_results_clear();
349
  results = 0;
350
+ query = this.get_search_text();
351
+ escapedQuery = query.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
352
+ regex = this.get_search_regex(escapedQuery);
353
+ ref = this.results_data;
354
+ for (i = 0, len = ref.length; i < len; i++) {
355
+ option = ref[i];
 
356
  option.search_match = false;
357
  results_group = null;
358
+ search_match = null;
359
+ option.highlighted_html = '';
360
  if (this.include_option_in_results(option)) {
361
  if (option.group) {
362
  option.group_match = false;
369
  }
370
  results_group.active_options += 1;
371
  }
372
+ text = option.group ? option.label : option.text;
373
  if (!(option.group && !this.group_search)) {
374
+ search_match = this.search_string_match(text, regex);
375
+ option.search_match = search_match != null;
376
  if (option.search_match && !option.group) {
377
  results += 1;
378
  }
379
  if (option.search_match) {
380
+ if (query.length) {
381
+ startpos = search_match.index;
382
+ prefix = text.slice(0, startpos);
383
+ fix = text.slice(startpos, startpos + query.length);
384
+ suffix = text.slice(startpos + query.length);
385
+ option.highlighted_html = (this.escape_html(prefix)) + "<em>" + (this.escape_html(fix)) + "</em>" + (this.escape_html(suffix));
386
  }
387
  if (results_group != null) {
388
  results_group.group_match = true;
394
  }
395
  }
396
  this.result_clear_highlight();
397
+ if (results < 1 && query.length) {
398
  this.update_results_content("");
399
+ return this.no_results(query);
400
  } else {
401
  this.update_results_content(this.results_option_build());
402
+ if (!(options != null ? options.skip_highlight : void 0)) {
403
+ return this.winnow_results_set_highlight();
404
+ }
405
  }
406
  };
407
 
408
  AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {
409
+ var regex_flag, regex_string;
410
+ regex_string = this.search_contains ? escaped_search_string : "(^|\\s|\\b)" + escaped_search_string + "[^\\s]*";
411
+ if (!(this.enable_split_word_search || this.search_contains)) {
412
+ regex_string = "^" + regex_string;
413
+ }
414
+ regex_flag = this.case_sensitive_search ? "" : "i";
415
+ return new RegExp(regex_string, regex_flag);
416
  };
417
 
418
  AbstractChosen.prototype.search_string_match = function(search_string, regex) {
419
+ var match;
420
+ match = regex.exec(search_string);
421
+ if (!this.search_contains && (match != null ? match[1] : void 0)) {
422
+ match.index += 1;
 
 
 
 
 
 
 
 
 
423
  }
424
+ return match;
425
  };
426
 
427
  AbstractChosen.prototype.choices_count = function() {
428
+ var i, len, option, ref;
429
  if (this.selected_option_count != null) {
430
  return this.selected_option_count;
431
  }
432
  this.selected_option_count = 0;
433
+ ref = this.form_field.options;
434
+ for (i = 0, len = ref.length; i < len; i++) {
435
+ option = ref[i];
436
  if (option.selected) {
437
  this.selected_option_count += 1;
438
  }
442
 
443
  AbstractChosen.prototype.choices_click = function(evt) {
444
  evt.preventDefault();
445
+ this.activate_field();
446
  if (!(this.results_showing || this.is_disabled)) {
447
  return this.results_show();
448
  }
449
  };
450
 
451
+ AbstractChosen.prototype.keydown_checker = function(evt) {
452
+ var ref, stroke;
453
+ stroke = (ref = evt.which) != null ? ref : evt.keyCode;
454
+ this.search_field_scale();
455
+ if (stroke !== 8 && this.pending_backstroke) {
456
+ this.clear_backstroke();
457
+ }
458
+ switch (stroke) {
459
+ case 8:
460
+ this.backstroke_length = this.get_search_field_value().length;
461
+ break;
462
+ case 9:
463
+ if (this.results_showing && !this.is_multiple) {
464
+ this.result_select(evt);
465
+ }
466
+ this.mouse_on_container = false;
467
+ break;
468
+ case 13:
469
+ if (this.results_showing) {
470
+ evt.preventDefault();
471
+ }
472
+ break;
473
+ case 27:
474
+ if (this.results_showing) {
475
+ evt.preventDefault();
476
+ }
477
+ break;
478
+ case 32:
479
+ if (this.disable_search) {
480
+ evt.preventDefault();
481
+ }
482
+ break;
483
+ case 38:
484
+ evt.preventDefault();
485
+ this.keyup_arrow();
486
+ break;
487
+ case 40:
488
+ evt.preventDefault();
489
+ this.keydown_arrow();
490
+ break;
491
+ }
492
+ };
493
+
494
  AbstractChosen.prototype.keyup_checker = function(evt) {
495
+ var ref, stroke;
496
+ stroke = (ref = evt.which) != null ? ref : evt.keyCode;
497
  this.search_field_scale();
498
  switch (stroke) {
499
  case 8:
500
  if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {
501
+ this.keydown_backstroke();
502
  } else if (!this.pending_backstroke) {
503
  this.result_clear_highlight();
504
+ this.results_search();
505
  }
506
  break;
507
  case 13:
508
  evt.preventDefault();
509
  if (this.results_showing) {
510
+ this.result_select(evt);
511
  }
512
  break;
513
  case 27:
514
  if (this.results_showing) {
515
  this.results_hide();
516
  }
517
+ break;
518
  case 9:
519
+ case 16:
520
+ case 17:
521
+ case 18:
522
  case 38:
523
  case 40:
 
524
  case 91:
 
525
  break;
526
  default:
527
+ this.results_search();
528
+ break;
529
  }
530
  };
531
 
532
  AbstractChosen.prototype.clipboard_event_checker = function(evt) {
533
+ if (this.is_disabled) {
534
+ return;
535
+ }
536
+ return setTimeout(((function(_this) {
537
+ return function() {
538
+ return _this.results_search();
539
+ };
540
+ })(this)), 50);
541
  };
542
 
543
  AbstractChosen.prototype.container_width = function() {
544
  if (this.options.width != null) {
545
  return this.options.width;
546
  } else {
547
+ return this.form_field.offsetWidth + "px";
548
  }
549
  };
550
 
587
  return tmp.innerHTML;
588
  };
589
 
590
+ AbstractChosen.prototype.get_single_html = function() {
591
+ return "<a class=\"chosen-single chosen-default\">\n <span>" + this.default_text + "</span>\n <div><b></b></div>\n</a>\n<div class=\"chosen-drop\">\n <div class=\"chosen-search\">\n <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" />\n </div>\n <ul class=\"chosen-results\"></ul>\n</div>";
592
+ };
593
+
594
+ AbstractChosen.prototype.get_multi_html = function() {
595
+ return "<ul class=\"chosen-choices\">\n <li class=\"search-field\">\n <input class=\"chosen-search-input\" type=\"text\" autocomplete=\"off\" value=\"" + this.default_text + "\" />\n </li>\n</ul>\n<div class=\"chosen-drop\">\n <ul class=\"chosen-results\"></ul>\n</div>";
596
+ };
597
+
598
+ AbstractChosen.prototype.get_no_results_html = function(terms) {
599
+ return "<li class=\"no-results\">\n " + this.results_none_found + " <span>" + (this.escape_html(terms)) + "</span>\n</li>";
600
+ };
601
+
602
  AbstractChosen.browser_is_supported = function() {
603
+ if ("Microsoft Internet Explorer" === window.navigator.appName) {
604
  return document.documentMode >= 8;
605
  }
606
+ if (/iP(od|hone)/i.test(window.navigator.userAgent) || /IEMobile/i.test(window.navigator.userAgent) || /Windows Phone/i.test(window.navigator.userAgent) || /BlackBerry/i.test(window.navigator.userAgent) || /BB10/i.test(window.navigator.userAgent) || /Android.*Mobile/i.test(window.navigator.userAgent)) {
607
  return false;
608
  }
 
 
 
 
 
609
  return true;
610
  };
611
 
630
  var $this, chosen;
631
  $this = $(this);
632
  chosen = $this.data('chosen');
633
+ if (options === 'destroy') {
634
+ if (chosen instanceof Chosen) {
635
+ chosen.destroy();
636
+ }
637
+ return;
638
+ }
639
+ if (!(chosen instanceof Chosen)) {
640
  $this.data('chosen', new Chosen(this, options));
641
  }
642
  });
643
  }
644
  });
645
 
646
+ Chosen = (function(superClass) {
647
+ extend(Chosen, superClass);
648
 
649
  function Chosen() {
650
+ return Chosen.__super__.constructor.apply(this, arguments);
 
651
  }
652
 
653
  Chosen.prototype.setup = function() {
654
  this.form_field_jq = $(this.form_field);
655
+ return this.current_selectedIndex = this.form_field.selectedIndex;
 
656
  };
657
 
658
  Chosen.prototype.set_up_html = function() {
667
  }
668
  container_props = {
669
  'class': container_classes.join(' '),
 
670
  'title': this.form_field.title
671
  };
672
  if (this.form_field.id.length) {
673
  container_props.id = this.form_field.id.replace(/[^\w]/g, '_') + "_chosen";
674
  }
675
  this.container = $("<div />", container_props);
676
+ this.container.width(this.container_width());
677
  if (this.is_multiple) {
678
+ this.container.html(this.get_multi_html());
679
  } else {
680
+ this.container.html(this.get_single_html());
681
  }
682
  this.form_field_jq.hide().after(this.container);
683
  this.dropdown = this.container.find('div.chosen-drop').first();
704
  };
705
 
706
  Chosen.prototype.register_observers = function() {
707
+ this.container.on('touchstart.chosen', (function(_this) {
708
+ return function(evt) {
709
+ _this.container_mousedown(evt);
710
+ };
711
+ })(this));
712
+ this.container.on('touchend.chosen', (function(_this) {
713
+ return function(evt) {
714
+ _this.container_mouseup(evt);
715
+ };
716
+ })(this));
717
+ this.container.on('mousedown.chosen', (function(_this) {
718
+ return function(evt) {
719
+ _this.container_mousedown(evt);
720
+ };
721
+ })(this));
722
+ this.container.on('mouseup.chosen', (function(_this) {
723
+ return function(evt) {
724
+ _this.container_mouseup(evt);
725
+ };
726
+ })(this));
727
+ this.container.on('mouseenter.chosen', (function(_this) {
728
+ return function(evt) {
729
+ _this.mouse_enter(evt);
730
+ };
731
+ })(this));
732
+ this.container.on('mouseleave.chosen', (function(_this) {
733
+ return function(evt) {
734
+ _this.mouse_leave(evt);
735
+ };
736
+ })(this));
737
+ this.search_results.on('mouseup.chosen', (function(_this) {
738
+ return function(evt) {
739
+ _this.search_results_mouseup(evt);
740
+ };
741
+ })(this));
742
+ this.search_results.on('mouseover.chosen', (function(_this) {
743
+ return function(evt) {
744
+ _this.search_results_mouseover(evt);
745
+ };
746
+ })(this));
747
+ this.search_results.on('mouseout.chosen', (function(_this) {
748
+ return function(evt) {
749
+ _this.search_results_mouseout(evt);
750
+ };
751
+ })(this));
752
+ this.search_results.on('mousewheel.chosen DOMMouseScroll.chosen', (function(_this) {
753
+ return function(evt) {
754
+ _this.search_results_mousewheel(evt);
755
+ };
756
+ })(this));
757
+ this.search_results.on('touchstart.chosen', (function(_this) {
758
+ return function(evt) {
759
+ _this.search_results_touchstart(evt);
760
+ };
761
+ })(this));
762
+ this.search_results.on('touchmove.chosen', (function(_this) {
763
+ return function(evt) {
764
+ _this.search_results_touchmove(evt);
765
+ };
766
+ })(this));
767
+ this.search_results.on('touchend.chosen', (function(_this) {
768
+ return function(evt) {
769
+ _this.search_results_touchend(evt);
770
+ };
771
+ })(this));
772
+ this.form_field_jq.on("chosen:updated.chosen", (function(_this) {
773
+ return function(evt) {
774
+ _this.results_update_field(evt);
775
+ };
776
+ })(this));
777
+ this.form_field_jq.on("chosen:activate.chosen", (function(_this) {
778
+ return function(evt) {
779
+ _this.activate_field(evt);
780
+ };
781
+ })(this));
782
+ this.form_field_jq.on("chosen:open.chosen", (function(_this) {
783
+ return function(evt) {
784
+ _this.container_mousedown(evt);
785
+ };
786
+ })(this));
787
+ this.form_field_jq.on("chosen:close.chosen", (function(_this) {
788
+ return function(evt) {
789
+ _this.close_field(evt);
790
+ };
791
+ })(this));
792
+ this.search_field.on('blur.chosen', (function(_this) {
793
+ return function(evt) {
794
+ _this.input_blur(evt);
795
+ };
796
+ })(this));
797
+ this.search_field.on('keyup.chosen', (function(_this) {
798
+ return function(evt) {
799
+ _this.keyup_checker(evt);
800
+ };
801
+ })(this));
802
+ this.search_field.on('keydown.chosen', (function(_this) {
803
+ return function(evt) {
804
+ _this.keydown_checker(evt);
805
+ };
806
+ })(this));
807
+ this.search_field.on('focus.chosen', (function(_this) {
808
+ return function(evt) {
809
+ _this.input_focus(evt);
810
+ };
811
+ })(this));
812
+ this.search_field.on('cut.chosen', (function(_this) {
813
+ return function(evt) {
814
+ _this.clipboard_event_checker(evt);
815
+ };
816
+ })(this));
817
+ this.search_field.on('paste.chosen', (function(_this) {
818
+ return function(evt) {
819
+ _this.clipboard_event_checker(evt);
820
+ };
821
+ })(this));
822
  if (this.is_multiple) {
823
+ return this.search_choices.on('click.chosen', (function(_this) {
824
+ return function(evt) {
825
+ _this.choices_click(evt);
826
+ };
827
+ })(this));
828
  } else {
829
+ return this.container.on('click.chosen', function(evt) {
830
  evt.preventDefault();
831
  });
832
  }
833
  };
834
 
835
  Chosen.prototype.destroy = function() {
836
+ $(this.container[0].ownerDocument).off('click.chosen', this.click_test_action);
837
+ if (this.form_field_label.length > 0) {
838
+ this.form_field_label.off('click.chosen');
839
+ }
840
  if (this.search_field[0].tabIndex) {
841
  this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;
842
  }
846
  };
847
 
848
  Chosen.prototype.search_field_disabled = function() {
849
+ this.is_disabled = this.form_field.disabled || this.form_field_jq.parents('fieldset').is(':disabled');
850
+ this.container.toggleClass('chosen-disabled', this.is_disabled);
851
+ this.search_field[0].disabled = this.is_disabled;
852
+ if (!this.is_multiple) {
853
+ this.selected_item.off('focus.chosen', this.activate_field);
854
+ }
855
  if (this.is_disabled) {
 
 
 
 
 
856
  return this.close_field();
857
+ } else if (!this.is_multiple) {
858
+ return this.selected_item.on('focus.chosen', this.activate_field);
 
 
 
 
859
  }
860
  };
861
 
862
  Chosen.prototype.container_mousedown = function(evt) {
863
+ var ref;
864
+ if (this.is_disabled) {
865
+ return;
866
+ }
867
+ if (evt && ((ref = evt.type) === 'mousedown' || ref === 'touchstart') && !this.results_showing) {
868
+ evt.preventDefault();
869
+ }
870
+ if (!((evt != null) && ($(evt.target)).hasClass("search-choice-close"))) {
871
+ if (!this.active_field) {
872
+ if (this.is_multiple) {
873
+ this.search_field.val("");
 
 
 
874
  }
875
+ $(this.container[0].ownerDocument).on('click.chosen', this.click_test_action);
876
+ this.results_show();
877
+ } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents("a.chosen-single").length)) {
878
+ evt.preventDefault();
879
+ this.results_toggle();
880
  }
881
+ return this.activate_field();
882
  }
883
  };
884
 
909
  };
910
 
911
  Chosen.prototype.close_field = function() {
912
+ $(this.container[0].ownerDocument).off("click.chosen", this.click_test_action);
913
  this.active_field = false;
914
  this.results_hide();
915
  this.container.removeClass("chosen-container-active");
916
  this.clear_backstroke();
917
  this.show_search_field_default();
918
+ this.search_field_scale();
919
+ return this.search_field.blur();
920
  };
921
 
922
  Chosen.prototype.activate_field = function() {
923
+ if (this.is_disabled) {
924
+ return;
925
+ }
926
  this.container.addClass("chosen-container-active");
927
  this.active_field = true;
928
  this.search_field.val(this.search_field.val());
945
  this.results_data = SelectParser.select_to_array(this.form_field);
946
  if (this.is_multiple) {
947
  this.search_choices.find("li.search-choice").remove();
948
+ } else {
949
  this.single_set_selected_text();
950
  if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {
951
  this.search_field[0].readOnly = true;
1000
  this.container.addClass("chosen-with-drop");
1001
  this.results_showing = true;
1002
  this.search_field.focus();
1003
+ this.search_field.val(this.get_search_field_value());
1004
  this.winnow_results();
1005
  return this.form_field_jq.trigger("chosen:showing_dropdown", {
1006
  chosen: this
1032
  };
1033
 
1034
  Chosen.prototype.set_label_behavior = function() {
 
1035
  this.form_field_label = this.form_field_jq.parents("label");
1036
  if (!this.form_field_label.length && this.form_field.id.length) {
1037
  this.form_field_label = $("label[for='" + this.form_field.id + "']");
1038
  }
1039
  if (this.form_field_label.length > 0) {
1040
+ return this.form_field_label.on('click.chosen', this.label_click_handler);
 
 
 
 
 
 
1041
  }
1042
  };
1043
 
1070
  };
1071
 
1072
  Chosen.prototype.search_results_mouseout = function(evt) {
1073
+ if ($(evt.target).hasClass("active-result") || $(evt.target).parents('.active-result').first()) {
1074
  return this.result_clear_highlight();
1075
  }
1076
  };
1077
 
1078
  Chosen.prototype.choice_build = function(item) {
1079
+ var choice, close_link;
 
1080
  choice = $('<li />', {
1081
  "class": "search-choice"
1082
+ }).html("<span>" + (this.choice_label(item)) + "</span>");
1083
  if (item.disabled) {
1084
  choice.addClass('search-choice-disabled');
1085
  } else {
1087
  "class": 'search-choice-close',
1088
  'data-option-array-index': item.array_index
1089
  });
1090
+ close_link.on('click.chosen', (function(_this) {
1091
+ return function(evt) {
1092
+ return _this.choice_destroy_link_click(evt);
1093
+ };
1094
+ })(this));
1095
  choice.append(close_link);
1096
  }
1097
  return this.search_container.before(choice);
1107
 
1108
  Chosen.prototype.choice_destroy = function(link) {
1109
  if (this.result_deselect(link[0].getAttribute("data-option-array-index"))) {
1110
+ if (this.active_field) {
1111
+ this.search_field.focus();
1112
+ } else {
1113
+ this.show_search_field_default();
1114
+ }
1115
+ if (this.is_multiple && this.choices_count() > 0 && this.get_search_field_value().length < 1) {
1116
  this.results_hide();
1117
  }
1118
  link.parents('li').first().remove();
1126
  this.single_set_selected_text();
1127
  this.show_search_field_default();
1128
  this.results_reset_cleanup();
1129
+ this.trigger_form_field_change();
1130
  if (this.active_field) {
1131
  return this.results_hide();
1132
  }
1153
  } else {
1154
  this.reset_single_select_options();
1155
  }
1156
+ high.addClass("result-selected");
1157
  item = this.results_data[high[0].getAttribute("data-option-array-index")];
1158
  item.selected = true;
1159
  this.form_field.options[item.options_index].selected = true;
1161
  if (this.is_multiple) {
1162
  this.choice_build(item);
1163
  } else {
1164
+ this.single_set_selected_text(this.choice_label(item));
1165
  }
1166
+ if (this.is_multiple && (!this.hide_results_on_select || (evt.metaKey || evt.ctrlKey))) {
1167
+ if (evt.metaKey || evt.ctrlKey) {
1168
+ this.winnow_results({
1169
+ skip_highlight: true
1170
+ });
1171
+ } else {
1172
+ this.search_field.val("");
1173
+ this.winnow_results();
1174
+ }
1175
+ } else {
1176
  this.results_hide();
1177
+ this.show_search_field_default();
1178
  }
 
1179
  if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {
1180
+ this.trigger_form_field_change({
1181
+ selected: this.form_field.options[item.options_index].value
1182
  });
1183
  }
1184
  this.current_selectedIndex = this.form_field.selectedIndex;
1185
+ evt.preventDefault();
1186
  return this.search_field_scale();
1187
  }
1188
  };
1197
  this.single_deselect_control_build();
1198
  this.selected_item.removeClass("chosen-default");
1199
  }
1200
+ return this.selected_item.find("span").html(text);
1201
  };
1202
 
1203
  Chosen.prototype.result_deselect = function(pos) {
1211
  if (this.results_showing) {
1212
  this.winnow_results();
1213
  }
1214
+ this.trigger_form_field_change({
1215
  deselected: this.form_field.options[result_data.options_index].value
1216
  });
1217
  this.search_field_scale();
1231
  return this.selected_item.addClass("chosen-single-with-deselect");
1232
  };
1233
 
1234
+ Chosen.prototype.get_search_field_value = function() {
1235
+ return this.search_field.val();
1236
+ };
1237
+
1238
  Chosen.prototype.get_search_text = function() {
1239
+ return $.trim(this.get_search_field_value());
1240
+ };
1241
+
1242
+ Chosen.prototype.escape_html = function(text) {
1243
+ return $('<div/>').text(text).html();
1244
  };
1245
 
1246
  Chosen.prototype.winnow_results_set_highlight = function() {
1254
 
1255
  Chosen.prototype.no_results = function(terms) {
1256
  var no_results_html;
1257
+ no_results_html = this.get_no_results_html(terms);
 
1258
  this.search_results.append(no_results_html);
1259
  return this.form_field_jq.trigger("chosen:no_results", {
1260
  chosen: this
1319
  return this.pending_backstroke = null;
1320
  };
1321
 
1322
+ Chosen.prototype.search_field_scale = function() {
1323
+ var div, i, len, style, style_block, styles, width;
1324
+ if (!this.is_multiple) {
1325
+ return;
 
 
1326
  }
1327
+ style_block = {
1328
+ position: 'absolute',
1329
+ left: '-1000px',
1330
+ top: '-1000px',
1331
+ display: 'none',
1332
+ whiteSpace: 'pre'
1333
+ };
1334
+ styles = ['fontSize', 'fontStyle', 'fontWeight', 'fontFamily', 'lineHeight', 'textTransform', 'letterSpacing'];
1335
+ for (i = 0, len = styles.length; i < len; i++) {
1336
+ style = styles[i];
1337
+ style_block[style] = this.search_field.css(style);
1338
+ }
1339
+ div = $('<div />').css(style_block);
1340
+ div.text(this.get_search_field_value());
1341
+ $('body').append(div);
1342
+ width = div.width() + 25;
1343
+ div.remove();
1344
+ if (this.container.is(':visible')) {
1345
+ width = Math.min(this.container.outerWidth() - 10, width);
 
 
 
 
 
 
 
 
 
1346
  }
1347
+ return this.search_field.width(width);
1348
  };
1349
 
1350
+ Chosen.prototype.trigger_form_field_change = function(extra) {
1351
+ this.form_field_jq.trigger("input", extra);
1352
+ return this.form_field_jq.trigger("change", extra);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1353
  };
1354
 
1355
  return Chosen;
js/chosen.jquery.min.js CHANGED
@@ -1,2 +1,3 @@
1
- /* Chosen v1.3.0 | (c) 2011-2014 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
2
- !function(){var a,AbstractChosen,Chosen,SelectParser,b,c={}.hasOwnProperty,d=function(a,b){function d(){this.constructor=a}for(var e in b)c.call(b,e)&&(a[e]=b[e]);return d.prototype=b.prototype,a.prototype=new d,a.__super__=b.prototype,a};SelectParser=function(){function SelectParser(){this.options_index=0,this.parsed=[]}return SelectParser.prototype.add_node=function(a){return"OPTGROUP"===a.nodeName.toUpperCase()?this.add_group(a):this.add_option(a)},SelectParser.prototype.add_group=function(a){var b,c,d,e,f,g;for(b=this.parsed.length,this.parsed.push({array_index:b,group:!0,label:this.escapeExpression(a.label),children:0,disabled:a.disabled,classes:a.className}),f=a.childNodes,g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(this.add_option(c,b,a.disabled));return g},SelectParser.prototype.add_option=function(a,b,c){return"OPTION"===a.nodeName.toUpperCase()?(""!==a.text?(null!=b&&(this.parsed[b].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:a.value,text:a.text,html:a.innerHTML,selected:a.selected,disabled:c===!0?c:a.disabled,group_array_index:b,classes:a.className,style:a.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1):void 0},SelectParser.prototype.escapeExpression=function(a){var b,c;return null==a||a===!1?"":/[\&\<\>\"\'\`]/.test(a)?(b={"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#x27;","`":"&#x60;"},c=/&(?!\w+;)|[\<\>\"\'\`]/g,a.replace(c,function(a){return b[a]||"&amp;"})):a},SelectParser}(),SelectParser.select_to_array=function(a){var b,c,d,e,f;for(c=new SelectParser,f=a.childNodes,d=0,e=f.length;e>d;d++)b=f[d],c.add_node(b);return c.parsed},AbstractChosen=function(){function AbstractChosen(a,b){this.form_field=a,this.options=null!=b?b:{},AbstractChosen.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return AbstractChosen.prototype.set_default_values=function(){var a=this;return this.click_test_action=function(b){return a.test_active_click(b)},this.activate_action=function(b){return a.activate_field(b)},this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text?this.options.allow_single_deselect:!1,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null!=this.options.enable_split_word_search?this.options.enable_split_word_search:!0,this.group_search=null!=this.options.group_search?this.options.group_search:!0,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null!=this.options.single_backstroke_delete?this.options.single_backstroke_delete:!0,this.max_selected_options=this.options.max_selected_options||1/0,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null!=this.options.display_selected_options?this.options.display_selected_options:!0,this.display_disabled_options=null!=this.options.display_disabled_options?this.options.display_disabled_options:!0},AbstractChosen.prototype.set_default_text=function(){return this.default_text=this.form_field.getAttribute("data-placeholder")?this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.options.placeholder_text_multiple||this.options.placeholder_text||AbstractChosen.default_multiple_text:this.options.placeholder_text_single||this.options.placeholder_text||AbstractChosen.default_single_text,this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||AbstractChosen.default_no_result_text},AbstractChosen.prototype.mouse_enter=function(){return this.mouse_on_container=!0},AbstractChosen.prototype.mouse_leave=function(){return this.mouse_on_container=!1},AbstractChosen.prototype.input_focus=function(){var a=this;if(this.is_multiple){if(!this.active_field)return setTimeout(function(){return a.container_mousedown()},50)}else if(!this.active_field)return this.activate_field()},AbstractChosen.prototype.input_blur=function(){var a=this;return this.mouse_on_container?void 0:(this.active_field=!1,setTimeout(function(){return a.blur_test()},100))},AbstractChosen.prototype.results_option_build=function(a){var b,c,d,e,f;for(b="",f=this.results_data,d=0,e=f.length;e>d;d++)c=f[d],b+=c.group?this.result_add_group(c):this.result_add_option(c),(null!=a?a.first:void 0)&&(c.selected&&this.is_multiple?this.choice_build(c):c.selected&&!this.is_multiple&&this.single_set_selected_text(c.text));return b},AbstractChosen.prototype.result_add_option=function(a){var b,c;return a.search_match?this.include_option_in_results(a)?(b=[],a.disabled||a.selected&&this.is_multiple||b.push("active-result"),!a.disabled||a.selected&&this.is_multiple||b.push("disabled-result"),a.selected&&b.push("result-selected"),null!=a.group_array_index&&b.push("group-option"),""!==a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.style.cssText=a.style,c.setAttribute("data-option-array-index",a.array_index),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.result_add_group=function(a){var b,c;return a.search_match||a.group_match?a.active_options>0?(b=[],b.push("group-result"),a.classes&&b.push(a.classes),c=document.createElement("li"),c.className=b.join(" "),c.innerHTML=a.search_text,this.outerHTML(c)):"":""},AbstractChosen.prototype.results_update_field=function(){return this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing?this.winnow_results():void 0},AbstractChosen.prototype.reset_single_select_options=function(){var a,b,c,d,e;for(d=this.results_data,e=[],b=0,c=d.length;c>b;b++)a=d[b],a.selected?e.push(a.selected=!1):e.push(void 0);return e},AbstractChosen.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},AbstractChosen.prototype.results_search=function(){return this.results_showing?this.winnow_results():this.results_show()},AbstractChosen.prototype.winnow_results=function(){var a,b,c,d,e,f,g,h,i,j,k,l;for(this.no_results_clear(),d=0,f=this.get_search_text(),a=f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),i=new RegExp(a,"i"),c=this.get_search_regex(a),l=this.results_data,j=0,k=l.length;k>j;j++)b=l[j],b.search_match=!1,e=null,this.include_option_in_results(b)&&(b.group&&(b.group_match=!1,b.active_options=0),null!=b.group_array_index&&this.results_data[b.group_array_index]&&(e=this.results_data[b.group_array_index],0===e.active_options&&e.search_match&&(d+=1),e.active_options+=1),(!b.group||this.group_search)&&(b.search_text=b.group?b.label:b.text,b.search_match=this.search_string_match(b.search_text,c),b.search_match&&!b.group&&(d+=1),b.search_match?(f.length&&(g=b.search_text.search(i),h=b.search_text.substr(0,g+f.length)+"</em>"+b.search_text.substr(g+f.length),b.search_text=h.substr(0,g)+"<em>"+h.substr(g)),null!=e&&(e.group_match=!0)):null!=b.group_array_index&&this.results_data[b.group_array_index].search_match&&(b.search_match=!0)));return this.result_clear_highlight(),1>d&&f.length?(this.update_results_content(""),this.no_results(f)):(this.update_results_content(this.results_option_build()),this.winnow_results_set_highlight())},AbstractChosen.prototype.get_search_regex=function(a){var b;return b=this.search_contains?"":"^",new RegExp(b+a,"i")},AbstractChosen.prototype.search_string_match=function(a,b){var c,d,e,f;if(b.test(a))return!0;if(this.enable_split_word_search&&(a.indexOf(" ")>=0||0===a.indexOf("["))&&(d=a.replace(/\[|\]/g,"").split(" "),d.length))for(e=0,f=d.length;f>e;e++)if(c=d[e],b.test(c))return!0},AbstractChosen.prototype.choices_count=function(){var a,b,c,d;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,d=this.form_field.options,b=0,c=d.length;c>b;b++)a=d[b],a.selected&&(this.selected_option_count+=1);return this.selected_option_count},AbstractChosen.prototype.choices_click=function(a){return a.preventDefault(),this.results_showing||this.is_disabled?void 0:this.results_show()},AbstractChosen.prototype.keyup_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),b){case 8:if(this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0)return this.keydown_backstroke();if(!this.pending_backstroke)return this.result_clear_highlight(),this.results_search();break;case 13:if(a.preventDefault(),this.results_showing)return this.result_select(a);break;case 27:return this.results_showing&&this.results_hide(),!0;case 9:case 38:case 40:case 16:case 91:case 17:break;default:return this.results_search()}},AbstractChosen.prototype.clipboard_event_checker=function(){var a=this;return setTimeout(function(){return a.results_search()},50)},AbstractChosen.prototype.container_width=function(){return null!=this.options.width?this.options.width:""+this.form_field.offsetWidth+"px"},AbstractChosen.prototype.include_option_in_results=function(a){return this.is_multiple&&!this.display_selected_options&&a.selected?!1:!this.display_disabled_options&&a.disabled?!1:a.empty?!1:!0},AbstractChosen.prototype.search_results_touchstart=function(a){return this.touch_started=!0,this.search_results_mouseover(a)},AbstractChosen.prototype.search_results_touchmove=function(a){return this.touch_started=!1,this.search_results_mouseout(a)},AbstractChosen.prototype.search_results_touchend=function(a){return this.touch_started?this.search_results_mouseup(a):void 0},AbstractChosen.prototype.outerHTML=function(a){var b;return a.outerHTML?a.outerHTML:(b=document.createElement("div"),b.appendChild(a),b.innerHTML)},AbstractChosen.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:/iP(od|hone)/i.test(window.navigator.userAgent)?!1:/Android/i.test(window.navigator.userAgent)&&/Mobile/i.test(window.navigator.userAgent)?!1:!0},AbstractChosen.default_multiple_text="Select Some Options",AbstractChosen.default_single_text="Select an Option",AbstractChosen.default_no_result_text="No results match",AbstractChosen}(),a=jQuery,a.fn.extend({chosen:function(b){return AbstractChosen.browser_is_supported()?this.each(function(){var c,d;c=a(this),d=c.data("chosen"),"destroy"===b&&d instanceof Chosen?d.destroy():d instanceof Chosen||c.data("chosen",new Chosen(this,b))}):this}}),Chosen=function(c){function Chosen(){return b=Chosen.__super__.constructor.apply(this,arguments)}return d(Chosen,c),Chosen.prototype.setup=function(){return this.form_field_jq=a(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex,this.is_rtl=this.form_field_jq.hasClass("chosen-rtl")},Chosen.prototype.set_up_html=function(){var b,c;return b=["chosen-container"],b.push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&b.push(this.form_field.className),this.is_rtl&&b.push("chosen-rtl"),c={"class":b.join(" "),style:"width: "+this.container_width()+";",title:this.form_field.title},this.form_field.id.length&&(c.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=a("<div />",c),this.is_multiple?this.container.html('<ul class="chosen-choices"><li class="search-field"><input type="text" value="'+this.default_text+'" class="default" autocomplete="off" style="width:25px;" /></li></ul><div class="chosen-drop"><ul class="chosen-results"></ul></div>'):this.container.html('<a class="chosen-single chosen-default" tabindex="-1"><span>'+this.default_text+'</span><div><b></b></div></a><div class="chosen-drop"><div class="chosen-search"><input type="text" autocomplete="off" /></div><ul class="chosen-results"></ul></div>'),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},Chosen.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},Chosen.prototype.register_observers=function(){var a=this;return this.container.bind("touchstart.chosen",function(b){a.container_mousedown(b)}),this.container.bind("touchend.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mousedown.chosen",function(b){a.container_mousedown(b)}),this.container.bind("mouseup.chosen",function(b){a.container_mouseup(b)}),this.container.bind("mouseenter.chosen",function(b){a.mouse_enter(b)}),this.container.bind("mouseleave.chosen",function(b){a.mouse_leave(b)}),this.search_results.bind("mouseup.chosen",function(b){a.search_results_mouseup(b)}),this.search_results.bind("mouseover.chosen",function(b){a.search_results_mouseover(b)}),this.search_results.bind("mouseout.chosen",function(b){a.search_results_mouseout(b)}),this.search_results.bind("mousewheel.chosen DOMMouseScroll.chosen",function(b){a.search_results_mousewheel(b)}),this.search_results.bind("touchstart.chosen",function(b){a.search_results_touchstart(b)}),this.search_results.bind("touchmove.chosen",function(b){a.search_results_touchmove(b)}),this.search_results.bind("touchend.chosen",function(b){a.search_results_touchend(b)}),this.form_field_jq.bind("chosen:updated.chosen",function(b){a.results_update_field(b)}),this.form_field_jq.bind("chosen:activate.chosen",function(b){a.activate_field(b)}),this.form_field_jq.bind("chosen:open.chosen",function(b){a.container_mousedown(b)}),this.form_field_jq.bind("chosen:close.chosen",function(b){a.input_blur(b)}),this.search_field.bind("blur.chosen",function(b){a.input_blur(b)}),this.search_field.bind("keyup.chosen",function(b){a.keyup_checker(b)}),this.search_field.bind("keydown.chosen",function(b){a.keydown_checker(b)}),this.search_field.bind("focus.chosen",function(b){a.input_focus(b)}),this.search_field.bind("cut.chosen",function(b){a.clipboard_event_checker(b)}),this.search_field.bind("paste.chosen",function(b){a.clipboard_event_checker(b)}),this.is_multiple?this.search_choices.bind("click.chosen",function(b){a.choices_click(b)}):this.container.bind("click.chosen",function(a){a.preventDefault()})},Chosen.prototype.destroy=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},Chosen.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field_jq[0].disabled,this.is_disabled?(this.container.addClass("chosen-disabled"),this.search_field[0].disabled=!0,this.is_multiple||this.selected_item.unbind("focus.chosen",this.activate_action),this.close_field()):(this.container.removeClass("chosen-disabled"),this.search_field[0].disabled=!1,this.is_multiple?void 0:this.selected_item.bind("focus.chosen",this.activate_action))},Chosen.prototype.container_mousedown=function(b){return this.is_disabled||(b&&"mousedown"===b.type&&!this.results_showing&&b.preventDefault(),null!=b&&a(b.target).hasClass("search-choice-close"))?void 0:(this.active_field?this.is_multiple||!b||a(b.target)[0]!==this.selected_item[0]&&!a(b.target).parents("a.chosen-single").length||(b.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),a(this.container[0].ownerDocument).bind("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},Chosen.prototype.container_mouseup=function(a){return"ABBR"!==a.target.nodeName||this.is_disabled?void 0:this.results_reset(a)},Chosen.prototype.search_results_mousewheel=function(a){var b;return a.originalEvent&&(b=a.originalEvent.deltaY||-a.originalEvent.wheelDelta||a.originalEvent.detail),null!=b?(a.preventDefault(),"DOMMouseScroll"===a.type&&(b=40*b),this.search_results.scrollTop(b+this.search_results.scrollTop())):void 0},Chosen.prototype.blur_test=function(){return!this.active_field&&this.container.hasClass("chosen-container-active")?this.close_field():void 0},Chosen.prototype.close_field=function(){return a(this.container[0].ownerDocument).unbind("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale()},Chosen.prototype.activate_field=function(){return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},Chosen.prototype.test_active_click=function(b){var c;return c=a(b.target).closest(".chosen-container"),c.length&&this.container[0]===c[0]?this.active_field=!0:this.close_field()},Chosen.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=SelectParser.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():this.is_multiple||(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},Chosen.prototype.result_do_highlight=function(a){var b,c,d,e,f;if(a.length){if(this.result_clear_highlight(),this.result_highlight=a,this.result_highlight.addClass("highlighted"),d=parseInt(this.search_results.css("maxHeight"),10),f=this.search_results.scrollTop(),e=d+f,c=this.result_highlight.position().top+this.search_results.scrollTop(),b=c+this.result_highlight.outerHeight(),b>=e)return this.search_results.scrollTop(b-d>0?b-d:0);if(f>c)return this.search_results.scrollTop(c)}},Chosen.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},Chosen.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.search_field.val()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},Chosen.prototype.update_results_content=function(a){return this.search_results.html(a)},Chosen.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},Chosen.prototype.set_tab_index=function(){var a;return this.form_field.tabIndex?(a=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=a):void 0},Chosen.prototype.set_label_behavior=function(){var b=this;return this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=a("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0?this.form_field_label.bind("click.chosen",function(a){return b.is_multiple?b.container_mousedown(a):b.activate_field()}):void 0},Chosen.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},Chosen.prototype.search_results_mouseup=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c.length?(this.result_highlight=c,this.result_select(b),this.search_field.focus()):void 0},Chosen.prototype.search_results_mouseover=function(b){var c;return c=a(b.target).hasClass("active-result")?a(b.target):a(b.target).parents(".active-result").first(),c?this.result_do_highlight(c):void 0},Chosen.prototype.search_results_mouseout=function(b){return a(b.target).hasClass("active-result")?this.result_clear_highlight():void 0},Chosen.prototype.choice_build=function(b){var c,d,e=this;return c=a("<li />",{"class":"search-choice"}).html("<span>"+b.html+"</span>"),b.disabled?c.addClass("search-choice-disabled"):(d=a("<a />",{"class":"search-choice-close","data-option-array-index":b.array_index}),d.bind("click.chosen",function(a){return e.choice_destroy_link_click(a)}),c.append(d)),this.search_container.before(c)},Chosen.prototype.choice_destroy_link_click=function(b){return b.preventDefault(),b.stopPropagation(),this.is_disabled?void 0:this.choice_destroy(a(b.target))},Chosen.prototype.choice_destroy=function(a){return this.result_deselect(a[0].getAttribute("data-option-array-index"))?(this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.search_field.val().length<1&&this.results_hide(),a.parents("li").first().remove(),this.search_field_scale()):void 0},Chosen.prototype.results_reset=function(){return this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.form_field_jq.trigger("change"),this.active_field?this.results_hide():void 0},Chosen.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},Chosen.prototype.result_select=function(a){var b,c;return this.result_highlight?(b=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?b.removeClass("active-result"):this.reset_single_select_options(),c=this.results_data[b[0].getAttribute("data-option-array-index")],c.selected=!0,this.form_field.options[c.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(c):this.single_set_selected_text(c.text),(a.metaKey||a.ctrlKey)&&this.is_multiple||this.results_hide(),this.search_field.val(""),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.form_field_jq.trigger("change",{selected:this.form_field.options[c.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,this.search_field_scale())):void 0},Chosen.prototype.single_set_selected_text=function(a){return null==a&&(a=this.default_text),a===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").text(a)},Chosen.prototype.result_deselect=function(a){var b;return b=this.results_data[a],this.form_field.options[b.options_index].disabled?!1:(b.selected=!1,this.form_field.options[b.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.form_field_jq.trigger("change",{deselected:this.form_field.options[b.options_index].value}),this.search_field_scale(),!0)},Chosen.prototype.single_deselect_control_build=function(){return this.allow_single_deselect?(this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")):void 0},Chosen.prototype.get_search_text=function(){return this.search_field.val()===this.default_text?"":a("<div/>").text(a.trim(this.search_field.val())).html()},Chosen.prototype.winnow_results_set_highlight=function(){var a,b;return b=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),a=b.length?b.first():this.search_results.find(".active-result").first(),null!=a?this.result_do_highlight(a):void 0},Chosen.prototype.no_results=function(b){var c;return c=a('<li class="no-results">'+this.results_none_found+' "<span></span>"</li>'),c.find("span").first().html(b),this.search_results.append(c),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},Chosen.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},Chosen.prototype.keydown_arrow=function(){var a;return this.results_showing&&this.result_highlight?(a=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(a):void 0:this.results_show()},Chosen.prototype.keyup_arrow=function(){var a;return this.results_showing||this.is_multiple?this.result_highlight?(a=this.result_highlight.prevAll("li.active-result"),a.length?this.result_do_highlight(a.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight())):void 0:this.results_show()},Chosen.prototype.keydown_backstroke=function(){var a;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(a=this.search_container.siblings("li.search-choice").last(),a.length&&!a.hasClass("search-choice-disabled")?(this.pending_backstroke=a,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0)},Chosen.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},Chosen.prototype.keydown_checker=function(a){var b,c;switch(b=null!=(c=a.which)?c:a.keyCode,this.search_field_scale(),8!==b&&this.pending_backstroke&&this.clear_backstroke(),b){case 8:this.backstroke_length=this.search_field.val().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(a),this.mouse_on_container=!1;break;case 13:this.results_showing&&a.preventDefault();break;case 32:this.disable_search&&a.preventDefault();break;case 38:a.preventDefault(),this.keyup_arrow();break;case 40:a.preventDefault(),this.keydown_arrow()}},Chosen.prototype.search_field_scale=function(){var b,c,d,e,f,g,h,i,j;if(this.is_multiple){for(d=0,h=0,f="position:absolute; left: -1000px; top: -1000px; display:none;",g=["font-size","font-style","font-weight","font-family","line-height","text-transform","letter-spacing"],i=0,j=g.length;j>i;i++)e=g[i],f+=e+":"+this.search_field.css(e)+";";return b=a("<div />",{style:f}),b.text(this.search_field.val()),a("body").append(b),h=b.width()+25,b.remove(),c=this.container.outerWidth(),h>c-10&&(h=c-10),this.search_field.css({width:h+"px"})}},Chosen}(AbstractChosen)}.call(this);
 
1
+ /* Chosen v1.8.7 | (c) 2011-2018 by Harvest | MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md */
2
+
3
+ (function(){var t,e,s,i,n=function(t,e){return function(){return t.apply(e,arguments)}},r=function(t,e){function s(){this.constructor=t}for(var i in e)o.call(e,i)&&(t[i]=e[i]);return s.prototype=e.prototype,t.prototype=new s,t.__super__=e.prototype,t},o={}.hasOwnProperty;(i=function(){function t(){this.options_index=0,this.parsed=[]}return t.prototype.add_node=function(t){return"OPTGROUP"===t.nodeName.toUpperCase()?this.add_group(t):this.add_option(t)},t.prototype.add_group=function(t){var e,s,i,n,r,o;for(e=this.parsed.length,this.parsed.push({array_index:e,group:!0,label:t.label,title:t.title?t.title:void 0,children:0,disabled:t.disabled,classes:t.className}),o=[],s=0,i=(r=t.childNodes).length;s<i;s++)n=r[s],o.push(this.add_option(n,e,t.disabled));return o},t.prototype.add_option=function(t,e,s){if("OPTION"===t.nodeName.toUpperCase())return""!==t.text?(null!=e&&(this.parsed[e].children+=1),this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,value:t.value,text:t.text,html:t.innerHTML,title:t.title?t.title:void 0,selected:t.selected,disabled:!0===s?s:t.disabled,group_array_index:e,group_label:null!=e?this.parsed[e].label:null,classes:t.className,style:t.style.cssText})):this.parsed.push({array_index:this.parsed.length,options_index:this.options_index,empty:!0}),this.options_index+=1},t}()).select_to_array=function(t){var e,s,n,r,o;for(r=new i,s=0,n=(o=t.childNodes).length;s<n;s++)e=o[s],r.add_node(e);return r.parsed},e=function(){function t(e,s){this.form_field=e,this.options=null!=s?s:{},this.label_click_handler=n(this.label_click_handler,this),t.browser_is_supported()&&(this.is_multiple=this.form_field.multiple,this.set_default_text(),this.set_default_values(),this.setup(),this.set_up_html(),this.register_observers(),this.on_ready())}return t.prototype.set_default_values=function(){return this.click_test_action=function(t){return function(e){return t.test_active_click(e)}}(this),this.activate_action=function(t){return function(e){return t.activate_field(e)}}(this),this.active_field=!1,this.mouse_on_container=!1,this.results_showing=!1,this.result_highlighted=null,this.is_rtl=this.options.rtl||/\bchosen-rtl\b/.test(this.form_field.className),this.allow_single_deselect=null!=this.options.allow_single_deselect&&null!=this.form_field.options[0]&&""===this.form_field.options[0].text&&this.options.allow_single_deselect,this.disable_search_threshold=this.options.disable_search_threshold||0,this.disable_search=this.options.disable_search||!1,this.enable_split_word_search=null==this.options.enable_split_word_search||this.options.enable_split_word_search,this.group_search=null==this.options.group_search||this.options.group_search,this.search_contains=this.options.search_contains||!1,this.single_backstroke_delete=null==this.options.single_backstroke_delete||this.options.single_backstroke_delete,this.max_selected_options=this.options.max_selected_options||Infinity,this.inherit_select_classes=this.options.inherit_select_classes||!1,this.display_selected_options=null==this.options.display_selected_options||this.options.display_selected_options,this.display_disabled_options=null==this.options.display_disabled_options||this.options.display_disabled_options,this.include_group_label_in_selected=this.options.include_group_label_in_selected||!1,this.max_shown_results=this.options.max_shown_results||Number.POSITIVE_INFINITY,this.case_sensitive_search=this.options.case_sensitive_search||!1,this.hide_results_on_select=null==this.options.hide_results_on_select||this.options.hide_results_on_select},t.prototype.set_default_text=function(){return this.form_field.getAttribute("data-placeholder")?this.default_text=this.form_field.getAttribute("data-placeholder"):this.is_multiple?this.default_text=this.options.placeholder_text_multiple||this.options.placeholder_text||t.default_multiple_text:this.default_text=this.options.placeholder_text_single||this.options.placeholder_text||t.default_single_text,this.default_text=this.escape_html(this.default_text),this.results_none_found=this.form_field.getAttribute("data-no_results_text")||this.options.no_results_text||t.default_no_result_text},t.prototype.choice_label=function(t){return this.include_group_label_in_selected&&null!=t.group_label?"<b class='group-name'>"+this.escape_html(t.group_label)+"</b>"+t.html:t.html},t.prototype.mouse_enter=function(){return this.mouse_on_container=!0},t.prototype.mouse_leave=function(){return this.mouse_on_container=!1},t.prototype.input_focus=function(t){if(this.is_multiple){if(!this.active_field)return setTimeout(function(t){return function(){return t.container_mousedown()}}(this),50)}else if(!this.active_field)return this.activate_field()},t.prototype.input_blur=function(t){if(!this.mouse_on_container)return this.active_field=!1,setTimeout(function(t){return function(){return t.blur_test()}}(this),100)},t.prototype.label_click_handler=function(t){return this.is_multiple?this.container_mousedown(t):this.activate_field()},t.prototype.results_option_build=function(t){var e,s,i,n,r,o,h;for(e="",h=0,n=0,r=(o=this.results_data).length;n<r&&(s=o[n],i="",""!==(i=s.group?this.result_add_group(s):this.result_add_option(s))&&(h++,e+=i),(null!=t?t.first:void 0)&&(s.selected&&this.is_multiple?this.choice_build(s):s.selected&&!this.is_multiple&&this.single_set_selected_text(this.choice_label(s))),!(h>=this.max_shown_results));n++);return e},t.prototype.result_add_option=function(t){var e,s;return t.search_match&&this.include_option_in_results(t)?(e=[],t.disabled||t.selected&&this.is_multiple||e.push("active-result"),!t.disabled||t.selected&&this.is_multiple||e.push("disabled-result"),t.selected&&e.push("result-selected"),null!=t.group_array_index&&e.push("group-option"),""!==t.classes&&e.push(t.classes),s=document.createElement("li"),s.className=e.join(" "),t.style&&(s.style.cssText=t.style),s.setAttribute("data-option-array-index",t.array_index),s.innerHTML=t.highlighted_html||t.html,t.title&&(s.title=t.title),this.outerHTML(s)):""},t.prototype.result_add_group=function(t){var e,s;return(t.search_match||t.group_match)&&t.active_options>0?((e=[]).push("group-result"),t.classes&&e.push(t.classes),s=document.createElement("li"),s.className=e.join(" "),s.innerHTML=t.highlighted_html||this.escape_html(t.label),t.title&&(s.title=t.title),this.outerHTML(s)):""},t.prototype.results_update_field=function(){if(this.set_default_text(),this.is_multiple||this.results_reset_cleanup(),this.result_clear_highlight(),this.results_build(),this.results_showing)return this.winnow_results()},t.prototype.reset_single_select_options=function(){var t,e,s,i,n;for(n=[],t=0,e=(s=this.results_data).length;t<e;t++)(i=s[t]).selected?n.push(i.selected=!1):n.push(void 0);return n},t.prototype.results_toggle=function(){return this.results_showing?this.results_hide():this.results_show()},t.prototype.results_search=function(t){return this.results_showing?this.winnow_results():this.results_show()},t.prototype.winnow_results=function(t){var e,s,i,n,r,o,h,l,c,_,a,u,d,p,f;for(this.no_results_clear(),_=0,e=(h=this.get_search_text()).replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),c=this.get_search_regex(e),i=0,n=(l=this.results_data).length;i<n;i++)(r=l[i]).search_match=!1,a=null,u=null,r.highlighted_html="",this.include_option_in_results(r)&&(r.group&&(r.group_match=!1,r.active_options=0),null!=r.group_array_index&&this.results_data[r.group_array_index]&&(0===(a=this.results_data[r.group_array_index]).active_options&&a.search_match&&(_+=1),a.active_options+=1),f=r.group?r.label:r.text,r.group&&!this.group_search||(u=this.search_string_match(f,c),r.search_match=null!=u,r.search_match&&!r.group&&(_+=1),r.search_match?(h.length&&(d=u.index,o=f.slice(0,d),s=f.slice(d,d+h.length),p=f.slice(d+h.length),r.highlighted_html=this.escape_html(o)+"<em>"+this.escape_html(s)+"</em>"+this.escape_html(p)),null!=a&&(a.group_match=!0)):null!=r.group_array_index&&this.results_data[r.group_array_index].search_match&&(r.search_match=!0)));return this.result_clear_highlight(),_<1&&h.length?(this.update_results_content(""),this.no_results(h)):(this.update_results_content(this.results_option_build()),(null!=t?t.skip_highlight:void 0)?void 0:this.winnow_results_set_highlight())},t.prototype.get_search_regex=function(t){var e,s;return s=this.search_contains?t:"(^|\\s|\\b)"+t+"[^\\s]*",this.enable_split_word_search||this.search_contains||(s="^"+s),e=this.case_sensitive_search?"":"i",new RegExp(s,e)},t.prototype.search_string_match=function(t,e){var s;return s=e.exec(t),!this.search_contains&&(null!=s?s[1]:void 0)&&(s.index+=1),s},t.prototype.choices_count=function(){var t,e,s;if(null!=this.selected_option_count)return this.selected_option_count;for(this.selected_option_count=0,t=0,e=(s=this.form_field.options).length;t<e;t++)s[t].selected&&(this.selected_option_count+=1);return this.selected_option_count},t.prototype.choices_click=function(t){if(t.preventDefault(),this.activate_field(),!this.results_showing&&!this.is_disabled)return this.results_show()},t.prototype.keydown_checker=function(t){var e,s;switch(s=null!=(e=t.which)?e:t.keyCode,this.search_field_scale(),8!==s&&this.pending_backstroke&&this.clear_backstroke(),s){case 8:this.backstroke_length=this.get_search_field_value().length;break;case 9:this.results_showing&&!this.is_multiple&&this.result_select(t),this.mouse_on_container=!1;break;case 13:case 27:this.results_showing&&t.preventDefault();break;case 32:this.disable_search&&t.preventDefault();break;case 38:t.preventDefault(),this.keyup_arrow();break;case 40:t.preventDefault(),this.keydown_arrow()}},t.prototype.keyup_checker=function(t){var e,s;switch(s=null!=(e=t.which)?e:t.keyCode,this.search_field_scale(),s){case 8:this.is_multiple&&this.backstroke_length<1&&this.choices_count()>0?this.keydown_backstroke():this.pending_backstroke||(this.result_clear_highlight(),this.results_search());break;case 13:t.preventDefault(),this.results_showing&&this.result_select(t);break;case 27:this.results_showing&&this.results_hide();break;case 9:case 16:case 17:case 18:case 38:case 40:case 91:break;default:this.results_search()}},t.prototype.clipboard_event_checker=function(t){if(!this.is_disabled)return setTimeout(function(t){return function(){return t.results_search()}}(this),50)},t.prototype.container_width=function(){return null!=this.options.width?this.options.width:this.form_field.offsetWidth+"px"},t.prototype.include_option_in_results=function(t){return!(this.is_multiple&&!this.display_selected_options&&t.selected)&&(!(!this.display_disabled_options&&t.disabled)&&!t.empty)},t.prototype.search_results_touchstart=function(t){return this.touch_started=!0,this.search_results_mouseover(t)},t.prototype.search_results_touchmove=function(t){return this.touch_started=!1,this.search_results_mouseout(t)},t.prototype.search_results_touchend=function(t){if(this.touch_started)return this.search_results_mouseup(t)},t.prototype.outerHTML=function(t){var e;return t.outerHTML?t.outerHTML:((e=document.createElement("div")).appendChild(t),e.innerHTML)},t.prototype.get_single_html=function(){return'<a class="chosen-single chosen-default">\n <span>'+this.default_text+'</span>\n <div><b></b></div>\n</a>\n<div class="chosen-drop">\n <div class="chosen-search">\n <input class="chosen-search-input" type="text" autocomplete="off" />\n </div>\n <ul class="chosen-results"></ul>\n</div>'},t.prototype.get_multi_html=function(){return'<ul class="chosen-choices">\n <li class="search-field">\n <input class="chosen-search-input" type="text" autocomplete="off" value="'+this.default_text+'" />\n </li>\n</ul>\n<div class="chosen-drop">\n <ul class="chosen-results"></ul>\n</div>'},t.prototype.get_no_results_html=function(t){return'<li class="no-results">\n '+this.results_none_found+" <span>"+this.escape_html(t)+"</span>\n</li>"},t.browser_is_supported=function(){return"Microsoft Internet Explorer"===window.navigator.appName?document.documentMode>=8:!(/iP(od|hone)/i.test(window.navigator.userAgent)||/IEMobile/i.test(window.navigator.userAgent)||/Windows Phone/i.test(window.navigator.userAgent)||/BlackBerry/i.test(window.navigator.userAgent)||/BB10/i.test(window.navigator.userAgent)||/Android.*Mobile/i.test(window.navigator.userAgent))},t.default_multiple_text="Select Some Options",t.default_single_text="Select an Option",t.default_no_result_text="No results match",t}(),(t=jQuery).fn.extend({chosen:function(i){return e.browser_is_supported()?this.each(function(e){var n,r;r=(n=t(this)).data("chosen"),"destroy"!==i?r instanceof s||n.data("chosen",new s(this,i)):r instanceof s&&r.destroy()}):this}}),s=function(s){function n(){return n.__super__.constructor.apply(this,arguments)}return r(n,e),n.prototype.setup=function(){return this.form_field_jq=t(this.form_field),this.current_selectedIndex=this.form_field.selectedIndex},n.prototype.set_up_html=function(){var e,s;return(e=["chosen-container"]).push("chosen-container-"+(this.is_multiple?"multi":"single")),this.inherit_select_classes&&this.form_field.className&&e.push(this.form_field.className),this.is_rtl&&e.push("chosen-rtl"),s={"class":e.join(" "),title:this.form_field.title},this.form_field.id.length&&(s.id=this.form_field.id.replace(/[^\w]/g,"_")+"_chosen"),this.container=t("<div />",s),this.container.width(this.container_width()),this.is_multiple?this.container.html(this.get_multi_html()):this.container.html(this.get_single_html()),this.form_field_jq.hide().after(this.container),this.dropdown=this.container.find("div.chosen-drop").first(),this.search_field=this.container.find("input").first(),this.search_results=this.container.find("ul.chosen-results").first(),this.search_field_scale(),this.search_no_results=this.container.find("li.no-results").first(),this.is_multiple?(this.search_choices=this.container.find("ul.chosen-choices").first(),this.search_container=this.container.find("li.search-field").first()):(this.search_container=this.container.find("div.chosen-search").first(),this.selected_item=this.container.find(".chosen-single").first()),this.results_build(),this.set_tab_index(),this.set_label_behavior()},n.prototype.on_ready=function(){return this.form_field_jq.trigger("chosen:ready",{chosen:this})},n.prototype.register_observers=function(){return this.container.on("touchstart.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on("touchend.chosen",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on("mousedown.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.container.on("mouseup.chosen",function(t){return function(e){t.container_mouseup(e)}}(this)),this.container.on("mouseenter.chosen",function(t){return function(e){t.mouse_enter(e)}}(this)),this.container.on("mouseleave.chosen",function(t){return function(e){t.mouse_leave(e)}}(this)),this.search_results.on("mouseup.chosen",function(t){return function(e){t.search_results_mouseup(e)}}(this)),this.search_results.on("mouseover.chosen",function(t){return function(e){t.search_results_mouseover(e)}}(this)),this.search_results.on("mouseout.chosen",function(t){return function(e){t.search_results_mouseout(e)}}(this)),this.search_results.on("mousewheel.chosen DOMMouseScroll.chosen",function(t){return function(e){t.search_results_mousewheel(e)}}(this)),this.search_results.on("touchstart.chosen",function(t){return function(e){t.search_results_touchstart(e)}}(this)),this.search_results.on("touchmove.chosen",function(t){return function(e){t.search_results_touchmove(e)}}(this)),this.search_results.on("touchend.chosen",function(t){return function(e){t.search_results_touchend(e)}}(this)),this.form_field_jq.on("chosen:updated.chosen",function(t){return function(e){t.results_update_field(e)}}(this)),this.form_field_jq.on("chosen:activate.chosen",function(t){return function(e){t.activate_field(e)}}(this)),this.form_field_jq.on("chosen:open.chosen",function(t){return function(e){t.container_mousedown(e)}}(this)),this.form_field_jq.on("chosen:close.chosen",function(t){return function(e){t.close_field(e)}}(this)),this.search_field.on("blur.chosen",function(t){return function(e){t.input_blur(e)}}(this)),this.search_field.on("keyup.chosen",function(t){return function(e){t.keyup_checker(e)}}(this)),this.search_field.on("keydown.chosen",function(t){return function(e){t.keydown_checker(e)}}(this)),this.search_field.on("focus.chosen",function(t){return function(e){t.input_focus(e)}}(this)),this.search_field.on("cut.chosen",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.search_field.on("paste.chosen",function(t){return function(e){t.clipboard_event_checker(e)}}(this)),this.is_multiple?this.search_choices.on("click.chosen",function(t){return function(e){t.choices_click(e)}}(this)):this.container.on("click.chosen",function(t){t.preventDefault()})},n.prototype.destroy=function(){return t(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),this.form_field_label.length>0&&this.form_field_label.off("click.chosen"),this.search_field[0].tabIndex&&(this.form_field_jq[0].tabIndex=this.search_field[0].tabIndex),this.container.remove(),this.form_field_jq.removeData("chosen"),this.form_field_jq.show()},n.prototype.search_field_disabled=function(){return this.is_disabled=this.form_field.disabled||this.form_field_jq.parents("fieldset").is(":disabled"),this.container.toggleClass("chosen-disabled",this.is_disabled),this.search_field[0].disabled=this.is_disabled,this.is_multiple||this.selected_item.off("focus.chosen",this.activate_field),this.is_disabled?this.close_field():this.is_multiple?void 0:this.selected_item.on("focus.chosen",this.activate_field)},n.prototype.container_mousedown=function(e){var s;if(!this.is_disabled)return!e||"mousedown"!==(s=e.type)&&"touchstart"!==s||this.results_showing||e.preventDefault(),null!=e&&t(e.target).hasClass("search-choice-close")?void 0:(this.active_field?this.is_multiple||!e||t(e.target)[0]!==this.selected_item[0]&&!t(e.target).parents("a.chosen-single").length||(e.preventDefault(),this.results_toggle()):(this.is_multiple&&this.search_field.val(""),t(this.container[0].ownerDocument).on("click.chosen",this.click_test_action),this.results_show()),this.activate_field())},n.prototype.container_mouseup=function(t){if("ABBR"===t.target.nodeName&&!this.is_disabled)return this.results_reset(t)},n.prototype.search_results_mousewheel=function(t){var e;if(t.originalEvent&&(e=t.originalEvent.deltaY||-t.originalEvent.wheelDelta||t.originalEvent.detail),null!=e)return t.preventDefault(),"DOMMouseScroll"===t.type&&(e*=40),this.search_results.scrollTop(e+this.search_results.scrollTop())},n.prototype.blur_test=function(t){if(!this.active_field&&this.container.hasClass("chosen-container-active"))return this.close_field()},n.prototype.close_field=function(){return t(this.container[0].ownerDocument).off("click.chosen",this.click_test_action),this.active_field=!1,this.results_hide(),this.container.removeClass("chosen-container-active"),this.clear_backstroke(),this.show_search_field_default(),this.search_field_scale(),this.search_field.blur()},n.prototype.activate_field=function(){if(!this.is_disabled)return this.container.addClass("chosen-container-active"),this.active_field=!0,this.search_field.val(this.search_field.val()),this.search_field.focus()},n.prototype.test_active_click=function(e){var s;return(s=t(e.target).closest(".chosen-container")).length&&this.container[0]===s[0]?this.active_field=!0:this.close_field()},n.prototype.results_build=function(){return this.parsing=!0,this.selected_option_count=null,this.results_data=i.select_to_array(this.form_field),this.is_multiple?this.search_choices.find("li.search-choice").remove():(this.single_set_selected_text(),this.disable_search||this.form_field.options.length<=this.disable_search_threshold?(this.search_field[0].readOnly=!0,this.container.addClass("chosen-container-single-nosearch")):(this.search_field[0].readOnly=!1,this.container.removeClass("chosen-container-single-nosearch"))),this.update_results_content(this.results_option_build({first:!0})),this.search_field_disabled(),this.show_search_field_default(),this.search_field_scale(),this.parsing=!1},n.prototype.result_do_highlight=function(t){var e,s,i,n,r;if(t.length){if(this.result_clear_highlight(),this.result_highlight=t,this.result_highlight.addClass("highlighted"),i=parseInt(this.search_results.css("maxHeight"),10),r=this.search_results.scrollTop(),n=i+r,s=this.result_highlight.position().top+this.search_results.scrollTop(),(e=s+this.result_highlight.outerHeight())>=n)return this.search_results.scrollTop(e-i>0?e-i:0);if(s<r)return this.search_results.scrollTop(s)}},n.prototype.result_clear_highlight=function(){return this.result_highlight&&this.result_highlight.removeClass("highlighted"),this.result_highlight=null},n.prototype.results_show=function(){return this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.container.addClass("chosen-with-drop"),this.results_showing=!0,this.search_field.focus(),this.search_field.val(this.get_search_field_value()),this.winnow_results(),this.form_field_jq.trigger("chosen:showing_dropdown",{chosen:this}))},n.prototype.update_results_content=function(t){return this.search_results.html(t)},n.prototype.results_hide=function(){return this.results_showing&&(this.result_clear_highlight(),this.container.removeClass("chosen-with-drop"),this.form_field_jq.trigger("chosen:hiding_dropdown",{chosen:this})),this.results_showing=!1},n.prototype.set_tab_index=function(t){var e;if(this.form_field.tabIndex)return e=this.form_field.tabIndex,this.form_field.tabIndex=-1,this.search_field[0].tabIndex=e},n.prototype.set_label_behavior=function(){if(this.form_field_label=this.form_field_jq.parents("label"),!this.form_field_label.length&&this.form_field.id.length&&(this.form_field_label=t("label[for='"+this.form_field.id+"']")),this.form_field_label.length>0)return this.form_field_label.on("click.chosen",this.label_click_handler)},n.prototype.show_search_field_default=function(){return this.is_multiple&&this.choices_count()<1&&!this.active_field?(this.search_field.val(this.default_text),this.search_field.addClass("default")):(this.search_field.val(""),this.search_field.removeClass("default"))},n.prototype.search_results_mouseup=function(e){var s;if((s=t(e.target).hasClass("active-result")?t(e.target):t(e.target).parents(".active-result").first()).length)return this.result_highlight=s,this.result_select(e),this.search_field.focus()},n.prototype.search_results_mouseover=function(e){var s;if(s=t(e.target).hasClass("active-result")?t(e.target):t(e.target).parents(".active-result").first())return this.result_do_highlight(s)},n.prototype.search_results_mouseout=function(e){if(t(e.target).hasClass("active-result")||t(e.target).parents(".active-result").first())return this.result_clear_highlight()},n.prototype.choice_build=function(e){var s,i;return s=t("<li />",{"class":"search-choice"}).html("<span>"+this.choice_label(e)+"</span>"),e.disabled?s.addClass("search-choice-disabled"):((i=t("<a />",{"class":"search-choice-close","data-option-array-index":e.array_index})).on("click.chosen",function(t){return function(e){return t.choice_destroy_link_click(e)}}(this)),s.append(i)),this.search_container.before(s)},n.prototype.choice_destroy_link_click=function(e){if(e.preventDefault(),e.stopPropagation(),!this.is_disabled)return this.choice_destroy(t(e.target))},n.prototype.choice_destroy=function(t){if(this.result_deselect(t[0].getAttribute("data-option-array-index")))return this.active_field?this.search_field.focus():this.show_search_field_default(),this.is_multiple&&this.choices_count()>0&&this.get_search_field_value().length<1&&this.results_hide(),t.parents("li").first().remove(),this.search_field_scale()},n.prototype.results_reset=function(){if(this.reset_single_select_options(),this.form_field.options[0].selected=!0,this.single_set_selected_text(),this.show_search_field_default(),this.results_reset_cleanup(),this.trigger_form_field_change(),this.active_field)return this.results_hide()},n.prototype.results_reset_cleanup=function(){return this.current_selectedIndex=this.form_field.selectedIndex,this.selected_item.find("abbr").remove()},n.prototype.result_select=function(t){var e,s;if(this.result_highlight)return e=this.result_highlight,this.result_clear_highlight(),this.is_multiple&&this.max_selected_options<=this.choices_count()?(this.form_field_jq.trigger("chosen:maxselected",{chosen:this}),!1):(this.is_multiple?e.removeClass("active-result"):this.reset_single_select_options(),e.addClass("result-selected"),s=this.results_data[e[0].getAttribute("data-option-array-index")],s.selected=!0,this.form_field.options[s.options_index].selected=!0,this.selected_option_count=null,this.is_multiple?this.choice_build(s):this.single_set_selected_text(this.choice_label(s)),this.is_multiple&&(!this.hide_results_on_select||t.metaKey||t.ctrlKey)?t.metaKey||t.ctrlKey?this.winnow_results({skip_highlight:!0}):(this.search_field.val(""),this.winnow_results()):(this.results_hide(),this.show_search_field_default()),(this.is_multiple||this.form_field.selectedIndex!==this.current_selectedIndex)&&this.trigger_form_field_change({selected:this.form_field.options[s.options_index].value}),this.current_selectedIndex=this.form_field.selectedIndex,t.preventDefault(),this.search_field_scale())},n.prototype.single_set_selected_text=function(t){return null==t&&(t=this.default_text),t===this.default_text?this.selected_item.addClass("chosen-default"):(this.single_deselect_control_build(),this.selected_item.removeClass("chosen-default")),this.selected_item.find("span").html(t)},n.prototype.result_deselect=function(t){var e;return e=this.results_data[t],!this.form_field.options[e.options_index].disabled&&(e.selected=!1,this.form_field.options[e.options_index].selected=!1,this.selected_option_count=null,this.result_clear_highlight(),this.results_showing&&this.winnow_results(),this.trigger_form_field_change({deselected:this.form_field.options[e.options_index].value}),this.search_field_scale(),!0)},n.prototype.single_deselect_control_build=function(){if(this.allow_single_deselect)return this.selected_item.find("abbr").length||this.selected_item.find("span").first().after('<abbr class="search-choice-close"></abbr>'),this.selected_item.addClass("chosen-single-with-deselect")},n.prototype.get_search_field_value=function(){return this.search_field.val()},n.prototype.get_search_text=function(){return t.trim(this.get_search_field_value())},n.prototype.escape_html=function(e){return t("<div/>").text(e).html()},n.prototype.winnow_results_set_highlight=function(){var t,e;if(e=this.is_multiple?[]:this.search_results.find(".result-selected.active-result"),null!=(t=e.length?e.first():this.search_results.find(".active-result").first()))return this.result_do_highlight(t)},n.prototype.no_results=function(t){var e;return e=this.get_no_results_html(t),this.search_results.append(e),this.form_field_jq.trigger("chosen:no_results",{chosen:this})},n.prototype.no_results_clear=function(){return this.search_results.find(".no-results").remove()},n.prototype.keydown_arrow=function(){var t;return this.results_showing&&this.result_highlight?(t=this.result_highlight.nextAll("li.active-result").first())?this.result_do_highlight(t):void 0:this.results_show()},n.prototype.keyup_arrow=function(){var t;return this.results_showing||this.is_multiple?this.result_highlight?(t=this.result_highlight.prevAll("li.active-result")).length?this.result_do_highlight(t.first()):(this.choices_count()>0&&this.results_hide(),this.result_clear_highlight()):void 0:this.results_show()},n.prototype.keydown_backstroke=function(){var t;return this.pending_backstroke?(this.choice_destroy(this.pending_backstroke.find("a").first()),this.clear_backstroke()):(t=this.search_container.siblings("li.search-choice").last()).length&&!t.hasClass("search-choice-disabled")?(this.pending_backstroke=t,this.single_backstroke_delete?this.keydown_backstroke():this.pending_backstroke.addClass("search-choice-focus")):void 0},n.prototype.clear_backstroke=function(){return this.pending_backstroke&&this.pending_backstroke.removeClass("search-choice-focus"),this.pending_backstroke=null},n.prototype.search_field_scale=function(){var e,s,i,n,r,o,h;if(this.is_multiple){for(r={position:"absolute",left:"-1000px",top:"-1000px",display:"none",whiteSpace:"pre"},s=0,i=(o=["fontSize","fontStyle","fontWeight","fontFamily","lineHeight","textTransform","letterSpacing"]).length;s<i;s++)r[n=o[s]]=this.search_field.css(n);return(e=t("<div />").css(r)).text(this.get_search_field_value()),t("body").append(e),h=e.width()+25,e.remove(),this.container.is(":visible")&&(h=Math.min(this.container.outerWidth()-10,h)),this.search_field.width(h)}},n.prototype.trigger_form_field_change=function(t){return this.form_field_jq.trigger("input",t),this.form_field_jq.trigger("change",t)},n}()}).call(this);
js/jquery.sticky.js CHANGED
@@ -1,139 +1,258 @@
1
- // Sticky Plugin v1.0.0 for jQuery
2
  // =============
3
  // Author: Anthony Garand
4
  // Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
5
  // Improvements by Leonardo C. Daronco (daronco)
6
- // Created: 2/14/2011
7
- // Date: 2/12/2012
8
- // Website: http://labs.anthonygarand.com/sticky
9
  // Description: Makes an element on the page stick on the screen as you scroll
10
- // It will only set the 'top' and 'position' of your element, you
11
- // might need to adjust the width in some cases.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
 
13
- (function($) {
14
  var defaults = {
15
- topSpacing: 0,
16
- bottomSpacing: 0,
17
- className: 'is-sticky',
18
- wrapperClassName: 'sticky-wrapper',
19
- center: false,
20
- getWidthFrom: '',
21
- responsiveWidth: false
22
- },
23
- $window = $(window),
24
- $document = $(document),
25
- sticked = [],
26
- windowHeight = $window.height(),
27
- scroller = function() {
28
- var scrollTop = $window.scrollTop(),
29
- documentHeight = $document.height(),
30
- dwh = documentHeight - windowHeight,
31
- extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
32
-
33
- for (var i = 0; i < sticked.length; i++) {
34
- var s = sticked[i],
35
- elementTop = s.stickyWrapper.offset().top,
36
- etse = elementTop - s.topSpacing - extra;
37
-
38
- if (scrollTop <= etse) {
39
- if (s.currentTop !== null) {
40
- s.stickyElement
41
- .css('position', '')
42
- .css('top', '');
43
- s.stickyElement.trigger('sticky-end', [s]).parent().removeClass(s.className);
44
- s.currentTop = null;
45
- }
46
- }
47
- else {
48
- var newTop = documentHeight - s.stickyElement.outerHeight()
49
- - s.topSpacing - s.bottomSpacing - scrollTop - extra;
50
- if (newTop < 0) {
51
- newTop = newTop + s.topSpacing;
52
- } else {
53
- newTop = s.topSpacing;
 
 
54
  }
55
- if (s.currentTop != newTop) {
56
- s.stickyElement
57
- .css('position', 'fixed')
58
- .css('top', newTop);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
 
60
- if (typeof s.getWidthFrom !== 'undefined') {
61
- s.stickyElement.css('width', $(s.getWidthFrom).width());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
62
  }
63
 
64
- s.stickyElement.trigger('sticky-start', [s]).parent().addClass(s.className);
65
- s.currentTop = newTop;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
  }
67
  }
68
- }
69
- },
70
- resizer = function() {
71
- windowHeight = $window.height();
72
-
73
- for (var i = 0; i < sticked.length; i++) {
74
- var s = sticked[i];
75
- if (typeof s.getWidthFrom !== 'undefined' && s.responsiveWidth === true) {
76
- s.stickyElement.css('width', $(s.getWidthFrom).width());
 
 
 
 
 
 
 
 
77
  }
78
- }
79
- },
80
- methods = {
81
- init: function(options) {
82
- var o = $.extend({}, defaults, options);
83
- return this.each(function() {
84
- var stickyElement = $(this);
85
-
86
- var stickyId = stickyElement.attr('id');
87
- var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName
88
- var wrapper = $('<div></div>')
89
- .attr('id', stickyId + '-sticky-wrapper')
90
- .addClass(o.wrapperClassName);
91
- stickyElement.wrapAll(wrapper);
92
-
93
- if (o.center) {
94
- stickyElement.parent().css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  }
 
96
 
97
- if (stickyElement.css("float") == "right") {
98
- stickyElement.css({"float":"none"}).parent().css({"float":"right"});
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99
  }
 
 
 
 
 
 
100
 
101
- var stickyWrapper = stickyElement.parent();
102
- stickyWrapper.css('height', stickyElement.outerHeight());
103
- sticked.push({
104
- topSpacing: o.topSpacing,
105
- bottomSpacing: o.bottomSpacing,
106
- stickyElement: stickyElement,
107
- currentTop: null,
108
- stickyWrapper: stickyWrapper,
109
- className: o.className,
110
- getWidthFrom: o.getWidthFrom,
111
- responsiveWidth: o.responsiveWidth
112
- });
113
- });
114
- },
115
- update: scroller,
116
- unstick: function(options) {
117
- return this.each(function() {
118
- var unstickyElement = $(this);
119
-
120
- var removeIdx = -1;
121
- for (var i = 0; i < sticked.length; i++)
122
- {
123
- if (sticked[i].stickyElement.get(0) == unstickyElement.get(0))
124
- {
125
  removeIdx = i;
 
126
  }
127
- }
128
- if(removeIdx != -1)
129
- {
130
- sticked.splice(removeIdx,1);
131
- unstickyElement.unwrap();
132
- unstickyElement.removeAttr('style');
133
- }
134
- });
135
- }
136
- };
 
 
 
 
 
137
 
138
  // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
139
  if (window.addEventListener) {
@@ -146,7 +265,7 @@
146
 
147
  $.fn.sticky = function(method) {
148
  if (methods[method]) {
149
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
150
  } else if (typeof method === 'object' || !method ) {
151
  return methods.init.apply( this, arguments );
152
  } else {
@@ -156,15 +275,14 @@
156
 
157
  $.fn.unstick = function(method) {
158
  if (methods[method]) {
159
- return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
160
  } else if (typeof method === 'object' || !method ) {
161
  return methods.unstick.apply( this, arguments );
162
  } else {
163
  $.error('Method ' + method + ' does not exist on jQuery.sticky');
164
  }
165
-
166
  };
167
  $(function() {
168
  setTimeout(scroller, 0);
169
  });
170
- })(jQuery);
1
+ // Sticky Plugin v1.0.4 for jQuery
2
  // =============
3
  // Author: Anthony Garand
4
  // Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
5
  // Improvements by Leonardo C. Daronco (daronco)
6
+ // Created: 02/14/2011
7
+ // Date: 07/20/2015
8
+ // Website: http://stickyjs.com/
9
  // Description: Makes an element on the page stick on the screen as you scroll
10
+ // It will only set the 'top' and 'position' of your element, you
11
+ // might need to adjust the width in some cases.
12
+
13
+ (function (factory) {
14
+ if (typeof define === 'function' && define.amd) {
15
+ // AMD. Register as an anonymous module.
16
+ define(['jquery'], factory);
17
+ } else if (typeof module === 'object' && module.exports) {
18
+ // Node/CommonJS
19
+ module.exports = factory(require('jquery'));
20
+ } else {
21
+ // Browser globals
22
+ factory(jQuery);
23
+ }
24
+ }(function ($) {
25
+ var slice = Array.prototype.slice; // save ref to original slice()
26
+ var splice = Array.prototype.splice; // save ref to original slice()
27
 
 
28
  var defaults = {
29
+ topSpacing: 0,
30
+ bottomSpacing: 0,
31
+ className: 'is-sticky',
32
+ wrapperClassName: 'sticky-wrapper',
33
+ center: false,
34
+ getWidthFrom: '',
35
+ widthFromWrapper: true, // works only when .getWidthFrom is empty
36
+ responsiveWidth: false,
37
+ zIndex: 'inherit'
38
+ },
39
+ $window = $(window),
40
+ $document = $(document),
41
+ sticked = [],
42
+ windowHeight = $window.height(),
43
+ scroller = function() {
44
+ var scrollTop = $window.scrollTop(),
45
+ documentHeight = $document.height(),
46
+ dwh = documentHeight - windowHeight,
47
+ extra = (scrollTop > dwh) ? dwh - scrollTop : 0;
48
+
49
+ for (var i = 0, l = sticked.length; i < l; i++) {
50
+ var s = sticked[i],
51
+ elementTop = s.stickyWrapper.offset().top,
52
+ etse = elementTop - s.topSpacing - extra;
53
+
54
+ //update height in case of dynamic content
55
+ s.stickyWrapper.css('height', s.stickyElement.outerHeight());
56
+
57
+ if (scrollTop <= etse) {
58
+ if (s.currentTop !== null) {
59
+ s.stickyElement
60
+ .css({
61
+ 'width': '',
62
+ 'position': '',
63
+ 'top': '',
64
+ 'z-index': ''
65
+ });
66
+ s.stickyElement.parent().removeClass(s.className);
67
+ s.stickyElement.trigger('sticky-end', [s]);
68
+ s.currentTop = null;
69
+ }
70
  }
71
+ else {
72
+ var newTop = documentHeight - s.stickyElement.outerHeight()
73
+ - s.topSpacing - s.bottomSpacing - scrollTop - extra;
74
+ if (newTop < 0) {
75
+ newTop = newTop + s.topSpacing;
76
+ } else {
77
+ newTop = s.topSpacing;
78
+ }
79
+ if (s.currentTop !== newTop) {
80
+ var newWidth;
81
+ if (s.getWidthFrom) {
82
+ padding = s.stickyElement.innerWidth() - s.stickyElement.width();
83
+ newWidth = $(s.getWidthFrom).width() - padding || null;
84
+ } else if (s.widthFromWrapper) {
85
+ newWidth = s.stickyWrapper.width();
86
+ }
87
+ if (newWidth == null) {
88
+ newWidth = s.stickyElement.width();
89
+ }
90
+ s.stickyElement
91
+ .css('width', newWidth)
92
+ .css('position', 'fixed')
93
+ .css('top', newTop)
94
+ .css('z-index', s.zIndex);
95
 
96
+ s.stickyElement.parent().addClass(s.className);
97
+
98
+ if (s.currentTop === null) {
99
+ s.stickyElement.trigger('sticky-start', [s]);
100
+ } else {
101
+ // sticky is started but it have to be repositioned
102
+ s.stickyElement.trigger('sticky-update', [s]);
103
+ }
104
+
105
+ if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) {
106
+ // just reached bottom || just started to stick but bottom is already reached
107
+ s.stickyElement.trigger('sticky-bottom-reached', [s]);
108
+ } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) {
109
+ // sticky is started && sticked at topSpacing && overflowing from top just finished
110
+ s.stickyElement.trigger('sticky-bottom-unreached', [s]);
111
+ }
112
+
113
+ s.currentTop = newTop;
114
  }
115
 
116
+ // Check if sticky has reached end of container and stop sticking
117
+ var stickyWrapperContainer = s.stickyWrapper.parent();
118
+ var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing);
119
+
120
+ if( unstick ) {
121
+ s.stickyElement
122
+ .css('position', 'absolute')
123
+ .css('top', '')
124
+ .css('bottom', 0)
125
+ .css('z-index', '');
126
+ } else {
127
+ s.stickyElement
128
+ .css('position', 'fixed')
129
+ .css('top', newTop)
130
+ .css('bottom', '')
131
+ .css('z-index', s.zIndex);
132
+ }
133
  }
134
  }
135
+ },
136
+ resizer = function() {
137
+ windowHeight = $window.height();
138
+
139
+ for (var i = 0, l = sticked.length; i < l; i++) {
140
+ var s = sticked[i];
141
+ var newWidth = null;
142
+ if (s.getWidthFrom) {
143
+ if (s.responsiveWidth) {
144
+ newWidth = $(s.getWidthFrom).width();
145
+ }
146
+ } else if(s.widthFromWrapper) {
147
+ newWidth = s.stickyWrapper.width();
148
+ }
149
+ if (newWidth != null) {
150
+ s.stickyElement.css('width', newWidth);
151
+ }
152
  }
153
+ },
154
+ methods = {
155
+ init: function(options) {
156
+ return this.each(function() {
157
+ var o = $.extend({}, defaults, options);
158
+ var stickyElement = $(this);
159
+
160
+ var stickyId = stickyElement.attr('id');
161
+ var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
162
+ var wrapper = $('<div></div>')
163
+ .attr('id', wrapperId)
164
+ .addClass(o.wrapperClassName);
165
+
166
+ stickyElement.wrapAll(function() {
167
+ if ($(this).parent("#" + wrapperId).length == 0) {
168
+ return wrapper;
169
+ }
170
+ });
171
+
172
+ var stickyWrapper = stickyElement.parent();
173
+
174
+ if (o.center) {
175
+ stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
176
+ }
177
+
178
+ if (stickyElement.css("float") === "right") {
179
+ stickyElement.css({"float":"none"}).parent().css({"float":"right"});
180
+ }
181
+
182
+ o.stickyElement = stickyElement;
183
+ o.stickyWrapper = stickyWrapper;
184
+ o.currentTop = null;
185
+
186
+ sticked.push(o);
187
+
188
+ methods.setWrapperHeight(this);
189
+ methods.setupChangeListeners(this);
190
+ });
191
+ },
192
+
193
+ setWrapperHeight: function(stickyElement) {
194
+ var element = $(stickyElement);
195
+ var stickyWrapper = element.parent();
196
+ if (stickyWrapper) {
197
+ stickyWrapper.css('height', element.outerHeight());
198
  }
199
+ },
200
 
201
+ setupChangeListeners: function(stickyElement) {
202
+ if (window.MutationObserver) {
203
+ var mutationObserver = new window.MutationObserver(function(mutations) {
204
+ if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) {
205
+ methods.setWrapperHeight(stickyElement);
206
+ }
207
+ });
208
+ mutationObserver.observe(stickyElement, {subtree: true, childList: true});
209
+ } else {
210
+ if (window.addEventListener) {
211
+ stickyElement.addEventListener('DOMNodeInserted', function() {
212
+ methods.setWrapperHeight(stickyElement);
213
+ }, false);
214
+ stickyElement.addEventListener('DOMNodeRemoved', function() {
215
+ methods.setWrapperHeight(stickyElement);
216
+ }, false);
217
+ } else if (window.attachEvent) {
218
+ stickyElement.attachEvent('onDOMNodeInserted', function() {
219
+ methods.setWrapperHeight(stickyElement);
220
+ });
221
+ stickyElement.attachEvent('onDOMNodeRemoved', function() {
222
+ methods.setWrapperHeight(stickyElement);
223
+ });
224
+ }
225
  }
226
+ },
227
+ update: scroller,
228
+ unstick: function(options) {
229
+ return this.each(function() {
230
+ var that = this;
231
+ var unstickyElement = $(that);
232
 
233
+ var removeIdx = -1;
234
+ var i = sticked.length;
235
+ while (i-- > 0) {
236
+ if (sticked[i].stickyElement.get(0) === that) {
237
+ splice.call(sticked,i,1);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  removeIdx = i;
239
+ }
240
  }
241
+ if(removeIdx !== -1) {
242
+ unstickyElement.unwrap();
243
+ unstickyElement
244
+ .css({
245
+ 'width': '',
246
+ 'position': '',
247
+ 'top': '',
248
+ 'float': '',
249
+ 'z-index': ''
250
+ })
251
+ ;
252
+ }
253
+ });
254
+ }
255
+ };
256
 
257
  // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
258
  if (window.addEventListener) {
265
 
266
  $.fn.sticky = function(method) {
267
  if (methods[method]) {
268
+ return methods[method].apply(this, slice.call(arguments, 1));
269
  } else if (typeof method === 'object' || !method ) {
270
  return methods.init.apply( this, arguments );
271
  } else {
275
 
276
  $.fn.unstick = function(method) {
277
  if (methods[method]) {
278
+ return methods[method].apply(this, slice.call(arguments, 1));
279
  } else if (typeof method === 'object' || !method ) {
280
  return methods.unstick.apply( this, arguments );
281
  } else {
282
  $.error('Method ' + method + ' does not exist on jQuery.sticky');
283
  }
 
284
  };
285
  $(function() {
286
  setTimeout(scroller, 0);
287
  });
288
+ }));
languages/custom-login-tr_TR.mo CHANGED
File without changes
languages/custom-login-tr_TR.pot CHANGED
File without changes
languages/custom-login.mo CHANGED
File without changes
languages/custom-login.po CHANGED
File without changes
languages/custom-login.pot CHANGED
File without changes
readme.txt CHANGED
@@ -2,27 +2,27 @@
2
  Contributors: austyfrosty, frostymedia
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290
4
  Tags: admin, branding, customization, custom login, login, logo, error, login error, custom login pro
5
- Requires at least: 4.0
6
- Tested up to: 4.1
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
- Custin Login allows you to easily customize your admin login page, works great for client sites!
12
 
13
  == Description ==
14
 
15
- Custom Login 2.0 was 140% faster than version 1.0, and version 3.0 is now even better! *Minimum WordPress version is 4.0*
16
 
17
  For more information visit the official [Custom Login](https://frosty.media/plugins/custom-login/) page.
18
 
19
  > <strong>Support</strong><br>
20
- > [Austin](https://austin.passy.co) and the [Frosty Media](https://frosty.media/) team will always try our best to support the Custom Login plugin on the WordPress.org forum, but please note that we can not guarantee a response in a timely manner. If you have an issue we would appriciate you using GitHub or purchasing priority support on our site.
21
  >
22
- > Any extensions purchased on [Frosty Media](https://frosty.media/) (not hosted on WordPress.org) will not be supported on the WordPress.org forum. You can always browse our *small* but growing [documentation](https://frosty.media/docs) for further assistance. You need a valid license key to make support submissions *on our site*. We thank you in advance.
23
 
24
  > <strong>Bug Reports</strong><br>
25
- > Bug reports for Custom Login are [welcomed on GitHub](https://github.com/thefrosty/custom-login).
26
 
27
  = Video =
28
 
@@ -30,15 +30,17 @@ http://www.youtube.com/watch?v=hZkc-t36xYQ
30
 
31
  = Extensions =
32
 
33
- There are currently 5 premium extensions available, with more coming (suggestions welcome - and *will be offered for free to said user*).
34
 
35
  **Extensions available now**
36
 
37
  * [Stealth Login](https://frosty.media/plugins/custom-login-stealth-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Stealth Login") - obscure your login URL.
38
  * [Page Template](https://frosty.media/plugins/custom-login-page-template/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Page Template") - add a login form to any WordPress page.
39
  * [Login Redirects](https://frosty.media/plugins/custom-login-redirects/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Redirects") - Manage login redirects.
40
- * [No Password](https://frosty.media/plugins/custom-login-no-password-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login No Password logins") - allow users to login without a password.
41
- * [Style Pack #1](https://frosty.media/plugins/custom-login-style-pack-1?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #1") - four pre-designed login styles.
 
 
42
 
43
  **Extensions in development/extension ideas**
44
 
@@ -62,7 +64,7 @@ Activate the plugin and customize your WordPress login screen. It's as easy as m
62
  = links =
63
 
64
  * Premium Plugins: [https://frosty.media/plugins](https://frosty.media/plugins/ "Premium WordPress Plugins by Frosty")
65
- * Austins Blog: [https:/austin.passy.co/](https://austin.passy.co/ "Austin Passy's blog")
66
  * Austin on Twitter: @[TheFrosty](https:/twitter.com/TheFrosty "Austin TheFrosty' Passy on Twitter")
67
  * Frosty Media on Twitter: @[Frosty_Media](https:/twitter.com/Frosty_Media "Frosty Media on Twitter")
68
  * **Development welcomed on [GitHub](https://github.com/thefrosty/custom-login)**
@@ -87,7 +89,7 @@ Follow the steps below to install the plugin.
87
  They are additional plugins that add/extend functionality to the Custom Login plugin. You can find all Custom Login extensions on [Frosty.Media](http://frosty.media).
88
 
89
  = My new settings aren't showing up =
90
- This plugin caches all settings in a transient, try clicking the new 'Update stylesheet' button to delete and refresh the cache. *This applys to versions < 3.0*.
91
 
92
  = Is there a PRO version? =
93
  Well, yes and no. Since version 3.0 of Custom Login the [PRO](http://frosty.media/plugins/custom-login-pro/) version is a completely different plugin. Instead of settings to manage your login design there is a new post type where you can create unlimited "designs" and activate each one as needed. Since version 3.0 all Custom Login extensions no longer work with Custom Login Pro, but will be merged into it in the future.
@@ -99,7 +101,7 @@ I created this plugin to allow for custom login of any WordPress login screen. S
99
  Check out the [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
100
 
101
  = I think i want to uninstall =
102
- Just deactive it. Sad panda is sad.
103
 
104
  == Screenshots ==
105
 
@@ -115,6 +117,56 @@ Custom Login showcase on the [Flickr group](http://flickr.com/groups/custom-logi
115
 
116
  == Changelog ==
117
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
118
  = Version 3.2 (02/09/15) =
119
 
120
  * Message: Celebrate 500,000 downloads. Visit the settings page or [this post](https://frosty.media/?p=26056) to get any extension for free! *Restrictions may apply.
@@ -189,7 +241,7 @@ Custom Login showcase on the [Flickr group](http://flickr.com/groups/custom-logi
189
  = Version 3.0.2 (01/12/15) =
190
 
191
  * Fix: Logo background size width &amp; height settings not transfering over in upgrade process.
192
- * Fix: Checking "Remove lost password text" removes the text instead of the other way around. [forum](https://wordpress.org/support/topic/lost-your-password-1)
193
 
194
  = Version 3.0.1 (01/11/15) =
195
 
@@ -210,6 +262,9 @@ _REQUIRES WordPress 3.9 or later_
210
 
211
  == Upgrade Notice ==
212
 
 
 
 
213
  = 3.2 =
214
  Celebrate 500,000 downloads w/ a FREE extension! Update to version 3.2 for more info.
215
 
@@ -217,4 +272,4 @@ Celebrate 500,000 downloads w/ a FREE extension! Update to version 3.2 for more
217
  Fixes unable to login to admin site.
218
 
219
  = 3.0.5 =
220
- Complete rewrite of Custom Login, be sure to run the update script to keep your old settings.
2
  Contributors: austyfrosty, frostymedia
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=7431290
4
  Tags: admin, branding, customization, custom login, login, logo, error, login error, custom login pro
5
+ Requires at least: 4.8
6
+ Tested up to: 5.2
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
11
+ Custom Login allows you to easily customize your admin login page, works great for client sites!
12
 
13
  == Description ==
14
 
15
+ Custom Login 2.0 was 140% faster than version 1.0, and version 3.0 is now even better! *Minimum WordPress version is 4.8*
16
 
17
  For more information visit the official [Custom Login](https://frosty.media/plugins/custom-login/) page.
18
 
19
  > <strong>Support</strong><br>
20
+ > [Austin](http://austin.passy.co) and the [Frosty Media](https://frosty.media/) team will always try our best to support the Custom Login plugin on the WordPress.org forum, but please note that we can not guarantee a response in a timely manner. If you have an issue we would appriciate you using GitHub or purchasing priority support on our site.
21
  >
22
+ > Any extensions purchased on [Frosty Media](https://frosty.media/) (not hosted on WordPress.org) will not be supported on the WordPress.org forum. You can always browse our *small* but growing [documentation](https://frosty.media/docs) for further assistance. You need a valid license key to make support submissions *on our site*. We thank you in advance.
23
 
24
  > <strong>Bug Reports</strong><br>
25
+ > Bug reports for Custom Login are [welcomed on GitHub](https://github.com/thefrosty/custom-login).
26
 
27
  = Video =
28
 
30
 
31
  = Extensions =
32
 
33
+ There are currently 7 premium extensions available, with more coming (suggestions welcome - and *will be offered for free to said user*).
34
 
35
  **Extensions available now**
36
 
37
  * [Stealth Login](https://frosty.media/plugins/custom-login-stealth-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Stealth Login") - obscure your login URL.
38
  * [Page Template](https://frosty.media/plugins/custom-login-page-template/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Page Template") - add a login form to any WordPress page.
39
  * [Login Redirects](https://frosty.media/plugins/custom-login-redirects/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Redirects") - Manage login redirects.
40
+ * [No Password](https://frosty.media/plugins/custom-login-no-password-login/?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login No Password logins") - allow users to login without a password.
41
+ * [Style Pack #1](https://frosty.media/plugins/custom-login-style-pack-1?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #1") - four pre-designed login styles.
42
+ * [Style Pack #2](https://frosty.media/plugins/custom-login-style-pack-2?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #2") - four pre-designed fun login styles.
43
+ * [Style Pack #3](https://frosty.media/plugins/custom-login-style-pack-3?utm_source=wordpressorg&utm_medium=custom-login&utm_campaign=readme.txt "Custom Login Style Pack #3") - four pre-designed holiday login styles.
44
 
45
  **Extensions in development/extension ideas**
46
 
64
  = links =
65
 
66
  * Premium Plugins: [https://frosty.media/plugins](https://frosty.media/plugins/ "Premium WordPress Plugins by Frosty")
67
+ * Austins Blog: [https:/austin.passy.co/](http://austin.passy.co/ "Austin Passy's blog")
68
  * Austin on Twitter: @[TheFrosty](https:/twitter.com/TheFrosty "Austin TheFrosty' Passy on Twitter")
69
  * Frosty Media on Twitter: @[Frosty_Media](https:/twitter.com/Frosty_Media "Frosty Media on Twitter")
70
  * **Development welcomed on [GitHub](https://github.com/thefrosty/custom-login)**
89
  They are additional plugins that add/extend functionality to the Custom Login plugin. You can find all Custom Login extensions on [Frosty.Media](http://frosty.media).
90
 
91
  = My new settings aren't showing up =
92
+ This plugin caches all settings in a transient, try clicking the new 'Update stylesheet' button to delete and refresh the cache. *This will apply to versions < 3.0*.
93
 
94
  = Is there a PRO version? =
95
  Well, yes and no. Since version 3.0 of Custom Login the [PRO](http://frosty.media/plugins/custom-login-pro/) version is a completely different plugin. Instead of settings to manage your login design there is a new post type where you can create unlimited "designs" and activate each one as needed. Since version 3.0 all Custom Login extensions no longer work with Custom Login Pro, but will be merged into it in the future.
101
  Check out the [Flickr group](http://flickr.com/groups/custom-login/)! Upload and add it to our pool!
102
 
103
  = I think i want to uninstall =
104
+ Just deactivate it. Sad panda is sad.
105
 
106
  == Screenshots ==
107
 
117
 
118
  == Changelog ==
119
 
120
+ = Version 3.2.9 (2019/05/07) =
121
+
122
+ * Tested up to WordPress 5.2.
123
+ * Update deprecated login text filter in WordPress 5.2.
124
+ * Update animate.css to version 3.7.0.
125
+ * Update chosen.js to 1.8.7.
126
+ * Update jQuery Sticky to 1.0.4.
127
+ * Fix spelling error in admin JS on typeof check for ACE JS.
128
+
129
+ = Version 3.2.8 (12/11/17) =
130
+
131
+ * Update notifications URL to current correct location for admin settings page.
132
+
133
+ = Version 3.2.7 (11/13/17) =
134
+
135
+ * Fix duplicate CSS output in head bug.
136
+ * Fix empty link URL and title on wp login page when on multisite.
137
+
138
+ = Version 3.2.6 (11/10/17) =
139
+
140
+ * Check compatibility with WordPress 4.9.
141
+ * Update Settings API to fix `Undefined index: active` message.
142
+
143
+ = Version 3.2.5 (04/13/16) =
144
+
145
+ * WordPress 4.5 compatible update (moves Custom Login css after WordPress' login style sheet).
146
+ * Fix issue where toggling the 'active' checkbox in the header doesn't activate or de-activate the plugin settings (updates via AJAX now).
147
+
148
+ = Version 3.2.4 (09/16/15) =
149
+
150
+ * Fix PHP Fatal error.
151
+ ** PHP Fatal error: Call to a member function get_permalink() on a non-object in /includes/admin/dashboard.php:114
152
+
153
+ = Version 3.2.2 (05/04/15) =
154
+
155
+ * May the fourth be with you.
156
+ * Cleaned up dashboard JS errors.
157
+
158
+ = Version 3.2.2 (04/29/15) =
159
+
160
+ * Update version number.
161
+ * Fix upgrade notice showing when not needed.
162
+ * Add class 'notice' and 'is-dismissible' to notice.
163
+ * Cleanup admin dashboard empty ob_get_clean() notice.
164
+
165
+ = Version 3.2.1 (04/20/15) =
166
+
167
+ * Fix: XSS security flaw.
168
+ * Fix: Settings page not showing. (Fixes Issue: [#6](https://github.com/thefrosty/custom-login/pull/6) /ht @[DrewAPicture](https://github.com/DrewAPicture).
169
+
170
  = Version 3.2 (02/09/15) =
171
 
172
  * Message: Celebrate 500,000 downloads. Visit the settings page or [this post](https://frosty.media/?p=26056) to get any extension for free! *Restrictions may apply.
241
  = Version 3.0.2 (01/12/15) =
242
 
243
  * Fix: Logo background size width &amp; height settings not transfering over in upgrade process.
244
+ * Fix: Checking "Remove lost password text" removes the text instead of the other way around. [forum](https://wordpress.org/support/topic/lost-your-password-1)
245
 
246
  = Version 3.0.1 (01/11/15) =
247
 
262
 
263
  == Upgrade Notice ==
264
 
265
+ = 3.2.7 =
266
+ Fixes duplicate CSS output in login header. Testing up to WordPress 4.9.
267
+
268
  = 3.2 =
269
  Celebrate 500,000 downloads w/ a FREE extension! Update to version 3.2 for more info.
270
 
272
  Fixes unable to login to admin site.
273
 
274
  = 3.0.5 =
275
+ Complete rewrite of Custom Login, be sure to run the update script to keep your old settings.
templates/wp-login-script.php CHANGED
@@ -10,7 +10,7 @@ global $cl_js_atts;
10
  extract( $cl_js_atts, EXTR_SKIP );
11
 
12
  /* Cache ALL THE THINGS! */
13
- if ( false === ( $js = get_transient( $trans_key ) ) ) :
14
 
15
  $js = '';
16
 
@@ -22,7 +22,7 @@ if ( false === ( $js = get_transient( $trans_key ) ) ) :
22
  *
23
  * Plugin URI : https://frosty.media/plugins/custom-login/
24
  * Version : $version
25
- * Author URI : https://austin.passy.co/
26
  * Extensions : https://frosty.media/plugin/tag/custom-login-extension/
27
  */\n\n";
28
 
@@ -33,16 +33,16 @@ if ( false === ( $js = get_transient( $trans_key ) ) ) :
33
  if ( !empty( $custom_jquery ) ) {
34
 
35
  $js .= "\n\n/* Custom JS */\n";
36
- $js .= wp_specialchars_decode( stripslashes( $custom_jquery ), 1, 0, 1 );
37
  $js .= "\n\n";
38
 
39
  }
40
 
41
  $js .= '}(jQuery));';
42
 
43
- /* WP Magic */
44
- set_transient( $trans_key, $js, YEAR_IN_SECONDS/2 ); // Cache for six months
45
- endif;
46
 
47
  /* Out of the frying pan, and into the fire! */
48
  echo $js;
10
  extract( $cl_js_atts, EXTR_SKIP );
11
 
12
  /* Cache ALL THE THINGS! */
13
+ //if ( false === ( $js = get_transient( $trans_key ) ) ) :
14
 
15
  $js = '';
16
 
22
  *
23
  * Plugin URI : https://frosty.media/plugins/custom-login/
24
  * Version : $version
25
+ * Author URI : http://austin.passy.co/
26
  * Extensions : https://frosty.media/plugin/tag/custom-login-extension/
27
  */\n\n";
28
 
33
  if ( !empty( $custom_jquery ) ) {
34
 
35
  $js .= "\n\n/* Custom JS */\n";
36
+ $js .= wp_specialchars_decode( stripslashes( $custom_jquery ) );
37
  $js .= "\n\n";
38
 
39
  }
40
 
41
  $js .= '}(jQuery));';
42
 
43
+ // /* WP Magic */
44
+ // set_transient( $trans_key, $js, YEAR_IN_SECONDS/2 ); // Cache for six months
45
+ //endif;
46
 
47
  /* Out of the frying pan, and into the fire! */
48
  echo $js;
templates/wp-login-style.php CHANGED
@@ -11,7 +11,7 @@ global $cl_css_atts;
11
  extract( $cl_css_atts, EXTR_SKIP );
12
 
13
  /* Cache ALL THE THINGS! */
14
- if ( false === ( $css = get_transient( $trans_key ) ) ) :
15
 
16
  $css = '';
17
  $close_rule = "}\n";
@@ -27,13 +27,13 @@ if ( false === ( $css = get_transient( $trans_key ) ) ) :
27
  *
28
  * Plugin URI : https://frosty.media/plugins/custom-login/
29
  * Version : $version
30
- * Author URI : https://austin.passy.co/
31
  * Extensions : https://frosty.media/plugin/tag/custom-login-extension/
32
  */\n\n";
33
 
34
  /* Custom user input */
35
  if ( !empty( $custom_css ) ) {
36
- $custom_css = wp_specialchars_decode( stripslashes( $custom_css ), 1, 0, 1 );
37
 
38
  $css .= "/* START Custom CSS */\n";
39
  $css .= str_replace(
@@ -327,9 +327,9 @@ if ( false === ( $css = get_transient( $trans_key ) ) ) :
327
 
328
  }
329
 
330
- /* WP Magic */
331
- set_transient( $trans_key, $css, YEAR_IN_SECONDS/2 ); // Cache for six months
332
- endif;
333
 
334
  /* Out of the frying pan, and into the fire! */
335
  echo $css;
11
  extract( $cl_css_atts, EXTR_SKIP );
12
 
13
  /* Cache ALL THE THINGS! */
14
+ //if ( false === ( $css = get_transient( $trans_key ) ) ) :
15
 
16
  $css = '';
17
  $close_rule = "}\n";
27
  *
28
  * Plugin URI : https://frosty.media/plugins/custom-login/
29
  * Version : $version
30
+ * Author URI : http://austin.passy.co/
31
  * Extensions : https://frosty.media/plugin/tag/custom-login-extension/
32
  */\n\n";
33
 
34
  /* Custom user input */
35
  if ( !empty( $custom_css ) ) {
36
+ $custom_css = wp_specialchars_decode( stripslashes( $custom_css ) );
37
 
38
  $css .= "/* START Custom CSS */\n";
39
  $css .= str_replace(
327
 
328
  }
329
 
330
+ // /* WP Magic */
331
+ // set_transient( $trans_key, $css, YEAR_IN_SECONDS/2 ); // Cache for six months
332
+ //endif;
333
 
334
  /* Out of the frying pan, and into the fire! */
335
  echo $css;
uninstall.php CHANGED
File without changes