peoplefinder 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1009) hide show
  1. checksums.yaml +7 -0
  2. data/LICENCE.txt +19 -0
  3. data/README.md +234 -0
  4. data/Rakefile +14 -0
  5. data/app/assets/images/icon_delete.png +0 -0
  6. data/app/assets/images/icon_delete_retina.png +0 -0
  7. data/app/assets/images/icon_plus.png +0 -0
  8. data/app/assets/images/icon_plus_retina.png +0 -0
  9. data/app/assets/images/icon_search.png +0 -0
  10. data/app/assets/images/icon_search_retina.png +0 -0
  11. data/app/assets/images/medium_no_photo.png +0 -0
  12. data/app/assets/javascripts/application.js +1 -0
  13. data/app/assets/javascripts/peoplefinder/application.js +17 -0
  14. data/app/assets/javascripts/peoplefinder/form_input_mapper.js +15 -0
  15. data/app/assets/javascripts/peoplefinder/image_crop.js +18 -0
  16. data/app/assets/javascripts/peoplefinder/org_browser_controller.js +58 -0
  17. data/app/assets/javascripts/peoplefinder/org_tree.js +37 -0
  18. data/app/assets/javascripts/peoplefinder/peoplefinder.js +37 -0
  19. data/app/assets/javascripts/peoplefinder/peoplefinder_app.js +12 -0
  20. data/app/assets/stylesheets/application.scss +2 -0
  21. data/app/assets/stylesheets/peoplefinder/application.scss +252 -0
  22. data/app/assets/stylesheets/peoplefinder/groups.css.scss +72 -0
  23. data/app/assets/stylesheets/peoplefinder/home.css.scss +16 -0
  24. data/app/assets/stylesheets/peoplefinder/org_browser.scss +134 -0
  25. data/app/assets/stylesheets/peoplefinder/people.css.scss +138 -0
  26. data/app/assets/stylesheets/peoplefinder/retinal_images.css.scss +21 -0
  27. data/app/assets/stylesheets/peoplefinder/search_box.css.scss +23 -0
  28. data/app/controllers/peoplefinder/application_controller.rb +70 -0
  29. data/app/controllers/peoplefinder/errors_controller.rb +14 -0
  30. data/app/controllers/peoplefinder/groups_controller.rb +97 -0
  31. data/app/controllers/peoplefinder/home_controller.rb +11 -0
  32. data/app/controllers/peoplefinder/information_requests_controller.rb +40 -0
  33. data/app/controllers/peoplefinder/memberships_controller.rb +10 -0
  34. data/app/controllers/peoplefinder/org_controller.rb +7 -0
  35. data/app/controllers/peoplefinder/people_controller.rb +130 -0
  36. data/app/controllers/peoplefinder/person_image_controller.rb +35 -0
  37. data/app/controllers/peoplefinder/reported_profiles_controller.rb +40 -0
  38. data/app/controllers/peoplefinder/search_controller.rb +7 -0
  39. data/app/controllers/peoplefinder/sessions_controller.rb +29 -0
  40. data/app/controllers/peoplefinder/tokens_controller.rb +37 -0
  41. data/app/controllers/peoplefinder/versions_controller.rb +14 -0
  42. data/app/helpers/peoplefinder/application_helper.rb +54 -0
  43. data/app/helpers/peoplefinder/people_helper.rb +19 -0
  44. data/app/helpers/peoplefinder/versions_helper.rb +13 -0
  45. data/app/mailers/peoplefinder/reminder_mailer.rb +26 -0
  46. data/app/mailers/peoplefinder/token_mailer.rb +8 -0
  47. data/app/mailers/peoplefinder/user_update_mailer.rb +46 -0
  48. data/app/models/peoplefinder/concerns/authentication.rb +36 -0
  49. data/app/models/peoplefinder/concerns/completion.rb +47 -0
  50. data/app/models/peoplefinder/concerns/notifications.rb +59 -0
  51. data/app/models/peoplefinder/concerns/searchable.rb +35 -0
  52. data/app/models/peoplefinder/concerns/work_days.rb +25 -0
  53. data/app/models/peoplefinder/email_address.rb +46 -0
  54. data/app/models/peoplefinder/group.rb +99 -0
  55. data/app/models/peoplefinder/group_hierarchy.rb +43 -0
  56. data/app/models/peoplefinder/home.rb +16 -0
  57. data/app/models/peoplefinder/information_request.rb +10 -0
  58. data/app/models/peoplefinder/membership.rb +17 -0
  59. data/app/models/peoplefinder/person.rb +82 -0
  60. data/app/models/peoplefinder/reported_profile.rb +19 -0
  61. data/app/models/peoplefinder/token.rb +31 -0
  62. data/app/models/peoplefinder/version.rb +38 -0
  63. data/app/uploaders/peoplefinder/image_uploader.rb +54 -0
  64. data/app/views/layouts/peoplefinder/_ga.html.haml +9 -0
  65. data/app/views/layouts/peoplefinder/_shared.html.haml +5 -0
  66. data/app/views/layouts/peoplefinder/application.html.haml +24 -0
  67. data/app/views/layouts/peoplefinder/home.html.haml +11 -0
  68. data/app/views/peoplefinder/errors/file_not_found.html.haml +4 -0
  69. data/app/views/peoplefinder/errors/internal_server_error.html.haml +4 -0
  70. data/app/views/peoplefinder/errors/unprocessable.html.haml +5 -0
  71. data/app/views/peoplefinder/groups/_breadcrumbs.html.haml +2 -0
  72. data/app/views/peoplefinder/groups/_detail.html.haml +26 -0
  73. data/app/views/peoplefinder/groups/_form.html.haml +46 -0
  74. data/app/views/peoplefinder/groups/_leadership.html.haml +4 -0
  75. data/app/views/peoplefinder/groups/_subgroup.html.haml +5 -0
  76. data/app/views/peoplefinder/groups/all_people.html.haml +6 -0
  77. data/app/views/peoplefinder/groups/edit.html.haml +16 -0
  78. data/app/views/peoplefinder/groups/new.html.haml +3 -0
  79. data/app/views/peoplefinder/groups/people.html.haml +6 -0
  80. data/app/views/peoplefinder/groups/show.html.haml +23 -0
  81. data/app/views/peoplefinder/home/show.html.haml +15 -0
  82. data/app/views/peoplefinder/information_requests/new.html.haml +13 -0
  83. data/app/views/peoplefinder/memberships/_summary.html.haml +9 -0
  84. data/app/views/peoplefinder/people/_breadcrumbs.html.haml +2 -0
  85. data/app/views/peoplefinder/people/_day.html.haml +2 -0
  86. data/app/views/peoplefinder/people/_form.html.haml +61 -0
  87. data/app/views/peoplefinder/people/_membership_fields.html.haml +42 -0
  88. data/app/views/peoplefinder/people/_person.html.haml +24 -0
  89. data/app/views/peoplefinder/people/_summary.html.haml +9 -0
  90. data/app/views/peoplefinder/people/_working_days.html.haml +4 -0
  91. data/app/views/peoplefinder/people/add_membership.html.haml +6 -0
  92. data/app/views/peoplefinder/people/confirm.html.haml +35 -0
  93. data/app/views/peoplefinder/people/edit.html.haml +12 -0
  94. data/app/views/peoplefinder/people/new.html.haml +3 -0
  95. data/app/views/peoplefinder/people/show.html.haml +49 -0
  96. data/app/views/peoplefinder/person_image/edit.html.haml +18 -0
  97. data/app/views/peoplefinder/reminder_mailer/inadequate_profile.text.erb +7 -0
  98. data/app/views/peoplefinder/reminder_mailer/information_request.text.erb +4 -0
  99. data/app/views/peoplefinder/reminder_mailer/reported_profile.text.erb +10 -0
  100. data/app/views/peoplefinder/reported_profiles/new.html.haml +14 -0
  101. data/app/views/peoplefinder/search/index.html.haml +13 -0
  102. data/app/views/peoplefinder/sessions/_login_page.html.haml +25 -0
  103. data/app/views/peoplefinder/sessions/failed.html.haml +2 -0
  104. data/app/views/peoplefinder/sessions/new.html.haml +1 -0
  105. data/app/views/peoplefinder/shared/_breadcrumb.html.haml +4 -0
  106. data/app/views/peoplefinder/shared/_breadcrumb_spacer.html.haml +1 -0
  107. data/app/views/peoplefinder/shared/_breadcrumbs.html.haml +1 -0
  108. data/app/views/peoplefinder/shared/_editing_alert.html.haml +6 -0
  109. data/app/views/peoplefinder/shared/_loginout.html.haml +5 -0
  110. data/app/views/peoplefinder/shared/_org_browser.html.erb +42 -0
  111. data/app/views/peoplefinder/shared/_search.html.haml +3 -0
  112. data/app/views/peoplefinder/token_mailer/new_token_email.text.erb +7 -0
  113. data/app/views/peoplefinder/tokens/create.html.haml +2 -0
  114. data/app/views/peoplefinder/tokens/failed.html.haml +1 -0
  115. data/app/views/peoplefinder/tokens/new.html.haml +1 -0
  116. data/app/views/peoplefinder/user_update_mailer/deleted_profile_email.erb +3 -0
  117. data/app/views/peoplefinder/user_update_mailer/new_profile_email.erb +5 -0
  118. data/app/views/peoplefinder/user_update_mailer/updated_address_from_email.erb +7 -0
  119. data/app/views/peoplefinder/user_update_mailer/updated_address_to_email.erb +5 -0
  120. data/app/views/peoplefinder/user_update_mailer/updated_profile_email.erb +5 -0
  121. data/app/views/peoplefinder/versions/_general.html.haml +19 -0
  122. data/app/views/peoplefinder/versions/_membership.html.haml +13 -0
  123. data/app/views/peoplefinder/versions/index.html.haml +26 -0
  124. data/config/initializers/assets.rb +28 -0
  125. data/config/initializers/backtrace_silencers.rb +9 -0
  126. data/config/initializers/carrierwave.rb +45 -0
  127. data/config/initializers/cookies_serializer.rb +3 -0
  128. data/config/initializers/elasticsearch.rb +4 -0
  129. data/config/initializers/filter_parameter_logging.rb +4 -0
  130. data/config/initializers/inflections.rb +16 -0
  131. data/config/initializers/mime_types.rb +4 -0
  132. data/config/initializers/omniauth.rb +4 -0
  133. data/config/initializers/session_store.rb +5 -0
  134. data/config/initializers/simple_form.rb +161 -0
  135. data/config/initializers/wrap_parameters.rb +15 -0
  136. data/config/locales/en.yml +131 -0
  137. data/config/routes.rb +34 -0
  138. data/config/secrets.yml +22 -0
  139. data/config/unicorn.rb +24 -0
  140. data/db/migrate/20141010090623_initial_schema.rb +91 -0
  141. data/db/migrate/20141010090624_migrate_item_types_in_versions.rb +17 -0
  142. data/db/seeds.rb +7 -0
  143. data/lib/peoplefinder.rb +4 -0
  144. data/lib/peoplefinder/engine.rb +27 -0
  145. data/lib/peoplefinder/version.rb +3 -0
  146. data/lib/tasks/brakeman.rake +10 -0
  147. data/lib/tasks/elasticsearch.rake +1 -0
  148. data/lib/tasks/jshint.rake +3 -0
  149. data/lib/tasks/peoplefinder.rake +44 -0
  150. data/lib/tasks/peoplefinder_tasks.rake +4 -0
  151. data/lib/tasks/quiet.rake +8 -0
  152. data/lib/tasks/rubocop.rake +6 -0
  153. data/lib/tasks/teaspoon.rake +9 -0
  154. data/lib/templates/haml/scaffold/_form.html.haml +10 -0
  155. data/spec/controllers/peoplefinder/errors_controller_spec.rb +30 -0
  156. data/spec/controllers/peoplefinder/groups_controller_spec.rb +195 -0
  157. data/spec/controllers/peoplefinder/home_controller_spec.rb +37 -0
  158. data/spec/controllers/peoplefinder/information_requests_controller_spec.rb +65 -0
  159. data/spec/controllers/peoplefinder/memberships_controller_spec.rb +25 -0
  160. data/spec/controllers/peoplefinder/org_controller_spec.rb +24 -0
  161. data/spec/controllers/peoplefinder/people_controller_spec.rb +270 -0
  162. data/spec/controllers/peoplefinder/person_image_controller_spec.rb +56 -0
  163. data/spec/controllers/peoplefinder/reported_profiles_controller_spec.rb +79 -0
  164. data/spec/controllers/peoplefinder/versions_controller_spec.rb +55 -0
  165. data/spec/dummy/README.rdoc +28 -0
  166. data/spec/dummy/Rakefile +6 -0
  167. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  168. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  169. data/spec/dummy/bin/bundle +3 -0
  170. data/spec/dummy/bin/rails +4 -0
  171. data/spec/dummy/bin/rake +4 -0
  172. data/spec/dummy/config.ru +4 -0
  173. data/spec/dummy/config/application.rb +49 -0
  174. data/spec/dummy/config/boot.rb +5 -0
  175. data/spec/dummy/config/database.yml +84 -0
  176. data/spec/dummy/config/environment.rb +5 -0
  177. data/spec/dummy/config/environments/development.rb +37 -0
  178. data/spec/dummy/config/environments/production.rb +82 -0
  179. data/spec/dummy/config/environments/test.rb +39 -0
  180. data/spec/dummy/config/initializers/assets.rb +8 -0
  181. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  182. data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
  183. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  184. data/spec/dummy/config/initializers/inflections.rb +16 -0
  185. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  186. data/spec/dummy/config/initializers/session_store.rb +3 -0
  187. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  188. data/spec/dummy/config/jshint.yml +19 -0
  189. data/spec/dummy/config/locales/en.yml +23 -0
  190. data/spec/dummy/config/routes.rb +4 -0
  191. data/spec/dummy/config/secrets.yml +22 -0
  192. data/spec/dummy/db/schema.rb +107 -0
  193. data/spec/dummy/log/development.log +44 -0
  194. data/spec/dummy/log/test.log +131081 -0
  195. data/spec/dummy/public/404.html +67 -0
  196. data/spec/dummy/public/422.html +67 -0
  197. data/spec/dummy/public/500.html +66 -0
  198. data/spec/dummy/public/favicon.ico +0 -0
  199. data/spec/dummy/public/uploads/peoplefinder/person/image/1084/croppable_placeholder.png +0 -0
  200. data/spec/dummy/public/uploads/peoplefinder/person/image/1084/medium_placeholder.png +0 -0
  201. data/spec/dummy/public/uploads/peoplefinder/person/image/1084/placeholder.png +0 -0
  202. data/spec/dummy/public/uploads/peoplefinder/person/image/1085/croppable_placeholder.png +0 -0
  203. data/spec/dummy/public/uploads/peoplefinder/person/image/1085/medium_placeholder.png +0 -0
  204. data/spec/dummy/public/uploads/peoplefinder/person/image/1085/placeholder.png +0 -0
  205. data/spec/dummy/public/uploads/peoplefinder/person/image/1204/croppable_placeholder.png +0 -0
  206. data/spec/dummy/public/uploads/peoplefinder/person/image/1204/medium_placeholder.png +0 -0
  207. data/spec/dummy/public/uploads/peoplefinder/person/image/1204/placeholder.png +0 -0
  208. data/spec/dummy/public/uploads/peoplefinder/person/image/1458/croppable_placeholder.png +0 -0
  209. data/spec/dummy/public/uploads/peoplefinder/person/image/1458/medium_placeholder.png +0 -0
  210. data/spec/dummy/public/uploads/peoplefinder/person/image/1458/placeholder.png +0 -0
  211. data/spec/dummy/public/uploads/peoplefinder/person/image/1459/croppable_placeholder.png +0 -0
  212. data/spec/dummy/public/uploads/peoplefinder/person/image/1459/medium_placeholder.png +0 -0
  213. data/spec/dummy/public/uploads/peoplefinder/person/image/1459/placeholder.png +0 -0
  214. data/spec/dummy/public/uploads/peoplefinder/person/image/1460/croppable_placeholder.png +0 -0
  215. data/spec/dummy/public/uploads/peoplefinder/person/image/1460/medium_placeholder.png +0 -0
  216. data/spec/dummy/public/uploads/peoplefinder/person/image/1460/placeholder.png +0 -0
  217. data/spec/dummy/public/uploads/peoplefinder/person/image/1461/croppable_placeholder.png +0 -0
  218. data/spec/dummy/public/uploads/peoplefinder/person/image/1461/medium_placeholder.png +0 -0
  219. data/spec/dummy/public/uploads/peoplefinder/person/image/1461/placeholder.png +0 -0
  220. data/spec/dummy/public/uploads/peoplefinder/person/image/1462/croppable_placeholder.png +0 -0
  221. data/spec/dummy/public/uploads/peoplefinder/person/image/1462/medium_placeholder.png +0 -0
  222. data/spec/dummy/public/uploads/peoplefinder/person/image/1462/placeholder.png +0 -0
  223. data/spec/dummy/public/uploads/peoplefinder/person/image/1463/croppable_placeholder.png +0 -0
  224. data/spec/dummy/public/uploads/peoplefinder/person/image/1463/medium_placeholder.png +0 -0
  225. data/spec/dummy/public/uploads/peoplefinder/person/image/1463/placeholder.png +0 -0
  226. data/spec/dummy/public/uploads/peoplefinder/person/image/1464/croppable_placeholder.png +0 -0
  227. data/spec/dummy/public/uploads/peoplefinder/person/image/1464/medium_placeholder.png +0 -0
  228. data/spec/dummy/public/uploads/peoplefinder/person/image/1464/placeholder.png +0 -0
  229. data/spec/dummy/public/uploads/peoplefinder/person/image/1472/croppable_placeholder.png +0 -0
  230. data/spec/dummy/public/uploads/peoplefinder/person/image/1472/medium_placeholder.png +0 -0
  231. data/spec/dummy/public/uploads/peoplefinder/person/image/1472/placeholder.png +0 -0
  232. data/spec/dummy/public/uploads/peoplefinder/person/image/1478/croppable_placeholder.png +0 -0
  233. data/spec/dummy/public/uploads/peoplefinder/person/image/1478/medium_placeholder.png +0 -0
  234. data/spec/dummy/public/uploads/peoplefinder/person/image/1478/placeholder.png +0 -0
  235. data/spec/dummy/public/uploads/peoplefinder/person/image/1480/croppable_placeholder.png +0 -0
  236. data/spec/dummy/public/uploads/peoplefinder/person/image/1480/medium_placeholder.png +0 -0
  237. data/spec/dummy/public/uploads/peoplefinder/person/image/1480/placeholder.png +0 -0
  238. data/spec/dummy/public/uploads/peoplefinder/person/image/1493/croppable_placeholder.png +0 -0
  239. data/spec/dummy/public/uploads/peoplefinder/person/image/1493/medium_placeholder.png +0 -0
  240. data/spec/dummy/public/uploads/peoplefinder/person/image/1493/placeholder.png +0 -0
  241. data/spec/dummy/public/uploads/peoplefinder/person/image/1495/croppable_placeholder.png +0 -0
  242. data/spec/dummy/public/uploads/peoplefinder/person/image/1495/medium_placeholder.png +0 -0
  243. data/spec/dummy/public/uploads/peoplefinder/person/image/1495/placeholder.png +0 -0
  244. data/spec/dummy/public/uploads/peoplefinder/person/image/1502/croppable_placeholder.png +0 -0
  245. data/spec/dummy/public/uploads/peoplefinder/person/image/1502/medium_placeholder.png +0 -0
  246. data/spec/dummy/public/uploads/peoplefinder/person/image/1502/placeholder.png +0 -0
  247. data/spec/dummy/public/uploads/peoplefinder/person/image/1506/croppable_placeholder.png +0 -0
  248. data/spec/dummy/public/uploads/peoplefinder/person/image/1506/medium_placeholder.png +0 -0
  249. data/spec/dummy/public/uploads/peoplefinder/person/image/1506/placeholder.png +0 -0
  250. data/spec/dummy/public/uploads/peoplefinder/person/image/1569/croppable_placeholder.png +0 -0
  251. data/spec/dummy/public/uploads/peoplefinder/person/image/1569/medium_placeholder.png +0 -0
  252. data/spec/dummy/public/uploads/peoplefinder/person/image/1569/placeholder.png +0 -0
  253. data/spec/dummy/public/uploads/peoplefinder/person/image/1677/croppable_placeholder.png +0 -0
  254. data/spec/dummy/public/uploads/peoplefinder/person/image/1677/medium_placeholder.png +0 -0
  255. data/spec/dummy/public/uploads/peoplefinder/person/image/1677/placeholder.png +0 -0
  256. data/spec/dummy/public/uploads/peoplefinder/person/image/1678/croppable_placeholder.png +0 -0
  257. data/spec/dummy/public/uploads/peoplefinder/person/image/1678/medium_placeholder.png +0 -0
  258. data/spec/dummy/public/uploads/peoplefinder/person/image/1678/placeholder.png +0 -0
  259. data/spec/dummy/public/uploads/peoplefinder/person/image/1706/croppable_placeholder.png +0 -0
  260. data/spec/dummy/public/uploads/peoplefinder/person/image/1706/medium_placeholder.png +0 -0
  261. data/spec/dummy/public/uploads/peoplefinder/person/image/1706/placeholder.png +0 -0
  262. data/spec/dummy/public/uploads/peoplefinder/person/image/1707/croppable_placeholder.png +0 -0
  263. data/spec/dummy/public/uploads/peoplefinder/person/image/1707/medium_placeholder.png +0 -0
  264. data/spec/dummy/public/uploads/peoplefinder/person/image/1707/placeholder.png +0 -0
  265. data/spec/dummy/public/uploads/peoplefinder/person/image/1708/croppable_placeholder.png +0 -0
  266. data/spec/dummy/public/uploads/peoplefinder/person/image/1708/medium_placeholder.png +0 -0
  267. data/spec/dummy/public/uploads/peoplefinder/person/image/1708/placeholder.png +0 -0
  268. data/spec/dummy/public/uploads/peoplefinder/person/image/1709/croppable_placeholder.png +0 -0
  269. data/spec/dummy/public/uploads/peoplefinder/person/image/1709/medium_placeholder.png +0 -0
  270. data/spec/dummy/public/uploads/peoplefinder/person/image/1709/placeholder.png +0 -0
  271. data/spec/dummy/public/uploads/peoplefinder/person/image/1710/croppable_placeholder.png +0 -0
  272. data/spec/dummy/public/uploads/peoplefinder/person/image/1710/medium_placeholder.png +0 -0
  273. data/spec/dummy/public/uploads/peoplefinder/person/image/1710/placeholder.png +0 -0
  274. data/spec/dummy/public/uploads/peoplefinder/person/image/183/croppable_placeholder.png +0 -0
  275. data/spec/dummy/public/uploads/peoplefinder/person/image/183/medium_placeholder.png +0 -0
  276. data/spec/dummy/public/uploads/peoplefinder/person/image/183/placeholder.png +0 -0
  277. data/spec/dummy/public/uploads/peoplefinder/person/image/184/croppable_placeholder.png +0 -0
  278. data/spec/dummy/public/uploads/peoplefinder/person/image/184/medium_placeholder.png +0 -0
  279. data/spec/dummy/public/uploads/peoplefinder/person/image/184/placeholder.png +0 -0
  280. data/spec/dummy/public/uploads/peoplefinder/person/image/1855/croppable_placeholder.png +0 -0
  281. data/spec/dummy/public/uploads/peoplefinder/person/image/1855/medium_placeholder.png +0 -0
  282. data/spec/dummy/public/uploads/peoplefinder/person/image/1855/placeholder.png +0 -0
  283. data/spec/dummy/public/uploads/peoplefinder/person/image/1857/croppable_placeholder.png +0 -0
  284. data/spec/dummy/public/uploads/peoplefinder/person/image/1857/medium_placeholder.png +0 -0
  285. data/spec/dummy/public/uploads/peoplefinder/person/image/1857/placeholder.png +0 -0
  286. data/spec/dummy/public/uploads/peoplefinder/person/image/1863/croppable_placeholder.png +0 -0
  287. data/spec/dummy/public/uploads/peoplefinder/person/image/1863/medium_placeholder.png +0 -0
  288. data/spec/dummy/public/uploads/peoplefinder/person/image/1863/placeholder.png +0 -0
  289. data/spec/dummy/public/uploads/peoplefinder/person/image/1865/croppable_placeholder.png +0 -0
  290. data/spec/dummy/public/uploads/peoplefinder/person/image/1865/medium_placeholder.png +0 -0
  291. data/spec/dummy/public/uploads/peoplefinder/person/image/1865/placeholder.png +0 -0
  292. data/spec/dummy/public/uploads/peoplefinder/person/image/1875/croppable_placeholder.png +0 -0
  293. data/spec/dummy/public/uploads/peoplefinder/person/image/1875/medium_placeholder.png +0 -0
  294. data/spec/dummy/public/uploads/peoplefinder/person/image/1875/placeholder.png +0 -0
  295. data/spec/dummy/public/uploads/peoplefinder/person/image/1880/croppable_placeholder.png +0 -0
  296. data/spec/dummy/public/uploads/peoplefinder/person/image/1880/medium_placeholder.png +0 -0
  297. data/spec/dummy/public/uploads/peoplefinder/person/image/1880/placeholder.png +0 -0
  298. data/spec/dummy/public/uploads/peoplefinder/person/image/1886/croppable_placeholder.png +0 -0
  299. data/spec/dummy/public/uploads/peoplefinder/person/image/1886/medium_placeholder.png +0 -0
  300. data/spec/dummy/public/uploads/peoplefinder/person/image/1886/placeholder.png +0 -0
  301. data/spec/dummy/public/uploads/peoplefinder/person/image/195/croppable_placeholder.png +0 -0
  302. data/spec/dummy/public/uploads/peoplefinder/person/image/195/medium_placeholder.png +0 -0
  303. data/spec/dummy/public/uploads/peoplefinder/person/image/195/placeholder.png +0 -0
  304. data/spec/dummy/public/uploads/peoplefinder/person/image/1987/croppable_placeholder.png +0 -0
  305. data/spec/dummy/public/uploads/peoplefinder/person/image/1987/medium_placeholder.png +0 -0
  306. data/spec/dummy/public/uploads/peoplefinder/person/image/1987/placeholder.png +0 -0
  307. data/spec/dummy/public/uploads/peoplefinder/person/image/2030/croppable_placeholder.png +0 -0
  308. data/spec/dummy/public/uploads/peoplefinder/person/image/2030/medium_placeholder.png +0 -0
  309. data/spec/dummy/public/uploads/peoplefinder/person/image/2030/placeholder.png +0 -0
  310. data/spec/dummy/public/uploads/peoplefinder/person/image/2031/croppable_placeholder.png +0 -0
  311. data/spec/dummy/public/uploads/peoplefinder/person/image/2031/medium_placeholder.png +0 -0
  312. data/spec/dummy/public/uploads/peoplefinder/person/image/2031/placeholder.png +0 -0
  313. data/spec/dummy/public/uploads/peoplefinder/person/image/2032/croppable_placeholder.png +0 -0
  314. data/spec/dummy/public/uploads/peoplefinder/person/image/2032/medium_placeholder.png +0 -0
  315. data/spec/dummy/public/uploads/peoplefinder/person/image/2032/placeholder.png +0 -0
  316. data/spec/dummy/public/uploads/peoplefinder/person/image/2033/croppable_placeholder.png +0 -0
  317. data/spec/dummy/public/uploads/peoplefinder/person/image/2033/medium_placeholder.png +0 -0
  318. data/spec/dummy/public/uploads/peoplefinder/person/image/2033/placeholder.png +0 -0
  319. data/spec/dummy/public/uploads/peoplefinder/person/image/2034/croppable_placeholder.png +0 -0
  320. data/spec/dummy/public/uploads/peoplefinder/person/image/2034/medium_placeholder.png +0 -0
  321. data/spec/dummy/public/uploads/peoplefinder/person/image/2034/placeholder.png +0 -0
  322. data/spec/dummy/public/uploads/peoplefinder/person/image/205/croppable_placeholder.png +0 -0
  323. data/spec/dummy/public/uploads/peoplefinder/person/image/205/medium_placeholder.png +0 -0
  324. data/spec/dummy/public/uploads/peoplefinder/person/image/205/placeholder.png +0 -0
  325. data/spec/dummy/public/uploads/peoplefinder/person/image/2053/croppable_placeholder.png +0 -0
  326. data/spec/dummy/public/uploads/peoplefinder/person/image/2053/medium_placeholder.png +0 -0
  327. data/spec/dummy/public/uploads/peoplefinder/person/image/2053/placeholder.png +0 -0
  328. data/spec/dummy/public/uploads/peoplefinder/person/image/2056/croppable_placeholder.png +0 -0
  329. data/spec/dummy/public/uploads/peoplefinder/person/image/2056/medium_placeholder.png +0 -0
  330. data/spec/dummy/public/uploads/peoplefinder/person/image/2056/placeholder.png +0 -0
  331. data/spec/dummy/public/uploads/peoplefinder/person/image/2060/croppable_placeholder.png +0 -0
  332. data/spec/dummy/public/uploads/peoplefinder/person/image/2060/medium_placeholder.png +0 -0
  333. data/spec/dummy/public/uploads/peoplefinder/person/image/2060/placeholder.png +0 -0
  334. data/spec/dummy/public/uploads/peoplefinder/person/image/2062/croppable_placeholder.png +0 -0
  335. data/spec/dummy/public/uploads/peoplefinder/person/image/2062/medium_placeholder.png +0 -0
  336. data/spec/dummy/public/uploads/peoplefinder/person/image/2062/placeholder.png +0 -0
  337. data/spec/dummy/public/uploads/peoplefinder/person/image/2071/croppable_placeholder.png +0 -0
  338. data/spec/dummy/public/uploads/peoplefinder/person/image/2071/medium_placeholder.png +0 -0
  339. data/spec/dummy/public/uploads/peoplefinder/person/image/2071/placeholder.png +0 -0
  340. data/spec/dummy/public/uploads/peoplefinder/person/image/2075/croppable_placeholder.png +0 -0
  341. data/spec/dummy/public/uploads/peoplefinder/person/image/2075/medium_placeholder.png +0 -0
  342. data/spec/dummy/public/uploads/peoplefinder/person/image/2075/placeholder.png +0 -0
  343. data/spec/dummy/public/uploads/peoplefinder/person/image/2081/croppable_placeholder.png +0 -0
  344. data/spec/dummy/public/uploads/peoplefinder/person/image/2081/medium_placeholder.png +0 -0
  345. data/spec/dummy/public/uploads/peoplefinder/person/image/2081/placeholder.png +0 -0
  346. data/spec/dummy/public/uploads/peoplefinder/person/image/210/croppable_placeholder.png +0 -0
  347. data/spec/dummy/public/uploads/peoplefinder/person/image/210/medium_placeholder.png +0 -0
  348. data/spec/dummy/public/uploads/peoplefinder/person/image/210/placeholder.png +0 -0
  349. data/spec/dummy/public/uploads/peoplefinder/person/image/214/croppable_placeholder.png +0 -0
  350. data/spec/dummy/public/uploads/peoplefinder/person/image/214/medium_placeholder.png +0 -0
  351. data/spec/dummy/public/uploads/peoplefinder/person/image/214/placeholder.png +0 -0
  352. data/spec/dummy/public/uploads/peoplefinder/person/image/219/croppable_placeholder.png +0 -0
  353. data/spec/dummy/public/uploads/peoplefinder/person/image/219/medium_placeholder.png +0 -0
  354. data/spec/dummy/public/uploads/peoplefinder/person/image/219/placeholder.png +0 -0
  355. data/spec/dummy/public/uploads/peoplefinder/person/image/2213/croppable_placeholder.png +0 -0
  356. data/spec/dummy/public/uploads/peoplefinder/person/image/2213/medium_placeholder.png +0 -0
  357. data/spec/dummy/public/uploads/peoplefinder/person/image/2213/placeholder.png +0 -0
  358. data/spec/dummy/public/uploads/peoplefinder/person/image/2214/croppable_placeholder.png +0 -0
  359. data/spec/dummy/public/uploads/peoplefinder/person/image/2214/medium_placeholder.png +0 -0
  360. data/spec/dummy/public/uploads/peoplefinder/person/image/2214/placeholder.png +0 -0
  361. data/spec/dummy/public/uploads/peoplefinder/person/image/223/croppable_placeholder.png +0 -0
  362. data/spec/dummy/public/uploads/peoplefinder/person/image/223/medium_placeholder.png +0 -0
  363. data/spec/dummy/public/uploads/peoplefinder/person/image/223/placeholder.png +0 -0
  364. data/spec/dummy/public/uploads/peoplefinder/person/image/229/croppable_placeholder.png +0 -0
  365. data/spec/dummy/public/uploads/peoplefinder/person/image/229/medium_placeholder.png +0 -0
  366. data/spec/dummy/public/uploads/peoplefinder/person/image/229/placeholder.png +0 -0
  367. data/spec/dummy/public/uploads/peoplefinder/person/image/2358/croppable_placeholder.png +0 -0
  368. data/spec/dummy/public/uploads/peoplefinder/person/image/2358/medium_placeholder.png +0 -0
  369. data/spec/dummy/public/uploads/peoplefinder/person/image/2358/placeholder.png +0 -0
  370. data/spec/dummy/public/uploads/peoplefinder/person/image/2359/croppable_placeholder.png +0 -0
  371. data/spec/dummy/public/uploads/peoplefinder/person/image/2359/medium_placeholder.png +0 -0
  372. data/spec/dummy/public/uploads/peoplefinder/person/image/2359/placeholder.png +0 -0
  373. data/spec/dummy/public/uploads/peoplefinder/person/image/2360/croppable_placeholder.png +0 -0
  374. data/spec/dummy/public/uploads/peoplefinder/person/image/2360/medium_placeholder.png +0 -0
  375. data/spec/dummy/public/uploads/peoplefinder/person/image/2360/placeholder.png +0 -0
  376. data/spec/dummy/public/uploads/peoplefinder/person/image/2361/croppable_placeholder.png +0 -0
  377. data/spec/dummy/public/uploads/peoplefinder/person/image/2361/medium_placeholder.png +0 -0
  378. data/spec/dummy/public/uploads/peoplefinder/person/image/2361/placeholder.png +0 -0
  379. data/spec/dummy/public/uploads/peoplefinder/person/image/2362/croppable_placeholder.png +0 -0
  380. data/spec/dummy/public/uploads/peoplefinder/person/image/2362/medium_placeholder.png +0 -0
  381. data/spec/dummy/public/uploads/peoplefinder/person/image/2362/placeholder.png +0 -0
  382. data/spec/dummy/public/uploads/peoplefinder/person/image/2416/croppable_placeholder.png +0 -0
  383. data/spec/dummy/public/uploads/peoplefinder/person/image/2416/medium_placeholder.png +0 -0
  384. data/spec/dummy/public/uploads/peoplefinder/person/image/2416/placeholder.png +0 -0
  385. data/spec/dummy/public/uploads/peoplefinder/person/image/2417/croppable_placeholder.png +0 -0
  386. data/spec/dummy/public/uploads/peoplefinder/person/image/2417/medium_placeholder.png +0 -0
  387. data/spec/dummy/public/uploads/peoplefinder/person/image/2417/placeholder.png +0 -0
  388. data/spec/dummy/public/uploads/peoplefinder/person/image/2424/croppable_placeholder.png +0 -0
  389. data/spec/dummy/public/uploads/peoplefinder/person/image/2424/medium_placeholder.png +0 -0
  390. data/spec/dummy/public/uploads/peoplefinder/person/image/2424/placeholder.png +0 -0
  391. data/spec/dummy/public/uploads/peoplefinder/person/image/2435/croppable_placeholder.png +0 -0
  392. data/spec/dummy/public/uploads/peoplefinder/person/image/2435/medium_placeholder.png +0 -0
  393. data/spec/dummy/public/uploads/peoplefinder/person/image/2435/placeholder.png +0 -0
  394. data/spec/dummy/public/uploads/peoplefinder/person/image/2440/croppable_placeholder.png +0 -0
  395. data/spec/dummy/public/uploads/peoplefinder/person/image/2440/medium_placeholder.png +0 -0
  396. data/spec/dummy/public/uploads/peoplefinder/person/image/2440/placeholder.png +0 -0
  397. data/spec/dummy/public/uploads/peoplefinder/person/image/2444/croppable_placeholder.png +0 -0
  398. data/spec/dummy/public/uploads/peoplefinder/person/image/2444/medium_placeholder.png +0 -0
  399. data/spec/dummy/public/uploads/peoplefinder/person/image/2444/placeholder.png +0 -0
  400. data/spec/dummy/public/uploads/peoplefinder/person/image/2450/croppable_placeholder.png +0 -0
  401. data/spec/dummy/public/uploads/peoplefinder/person/image/2450/medium_placeholder.png +0 -0
  402. data/spec/dummy/public/uploads/peoplefinder/person/image/2450/placeholder.png +0 -0
  403. data/spec/dummy/public/uploads/peoplefinder/person/image/2454/croppable_placeholder.png +0 -0
  404. data/spec/dummy/public/uploads/peoplefinder/person/image/2454/medium_placeholder.png +0 -0
  405. data/spec/dummy/public/uploads/peoplefinder/person/image/2454/placeholder.png +0 -0
  406. data/spec/dummy/public/uploads/peoplefinder/person/image/2460/croppable_placeholder.png +0 -0
  407. data/spec/dummy/public/uploads/peoplefinder/person/image/2460/medium_placeholder.png +0 -0
  408. data/spec/dummy/public/uploads/peoplefinder/person/image/2460/placeholder.png +0 -0
  409. data/spec/dummy/public/uploads/peoplefinder/person/image/2473/croppable_placeholder.png +0 -0
  410. data/spec/dummy/public/uploads/peoplefinder/person/image/2473/medium_placeholder.png +0 -0
  411. data/spec/dummy/public/uploads/peoplefinder/person/image/2473/placeholder.png +0 -0
  412. data/spec/dummy/public/uploads/peoplefinder/person/image/2650/croppable_placeholder.png +0 -0
  413. data/spec/dummy/public/uploads/peoplefinder/person/image/2650/medium_placeholder.png +0 -0
  414. data/spec/dummy/public/uploads/peoplefinder/person/image/2650/placeholder.png +0 -0
  415. data/spec/dummy/public/uploads/peoplefinder/person/image/2657/croppable_placeholder.png +0 -0
  416. data/spec/dummy/public/uploads/peoplefinder/person/image/2657/medium_placeholder.png +0 -0
  417. data/spec/dummy/public/uploads/peoplefinder/person/image/2657/placeholder.png +0 -0
  418. data/spec/dummy/public/uploads/peoplefinder/person/image/2658/croppable_placeholder.png +0 -0
  419. data/spec/dummy/public/uploads/peoplefinder/person/image/2658/medium_placeholder.png +0 -0
  420. data/spec/dummy/public/uploads/peoplefinder/person/image/2658/placeholder.png +0 -0
  421. data/spec/dummy/public/uploads/peoplefinder/person/image/2669/croppable_placeholder.png +0 -0
  422. data/spec/dummy/public/uploads/peoplefinder/person/image/2669/medium_placeholder.png +0 -0
  423. data/spec/dummy/public/uploads/peoplefinder/person/image/2669/placeholder.png +0 -0
  424. data/spec/dummy/public/uploads/peoplefinder/person/image/2674/croppable_placeholder.png +0 -0
  425. data/spec/dummy/public/uploads/peoplefinder/person/image/2674/medium_placeholder.png +0 -0
  426. data/spec/dummy/public/uploads/peoplefinder/person/image/2674/placeholder.png +0 -0
  427. data/spec/dummy/public/uploads/peoplefinder/person/image/2684/croppable_placeholder.png +0 -0
  428. data/spec/dummy/public/uploads/peoplefinder/person/image/2684/medium_placeholder.png +0 -0
  429. data/spec/dummy/public/uploads/peoplefinder/person/image/2684/placeholder.png +0 -0
  430. data/spec/dummy/public/uploads/peoplefinder/person/image/2690/croppable_placeholder.png +0 -0
  431. data/spec/dummy/public/uploads/peoplefinder/person/image/2690/medium_placeholder.png +0 -0
  432. data/spec/dummy/public/uploads/peoplefinder/person/image/2690/placeholder.png +0 -0
  433. data/spec/dummy/public/uploads/peoplefinder/person/image/2695/croppable_placeholder.png +0 -0
  434. data/spec/dummy/public/uploads/peoplefinder/person/image/2695/medium_placeholder.png +0 -0
  435. data/spec/dummy/public/uploads/peoplefinder/person/image/2695/placeholder.png +0 -0
  436. data/spec/dummy/public/uploads/peoplefinder/person/image/2697/croppable_placeholder.png +0 -0
  437. data/spec/dummy/public/uploads/peoplefinder/person/image/2697/medium_placeholder.png +0 -0
  438. data/spec/dummy/public/uploads/peoplefinder/person/image/2697/placeholder.png +0 -0
  439. data/spec/dummy/public/uploads/peoplefinder/person/image/2705/croppable_placeholder.png +0 -0
  440. data/spec/dummy/public/uploads/peoplefinder/person/image/2705/medium_placeholder.png +0 -0
  441. data/spec/dummy/public/uploads/peoplefinder/person/image/2705/placeholder.png +0 -0
  442. data/spec/dummy/public/uploads/peoplefinder/person/image/2772/croppable_placeholder.png +0 -0
  443. data/spec/dummy/public/uploads/peoplefinder/person/image/2772/medium_placeholder.png +0 -0
  444. data/spec/dummy/public/uploads/peoplefinder/person/image/2772/placeholder.png +0 -0
  445. data/spec/dummy/public/uploads/peoplefinder/person/image/2773/croppable_placeholder.png +0 -0
  446. data/spec/dummy/public/uploads/peoplefinder/person/image/2773/medium_placeholder.png +0 -0
  447. data/spec/dummy/public/uploads/peoplefinder/person/image/2773/placeholder.png +0 -0
  448. data/spec/dummy/public/uploads/peoplefinder/person/image/2774/croppable_placeholder.png +0 -0
  449. data/spec/dummy/public/uploads/peoplefinder/person/image/2774/medium_placeholder.png +0 -0
  450. data/spec/dummy/public/uploads/peoplefinder/person/image/2774/placeholder.png +0 -0
  451. data/spec/dummy/public/uploads/peoplefinder/person/image/2775/croppable_placeholder.png +0 -0
  452. data/spec/dummy/public/uploads/peoplefinder/person/image/2775/medium_placeholder.png +0 -0
  453. data/spec/dummy/public/uploads/peoplefinder/person/image/2775/placeholder.png +0 -0
  454. data/spec/dummy/public/uploads/peoplefinder/person/image/2776/croppable_placeholder.png +0 -0
  455. data/spec/dummy/public/uploads/peoplefinder/person/image/2776/medium_placeholder.png +0 -0
  456. data/spec/dummy/public/uploads/peoplefinder/person/image/2776/placeholder.png +0 -0
  457. data/spec/dummy/public/uploads/peoplefinder/person/image/288/croppable_placeholder.png +0 -0
  458. data/spec/dummy/public/uploads/peoplefinder/person/image/288/medium_placeholder.png +0 -0
  459. data/spec/dummy/public/uploads/peoplefinder/person/image/288/placeholder.png +0 -0
  460. data/spec/dummy/public/uploads/peoplefinder/person/image/296/croppable_placeholder.png +0 -0
  461. data/spec/dummy/public/uploads/peoplefinder/person/image/296/medium_placeholder.png +0 -0
  462. data/spec/dummy/public/uploads/peoplefinder/person/image/296/placeholder.png +0 -0
  463. data/spec/dummy/public/uploads/peoplefinder/person/image/297/croppable_placeholder.png +0 -0
  464. data/spec/dummy/public/uploads/peoplefinder/person/image/297/medium_placeholder.png +0 -0
  465. data/spec/dummy/public/uploads/peoplefinder/person/image/297/placeholder.png +0 -0
  466. data/spec/dummy/public/uploads/peoplefinder/person/image/298/croppable_placeholder.png +0 -0
  467. data/spec/dummy/public/uploads/peoplefinder/person/image/298/medium_placeholder.png +0 -0
  468. data/spec/dummy/public/uploads/peoplefinder/person/image/298/placeholder.png +0 -0
  469. data/spec/dummy/public/uploads/peoplefinder/person/image/299/croppable_placeholder.png +0 -0
  470. data/spec/dummy/public/uploads/peoplefinder/person/image/299/medium_placeholder.png +0 -0
  471. data/spec/dummy/public/uploads/peoplefinder/person/image/299/placeholder.png +0 -0
  472. data/spec/dummy/public/uploads/peoplefinder/person/image/300/croppable_placeholder.png +0 -0
  473. data/spec/dummy/public/uploads/peoplefinder/person/image/300/medium_placeholder.png +0 -0
  474. data/spec/dummy/public/uploads/peoplefinder/person/image/300/placeholder.png +0 -0
  475. data/spec/dummy/public/uploads/peoplefinder/person/image/3022/croppable_placeholder.png +0 -0
  476. data/spec/dummy/public/uploads/peoplefinder/person/image/3022/medium_placeholder.png +0 -0
  477. data/spec/dummy/public/uploads/peoplefinder/person/image/3022/placeholder.png +0 -0
  478. data/spec/dummy/public/uploads/peoplefinder/person/image/3023/croppable_placeholder.png +0 -0
  479. data/spec/dummy/public/uploads/peoplefinder/person/image/3023/medium_placeholder.png +0 -0
  480. data/spec/dummy/public/uploads/peoplefinder/person/image/3023/placeholder.png +0 -0
  481. data/spec/dummy/public/uploads/peoplefinder/person/image/3028/croppable_placeholder.png +0 -0
  482. data/spec/dummy/public/uploads/peoplefinder/person/image/3028/medium_placeholder.png +0 -0
  483. data/spec/dummy/public/uploads/peoplefinder/person/image/3028/placeholder.png +0 -0
  484. data/spec/dummy/public/uploads/peoplefinder/person/image/3029/croppable_placeholder.png +0 -0
  485. data/spec/dummy/public/uploads/peoplefinder/person/image/3029/medium_placeholder.png +0 -0
  486. data/spec/dummy/public/uploads/peoplefinder/person/image/3029/placeholder.png +0 -0
  487. data/spec/dummy/public/uploads/peoplefinder/person/image/3030/croppable_placeholder.png +0 -0
  488. data/spec/dummy/public/uploads/peoplefinder/person/image/3030/medium_placeholder.png +0 -0
  489. data/spec/dummy/public/uploads/peoplefinder/person/image/3030/placeholder.png +0 -0
  490. data/spec/dummy/public/uploads/peoplefinder/person/image/3031/croppable_placeholder.png +0 -0
  491. data/spec/dummy/public/uploads/peoplefinder/person/image/3031/medium_placeholder.png +0 -0
  492. data/spec/dummy/public/uploads/peoplefinder/person/image/3031/placeholder.png +0 -0
  493. data/spec/dummy/public/uploads/peoplefinder/person/image/3032/croppable_placeholder.png +0 -0
  494. data/spec/dummy/public/uploads/peoplefinder/person/image/3032/medium_placeholder.png +0 -0
  495. data/spec/dummy/public/uploads/peoplefinder/person/image/3032/placeholder.png +0 -0
  496. data/spec/dummy/public/uploads/peoplefinder/person/image/3072/croppable_placeholder.png +0 -0
  497. data/spec/dummy/public/uploads/peoplefinder/person/image/3072/medium_placeholder.png +0 -0
  498. data/spec/dummy/public/uploads/peoplefinder/person/image/3072/placeholder.png +0 -0
  499. data/spec/dummy/public/uploads/peoplefinder/person/image/3160/croppable_placeholder.png +0 -0
  500. data/spec/dummy/public/uploads/peoplefinder/person/image/3160/medium_placeholder.png +0 -0
  501. data/spec/dummy/public/uploads/peoplefinder/person/image/3160/placeholder.png +0 -0
  502. data/spec/dummy/public/uploads/peoplefinder/person/image/3167/croppable_placeholder.png +0 -0
  503. data/spec/dummy/public/uploads/peoplefinder/person/image/3167/medium_placeholder.png +0 -0
  504. data/spec/dummy/public/uploads/peoplefinder/person/image/3167/placeholder.png +0 -0
  505. data/spec/dummy/public/uploads/peoplefinder/person/image/3169/croppable_placeholder.png +0 -0
  506. data/spec/dummy/public/uploads/peoplefinder/person/image/3169/medium_placeholder.png +0 -0
  507. data/spec/dummy/public/uploads/peoplefinder/person/image/3169/placeholder.png +0 -0
  508. data/spec/dummy/public/uploads/peoplefinder/person/image/3174/croppable_placeholder.png +0 -0
  509. data/spec/dummy/public/uploads/peoplefinder/person/image/3174/medium_placeholder.png +0 -0
  510. data/spec/dummy/public/uploads/peoplefinder/person/image/3174/placeholder.png +0 -0
  511. data/spec/dummy/public/uploads/peoplefinder/person/image/3183/croppable_placeholder.png +0 -0
  512. data/spec/dummy/public/uploads/peoplefinder/person/image/3183/medium_placeholder.png +0 -0
  513. data/spec/dummy/public/uploads/peoplefinder/person/image/3183/placeholder.png +0 -0
  514. data/spec/dummy/public/uploads/peoplefinder/person/image/3185/croppable_placeholder.png +0 -0
  515. data/spec/dummy/public/uploads/peoplefinder/person/image/3185/medium_placeholder.png +0 -0
  516. data/spec/dummy/public/uploads/peoplefinder/person/image/3185/placeholder.png +0 -0
  517. data/spec/dummy/public/uploads/peoplefinder/person/image/3189/croppable_placeholder.png +0 -0
  518. data/spec/dummy/public/uploads/peoplefinder/person/image/3189/medium_placeholder.png +0 -0
  519. data/spec/dummy/public/uploads/peoplefinder/person/image/3189/placeholder.png +0 -0
  520. data/spec/dummy/public/uploads/peoplefinder/person/image/3239/croppable_placeholder.png +0 -0
  521. data/spec/dummy/public/uploads/peoplefinder/person/image/3239/medium_placeholder.png +0 -0
  522. data/spec/dummy/public/uploads/peoplefinder/person/image/3239/placeholder.png +0 -0
  523. data/spec/dummy/public/uploads/peoplefinder/person/image/3240/croppable_placeholder.png +0 -0
  524. data/spec/dummy/public/uploads/peoplefinder/person/image/3240/medium_placeholder.png +0 -0
  525. data/spec/dummy/public/uploads/peoplefinder/person/image/3240/placeholder.png +0 -0
  526. data/spec/dummy/public/uploads/peoplefinder/person/image/3243/croppable_placeholder.png +0 -0
  527. data/spec/dummy/public/uploads/peoplefinder/person/image/3243/medium_placeholder.png +0 -0
  528. data/spec/dummy/public/uploads/peoplefinder/person/image/3243/placeholder.png +0 -0
  529. data/spec/dummy/public/uploads/peoplefinder/person/image/3251/croppable_placeholder.png +0 -0
  530. data/spec/dummy/public/uploads/peoplefinder/person/image/3251/medium_placeholder.png +0 -0
  531. data/spec/dummy/public/uploads/peoplefinder/person/image/3251/placeholder.png +0 -0
  532. data/spec/dummy/public/uploads/peoplefinder/person/image/3253/croppable_placeholder.png +0 -0
  533. data/spec/dummy/public/uploads/peoplefinder/person/image/3253/medium_placeholder.png +0 -0
  534. data/spec/dummy/public/uploads/peoplefinder/person/image/3253/placeholder.png +0 -0
  535. data/spec/dummy/public/uploads/peoplefinder/person/image/3259/croppable_placeholder.png +0 -0
  536. data/spec/dummy/public/uploads/peoplefinder/person/image/3259/medium_placeholder.png +0 -0
  537. data/spec/dummy/public/uploads/peoplefinder/person/image/3259/placeholder.png +0 -0
  538. data/spec/dummy/public/uploads/peoplefinder/person/image/3268/croppable_placeholder.png +0 -0
  539. data/spec/dummy/public/uploads/peoplefinder/person/image/3268/medium_placeholder.png +0 -0
  540. data/spec/dummy/public/uploads/peoplefinder/person/image/3268/placeholder.png +0 -0
  541. data/spec/dummy/public/uploads/peoplefinder/person/image/3274/croppable_placeholder.png +0 -0
  542. data/spec/dummy/public/uploads/peoplefinder/person/image/3274/medium_placeholder.png +0 -0
  543. data/spec/dummy/public/uploads/peoplefinder/person/image/3274/placeholder.png +0 -0
  544. data/spec/dummy/public/uploads/peoplefinder/person/image/3280/croppable_placeholder.png +0 -0
  545. data/spec/dummy/public/uploads/peoplefinder/person/image/3280/medium_placeholder.png +0 -0
  546. data/spec/dummy/public/uploads/peoplefinder/person/image/3280/placeholder.png +0 -0
  547. data/spec/dummy/public/uploads/peoplefinder/person/image/3325/croppable_placeholder.png +0 -0
  548. data/spec/dummy/public/uploads/peoplefinder/person/image/3325/medium_placeholder.png +0 -0
  549. data/spec/dummy/public/uploads/peoplefinder/person/image/3325/placeholder.png +0 -0
  550. data/spec/dummy/public/uploads/peoplefinder/person/image/3326/croppable_placeholder.png +0 -0
  551. data/spec/dummy/public/uploads/peoplefinder/person/image/3326/medium_placeholder.png +0 -0
  552. data/spec/dummy/public/uploads/peoplefinder/person/image/3326/placeholder.png +0 -0
  553. data/spec/dummy/public/uploads/peoplefinder/person/image/3327/croppable_placeholder.png +0 -0
  554. data/spec/dummy/public/uploads/peoplefinder/person/image/3327/medium_placeholder.png +0 -0
  555. data/spec/dummy/public/uploads/peoplefinder/person/image/3327/placeholder.png +0 -0
  556. data/spec/dummy/public/uploads/peoplefinder/person/image/3328/croppable_placeholder.png +0 -0
  557. data/spec/dummy/public/uploads/peoplefinder/person/image/3328/medium_placeholder.png +0 -0
  558. data/spec/dummy/public/uploads/peoplefinder/person/image/3328/placeholder.png +0 -0
  559. data/spec/dummy/public/uploads/peoplefinder/person/image/3329/croppable_placeholder.png +0 -0
  560. data/spec/dummy/public/uploads/peoplefinder/person/image/3329/medium_placeholder.png +0 -0
  561. data/spec/dummy/public/uploads/peoplefinder/person/image/3329/placeholder.png +0 -0
  562. data/spec/dummy/public/uploads/peoplefinder/person/image/3339/croppable_placeholder.png +0 -0
  563. data/spec/dummy/public/uploads/peoplefinder/person/image/3339/medium_placeholder.png +0 -0
  564. data/spec/dummy/public/uploads/peoplefinder/person/image/3339/placeholder.png +0 -0
  565. data/spec/dummy/public/uploads/peoplefinder/person/image/501/croppable_placeholder.png +0 -0
  566. data/spec/dummy/public/uploads/peoplefinder/person/image/501/medium_placeholder.png +0 -0
  567. data/spec/dummy/public/uploads/peoplefinder/person/image/501/placeholder.png +0 -0
  568. data/spec/dummy/public/uploads/peoplefinder/person/image/502/croppable_placeholder.png +0 -0
  569. data/spec/dummy/public/uploads/peoplefinder/person/image/502/medium_placeholder.png +0 -0
  570. data/spec/dummy/public/uploads/peoplefinder/person/image/502/placeholder.png +0 -0
  571. data/spec/dummy/public/uploads/peoplefinder/person/image/645/croppable_placeholder.png +0 -0
  572. data/spec/dummy/public/uploads/peoplefinder/person/image/645/medium_placeholder.png +0 -0
  573. data/spec/dummy/public/uploads/peoplefinder/person/image/645/placeholder.png +0 -0
  574. data/spec/dummy/public/uploads/peoplefinder/person/image/646/croppable_placeholder.png +0 -0
  575. data/spec/dummy/public/uploads/peoplefinder/person/image/646/medium_placeholder.png +0 -0
  576. data/spec/dummy/public/uploads/peoplefinder/person/image/646/placeholder.png +0 -0
  577. data/spec/dummy/public/uploads/peoplefinder/person/image/647/croppable_placeholder.png +0 -0
  578. data/spec/dummy/public/uploads/peoplefinder/person/image/647/medium_placeholder.png +0 -0
  579. data/spec/dummy/public/uploads/peoplefinder/person/image/647/placeholder.png +0 -0
  580. data/spec/dummy/public/uploads/peoplefinder/person/image/648/croppable_placeholder.png +0 -0
  581. data/spec/dummy/public/uploads/peoplefinder/person/image/648/medium_placeholder.png +0 -0
  582. data/spec/dummy/public/uploads/peoplefinder/person/image/648/placeholder.png +0 -0
  583. data/spec/dummy/public/uploads/peoplefinder/person/image/649/croppable_placeholder.png +0 -0
  584. data/spec/dummy/public/uploads/peoplefinder/person/image/649/medium_placeholder.png +0 -0
  585. data/spec/dummy/public/uploads/peoplefinder/person/image/649/placeholder.png +0 -0
  586. data/spec/dummy/public/uploads/peoplefinder/person/image/73/croppable_placeholder.png +0 -0
  587. data/spec/dummy/public/uploads/peoplefinder/person/image/73/medium_placeholder.png +0 -0
  588. data/spec/dummy/public/uploads/peoplefinder/person/image/73/placeholder.png +0 -0
  589. data/spec/dummy/public/uploads/peoplefinder/person/image/74/croppable_placeholder.png +0 -0
  590. data/spec/dummy/public/uploads/peoplefinder/person/image/74/medium_placeholder.png +0 -0
  591. data/spec/dummy/public/uploads/peoplefinder/person/image/74/placeholder.png +0 -0
  592. data/spec/dummy/public/uploads/peoplefinder/person/image/777/croppable_placeholder.png +0 -0
  593. data/spec/dummy/public/uploads/peoplefinder/person/image/777/medium_placeholder.png +0 -0
  594. data/spec/dummy/public/uploads/peoplefinder/person/image/777/placeholder.png +0 -0
  595. data/spec/dummy/public/uploads/peoplefinder/person/image/782/croppable_placeholder.png +0 -0
  596. data/spec/dummy/public/uploads/peoplefinder/person/image/782/medium_placeholder.png +0 -0
  597. data/spec/dummy/public/uploads/peoplefinder/person/image/782/placeholder.png +0 -0
  598. data/spec/dummy/public/uploads/peoplefinder/person/image/795/croppable_placeholder.png +0 -0
  599. data/spec/dummy/public/uploads/peoplefinder/person/image/795/medium_placeholder.png +0 -0
  600. data/spec/dummy/public/uploads/peoplefinder/person/image/795/placeholder.png +0 -0
  601. data/spec/dummy/public/uploads/peoplefinder/person/image/799/croppable_placeholder.png +0 -0
  602. data/spec/dummy/public/uploads/peoplefinder/person/image/799/medium_placeholder.png +0 -0
  603. data/spec/dummy/public/uploads/peoplefinder/person/image/799/placeholder.png +0 -0
  604. data/spec/dummy/public/uploads/peoplefinder/person/image/801/croppable_placeholder.png +0 -0
  605. data/spec/dummy/public/uploads/peoplefinder/person/image/801/medium_placeholder.png +0 -0
  606. data/spec/dummy/public/uploads/peoplefinder/person/image/801/placeholder.png +0 -0
  607. data/spec/dummy/public/uploads/peoplefinder/person/image/805/croppable_placeholder.png +0 -0
  608. data/spec/dummy/public/uploads/peoplefinder/person/image/805/medium_placeholder.png +0 -0
  609. data/spec/dummy/public/uploads/peoplefinder/person/image/805/placeholder.png +0 -0
  610. data/spec/dummy/public/uploads/peoplefinder/person/image/813/croppable_placeholder.png +0 -0
  611. data/spec/dummy/public/uploads/peoplefinder/person/image/813/medium_placeholder.png +0 -0
  612. data/spec/dummy/public/uploads/peoplefinder/person/image/813/placeholder.png +0 -0
  613. data/spec/dummy/public/uploads/peoplefinder/person/image/828/croppable_placeholder.png +0 -0
  614. data/spec/dummy/public/uploads/peoplefinder/person/image/828/medium_placeholder.png +0 -0
  615. data/spec/dummy/public/uploads/peoplefinder/person/image/828/placeholder.png +0 -0
  616. data/spec/dummy/public/uploads/peoplefinder/person/image/868/croppable_placeholder.png +0 -0
  617. data/spec/dummy/public/uploads/peoplefinder/person/image/868/medium_placeholder.png +0 -0
  618. data/spec/dummy/public/uploads/peoplefinder/person/image/868/placeholder.png +0 -0
  619. data/spec/dummy/public/uploads/peoplefinder/person/image/875/croppable_placeholder.png +0 -0
  620. data/spec/dummy/public/uploads/peoplefinder/person/image/875/medium_placeholder.png +0 -0
  621. data/spec/dummy/public/uploads/peoplefinder/person/image/875/placeholder.png +0 -0
  622. data/spec/dummy/public/uploads/peoplefinder/person/image/879/croppable_placeholder.png +0 -0
  623. data/spec/dummy/public/uploads/peoplefinder/person/image/879/medium_placeholder.png +0 -0
  624. data/spec/dummy/public/uploads/peoplefinder/person/image/879/placeholder.png +0 -0
  625. data/spec/dummy/public/uploads/peoplefinder/person/image/881/croppable_placeholder.png +0 -0
  626. data/spec/dummy/public/uploads/peoplefinder/person/image/881/medium_placeholder.png +0 -0
  627. data/spec/dummy/public/uploads/peoplefinder/person/image/881/placeholder.png +0 -0
  628. data/spec/dummy/public/uploads/peoplefinder/person/image/887/croppable_placeholder.png +0 -0
  629. data/spec/dummy/public/uploads/peoplefinder/person/image/887/medium_placeholder.png +0 -0
  630. data/spec/dummy/public/uploads/peoplefinder/person/image/887/placeholder.png +0 -0
  631. data/spec/dummy/public/uploads/peoplefinder/person/image/893/croppable_placeholder.png +0 -0
  632. data/spec/dummy/public/uploads/peoplefinder/person/image/893/medium_placeholder.png +0 -0
  633. data/spec/dummy/public/uploads/peoplefinder/person/image/893/placeholder.png +0 -0
  634. data/spec/dummy/public/uploads/peoplefinder/person/image/899/croppable_placeholder.png +0 -0
  635. data/spec/dummy/public/uploads/peoplefinder/person/image/899/medium_placeholder.png +0 -0
  636. data/spec/dummy/public/uploads/peoplefinder/person/image/899/placeholder.png +0 -0
  637. data/spec/dummy/public/uploads/peoplefinder/person/image/947/croppable_placeholder.png +0 -0
  638. data/spec/dummy/public/uploads/peoplefinder/person/image/947/medium_placeholder.png +0 -0
  639. data/spec/dummy/public/uploads/peoplefinder/person/image/947/placeholder.png +0 -0
  640. data/spec/dummy/public/uploads/peoplefinder/person/image/974/croppable_placeholder.png +0 -0
  641. data/spec/dummy/public/uploads/peoplefinder/person/image/974/medium_placeholder.png +0 -0
  642. data/spec/dummy/public/uploads/peoplefinder/person/image/974/placeholder.png +0 -0
  643. data/spec/dummy/public/uploads/peoplefinder/person/image/975/croppable_placeholder.png +0 -0
  644. data/spec/dummy/public/uploads/peoplefinder/person/image/975/medium_placeholder.png +0 -0
  645. data/spec/dummy/public/uploads/peoplefinder/person/image/975/placeholder.png +0 -0
  646. data/spec/dummy/public/uploads/peoplefinder/person/image/976/croppable_placeholder.png +0 -0
  647. data/spec/dummy/public/uploads/peoplefinder/person/image/976/medium_placeholder.png +0 -0
  648. data/spec/dummy/public/uploads/peoplefinder/person/image/976/placeholder.png +0 -0
  649. data/spec/dummy/public/uploads/peoplefinder/person/image/977/croppable_placeholder.png +0 -0
  650. data/spec/dummy/public/uploads/peoplefinder/person/image/977/medium_placeholder.png +0 -0
  651. data/spec/dummy/public/uploads/peoplefinder/person/image/977/placeholder.png +0 -0
  652. data/spec/dummy/public/uploads/peoplefinder/person/image/978/croppable_placeholder.png +0 -0
  653. data/spec/dummy/public/uploads/peoplefinder/person/image/978/medium_placeholder.png +0 -0
  654. data/spec/dummy/public/uploads/peoplefinder/person/image/978/placeholder.png +0 -0
  655. data/spec/dummy/public/uploads/tmp/1413193224-59379-1206/croppable_placeholder.png +0 -0
  656. data/spec/dummy/public/uploads/tmp/1413193224-59379-1206/medium_placeholder.png +0 -0
  657. data/spec/dummy/public/uploads/tmp/1413193224-59379-1206/placeholder.png +0 -0
  658. data/spec/dummy/public/uploads/tmp/1413193224-59379-2237/croppable_placeholder.png +0 -0
  659. data/spec/dummy/public/uploads/tmp/1413193224-59379-2237/medium_placeholder.png +0 -0
  660. data/spec/dummy/public/uploads/tmp/1413193224-59379-2237/placeholder.png +0 -0
  661. data/spec/dummy/public/uploads/tmp/1413194224-60090-8466/croppable_placeholder.png +0 -0
  662. data/spec/dummy/public/uploads/tmp/1413194224-60090-8466/medium_placeholder.png +0 -0
  663. data/spec/dummy/public/uploads/tmp/1413194224-60090-8466/placeholder.png +0 -0
  664. data/spec/dummy/public/uploads/tmp/1413194224-60090-9282/croppable_placeholder.png +0 -0
  665. data/spec/dummy/public/uploads/tmp/1413194224-60090-9282/medium_placeholder.png +0 -0
  666. data/spec/dummy/public/uploads/tmp/1413194224-60090-9282/placeholder.png +0 -0
  667. data/spec/dummy/public/uploads/tmp/1413197274-62400-1326/croppable_placeholder.png +0 -0
  668. data/spec/dummy/public/uploads/tmp/1413197274-62400-1326/medium_placeholder.png +0 -0
  669. data/spec/dummy/public/uploads/tmp/1413197274-62400-1326/placeholder.png +0 -0
  670. data/spec/dummy/public/uploads/tmp/1413197274-62400-8535/croppable_placeholder.png +0 -0
  671. data/spec/dummy/public/uploads/tmp/1413197274-62400-8535/medium_placeholder.png +0 -0
  672. data/spec/dummy/public/uploads/tmp/1413197274-62400-8535/placeholder.png +0 -0
  673. data/spec/dummy/public/uploads/tmp/1413203970-64211-4076/croppable_placeholder.png +0 -0
  674. data/spec/dummy/public/uploads/tmp/1413203970-64211-4076/medium_placeholder.png +0 -0
  675. data/spec/dummy/public/uploads/tmp/1413203970-64211-4076/placeholder.png +0 -0
  676. data/spec/dummy/public/uploads/tmp/1413203970-64211-4188/croppable_placeholder.png +0 -0
  677. data/spec/dummy/public/uploads/tmp/1413203970-64211-4188/medium_placeholder.png +0 -0
  678. data/spec/dummy/public/uploads/tmp/1413203970-64211-4188/placeholder.png +0 -0
  679. data/spec/dummy/public/uploads/tmp/1413206404-64431-3363/croppable_placeholder.png +0 -0
  680. data/spec/dummy/public/uploads/tmp/1413206404-64431-3363/medium_placeholder.png +0 -0
  681. data/spec/dummy/public/uploads/tmp/1413206404-64431-3363/placeholder.png +0 -0
  682. data/spec/dummy/public/uploads/tmp/1413206405-64431-2732/croppable_placeholder.png +0 -0
  683. data/spec/dummy/public/uploads/tmp/1413206405-64431-2732/medium_placeholder.png +0 -0
  684. data/spec/dummy/public/uploads/tmp/1413206405-64431-2732/placeholder.png +0 -0
  685. data/spec/dummy/public/uploads/tmp/1413206654-64587-5492/croppable_placeholder.png +0 -0
  686. data/spec/dummy/public/uploads/tmp/1413206654-64587-5492/medium_placeholder.png +0 -0
  687. data/spec/dummy/public/uploads/tmp/1413206654-64587-5492/placeholder.png +0 -0
  688. data/spec/dummy/public/uploads/tmp/1413206654-64587-9195/croppable_placeholder.png +0 -0
  689. data/spec/dummy/public/uploads/tmp/1413206654-64587-9195/medium_placeholder.png +0 -0
  690. data/spec/dummy/public/uploads/tmp/1413206654-64587-9195/placeholder.png +0 -0
  691. data/spec/dummy/public/uploads/tmp/1413206921-64738-3431/croppable_placeholder.png +0 -0
  692. data/spec/dummy/public/uploads/tmp/1413206921-64738-3431/medium_placeholder.png +0 -0
  693. data/spec/dummy/public/uploads/tmp/1413206921-64738-3431/placeholder.png +0 -0
  694. data/spec/dummy/public/uploads/tmp/1413206921-64738-5311/croppable_placeholder.png +0 -0
  695. data/spec/dummy/public/uploads/tmp/1413206921-64738-5311/medium_placeholder.png +0 -0
  696. data/spec/dummy/public/uploads/tmp/1413206921-64738-5311/placeholder.png +0 -0
  697. data/spec/dummy/public/uploads/tmp/1413209922-67151-6671/croppable_placeholder.png +0 -0
  698. data/spec/dummy/public/uploads/tmp/1413209922-67151-6671/medium_placeholder.png +0 -0
  699. data/spec/dummy/public/uploads/tmp/1413209922-67151-6671/placeholder.png +0 -0
  700. data/spec/dummy/public/uploads/tmp/1413209922-67151-7625/croppable_placeholder.png +0 -0
  701. data/spec/dummy/public/uploads/tmp/1413209922-67151-7625/medium_placeholder.png +0 -0
  702. data/spec/dummy/public/uploads/tmp/1413209922-67151-7625/placeholder.png +0 -0
  703. data/spec/dummy/public/uploads/tmp/1413210053-67310-4728/croppable_placeholder.png +0 -0
  704. data/spec/dummy/public/uploads/tmp/1413210053-67310-4728/medium_placeholder.png +0 -0
  705. data/spec/dummy/public/uploads/tmp/1413210053-67310-4728/placeholder.png +0 -0
  706. data/spec/dummy/public/uploads/tmp/1413210053-67310-9420/croppable_placeholder.png +0 -0
  707. data/spec/dummy/public/uploads/tmp/1413210053-67310-9420/medium_placeholder.png +0 -0
  708. data/spec/dummy/public/uploads/tmp/1413210053-67310-9420/placeholder.png +0 -0
  709. data/spec/dummy/public/uploads/tmp/1413210096-67437-0333/croppable_placeholder.png +0 -0
  710. data/spec/dummy/public/uploads/tmp/1413210096-67437-0333/medium_placeholder.png +0 -0
  711. data/spec/dummy/public/uploads/tmp/1413210096-67437-0333/placeholder.png +0 -0
  712. data/spec/dummy/public/uploads/tmp/1413210096-67437-1492/croppable_placeholder.png +0 -0
  713. data/spec/dummy/public/uploads/tmp/1413210096-67437-1492/medium_placeholder.png +0 -0
  714. data/spec/dummy/public/uploads/tmp/1413210096-67437-1492/placeholder.png +0 -0
  715. data/spec/dummy/tmp/cache/assets/test/sass/08b4118a25e6975f8fc9339cced5c9befa62cbd2/_fonts.scssc +0 -0
  716. data/spec/dummy/tmp/cache/assets/test/sass/08b4118a25e6975f8fc9339cced5c9befa62cbd2/_header.scssc +0 -0
  717. data/spec/dummy/tmp/cache/assets/test/sass/08b4118a25e6975f8fc9339cced5c9befa62cbd2/_typography.scssc +0 -0
  718. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/application.scssc +0 -0
  719. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/groups.css.scssc +0 -0
  720. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/home.css.scssc +0 -0
  721. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/org_browser.scssc +0 -0
  722. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/people.css.scssc +0 -0
  723. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/retinal_images.css.scssc +0 -0
  724. data/spec/dummy/tmp/cache/assets/test/sass/1a04bf0ccfd9568a42a325467c2edfa00a764e33/search_box.css.scssc +0 -0
  725. data/spec/dummy/tmp/cache/assets/test/sass/3aac9ef867cb362250c843e498f25987be2018b4/moj-internal-ie6.scssc +0 -0
  726. data/spec/dummy/tmp/cache/assets/test/sass/3aac9ef867cb362250c843e498f25987be2018b4/moj-internal-ie7.scssc +0 -0
  727. data/spec/dummy/tmp/cache/assets/test/sass/3aac9ef867cb362250c843e498f25987be2018b4/moj-internal-ie8.scssc +0 -0
  728. data/spec/dummy/tmp/cache/assets/test/sass/3aac9ef867cb362250c843e498f25987be2018b4/moj-internal.scssc +0 -0
  729. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/application.scssc +0 -0
  730. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/groups.css.scssc +0 -0
  731. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/home.css.scssc +0 -0
  732. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/org_browser.scssc +0 -0
  733. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/people.css.scssc +0 -0
  734. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/retinal_images.css.scssc +0 -0
  735. data/spec/dummy/tmp/cache/assets/test/sass/573fd3a56299fe1a7cd72e27d78617c19d2cfae8/search_box.css.scssc +0 -0
  736. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_colours.scssc +0 -0
  737. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_conditionals.scssc +0 -0
  738. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_css3.scssc +0 -0
  739. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_device-pixels.scssc +0 -0
  740. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_font_stack.scssc +0 -0
  741. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_grid_layout.scssc +0 -0
  742. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_measurements.scssc +0 -0
  743. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_shims.scssc +0 -0
  744. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_typography.scssc +0 -0
  745. data/spec/dummy/tmp/cache/assets/test/sass/64f71e5fc00a3721697abab5633e00949c98368c/_url-helpers.scssc +0 -0
  746. data/spec/dummy/tmp/cache/assets/test/sass/7893a0e536023ebf230e8dd339ccbdc4d676c7f8/govuk-template.css.erbc +0 -0
  747. data/spec/dummy/tmp/cache/assets/test/sass/91736ae26e9b34fca93d54378b156562506060ff/_form-chunky-labels.scssc +0 -0
  748. data/spec/dummy/tmp/cache/assets/test/sass/91736ae26e9b34fca93d54378b156562506060ff/_form-date-of-birth.scssc +0 -0
  749. data/spec/dummy/tmp/cache/assets/test/sass/91736ae26e9b34fca93d54378b156562506060ff/_form-validation.scssc +0 -0
  750. data/spec/dummy/tmp/cache/assets/test/sass/9228d55cc5b94ecc40c0fa0e38f89c57d1b283db/_form-chunky-labels.scssc +0 -0
  751. data/spec/dummy/tmp/cache/assets/test/sass/9228d55cc5b94ecc40c0fa0e38f89c57d1b283db/_form-date-of-birth.scssc +0 -0
  752. data/spec/dummy/tmp/cache/assets/test/sass/9228d55cc5b94ecc40c0fa0e38f89c57d1b283db/_form-validation.scssc +0 -0
  753. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_buttons.scssc +0 -0
  754. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_colours.scssc +0 -0
  755. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_forms.scssc +0 -0
  756. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_helpers.scssc +0 -0
  757. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_icons.scssc +0 -0
  758. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_layout.scssc +0 -0
  759. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_lists.scssc +0 -0
  760. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_panels.scssc +0 -0
  761. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_reset.scssc +0 -0
  762. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_shame.scssc +0 -0
  763. data/spec/dummy/tmp/cache/assets/test/sass/e53078d80f06c87161cb4e26c2c47df8a17b5f71/_tables.scssc +0 -0
  764. data/spec/dummy/tmp/cache/assets/test/sass/ebd5a84b3b0fdaa860385ac276a86b0910509e3e/_alpha-beta.scssc +0 -0
  765. data/spec/dummy/tmp/cache/assets/test/sass/ebd5a84b3b0fdaa860385ac276a86b0910509e3e/_buttons.scssc +0 -0
  766. data/spec/dummy/tmp/cache/assets/test/sass/f2ef44020035e15a1391b9df3bdac46c10f2f10a/moj-internal-ie6.scssc +0 -0
  767. data/spec/dummy/tmp/cache/assets/test/sass/f2ef44020035e15a1391b9df3bdac46c10f2f10a/moj-internal-ie7.scssc +0 -0
  768. data/spec/dummy/tmp/cache/assets/test/sass/f2ef44020035e15a1391b9df3bdac46c10f2f10a/moj-internal-ie8.scssc +0 -0
  769. data/spec/dummy/tmp/cache/assets/test/sass/f2ef44020035e15a1391b9df3bdac46c10f2f10a/moj-internal.scssc +0 -0
  770. data/spec/dummy/tmp/cache/assets/test/sass/f449073c6ac2fbc4e5aeed6ce42681366235449c/_fonts.scssc +0 -0
  771. data/spec/dummy/tmp/cache/assets/test/sass/f449073c6ac2fbc4e5aeed6ce42681366235449c/_header.scssc +0 -0
  772. data/spec/dummy/tmp/cache/assets/test/sass/f449073c6ac2fbc4e5aeed6ce42681366235449c/_typography.scssc +0 -0
  773. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_buttons.scssc +0 -0
  774. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_colours.scssc +0 -0
  775. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_forms.scssc +0 -0
  776. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_helpers.scssc +0 -0
  777. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_icons.scssc +0 -0
  778. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_layout.scssc +0 -0
  779. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_lists.scssc +0 -0
  780. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_panels.scssc +0 -0
  781. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_reset.scssc +0 -0
  782. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_shame.scssc +0 -0
  783. data/spec/dummy/tmp/cache/assets/test/sass/fd246bce079c53dd04cad8f8da6e1a17facda19f/_tables.scssc +0 -0
  784. data/spec/dummy/tmp/cache/assets/test/sprockets/00d7e39ffde4c85f30fc9293578ebf3e +0 -0
  785. data/spec/dummy/tmp/cache/assets/test/sprockets/018745c7c5b00d3e4e5f24380792c0b6 +0 -0
  786. data/spec/dummy/tmp/cache/assets/test/sprockets/0201100c5b2be28793c903396f26194c +0 -0
  787. data/spec/dummy/tmp/cache/assets/test/sprockets/0695929b4b263645ff54e679d4a09f65 +0 -0
  788. data/spec/dummy/tmp/cache/assets/test/sprockets/0726603694ea77ba64086ada9c4e9401 +0 -0
  789. data/spec/dummy/tmp/cache/assets/test/sprockets/088b7b6647d27eb119ebf7edaaec96ba +0 -0
  790. data/spec/dummy/tmp/cache/assets/test/sprockets/08ed9700c497230e7f99a63a3e25ff83 +0 -0
  791. data/spec/dummy/tmp/cache/assets/test/sprockets/0ab4a289b6792eef65504e2b4b4dbd85 +0 -0
  792. data/spec/dummy/tmp/cache/assets/test/sprockets/11c00cf84de2fa3556f9d1e4f4d2a395 +0 -0
  793. data/spec/dummy/tmp/cache/assets/test/sprockets/149554f46873efcc2280a1e838f42e04 +0 -0
  794. data/spec/dummy/tmp/cache/assets/test/sprockets/159a7cc83930f7e4be44df3c3fb3a6e8 +0 -0
  795. data/spec/dummy/tmp/cache/assets/test/sprockets/16a3e70b07b5576e09476970edcf76b1 +0 -0
  796. data/spec/dummy/tmp/cache/assets/test/sprockets/1d2924bba7e2b69886f8435f614bcb5f +0 -0
  797. data/spec/dummy/tmp/cache/assets/test/sprockets/20161b4b3f1b59348daf66e780c64936 +0 -0
  798. data/spec/dummy/tmp/cache/assets/test/sprockets/218083466d375d70ca3411fc412180e0 +0 -0
  799. data/spec/dummy/tmp/cache/assets/test/sprockets/21b71c72cc85c211f2efff408ba1f107 +0 -0
  800. data/spec/dummy/tmp/cache/assets/test/sprockets/233f443859d8277e22c4c1685e2fc9e5 +0 -0
  801. data/spec/dummy/tmp/cache/assets/test/sprockets/236356c44ca2c3f84f126f0ec07b6f8e +0 -0
  802. data/spec/dummy/tmp/cache/assets/test/sprockets/276a87f3e560e622c1cb5d28586c6147 +0 -0
  803. data/spec/dummy/tmp/cache/assets/test/sprockets/2d985bcc133caf9d414cfbac4a4d1481 +0 -0
  804. data/spec/dummy/tmp/cache/assets/test/sprockets/2dc3b8d50280d2e3e40f9d2d14e86f98 +0 -0
  805. data/spec/dummy/tmp/cache/assets/test/sprockets/2eff5197f1af940ea1463046f7827d6c +0 -0
  806. data/spec/dummy/tmp/cache/assets/test/sprockets/3038e4418179803f0cbd31b88a1c3e5e +0 -0
  807. data/spec/dummy/tmp/cache/assets/test/sprockets/32140510484878a779629339084f5efa +0 -0
  808. data/spec/dummy/tmp/cache/assets/test/sprockets/32956a54936dbd91eae94577bf188bc6 +0 -0
  809. data/spec/dummy/tmp/cache/assets/test/sprockets/32af796bc4243428b00d0b0dd06a86b7 +0 -0
  810. data/spec/dummy/tmp/cache/assets/test/sprockets/35aad21061e0ac8319955b2884cf9b56 +0 -0
  811. data/spec/dummy/tmp/cache/assets/test/sprockets/37153627c22e2ba6e0e3ec246b3f6f3f +0 -0
  812. data/spec/dummy/tmp/cache/assets/test/sprockets/39b04e5aa2921689880f876c18809a0f +0 -0
  813. data/spec/dummy/tmp/cache/assets/test/sprockets/3a2144b4cbd236ed3eb974efe0d69c44 +0 -0
  814. data/spec/dummy/tmp/cache/assets/test/sprockets/3da3597c5b28eea069abac761762d110 +0 -0
  815. data/spec/dummy/tmp/cache/assets/test/sprockets/3fd9a2212fedb465f38b54136db969db +0 -0
  816. data/spec/dummy/tmp/cache/assets/test/sprockets/415ddf448463b284a957a6e4ab5b512c +0 -0
  817. data/spec/dummy/tmp/cache/assets/test/sprockets/424ed3ec568392c7e189d347a1c35a04 +0 -0
  818. data/spec/dummy/tmp/cache/assets/test/sprockets/4311c213d2994b4492afad26f3d8a922 +0 -0
  819. data/spec/dummy/tmp/cache/assets/test/sprockets/44a45bbdccc9065d6a055dfecc3f1086 +0 -0
  820. data/spec/dummy/tmp/cache/assets/test/sprockets/46b977eb6e25e14a48e5eff34e96274f +0 -0
  821. data/spec/dummy/tmp/cache/assets/test/sprockets/473013edfecc09b7810e813c3aa6d943 +0 -0
  822. data/spec/dummy/tmp/cache/assets/test/sprockets/487eb02b567f24f50156d2c54c3f388d +0 -0
  823. data/spec/dummy/tmp/cache/assets/test/sprockets/4a22e1b7cd2cdb05b33aba9f74d48cd8 +0 -0
  824. data/spec/dummy/tmp/cache/assets/test/sprockets/4be6eaa0578ea7b644821d44dc4b0906 +0 -0
  825. data/spec/dummy/tmp/cache/assets/test/sprockets/4bf161a0efecd0f14091619a0197b9c4 +0 -0
  826. data/spec/dummy/tmp/cache/assets/test/sprockets/51e14fdda36dd4251af7e4ede803a24e +0 -0
  827. data/spec/dummy/tmp/cache/assets/test/sprockets/547cd92fdbdc7af2927de329e878a887 +0 -0
  828. data/spec/dummy/tmp/cache/assets/test/sprockets/555050c5d873443f775911ec453d5323 +0 -0
  829. data/spec/dummy/tmp/cache/assets/test/sprockets/55aab9d282fe58d613b2f27be7ee3d89 +0 -0
  830. data/spec/dummy/tmp/cache/assets/test/sprockets/567153b218176c95ccb33f2599db1700 +0 -0
  831. data/spec/dummy/tmp/cache/assets/test/sprockets/5afdd9a43d645e6f5187cd42198068a5 +0 -0
  832. data/spec/dummy/tmp/cache/assets/test/sprockets/5d56aa9b6575efa1dc5372e4f34677ee +0 -0
  833. data/spec/dummy/tmp/cache/assets/test/sprockets/614bd04411e8598dfe059b671d5d76ab +0 -0
  834. data/spec/dummy/tmp/cache/assets/test/sprockets/61e0bdef78a444a0ca3bbdd4196d623e +0 -0
  835. data/spec/dummy/tmp/cache/assets/test/sprockets/628cc9fd8949ce4ec5fdbb29098d3999 +0 -0
  836. data/spec/dummy/tmp/cache/assets/test/sprockets/65e453fef17f982a87b7ca90830b231b +0 -0
  837. data/spec/dummy/tmp/cache/assets/test/sprockets/67d274ccd80a3a02306e324a41fad6b2 +0 -0
  838. data/spec/dummy/tmp/cache/assets/test/sprockets/686cc225463313b106b3b529ebcc7d8f +0 -0
  839. data/spec/dummy/tmp/cache/assets/test/sprockets/6918740b48c7340bf9a7cbeed5a92bf6 +0 -0
  840. data/spec/dummy/tmp/cache/assets/test/sprockets/6ae4daecfbe972e68d4d4d900e0bae2e +0 -0
  841. data/spec/dummy/tmp/cache/assets/test/sprockets/6bc3fd931f11afb51fce9182f07febe6 +0 -0
  842. data/spec/dummy/tmp/cache/assets/test/sprockets/7012144b92081cfd9895d90624a98a3b +0 -0
  843. data/spec/dummy/tmp/cache/assets/test/sprockets/71d80a4f52e62af70b1fbedd48eac07c +0 -0
  844. data/spec/dummy/tmp/cache/assets/test/sprockets/750bc2bc52390dbbb9ad8d0b7764b67e +0 -0
  845. data/spec/dummy/tmp/cache/assets/test/sprockets/75156dc7683a86da6296efaa87a81725 +0 -0
  846. data/spec/dummy/tmp/cache/assets/test/sprockets/76947b1e2e61246f44f019dd12ae07f4 +0 -0
  847. data/spec/dummy/tmp/cache/assets/test/sprockets/779d6021677114642d3865bc5dc505ac +0 -0
  848. data/spec/dummy/tmp/cache/assets/test/sprockets/78ed6b1222170ea75f3e479c405dcdd2 +0 -0
  849. data/spec/dummy/tmp/cache/assets/test/sprockets/7b0d7f08018e8d5699748f5bcb1dbd8f +0 -0
  850. data/spec/dummy/tmp/cache/assets/test/sprockets/7bd907a96b0cfe128dac367bed07c7f1 +0 -0
  851. data/spec/dummy/tmp/cache/assets/test/sprockets/7ec24a38c7b5a5b984cae10340102f98 +0 -0
  852. data/spec/dummy/tmp/cache/assets/test/sprockets/7ec354a976af0cf6cc23bb495bf24e00 +0 -0
  853. data/spec/dummy/tmp/cache/assets/test/sprockets/8073186e0d3457d2167be20947258e25 +0 -0
  854. data/spec/dummy/tmp/cache/assets/test/sprockets/8429ffa8f5ddca8bfe355c9636e92fcb +0 -0
  855. data/spec/dummy/tmp/cache/assets/test/sprockets/846ccfea78778290be8af0d3c364ea27 +0 -0
  856. data/spec/dummy/tmp/cache/assets/test/sprockets/86094080bfebffe9a08292f6984618bf +0 -0
  857. data/spec/dummy/tmp/cache/assets/test/sprockets/87265c75be54e62e95ed1ef9e83a9bab +0 -0
  858. data/spec/dummy/tmp/cache/assets/test/sprockets/87e45e8066c5d51f85c12c7842177c36 +0 -0
  859. data/spec/dummy/tmp/cache/assets/test/sprockets/88600a149824e71a3822f72bef16f5eb +0 -0
  860. data/spec/dummy/tmp/cache/assets/test/sprockets/8ac8033e4cf908aa13b87d439bf79777 +0 -0
  861. data/spec/dummy/tmp/cache/assets/test/sprockets/9169fa50d693672a124ed4fa0727591f +0 -0
  862. data/spec/dummy/tmp/cache/assets/test/sprockets/92c74fa0bfb83a7c1c0c8d776ceefc7a +0 -0
  863. data/spec/dummy/tmp/cache/assets/test/sprockets/9413085b56f73ebb643ba7665cec2363 +0 -0
  864. data/spec/dummy/tmp/cache/assets/test/sprockets/9629c6e01d5915fabee176c4e7e6b3f7 +0 -0
  865. data/spec/dummy/tmp/cache/assets/test/sprockets/966ded038e10005a1b708cb4bfc3a1b6 +0 -0
  866. data/spec/dummy/tmp/cache/assets/test/sprockets/96b49089d04939e0662d377aff5cf75b +0 -0
  867. data/spec/dummy/tmp/cache/assets/test/sprockets/96bccfeee92240f3464d7c4628bb2453 +0 -0
  868. data/spec/dummy/tmp/cache/assets/test/sprockets/9a12eb29cb69414de5d4534c97c4d7e4 +0 -0
  869. data/spec/dummy/tmp/cache/assets/test/sprockets/9ee157aaa2c2f06f7f2790caf4b5b116 +0 -0
  870. data/spec/dummy/tmp/cache/assets/test/sprockets/9f47b08ab9d9a44c2ac31e23ba087b12 +0 -0
  871. data/spec/dummy/tmp/cache/assets/test/sprockets/9f88e7721781d6d7f10850b1ffe64d93 +0 -0
  872. data/spec/dummy/tmp/cache/assets/test/sprockets/a50ba530db1c4e421336c353b6cf3e4c +0 -0
  873. data/spec/dummy/tmp/cache/assets/test/sprockets/a71c89d1f8969099ece3e97f570fd6b5 +0 -0
  874. data/spec/dummy/tmp/cache/assets/test/sprockets/a9abb527b4316046dad5dd76adfc52cf +0 -0
  875. data/spec/dummy/tmp/cache/assets/test/sprockets/aada4e1ea7e436947cf8721cbc221e7e +0 -0
  876. data/spec/dummy/tmp/cache/assets/test/sprockets/ab081a1203b966dffb7469060cb55592 +0 -0
  877. data/spec/dummy/tmp/cache/assets/test/sprockets/af3badba5fc2991974d9b7a0e8016396 +0 -0
  878. data/spec/dummy/tmp/cache/assets/test/sprockets/b0fbb8ccd136de5ee5fac94871bde9cf +0 -0
  879. data/spec/dummy/tmp/cache/assets/test/sprockets/b2ac09742b270b2245ba27591aff8710 +0 -0
  880. data/spec/dummy/tmp/cache/assets/test/sprockets/b2c385d54050f8119ce6049a4e6e1dd4 +0 -0
  881. data/spec/dummy/tmp/cache/assets/test/sprockets/b30759218af069022b33f4b15b13a2fe +0 -0
  882. data/spec/dummy/tmp/cache/assets/test/sprockets/b34f531f020d8c5d6820ebbe7f5aec3c +0 -0
  883. data/spec/dummy/tmp/cache/assets/test/sprockets/b644fb3f1d934594edb7c2271be70d14 +0 -0
  884. data/spec/dummy/tmp/cache/assets/test/sprockets/b9604d88f02cef77e4cb5a84686db644 +0 -0
  885. data/spec/dummy/tmp/cache/assets/test/sprockets/ba5500bab1f1943adc52289b6e934606 +0 -0
  886. data/spec/dummy/tmp/cache/assets/test/sprockets/ba59a9476970611160884d9728dd238b +0 -0
  887. data/spec/dummy/tmp/cache/assets/test/sprockets/bbf932c9d723718c5d06e359ce569598 +0 -0
  888. data/spec/dummy/tmp/cache/assets/test/sprockets/bc5c05efbe4b359f613f56ea6aa6d2dc +0 -0
  889. data/spec/dummy/tmp/cache/assets/test/sprockets/bc9407b9bd505544c49fd21fd859dbc1 +0 -0
  890. data/spec/dummy/tmp/cache/assets/test/sprockets/bd9c12ce42e134e64678673835411215 +0 -0
  891. data/spec/dummy/tmp/cache/assets/test/sprockets/bf3c11a85c260471786c4662a5d76451 +0 -0
  892. data/spec/dummy/tmp/cache/assets/test/sprockets/c1191d8df4a01c98401800dba137f363 +0 -0
  893. data/spec/dummy/tmp/cache/assets/test/sprockets/c2216e1eca68a225b5952a0e82642fa2 +0 -0
  894. data/spec/dummy/tmp/cache/assets/test/sprockets/c54181ae85e0fd80eddf3fa2c06379a1 +0 -0
  895. data/spec/dummy/tmp/cache/assets/test/sprockets/c67450bc47d9924215a66bb1d411a442 +0 -0
  896. data/spec/dummy/tmp/cache/assets/test/sprockets/c709463f728a33722ee26328524fdc7a +0 -0
  897. data/spec/dummy/tmp/cache/assets/test/sprockets/ca900f7c39b531b5f4989d68d536902a +0 -0
  898. data/spec/dummy/tmp/cache/assets/test/sprockets/cbd1c235e8669c2b9c4afeb46b9de9f0 +0 -0
  899. data/spec/dummy/tmp/cache/assets/test/sprockets/cc20e49b6d91aa97f34ceea7182e90a1 +0 -0
  900. data/spec/dummy/tmp/cache/assets/test/sprockets/cd12108297b82e506fc5a47fbd22f5c1 +0 -0
  901. data/spec/dummy/tmp/cache/assets/test/sprockets/ce24e04a11c3fe71fbb55c559e125e33 +0 -0
  902. data/spec/dummy/tmp/cache/assets/test/sprockets/cebf02de4411effbc21665b00e9c5c47 +0 -0
  903. data/spec/dummy/tmp/cache/assets/test/sprockets/cf9004a25cd78ab08e2db97366915574 +0 -0
  904. data/spec/dummy/tmp/cache/assets/test/sprockets/d546d9adc5b09cb220687228b2462ba2 +0 -0
  905. data/spec/dummy/tmp/cache/assets/test/sprockets/d6d3e32c1b849a0f626cf784d3e98db2 +0 -0
  906. data/spec/dummy/tmp/cache/assets/test/sprockets/d6db5e4f6ba66daaccc028d0e17a1d81 +0 -0
  907. data/spec/dummy/tmp/cache/assets/test/sprockets/d734711596a5f99bd7dcdc909d875484 +0 -0
  908. data/spec/dummy/tmp/cache/assets/test/sprockets/d7c54150387172d3770ed962df6d90c4 +0 -0
  909. data/spec/dummy/tmp/cache/assets/test/sprockets/d909a2f81d6679270e2f03bf0127bd42 +0 -0
  910. data/spec/dummy/tmp/cache/assets/test/sprockets/da89c65e2337bfd54e22665361135b80 +0 -0
  911. data/spec/dummy/tmp/cache/assets/test/sprockets/dab77afea33859601aceb919e3993d65 +0 -0
  912. data/spec/dummy/tmp/cache/assets/test/sprockets/dc990ab5fc72ad7505501e2ad732a4ca +0 -0
  913. data/spec/dummy/tmp/cache/assets/test/sprockets/e47a2254d8cd70d26b4df63bca9458cf +0 -0
  914. data/spec/dummy/tmp/cache/assets/test/sprockets/e9d09e544e82ac3fb94b39b10202807e +0 -0
  915. data/spec/dummy/tmp/cache/assets/test/sprockets/ea9be8e68964381d1e863972e383726e +0 -0
  916. data/spec/dummy/tmp/cache/assets/test/sprockets/eb3112f8ef183607c504cd1edf1c1213 +0 -0
  917. data/spec/dummy/tmp/cache/assets/test/sprockets/ed65a02b89d49d6b1d33fea72e1097d6 +0 -0
  918. data/spec/dummy/tmp/cache/assets/test/sprockets/eedc311e1bd812fd7c4066087a286301 +0 -0
  919. data/spec/dummy/tmp/cache/assets/test/sprockets/ef73b0d4ea9329020b34858695ce3900 +0 -0
  920. data/spec/dummy/tmp/cache/assets/test/sprockets/f05a23a4cfb850852ac9c6a1a8366a0c +0 -0
  921. data/spec/dummy/tmp/cache/assets/test/sprockets/f1243ac39913862f632fd9f12a51369f +0 -0
  922. data/spec/dummy/tmp/cache/assets/test/sprockets/f73231b021f1ce12aca762c00921ca23 +0 -0
  923. data/spec/dummy/tmp/cache/assets/test/sprockets/f8159e64ac98a671b65ffa2d63f57d7c +0 -0
  924. data/spec/dummy/tmp/cache/assets/test/sprockets/f818d36dc3cadf632527ae9387a4c8ca +0 -0
  925. data/spec/dummy/tmp/cache/assets/test/sprockets/fa400befce2f9154111bccf924e66248 +0 -0
  926. data/spec/dummy/tmp/cache/assets/test/sprockets/fa98d7d0880128444e5fe402794ee5b7 +0 -0
  927. data/spec/dummy/tmp/cache/assets/test/sprockets/fb65772220e27426e2aa0940fae74626 +0 -0
  928. data/spec/dummy/tmp/cache/assets/test/sprockets/fb96c50daa657b0ecb946304fe995be7 +0 -0
  929. data/spec/dummy/tmp/cache/assets/test/sprockets/ff6137f4bf4e05260b5bcd4b06221227 +0 -0
  930. data/spec/factories.rb +35 -0
  931. data/spec/features/audit_trail_spec.rb +161 -0
  932. data/spec/features/group_browsing_spec.rb +131 -0
  933. data/spec/features/group_maintenance_spec.rb +187 -0
  934. data/spec/features/home_spec.rb +17 -0
  935. data/spec/features/omni_auth_authentication_spec.rb +69 -0
  936. data/spec/features/person_browsing_spec.rb +53 -0
  937. data/spec/features/person_edit_notifications_spec.rb +193 -0
  938. data/spec/features/person_maintenance_spec.rb +251 -0
  939. data/spec/features/person_membership_spec.rb +91 -0
  940. data/spec/features/regression_spec.rb +13 -0
  941. data/spec/features/search_spec.rb +28 -0
  942. data/spec/features/token_authentication_spec.rb +65 -0
  943. data/spec/fixtures/placeholder.png +0 -0
  944. data/spec/helpers/peoplefinder/application_helper_spec.rb +46 -0
  945. data/spec/helpers/peoplefinder/people_helper_spec.rb +23 -0
  946. data/spec/javascripts/fixtures/data.html.haml +1 -0
  947. data/spec/javascripts/fixtures/ga.html.haml +11 -0
  948. data/spec/javascripts/org_tree_spec.js +59 -0
  949. data/spec/javascripts/spec_helper.js +42 -0
  950. data/spec/mailers/peoplefinder/reminder_mailer_spec.rb +66 -0
  951. data/spec/models/peoplefinder/concerns/authentication_spec.rb +63 -0
  952. data/spec/models/peoplefinder/concerns/completion_spec.rb +85 -0
  953. data/spec/models/peoplefinder/concerns/searchable_spec.rb +53 -0
  954. data/spec/models/peoplefinder/concerns/work_days_spec.rb +28 -0
  955. data/spec/models/peoplefinder/email_address_spec.rb +78 -0
  956. data/spec/models/peoplefinder/group_hierarchy_spec.rb +75 -0
  957. data/spec/models/peoplefinder/group_spec.rb +197 -0
  958. data/spec/models/peoplefinder/information_request_spec.rb +8 -0
  959. data/spec/models/peoplefinder/membership_spec.rb +12 -0
  960. data/spec/models/peoplefinder/person_spec.rb +153 -0
  961. data/spec/models/peoplefinder/reported_profile_spec.rb +11 -0
  962. data/spec/models/peoplefinder/tokens_spec.rb +40 -0
  963. data/spec/rails_helper.rb +62 -0
  964. data/spec/spec_helper.rb +102 -0
  965. data/spec/support/carrierwave.rb +13 -0
  966. data/spec/support/email.rb +19 -0
  967. data/spec/support/login.rb +38 -0
  968. data/spec/support/org_browser.rb +7 -0
  969. data/spec/support/profile.rb +60 -0
  970. data/spec/support/search.rb +15 -0
  971. data/spec/teaspoon_env.rb +155 -0
  972. data/spec/uploaders/peoplefinder/image_uploader_spec.rb +27 -0
  973. data/vendor/assets/components/Jcrop/MIT-LICENSE.txt +22 -0
  974. data/vendor/assets/components/Jcrop/README.md +66 -0
  975. data/vendor/assets/components/Jcrop/css/Jcrop.gif +0 -0
  976. data/vendor/assets/components/Jcrop/css/jquery.Jcrop.css +165 -0
  977. data/vendor/assets/components/Jcrop/css/jquery.Jcrop.min.css +29 -0
  978. data/vendor/assets/components/Jcrop/demos/crop.php +123 -0
  979. data/vendor/assets/components/Jcrop/demos/demo_files/demos.css +149 -0
  980. data/vendor/assets/components/Jcrop/demos/demo_files/main.css +4996 -0
  981. data/vendor/assets/components/Jcrop/demos/demo_files/pool.jpg +0 -0
  982. data/vendor/assets/components/Jcrop/demos/demo_files/sago.jpg +0 -0
  983. data/vendor/assets/components/Jcrop/demos/demo_files/sagomod.jpg +0 -0
  984. data/vendor/assets/components/Jcrop/demos/demo_files/sagomod.png +0 -0
  985. data/vendor/assets/components/Jcrop/demos/non-image.html +86 -0
  986. data/vendor/assets/components/Jcrop/demos/styling.html +118 -0
  987. data/vendor/assets/components/Jcrop/demos/tutorial1.html +65 -0
  988. data/vendor/assets/components/Jcrop/demos/tutorial2.html +123 -0
  989. data/vendor/assets/components/Jcrop/demos/tutorial3.html +151 -0
  990. data/vendor/assets/components/Jcrop/demos/tutorial4.html +227 -0
  991. data/vendor/assets/components/Jcrop/demos/tutorial5.html +268 -0
  992. data/vendor/assets/components/Jcrop/index.html +84 -0
  993. data/vendor/assets/components/Jcrop/js/jquery.Jcrop.js +1694 -0
  994. data/vendor/assets/components/Jcrop/js/jquery.Jcrop.min.js +22 -0
  995. data/vendor/assets/components/Jcrop/js/jquery.color.js +661 -0
  996. data/vendor/assets/components/Jcrop/js/jquery.min.js +4 -0
  997. data/vendor/assets/components/angular-animate/README.md +54 -0
  998. data/vendor/assets/components/angular-animate/angular-animate.js +1689 -0
  999. data/vendor/assets/components/angular-animate/angular-animate.min.js +28 -0
  1000. data/vendor/assets/components/angular-animate/angular-animate.min.js.map +8 -0
  1001. data/vendor/assets/components/angular-animate/bower.json +8 -0
  1002. data/vendor/assets/components/angular/README.md +48 -0
  1003. data/vendor/assets/components/angular/angular-csp.css +24 -0
  1004. data/vendor/assets/components/angular/angular.js +21883 -0
  1005. data/vendor/assets/components/angular/angular.min.js +214 -0
  1006. data/vendor/assets/components/angular/angular.min.js.gzip +0 -0
  1007. data/vendor/assets/components/angular/angular.min.js.map +8 -0
  1008. data/vendor/assets/components/angular/bower.json +7 -0
  1009. metadata +2489 -0
@@ -0,0 +1,4 @@
1
+ /*! jQuery v1.9.0 | (c) 2005, 2012 jQuery Foundation, Inc. | jquery.org/license */(function(e,t){"use strict";function n(e){var t=e.length,n=st.type(e);return st.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}function r(e){var t=Tt[e]={};return st.each(e.match(lt)||[],function(e,n){t[n]=!0}),t}function i(e,n,r,i){if(st.acceptData(e)){var o,a,s=st.expando,u="string"==typeof n,l=e.nodeType,c=l?st.cache:e,f=l?e[s]:e[s]&&s;if(f&&c[f]&&(i||c[f].data)||!u||r!==t)return f||(l?e[s]=f=K.pop()||st.guid++:f=s),c[f]||(c[f]={},l||(c[f].toJSON=st.noop)),("object"==typeof n||"function"==typeof n)&&(i?c[f]=st.extend(c[f],n):c[f].data=st.extend(c[f].data,n)),o=c[f],i||(o.data||(o.data={}),o=o.data),r!==t&&(o[st.camelCase(n)]=r),u?(a=o[n],null==a&&(a=o[st.camelCase(n)])):a=o,a}}function o(e,t,n){if(st.acceptData(e)){var r,i,o,a=e.nodeType,u=a?st.cache:e,l=a?e[st.expando]:st.expando;if(u[l]){if(t&&(r=n?u[l]:u[l].data)){st.isArray(t)?t=t.concat(st.map(t,st.camelCase)):t in r?t=[t]:(t=st.camelCase(t),t=t in r?[t]:t.split(" "));for(i=0,o=t.length;o>i;i++)delete r[t[i]];if(!(n?s:st.isEmptyObject)(r))return}(n||(delete u[l].data,s(u[l])))&&(a?st.cleanData([e],!0):st.support.deleteExpando||u!=u.window?delete u[l]:u[l]=null)}}}function a(e,n,r){if(r===t&&1===e.nodeType){var i="data-"+n.replace(Nt,"-$1").toLowerCase();if(r=e.getAttribute(i),"string"==typeof r){try{r="true"===r?!0:"false"===r?!1:"null"===r?null:+r+""===r?+r:wt.test(r)?st.parseJSON(r):r}catch(o){}st.data(e,n,r)}else r=t}return r}function s(e){var t;for(t in e)if(("data"!==t||!st.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function u(){return!0}function l(){return!1}function c(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function f(e,t,n){if(t=t||0,st.isFunction(t))return st.grep(e,function(e,r){var i=!!t.call(e,r,e);return i===n});if(t.nodeType)return st.grep(e,function(e){return e===t===n});if("string"==typeof t){var r=st.grep(e,function(e){return 1===e.nodeType});if(Wt.test(t))return st.filter(t,r,!n);t=st.filter(t,r)}return st.grep(e,function(e){return st.inArray(e,t)>=0===n})}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function d(e,t){return e.getElementsByTagName(t)[0]||e.appendChild(e.ownerDocument.createElement(t))}function h(e){var t=e.getAttributeNode("type");return e.type=(t&&t.specified)+"/"+e.type,e}function g(e){var t=nn.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)st._data(n,"globalEval",!t||st._data(t[r],"globalEval"))}function y(e,t){if(1===t.nodeType&&st.hasData(e)){var n,r,i,o=st._data(e),a=st._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)st.event.add(t,n,s[n][r])}a.data&&(a.data=st.extend({},a.data))}}function v(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!st.support.noCloneEvent&&t[st.expando]){r=st._data(t);for(i in r.events)st.removeEvent(t,i,r.handle);t.removeAttribute(st.expando)}"script"===n&&t.text!==e.text?(h(t).text=e.text,g(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),st.support.html5Clone&&e.innerHTML&&!st.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Zt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function b(e,n){var r,i,o=0,a=e.getElementsByTagName!==t?e.getElementsByTagName(n||"*"):e.querySelectorAll!==t?e.querySelectorAll(n||"*"):t;if(!a)for(a=[],r=e.childNodes||e;null!=(i=r[o]);o++)!n||st.nodeName(i,n)?a.push(i):st.merge(a,b(i,n));return n===t||n&&st.nodeName(e,n)?st.merge([e],a):a}function x(e){Zt.test(e.type)&&(e.defaultChecked=e.checked)}function T(e,t){if(t in e)return t;for(var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Nn.length;i--;)if(t=Nn[i]+n,t in e)return t;return r}function w(e,t){return e=t||e,"none"===st.css(e,"display")||!st.contains(e.ownerDocument,e)}function N(e,t){for(var n,r=[],i=0,o=e.length;o>i;i++)n=e[i],n.style&&(r[i]=st._data(n,"olddisplay"),t?(r[i]||"none"!==n.style.display||(n.style.display=""),""===n.style.display&&w(n)&&(r[i]=st._data(n,"olddisplay",S(n.nodeName)))):r[i]||w(n)||st._data(n,"olddisplay",st.css(n,"display")));for(i=0;o>i;i++)n=e[i],n.style&&(t&&"none"!==n.style.display&&""!==n.style.display||(n.style.display=t?r[i]||"":"none"));return e}function C(e,t,n){var r=mn.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function k(e,t,n,r,i){for(var o=n===(r?"border":"content")?4:"width"===t?1:0,a=0;4>o;o+=2)"margin"===n&&(a+=st.css(e,n+wn[o],!0,i)),r?("content"===n&&(a-=st.css(e,"padding"+wn[o],!0,i)),"margin"!==n&&(a-=st.css(e,"border"+wn[o]+"Width",!0,i))):(a+=st.css(e,"padding"+wn[o],!0,i),"padding"!==n&&(a+=st.css(e,"border"+wn[o]+"Width",!0,i)));return a}function E(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=ln(e),a=st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=un(e,t,o),(0>i||null==i)&&(i=e.style[t]),yn.test(i))return i;r=a&&(st.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+k(e,t,n||(a?"border":"content"),r,o)+"px"}function S(e){var t=V,n=bn[e];return n||(n=A(e,t),"none"!==n&&n||(cn=(cn||st("<iframe frameborder='0' width='0' height='0'/>").css("cssText","display:block !important")).appendTo(t.documentElement),t=(cn[0].contentWindow||cn[0].contentDocument).document,t.write("<!doctype html><html><body>"),t.close(),n=A(e,t),cn.detach()),bn[e]=n),n}function A(e,t){var n=st(t.createElement(e)).appendTo(t.body),r=st.css(n[0],"display");return n.remove(),r}function j(e,t,n,r){var i;if(st.isArray(t))st.each(t,function(t,i){n||kn.test(e)?r(e,i):j(e+"["+("object"==typeof i?t:"")+"]",i,n,r)});else if(n||"object"!==st.type(t))r(e,t);else for(i in t)j(e+"["+i+"]",t[i],n,r)}function D(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(lt)||[];if(st.isFunction(n))for(;r=o[i++];)"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function L(e,n,r,i){function o(u){var l;return a[u]=!0,st.each(e[u]||[],function(e,u){var c=u(n,r,i);return"string"!=typeof c||s||a[c]?s?!(l=c):t:(n.dataTypes.unshift(c),o(c),!1)}),l}var a={},s=e===$n;return o(n.dataTypes[0])||!a["*"]&&o("*")}function H(e,n){var r,i,o=st.ajaxSettings.flatOptions||{};for(r in n)n[r]!==t&&((o[r]?e:i||(i={}))[r]=n[r]);return i&&st.extend(!0,e,i),e}function M(e,n,r){var i,o,a,s,u=e.contents,l=e.dataTypes,c=e.responseFields;for(o in c)o in r&&(n[c[o]]=r[o]);for(;"*"===l[0];)l.shift(),i===t&&(i=e.mimeType||n.getResponseHeader("Content-Type"));if(i)for(o in u)if(u[o]&&u[o].test(i)){l.unshift(o);break}if(l[0]in r)a=l[0];else{for(o in r){if(!l[0]||e.converters[o+" "+l[0]]){a=o;break}s||(s=o)}a=a||s}return a?(a!==l[0]&&l.unshift(a),r[a]):t}function q(e,t){var n,r,i,o,a={},s=0,u=e.dataTypes.slice(),l=u[0];if(e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u[1])for(n in e.converters)a[n.toLowerCase()]=e.converters[n];for(;i=u[++s];)if("*"!==i){if("*"!==l&&l!==i){if(n=a[l+" "+i]||a["* "+i],!n)for(r in a)if(o=r.split(" "),o[1]===i&&(n=a[l+" "+o[0]]||a["* "+o[0]])){n===!0?n=a[r]:a[r]!==!0&&(i=o[0],u.splice(s--,0,i));break}if(n!==!0)if(n&&e["throws"])t=n(t);else try{t=n(t)}catch(c){return{state:"parsererror",error:n?c:"No conversion from "+l+" to "+i}}}l=i}return{state:"success",data:t}}function _(){try{return new e.XMLHttpRequest}catch(t){}}function F(){try{return new e.ActiveXObject("Microsoft.XMLHTTP")}catch(t){}}function O(){return setTimeout(function(){Qn=t}),Qn=st.now()}function B(e,t){st.each(t,function(t,n){for(var r=(rr[t]||[]).concat(rr["*"]),i=0,o=r.length;o>i;i++)if(r[i].call(e,t,n))return})}function P(e,t,n){var r,i,o=0,a=nr.length,s=st.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var t=Qn||O(),n=Math.max(0,l.startTime+l.duration-t),r=n/l.duration||0,o=1-r,a=0,u=l.tweens.length;u>a;a++)l.tweens[a].run(o);return s.notifyWith(e,[l,o,n]),1>o&&u?n:(s.resolveWith(e,[l]),!1)},l=s.promise({elem:e,props:st.extend({},t),opts:st.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Qn||O(),duration:n.duration,tweens:[],createTween:function(t,n){var r=st.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n=0,r=t?l.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)l.tweens[n].run(1);return t?s.resolveWith(e,[l,t]):s.rejectWith(e,[l,t]),this}}),c=l.props;for(R(c,l.opts.specialEasing);a>o;o++)if(r=nr[o].call(l,e,c,l.opts))return r;return B(l,c),st.isFunction(l.opts.start)&&l.opts.start.call(e,l),st.fx.timer(st.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always)}function R(e,t){var n,r,i,o,a;for(n in e)if(r=st.camelCase(n),i=t[r],o=e[n],st.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=st.cssHooks[r],a&&"expand"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}function W(e,t,n){var r,i,o,a,s,u,l,c,f,p=this,d=e.style,h={},g=[],m=e.nodeType&&w(e);n.queue||(c=st._queueHooks(e,"fx"),null==c.unqueued&&(c.unqueued=0,f=c.empty.fire,c.empty.fire=function(){c.unqueued||f()}),c.unqueued++,p.always(function(){p.always(function(){c.unqueued--,st.queue(e,"fx").length||c.empty.fire()})})),1===e.nodeType&&("height"in t||"width"in t)&&(n.overflow=[d.overflow,d.overflowX,d.overflowY],"inline"===st.css(e,"display")&&"none"===st.css(e,"float")&&(st.support.inlineBlockNeedsLayout&&"inline"!==S(e.nodeName)?d.zoom=1:d.display="inline-block")),n.overflow&&(d.overflow="hidden",st.support.shrinkWrapBlocks||p.done(function(){d.overflow=n.overflow[0],d.overflowX=n.overflow[1],d.overflowY=n.overflow[2]}));for(r in t)if(o=t[r],Zn.exec(o)){if(delete t[r],u=u||"toggle"===o,o===(m?"hide":"show"))continue;g.push(r)}if(a=g.length){s=st._data(e,"fxshow")||st._data(e,"fxshow",{}),"hidden"in s&&(m=s.hidden),u&&(s.hidden=!m),m?st(e).show():p.done(function(){st(e).hide()}),p.done(function(){var t;st._removeData(e,"fxshow");for(t in h)st.style(e,t,h[t])});for(r=0;a>r;r++)i=g[r],l=p.createTween(i,m?s[i]:0),h[i]=s[i]||st.style(e,i),i in s||(s[i]=l.start,m&&(l.end=l.start,l.start="width"===i||"height"===i?1:0))}}function $(e,t,n,r,i){return new $.prototype.init(e,t,n,r,i)}function I(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=wn[i],r["margin"+n]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function z(e){return st.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}var X,U,V=e.document,Y=e.location,J=e.jQuery,G=e.$,Q={},K=[],Z="1.9.0",et=K.concat,tt=K.push,nt=K.slice,rt=K.indexOf,it=Q.toString,ot=Q.hasOwnProperty,at=Z.trim,st=function(e,t){return new st.fn.init(e,t,X)},ut=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,lt=/\S+/g,ct=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ft=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,pt=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,dt=/^[\],:{}\s]*$/,ht=/(?:^|:|,)(?:\s*\[)+/g,gt=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,mt=/"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g,yt=/^-ms-/,vt=/-([\da-z])/gi,bt=function(e,t){return t.toUpperCase()},xt=function(){V.addEventListener?(V.removeEventListener("DOMContentLoaded",xt,!1),st.ready()):"complete"===V.readyState&&(V.detachEvent("onreadystatechange",xt),st.ready())};st.fn=st.prototype={jquery:Z,constructor:st,init:function(e,n,r){var i,o;if(!e)return this;if("string"==typeof e){if(i="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:ft.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof st?n[0]:n,st.merge(this,st.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:V,!0)),pt.test(i[1])&&st.isPlainObject(n))for(i in n)st.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=V.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=V,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):st.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),st.makeArray(e,this))},selector:"",length:0,size:function(){return this.length},toArray:function(){return nt.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=st.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return st.each(this,e,t)},ready:function(e){return st.ready.promise().done(e),this},slice:function(){return this.pushStack(nt.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(st.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:tt,sort:[].sort,splice:[].splice},st.fn.init.prototype=st.fn,st.extend=st.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},u=1,l=arguments.length,c=!1;for("boolean"==typeof s&&(c=s,s=arguments[1]||{},u=2),"object"==typeof s||st.isFunction(s)||(s={}),l===u&&(s=this,--u);l>u;u++)if(null!=(e=arguments[u]))for(n in e)r=s[n],i=e[n],s!==i&&(c&&i&&(st.isPlainObject(i)||(o=st.isArray(i)))?(o?(o=!1,a=r&&st.isArray(r)?r:[]):a=r&&st.isPlainObject(r)?r:{},s[n]=st.extend(c,a,i)):i!==t&&(s[n]=i));return s},st.extend({noConflict:function(t){return e.$===st&&(e.$=G),t&&e.jQuery===st&&(e.jQuery=J),st},isReady:!1,readyWait:1,holdReady:function(e){e?st.readyWait++:st.ready(!0)},ready:function(e){if(e===!0?!--st.readyWait:!st.isReady){if(!V.body)return setTimeout(st.ready);st.isReady=!0,e!==!0&&--st.readyWait>0||(U.resolveWith(V,[st]),st.fn.trigger&&st(V).trigger("ready").off("ready"))}},isFunction:function(e){return"function"===st.type(e)},isArray:Array.isArray||function(e){return"array"===st.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?Q[it.call(e)]||"object":typeof e},isPlainObject:function(e){if(!e||"object"!==st.type(e)||e.nodeType||st.isWindow(e))return!1;try{if(e.constructor&&!ot.call(e,"constructor")&&!ot.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}var r;for(r in e);return r===t||ot.call(e,r)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||V;var r=pt.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=st.buildFragment([e],t,i),i&&st(i).remove(),st.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:"string"==typeof n&&(n=st.trim(n),n&&dt.test(n.replace(gt,"@").replace(mt,"]").replace(ht,"")))?Function("return "+n)():(st.error("Invalid JSON: "+n),t)},parseXML:function(n){var r,i;if(!n||"string"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,"text/xml")):(r=new ActiveXObject("Microsoft.XMLDOM"),r.async="false",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName("parsererror").length||st.error("Invalid XML: "+n),r},noop:function(){},globalEval:function(t){t&&st.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(yt,"ms-").replace(vt,bt)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,r){var i,o=0,a=e.length,s=n(e);if(r){if(s)for(;a>o&&(i=t.apply(e[o],r),i!==!1);o++);else for(o in e)if(i=t.apply(e[o],r),i===!1)break}else if(s)for(;a>o&&(i=t.call(e[o],o,e[o]),i!==!1);o++);else for(o in e)if(i=t.call(e[o],o,e[o]),i===!1)break;return e},trim:at&&!at.call("\ufeff\u00a0")?function(e){return null==e?"":at.call(e)}:function(e){return null==e?"":(e+"").replace(ct,"")},makeArray:function(e,t){var r=t||[];return null!=e&&(n(Object(e))?st.merge(r,"string"==typeof e?[e]:e):tt.call(r,e)),r},inArray:function(e,t,n){var r;if(t){if(rt)return rt.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if("number"==typeof r)for(;r>o;o++)e[i++]=n[o];else for(;n[o]!==t;)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,r){var i,o=0,a=e.length,s=n(e),u=[];if(s)for(;a>o;o++)i=t(e[o],o,r),null!=i&&(u[u.length]=i);else for(o in e)i=t(e[o],o,r),null!=i&&(u[u.length]=i);return et.apply([],u)},guid:1,proxy:function(e,n){var r,i,o;return"string"==typeof n&&(r=e[n],n=e,e=r),st.isFunction(e)?(i=nt.call(arguments,2),o=function(){return e.apply(n||this,i.concat(nt.call(arguments)))},o.guid=e.guid=e.guid||st.guid++,o):t},access:function(e,n,r,i,o,a,s){var u=0,l=e.length,c=null==r;if("object"===st.type(r)){o=!0;for(u in r)st.access(e,n,u,r[u],!0,a,s)}else if(i!==t&&(o=!0,st.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(st(e),n)})),n))for(;l>u;u++)n(e[u],r,s?i:i.call(e[u],u,n(e[u],r)));return o?e:c?n.call(e):l?n(e[0],r):a},now:function(){return(new Date).getTime()}}),st.ready.promise=function(t){if(!U)if(U=st.Deferred(),"complete"===V.readyState)setTimeout(st.ready);else if(V.addEventListener)V.addEventListener("DOMContentLoaded",xt,!1),e.addEventListener("load",st.ready,!1);else{V.attachEvent("onreadystatechange",xt),e.attachEvent("onload",st.ready);var n=!1;try{n=null==e.frameElement&&V.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!st.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}st.ready()}}()}return U.promise(t)},st.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){Q["[object "+t+"]"]=t.toLowerCase()}),X=st(V);var Tt={};st.Callbacks=function(e){e="string"==typeof e?Tt[e]||r(e):st.extend({},e);var n,i,o,a,s,u,l=[],c=!e.once&&[],f=function(t){for(n=e.memory&&t,i=!0,u=a||0,a=0,s=l.length,o=!0;l&&s>u;u++)if(l[u].apply(t[0],t[1])===!1&&e.stopOnFalse){n=!1;break}o=!1,l&&(c?c.length&&f(c.shift()):n?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function r(t){st.each(t,function(t,n){var i=st.type(n);"function"===i?e.unique&&p.has(n)||l.push(n):n&&n.length&&"string"!==i&&r(n)})})(arguments),o?s=l.length:n&&(a=t,f(n))}return this},remove:function(){return l&&st.each(arguments,function(e,t){for(var n;(n=st.inArray(t,l,n))>-1;)l.splice(n,1),o&&(s>=n&&s--,u>=n&&u--)}),this},has:function(e){return st.inArray(e,l)>-1},empty:function(){return l=[],this},disable:function(){return l=c=n=t,this},disabled:function(){return!l},lock:function(){return c=t,n||p.disable(),this},locked:function(){return!c},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!l||i&&!c||(o?c.push(t):f(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},st.extend({Deferred:function(e){var t=[["resolve","done",st.Callbacks("once memory"),"resolved"],["reject","fail",st.Callbacks("once memory"),"rejected"],["notify","progress",st.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return st.Deferred(function(n){st.each(t,function(t,o){var a=o[0],s=st.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&st.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+"With"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?st.extend(e,r):r}},i={};return r.pipe=r.then,st.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t,n,r,i=0,o=nt.call(arguments),a=o.length,s=1!==a||e&&st.isFunction(e.promise)?a:0,u=1===s?e:st.Deferred(),l=function(e,n,r){return function(i){n[e]=this,r[e]=arguments.length>1?nt.call(arguments):i,r===t?u.notifyWith(n,r):--s||u.resolveWith(n,r)}};if(a>1)for(t=Array(a),n=Array(a),r=Array(a);a>i;i++)o[i]&&st.isFunction(o[i].promise)?o[i].promise().done(l(i,r,o)).fail(u.reject).progress(l(i,n,t)):--s;return s||u.resolveWith(r,o),u.promise()}}),st.support=function(){var n,r,i,o,a,s,u,l,c,f,p=V.createElement("div");if(p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",r=p.getElementsByTagName("*"),i=p.getElementsByTagName("a")[0],!r||!i||!r.length)return{};o=V.createElement("select"),a=o.appendChild(V.createElement("option")),s=p.getElementsByTagName("input")[0],i.style.cssText="top:1px;float:left;opacity:.5",n={getSetAttribute:"t"!==p.className,leadingWhitespace:3===p.firstChild.nodeType,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(i.getAttribute("style")),hrefNormalized:"/a"===i.getAttribute("href"),opacity:/^0.5/.test(i.style.opacity),cssFloat:!!i.style.cssFloat,checkOn:!!s.value,optSelected:a.selected,enctype:!!V.createElement("form").enctype,html5Clone:"<:nav></:nav>"!==V.createElement("nav").cloneNode(!0).outerHTML,boxModel:"CSS1Compat"===V.compatMode,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},s.checked=!0,n.noCloneChecked=s.cloneNode(!0).checked,o.disabled=!0,n.optDisabled=!a.disabled;try{delete p.test}catch(d){n.deleteExpando=!1}s=V.createElement("input"),s.setAttribute("value",""),n.input=""===s.getAttribute("value"),s.value="t",s.setAttribute("type","radio"),n.radioValue="t"===s.value,s.setAttribute("checked","t"),s.setAttribute("name","t"),u=V.createDocumentFragment(),u.appendChild(s),n.appendChecked=s.checked,n.checkClone=u.cloneNode(!0).cloneNode(!0).lastChild.checked,p.attachEvent&&(p.attachEvent("onclick",function(){n.noCloneEvent=!1}),p.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})p.setAttribute(l="on"+f,"t"),n[f+"Bubbles"]=l in e||p.attributes[l].expando===!1;return p.style.backgroundClip="content-box",p.cloneNode(!0).style.backgroundClip="",n.clearCloneStyle="content-box"===p.style.backgroundClip,st(function(){var r,i,o,a="padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;",s=V.getElementsByTagName("body")[0];s&&(r=V.createElement("div"),r.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",s.appendChild(r).appendChild(p),p.innerHTML="<table><tr><td></td><td>t</td></tr></table>",o=p.getElementsByTagName("td"),o[0].style.cssText="padding:0;margin:0;border:0;display:none",c=0===o[0].offsetHeight,o[0].style.display="",o[1].style.display="none",n.reliableHiddenOffsets=c&&0===o[0].offsetHeight,p.innerHTML="",p.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",n.boxSizing=4===p.offsetWidth,n.doesNotIncludeMarginInBodyOffset=1!==s.offsetTop,e.getComputedStyle&&(n.pixelPosition="1%"!==(e.getComputedStyle(p,null)||{}).top,n.boxSizingReliable="4px"===(e.getComputedStyle(p,null)||{width:"4px"}).width,i=p.appendChild(V.createElement("div")),i.style.cssText=p.style.cssText=a,i.style.marginRight=i.style.width="0",p.style.width="1px",n.reliableMarginRight=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight)),p.style.zoom!==t&&(p.innerHTML="",p.style.cssText=a+"width:1px;padding:1px;display:inline;zoom:1",n.inlineBlockNeedsLayout=3===p.offsetWidth,p.style.display="block",p.innerHTML="<div></div>",p.firstChild.style.width="5px",n.shrinkWrapBlocks=3!==p.offsetWidth,s.style.zoom=1),s.removeChild(r),r=p=o=i=null)}),r=o=u=a=i=s=null,n}();var wt=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,Nt=/([A-Z])/g;st.extend({cache:{},expando:"jQuery"+(Z+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(e){return e=e.nodeType?st.cache[e[st.expando]]:e[st.expando],!!e&&!s(e)},data:function(e,t,n){return i(e,t,n,!1)},removeData:function(e,t){return o(e,t,!1)},_data:function(e,t,n){return i(e,t,n,!0)},_removeData:function(e,t){return o(e,t,!0)},acceptData:function(e){var t=e.nodeName&&st.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute("classid")===t}}),st.fn.extend({data:function(e,n){var r,i,o=this[0],s=0,u=null;if(e===t){if(this.length&&(u=st.data(o),1===o.nodeType&&!st._data(o,"parsedAttrs"))){for(r=o.attributes;r.length>s;s++)i=r[s].name,i.indexOf("data-")||(i=st.camelCase(i.substring(5)),a(o,i,u[i]));st._data(o,"parsedAttrs",!0)}return u}return"object"==typeof e?this.each(function(){st.data(this,e)}):st.access(this,function(n){return n===t?o?a(o,e,st.data(o,e)):null:(this.each(function(){st.data(this,e,n)}),t)},null,n,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){st.removeData(this,e)})}}),st.extend({queue:function(e,n,r){var i;return e?(n=(n||"fx")+"queue",i=st._data(e,n),r&&(!i||st.isArray(r)?i=st._data(e,n,st.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||"fx";var n=st.queue(e,t),r=n.length,i=n.shift(),o=st._queueHooks(e,t),a=function(){st.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return st._data(e,n)||st._data(e,n,{empty:st.Callbacks("once memory").add(function(){st._removeData(e,t+"queue"),st._removeData(e,n)})})}}),st.fn.extend({queue:function(e,n){var r=2;return"string"!=typeof e&&(n=e,e="fx",r--),r>arguments.length?st.queue(this[0],e):n===t?this:this.each(function(){var t=st.queue(this,e,n);st._queueHooks(this,e),"fx"===e&&"inprogress"!==t[0]&&st.dequeue(this,e)})},dequeue:function(e){return this.each(function(){st.dequeue(this,e)})},delay:function(e,t){return e=st.fx?st.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,n){var r,i=1,o=st.Deferred(),a=this,s=this.length,u=function(){--i||o.resolveWith(a,[a])};for("string"!=typeof e&&(n=e,e=t),e=e||"fx";s--;)r=st._data(a[s],e+"queueHooks"),r&&r.empty&&(i++,r.empty.add(u));return u(),o.promise(n)}});var Ct,kt,Et=/[\t\r\n]/g,St=/\r/g,At=/^(?:input|select|textarea|button|object)$/i,jt=/^(?:a|area)$/i,Dt=/^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,Lt=/^(?:checked|selected)$/i,Ht=st.support.getSetAttribute,Mt=st.support.input;st.fn.extend({attr:function(e,t){return st.access(this,st.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){st.removeAttr(this,e)})},prop:function(e,t){return st.access(this,st.prop,e,t,arguments.length>1)},removeProp:function(e){return e=st.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,u="string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):" ")){for(o=0;i=t[o++];)0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=st.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,u=0===arguments.length||"string"==typeof e&&e;if(st.isFunction(e))return this.each(function(t){st(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(lt)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(Et," "):"")){for(o=0;i=t[o++];)for(;r.indexOf(" "+i+" ")>=0;)r=r.replace(" "+i+" "," ");n.className=e?st.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,r="boolean"==typeof t;return st.isFunction(e)?this.each(function(n){st(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n)for(var i,o=0,a=st(this),s=t,u=e.match(lt)||[];i=u[o++];)s=r?s:!a.hasClass(i),a[s?"addClass":"removeClass"](i);else("undefined"===n||"boolean"===n)&&(this.className&&st._data(this,"__className__",this.className),this.className=this.className||e===!1?"":st._data(this,"__className__")||"")})},hasClass:function(e){for(var t=" "+e+" ",n=0,r=this.length;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(Et," ").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=st.isFunction(e),this.each(function(r){var o,a=st(this);1===this.nodeType&&(o=i?e.call(this,r,a.val()):e,null==o?o="":"number"==typeof o?o+="":st.isArray(o)&&(o=st.map(o,function(e){return null==e?"":e+""})),n=st.valHooks[this.type]||st.valHooks[this.nodeName.toLowerCase()],n&&"set"in n&&n.set(this,o,"value")!==t||(this.value=o))});if(o)return n=st.valHooks[o.type]||st.valHooks[o.nodeName.toLowerCase()],n&&"get"in n&&(r=n.get(o,"value"))!==t?r:(r=o.value,"string"==typeof r?r.replace(St,""):null==r?"":r)}}}),st.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){for(var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,u=0>i?s:o?i:0;s>u;u++)if(n=r[u],!(!n.selected&&u!==i||(st.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&st.nodeName(n.parentNode,"optgroup"))){if(t=st(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n=st.makeArray(t);return st(e).find("option").each(function(){this.selected=st.inArray(st(this).val(),n)>=0}),n.length||(e.selectedIndex=-1),n}}},attr:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return e.getAttribute===t?st.prop(e,n,r):(a=1!==s||!st.isXMLDoc(e),a&&(n=n.toLowerCase(),o=st.attrHooks[n]||(Dt.test(n)?kt:Ct)),r===t?o&&a&&"get"in o&&null!==(i=o.get(e,n))?i:(e.getAttribute!==t&&(i=e.getAttribute(n)),null==i?t:i):null!==r?o&&a&&"set"in o&&(i=o.set(e,r,n))!==t?i:(e.setAttribute(n,r+""),r):(st.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(lt);if(o&&1===e.nodeType)for(;n=o[i++];)r=st.propFix[n]||n,Dt.test(n)?!Ht&&Lt.test(n)?e[st.camelCase("default-"+n)]=e[r]=!1:e[r]=!1:st.attr(e,n,""),e.removeAttribute(Ht?n:r)},attrHooks:{type:{set:function(e,t){if(!st.support.radioValue&&"radio"===t&&st.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!st.isXMLDoc(e),a&&(n=st.propFix[n]||n,o=st.propHooks[n]),r!==t?o&&"set"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&"get"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var n=e.getAttributeNode("tabindex");return n&&n.specified?parseInt(n.value,10):At.test(e.nodeName)||jt.test(e.nodeName)&&e.href?0:t}}}}),kt={get:function(e,n){var r=st.prop(e,n),i="boolean"==typeof r&&e.getAttribute(n),o="boolean"==typeof r?Mt&&Ht?null!=i:Lt.test(n)?e[st.camelCase("default-"+n)]:!!i:e.getAttributeNode(n);return o&&o.value!==!1?n.toLowerCase():t},set:function(e,t,n){return t===!1?st.removeAttr(e,n):Mt&&Ht||!Lt.test(n)?e.setAttribute(!Ht&&st.propFix[n]||n,n):e[st.camelCase("default-"+n)]=e[n]=!0,n}},Mt&&Ht||(st.attrHooks.value={get:function(e,n){var r=e.getAttributeNode(n);return st.nodeName(e,"input")?e.defaultValue:r&&r.specified?r.value:t
2
+ },set:function(e,n,r){return st.nodeName(e,"input")?(e.defaultValue=n,t):Ct&&Ct.set(e,n,r)}}),Ht||(Ct=st.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&("id"===n||"name"===n||"coords"===n?""!==r.value:r.specified)?r.value:t},set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+="","value"===r||n===e.getAttribute(r)?n:t}},st.attrHooks.contenteditable={get:Ct.get,set:function(e,t,n){Ct.set(e,""===t?!1:t,n)}},st.each(["width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{set:function(e,r){return""===r?(e.setAttribute(n,"auto"),r):t}})})),st.support.hrefNormalized||(st.each(["href","src","width","height"],function(e,n){st.attrHooks[n]=st.extend(st.attrHooks[n],{get:function(e){var r=e.getAttribute(n,2);return null==r?t:r}})}),st.each(["href","src"],function(e,t){st.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}})),st.support.style||(st.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+""}}),st.support.optSelected||(st.propHooks.selected=st.extend(st.propHooks.selected,{get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}})),st.support.enctype||(st.propFix.enctype="encoding"),st.support.checkOn||st.each(["radio","checkbox"],function(){st.valHooks[this]={get:function(e){return null===e.getAttribute("value")?"on":e.value}}}),st.each(["radio","checkbox"],function(){st.valHooks[this]=st.extend(st.valHooks[this],{set:function(e,n){return st.isArray(n)?e.checked=st.inArray(st(e).val(),n)>=0:t}})});var qt=/^(?:input|select|textarea)$/i,_t=/^key/,Ft=/^(?:mouse|contextmenu)|click/,Ot=/^(?:focusinfocus|focusoutblur)$/,Bt=/^([^.]*)(?:\.(.+)|)$/;st.event={global:{},add:function(e,n,r,i,o){var a,s,u,l,c,f,p,d,h,g,m,y=3!==e.nodeType&&8!==e.nodeType&&st._data(e);if(y){for(r.handler&&(a=r,r=a.handler,o=a.selector),r.guid||(r.guid=st.guid++),(l=y.events)||(l=y.events={}),(s=y.handle)||(s=y.handle=function(e){return st===t||e&&st.event.triggered===e.type?t:st.event.dispatch.apply(s.elem,arguments)},s.elem=e),n=(n||"").match(lt)||[""],c=n.length;c--;)u=Bt.exec(n[c])||[],h=m=u[1],g=(u[2]||"").split(".").sort(),p=st.event.special[h]||{},h=(o?p.delegateType:p.bindType)||h,p=st.event.special[h]||{},f=st.extend({type:h,origType:m,data:i,handler:r,guid:r.guid,selector:o,needsContext:o&&st.expr.match.needsContext.test(o),namespace:g.join(".")},a),(d=l[h])||(d=l[h]=[],d.delegateCount=0,p.setup&&p.setup.call(e,i,g,s)!==!1||(e.addEventListener?e.addEventListener(h,s,!1):e.attachEvent&&e.attachEvent("on"+h,s))),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=r.guid)),o?d.splice(d.delegateCount++,0,f):d.push(f),st.event.global[h]=!0;e=null}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,m=st.hasData(e)&&st._data(e);if(m&&(u=m.events)){for(t=(t||"").match(lt)||[""],l=t.length;l--;)if(s=Bt.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){for(f=st.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;o--;)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&f.teardown.call(e,h,m.handle)!==!1||st.removeEvent(e,d,m.handle),delete u[d])}else for(d in u)st.event.remove(e,d+t[l],n,r,!0);st.isEmptyObject(u)&&(delete m.handle,st._removeData(e,"events"))}},trigger:function(n,r,i,o){var a,s,u,l,c,f,p,d=[i||V],h=n.type||n,g=n.namespace?n.namespace.split("."):[];if(s=u=i=i||V,3!==i.nodeType&&8!==i.nodeType&&!Ot.test(h+st.event.triggered)&&(h.indexOf(".")>=0&&(g=h.split("."),h=g.shift(),g.sort()),c=0>h.indexOf(":")&&"on"+h,n=n[st.expando]?n:new st.Event(h,"object"==typeof n&&n),n.isTrigger=!0,n.namespace=g.join("."),n.namespace_re=n.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:st.makeArray(r,[n]),p=st.event.special[h]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!st.isWindow(i)){for(l=p.delegateType||h,Ot.test(l+h)||(s=s.parentNode);s;s=s.parentNode)d.push(s),u=s;u===(i.ownerDocument||V)&&d.push(u.defaultView||u.parentWindow||e)}for(a=0;(s=d[a++])&&!n.isPropagationStopped();)n.type=a>1?l:p.bindType||h,f=(st._data(s,"events")||{})[n.type]&&st._data(s,"handle"),f&&f.apply(s,r),f=c&&s[c],f&&st.acceptData(s)&&f.apply&&f.apply(s,r)===!1&&n.preventDefault();if(n.type=h,!(o||n.isDefaultPrevented()||p._default&&p._default.apply(i.ownerDocument,r)!==!1||"click"===h&&st.nodeName(i,"a")||!st.acceptData(i)||!c||!i[h]||st.isWindow(i))){u=i[c],u&&(i[c]=null),st.event.triggered=h;try{i[h]()}catch(m){}st.event.triggered=t,u&&(i[c]=u)}return n.result}},dispatch:function(e){e=st.event.fix(e);var n,r,i,o,a,s=[],u=nt.call(arguments),l=(st._data(this,"events")||{})[e.type]||[],c=st.event.special[e.type]||{};if(u[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){for(s=st.event.handlers.call(this,e,l),n=0;(o=s[n++])&&!e.isPropagationStopped();)for(e.currentTarget=o.elem,r=0;(a=o.handlers[r++])&&!e.isImmediatePropagationStopped();)(!e.namespace_re||e.namespace_re.test(a.namespace))&&(e.handleObj=a,e.data=a.data,i=((st.event.special[a.origType]||{}).handle||a.handler).apply(o.elem,u),i!==t&&(e.result=i)===!1&&(e.preventDefault(),e.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],u=n.delegateCount,l=e.target;if(u&&l.nodeType&&(!e.button||"click"!==e.type))for(;l!=this;l=l.parentNode||this)if(l.disabled!==!0||"click"!==e.type){for(i=[],r=0;u>r;r++)a=n[r],o=a.selector+" ",i[o]===t&&(i[o]=a.needsContext?st(o,this).index(l)>=0:st.find(o,this,null,[l]).length),i[o]&&i.push(a);i.length&&s.push({elem:l,handlers:i})}return n.length>u&&s.push({elem:this,handlers:n.slice(u)}),s},fix:function(e){if(e[st.expando])return e;var t,n,r=e,i=st.event.fixHooks[e.type]||{},o=i.props?this.props.concat(i.props):this.props;for(e=new st.Event(r),t=o.length;t--;)n=o[t],e[n]=r[n];return e.target||(e.target=r.srcElement||V),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,i.filter?i.filter(e,r):e},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,n){var r,i,o,a=n.button,s=n.fromElement;return null==e.pageX&&null!=n.clientX&&(r=e.target.ownerDocument||V,i=r.documentElement,o=r.body,e.pageX=n.clientX+(i&&i.scrollLeft||o&&o.scrollLeft||0)-(i&&i.clientLeft||o&&o.clientLeft||0),e.pageY=n.clientY+(i&&i.scrollTop||o&&o.scrollTop||0)-(i&&i.clientTop||o&&o.clientTop||0)),!e.relatedTarget&&s&&(e.relatedTarget=s===e.target?n.toElement:s),e.which||a===t||(e.which=1&a?1:2&a?3:4&a?2:0),e}},special:{load:{noBubble:!0},click:{trigger:function(){return st.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):t}},focus:{trigger:function(){if(this!==V.activeElement&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:"focusin"},blur:{trigger:function(){return this===V.activeElement&&this.blur?(this.blur(),!1):t},delegateType:"focusout"},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=st.extend(new st.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?st.event.trigger(i,null,t):st.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},st.removeEvent=V.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,n,r){var i="on"+n;e.detachEvent&&(e[i]===t&&(e[i]=null),e.detachEvent(i,r))},st.Event=function(e,n){return this instanceof st.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?u:l):this.type=e,n&&st.extend(this,n),this.timeStamp=e&&e.timeStamp||st.now(),this[st.expando]=!0,t):new st.Event(e,n)},st.Event.prototype={isDefaultPrevented:l,isPropagationStopped:l,isImmediatePropagationStopped:l,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=u,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=u,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u,this.stopPropagation()}},st.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){st.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!st.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),st.support.submitBubbles||(st.event.special.submit={setup:function(){return st.nodeName(this,"form")?!1:(st.event.add(this,"click._submit keypress._submit",function(e){var n=e.target,r=st.nodeName(n,"input")||st.nodeName(n,"button")?n.form:t;r&&!st._data(r,"submitBubbles")&&(st.event.add(r,"submit._submit",function(e){e._submit_bubble=!0}),st._data(r,"submitBubbles",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&st.event.simulate("submit",this.parentNode,e,!0))},teardown:function(){return st.nodeName(this,"form")?!1:(st.event.remove(this,"._submit"),t)}}),st.support.changeBubbles||(st.event.special.change={setup:function(){return qt.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(st.event.add(this,"propertychange._change",function(e){"checked"===e.originalEvent.propertyName&&(this._just_changed=!0)}),st.event.add(this,"click._change",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),st.event.simulate("change",this,e,!0)})),!1):(st.event.add(this,"beforeactivate._change",function(e){var t=e.target;qt.test(t.nodeName)&&!st._data(t,"changeBubbles")&&(st.event.add(t,"change._change",function(e){!this.parentNode||e.isSimulated||e.isTrigger||st.event.simulate("change",this.parentNode,e,!0)}),st._data(t,"changeBubbles",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||"radio"!==n.type&&"checkbox"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return st.event.remove(this,"._change"),!qt.test(this.nodeName)}}),st.support.focusinBubbles||st.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){st.event.simulate(t,e.target,st.event.fix(e),!0)};st.event.special[t]={setup:function(){0===n++&&V.addEventListener(e,r,!0)},teardown:function(){0===--n&&V.removeEventListener(e,r,!0)}}}),st.fn.extend({on:function(e,n,r,i,o){var a,s;if("object"==typeof e){"string"!=typeof n&&(r=r||n,n=t);for(s in e)this.on(s,n,r,e[s],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&("string"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=l;else if(!i)return this;return 1===o&&(a=i,i=function(e){return st().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=st.guid++)),this.each(function(){st.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,st(e.delegateTarget).off(i.namespace?i.origType+"."+i.namespace:i.origType,i.selector,i.handler),this;if("object"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||"function"==typeof n)&&(r=n,n=t),r===!1&&(r=l),this.each(function(){st.event.remove(this,e,r,n)})},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},trigger:function(e,t){return this.each(function(){st.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?st.event.trigger(e,n,r,!0):t},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),st.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){st.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)},_t.test(t)&&(st.event.fixHooks[t]=st.event.keyHooks),Ft.test(t)&&(st.event.fixHooks[t]=st.event.mouseHooks)}),function(e,t){function n(e){return ht.test(e+"")}function r(){var e,t=[];return e=function(n,r){return t.push(n+=" ")>C.cacheLength&&delete e[t.shift()],e[n]=r}}function i(e){return e[P]=!0,e}function o(e){var t=L.createElement("div");try{return e(t)}catch(n){return!1}finally{t=null}}function a(e,t,n,r){var i,o,a,s,u,l,c,d,h,g;if((t?t.ownerDocument||t:R)!==L&&D(t),t=t||L,n=n||[],!e||"string"!=typeof e)return n;if(1!==(s=t.nodeType)&&9!==s)return[];if(!M&&!r){if(i=gt.exec(e))if(a=i[1]){if(9===s){if(o=t.getElementById(a),!o||!o.parentNode)return n;if(o.id===a)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(a))&&O(t,o)&&o.id===a)return n.push(o),n}else{if(i[2])return Q.apply(n,K.call(t.getElementsByTagName(e),0)),n;if((a=i[3])&&W.getByClassName&&t.getElementsByClassName)return Q.apply(n,K.call(t.getElementsByClassName(a),0)),n}if(W.qsa&&!q.test(e)){if(c=!0,d=P,h=t,g=9===s&&e,1===s&&"object"!==t.nodeName.toLowerCase()){for(l=f(e),(c=t.getAttribute("id"))?d=c.replace(vt,"\\$&"):t.setAttribute("id",d),d="[id='"+d+"'] ",u=l.length;u--;)l[u]=d+p(l[u]);h=dt.test(e)&&t.parentNode||t,g=l.join(",")}if(g)try{return Q.apply(n,K.call(h.querySelectorAll(g),0)),n}catch(m){}finally{c||t.removeAttribute("id")}}}return x(e.replace(at,"$1"),t,n,r)}function s(e,t){for(var n=e&&t&&e.nextSibling;n;n=n.nextSibling)if(n===t)return-1;return e?1:-1}function u(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function l(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function c(e){return i(function(t){return t=+t,i(function(n,r){for(var i,o=e([],n.length,t),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function f(e,t){var n,r,i,o,s,u,l,c=X[e+" "];if(c)return t?0:c.slice(0);for(s=e,u=[],l=C.preFilter;s;){(!n||(r=ut.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),u.push(i=[])),n=!1,(r=lt.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(at," ")}),s=s.slice(n.length));for(o in C.filter)!(r=pt[o].exec(s))||l[o]&&!(r=l[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?a.error(e):X(e,u).slice(0)}function p(e){for(var t=0,n=e.length,r="";n>t;t++)r+=e[t].value;return r}function d(e,t,n){var r=t.dir,i=n&&"parentNode"===t.dir,o=I++;return t.first?function(t,n,o){for(;t=t[r];)if(1===t.nodeType||i)return e(t,n,o)}:function(t,n,a){var s,u,l,c=$+" "+o;if(a){for(;t=t[r];)if((1===t.nodeType||i)&&e(t,n,a))return!0}else for(;t=t[r];)if(1===t.nodeType||i)if(l=t[P]||(t[P]={}),(u=l[r])&&u[0]===c){if((s=u[1])===!0||s===N)return s===!0}else if(u=l[r]=[c],u[1]=e(t,n,a)||N,u[1]===!0)return!0}}function h(e){return e.length>1?function(t,n,r){for(var i=e.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function g(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;u>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),l&&t.push(s));return a}function m(e,t,n,r,o,a){return r&&!r[P]&&(r=m(r)),o&&!o[P]&&(o=m(o,a)),i(function(i,a,s,u){var l,c,f,p=[],d=[],h=a.length,m=i||b(t||"*",s.nodeType?[s]:s,[]),y=!e||!i&&t?m:g(m,p,e,s,u),v=n?o||(i?e:h||r)?[]:a:y;if(n&&n(y,v,s,u),r)for(l=g(v,d),r(l,[],s,u),c=l.length;c--;)(f=l[c])&&(v[d[c]]=!(y[d[c]]=f));if(i){if(o||e){if(o){for(l=[],c=v.length;c--;)(f=v[c])&&l.push(y[c]=f);o(null,v=[],l,u)}for(c=v.length;c--;)(f=v[c])&&(l=o?Z.call(i,f):p[c])>-1&&(i[l]=!(a[l]=f))}}else v=g(v===a?v.splice(h,v.length):v),o?o(null,a,v,u):Q.apply(a,v)})}function y(e){for(var t,n,r,i=e.length,o=C.relative[e[0].type],a=o||C.relative[" "],s=o?1:0,u=d(function(e){return e===t},a,!0),l=d(function(e){return Z.call(t,e)>-1},a,!0),c=[function(e,n,r){return!o&&(r||n!==j)||((t=n).nodeType?u(e,n,r):l(e,n,r))}];i>s;s++)if(n=C.relative[e[s].type])c=[d(h(c),n)];else{if(n=C.filter[e[s].type].apply(null,e[s].matches),n[P]){for(r=++s;i>r&&!C.relative[e[r].type];r++);return m(s>1&&h(c),s>1&&p(e.slice(0,s-1)).replace(at,"$1"),n,r>s&&y(e.slice(s,r)),i>r&&y(e=e.slice(r)),i>r&&p(e))}c.push(n)}return h(c)}function v(e,t){var n=0,r=t.length>0,o=e.length>0,s=function(i,s,u,l,c){var f,p,d,h=[],m=0,y="0",v=i&&[],b=null!=c,x=j,T=i||o&&C.find.TAG("*",c&&s.parentNode||s),w=$+=null==x?1:Math.E;for(b&&(j=s!==L&&s,N=n);null!=(f=T[y]);y++){if(o&&f){for(p=0;d=e[p];p++)if(d(f,s,u)){l.push(f);break}b&&($=w,N=++n)}r&&((f=!d&&f)&&m--,i&&v.push(f))}if(m+=y,r&&y!==m){for(p=0;d=t[p];p++)d(v,h,s,u);if(i){if(m>0)for(;y--;)v[y]||h[y]||(h[y]=G.call(l));h=g(h)}Q.apply(l,h),b&&!i&&h.length>0&&m+t.length>1&&a.uniqueSort(l)}return b&&($=w,j=x),v};return r?i(s):s}function b(e,t,n){for(var r=0,i=t.length;i>r;r++)a(e,t[r],n);return n}function x(e,t,n,r){var i,o,a,s,u,l=f(e);if(!r&&1===l.length){if(o=l[0]=l[0].slice(0),o.length>2&&"ID"===(a=o[0]).type&&9===t.nodeType&&!M&&C.relative[o[1].type]){if(t=C.find.ID(a.matches[0].replace(xt,Tt),t)[0],!t)return n;e=e.slice(o.shift().value.length)}for(i=pt.needsContext.test(e)?-1:o.length-1;i>=0&&(a=o[i],!C.relative[s=a.type]);i--)if((u=C.find[s])&&(r=u(a.matches[0].replace(xt,Tt),dt.test(o[0].type)&&t.parentNode||t))){if(o.splice(i,1),e=r.length&&p(o),!e)return Q.apply(n,K.call(r,0)),n;break}}return S(e,l)(r,t,M,n,dt.test(e)),n}function T(){}var w,N,C,k,E,S,A,j,D,L,H,M,q,_,F,O,B,P="sizzle"+-new Date,R=e.document,W={},$=0,I=0,z=r(),X=r(),U=r(),V=typeof t,Y=1<<31,J=[],G=J.pop,Q=J.push,K=J.slice,Z=J.indexOf||function(e){for(var t=0,n=this.length;n>t;t++)if(this[t]===e)return t;return-1},et="[\\x20\\t\\r\\n\\f]",tt="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",nt=tt.replace("w","w#"),rt="([*^$|!~]?=)",it="\\["+et+"*("+tt+")"+et+"*(?:"+rt+et+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+nt+")|)|)"+et+"*\\]",ot=":("+tt+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+it.replace(3,8)+")*)|.*)\\)|)",at=RegExp("^"+et+"+|((?:^|[^\\\\])(?:\\\\.)*)"+et+"+$","g"),ut=RegExp("^"+et+"*,"+et+"*"),lt=RegExp("^"+et+"*([\\x20\\t\\r\\n\\f>+~])"+et+"*"),ct=RegExp(ot),ft=RegExp("^"+nt+"$"),pt={ID:RegExp("^#("+tt+")"),CLASS:RegExp("^\\.("+tt+")"),NAME:RegExp("^\\[name=['\"]?("+tt+")['\"]?\\]"),TAG:RegExp("^("+tt.replace("w","w*")+")"),ATTR:RegExp("^"+it),PSEUDO:RegExp("^"+ot),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+et+"*(even|odd|(([+-]|)(\\d*)n|)"+et+"*(?:([+-]|)"+et+"*(\\d+)|))"+et+"*\\)|)","i"),needsContext:RegExp("^"+et+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+et+"*((?:-\\d)?\\d*)"+et+"*\\)|)(?=[^-]|$)","i")},dt=/[\x20\t\r\n\f]*[+~]/,ht=/\{\s*\[native code\]\s*\}/,gt=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,mt=/^(?:input|select|textarea|button)$/i,yt=/^h\d$/i,vt=/'|\\/g,bt=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,xt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,Tt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{K.call(H.childNodes,0)[0].nodeType}catch(wt){K=function(e){for(var t,n=[];t=this[e];e++)n.push(t);return n}}E=a.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},D=a.setDocument=function(e){var r=e?e.ownerDocument||e:R;return r!==L&&9===r.nodeType&&r.documentElement?(L=r,H=r.documentElement,M=E(r),W.tagNameNoComments=o(function(e){return e.appendChild(r.createComment("")),!e.getElementsByTagName("*").length}),W.attributes=o(function(e){e.innerHTML="<select></select>";var t=typeof e.lastChild.getAttribute("multiple");return"boolean"!==t&&"string"!==t}),W.getByClassName=o(function(e){return e.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",e.getElementsByClassName&&e.getElementsByClassName("e").length?(e.lastChild.className="e",2===e.getElementsByClassName("e").length):!1}),W.getByName=o(function(e){e.id=P+0,e.innerHTML="<a name='"+P+"'></a><div name='"+P+"'></div>",H.insertBefore(e,H.firstChild);var t=r.getElementsByName&&r.getElementsByName(P).length===2+r.getElementsByName(P+0).length;return W.getIdNotName=!r.getElementById(P),H.removeChild(e),t}),C.attrHandle=o(function(e){return e.innerHTML="<a href='#'></a>",e.firstChild&&typeof e.firstChild.getAttribute!==V&&"#"===e.firstChild.getAttribute("href")})?{}:{href:function(e){return e.getAttribute("href",2)},type:function(e){return e.getAttribute("type")}},W.getIdNotName?(C.find.ID=function(e,t){if(typeof t.getElementById!==V&&!M){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){return e.getAttribute("id")===t}}):(C.find.ID=function(e,n){if(typeof n.getElementById!==V&&!M){var r=n.getElementById(e);return r?r.id===e||typeof r.getAttributeNode!==V&&r.getAttributeNode("id").value===e?[r]:t:[]}},C.filter.ID=function(e){var t=e.replace(xt,Tt);return function(e){var n=typeof e.getAttributeNode!==V&&e.getAttributeNode("id");return n&&n.value===t}}),C.find.TAG=W.tagNameNoComments?function(e,n){return typeof n.getElementsByTagName!==V?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[i];i++)1===n.nodeType&&r.push(n);return r}return o},C.find.NAME=W.getByName&&function(e,n){return typeof n.getElementsByName!==V?n.getElementsByName(name):t},C.find.CLASS=W.getByClassName&&function(e,n){return typeof n.getElementsByClassName===V||M?t:n.getElementsByClassName(e)},_=[],q=[":focus"],(W.qsa=n(r.querySelectorAll))&&(o(function(e){e.innerHTML="<select><option selected=''></option></select>",e.querySelectorAll("[selected]").length||q.push("\\["+et+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),e.querySelectorAll(":checked").length||q.push(":checked")}),o(function(e){e.innerHTML="<input type='hidden' i=''/>",e.querySelectorAll("[i^='']").length&&q.push("[*^$]="+et+"*(?:\"\"|'')"),e.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),q.push(",.*:")})),(W.matchesSelector=n(F=H.matchesSelector||H.mozMatchesSelector||H.webkitMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&o(function(e){W.disconnectedMatch=F.call(e,"div"),F.call(e,"[s!='']:x"),_.push("!=",ot)}),q=RegExp(q.join("|")),_=RegExp(_.join("|")),O=n(H.contains)||H.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},B=H.compareDocumentPosition?function(e,t){var n;return e===t?(A=!0,0):(n=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t))?1&n||e.parentNode&&11===e.parentNode.nodeType?e===r||O(R,e)?-1:t===r||O(R,t)?1:0:4&n?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var n,i=0,o=e.parentNode,a=t.parentNode,u=[e],l=[t];if(e===t)return A=!0,0;if(e.sourceIndex&&t.sourceIndex)return(~t.sourceIndex||Y)-(O(R,e)&&~e.sourceIndex||Y);if(!o||!a)return e===r?-1:t===r?1:o?-1:a?1:0;if(o===a)return s(e,t);for(n=e;n=n.parentNode;)u.unshift(n);for(n=t;n=n.parentNode;)l.unshift(n);for(;u[i]===l[i];)i++;return i?s(u[i],l[i]):u[i]===R?-1:l[i]===R?1:0},A=!1,[0,0].sort(B),W.detectDuplicates=A,L):L},a.matches=function(e,t){return a(e,null,null,t)},a.matchesSelector=function(e,t){if((e.ownerDocument||e)!==L&&D(e),t=t.replace(bt,"='$1']"),!(!W.matchesSelector||M||_&&_.test(t)||q.test(t)))try{var n=F.call(e,t);if(n||W.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return a(t,L,null,[e]).length>0},a.contains=function(e,t){return(e.ownerDocument||e)!==L&&D(e),O(e,t)},a.attr=function(e,t){var n;return(e.ownerDocument||e)!==L&&D(e),M||(t=t.toLowerCase()),(n=C.attrHandle[t])?n(e):M||W.attributes?e.getAttribute(t):((n=e.getAttributeNode(t))||e.getAttribute(t))&&e[t]===!0?t:n&&n.specified?n.value:null},a.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},a.uniqueSort=function(e){var t,n=[],r=1,i=0;if(A=!W.detectDuplicates,e.sort(B),A){for(;t=e[r];r++)t===e[r-1]&&(i=n.push(r));for(;i--;)e.splice(n[i],1)}return e},k=a.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=k(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=k(t);return n},C=a.selectors={cacheLength:50,createPseudo:i,match:pt,find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(xt,Tt),e[3]=(e[4]||e[5]||"").replace(xt,Tt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||a.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&a.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return pt.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&ct.test(n)&&(t=f(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){return"*"===e?function(){return!0}:(e=e.replace(xt,Tt).toLowerCase(),function(t){return t.nodeName&&t.nodeName.toLowerCase()===e})},CLASS:function(e){var t=z[e+" "];return t||(t=RegExp("(^|"+et+")"+e+"("+et+"|$)"))&&z(e,function(e){return t.test(e.className||typeof e.getAttribute!==V&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=a.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.substr(i.length-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.substr(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!u&&!s;if(m){if(o){for(;g;){for(f=t;f=f[g];)if(s?f.nodeName.toLowerCase()===y:1===f.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){for(c=m[P]||(m[P]={}),l=c[e]||[],d=l[0]===$&&l[1],p=l[0]===$&&l[2],f=d&&m.childNodes[d];f=++d&&f&&f[g]||(p=d=0)||h.pop();)if(1===f.nodeType&&++p&&f===t){c[e]=[$,d,p];break}}else if(v&&(l=(t[P]||(t[P]={}))[e])&&l[0]===$)p=l[1];else for(;(f=++d&&f&&f[g]||(p=d=0)||h.pop())&&((s?f.nodeName.toLowerCase()!==y:1!==f.nodeType)||!++p||(v&&((f[P]||(f[P]={}))[e]=[$,p]),f!==t)););return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,r=C.pseudos[e]||C.setFilters[e.toLowerCase()]||a.error("unsupported pseudo: "+e);return r[P]?r(t):r.length>1?(n=[e,e,"",t],C.setFilters.hasOwnProperty(e.toLowerCase())?i(function(e,n){for(var i,o=r(e,t),a=o.length;a--;)i=Z.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:i(function(e){var t=[],n=[],r=S(e.replace(at,"$1"));return r[P]?i(function(e,t,n,i){for(var o,a=r(e,null,i,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:i(function(e){return function(t){return a(e,t).length>0}}),contains:i(function(e){return function(t){return(t.textContent||t.innerText||k(t)).indexOf(e)>-1}}),lang:i(function(e){return ft.test(e||"")||a.error("unsupported lang: "+e),e=e.replace(xt,Tt).toLowerCase(),function(t){var n;do if(n=M?t.getAttribute("xml:lang")||t.getAttribute("lang"):t.lang)return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===H},focus:function(e){return e===L.activeElement&&(!L.hasFocus||L.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!C.pseudos.empty(e)},header:function(e){return yt.test(e.nodeName)},input:function(e){return mt.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:c(function(){return[0]}),last:c(function(e,t){return[t-1]}),eq:c(function(e,t,n){return[0>n?n+t:n]}),even:c(function(e,t){for(var n=0;t>n;n+=2)e.push(n);return e}),odd:c(function(e,t){for(var n=1;t>n;n+=2)e.push(n);return e}),lt:c(function(e,t,n){for(var r=0>n?n+t:n;--r>=0;)e.push(r);return e}),gt:c(function(e,t,n){for(var r=0>n?n+t:n;t>++r;)e.push(r);return e})}};for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})C.pseudos[w]=u(w);for(w in{submit:!0,reset:!0})C.pseudos[w]=l(w);S=a.compile=function(e,t){var n,r=[],i=[],o=U[e+" "];if(!o){for(t||(t=f(e)),n=t.length;n--;)o=y(t[n]),o[P]?r.push(o):i.push(o);o=U(e,v(i,r))}return o},C.pseudos.nth=C.pseudos.eq,C.filters=T.prototype=C.pseudos,C.setFilters=new T,D(),a.attr=st.attr,st.find=a,st.expr=a.selectors,st.expr[":"]=st.expr.pseudos,st.unique=a.uniqueSort,st.text=a.getText,st.isXMLDoc=a.isXML,st.contains=a.contains}(e);var Pt=/Until$/,Rt=/^(?:parents|prev(?:Until|All))/,Wt=/^.[^:#\[\.,]*$/,$t=st.expr.match.needsContext,It={children:!0,contents:!0,next:!0,prev:!0};st.fn.extend({find:function(e){var t,n,r;if("string"!=typeof e)return r=this,this.pushStack(st(e).filter(function(){for(t=0;r.length>t;t++)if(st.contains(r[t],this))return!0}));for(n=[],t=0;this.length>t;t++)st.find(e,this[t],n);return n=this.pushStack(st.unique(n)),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t,n=st(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(st.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(f(this,e,!1))},filter:function(e){return this.pushStack(f(this,e,!0))},is:function(e){return!!e&&("string"==typeof e?$t.test(e)?st(e,this.context).index(this[0])>=0:st.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){for(var n,r=0,i=this.length,o=[],a=$t.test(e)||"string"!=typeof e?st(e,t||this.context):0;i>r;r++)for(n=this[r];n&&n.ownerDocument&&n!==t&&11!==n.nodeType;){if(a?a.index(n)>-1:st.find.matchesSelector(n,e)){o.push(n);break}n=n.parentNode}return this.pushStack(o.length>1?st.unique(o):o)},index:function(e){return e?"string"==typeof e?st.inArray(this[0],st(e)):st.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?st(e,t):st.makeArray(e&&e.nodeType?[e]:e),r=st.merge(this.get(),n);return this.pushStack(st.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),st.fn.andSelf=st.fn.addBack,st.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return st.dir(e,"parentNode")},parentsUntil:function(e,t,n){return st.dir(e,"parentNode",n)},next:function(e){return c(e,"nextSibling")},prev:function(e){return c(e,"previousSibling")
3
+ },nextAll:function(e){return st.dir(e,"nextSibling")},prevAll:function(e){return st.dir(e,"previousSibling")},nextUntil:function(e,t,n){return st.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return st.dir(e,"previousSibling",n)},siblings:function(e){return st.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return st.sibling(e.firstChild)},contents:function(e){return st.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:st.merge([],e.childNodes)}},function(e,t){st.fn[e]=function(n,r){var i=st.map(this,t,n);return Pt.test(e)||(r=n),r&&"string"==typeof r&&(i=st.filter(r,i)),i=this.length>1&&!It[e]?st.unique(i):i,this.length>1&&Rt.test(e)&&(i=i.reverse()),this.pushStack(i)}}),st.extend({filter:function(e,t,n){return n&&(e=":not("+e+")"),1===t.length?st.find.matchesSelector(t[0],e)?[t[0]]:[]:st.find.matches(e,t)},dir:function(e,n,r){for(var i=[],o=e[n];o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!st(o).is(r));)1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});var zt="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",Xt=/ jQuery\d+="(?:null|\d+)"/g,Ut=RegExp("<(?:"+zt+")[\\s/>]","i"),Vt=/^\s+/,Yt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Jt=/<([\w:]+)/,Gt=/<tbody/i,Qt=/<|&#?\w+;/,Kt=/<(?:script|style|link)/i,Zt=/^(?:checkbox|radio)$/i,en=/checked\s*(?:[^=]|=\s*.checked.)/i,tn=/^$|\/(?:java|ecma)script/i,nn=/^true\/(.*)/,rn=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,on={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:st.support.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]},an=p(V),sn=an.appendChild(V.createElement("div"));on.optgroup=on.option,on.tbody=on.tfoot=on.colgroup=on.caption=on.thead,on.th=on.td,st.fn.extend({text:function(e){return st.access(this,function(e){return e===t?st.text(this):this.empty().append((this[0]&&this[0].ownerDocument||V).createTextNode(e))},null,e,arguments.length)},wrapAll:function(e){if(st.isFunction(e))return this.each(function(t){st(this).wrapAll(e.call(this,t))});if(this[0]){var t=st(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){for(var e=this;e.firstChild&&1===e.firstChild.nodeType;)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return st.isFunction(e)?this.each(function(t){st(this).wrapInner(e.call(this,t))}):this.each(function(){var t=st(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=st.isFunction(e);return this.each(function(n){st(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){st.nodeName(this,"body")||st(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.appendChild(e)})},prepend:function(){return this.domManip(arguments,!0,function(e){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&this.insertBefore(e,this.firstChild)})},before:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,!1,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){for(var n,r=0;null!=(n=this[r]);r++)(!e||st.filter(e,[n]).length>0)&&(t||1!==n.nodeType||st.cleanData(b(n)),n.parentNode&&(t&&st.contains(n.ownerDocument,n)&&m(b(n,"script")),n.parentNode.removeChild(n)));return this},empty:function(){for(var e,t=0;null!=(e=this[t]);t++){for(1===e.nodeType&&st.cleanData(b(e,!1));e.firstChild;)e.removeChild(e.firstChild);e.options&&st.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return st.clone(this,e,t)})},html:function(e){return st.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(Xt,""):t;if(!("string"!=typeof e||Kt.test(e)||!st.support.htmlSerialize&&Ut.test(e)||!st.support.leadingWhitespace&&Vt.test(e)||on[(Jt.exec(e)||["",""])[1].toLowerCase()])){e=e.replace(Yt,"<$1></$2>");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(st.cleanData(b(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(e){var t=st.isFunction(e);return t||"string"==typeof e||(e=st(e).not(this).detach()),this.domManip([e],!0,function(e){var t=this.nextSibling,n=this.parentNode;(n&&1===this.nodeType||11===this.nodeType)&&(st(this).remove(),t?t.parentNode.insertBefore(e,t):n.appendChild(e))})},detach:function(e){return this.remove(e,!0)},domManip:function(e,n,r){e=et.apply([],e);var i,o,a,s,u,l,c=0,f=this.length,p=this,m=f-1,y=e[0],v=st.isFunction(y);if(v||!(1>=f||"string"!=typeof y||st.support.checkClone)&&en.test(y))return this.each(function(i){var o=p.eq(i);v&&(e[0]=y.call(this,i,n?o.html():t)),o.domManip(e,n,r)});if(f&&(i=st.buildFragment(e,this[0].ownerDocument,!1,this),o=i.firstChild,1===i.childNodes.length&&(i=o),o)){for(n=n&&st.nodeName(o,"tr"),a=st.map(b(i,"script"),h),s=a.length;f>c;c++)u=i,c!==m&&(u=st.clone(u,!0,!0),s&&st.merge(a,b(u,"script"))),r.call(n&&st.nodeName(this[c],"table")?d(this[c],"tbody"):this[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,st.map(a,g),c=0;s>c;c++)u=a[c],tn.test(u.type||"")&&!st._data(u,"globalEval")&&st.contains(l,u)&&(u.src?st.ajax({url:u.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):st.globalEval((u.text||u.textContent||u.innerHTML||"").replace(rn,"")));i=o=null}return this}}),st.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){st.fn[e]=function(e){for(var n,r=0,i=[],o=st(e),a=o.length-1;a>=r;r++)n=r===a?this:this.clone(!0),st(o[r])[t](n),tt.apply(i,n.get());return this.pushStack(i)}}),st.extend({clone:function(e,t,n){var r,i,o,a,s,u=st.contains(e.ownerDocument,e);if(st.support.html5Clone||st.isXMLDoc(e)||!Ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(sn.innerHTML=e.outerHTML,sn.removeChild(s=sn.firstChild)),!(st.support.noCloneEvent&&st.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||st.isXMLDoc(e)))for(r=b(s),i=b(e),a=0;null!=(o=i[a]);++a)r[a]&&v(o,r[a]);if(t)if(n)for(i=i||b(e),r=r||b(s),a=0;null!=(o=i[a]);a++)y(o,r[a]);else y(e,s);return r=b(s,"script"),r.length>0&&m(r,!u&&b(e,"script")),r=i=o=null,s},buildFragment:function(e,t,n,r){for(var i,o,a,s,u,l,c,f=e.length,d=p(t),h=[],g=0;f>g;g++)if(o=e[g],o||0===o)if("object"===st.type(o))st.merge(h,o.nodeType?[o]:o);else if(Qt.test(o)){for(s=s||d.appendChild(t.createElement("div")),a=(Jt.exec(o)||["",""])[1].toLowerCase(),u=on[a]||on._default,s.innerHTML=u[1]+o.replace(Yt,"<$1></$2>")+u[2],c=u[0];c--;)s=s.lastChild;if(!st.support.leadingWhitespace&&Vt.test(o)&&h.push(t.createTextNode(Vt.exec(o)[0])),!st.support.tbody)for(o="table"!==a||Gt.test(o)?"<table>"!==u[1]||Gt.test(o)?0:s:s.firstChild,c=o&&o.childNodes.length;c--;)st.nodeName(l=o.childNodes[c],"tbody")&&!l.childNodes.length&&o.removeChild(l);for(st.merge(h,s.childNodes),s.textContent="";s.firstChild;)s.removeChild(s.firstChild);s=d.lastChild}else h.push(t.createTextNode(o));for(s&&d.removeChild(s),st.support.appendChecked||st.grep(b(h,"input"),x),g=0;o=h[g++];)if((!r||-1===st.inArray(o,r))&&(i=st.contains(o.ownerDocument,o),s=b(d.appendChild(o),"script"),i&&m(s),n))for(c=0;o=s[c++];)tn.test(o.type||"")&&n.push(o);return s=null,d},cleanData:function(e,n){for(var r,i,o,a,s=0,u=st.expando,l=st.cache,c=st.support.deleteExpando,f=st.event.special;null!=(o=e[s]);s++)if((n||st.acceptData(o))&&(i=o[u],r=i&&l[i])){if(r.events)for(a in r.events)f[a]?st.event.remove(o,a):st.removeEvent(o,a,r.handle);l[i]&&(delete l[i],c?delete o[u]:o.removeAttribute!==t?o.removeAttribute(u):o[u]=null,K.push(i))}}});var un,ln,cn,fn=/alpha\([^)]*\)/i,pn=/opacity\s*=\s*([^)]*)/,dn=/^(top|right|bottom|left)$/,hn=/^(none|table(?!-c[ea]).+)/,gn=/^margin/,mn=RegExp("^("+ut+")(.*)$","i"),yn=RegExp("^("+ut+")(?!px)[a-z%]+$","i"),vn=RegExp("^([+-])=("+ut+")","i"),bn={BODY:"block"},xn={position:"absolute",visibility:"hidden",display:"block"},Tn={letterSpacing:0,fontWeight:400},wn=["Top","Right","Bottom","Left"],Nn=["Webkit","O","Moz","ms"];st.fn.extend({css:function(e,n){return st.access(this,function(e,n,r){var i,o,a={},s=0;if(st.isArray(n)){for(i=ln(e),o=n.length;o>s;s++)a[n[s]]=st.css(e,n[s],!1,i);return a}return r!==t?st.style(e,n,r):st.css(e,n)},e,n,arguments.length>1)},show:function(){return N(this,!0)},hide:function(){return N(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:w(this))?st(this).show():st(this).hide()})}}),st.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=un(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":st.support.cssFloat?"cssFloat":"styleFloat"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,u=st.camelCase(n),l=e.style;if(n=st.cssProps[u]||(st.cssProps[u]=T(l,u)),s=st.cssHooks[n]||st.cssHooks[u],r===t)return s&&"get"in s&&(o=s.get(e,!1,i))!==t?o:l[n];if(a=typeof r,"string"===a&&(o=vn.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(st.css(e,n)),a="number"),!(null==r||"number"===a&&isNaN(r)||("number"!==a||st.cssNumber[u]||(r+="px"),st.support.clearCloneStyle||""!==r||0!==n.indexOf("background")||(l[n]="inherit"),s&&"set"in s&&(r=s.set(e,r,i))===t)))try{l[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,u=st.camelCase(n);return n=st.cssProps[u]||(st.cssProps[u]=T(e.style,u)),s=st.cssHooks[n]||st.cssHooks[u],s&&"get"in s&&(o=s.get(e,!0,r)),o===t&&(o=un(e,n,i)),"normal"===o&&n in Tn&&(o=Tn[n]),r?(a=parseFloat(o),r===!0||st.isNumeric(a)?a||0:o):o},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),e.getComputedStyle?(ln=function(t){return e.getComputedStyle(t,null)},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s.getPropertyValue(n)||s[n]:t,l=e.style;return s&&(""!==u||st.contains(e.ownerDocument,e)||(u=st.style(e,n)),yn.test(u)&&gn.test(n)&&(i=l.width,o=l.minWidth,a=l.maxWidth,l.minWidth=l.maxWidth=l.width=u,u=s.width,l.width=i,l.minWidth=o,l.maxWidth=a)),u}):V.documentElement.currentStyle&&(ln=function(e){return e.currentStyle},un=function(e,n,r){var i,o,a,s=r||ln(e),u=s?s[n]:t,l=e.style;return null==u&&l&&l[n]&&(u=l[n]),yn.test(u)&&!dn.test(n)&&(i=l.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),l.left="fontSize"===n?"1em":u,u=l.pixelLeft+"px",l.left=i,a&&(o.left=a)),""===u?"auto":u}),st.each(["height","width"],function(e,n){st.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&hn.test(st.css(e,"display"))?st.swap(e,xn,function(){return E(e,n,i)}):E(e,n,i):t},set:function(e,t,r){var i=r&&ln(e);return C(e,t,r?k(e,n,r,st.support.boxSizing&&"border-box"===st.css(e,"boxSizing",!1,i),i):0)}}}),st.support.opacity||(st.cssHooks.opacity={get:function(e,t){return pn.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=st.isNumeric(t)?"alpha(opacity="+100*t+")":"",o=r&&r.filter||n.filter||"";n.zoom=1,(t>=1||""===t)&&""===st.trim(o.replace(fn,""))&&n.removeAttribute&&(n.removeAttribute("filter"),""===t||r&&!r.filter)||(n.filter=fn.test(o)?o.replace(fn,i):o+" "+i)}}),st(function(){st.support.reliableMarginRight||(st.cssHooks.marginRight={get:function(e,n){return n?st.swap(e,{display:"inline-block"},un,[e,"marginRight"]):t}}),!st.support.pixelPosition&&st.fn.position&&st.each(["top","left"],function(e,n){st.cssHooks[n]={get:function(e,r){return r?(r=un(e,n),yn.test(r)?st(e).position()[n]+"px":r):t}}})}),st.expr&&st.expr.filters&&(st.expr.filters.hidden=function(e){return 0===e.offsetWidth&&0===e.offsetHeight||!st.support.reliableHiddenOffsets&&"none"===(e.style&&e.style.display||st.css(e,"display"))},st.expr.filters.visible=function(e){return!st.expr.filters.hidden(e)}),st.each({margin:"",padding:"",border:"Width"},function(e,t){st.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];4>r;r++)i[e+wn[r]+t]=o[r]||o[r-2]||o[0];return i}},gn.test(e)||(st.cssHooks[e+t].set=C)});var Cn=/%20/g,kn=/\[\]$/,En=/\r?\n/g,Sn=/^(?:submit|button|image|reset)$/i,An=/^(?:input|select|textarea|keygen)/i;st.fn.extend({serialize:function(){return st.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=st.prop(this,"elements");return e?st.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!st(this).is(":disabled")&&An.test(this.nodeName)&&!Sn.test(e)&&(this.checked||!Zt.test(e))}).map(function(e,t){var n=st(this).val();return null==n?null:st.isArray(n)?st.map(n,function(e){return{name:t.name,value:e.replace(En,"\r\n")}}):{name:t.name,value:n.replace(En,"\r\n")}}).get()}}),st.param=function(e,n){var r,i=[],o=function(e,t){t=st.isFunction(t)?t():null==t?"":t,i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};if(n===t&&(n=st.ajaxSettings&&st.ajaxSettings.traditional),st.isArray(e)||e.jquery&&!st.isPlainObject(e))st.each(e,function(){o(this.name,this.value)});else for(r in e)j(r,e[r],n,o);return i.join("&").replace(Cn,"+")};var jn,Dn,Ln=st.now(),Hn=/\?/,Mn=/#.*$/,qn=/([?&])_=[^&]*/,_n=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Fn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,On=/^(?:GET|HEAD)$/,Bn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,Rn=st.fn.load,Wn={},$n={},In="*/".concat("*");try{Dn=Y.href}catch(zn){Dn=V.createElement("a"),Dn.href="",Dn=Dn.href}jn=Pn.exec(Dn.toLowerCase())||[],st.fn.load=function(e,n,r){if("string"!=typeof e&&Rn)return Rn.apply(this,arguments);var i,o,a,s=this,u=e.indexOf(" ");return u>=0&&(i=e.slice(u,e.length),e=e.slice(0,u)),st.isFunction(n)?(r=n,n=t):n&&"object"==typeof n&&(o="POST"),s.length>0&&st.ajax({url:e,type:o,dataType:"html",data:n}).done(function(e){a=arguments,s.html(i?st("<div>").append(st.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,a||[e.responseText,t,e])}),this},st.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){st.fn[t]=function(e){return this.on(t,e)}}),st.each(["get","post"],function(e,n){st[n]=function(e,r,i,o){return st.isFunction(r)&&(o=o||i,i=r,r=t),st.ajax({url:e,type:n,dataType:o,data:r,success:i})}}),st.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Dn,type:"GET",isLocal:Fn.test(jn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":In,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":e.String,"text html":!0,"text json":st.parseJSON,"text xml":st.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?H(H(e,st.ajaxSettings),t):H(st.ajaxSettings,e)},ajaxPrefilter:D(Wn),ajaxTransport:D($n),ajax:function(e,n){function r(e,n,r,s){var l,f,v,b,T,N=n;2!==x&&(x=2,u&&clearTimeout(u),i=t,a=s||"",w.readyState=e>0?4:0,r&&(b=M(p,w,r)),e>=200&&300>e||304===e?(p.ifModified&&(T=w.getResponseHeader("Last-Modified"),T&&(st.lastModified[o]=T),T=w.getResponseHeader("etag"),T&&(st.etag[o]=T)),304===e?(l=!0,N="notmodified"):(l=q(p,b),N=l.state,f=l.data,v=l.error,l=!v)):(v=N,(e||!N)&&(N="error",0>e&&(e=0))),w.status=e,w.statusText=(n||N)+"",l?g.resolveWith(d,[f,N,w]):g.rejectWith(d,[w,N,v]),w.statusCode(y),y=t,c&&h.trigger(l?"ajaxSuccess":"ajaxError",[w,p,l?f:v]),m.fireWith(d,[w,N]),c&&(h.trigger("ajaxComplete",[w,p]),--st.active||st.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=t),n=n||{};var i,o,a,s,u,l,c,f,p=st.ajaxSetup({},n),d=p.context||p,h=p.context&&(d.nodeType||d.jquery)?st(d):st.event,g=st.Deferred(),m=st.Callbacks("once memory"),y=p.statusCode||{},v={},b={},x=0,T="canceled",w={readyState:0,getResponseHeader:function(e){var t;if(2===x){if(!s)for(s={};t=_n.exec(a);)s[t[1].toLowerCase()]=t[2];t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===x?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return x||(e=b[n]=b[n]||e,v[e]=t),this},overrideMimeType:function(e){return x||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>x)for(t in e)y[t]=[y[t],e[t]];else w.always(e[w.status]);return this},abort:function(e){var t=e||T;return i&&i.abort(t),r(0,t),this}};if(g.promise(w).complete=m.add,w.success=w.done,w.error=w.fail,p.url=((e||p.url||Dn)+"").replace(Mn,"").replace(Bn,jn[1]+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=st.trim(p.dataType||"*").toLowerCase().match(lt)||[""],null==p.crossDomain&&(l=Pn.exec(p.url.toLowerCase()),p.crossDomain=!(!l||l[1]===jn[1]&&l[2]===jn[2]&&(l[3]||("http:"===l[1]?80:443))==(jn[3]||("http:"===jn[1]?80:443)))),p.data&&p.processData&&"string"!=typeof p.data&&(p.data=st.param(p.data,p.traditional)),L(Wn,p,n,w),2===x)return w;c=p.global,c&&0===st.active++&&st.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!On.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(Hn.test(o)?"&":"?")+p.data,delete p.data),p.cache===!1&&(p.url=qn.test(o)?o.replace(qn,"$1_="+Ln++):o+(Hn.test(o)?"&":"?")+"_="+Ln++)),p.ifModified&&(st.lastModified[o]&&w.setRequestHeader("If-Modified-Since",st.lastModified[o]),st.etag[o]&&w.setRequestHeader("If-None-Match",st.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&w.setRequestHeader("Content-Type",p.contentType),w.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+In+"; q=0.01":""):p.accepts["*"]);for(f in p.headers)w.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(p.beforeSend.call(d,w,p)===!1||2===x))return w.abort();T="abort";for(f in{success:1,error:1,complete:1})w[f](p[f]);if(i=L($n,p,n,w)){w.readyState=1,c&&h.trigger("ajaxSend",[w,p]),p.async&&p.timeout>0&&(u=setTimeout(function(){w.abort("timeout")},p.timeout));try{x=1,i.send(v,r)}catch(N){if(!(2>x))throw N;r(-1,N)}}else r(-1,"No Transport");return w},getScript:function(e,n){return st.get(e,t,n,"script")},getJSON:function(e,t,n){return st.get(e,t,n,"json")}}),st.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return st.globalEval(e),e}}}),st.ajaxPrefilter("script",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),st.ajaxTransport("script",function(e){if(e.crossDomain){var n,r=V.head||st("head")[0]||V.documentElement;return{send:function(t,i){n=V.createElement("script"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,"success"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Xn=[],Un=/(=)\?(?=&|$)|\?\?/;st.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xn.pop()||st.expando+"_"+Ln++;return this[e]=!0,e}}),st.ajaxPrefilter("json jsonp",function(n,r,i){var o,a,s,u=n.jsonp!==!1&&(Un.test(n.url)?"url":"string"==typeof n.data&&!(n.contentType||"").indexOf("application/x-www-form-urlencoded")&&Un.test(n.data)&&"data");return u||"jsonp"===n.dataTypes[0]?(o=n.jsonpCallback=st.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,u?n[u]=n[u].replace(Un,"$1"+o):n.jsonp!==!1&&(n.url+=(Hn.test(n.url)?"&":"?")+n.jsonp+"="+o),n.converters["script json"]=function(){return s||st.error(o+" was not called"),s[0]},n.dataTypes[0]="json",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Xn.push(o)),s&&st.isFunction(a)&&a(s[0]),s=a=t}),"script"):t});var Vn,Yn,Jn=0,Gn=e.ActiveXObject&&function(){var e;for(e in Vn)Vn[e](t,!0)};st.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&_()||F()}:_,Yn=st.ajaxSettings.xhr(),st.support.cors=!!Yn&&"withCredentials"in Yn,Yn=st.support.ajax=!!Yn,Yn&&st.ajaxTransport(function(n){if(!n.crossDomain||st.support.cors){var r;return{send:function(i,o){var a,s,u=n.xhr();if(n.username?u.open(n.type,n.url,n.async,n.username,n.password):u.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)u[s]=n.xhrFields[s];n.mimeType&&u.overrideMimeType&&u.overrideMimeType(n.mimeType),n.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");try{for(s in i)u.setRequestHeader(s,i[s])}catch(l){}u.send(n.hasContent&&n.data||null),r=function(e,i){var s,l,c,f,p;try{if(r&&(i||4===u.readyState))if(r=t,a&&(u.onreadystatechange=st.noop,Gn&&delete Vn[a]),i)4!==u.readyState&&u.abort();else{f={},s=u.status,p=u.responseXML,c=u.getAllResponseHeaders(),p&&p.documentElement&&(f.xml=p),"string"==typeof u.responseText&&(f.text=u.responseText);try{l=u.statusText}catch(d){l=""}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=f.text?200:404}}catch(h){i||o(-1,h)}f&&o(s,l,f,c)},n.async?4===u.readyState?setTimeout(r):(a=++Jn,Gn&&(Vn||(Vn={},st(e).unload(Gn)),Vn[a]=r),u.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Qn,Kn,Zn=/^(?:toggle|show|hide)$/,er=RegExp("^(?:([+-])=|)("+ut+")([a-z%]*)$","i"),tr=/queueHooks$/,nr=[W],rr={"*":[function(e,t){var n,r,i=this.createTween(e,t),o=er.exec(t),a=i.cur(),s=+a||0,u=1,l=20;if(o){if(n=+o[2],r=o[3]||(st.cssNumber[e]?"":"px"),"px"!==r&&s){s=st.css(i.elem,e,!0)||n||1;do u=u||".5",s/=u,st.style(i.elem,e,s+r);while(u!==(u=i.cur()/a)&&1!==u&&--l)}i.unit=r,i.start=s,i.end=o[1]?s+(o[1]+1)*n:n}return i}]};st.Animation=st.extend(P,{tweener:function(e,t){st.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");for(var n,r=0,i=e.length;i>r;r++)n=e[r],rr[n]=rr[n]||[],rr[n].unshift(t)},prefilter:function(e,t){t?nr.unshift(e):nr.push(e)}}),st.Tween=$,$.prototype={constructor:$,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(st.cssNumber[n]?"":"px")},cur:function(){var e=$.propHooks[this.prop];return e&&e.get?e.get(this):$.propHooks._default.get(this)},run:function(e){var t,n=$.propHooks[this.prop];return this.pos=t=this.options.duration?st.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):$.propHooks._default.set(this),this}},$.prototype.init.prototype=$.prototype,$.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=st.css(e.elem,e.prop,"auto"),t&&"auto"!==t?t:0):e.elem[e.prop]},set:function(e){st.fx.step[e.prop]?st.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[st.cssProps[e.prop]]||st.cssHooks[e.prop])?st.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},$.propHooks.scrollTop=$.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},st.each(["toggle","show","hide"],function(e,t){var n=st.fn[t];st.fn[t]=function(e,r,i){return null==e||"boolean"==typeof e?n.apply(this,arguments):this.animate(I(t,!0),e,r,i)}}),st.fn.extend({fadeTo:function(e,t,n,r){return this.filter(w).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=st.isEmptyObject(e),o=st.speed(t,n,r),a=function(){var t=P(this,st.extend({},e),o);a.finish=function(){t.stop(!0)},(i||st._data(this,"finish"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return"string"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||"fx",[]),this.each(function(){var t=!0,n=null!=e&&e+"queueHooks",o=st.timers,a=st._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&tr.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&st.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||"fx"),this.each(function(){var t,n=st._data(this),r=n[e+"queue"],i=n[e+"queueHooks"],o=st.timers,a=r?r.length:0;for(n.finish=!0,st.queue(this,e,[]),i&&i.cur&&i.cur.finish&&i.cur.finish.call(this),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}}),st.each({slideDown:I("show"),slideUp:I("hide"),slideToggle:I("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,t){st.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),st.speed=function(e,t,n){var r=e&&"object"==typeof e?st.extend({},e):{complete:n||!n&&t||st.isFunction(e)&&e,duration:e,easing:n&&t||t&&!st.isFunction(t)&&t};return r.duration=st.fx.off?0:"number"==typeof r.duration?r.duration:r.duration in st.fx.speeds?st.fx.speeds[r.duration]:st.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue="fx"),r.old=r.complete,r.complete=function(){st.isFunction(r.old)&&r.old.call(this),r.queue&&st.dequeue(this,r.queue)},r},st.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},st.timers=[],st.fx=$.prototype.init,st.fx.tick=function(){var e,n=st.timers,r=0;for(Qn=st.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||st.fx.stop(),Qn=t},st.fx.timer=function(e){e()&&st.timers.push(e)&&st.fx.start()},st.fx.interval=13,st.fx.start=function(){Kn||(Kn=setInterval(st.fx.tick,st.fx.interval))},st.fx.stop=function(){clearInterval(Kn),Kn=null},st.fx.speeds={slow:600,fast:200,_default:400},st.fx.step={},st.expr&&st.expr.filters&&(st.expr.filters.animated=function(e){return st.grep(st.timers,function(t){return e===t.elem}).length}),st.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){st.offset.setOffset(this,e,t)});var n,r,i={top:0,left:0},o=this[0],a=o&&o.ownerDocument;if(a)return n=a.documentElement,st.contains(n,o)?(o.getBoundingClientRect!==t&&(i=o.getBoundingClientRect()),r=z(a),{top:i.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:i.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):i},st.offset={setOffset:function(e,t,n){var r=st.css(e,"position");"static"===r&&(e.style.position="relative");var i,o,a=st(e),s=a.offset(),u=st.css(e,"top"),l=st.css(e,"left"),c=("absolute"===r||"fixed"===r)&&st.inArray("auto",[u,l])>-1,f={},p={};c?(p=a.position(),i=p.top,o=p.left):(i=parseFloat(u)||0,o=parseFloat(l)||0),st.isFunction(t)&&(t=t.call(e,n,s)),null!=t.top&&(f.top=t.top-s.top+i),null!=t.left&&(f.left=t.left-s.left+o),"using"in t?t.using.call(e,f):a.css(f)}},st.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return"fixed"===st.css(r,"position")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),st.nodeName(e[0],"html")||(n=e.offset()),n.top+=st.css(e[0],"borderTopWidth",!0),n.left+=st.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-st.css(r,"marginTop",!0),left:t.left-n.left-st.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var e=this.offsetParent||V.documentElement;e&&!st.nodeName(e,"html")&&"static"===st.css(e,"position");)e=e.offsetParent;return e||V.documentElement})}}),st.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,n){var r=/Y/.test(n);st.fn[e]=function(i){return st.access(this,function(e,i,o){var a=z(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?st(a).scrollLeft():o,r?o:st(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}}),st.each({Height:"height",Width:"width"},function(e,n){st.each({padding:"inner"+e,content:n,"":"outer"+e},function(r,i){st.fn[i]=function(i,o){var a=arguments.length&&(r||"boolean"!=typeof i),s=r||(i===!0||o===!0?"margin":"border");return st.access(this,function(n,r,i){var o;return st.isWindow(n)?n.document.documentElement["client"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body["scroll"+e],o["scroll"+e],n.body["offset"+e],o["offset"+e],o["client"+e])):i===t?st.css(n,r,s):st.style(n,r,i,s)},n,a?i:t,a,null)}})}),e.jQuery=e.$=st,"function"==typeof define&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return st})})(window);
4
+ //@ sourceMappingURL=jquery.min.map
@@ -0,0 +1,54 @@
1
+ # bower-angular-animate
2
+
3
+ This repo is for distribution on `bower`. The source for this module is in the
4
+ [main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate).
5
+ Please file issues and pull requests against that repo.
6
+
7
+ ## Install
8
+
9
+ Install with `bower`:
10
+
11
+ ```shell
12
+ bower install angular-animate
13
+ ```
14
+
15
+ Add a `<script>` to your `index.html`:
16
+
17
+ ```html
18
+ <script src="/bower_components/angular-animate/angular-animate.js"></script>
19
+ ```
20
+
21
+ And add `ngAnimate` as a dependency for your app:
22
+
23
+ ```javascript
24
+ angular.module('myApp', ['ngAnimate']);
25
+ ```
26
+
27
+ ## Documentation
28
+
29
+ Documentation is available on the
30
+ [AngularJS docs site](http://docs.angularjs.org/api/ngAnimate).
31
+
32
+ ## License
33
+
34
+ The MIT License
35
+
36
+ Copyright (c) 2010-2012 Google, Inc. http://angularjs.org
37
+
38
+ Permission is hereby granted, free of charge, to any person obtaining a copy
39
+ of this software and associated documentation files (the "Software"), to deal
40
+ in the Software without restriction, including without limitation the rights
41
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
42
+ copies of the Software, and to permit persons to whom the Software is
43
+ furnished to do so, subject to the following conditions:
44
+
45
+ The above copyright notice and this permission notice shall be included in
46
+ all copies or substantial portions of the Software.
47
+
48
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
49
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
50
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
51
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
52
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
53
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
54
+ THE SOFTWARE.
@@ -0,0 +1,1689 @@
1
+ /**
2
+ * @license AngularJS v1.2.21
3
+ * (c) 2010-2014 Google, Inc. http://angularjs.org
4
+ * License: MIT
5
+ */
6
+ (function(window, angular, undefined) {'use strict';
7
+
8
+ /* jshint maxlen: false */
9
+
10
+ /**
11
+ * @ngdoc module
12
+ * @name ngAnimate
13
+ * @description
14
+ *
15
+ * # ngAnimate
16
+ *
17
+ * The `ngAnimate` module provides support for JavaScript, CSS3 transition and CSS3 keyframe animation hooks within existing core and custom directives.
18
+ *
19
+ *
20
+ * <div doc-module-components="ngAnimate"></div>
21
+ *
22
+ * # Usage
23
+ *
24
+ * To see animations in action, all that is required is to define the appropriate CSS classes
25
+ * or to register a JavaScript animation via the myModule.animation() function. The directives that support animation automatically are:
26
+ * `ngRepeat`, `ngInclude`, `ngIf`, `ngSwitch`, `ngShow`, `ngHide`, `ngView` and `ngClass`. Custom directives can take advantage of animation
27
+ * by using the `$animate` service.
28
+ *
29
+ * Below is a more detailed breakdown of the supported animation events provided by pre-existing ng directives:
30
+ *
31
+ * | Directive | Supported Animations |
32
+ * |---------------------------------------------------------- |----------------------------------------------------|
33
+ * | {@link ng.directive:ngRepeat#usage_animations ngRepeat} | enter, leave and move |
34
+ * | {@link ngRoute.directive:ngView#usage_animations ngView} | enter and leave |
35
+ * | {@link ng.directive:ngInclude#usage_animations ngInclude} | enter and leave |
36
+ * | {@link ng.directive:ngSwitch#usage_animations ngSwitch} | enter and leave |
37
+ * | {@link ng.directive:ngIf#usage_animations ngIf} | enter and leave |
38
+ * | {@link ng.directive:ngClass#usage_animations ngClass} | add and remove |
39
+ * | {@link ng.directive:ngShow#usage_animations ngShow & ngHide} | add and remove (the ng-hide class value) |
40
+ * | {@link ng.directive:form#usage_animations form} | add and remove (dirty, pristine, valid, invalid & all other validations) |
41
+ * | {@link ng.directive:ngModel#usage_animations ngModel} | add and remove (dirty, pristine, valid, invalid & all other validations) |
42
+ *
43
+ * You can find out more information about animations upon visiting each directive page.
44
+ *
45
+ * Below is an example of how to apply animations to a directive that supports animation hooks:
46
+ *
47
+ * ```html
48
+ * <style type="text/css">
49
+ * .slide.ng-enter, .slide.ng-leave {
50
+ * -webkit-transition:0.5s linear all;
51
+ * transition:0.5s linear all;
52
+ * }
53
+ *
54
+ * .slide.ng-enter { } /&#42; starting animations for enter &#42;/
55
+ * .slide.ng-enter.ng-enter-active { } /&#42; terminal animations for enter &#42;/
56
+ * .slide.ng-leave { } /&#42; starting animations for leave &#42;/
57
+ * .slide.ng-leave.ng-leave-active { } /&#42; terminal animations for leave &#42;/
58
+ * </style>
59
+ *
60
+ * <!--
61
+ * the animate service will automatically add .ng-enter and .ng-leave to the element
62
+ * to trigger the CSS transition/animations
63
+ * -->
64
+ * <ANY class="slide" ng-include="..."></ANY>
65
+ * ```
66
+ *
67
+ * Keep in mind that, by default, if an animation is running, any child elements cannot be animated
68
+ * until the parent element's animation has completed. This blocking feature can be overridden by
69
+ * placing the `ng-animate-children` attribute on a parent container tag.
70
+ *
71
+ * ```html
72
+ * <div class="slide-animation" ng-if="on" ng-animate-children>
73
+ * <div class="fade-animation" ng-if="on">
74
+ * <div class="explode-animation" ng-if="on">
75
+ * ...
76
+ * </div>
77
+ * </div>
78
+ * </div>
79
+ * ```
80
+ *
81
+ * When the `on` expression value changes and an animation is triggered then each of the elements within
82
+ * will all animate without the block being applied to child elements.
83
+ *
84
+ * <h2>CSS-defined Animations</h2>
85
+ * The animate service will automatically apply two CSS classes to the animated element and these two CSS classes
86
+ * are designed to contain the start and end CSS styling. Both CSS transitions and keyframe animations are supported
87
+ * and can be used to play along with this naming structure.
88
+ *
89
+ * The following code below demonstrates how to perform animations using **CSS transitions** with Angular:
90
+ *
91
+ * ```html
92
+ * <style type="text/css">
93
+ * /&#42;
94
+ * The animate class is apart of the element and the ng-enter class
95
+ * is attached to the element once the enter animation event is triggered
96
+ * &#42;/
97
+ * .reveal-animation.ng-enter {
98
+ * -webkit-transition: 1s linear all; /&#42; Safari/Chrome &#42;/
99
+ * transition: 1s linear all; /&#42; All other modern browsers and IE10+ &#42;/
100
+ *
101
+ * /&#42; The animation preparation code &#42;/
102
+ * opacity: 0;
103
+ * }
104
+ *
105
+ * /&#42;
106
+ * Keep in mind that you want to combine both CSS
107
+ * classes together to avoid any CSS-specificity
108
+ * conflicts
109
+ * &#42;/
110
+ * .reveal-animation.ng-enter.ng-enter-active {
111
+ * /&#42; The animation code itself &#42;/
112
+ * opacity: 1;
113
+ * }
114
+ * </style>
115
+ *
116
+ * <div class="view-container">
117
+ * <div ng-view class="reveal-animation"></div>
118
+ * </div>
119
+ * ```
120
+ *
121
+ * The following code below demonstrates how to perform animations using **CSS animations** with Angular:
122
+ *
123
+ * ```html
124
+ * <style type="text/css">
125
+ * .reveal-animation.ng-enter {
126
+ * -webkit-animation: enter_sequence 1s linear; /&#42; Safari/Chrome &#42;/
127
+ * animation: enter_sequence 1s linear; /&#42; IE10+ and Future Browsers &#42;/
128
+ * }
129
+ * @-webkit-keyframes enter_sequence {
130
+ * from { opacity:0; }
131
+ * to { opacity:1; }
132
+ * }
133
+ * @keyframes enter_sequence {
134
+ * from { opacity:0; }
135
+ * to { opacity:1; }
136
+ * }
137
+ * </style>
138
+ *
139
+ * <div class="view-container">
140
+ * <div ng-view class="reveal-animation"></div>
141
+ * </div>
142
+ * ```
143
+ *
144
+ * Both CSS3 animations and transitions can be used together and the animate service will figure out the correct duration and delay timing.
145
+ *
146
+ * Upon DOM mutation, the event class is added first (something like `ng-enter`), then the browser prepares itself to add
147
+ * the active class (in this case `ng-enter-active`) which then triggers the animation. The animation module will automatically
148
+ * detect the CSS code to determine when the animation ends. Once the animation is over then both CSS classes will be
149
+ * removed from the DOM. If a browser does not support CSS transitions or CSS animations then the animation will start and end
150
+ * immediately resulting in a DOM element that is at its final state. This final state is when the DOM element
151
+ * has no CSS transition/animation classes applied to it.
152
+ *
153
+ * <h3>CSS Staggering Animations</h3>
154
+ * A Staggering animation is a collection of animations that are issued with a slight delay in between each successive operation resulting in a
155
+ * curtain-like effect. The ngAnimate module, as of 1.2.0, supports staggering animations and the stagger effect can be
156
+ * performed by creating a **ng-EVENT-stagger** CSS class and attaching that class to the base CSS class used for
157
+ * the animation. The style property expected within the stagger class can either be a **transition-delay** or an
158
+ * **animation-delay** property (or both if your animation contains both transitions and keyframe animations).
159
+ *
160
+ * ```css
161
+ * .my-animation.ng-enter {
162
+ * /&#42; standard transition code &#42;/
163
+ * -webkit-transition: 1s linear all;
164
+ * transition: 1s linear all;
165
+ * opacity:0;
166
+ * }
167
+ * .my-animation.ng-enter-stagger {
168
+ * /&#42; this will have a 100ms delay between each successive leave animation &#42;/
169
+ * -webkit-transition-delay: 0.1s;
170
+ * transition-delay: 0.1s;
171
+ *
172
+ * /&#42; in case the stagger doesn't work then these two values
173
+ * must be set to 0 to avoid an accidental CSS inheritance &#42;/
174
+ * -webkit-transition-duration: 0s;
175
+ * transition-duration: 0s;
176
+ * }
177
+ * .my-animation.ng-enter.ng-enter-active {
178
+ * /&#42; standard transition styles &#42;/
179
+ * opacity:1;
180
+ * }
181
+ * ```
182
+ *
183
+ * Staggering animations work by default in ngRepeat (so long as the CSS class is defined). Outside of ngRepeat, to use staggering animations
184
+ * on your own, they can be triggered by firing multiple calls to the same event on $animate. However, the restrictions surrounding this
185
+ * are that each of the elements must have the same CSS className value as well as the same parent element. A stagger operation
186
+ * will also be reset if more than 10ms has passed after the last animation has been fired.
187
+ *
188
+ * The following code will issue the **ng-leave-stagger** event on the element provided:
189
+ *
190
+ * ```js
191
+ * var kids = parent.children();
192
+ *
193
+ * $animate.leave(kids[0]); //stagger index=0
194
+ * $animate.leave(kids[1]); //stagger index=1
195
+ * $animate.leave(kids[2]); //stagger index=2
196
+ * $animate.leave(kids[3]); //stagger index=3
197
+ * $animate.leave(kids[4]); //stagger index=4
198
+ *
199
+ * $timeout(function() {
200
+ * //stagger has reset itself
201
+ * $animate.leave(kids[5]); //stagger index=0
202
+ * $animate.leave(kids[6]); //stagger index=1
203
+ * }, 100, false);
204
+ * ```
205
+ *
206
+ * Stagger animations are currently only supported within CSS-defined animations.
207
+ *
208
+ * <h2>JavaScript-defined Animations</h2>
209
+ * In the event that you do not want to use CSS3 transitions or CSS3 animations or if you wish to offer animations on browsers that do not
210
+ * yet support CSS transitions/animations, then you can make use of JavaScript animations defined inside of your AngularJS module.
211
+ *
212
+ * ```js
213
+ * //!annotate="YourApp" Your AngularJS Module|Replace this or ngModule with the module that you used to define your application.
214
+ * var ngModule = angular.module('YourApp', ['ngAnimate']);
215
+ * ngModule.animation('.my-crazy-animation', function() {
216
+ * return {
217
+ * enter: function(element, done) {
218
+ * //run the animation here and call done when the animation is complete
219
+ * return function(cancelled) {
220
+ * //this (optional) function will be called when the animation
221
+ * //completes or when the animation is cancelled (the cancelled
222
+ * //flag will be set to true if cancelled).
223
+ * };
224
+ * },
225
+ * leave: function(element, done) { },
226
+ * move: function(element, done) { },
227
+ *
228
+ * //animation that can be triggered before the class is added
229
+ * beforeAddClass: function(element, className, done) { },
230
+ *
231
+ * //animation that can be triggered after the class is added
232
+ * addClass: function(element, className, done) { },
233
+ *
234
+ * //animation that can be triggered before the class is removed
235
+ * beforeRemoveClass: function(element, className, done) { },
236
+ *
237
+ * //animation that can be triggered after the class is removed
238
+ * removeClass: function(element, className, done) { }
239
+ * };
240
+ * });
241
+ * ```
242
+ *
243
+ * JavaScript-defined animations are created with a CSS-like class selector and a collection of events which are set to run
244
+ * a javascript callback function. When an animation is triggered, $animate will look for a matching animation which fits
245
+ * the element's CSS class attribute value and then run the matching animation event function (if found).
246
+ * In other words, if the CSS classes present on the animated element match any of the JavaScript animations then the callback function will
247
+ * be executed. It should be also noted that only simple, single class selectors are allowed (compound class selectors are not supported).
248
+ *
249
+ * Within a JavaScript animation, an object containing various event callback animation functions is expected to be returned.
250
+ * As explained above, these callbacks are triggered based on the animation event. Therefore if an enter animation is run,
251
+ * and the JavaScript animation is found, then the enter callback will handle that animation (in addition to the CSS keyframe animation
252
+ * or transition code that is defined via a stylesheet).
253
+ *
254
+ */
255
+
256
+ angular.module('ngAnimate', ['ng'])
257
+
258
+ /**
259
+ * @ngdoc provider
260
+ * @name $animateProvider
261
+ * @description
262
+ *
263
+ * The `$animateProvider` allows developers to register JavaScript animation event handlers directly inside of a module.
264
+ * When an animation is triggered, the $animate service will query the $animate service to find any animations that match
265
+ * the provided name value.
266
+ *
267
+ * Requires the {@link ngAnimate `ngAnimate`} module to be installed.
268
+ *
269
+ * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
270
+ *
271
+ */
272
+ .directive('ngAnimateChildren', function() {
273
+ var NG_ANIMATE_CHILDREN = '$$ngAnimateChildren';
274
+ return function(scope, element, attrs) {
275
+ var val = attrs.ngAnimateChildren;
276
+ if(angular.isString(val) && val.length === 0) { //empty attribute
277
+ element.data(NG_ANIMATE_CHILDREN, true);
278
+ } else {
279
+ scope.$watch(val, function(value) {
280
+ element.data(NG_ANIMATE_CHILDREN, !!value);
281
+ });
282
+ }
283
+ };
284
+ })
285
+
286
+ //this private service is only used within CSS-enabled animations
287
+ //IE8 + IE9 do not support rAF natively, but that is fine since they
288
+ //also don't support transitions and keyframes which means that the code
289
+ //below will never be used by the two browsers.
290
+ .factory('$$animateReflow', ['$$rAF', '$document', function($$rAF, $document) {
291
+ var bod = $document[0].body;
292
+ return function(fn) {
293
+ //the returned function acts as the cancellation function
294
+ return $$rAF(function() {
295
+ //the line below will force the browser to perform a repaint
296
+ //so that all the animated elements within the animation frame
297
+ //will be properly updated and drawn on screen. This is
298
+ //required to perform multi-class CSS based animations with
299
+ //Firefox. DO NOT REMOVE THIS LINE.
300
+ var a = bod.offsetWidth + 1;
301
+ fn();
302
+ });
303
+ };
304
+ }])
305
+
306
+ .config(['$provide', '$animateProvider', function($provide, $animateProvider) {
307
+ var noop = angular.noop;
308
+ var forEach = angular.forEach;
309
+ var selectors = $animateProvider.$$selectors;
310
+
311
+ var ELEMENT_NODE = 1;
312
+ var NG_ANIMATE_STATE = '$$ngAnimateState';
313
+ var NG_ANIMATE_CHILDREN = '$$ngAnimateChildren';
314
+ var NG_ANIMATE_CLASS_NAME = 'ng-animate';
315
+ var rootAnimateState = {running: true};
316
+
317
+ function extractElementNode(element) {
318
+ for(var i = 0; i < element.length; i++) {
319
+ var elm = element[i];
320
+ if(elm.nodeType == ELEMENT_NODE) {
321
+ return elm;
322
+ }
323
+ }
324
+ }
325
+
326
+ function prepareElement(element) {
327
+ return element && angular.element(element);
328
+ }
329
+
330
+ function stripCommentsFromElement(element) {
331
+ return angular.element(extractElementNode(element));
332
+ }
333
+
334
+ function isMatchingElement(elm1, elm2) {
335
+ return extractElementNode(elm1) == extractElementNode(elm2);
336
+ }
337
+
338
+ $provide.decorator('$animate', ['$delegate', '$injector', '$sniffer', '$rootElement', '$$asyncCallback', '$rootScope', '$document',
339
+ function($delegate, $injector, $sniffer, $rootElement, $$asyncCallback, $rootScope, $document) {
340
+
341
+ var globalAnimationCounter = 0;
342
+ $rootElement.data(NG_ANIMATE_STATE, rootAnimateState);
343
+
344
+ // disable animations during bootstrap, but once we bootstrapped, wait again
345
+ // for another digest until enabling animations. The reason why we digest twice
346
+ // is because all structural animations (enter, leave and move) all perform a
347
+ // post digest operation before animating. If we only wait for a single digest
348
+ // to pass then the structural animation would render its animation on page load.
349
+ // (which is what we're trying to avoid when the application first boots up.)
350
+ $rootScope.$$postDigest(function() {
351
+ $rootScope.$$postDigest(function() {
352
+ rootAnimateState.running = false;
353
+ });
354
+ });
355
+
356
+ var classNameFilter = $animateProvider.classNameFilter();
357
+ var isAnimatableClassName = !classNameFilter
358
+ ? function() { return true; }
359
+ : function(className) {
360
+ return classNameFilter.test(className);
361
+ };
362
+
363
+ function blockElementAnimations(element) {
364
+ var data = element.data(NG_ANIMATE_STATE) || {};
365
+ data.running = true;
366
+ element.data(NG_ANIMATE_STATE, data);
367
+ }
368
+
369
+ function lookup(name) {
370
+ if (name) {
371
+ var matches = [],
372
+ flagMap = {},
373
+ classes = name.substr(1).split('.');
374
+
375
+ //the empty string value is the default animation
376
+ //operation which performs CSS transition and keyframe
377
+ //animations sniffing. This is always included for each
378
+ //element animation procedure if the browser supports
379
+ //transitions and/or keyframe animations. The default
380
+ //animation is added to the top of the list to prevent
381
+ //any previous animations from affecting the element styling
382
+ //prior to the element being animated.
383
+ if ($sniffer.transitions || $sniffer.animations) {
384
+ matches.push($injector.get(selectors['']));
385
+ }
386
+
387
+ for(var i=0; i < classes.length; i++) {
388
+ var klass = classes[i],
389
+ selectorFactoryName = selectors[klass];
390
+ if(selectorFactoryName && !flagMap[klass]) {
391
+ matches.push($injector.get(selectorFactoryName));
392
+ flagMap[klass] = true;
393
+ }
394
+ }
395
+ return matches;
396
+ }
397
+ }
398
+
399
+ function animationRunner(element, animationEvent, className) {
400
+ //transcluded directives may sometimes fire an animation using only comment nodes
401
+ //best to catch this early on to prevent any animation operations from occurring
402
+ var node = element[0];
403
+ if(!node) {
404
+ return;
405
+ }
406
+
407
+ var isSetClassOperation = animationEvent == 'setClass';
408
+ var isClassBased = isSetClassOperation ||
409
+ animationEvent == 'addClass' ||
410
+ animationEvent == 'removeClass';
411
+
412
+ var classNameAdd, classNameRemove;
413
+ if(angular.isArray(className)) {
414
+ classNameAdd = className[0];
415
+ classNameRemove = className[1];
416
+ className = classNameAdd + ' ' + classNameRemove;
417
+ }
418
+
419
+ var currentClassName = element.attr('class');
420
+ var classes = currentClassName + ' ' + className;
421
+ if(!isAnimatableClassName(classes)) {
422
+ return;
423
+ }
424
+
425
+ var beforeComplete = noop,
426
+ beforeCancel = [],
427
+ before = [],
428
+ afterComplete = noop,
429
+ afterCancel = [],
430
+ after = [];
431
+
432
+ var animationLookup = (' ' + classes).replace(/\s+/g,'.');
433
+ forEach(lookup(animationLookup), function(animationFactory) {
434
+ var created = registerAnimation(animationFactory, animationEvent);
435
+ if(!created && isSetClassOperation) {
436
+ registerAnimation(animationFactory, 'addClass');
437
+ registerAnimation(animationFactory, 'removeClass');
438
+ }
439
+ });
440
+
441
+ function registerAnimation(animationFactory, event) {
442
+ var afterFn = animationFactory[event];
443
+ var beforeFn = animationFactory['before' + event.charAt(0).toUpperCase() + event.substr(1)];
444
+ if(afterFn || beforeFn) {
445
+ if(event == 'leave') {
446
+ beforeFn = afterFn;
447
+ //when set as null then animation knows to skip this phase
448
+ afterFn = null;
449
+ }
450
+ after.push({
451
+ event : event, fn : afterFn
452
+ });
453
+ before.push({
454
+ event : event, fn : beforeFn
455
+ });
456
+ return true;
457
+ }
458
+ }
459
+
460
+ function run(fns, cancellations, allCompleteFn) {
461
+ var animations = [];
462
+ forEach(fns, function(animation) {
463
+ animation.fn && animations.push(animation);
464
+ });
465
+
466
+ var count = 0;
467
+ function afterAnimationComplete(index) {
468
+ if(cancellations) {
469
+ (cancellations[index] || noop)();
470
+ if(++count < animations.length) return;
471
+ cancellations = null;
472
+ }
473
+ allCompleteFn();
474
+ }
475
+
476
+ //The code below adds directly to the array in order to work with
477
+ //both sync and async animations. Sync animations are when the done()
478
+ //operation is called right away. DO NOT REFACTOR!
479
+ forEach(animations, function(animation, index) {
480
+ var progress = function() {
481
+ afterAnimationComplete(index);
482
+ };
483
+ switch(animation.event) {
484
+ case 'setClass':
485
+ cancellations.push(animation.fn(element, classNameAdd, classNameRemove, progress));
486
+ break;
487
+ case 'addClass':
488
+ cancellations.push(animation.fn(element, classNameAdd || className, progress));
489
+ break;
490
+ case 'removeClass':
491
+ cancellations.push(animation.fn(element, classNameRemove || className, progress));
492
+ break;
493
+ default:
494
+ cancellations.push(animation.fn(element, progress));
495
+ break;
496
+ }
497
+ });
498
+
499
+ if(cancellations && cancellations.length === 0) {
500
+ allCompleteFn();
501
+ }
502
+ }
503
+
504
+ return {
505
+ node : node,
506
+ event : animationEvent,
507
+ className : className,
508
+ isClassBased : isClassBased,
509
+ isSetClassOperation : isSetClassOperation,
510
+ before : function(allCompleteFn) {
511
+ beforeComplete = allCompleteFn;
512
+ run(before, beforeCancel, function() {
513
+ beforeComplete = noop;
514
+ allCompleteFn();
515
+ });
516
+ },
517
+ after : function(allCompleteFn) {
518
+ afterComplete = allCompleteFn;
519
+ run(after, afterCancel, function() {
520
+ afterComplete = noop;
521
+ allCompleteFn();
522
+ });
523
+ },
524
+ cancel : function() {
525
+ if(beforeCancel) {
526
+ forEach(beforeCancel, function(cancelFn) {
527
+ (cancelFn || noop)(true);
528
+ });
529
+ beforeComplete(true);
530
+ }
531
+ if(afterCancel) {
532
+ forEach(afterCancel, function(cancelFn) {
533
+ (cancelFn || noop)(true);
534
+ });
535
+ afterComplete(true);
536
+ }
537
+ }
538
+ };
539
+ }
540
+
541
+ /**
542
+ * @ngdoc service
543
+ * @name $animate
544
+ * @kind function
545
+ *
546
+ * @description
547
+ * The `$animate` service provides animation detection support while performing DOM operations (enter, leave and move) as well as during addClass and removeClass operations.
548
+ * When any of these operations are run, the $animate service
549
+ * will examine any JavaScript-defined animations (which are defined by using the $animateProvider provider object)
550
+ * as well as any CSS-defined animations against the CSS classes present on the element once the DOM operation is run.
551
+ *
552
+ * The `$animate` service is used behind the scenes with pre-existing directives and animation with these directives
553
+ * will work out of the box without any extra configuration.
554
+ *
555
+ * Requires the {@link ngAnimate `ngAnimate`} module to be installed.
556
+ *
557
+ * Please visit the {@link ngAnimate `ngAnimate`} module overview page learn more about how to use animations in your application.
558
+ *
559
+ */
560
+ return {
561
+ /**
562
+ * @ngdoc method
563
+ * @name $animate#enter
564
+ * @kind function
565
+ *
566
+ * @description
567
+ * Appends the element to the parentElement element that resides in the document and then runs the enter animation. Once
568
+ * the animation is started, the following CSS classes will be present on the element for the duration of the animation:
569
+ *
570
+ * Below is a breakdown of each step that occurs during enter animation:
571
+ *
572
+ * | Animation Step | What the element class attribute looks like |
573
+ * |----------------------------------------------------------------------------------------------|---------------------------------------------|
574
+ * | 1. $animate.enter(...) is called | class="my-animation" |
575
+ * | 2. element is inserted into the parentElement element or beside the afterElement element | class="my-animation" |
576
+ * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
577
+ * | 4. the .ng-enter class is added to the element | class="my-animation ng-animate ng-enter" |
578
+ * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-enter" |
579
+ * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-enter" |
580
+ * | 7. the .ng-enter-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" |
581
+ * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-enter ng-enter-active" |
582
+ * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
583
+ * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" |
584
+ *
585
+ * @param {DOMElement} element the element that will be the focus of the enter animation
586
+ * @param {DOMElement} parentElement the parent element of the element that will be the focus of the enter animation
587
+ * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the enter animation
588
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
589
+ */
590
+ enter : function(element, parentElement, afterElement, doneCallback) {
591
+ element = angular.element(element);
592
+ parentElement = prepareElement(parentElement);
593
+ afterElement = prepareElement(afterElement);
594
+
595
+ blockElementAnimations(element);
596
+ $delegate.enter(element, parentElement, afterElement);
597
+ $rootScope.$$postDigest(function() {
598
+ element = stripCommentsFromElement(element);
599
+ performAnimation('enter', 'ng-enter', element, parentElement, afterElement, noop, doneCallback);
600
+ });
601
+ },
602
+
603
+ /**
604
+ * @ngdoc method
605
+ * @name $animate#leave
606
+ * @kind function
607
+ *
608
+ * @description
609
+ * Runs the leave animation operation and, upon completion, removes the element from the DOM. Once
610
+ * the animation is started, the following CSS classes will be added for the duration of the animation:
611
+ *
612
+ * Below is a breakdown of each step that occurs during leave animation:
613
+ *
614
+ * | Animation Step | What the element class attribute looks like |
615
+ * |----------------------------------------------------------------------------------------------|---------------------------------------------|
616
+ * | 1. $animate.leave(...) is called | class="my-animation" |
617
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
618
+ * | 3. the .ng-leave class is added to the element | class="my-animation ng-animate ng-leave" |
619
+ * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-leave" |
620
+ * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-leave" |
621
+ * | 6. the .ng-leave-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" |
622
+ * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-leave ng-leave-active" |
623
+ * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
624
+ * | 9. The element is removed from the DOM | ... |
625
+ * | 10. The doneCallback() callback is fired (if provided) | ... |
626
+ *
627
+ * @param {DOMElement} element the element that will be the focus of the leave animation
628
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
629
+ */
630
+ leave : function(element, doneCallback) {
631
+ element = angular.element(element);
632
+ cancelChildAnimations(element);
633
+ blockElementAnimations(element);
634
+ $rootScope.$$postDigest(function() {
635
+ performAnimation('leave', 'ng-leave', stripCommentsFromElement(element), null, null, function() {
636
+ $delegate.leave(element);
637
+ }, doneCallback);
638
+ });
639
+ },
640
+
641
+ /**
642
+ * @ngdoc method
643
+ * @name $animate#move
644
+ * @kind function
645
+ *
646
+ * @description
647
+ * Fires the move DOM operation. Just before the animation starts, the animate service will either append it into the parentElement container or
648
+ * add the element directly after the afterElement element if present. Then the move animation will be run. Once
649
+ * the animation is started, the following CSS classes will be added for the duration of the animation:
650
+ *
651
+ * Below is a breakdown of each step that occurs during move animation:
652
+ *
653
+ * | Animation Step | What the element class attribute looks like |
654
+ * |----------------------------------------------------------------------------------------------|---------------------------------------------|
655
+ * | 1. $animate.move(...) is called | class="my-animation" |
656
+ * | 2. element is moved into the parentElement element or beside the afterElement element | class="my-animation" |
657
+ * | 3. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
658
+ * | 4. the .ng-move class is added to the element | class="my-animation ng-animate ng-move" |
659
+ * | 5. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate ng-move" |
660
+ * | 6. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate ng-move" |
661
+ * | 7. the .ng-move-active and .ng-animate-active classes is added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" |
662
+ * | 8. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active ng-move ng-move-active" |
663
+ * | 9. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
664
+ * | 10. The doneCallback() callback is fired (if provided) | class="my-animation" |
665
+ *
666
+ * @param {DOMElement} element the element that will be the focus of the move animation
667
+ * @param {DOMElement} parentElement the parentElement element of the element that will be the focus of the move animation
668
+ * @param {DOMElement} afterElement the sibling element (which is the previous element) of the element that will be the focus of the move animation
669
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
670
+ */
671
+ move : function(element, parentElement, afterElement, doneCallback) {
672
+ element = angular.element(element);
673
+ parentElement = prepareElement(parentElement);
674
+ afterElement = prepareElement(afterElement);
675
+
676
+ cancelChildAnimations(element);
677
+ blockElementAnimations(element);
678
+ $delegate.move(element, parentElement, afterElement);
679
+ $rootScope.$$postDigest(function() {
680
+ element = stripCommentsFromElement(element);
681
+ performAnimation('move', 'ng-move', element, parentElement, afterElement, noop, doneCallback);
682
+ });
683
+ },
684
+
685
+ /**
686
+ * @ngdoc method
687
+ * @name $animate#addClass
688
+ *
689
+ * @description
690
+ * Triggers a custom animation event based off the className variable and then attaches the className value to the element as a CSS class.
691
+ * Unlike the other animation methods, the animate service will suffix the className value with {@type -add} in order to provide
692
+ * the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if no CSS transitions
693
+ * or keyframes are defined on the -add or base CSS class).
694
+ *
695
+ * Below is a breakdown of each step that occurs during addClass animation:
696
+ *
697
+ * | Animation Step | What the element class attribute looks like |
698
+ * |------------------------------------------------------------------------------------------------|---------------------------------------------|
699
+ * | 1. $animate.addClass(element, 'super') is called | class="my-animation" |
700
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation ng-animate" |
701
+ * | 3. the .super-add class are added to the element | class="my-animation ng-animate super-add" |
702
+ * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation ng-animate super-add" |
703
+ * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation ng-animate super-add" |
704
+ * | 6. the .super, .super-add-active and .ng-animate-active classes are added (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super super-add super-add-active" |
705
+ * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation super super-add super-add-active" |
706
+ * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation super" |
707
+ * | 9. The super class is kept on the element | class="my-animation super" |
708
+ * | 10. The doneCallback() callback is fired (if provided) | class="my-animation super" |
709
+ *
710
+ * @param {DOMElement} element the element that will be animated
711
+ * @param {string} className the CSS class that will be added to the element and then animated
712
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
713
+ */
714
+ addClass : function(element, className, doneCallback) {
715
+ element = angular.element(element);
716
+ element = stripCommentsFromElement(element);
717
+ performAnimation('addClass', className, element, null, null, function() {
718
+ $delegate.addClass(element, className);
719
+ }, doneCallback);
720
+ },
721
+
722
+ /**
723
+ * @ngdoc method
724
+ * @name $animate#removeClass
725
+ *
726
+ * @description
727
+ * Triggers a custom animation event based off the className variable and then removes the CSS class provided by the className value
728
+ * from the element. Unlike the other animation methods, the animate service will suffix the className value with {@type -remove} in
729
+ * order to provide the animate service the setup and active CSS classes in order to trigger the animation (this will be skipped if
730
+ * no CSS transitions or keyframes are defined on the -remove or base CSS classes).
731
+ *
732
+ * Below is a breakdown of each step that occurs during removeClass animation:
733
+ *
734
+ * | Animation Step | What the element class attribute looks like |
735
+ * |-----------------------------------------------------------------------------------------------|---------------------------------------------|
736
+ * | 1. $animate.removeClass(element, 'super') is called | class="my-animation super" |
737
+ * | 2. $animate runs any JavaScript-defined animations on the element | class="my-animation super ng-animate" |
738
+ * | 3. the .super-remove class are added to the element | class="my-animation super ng-animate super-remove"|
739
+ * | 4. $animate scans the element styles to get the CSS transition/animation duration and delay | class="my-animation super ng-animate super-remove" |
740
+ * | 5. $animate waits for 10ms (this performs a reflow) | class="my-animation super ng-animate super-remove" |
741
+ * | 6. the .super-remove-active and .ng-animate-active classes are added and .super is removed (this triggers the CSS transition/animation) | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" |
742
+ * | 7. $animate waits for X milliseconds for the animation to complete | class="my-animation ng-animate ng-animate-active super-remove super-remove-active" |
743
+ * | 8. The animation ends and all generated CSS classes are removed from the element | class="my-animation" |
744
+ * | 9. The doneCallback() callback is fired (if provided) | class="my-animation" |
745
+ *
746
+ *
747
+ * @param {DOMElement} element the element that will be animated
748
+ * @param {string} className the CSS class that will be animated and then removed from the element
749
+ * @param {function()=} doneCallback the callback function that will be called once the animation is complete
750
+ */
751
+ removeClass : function(element, className, doneCallback) {
752
+ element = angular.element(element);
753
+ element = stripCommentsFromElement(element);
754
+ performAnimation('removeClass', className, element, null, null, function() {
755
+ $delegate.removeClass(element, className);
756
+ }, doneCallback);
757
+ },
758
+
759
+ /**
760
+ *
761
+ * @ngdoc function
762
+ * @name $animate#setClass
763
+ * @function
764
+ * @description Adds and/or removes the given CSS classes to and from the element.
765
+ * Once complete, the done() callback will be fired (if provided).
766
+ * @param {DOMElement} element the element which will its CSS classes changed
767
+ * removed from it
768
+ * @param {string} add the CSS classes which will be added to the element
769
+ * @param {string} remove the CSS class which will be removed from the element
770
+ * @param {Function=} done the callback function (if provided) that will be fired after the
771
+ * CSS classes have been set on the element
772
+ */
773
+ setClass : function(element, add, remove, doneCallback) {
774
+ element = angular.element(element);
775
+ element = stripCommentsFromElement(element);
776
+ performAnimation('setClass', [add, remove], element, null, null, function() {
777
+ $delegate.setClass(element, add, remove);
778
+ }, doneCallback);
779
+ },
780
+
781
+ /**
782
+ * @ngdoc method
783
+ * @name $animate#enabled
784
+ * @kind function
785
+ *
786
+ * @param {boolean=} value If provided then set the animation on or off.
787
+ * @param {DOMElement=} element If provided then the element will be used to represent the enable/disable operation
788
+ * @return {boolean} Current animation state.
789
+ *
790
+ * @description
791
+ * Globally enables/disables animations.
792
+ *
793
+ */
794
+ enabled : function(value, element) {
795
+ switch(arguments.length) {
796
+ case 2:
797
+ if(value) {
798
+ cleanup(element);
799
+ } else {
800
+ var data = element.data(NG_ANIMATE_STATE) || {};
801
+ data.disabled = true;
802
+ element.data(NG_ANIMATE_STATE, data);
803
+ }
804
+ break;
805
+
806
+ case 1:
807
+ rootAnimateState.disabled = !value;
808
+ break;
809
+
810
+ default:
811
+ value = !rootAnimateState.disabled;
812
+ break;
813
+ }
814
+ return !!value;
815
+ }
816
+ };
817
+
818
+ /*
819
+ all animations call this shared animation triggering function internally.
820
+ The animationEvent variable refers to the JavaScript animation event that will be triggered
821
+ and the className value is the name of the animation that will be applied within the
822
+ CSS code. Element, parentElement and afterElement are provided DOM elements for the animation
823
+ and the onComplete callback will be fired once the animation is fully complete.
824
+ */
825
+ function performAnimation(animationEvent, className, element, parentElement, afterElement, domOperation, doneCallback) {
826
+
827
+ var runner = animationRunner(element, animationEvent, className);
828
+ if(!runner) {
829
+ fireDOMOperation();
830
+ fireBeforeCallbackAsync();
831
+ fireAfterCallbackAsync();
832
+ closeAnimation();
833
+ return;
834
+ }
835
+
836
+ className = runner.className;
837
+ var elementEvents = angular.element._data(runner.node);
838
+ elementEvents = elementEvents && elementEvents.events;
839
+
840
+ if (!parentElement) {
841
+ parentElement = afterElement ? afterElement.parent() : element.parent();
842
+ }
843
+
844
+ var ngAnimateState = element.data(NG_ANIMATE_STATE) || {};
845
+ var runningAnimations = ngAnimateState.active || {};
846
+ var totalActiveAnimations = ngAnimateState.totalActive || 0;
847
+ var lastAnimation = ngAnimateState.last;
848
+
849
+ //only allow animations if the currently running animation is not structural
850
+ //or if there is no animation running at all
851
+ var skipAnimations;
852
+ if (runner.isClassBased) {
853
+ skipAnimations = ngAnimateState.running ||
854
+ ngAnimateState.disabled ||
855
+ (lastAnimation && !lastAnimation.isClassBased);
856
+ }
857
+
858
+ //skip the animation if animations are disabled, a parent is already being animated,
859
+ //the element is not currently attached to the document body or then completely close
860
+ //the animation if any matching animations are not found at all.
861
+ //NOTE: IE8 + IE9 should close properly (run closeAnimation()) in case an animation was found.
862
+ if (skipAnimations || animationsDisabled(element, parentElement)) {
863
+ fireDOMOperation();
864
+ fireBeforeCallbackAsync();
865
+ fireAfterCallbackAsync();
866
+ closeAnimation();
867
+ return;
868
+ }
869
+
870
+ var skipAnimation = false;
871
+ if(totalActiveAnimations > 0) {
872
+ var animationsToCancel = [];
873
+ if(!runner.isClassBased) {
874
+ if(animationEvent == 'leave' && runningAnimations['ng-leave']) {
875
+ skipAnimation = true;
876
+ } else {
877
+ //cancel all animations when a structural animation takes place
878
+ for(var klass in runningAnimations) {
879
+ animationsToCancel.push(runningAnimations[klass]);
880
+ cleanup(element, klass);
881
+ }
882
+ runningAnimations = {};
883
+ totalActiveAnimations = 0;
884
+ }
885
+ } else if(lastAnimation.event == 'setClass') {
886
+ animationsToCancel.push(lastAnimation);
887
+ cleanup(element, className);
888
+ }
889
+ else if(runningAnimations[className]) {
890
+ var current = runningAnimations[className];
891
+ if(current.event == animationEvent) {
892
+ skipAnimation = true;
893
+ } else {
894
+ animationsToCancel.push(current);
895
+ cleanup(element, className);
896
+ }
897
+ }
898
+
899
+ if(animationsToCancel.length > 0) {
900
+ forEach(animationsToCancel, function(operation) {
901
+ operation.cancel();
902
+ });
903
+ }
904
+ }
905
+
906
+ if(runner.isClassBased && !runner.isSetClassOperation && !skipAnimation) {
907
+ skipAnimation = (animationEvent == 'addClass') == element.hasClass(className); //opposite of XOR
908
+ }
909
+
910
+ if(skipAnimation) {
911
+ fireDOMOperation();
912
+ fireBeforeCallbackAsync();
913
+ fireAfterCallbackAsync();
914
+ fireDoneCallbackAsync();
915
+ return;
916
+ }
917
+
918
+ if(animationEvent == 'leave') {
919
+ //there's no need to ever remove the listener since the element
920
+ //will be removed (destroyed) after the leave animation ends or
921
+ //is cancelled midway
922
+ element.one('$destroy', function(e) {
923
+ var element = angular.element(this);
924
+ var state = element.data(NG_ANIMATE_STATE);
925
+ if(state) {
926
+ var activeLeaveAnimation = state.active['ng-leave'];
927
+ if(activeLeaveAnimation) {
928
+ activeLeaveAnimation.cancel();
929
+ cleanup(element, 'ng-leave');
930
+ }
931
+ }
932
+ });
933
+ }
934
+
935
+ //the ng-animate class does nothing, but it's here to allow for
936
+ //parent animations to find and cancel child animations when needed
937
+ element.addClass(NG_ANIMATE_CLASS_NAME);
938
+
939
+ var localAnimationCount = globalAnimationCounter++;
940
+ totalActiveAnimations++;
941
+ runningAnimations[className] = runner;
942
+
943
+ element.data(NG_ANIMATE_STATE, {
944
+ last : runner,
945
+ active : runningAnimations,
946
+ index : localAnimationCount,
947
+ totalActive : totalActiveAnimations
948
+ });
949
+
950
+ //first we run the before animations and when all of those are complete
951
+ //then we perform the DOM operation and run the next set of animations
952
+ fireBeforeCallbackAsync();
953
+ runner.before(function(cancelled) {
954
+ var data = element.data(NG_ANIMATE_STATE);
955
+ cancelled = cancelled ||
956
+ !data || !data.active[className] ||
957
+ (runner.isClassBased && data.active[className].event != animationEvent);
958
+
959
+ fireDOMOperation();
960
+ if(cancelled === true) {
961
+ closeAnimation();
962
+ } else {
963
+ fireAfterCallbackAsync();
964
+ runner.after(closeAnimation);
965
+ }
966
+ });
967
+
968
+ function fireDOMCallback(animationPhase) {
969
+ var eventName = '$animate:' + animationPhase;
970
+ if(elementEvents && elementEvents[eventName] && elementEvents[eventName].length > 0) {
971
+ $$asyncCallback(function() {
972
+ element.triggerHandler(eventName, {
973
+ event : animationEvent,
974
+ className : className
975
+ });
976
+ });
977
+ }
978
+ }
979
+
980
+ function fireBeforeCallbackAsync() {
981
+ fireDOMCallback('before');
982
+ }
983
+
984
+ function fireAfterCallbackAsync() {
985
+ fireDOMCallback('after');
986
+ }
987
+
988
+ function fireDoneCallbackAsync() {
989
+ fireDOMCallback('close');
990
+ if(doneCallback) {
991
+ $$asyncCallback(function() {
992
+ doneCallback();
993
+ });
994
+ }
995
+ }
996
+
997
+ //it is less complicated to use a flag than managing and canceling
998
+ //timeouts containing multiple callbacks.
999
+ function fireDOMOperation() {
1000
+ if(!fireDOMOperation.hasBeenRun) {
1001
+ fireDOMOperation.hasBeenRun = true;
1002
+ domOperation();
1003
+ }
1004
+ }
1005
+
1006
+ function closeAnimation() {
1007
+ if(!closeAnimation.hasBeenRun) {
1008
+ closeAnimation.hasBeenRun = true;
1009
+ var data = element.data(NG_ANIMATE_STATE);
1010
+ if(data) {
1011
+ /* only structural animations wait for reflow before removing an
1012
+ animation, but class-based animations don't. An example of this
1013
+ failing would be when a parent HTML tag has a ng-class attribute
1014
+ causing ALL directives below to skip animations during the digest */
1015
+ if(runner && runner.isClassBased) {
1016
+ cleanup(element, className);
1017
+ } else {
1018
+ $$asyncCallback(function() {
1019
+ var data = element.data(NG_ANIMATE_STATE) || {};
1020
+ if(localAnimationCount == data.index) {
1021
+ cleanup(element, className, animationEvent);
1022
+ }
1023
+ });
1024
+ element.data(NG_ANIMATE_STATE, data);
1025
+ }
1026
+ }
1027
+ fireDoneCallbackAsync();
1028
+ }
1029
+ }
1030
+ }
1031
+
1032
+ function cancelChildAnimations(element) {
1033
+ var node = extractElementNode(element);
1034
+ if (node) {
1035
+ var nodes = angular.isFunction(node.getElementsByClassName) ?
1036
+ node.getElementsByClassName(NG_ANIMATE_CLASS_NAME) :
1037
+ node.querySelectorAll('.' + NG_ANIMATE_CLASS_NAME);
1038
+ forEach(nodes, function(element) {
1039
+ element = angular.element(element);
1040
+ var data = element.data(NG_ANIMATE_STATE);
1041
+ if(data && data.active) {
1042
+ forEach(data.active, function(runner) {
1043
+ runner.cancel();
1044
+ });
1045
+ }
1046
+ });
1047
+ }
1048
+ }
1049
+
1050
+ function cleanup(element, className) {
1051
+ if(isMatchingElement(element, $rootElement)) {
1052
+ if(!rootAnimateState.disabled) {
1053
+ rootAnimateState.running = false;
1054
+ rootAnimateState.structural = false;
1055
+ }
1056
+ } else if(className) {
1057
+ var data = element.data(NG_ANIMATE_STATE) || {};
1058
+
1059
+ var removeAnimations = className === true;
1060
+ if(!removeAnimations && data.active && data.active[className]) {
1061
+ data.totalActive--;
1062
+ delete data.active[className];
1063
+ }
1064
+
1065
+ if(removeAnimations || !data.totalActive) {
1066
+ element.removeClass(NG_ANIMATE_CLASS_NAME);
1067
+ element.removeData(NG_ANIMATE_STATE);
1068
+ }
1069
+ }
1070
+ }
1071
+
1072
+ function animationsDisabled(element, parentElement) {
1073
+ if (rootAnimateState.disabled) {
1074
+ return true;
1075
+ }
1076
+
1077
+ if (isMatchingElement(element, $rootElement)) {
1078
+ return rootAnimateState.running;
1079
+ }
1080
+
1081
+ var allowChildAnimations, parentRunningAnimation, hasParent;
1082
+ do {
1083
+ //the element did not reach the root element which means that it
1084
+ //is not apart of the DOM. Therefore there is no reason to do
1085
+ //any animations on it
1086
+ if (parentElement.length === 0) break;
1087
+
1088
+ var isRoot = isMatchingElement(parentElement, $rootElement);
1089
+ var state = isRoot ? rootAnimateState : (parentElement.data(NG_ANIMATE_STATE) || {});
1090
+ if (state.disabled) {
1091
+ return true;
1092
+ }
1093
+
1094
+ //no matter what, for an animation to work it must reach the root element
1095
+ //this implies that the element is attached to the DOM when the animation is run
1096
+ if (isRoot) {
1097
+ hasParent = true;
1098
+ }
1099
+
1100
+ //once a flag is found that is strictly false then everything before
1101
+ //it will be discarded and all child animations will be restricted
1102
+ if (allowChildAnimations !== false) {
1103
+ var animateChildrenFlag = parentElement.data(NG_ANIMATE_CHILDREN);
1104
+ if(angular.isDefined(animateChildrenFlag)) {
1105
+ allowChildAnimations = animateChildrenFlag;
1106
+ }
1107
+ }
1108
+
1109
+ parentRunningAnimation = parentRunningAnimation ||
1110
+ state.running ||
1111
+ (state.last && !state.last.isClassBased);
1112
+ }
1113
+ while(parentElement = parentElement.parent());
1114
+
1115
+ return !hasParent || (!allowChildAnimations && parentRunningAnimation);
1116
+ }
1117
+ }]);
1118
+
1119
+ $animateProvider.register('', ['$window', '$sniffer', '$timeout', '$$animateReflow',
1120
+ function($window, $sniffer, $timeout, $$animateReflow) {
1121
+ // Detect proper transitionend/animationend event names.
1122
+ var CSS_PREFIX = '', TRANSITION_PROP, TRANSITIONEND_EVENT, ANIMATION_PROP, ANIMATIONEND_EVENT;
1123
+
1124
+ // If unprefixed events are not supported but webkit-prefixed are, use the latter.
1125
+ // Otherwise, just use W3C names, browsers not supporting them at all will just ignore them.
1126
+ // Note: Chrome implements `window.onwebkitanimationend` and doesn't implement `window.onanimationend`
1127
+ // but at the same time dispatches the `animationend` event and not `webkitAnimationEnd`.
1128
+ // Register both events in case `window.onanimationend` is not supported because of that,
1129
+ // do the same for `transitionend` as Safari is likely to exhibit similar behavior.
1130
+ // Also, the only modern browser that uses vendor prefixes for transitions/keyframes is webkit
1131
+ // therefore there is no reason to test anymore for other vendor prefixes: http://caniuse.com/#search=transition
1132
+ if (window.ontransitionend === undefined && window.onwebkittransitionend !== undefined) {
1133
+ CSS_PREFIX = '-webkit-';
1134
+ TRANSITION_PROP = 'WebkitTransition';
1135
+ TRANSITIONEND_EVENT = 'webkitTransitionEnd transitionend';
1136
+ } else {
1137
+ TRANSITION_PROP = 'transition';
1138
+ TRANSITIONEND_EVENT = 'transitionend';
1139
+ }
1140
+
1141
+ if (window.onanimationend === undefined && window.onwebkitanimationend !== undefined) {
1142
+ CSS_PREFIX = '-webkit-';
1143
+ ANIMATION_PROP = 'WebkitAnimation';
1144
+ ANIMATIONEND_EVENT = 'webkitAnimationEnd animationend';
1145
+ } else {
1146
+ ANIMATION_PROP = 'animation';
1147
+ ANIMATIONEND_EVENT = 'animationend';
1148
+ }
1149
+
1150
+ var DURATION_KEY = 'Duration';
1151
+ var PROPERTY_KEY = 'Property';
1152
+ var DELAY_KEY = 'Delay';
1153
+ var ANIMATION_ITERATION_COUNT_KEY = 'IterationCount';
1154
+ var NG_ANIMATE_PARENT_KEY = '$$ngAnimateKey';
1155
+ var NG_ANIMATE_CSS_DATA_KEY = '$$ngAnimateCSS3Data';
1156
+ var NG_ANIMATE_BLOCK_CLASS_NAME = 'ng-animate-block-transitions';
1157
+ var ELAPSED_TIME_MAX_DECIMAL_PLACES = 3;
1158
+ var CLOSING_TIME_BUFFER = 1.5;
1159
+ var ONE_SECOND = 1000;
1160
+
1161
+ var lookupCache = {};
1162
+ var parentCounter = 0;
1163
+ var animationReflowQueue = [];
1164
+ var cancelAnimationReflow;
1165
+ function afterReflow(element, callback) {
1166
+ if(cancelAnimationReflow) {
1167
+ cancelAnimationReflow();
1168
+ }
1169
+ animationReflowQueue.push(callback);
1170
+ cancelAnimationReflow = $$animateReflow(function() {
1171
+ forEach(animationReflowQueue, function(fn) {
1172
+ fn();
1173
+ });
1174
+
1175
+ animationReflowQueue = [];
1176
+ cancelAnimationReflow = null;
1177
+ lookupCache = {};
1178
+ });
1179
+ }
1180
+
1181
+ var closingTimer = null;
1182
+ var closingTimestamp = 0;
1183
+ var animationElementQueue = [];
1184
+ function animationCloseHandler(element, totalTime) {
1185
+ var node = extractElementNode(element);
1186
+ element = angular.element(node);
1187
+
1188
+ //this item will be garbage collected by the closing
1189
+ //animation timeout
1190
+ animationElementQueue.push(element);
1191
+
1192
+ //but it may not need to cancel out the existing timeout
1193
+ //if the timestamp is less than the previous one
1194
+ var futureTimestamp = Date.now() + totalTime;
1195
+ if(futureTimestamp <= closingTimestamp) {
1196
+ return;
1197
+ }
1198
+
1199
+ $timeout.cancel(closingTimer);
1200
+
1201
+ closingTimestamp = futureTimestamp;
1202
+ closingTimer = $timeout(function() {
1203
+ closeAllAnimations(animationElementQueue);
1204
+ animationElementQueue = [];
1205
+ }, totalTime, false);
1206
+ }
1207
+
1208
+ function closeAllAnimations(elements) {
1209
+ forEach(elements, function(element) {
1210
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
1211
+ if(elementData) {
1212
+ (elementData.closeAnimationFn || noop)();
1213
+ }
1214
+ });
1215
+ }
1216
+
1217
+ function getElementAnimationDetails(element, cacheKey) {
1218
+ var data = cacheKey ? lookupCache[cacheKey] : null;
1219
+ if(!data) {
1220
+ var transitionDuration = 0;
1221
+ var transitionDelay = 0;
1222
+ var animationDuration = 0;
1223
+ var animationDelay = 0;
1224
+ var transitionDelayStyle;
1225
+ var animationDelayStyle;
1226
+ var transitionDurationStyle;
1227
+ var transitionPropertyStyle;
1228
+
1229
+ //we want all the styles defined before and after
1230
+ forEach(element, function(element) {
1231
+ if (element.nodeType == ELEMENT_NODE) {
1232
+ var elementStyles = $window.getComputedStyle(element) || {};
1233
+
1234
+ transitionDurationStyle = elementStyles[TRANSITION_PROP + DURATION_KEY];
1235
+
1236
+ transitionDuration = Math.max(parseMaxTime(transitionDurationStyle), transitionDuration);
1237
+
1238
+ transitionPropertyStyle = elementStyles[TRANSITION_PROP + PROPERTY_KEY];
1239
+
1240
+ transitionDelayStyle = elementStyles[TRANSITION_PROP + DELAY_KEY];
1241
+
1242
+ transitionDelay = Math.max(parseMaxTime(transitionDelayStyle), transitionDelay);
1243
+
1244
+ animationDelayStyle = elementStyles[ANIMATION_PROP + DELAY_KEY];
1245
+
1246
+ animationDelay = Math.max(parseMaxTime(animationDelayStyle), animationDelay);
1247
+
1248
+ var aDuration = parseMaxTime(elementStyles[ANIMATION_PROP + DURATION_KEY]);
1249
+
1250
+ if(aDuration > 0) {
1251
+ aDuration *= parseInt(elementStyles[ANIMATION_PROP + ANIMATION_ITERATION_COUNT_KEY], 10) || 1;
1252
+ }
1253
+
1254
+ animationDuration = Math.max(aDuration, animationDuration);
1255
+ }
1256
+ });
1257
+ data = {
1258
+ total : 0,
1259
+ transitionPropertyStyle: transitionPropertyStyle,
1260
+ transitionDurationStyle: transitionDurationStyle,
1261
+ transitionDelayStyle: transitionDelayStyle,
1262
+ transitionDelay: transitionDelay,
1263
+ transitionDuration: transitionDuration,
1264
+ animationDelayStyle: animationDelayStyle,
1265
+ animationDelay: animationDelay,
1266
+ animationDuration: animationDuration
1267
+ };
1268
+ if(cacheKey) {
1269
+ lookupCache[cacheKey] = data;
1270
+ }
1271
+ }
1272
+ return data;
1273
+ }
1274
+
1275
+ function parseMaxTime(str) {
1276
+ var maxValue = 0;
1277
+ var values = angular.isString(str) ?
1278
+ str.split(/\s*,\s*/) :
1279
+ [];
1280
+ forEach(values, function(value) {
1281
+ maxValue = Math.max(parseFloat(value) || 0, maxValue);
1282
+ });
1283
+ return maxValue;
1284
+ }
1285
+
1286
+ function getCacheKey(element) {
1287
+ var parentElement = element.parent();
1288
+ var parentID = parentElement.data(NG_ANIMATE_PARENT_KEY);
1289
+ if(!parentID) {
1290
+ parentElement.data(NG_ANIMATE_PARENT_KEY, ++parentCounter);
1291
+ parentID = parentCounter;
1292
+ }
1293
+ return parentID + '-' + extractElementNode(element).getAttribute('class');
1294
+ }
1295
+
1296
+ function animateSetup(animationEvent, element, className, calculationDecorator) {
1297
+ var cacheKey = getCacheKey(element);
1298
+ var eventCacheKey = cacheKey + ' ' + className;
1299
+ var itemIndex = lookupCache[eventCacheKey] ? ++lookupCache[eventCacheKey].total : 0;
1300
+
1301
+ var stagger = {};
1302
+ if(itemIndex > 0) {
1303
+ var staggerClassName = className + '-stagger';
1304
+ var staggerCacheKey = cacheKey + ' ' + staggerClassName;
1305
+ var applyClasses = !lookupCache[staggerCacheKey];
1306
+
1307
+ applyClasses && element.addClass(staggerClassName);
1308
+
1309
+ stagger = getElementAnimationDetails(element, staggerCacheKey);
1310
+
1311
+ applyClasses && element.removeClass(staggerClassName);
1312
+ }
1313
+
1314
+ /* the animation itself may need to add/remove special CSS classes
1315
+ * before calculating the anmation styles */
1316
+ calculationDecorator = calculationDecorator ||
1317
+ function(fn) { return fn(); };
1318
+
1319
+ element.addClass(className);
1320
+
1321
+ var formerData = element.data(NG_ANIMATE_CSS_DATA_KEY) || {};
1322
+
1323
+ var timings = calculationDecorator(function() {
1324
+ return getElementAnimationDetails(element, eventCacheKey);
1325
+ });
1326
+
1327
+ var transitionDuration = timings.transitionDuration;
1328
+ var animationDuration = timings.animationDuration;
1329
+ if(transitionDuration === 0 && animationDuration === 0) {
1330
+ element.removeClass(className);
1331
+ return false;
1332
+ }
1333
+
1334
+ element.data(NG_ANIMATE_CSS_DATA_KEY, {
1335
+ running : formerData.running || 0,
1336
+ itemIndex : itemIndex,
1337
+ stagger : stagger,
1338
+ timings : timings,
1339
+ closeAnimationFn : noop
1340
+ });
1341
+
1342
+ //temporarily disable the transition so that the enter styles
1343
+ //don't animate twice (this is here to avoid a bug in Chrome/FF).
1344
+ var isCurrentlyAnimating = formerData.running > 0 || animationEvent == 'setClass';
1345
+ if(transitionDuration > 0) {
1346
+ blockTransitions(element, className, isCurrentlyAnimating);
1347
+ }
1348
+
1349
+ //staggering keyframe animations work by adjusting the `animation-delay` CSS property
1350
+ //on the given element, however, the delay value can only calculated after the reflow
1351
+ //since by that time $animate knows how many elements are being animated. Therefore,
1352
+ //until the reflow occurs the element needs to be blocked (where the keyframe animation
1353
+ //is set to `none 0s`). This blocking mechanism should only be set for when a stagger
1354
+ //animation is detected and when the element item index is greater than 0.
1355
+ if(animationDuration > 0 && stagger.animationDelay > 0 && stagger.animationDuration === 0) {
1356
+ blockKeyframeAnimations(element);
1357
+ }
1358
+
1359
+ return true;
1360
+ }
1361
+
1362
+ function isStructuralAnimation(className) {
1363
+ return className == 'ng-enter' || className == 'ng-move' || className == 'ng-leave';
1364
+ }
1365
+
1366
+ function blockTransitions(element, className, isAnimating) {
1367
+ if(isStructuralAnimation(className) || !isAnimating) {
1368
+ extractElementNode(element).style[TRANSITION_PROP + PROPERTY_KEY] = 'none';
1369
+ } else {
1370
+ element.addClass(NG_ANIMATE_BLOCK_CLASS_NAME);
1371
+ }
1372
+ }
1373
+
1374
+ function blockKeyframeAnimations(element) {
1375
+ extractElementNode(element).style[ANIMATION_PROP] = 'none 0s';
1376
+ }
1377
+
1378
+ function unblockTransitions(element, className) {
1379
+ var prop = TRANSITION_PROP + PROPERTY_KEY;
1380
+ var node = extractElementNode(element);
1381
+ if(node.style[prop] && node.style[prop].length > 0) {
1382
+ node.style[prop] = '';
1383
+ }
1384
+ element.removeClass(NG_ANIMATE_BLOCK_CLASS_NAME);
1385
+ }
1386
+
1387
+ function unblockKeyframeAnimations(element) {
1388
+ var prop = ANIMATION_PROP;
1389
+ var node = extractElementNode(element);
1390
+ if(node.style[prop] && node.style[prop].length > 0) {
1391
+ node.style[prop] = '';
1392
+ }
1393
+ }
1394
+
1395
+ function animateRun(animationEvent, element, className, activeAnimationComplete) {
1396
+ var node = extractElementNode(element);
1397
+ var elementData = element.data(NG_ANIMATE_CSS_DATA_KEY);
1398
+ if(node.getAttribute('class').indexOf(className) == -1 || !elementData) {
1399
+ activeAnimationComplete();
1400
+ return;
1401
+ }
1402
+
1403
+ var activeClassName = '';
1404
+ forEach(className.split(' '), function(klass, i) {
1405
+ activeClassName += (i > 0 ? ' ' : '') + klass + '-active';
1406
+ });
1407
+
1408
+ var stagger = elementData.stagger;
1409
+ var timings = elementData.timings;
1410
+ var itemIndex = elementData.itemIndex;
1411
+ var maxDuration = Math.max(timings.transitionDuration, timings.animationDuration);
1412
+ var maxDelay = Math.max(timings.transitionDelay, timings.animationDelay);
1413
+ var maxDelayTime = maxDelay * ONE_SECOND;
1414
+
1415
+ var startTime = Date.now();
1416
+ var css3AnimationEvents = ANIMATIONEND_EVENT + ' ' + TRANSITIONEND_EVENT;
1417
+
1418
+ var style = '', appliedStyles = [];
1419
+ if(timings.transitionDuration > 0) {
1420
+ var propertyStyle = timings.transitionPropertyStyle;
1421
+ if(propertyStyle.indexOf('all') == -1) {
1422
+ style += CSS_PREFIX + 'transition-property: ' + propertyStyle + ';';
1423
+ style += CSS_PREFIX + 'transition-duration: ' + timings.transitionDurationStyle + ';';
1424
+ appliedStyles.push(CSS_PREFIX + 'transition-property');
1425
+ appliedStyles.push(CSS_PREFIX + 'transition-duration');
1426
+ }
1427
+ }
1428
+
1429
+ if(itemIndex > 0) {
1430
+ if(stagger.transitionDelay > 0 && stagger.transitionDuration === 0) {
1431
+ var delayStyle = timings.transitionDelayStyle;
1432
+ style += CSS_PREFIX + 'transition-delay: ' +
1433
+ prepareStaggerDelay(delayStyle, stagger.transitionDelay, itemIndex) + '; ';
1434
+ appliedStyles.push(CSS_PREFIX + 'transition-delay');
1435
+ }
1436
+
1437
+ if(stagger.animationDelay > 0 && stagger.animationDuration === 0) {
1438
+ style += CSS_PREFIX + 'animation-delay: ' +
1439
+ prepareStaggerDelay(timings.animationDelayStyle, stagger.animationDelay, itemIndex) + '; ';
1440
+ appliedStyles.push(CSS_PREFIX + 'animation-delay');
1441
+ }
1442
+ }
1443
+
1444
+ if(appliedStyles.length > 0) {
1445
+ //the element being animated may sometimes contain comment nodes in
1446
+ //the jqLite object, so we're safe to use a single variable to house
1447
+ //the styles since there is always only one element being animated
1448
+ var oldStyle = node.getAttribute('style') || '';
1449
+ node.setAttribute('style', oldStyle + '; ' + style);
1450
+ }
1451
+
1452
+ element.on(css3AnimationEvents, onAnimationProgress);
1453
+ element.addClass(activeClassName);
1454
+ elementData.closeAnimationFn = function() {
1455
+ onEnd();
1456
+ activeAnimationComplete();
1457
+ };
1458
+
1459
+ var staggerTime = itemIndex * (Math.max(stagger.animationDelay, stagger.transitionDelay) || 0);
1460
+ var animationTime = (maxDelay + maxDuration) * CLOSING_TIME_BUFFER;
1461
+ var totalTime = (staggerTime + animationTime) * ONE_SECOND;
1462
+
1463
+ elementData.running++;
1464
+ animationCloseHandler(element, totalTime);
1465
+ return onEnd;
1466
+
1467
+ // This will automatically be called by $animate so
1468
+ // there is no need to attach this internally to the
1469
+ // timeout done method.
1470
+ function onEnd(cancelled) {
1471
+ element.off(css3AnimationEvents, onAnimationProgress);
1472
+ element.removeClass(activeClassName);
1473
+ animateClose(element, className);
1474
+ var node = extractElementNode(element);
1475
+ for (var i in appliedStyles) {
1476
+ node.style.removeProperty(appliedStyles[i]);
1477
+ }
1478
+ }
1479
+
1480
+ function onAnimationProgress(event) {
1481
+ event.stopPropagation();
1482
+ var ev = event.originalEvent || event;
1483
+ var timeStamp = ev.$manualTimeStamp || ev.timeStamp || Date.now();
1484
+
1485
+ /* Firefox (or possibly just Gecko) likes to not round values up
1486
+ * when a ms measurement is used for the animation */
1487
+ var elapsedTime = parseFloat(ev.elapsedTime.toFixed(ELAPSED_TIME_MAX_DECIMAL_PLACES));
1488
+
1489
+ /* $manualTimeStamp is a mocked timeStamp value which is set
1490
+ * within browserTrigger(). This is only here so that tests can
1491
+ * mock animations properly. Real events fallback to event.timeStamp,
1492
+ * or, if they don't, then a timeStamp is automatically created for them.
1493
+ * We're checking to see if the timeStamp surpasses the expected delay,
1494
+ * but we're using elapsedTime instead of the timeStamp on the 2nd
1495
+ * pre-condition since animations sometimes close off early */
1496
+ if(Math.max(timeStamp - startTime, 0) >= maxDelayTime && elapsedTime >= maxDuration) {
1497
+ activeAnimationComplete();
1498
+ }
1499
+ }
1500
+ }
1501
+
1502
+ function prepareStaggerDelay(delayStyle, staggerDelay, index) {
1503
+ var style = '';
1504
+ forEach(delayStyle.split(','), function(val, i) {
1505
+ style += (i > 0 ? ',' : '') +
1506
+ (index * staggerDelay + parseInt(val, 10)) + 's';
1507
+ });
1508
+ return style;
1509
+ }
1510
+
1511
+ function animateBefore(animationEvent, element, className, calculationDecorator) {
1512
+ if(animateSetup(animationEvent, element, className, calculationDecorator)) {
1513
+ return function(cancelled) {
1514
+ cancelled && animateClose(element, className);
1515
+ };
1516
+ }
1517
+ }
1518
+
1519
+ function animateAfter(animationEvent, element, className, afterAnimationComplete) {
1520
+ if(element.data(NG_ANIMATE_CSS_DATA_KEY)) {
1521
+ return animateRun(animationEvent, element, className, afterAnimationComplete);
1522
+ } else {
1523
+ animateClose(element, className);
1524
+ afterAnimationComplete();
1525
+ }
1526
+ }
1527
+
1528
+ function animate(animationEvent, element, className, animationComplete) {
1529
+ //If the animateSetup function doesn't bother returning a
1530
+ //cancellation function then it means that there is no animation
1531
+ //to perform at all
1532
+ var preReflowCancellation = animateBefore(animationEvent, element, className);
1533
+ if(!preReflowCancellation) {
1534
+ animationComplete();
1535
+ return;
1536
+ }
1537
+
1538
+ //There are two cancellation functions: one is before the first
1539
+ //reflow animation and the second is during the active state
1540
+ //animation. The first function will take care of removing the
1541
+ //data from the element which will not make the 2nd animation
1542
+ //happen in the first place
1543
+ var cancel = preReflowCancellation;
1544
+ afterReflow(element, function() {
1545
+ unblockTransitions(element, className);
1546
+ unblockKeyframeAnimations(element);
1547
+ //once the reflow is complete then we point cancel to
1548
+ //the new cancellation function which will remove all of the
1549
+ //animation properties from the active animation
1550
+ cancel = animateAfter(animationEvent, element, className, animationComplete);
1551
+ });
1552
+
1553
+ return function(cancelled) {
1554
+ (cancel || noop)(cancelled);
1555
+ };
1556
+ }
1557
+
1558
+ function animateClose(element, className) {
1559
+ element.removeClass(className);
1560
+ var data = element.data(NG_ANIMATE_CSS_DATA_KEY);
1561
+ if(data) {
1562
+ if(data.running) {
1563
+ data.running--;
1564
+ }
1565
+ if(!data.running || data.running === 0) {
1566
+ element.removeData(NG_ANIMATE_CSS_DATA_KEY);
1567
+ }
1568
+ }
1569
+ }
1570
+
1571
+ return {
1572
+ enter : function(element, animationCompleted) {
1573
+ return animate('enter', element, 'ng-enter', animationCompleted);
1574
+ },
1575
+
1576
+ leave : function(element, animationCompleted) {
1577
+ return animate('leave', element, 'ng-leave', animationCompleted);
1578
+ },
1579
+
1580
+ move : function(element, animationCompleted) {
1581
+ return animate('move', element, 'ng-move', animationCompleted);
1582
+ },
1583
+
1584
+ beforeSetClass : function(element, add, remove, animationCompleted) {
1585
+ var className = suffixClasses(remove, '-remove') + ' ' +
1586
+ suffixClasses(add, '-add');
1587
+ var cancellationMethod = animateBefore('setClass', element, className, function(fn) {
1588
+ /* when classes are removed from an element then the transition style
1589
+ * that is applied is the transition defined on the element without the
1590
+ * CSS class being there. This is how CSS3 functions outside of ngAnimate.
1591
+ * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */
1592
+ var klass = element.attr('class');
1593
+ element.removeClass(remove);
1594
+ element.addClass(add);
1595
+ var timings = fn();
1596
+ element.attr('class', klass);
1597
+ return timings;
1598
+ });
1599
+
1600
+ if(cancellationMethod) {
1601
+ afterReflow(element, function() {
1602
+ unblockTransitions(element, className);
1603
+ unblockKeyframeAnimations(element);
1604
+ animationCompleted();
1605
+ });
1606
+ return cancellationMethod;
1607
+ }
1608
+ animationCompleted();
1609
+ },
1610
+
1611
+ beforeAddClass : function(element, className, animationCompleted) {
1612
+ var cancellationMethod = animateBefore('addClass', element, suffixClasses(className, '-add'), function(fn) {
1613
+
1614
+ /* when a CSS class is added to an element then the transition style that
1615
+ * is applied is the transition defined on the element when the CSS class
1616
+ * is added at the time of the animation. This is how CSS3 functions
1617
+ * outside of ngAnimate. */
1618
+ element.addClass(className);
1619
+ var timings = fn();
1620
+ element.removeClass(className);
1621
+ return timings;
1622
+ });
1623
+
1624
+ if(cancellationMethod) {
1625
+ afterReflow(element, function() {
1626
+ unblockTransitions(element, className);
1627
+ unblockKeyframeAnimations(element);
1628
+ animationCompleted();
1629
+ });
1630
+ return cancellationMethod;
1631
+ }
1632
+ animationCompleted();
1633
+ },
1634
+
1635
+ setClass : function(element, add, remove, animationCompleted) {
1636
+ remove = suffixClasses(remove, '-remove');
1637
+ add = suffixClasses(add, '-add');
1638
+ var className = remove + ' ' + add;
1639
+ return animateAfter('setClass', element, className, animationCompleted);
1640
+ },
1641
+
1642
+ addClass : function(element, className, animationCompleted) {
1643
+ return animateAfter('addClass', element, suffixClasses(className, '-add'), animationCompleted);
1644
+ },
1645
+
1646
+ beforeRemoveClass : function(element, className, animationCompleted) {
1647
+ var cancellationMethod = animateBefore('removeClass', element, suffixClasses(className, '-remove'), function(fn) {
1648
+ /* when classes are removed from an element then the transition style
1649
+ * that is applied is the transition defined on the element without the
1650
+ * CSS class being there. This is how CSS3 functions outside of ngAnimate.
1651
+ * http://plnkr.co/edit/j8OzgTNxHTb4n3zLyjGW?p=preview */
1652
+ var klass = element.attr('class');
1653
+ element.removeClass(className);
1654
+ var timings = fn();
1655
+ element.attr('class', klass);
1656
+ return timings;
1657
+ });
1658
+
1659
+ if(cancellationMethod) {
1660
+ afterReflow(element, function() {
1661
+ unblockTransitions(element, className);
1662
+ unblockKeyframeAnimations(element);
1663
+ animationCompleted();
1664
+ });
1665
+ return cancellationMethod;
1666
+ }
1667
+ animationCompleted();
1668
+ },
1669
+
1670
+ removeClass : function(element, className, animationCompleted) {
1671
+ return animateAfter('removeClass', element, suffixClasses(className, '-remove'), animationCompleted);
1672
+ }
1673
+ };
1674
+
1675
+ function suffixClasses(classes, suffix) {
1676
+ var className = '';
1677
+ classes = angular.isArray(classes) ? classes : classes.split(/\s+/);
1678
+ forEach(classes, function(klass, i) {
1679
+ if(klass && klass.length > 0) {
1680
+ className += (i > 0 ? ' ' : '') + klass + suffix;
1681
+ }
1682
+ });
1683
+ return className;
1684
+ }
1685
+ }]);
1686
+ }]);
1687
+
1688
+
1689
+ })(window, window.angular);