houston-core 0.8.0.pre → 0.8.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2398) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -1
  3. data/Gemfile +0 -1
  4. data/Gemfile.lock +101 -160
  5. data/app/assets/javascripts/houston/app/boot.coffee +0 -9
  6. data/app/assets/javascripts/houston/app/commands/show_keyboard_shortcuts.coffee +9 -0
  7. data/app/assets/javascripts/houston/app/models/user.coffee +0 -2
  8. data/app/assets/javascripts/houston/app/views/keyboard_shortcuts_modal.coffee +4 -29
  9. data/app/assets/javascripts/houston/application.js +2 -0
  10. data/app/assets/javascripts/houston/core/app.coffee +8 -46
  11. data/app/assets/javascripts/houston/core/core_ext/number.coffee +4 -0
  12. data/app/assets/javascripts/houston/core/handlebars_helpers.coffee +21 -23
  13. data/app/assets/javascripts/houston/core/keyboard_shortcuts.coffee +19 -0
  14. data/app/assets/javascripts/houston/core/observer.coffee +69 -0
  15. data/app/assets/javascripts/houston/dashboard.js +1 -9
  16. data/app/assets/javascripts/houston/vendor.js +4 -0
  17. data/app/assets/stylesheets/houston/application/globals.scss +5 -0
  18. data/app/assets/stylesheets/houston/application/keyboard_shortcuts.scss +23 -25
  19. data/app/assets/stylesheets/houston/application/markdown.scss +3 -1
  20. data/app/assets/stylesheets/houston/application/mobile.scss +0 -2
  21. data/app/assets/stylesheets/houston/application/navigation.scss +0 -26
  22. data/app/assets/stylesheets/houston/application/project_banner_buttons.scss +0 -18
  23. data/app/assets/stylesheets/houston/application/projects.css.scss +0 -49
  24. data/app/assets/stylesheets/houston/application/teams.scss +0 -3
  25. data/app/assets/stylesheets/houston/application/uploading.scss +3 -5
  26. data/app/assets/stylesheets/houston/application/users.scss +0 -1
  27. data/app/assets/stylesheets/houston/core/colors.scss.erb +9 -22
  28. data/app/assets/stylesheets/houston/core/globals.scss +20 -0
  29. data/app/assets/stylesheets/houston/core/misc.scss +0 -4
  30. data/app/assets/stylesheets/houston/print.css.scss +0 -12
  31. data/app/assets/templates/keyboard_shortcuts.hbs +6 -4
  32. data/app/channels/application_cable/channel.rb +5 -0
  33. data/app/channels/application_cable/connection.rb +5 -0
  34. data/app/channels/events_channel.rb +27 -0
  35. data/app/concerns/houston/props.rb +9 -1
  36. data/app/concerns/project_adapter.rb +40 -10
  37. data/app/controllers/api/v1/measurements_controller.rb +2 -2
  38. data/app/controllers/api/v1/projects_controller.rb +2 -2
  39. data/app/controllers/application_controller.rb +8 -17
  40. data/app/controllers/hooks_controller.rb +2 -29
  41. data/app/controllers/project_hooks_controller.rb +3 -3
  42. data/app/controllers/project_options_controller.rb +1 -1
  43. data/app/controllers/project_roles_controller.rb +1 -1
  44. data/app/controllers/projects_controller.rb +2 -52
  45. data/app/controllers/sessions_controller.rb +1 -1
  46. data/app/controllers/teams_controller.rb +14 -3
  47. data/app/controllers/user_options_controller.rb +1 -1
  48. data/app/controllers/users_controller.rb +1 -17
  49. data/app/helpers/application_helper.rb +36 -8
  50. data/app/helpers/avatar_helper.rb +3 -2
  51. data/app/helpers/navigation_helper.rb +5 -39
  52. data/app/helpers/project_helper.rb +0 -24
  53. data/app/helpers/url_helper.rb +0 -44
  54. data/app/mailers/view_mailer.rb +2 -9
  55. data/app/models/ability.rb +4 -0
  56. data/app/models/action.rb +50 -44
  57. data/app/models/error.rb +11 -1
  58. data/app/models/persistent_trigger.rb +1 -1
  59. data/app/models/project.rb +15 -171
  60. data/app/models/team.rb +1 -1
  61. data/app/models/team_user.rb +1 -1
  62. data/app/models/user.rb +1 -30
  63. data/app/models/user_credentials.rb +2 -23
  64. data/app/views/actions/_actions.html.erb +8 -1
  65. data/app/views/errors/_actions.html.erb +6 -1
  66. data/app/views/layouts/application.html.erb +3 -7
  67. data/app/views/layouts/dashboard.html.erb +11 -7
  68. data/app/views/layouts/minimal.html.erb +3 -7
  69. data/app/views/layouts/naked.html.erb +3 -8
  70. data/app/views/layouts/naked_dashboard.html.erb +12 -7
  71. data/app/views/projects/_form.html.erb +32 -35
  72. data/app/views/projects/_header.html.erb +6 -3
  73. data/app/views/projects/index.html.erb +6 -73
  74. data/app/views/teams/_form.html.erb +13 -0
  75. data/app/views/teams/index.html.erb +4 -1
  76. data/app/views/users/_form.html.erb +8 -6
  77. data/app/views/users/show.html.erb +0 -8
  78. data/bin/rails +1 -1
  79. data/config/application.rb +15 -11
  80. data/config/boot.rb +1 -1
  81. data/config/environment.rb +1 -1
  82. data/config/environments/development.rb +25 -3
  83. data/config/environments/production.rb +25 -14
  84. data/config/environments/test.rb +6 -6
  85. data/config/initializers/add_navigation_renderers.rb +0 -63
  86. data/config/initializers/application_controller_renderer.rb +6 -0
  87. data/config/initializers/cookies_serializer.rb +2 -0
  88. data/config/initializers/devise.rb +1 -1
  89. data/config/initializers/houston_observer_subscriber.rb +17 -0
  90. data/config/initializers/houston_report_exception.rb +1 -1
  91. data/config/initializers/load_persistent_triggers.rb +1 -1
  92. data/config/initializers/mime_types.rb +0 -1
  93. data/config/initializers/new_framework_defaults.rb +23 -0
  94. data/config/initializers/requirements.rb +0 -1
  95. data/config/initializers/wrap_parameters.rb +2 -2
  96. data/config/routes.rb +16 -175
  97. data/config/spring.rb +6 -0
  98. data/db/migrate/20120504143615_link_tickets_and_releases.rb +0 -6
  99. data/db/migrate/20140517012626_prevent_hstore_fields_from_being_null.rb +0 -2
  100. data/db/migrate/20151228183704_drop_unused_tables.rb +0 -24
  101. data/db/migrate/20160625203412_convert_user_view_options_to_props.rb +1 -1
  102. data/db/migrate/20160625221840_convert_project_extended_attributes_to_props.rb +1 -1
  103. data/db/migrate/20160813001242_create_teams.rb +1 -1
  104. data/db/migrate/20160814024129_drop_columns_unused_since07.rb +12 -0
  105. data/db/migrate/20160916191300_add_type_to_errors.rb +5 -0
  106. data/db/migrate/20161102012059_drop_code_climate_repo_token.rb +9 -0
  107. data/db/migrate/20161102012231_drop_feature_states.rb +9 -0
  108. data/db/migrate/20170115150643_move_adapter_names_to_props.rb +17 -0
  109. data/db/migrate/20170116002818_drop_releases_tickets_and_releases_tasks.rb +6 -0
  110. data/db/migrate/20170116210225_move_adapter_names_to_props2.rb +17 -0
  111. data/db/migrate/20170118005958_remove_antecedents_from_versions_of_tickets.rb +38 -0
  112. data/db/seeds.rb +0 -7
  113. data/db/structure.sql +173 -1619
  114. data/houston-core.gemspec +16 -43
  115. data/lib/generators/instance_generator.rb +6 -1
  116. data/lib/hash_dsl.rb +27 -0
  117. data/{app/adapters → lib}/houston/adapters.rb +1 -3
  118. data/lib/houston/boot.rb +3 -1
  119. data/lib/houston/boot/actions.rb +1 -3
  120. data/lib/houston/boot/active_record_serializer.rb +6 -1
  121. data/lib/houston/boot/configuration.rb +96 -249
  122. data/lib/houston/boot/daemonize.rb +1 -1
  123. data/lib/houston/boot/events.rb +1 -33
  124. data/lib/houston/boot/extensions.rb +114 -2
  125. data/lib/houston/boot/observer.rb +8 -6
  126. data/lib/houston/boot/running_as.rb +28 -0
  127. data/lib/houston/boot/serializer.rb +2 -0
  128. data/lib/houston/boot/timer.rb +34 -12
  129. data/lib/houston/boot/triggers.rb +5 -8
  130. data/lib/{params_serializer.rb → houston/params_serializer.rb} +0 -0
  131. data/lib/houston/test_helpers.rb +45 -0
  132. data/lib/houston/version.rb +1 -1
  133. data/script/cibuild +4 -1
  134. data/templates/new-instance/Gemfile +22 -4
  135. data/templates/new-instance/cable/config.ru +16 -0
  136. data/templates/new-instance/config.ru +1 -1
  137. data/templates/new-instance/config/abilities.rb +4 -53
  138. data/templates/new-instance/config/database.yml +3 -3
  139. data/{app/adapters/houston/adapters/error_tracker/errors.rb → templates/new-instance/config/events/.keep} +0 -0
  140. data/templates/new-instance/config/integrations/.keep +0 -0
  141. data/templates/new-instance/config/main.rb +58 -65
  142. data/templates/new-instance/config/routes.rb +1 -1
  143. data/templates/new-instance/config/timers/.keep +0 -0
  144. data/templates/new-instance/config/timers/purge_jobs.rb +2 -2
  145. data/templates/new-instance/db/seeds.rb +9 -0
  146. data/templates/new-instance/db/structure.sql +337 -1592
  147. data/templates/new-instance/public/sounds/silence.mp3 +0 -0
  148. data/templates/new-module/app/controllers/houston/%name%/application_controller.rb.tt +1 -1
  149. data/templates/new-module/test/acceptance/houston_dummy_test.rb +2 -2
  150. data/templates/new-module/test/dummy/houston.rb +0 -5
  151. data/templates/new-module/test/fixtures/teams.yml +2 -0
  152. data/templates/new-module/test/fixtures/teams_users.yml +5 -0
  153. data/test/factories/user_factory.rb +0 -6
  154. data/test/support/config.rb +0 -28
  155. data/test/support/houston/adapters/test_adapter.rb +21 -0
  156. data/test/support/houston/module1.rb +20 -0
  157. data/test/support/houston/module2.rb +14 -0
  158. data/test/test_helper.rb +4 -125
  159. data/test/unit/concerns/project_adapter_test.rb +66 -0
  160. data/test/unit/controllers/project_options_controller_test.rb +3 -3
  161. data/test/unit/controllers/user_options_controller_test.rb +3 -3
  162. data/test/unit/controllers/users_controller_test.rb +4 -4
  163. data/test/unit/models/configuration_test.rb +47 -0
  164. data/test/unit/models/persistent_trigger_test.rb +8 -11
  165. data/test/unit/models/triggers_test.rb +10 -10
  166. data/vendor/assets/javascripts/backbone.js +1920 -0
  167. data/vendor/assets/javascripts/{d3.v3.js → d3.js} +1295 -1015
  168. data/vendor/assets/javascripts/handlebars.js +4608 -0
  169. data/vendor/assets/javascripts/underscore.js +1548 -0
  170. metadata +90 -2493
  171. data/app/adapters/houston/adapters/ci_server.rb +0 -5
  172. data/app/adapters/houston/adapters/ci_server/errors.rb +0 -16
  173. data/app/adapters/houston/adapters/ci_server/jenkins_adapter.rb +0 -21
  174. data/app/adapters/houston/adapters/ci_server/jenkins_adapter/job.rb +0 -245
  175. data/app/adapters/houston/adapters/ci_server/none_adapter.rb +0 -21
  176. data/app/adapters/houston/adapters/ci_server/none_adapter/job.rb +0 -25
  177. data/app/adapters/houston/adapters/deployment/engineyard.rb +0 -108
  178. data/app/adapters/houston/adapters/deployment/engineyard/config.rb +0 -18
  179. data/app/adapters/houston/adapters/error_tracker.rb +0 -5
  180. data/app/adapters/houston/adapters/error_tracker/errbit_adapter.rb +0 -69
  181. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/app.rb +0 -48
  182. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/connection.rb +0 -153
  183. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/notice.rb +0 -26
  184. data/app/adapters/houston/adapters/error_tracker/errbit_adapter/problem.rb +0 -98
  185. data/app/adapters/houston/adapters/error_tracker/none_adapter.rb +0 -31
  186. data/app/adapters/houston/adapters/error_tracker/null_app.rb +0 -40
  187. data/app/adapters/houston/adapters/ticket_tracker.rb +0 -5
  188. data/app/adapters/houston/adapters/ticket_tracker/errors.rb +0 -23
  189. data/app/adapters/houston/adapters/ticket_tracker/github_adapter.rb +0 -27
  190. data/app/adapters/houston/adapters/ticket_tracker/github_adapter/connection.rb +0 -167
  191. data/app/adapters/houston/adapters/ticket_tracker/github_adapter/issue.rb +0 -99
  192. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter.rb +0 -23
  193. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/connection.rb +0 -48
  194. data/app/adapters/houston/adapters/ticket_tracker/houston_adapter/ticket.rb +0 -65
  195. data/app/adapters/houston/adapters/ticket_tracker/none_adapter.rb +0 -21
  196. data/app/adapters/houston/adapters/ticket_tracker/null_connection.rb +0 -46
  197. data/app/adapters/houston/adapters/ticket_tracker/null_ticket.rb +0 -71
  198. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter.rb +0 -43
  199. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/connection.rb +0 -224
  200. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/milestone.rb +0 -42
  201. data/app/adapters/houston/adapters/ticket_tracker/unfuddle_adapter/ticket.rb +0 -240
  202. data/app/adapters/houston/adapters/version_control.rb +0 -5
  203. data/app/adapters/houston/adapters/version_control/commit.rb +0 -29
  204. data/app/adapters/houston/adapters/version_control/errors.rb +0 -37
  205. data/app/adapters/houston/adapters/version_control/git_adapter.rb +0 -90
  206. data/app/adapters/houston/adapters/version_control/git_adapter/diff_changes.rb +0 -49
  207. data/app/adapters/houston/adapters/version_control/git_adapter/github_repo.rb +0 -84
  208. data/app/adapters/houston/adapters/version_control/git_adapter/remote_repo.rb +0 -166
  209. data/app/adapters/houston/adapters/version_control/git_adapter/repo.rb +0 -265
  210. data/app/adapters/houston/adapters/version_control/none_adapter.rb +0 -21
  211. data/app/adapters/houston/adapters/version_control/null_commit.rb +0 -21
  212. data/app/adapters/houston/adapters/version_control/null_repo.rb +0 -73
  213. data/app/assets/javascripts/houston/app/models/commit.coffee +0 -9
  214. data/app/assets/javascripts/houston/app/models/release.coffee +0 -9
  215. data/app/assets/javascripts/houston/app/models/task.coffee +0 -5
  216. data/app/assets/javascripts/houston/app/models/tester.coffee +0 -8
  217. data/app/assets/javascripts/houston/app/models/ticket.coffee +0 -125
  218. data/app/assets/javascripts/houston/app/releases.coffee +0 -55
  219. data/app/assets/javascripts/houston/app/ticket_tracker_refresh.coffee +0 -71
  220. data/app/assets/javascripts/houston/app/views/_show_sprint_view.coffee +0 -84
  221. data/app/assets/javascripts/houston/app/views/_tickets_view.coffee +0 -62
  222. data/app/assets/javascripts/houston/app/views/all_tickets_view.coffee +0 -28
  223. data/app/assets/javascripts/houston/app/views/edit_sprint_view.coffee +0 -327
  224. data/app/assets/javascripts/houston/app/views/edit_ticket_view.coffee +0 -67
  225. data/app/assets/javascripts/houston/app/views/find_or_create_ticket_view.coffee +0 -75
  226. data/app/assets/javascripts/houston/app/views/new_ticket_modal.coffee +0 -24
  227. data/app/assets/javascripts/houston/app/views/new_ticket_view.coffee +0 -187
  228. data/app/assets/javascripts/houston/app/views/ticket_modal_view.coffee +0 -77
  229. data/app/assets/stylesheets/houston/application/commit.scss +0 -22
  230. data/app/assets/stylesheets/houston/application/exceptions.scss +0 -66
  231. data/app/assets/stylesheets/houston/application/find_or_create_ticket.scss +0 -12
  232. data/app/assets/stylesheets/houston/application/new_ticket_view.scss +0 -85
  233. data/app/assets/stylesheets/houston/application/omnibar.scss +0 -55
  234. data/app/assets/stylesheets/houston/application/pull_requests.scss +0 -54
  235. data/app/assets/stylesheets/houston/application/queue.scss +0 -11
  236. data/app/assets/stylesheets/houston/application/release_form.scss +0 -67
  237. data/app/assets/stylesheets/houston/application/releases.scss +0 -187
  238. data/app/assets/stylesheets/houston/application/sprint.scss +0 -83
  239. data/app/assets/stylesheets/houston/application/test.scss +0 -118
  240. data/app/assets/stylesheets/houston/application/test_run.scss +0 -154
  241. data/app/assets/stylesheets/houston/application/ticket.scss +0 -156
  242. data/app/assets/stylesheets/houston/application/ticket_modal.scss +0 -173
  243. data/app/assets/stylesheets/houston/application/tickets.scss +0 -36
  244. data/app/assets/stylesheets/houston/application/timeline.scss +0 -204
  245. data/app/assets/stylesheets/houston/application/welcome.scss +0 -48
  246. data/app/assets/templates/new_ticket/form.hbs +0 -14
  247. data/app/assets/templates/new_ticket/modal.hbs +0 -9
  248. data/app/assets/templates/new_ticket/suggestion.hbs +0 -3
  249. data/app/assets/templates/omnibar/commit.hbs +0 -6
  250. data/app/assets/templates/omnibar/modal.hbs +0 -5
  251. data/app/assets/templates/omnibar/project.hbs +0 -5
  252. data/app/assets/templates/omnibar/ticket.hbs +0 -6
  253. data/app/assets/templates/problems/index.hbs +0 -3
  254. data/app/assets/templates/problems/show.hbs +0 -48
  255. data/app/assets/templates/sprints/edit.hbs +0 -50
  256. data/app/assets/templates/sprints/show.hbs +0 -1
  257. data/app/assets/templates/sprints/task.hbs +0 -17
  258. data/app/assets/templates/sprints/typeahead.hbs +0 -7
  259. data/app/assets/templates/tickets/find_or_create.hbs +0 -4
  260. data/app/assets/templates/tickets/index.hbs +0 -18
  261. data/app/assets/templates/tickets/modal.hbs +0 -5
  262. data/app/assets/templates/tickets/show.hbs +0 -62
  263. data/app/assets/templates/tickets/typeahead.hbs +0 -2
  264. data/app/concerns/belongs_to_commit.rb +0 -36
  265. data/app/concerns/commit_synchronizer.rb +0 -150
  266. data/app/concerns/feature_state.rb +0 -27
  267. data/app/concerns/milestone_synchronizer.rb +0 -60
  268. data/app/concerns/ticket_synchronizer.rb +0 -120
  269. data/app/concerns/unique_add.rb +0 -7
  270. data/app/controllers/api/v1/sprint_tasks_controller.rb +0 -97
  271. data/app/controllers/api/v1/ticket_tasks_controller.rb +0 -75
  272. data/app/controllers/commits_controller.rb +0 -33
  273. data/app/controllers/deploys_controller.rb +0 -44
  274. data/app/controllers/github/pulls_controller.rb +0 -13
  275. data/app/controllers/omnibar_controller.rb +0 -54
  276. data/app/controllers/project_tests_controller.rb +0 -105
  277. data/app/controllers/project_tickets_controller.rb +0 -149
  278. data/app/controllers/project_tickets_sync_controller.rb +0 -22
  279. data/app/controllers/releases_controller.rb +0 -151
  280. data/app/controllers/sprint_task_locks_controller.rb +0 -47
  281. data/app/controllers/sprints_controller.rb +0 -99
  282. data/app/controllers/tasks_controller.rb +0 -40
  283. data/app/controllers/test_runs_controller.rb +0 -61
  284. data/app/controllers/tickets_controller.rb +0 -48
  285. data/app/controllers/welcome_controller.rb +0 -28
  286. data/app/helpers/ansi_helper.rb +0 -46
  287. data/app/helpers/backtrace_helper.rb +0 -7
  288. data/app/helpers/breadcrumbs_helper.rb +0 -60
  289. data/app/helpers/commit_helper.rb +0 -69
  290. data/app/helpers/demo_helper.rb +0 -23
  291. data/app/helpers/excel_helpers.rb +0 -7
  292. data/app/helpers/flash_message_helper.rb +0 -22
  293. data/app/helpers/maintenance_light_helper.rb +0 -19
  294. data/app/helpers/release_helper.rb +0 -58
  295. data/app/helpers/sprint_helper.rb +0 -11
  296. data/app/helpers/static_chart_helper.rb +0 -7
  297. data/app/helpers/test_run_helper.rb +0 -76
  298. data/app/helpers/ticket_helper.rb +0 -25
  299. data/app/helpers/timeline_helper.rb +0 -39
  300. data/app/helpers/user_helper.rb +0 -15
  301. data/app/helpers/version_helper.rb +0 -9
  302. data/app/interactors/cache_key_dependencies.rb +0 -23
  303. data/app/interactors/test_run_comparer.rb +0 -46
  304. data/app/interactors/ticket_report.rb +0 -59
  305. data/app/jobs/sync_all_tickets_job.rb +0 -49
  306. data/app/jobs/sync_commits_job.rb +0 -13
  307. data/app/jobs/sync_project_tickets_job.rb +0 -32
  308. data/app/mailers/project_notification.rb +0 -79
  309. data/app/models/activity_feed.rb +0 -111
  310. data/app/models/code_climate/coverage_report.rb +0 -174
  311. data/app/models/commit.rb +0 -250
  312. data/app/models/deploy.rb +0 -120
  313. data/app/models/environment.rb +0 -39
  314. data/app/models/github/comment_event.rb +0 -35
  315. data/app/models/github/commit_comment_event.rb +0 -7
  316. data/app/models/github/commit_status_report.rb +0 -73
  317. data/app/models/github/diff_comment_event.rb +0 -7
  318. data/app/models/github/event.rb +0 -20
  319. data/app/models/github/issue_comment_event.rb +0 -16
  320. data/app/models/github/post_receive_event.rb +0 -14
  321. data/app/models/github/pull_request.rb +0 -278
  322. data/app/models/github/pull_request_event.rb +0 -38
  323. data/app/models/github/unauthorized.rb +0 -4
  324. data/app/models/key_dependency.rb +0 -45
  325. data/app/models/maintenance_light.rb +0 -12
  326. data/app/models/menu_item.rb +0 -19
  327. data/app/models/menu_item_divider.rb +0 -11
  328. data/app/models/milestone.rb +0 -90
  329. data/app/models/output_stream.rb +0 -26
  330. data/app/models/post_receive_payload.rb +0 -30
  331. data/app/models/project_dependencies.rb +0 -54
  332. data/app/models/project_dependency.rb +0 -108
  333. data/app/models/project_menu_item.rb +0 -12
  334. data/app/models/release.rb +0 -241
  335. data/app/models/release_change.rb +0 -54
  336. data/app/models/rubygems/gem.rb +0 -76
  337. data/app/models/run_tests_on_post_receive.rb +0 -184
  338. data/app/models/source_file_coverage.rb +0 -10
  339. data/app/models/sprint.rb +0 -75
  340. data/app/models/sprint_report.rb +0 -56
  341. data/app/models/sprint_task.rb +0 -32
  342. data/app/models/static_chart.rb +0 -137
  343. data/app/models/static_chart/area.rb +0 -70
  344. data/app/models/task.rb +0 -218
  345. data/app/models/test.rb +0 -12
  346. data/app/models/test_error.rb +0 -8
  347. data/app/models/test_result.rb +0 -17
  348. data/app/models/test_run.rb +0 -402
  349. data/app/models/test_run_statistics.rb +0 -53
  350. data/app/models/ticket.rb +0 -329
  351. data/app/models/ticket_comment.rb +0 -21
  352. data/app/models/ticket_committer.rb +0 -11
  353. data/app/models/ticket_tag.rb +0 -25
  354. data/app/presenters/commit_presenter.rb +0 -52
  355. data/app/presenters/full_ticket_presenter.rb +0 -78
  356. data/app/presenters/release_presenter.rb +0 -20
  357. data/app/presenters/sprint_task_presenter.rb +0 -49
  358. data/app/presenters/task_presenter.rb +0 -44
  359. data/app/presenters/tasks_excel_presenter.rb +0 -107
  360. data/app/presenters/ticket_presenter.rb +0 -36
  361. data/app/views/activity/_events.html.erb +0 -24
  362. data/app/views/commits/show.html.erb +0 -56
  363. data/app/views/configuration_error/_no_ticket_tracker.html.erb +0 -7
  364. data/app/views/deploys/show.html.erb +0 -51
  365. data/app/views/github/pulls/index.html.erb +0 -109
  366. data/app/views/project_notification/ci_configuration_error.html.erb +0 -15
  367. data/app/views/project_notification/new_release.html.erb +0 -37
  368. data/app/views/project_notification/test_run.html.erb +0 -128
  369. data/app/views/project_tests/_commits.html.erb +0 -14
  370. data/app/views/project_tests/index.html.erb +0 -55
  371. data/app/views/project_tests/show.html.erb +0 -39
  372. data/app/views/project_tickets/_tickets.html.erb +0 -36
  373. data/app/views/project_tickets/bugs.html.erb +0 -13
  374. data/app/views/project_tickets/ideas.html.erb +0 -13
  375. data/app/views/project_tickets/index.html.erb +0 -13
  376. data/app/views/project_tickets/index.xls.erb +0 -88
  377. data/app/views/project_tickets/new.html.erb +0 -17
  378. data/app/views/project_tickets/no_ticket_tracker.html.erb +0 -8
  379. data/app/views/project_tickets/open.html.erb +0 -13
  380. data/app/views/project_tickets/open_bugs.html.erb +0 -13
  381. data/app/views/project_tickets/open_ideas.html.erb +0 -13
  382. data/app/views/project_tickets/show.html.erb +0 -76
  383. data/app/views/projects/_new_ticket.html.erb +0 -8
  384. data/app/views/projects/_ticket_tracker_refresh.html.erb +0 -4
  385. data/app/views/projects/new_from_github.html.erb +0 -67
  386. data/app/views/releases/_changelog.html.erb +0 -45
  387. data/app/views/releases/_commits.html.erb +0 -18
  388. data/app/views/releases/_form.html.erb +0 -132
  389. data/app/views/releases/_index.html.erb +0 -65
  390. data/app/views/releases/_new_release.html.erb +0 -15
  391. data/app/views/releases/_results.html.erb +0 -47
  392. data/app/views/releases/_tickets.html.erb +0 -12
  393. data/app/views/releases/edit.html.erb +0 -19
  394. data/app/views/releases/index.html.erb +0 -44
  395. data/app/views/releases/new.html.erb +0 -72
  396. data/app/views/releases/show.html.erb +0 -12
  397. data/app/views/sprints/dashboard.html.erb +0 -31
  398. data/app/views/sprints/show.html.erb +0 -39
  399. data/app/views/test_runs/confirm_retry.html.erb +0 -3
  400. data/app/views/tickets/new.html.erb +0 -18
  401. data/app/views/welcome/index.html.erb +0 -29
  402. data/config/initializers/constants.rb +0 -9
  403. data/config/initializers/run_tests_on_post_receive.rb +0 -1
  404. data/config/initializers/sync_commits_on_post_receive.rb +0 -3
  405. data/config/initializers/unfuddle.rb +0 -6
  406. data/db/fixtures/projects.yml +0 -21
  407. data/db/fixtures/roles.yml +0 -9
  408. data/db/fixtures/users.yml +0 -36
  409. data/db/migrate/20120324202224_create_environments.rb +0 -11
  410. data/db/migrate/20120324212848_create_releases.rb +0 -12
  411. data/db/migrate/20120324212946_create_changes.rb +0 -11
  412. data/db/migrate/20120324230038_create_commits.rb +0 -13
  413. data/db/migrate/20120406185643_add_initial_commit_to_environments.rb +0 -5
  414. data/db/migrate/20120417195313_create_tickets.rb +0 -12
  415. data/db/migrate/20120417195433_create_ticket_queues.rb +0 -11
  416. data/db/migrate/20120501230243_add_unfuddle_id_to_tickets.rb +0 -9
  417. data/db/migrate/20120626140242_add_deployment_to_tickets.rb +0 -5
  418. data/db/migrate/20120626150333_add_last_release_at_to_tickets.rb +0 -14
  419. data/db/migrate/20120626151320_link_tickets_and_commits.rb +0 -17
  420. data/db/migrate/20120626152020_add_committer_email_to_commits.rb +0 -13
  421. data/db/migrate/20120626152949_replace_committer_info_with_author_info.rb +0 -12
  422. data/db/migrate/20120716010743_add_user_to_releases.rb +0 -14
  423. data/db/migrate/20120726212620_add_message_to_release.rb +0 -5
  424. data/db/migrate/20120804003344_add_goldmine_to_tickets.rb +0 -5
  425. data/db/migrate/20121027160548_create_deploys.rb +0 -11
  426. data/db/migrate/20121027171215_add_deploy_id_to_releases.rb +0 -6
  427. data/db/migrate/20121104233305_add_tag_slug_to_changes.rb +0 -5
  428. data/db/migrate/20121214025558_add_estimated_effort_and_estimated_value_to_tickets.rb +0 -6
  429. data/db/migrate/20121220031008_add_expires_at_to_tickets.rb +0 -5
  430. data/db/migrate/20121224212623_rename_environments.rb +0 -29
  431. data/db/migrate/20121225175106_replace_environment_id_with_environment_name.rb +0 -39
  432. data/db/migrate/20121230174234_create_test_runs.rb +0 -22
  433. data/db/migrate/20130106184327_replace_test_runs_details_with_tests.rb +0 -11
  434. data/db/migrate/20130106185425_add_total_count_to_test_runs.rb +0 -5
  435. data/db/migrate/20130119204608_add_extended_attributes_to_tickets.rb +0 -35
  436. data/db/migrate/20130119211540_remove_estimated_effort_and_estimated_value_from_tickets.rb +0 -11
  437. data/db/migrate/20130119212008_rename_tickets_unfuddle_id_to_remote_id.rb +0 -5
  438. data/db/migrate/20130120182026_create_ticket_prerequisites.rb +0 -13
  439. data/db/migrate/20130306023456_add_agent_email_to_test_runs.rb +0 -5
  440. data/db/migrate/20130306023613_add_branch_to_test_runs.rb +0 -5
  441. data/db/migrate/20130319003918_add_coverage_to_test_runs.rb +0 -7
  442. data/db/migrate/20130407220937_add_project_id_to_commits.rb +0 -26
  443. data/db/migrate/20130504135741_add_antecedents_to_tickets.rb +0 -26
  444. data/db/migrate/20130505144446_add_tags_to_tickets.rb +0 -9
  445. data/db/migrate/20130505162039_add_type_to_tickets.rb +0 -9
  446. data/db/migrate/20130505212838_add_closed_at_to_tickets.rb +0 -9
  447. data/db/migrate/20130518224352_drop_environments.rb +0 -9
  448. data/db/migrate/20130518224655_remove_goldmine_from_tickets.rb +0 -9
  449. data/db/migrate/20130525192607_add_reporter_email_and_reporter_id_to_tickets.rb +0 -6
  450. data/db/migrate/20130525222131_add_regression_count_to_test_runs.rb +0 -5
  451. data/db/migrate/20130526024851_give_default_values_for_counts_from_test_runs.rb +0 -19
  452. data/db/migrate/20130710233849_add_authored_at_to_commits.rb +0 -52
  453. data/db/migrate/20130711004558_downcase_commits_committer_emails.rb +0 -10
  454. data/db/migrate/20130711013156_link_commits_and_users.rb +0 -35
  455. data/db/migrate/20130806143651_link_commits_and_releases.rb +0 -18
  456. data/db/migrate/20130815232527_add_unreachable_to_commits.rb +0 -6
  457. data/db/migrate/20130914152419_rename_test_runs_commit_to_sha.rb +0 -9
  458. data/db/migrate/20130921141449_create_milestones.rb +0 -19
  459. data/db/migrate/20131002145620_add_destroyed_at_to_tickets.rb +0 -6
  460. data/db/migrate/20131003014023_add_destroyed_at_to_milestones.rb +0 -6
  461. data/db/migrate/20131004015452_add_resolution_to_tickets.rb +0 -6
  462. data/db/migrate/20131004185618_add_first_release_at_to_tickets.rb +0 -14
  463. data/db/migrate/20131012152403_create_sprints.rb +0 -15
  464. data/db/migrate/20131013185636_add_checked_out_to_tickets.rb +0 -6
  465. data/db/migrate/20131027214942_add_priority_to_tickets.rb +0 -5
  466. data/db/migrate/20131112010815_delete_duplicate_commits.rb +0 -33
  467. data/db/migrate/20131223194246_add_reopened_at_to_tickets.rb +0 -5
  468. data/db/migrate/20140114014144_add_deployer_to_deploys.rb +0 -5
  469. data/db/migrate/20140217195942_add_prerequisites_to_tickets.rb +0 -5
  470. data/db/migrate/20140327020121_drop_ticket_prerequisites.rb +0 -9
  471. data/db/migrate/20140401234330_add_index_to_ticket_queues.rb +0 -6
  472. data/db/migrate/20140406230121_delete_automatically_generated_messages_for_releases.rb +0 -12
  473. data/db/migrate/20140407010111_drop_sprints_project_id.rb +0 -9
  474. data/db/migrate/20140418133005_change_ticket_antecedents_to_text_array.rb +0 -9
  475. data/db/migrate/20140425141946_embed_changes_in_releases.rb +0 -19
  476. data/db/migrate/20140427235508_prevent_release_changes_from_being_null.rb +0 -6
  477. data/db/migrate/20140428023146_prevent_ticket_number_from_being_null.rb +0 -5
  478. data/db/migrate/20140506032958_add_locked_to_sprints.rb +0 -5
  479. data/db/migrate/20140515174322_create_tasks.rb +0 -20
  480. data/db/migrate/20140515200824_link_tasks_and_commits.rb +0 -8
  481. data/db/migrate/20140516012049_create_tasks_for_existing_tickets.rb +0 -33
  482. data/db/migrate/20140521014652_allow_task_descriptions_to_be_null.rb +0 -13
  483. data/db/migrate/20140526155845_add_commit_id_to_deploys.rb +0 -31
  484. data/db/migrate/20140526162645_add_commit_before_id_and_commit_after_id_to_releases.rb +0 -28
  485. data/db/migrate/20140526180608_associate_remaining_deploys_and_releases.rb +0 -60
  486. data/db/migrate/20140724231918_create_sprints_tasks.rb +0 -17
  487. data/db/migrate/20140806233301_add_position_to_milestones.rb +0 -5
  488. data/db/migrate/20140810224209_add_size_and_units_to_milestones.rb +0 -7
  489. data/db/migrate/20140824194031_add_project_id_to_tasks.rb +0 -11
  490. data/db/migrate/20140824194526_add_completed_at_to_tasks.rb +0 -20
  491. data/db/migrate/20140824211249_require_sprints_to_be_unique.rb +0 -9
  492. data/db/migrate/20140907012329_drop_table_changes.rb +0 -9
  493. data/db/migrate/20140921190022_add_checked_out_to_sprints_tasks.rb +0 -19
  494. data/db/migrate/20140925021043_rename_deploys_commit_to_sha.rb +0 -17
  495. data/db/migrate/20140929004347_create_historical_heads.rb +0 -23
  496. data/db/migrate/20141202004123_add_duration_to_deploys.rb +0 -5
  497. data/db/migrate/20150119154013_drop_unused_fields_from_milestones.rb +0 -13
  498. data/db/migrate/20150220215154_add_branch_to_deploys.rb +0 -5
  499. data/db/migrate/20150323004452_add_deploys_completed_at.rb +0 -10
  500. data/db/migrate/20150323011050_add_output_to_deploy.rb +0 -5
  501. data/db/migrate/20150805180939_add_commit_id_to_test_runs.rb +0 -30
  502. data/db/migrate/20150805233946_add_user_id_to_test_runs.rb +0 -23
  503. data/db/migrate/20150806032230_create_tests.rb +0 -33
  504. data/db/migrate/20150808161729_create_test_errors.rb +0 -10
  505. data/db/migrate/20150808161805_create_test_results.rb +0 -72
  506. data/db/migrate/20150808162928_index_test_runs_on_commit_id.rb +0 -5
  507. data/db/migrate/20150808192103_index_commits_on_sha.rb +0 -5
  508. data/db/migrate/20150808193354_add_parent_sha_to_commits.rb +0 -43
  509. data/db/migrate/20150809132417_rename_test_results_regression_to_difference.rb +0 -11
  510. data/db/migrate/20150809201942_add_compared_to_test_runs.rb +0 -5
  511. data/db/migrate/20150817232311_create_pull_requests.rb +0 -25
  512. data/db/migrate/20150820023708_add_labels_to_pull_requests.rb +0 -5
  513. data/db/migrate/20150902005758_downcase_environment_names.rb +0 -19
  514. data/db/migrate/20150902010629_add_user_id_to_deploys.rb +0 -5
  515. data/db/migrate/20150902010853_populate_deploys_user.rb +0 -13
  516. data/db/migrate/20150927014445_required_pull_requests_to_be_unique_by_project_and_number.rb +0 -13
  517. data/db/migrate/20151108221505_convert_pull_request_labels_to_array.rb +0 -22
  518. data/db/migrate/20151108223154_sync_body_also_for_pull_requests.rb +0 -5
  519. data/db/migrate/20151108233510_add_props_to_pull_requests.rb +0 -5
  520. data/db/migrate/20151205214647_add_avatar_url_to_pull_requests.rb +0 -5
  521. data/db/migrate/20151209004458_add_json_labels_to_pull_requests.rb +0 -5
  522. data/db/migrate/20151209030113_add_timestamps_to_pull_requests.rb +0 -6
  523. data/db/migrate/20151226154901_add_search_vector_to_releases.rb +0 -6
  524. data/db/migrate/20151226155305_generate_index_on_releases.rb +0 -5
  525. data/db/migrate/20160120145757_add_successful_to_deploys.rb +0 -10
  526. data/db/migrate/20160510233329_add_closed_at_and_merged_at_to_pull_requests.rb +0 -7
  527. data/lib/houston/boot/server.rb +0 -31
  528. data/support/award.ai +17 -4411
  529. data/support/badges.ai +17 -4623
  530. data/support/bugs-1.ai +1 -1364
  531. data/support/bugs-2.ai +0 -807
  532. data/support/chevron.ai +10 -4440
  533. data/support/favicon.psd +0 -0
  534. data/support/flask.ai +0 -387
  535. data/support/headings.ai +0 -394
  536. data/support/new-window-link-12.gif +0 -0
  537. data/support/newrelic.ai +0 -204
  538. data/support/newrelic.png +0 -0
  539. data/support/wrench.ai +16 -4393
  540. data/templates/new-instance/config/alerts/cves.rb +0 -14
  541. data/templates/new-instance/config/alerts/errs.rb +0 -30
  542. data/templates/new-instance/config/events/alerts/slack_when_assigned.rb +0 -23
  543. data/templates/new-instance/config/events/alerts/slack_when_opened.rb +0 -8
  544. data/templates/new-instance/config/events/daemons/health.rb +0 -21
  545. data/templates/new-instance/config/events/deploy/autoresolve_errs.rb +0 -11
  546. data/templates/new-instance/config/events/deploy/checkout_mentioned_alerts.rb +0 -5
  547. data/templates/new-instance/config/events/deploy/notify_deployer_when_finished.rb +0 -31
  548. data/templates/new-instance/config/events/github/publish_comments_on_slack.rb +0 -36
  549. data/templates/new-instance/config/events/tests/email_when_completed.rb +0 -11
  550. data/templates/new-instance/config/events/tests/slack_when_analyzed.rb +0 -27
  551. data/templates/new-instance/config/events/tests/slack_when_completed.rb +0 -38
  552. data/templates/new-instance/config/events/tickets/mark_tasks_completed_on_commit.rb +0 -7
  553. data/templates/new-instance/config/integrations/engineyard.rb +0 -4
  554. data/templates/new-instance/config/integrations/errbit.rb +0 -6
  555. data/templates/new-instance/config/integrations/gemnasium.rb +0 -2
  556. data/templates/new-instance/config/integrations/github.rb +0 -14
  557. data/templates/new-instance/config/integrations/jenkins.rb +0 -7
  558. data/templates/new-instance/config/integrations/ldap.rb +0 -9
  559. data/templates/new-instance/config/timers/cache_key_dependencies.rb +0 -3
  560. data/templates/new-instance/config/timers/email_about_open_alerts.rb +0 -5
  561. data/templates/new-instance/config/timers/slack_reminders_about_alerts.rb +0 -66
  562. data/templates/new-instance/config/timers/sync_commits.rb +0 -3
  563. data/templates/new-instance/config/timers/sync_pull_requests.rb +0 -3
  564. data/templates/new-instance/config/timers/sync_tickets.rb +0 -3
  565. data/templates/new-instance/lib/gemnasium-alert.rb +0 -25
  566. data/templates/new-instance/lib/slack_helpers.rb +0 -66
  567. data/templates/new-instance/lib/time_helpers.rb +0 -7
  568. data/templates/new-instance/public/images/emoji/+1.png +0 -0
  569. data/templates/new-instance/public/images/emoji/-1.png +0 -0
  570. data/templates/new-instance/public/images/emoji/100.png +0 -0
  571. data/templates/new-instance/public/images/emoji/1234.png +0 -0
  572. data/templates/new-instance/public/images/emoji/8ball.png +0 -0
  573. data/templates/new-instance/public/images/emoji/a.png +0 -0
  574. data/templates/new-instance/public/images/emoji/ab.png +0 -0
  575. data/templates/new-instance/public/images/emoji/abc.png +0 -0
  576. data/templates/new-instance/public/images/emoji/abcd.png +0 -0
  577. data/templates/new-instance/public/images/emoji/accept.png +0 -0
  578. data/templates/new-instance/public/images/emoji/aerial_tramway.png +0 -0
  579. data/templates/new-instance/public/images/emoji/airplane.png +0 -0
  580. data/templates/new-instance/public/images/emoji/alarm_clock.png +0 -0
  581. data/templates/new-instance/public/images/emoji/alien.png +0 -0
  582. data/templates/new-instance/public/images/emoji/ambulance.png +0 -0
  583. data/templates/new-instance/public/images/emoji/anchor.png +0 -0
  584. data/templates/new-instance/public/images/emoji/angel.png +0 -0
  585. data/templates/new-instance/public/images/emoji/anger.png +0 -0
  586. data/templates/new-instance/public/images/emoji/angry.png +0 -0
  587. data/templates/new-instance/public/images/emoji/anguished.png +0 -0
  588. data/templates/new-instance/public/images/emoji/ant.png +0 -0
  589. data/templates/new-instance/public/images/emoji/apple.png +0 -0
  590. data/templates/new-instance/public/images/emoji/aquarius.png +0 -0
  591. data/templates/new-instance/public/images/emoji/aries.png +0 -0
  592. data/templates/new-instance/public/images/emoji/arrow_backward.png +0 -0
  593. data/templates/new-instance/public/images/emoji/arrow_double_down.png +0 -0
  594. data/templates/new-instance/public/images/emoji/arrow_double_up.png +0 -0
  595. data/templates/new-instance/public/images/emoji/arrow_down.png +0 -0
  596. data/templates/new-instance/public/images/emoji/arrow_down_small.png +0 -0
  597. data/templates/new-instance/public/images/emoji/arrow_forward.png +0 -0
  598. data/templates/new-instance/public/images/emoji/arrow_heading_down.png +0 -0
  599. data/templates/new-instance/public/images/emoji/arrow_heading_up.png +0 -0
  600. data/templates/new-instance/public/images/emoji/arrow_left.png +0 -0
  601. data/templates/new-instance/public/images/emoji/arrow_lower_left.png +0 -0
  602. data/templates/new-instance/public/images/emoji/arrow_lower_right.png +0 -0
  603. data/templates/new-instance/public/images/emoji/arrow_right.png +0 -0
  604. data/templates/new-instance/public/images/emoji/arrow_right_hook.png +0 -0
  605. data/templates/new-instance/public/images/emoji/arrow_up.png +0 -0
  606. data/templates/new-instance/public/images/emoji/arrow_up_down.png +0 -0
  607. data/templates/new-instance/public/images/emoji/arrow_up_small.png +0 -0
  608. data/templates/new-instance/public/images/emoji/arrow_upper_left.png +0 -0
  609. data/templates/new-instance/public/images/emoji/arrow_upper_right.png +0 -0
  610. data/templates/new-instance/public/images/emoji/arrows_clockwise.png +0 -0
  611. data/templates/new-instance/public/images/emoji/arrows_counterclockwise.png +0 -0
  612. data/templates/new-instance/public/images/emoji/art.png +0 -0
  613. data/templates/new-instance/public/images/emoji/articulated_lorry.png +0 -0
  614. data/templates/new-instance/public/images/emoji/astonished.png +0 -0
  615. data/templates/new-instance/public/images/emoji/athletic_shoe.png +0 -0
  616. data/templates/new-instance/public/images/emoji/atm.png +0 -0
  617. data/templates/new-instance/public/images/emoji/b.png +0 -0
  618. data/templates/new-instance/public/images/emoji/baby.png +0 -0
  619. data/templates/new-instance/public/images/emoji/baby_bottle.png +0 -0
  620. data/templates/new-instance/public/images/emoji/baby_chick.png +0 -0
  621. data/templates/new-instance/public/images/emoji/baby_symbol.png +0 -0
  622. data/templates/new-instance/public/images/emoji/back.png +0 -0
  623. data/templates/new-instance/public/images/emoji/baggage_claim.png +0 -0
  624. data/templates/new-instance/public/images/emoji/balloon.png +0 -0
  625. data/templates/new-instance/public/images/emoji/ballot_box_with_check.png +0 -0
  626. data/templates/new-instance/public/images/emoji/bamboo.png +0 -0
  627. data/templates/new-instance/public/images/emoji/banana.png +0 -0
  628. data/templates/new-instance/public/images/emoji/bangbang.png +0 -0
  629. data/templates/new-instance/public/images/emoji/bank.png +0 -0
  630. data/templates/new-instance/public/images/emoji/bar_chart.png +0 -0
  631. data/templates/new-instance/public/images/emoji/barber.png +0 -0
  632. data/templates/new-instance/public/images/emoji/baseball.png +0 -0
  633. data/templates/new-instance/public/images/emoji/basketball.png +0 -0
  634. data/templates/new-instance/public/images/emoji/bath.png +0 -0
  635. data/templates/new-instance/public/images/emoji/bathtub.png +0 -0
  636. data/templates/new-instance/public/images/emoji/battery.png +0 -0
  637. data/templates/new-instance/public/images/emoji/bear.png +0 -0
  638. data/templates/new-instance/public/images/emoji/bee.png +0 -0
  639. data/templates/new-instance/public/images/emoji/beer.png +0 -0
  640. data/templates/new-instance/public/images/emoji/beers.png +0 -0
  641. data/templates/new-instance/public/images/emoji/beetle.png +0 -0
  642. data/templates/new-instance/public/images/emoji/beginner.png +0 -0
  643. data/templates/new-instance/public/images/emoji/bell.png +0 -0
  644. data/templates/new-instance/public/images/emoji/bento.png +0 -0
  645. data/templates/new-instance/public/images/emoji/bicyclist.png +0 -0
  646. data/templates/new-instance/public/images/emoji/bike.png +0 -0
  647. data/templates/new-instance/public/images/emoji/bikini.png +0 -0
  648. data/templates/new-instance/public/images/emoji/bird.png +0 -0
  649. data/templates/new-instance/public/images/emoji/birthday.png +0 -0
  650. data/templates/new-instance/public/images/emoji/black_circle.png +0 -0
  651. data/templates/new-instance/public/images/emoji/black_joker.png +0 -0
  652. data/templates/new-instance/public/images/emoji/black_large_square.png +0 -0
  653. data/templates/new-instance/public/images/emoji/black_medium_small_square.png +0 -0
  654. data/templates/new-instance/public/images/emoji/black_medium_square.png +0 -0
  655. data/templates/new-instance/public/images/emoji/black_nib.png +0 -0
  656. data/templates/new-instance/public/images/emoji/black_small_square.png +0 -0
  657. data/templates/new-instance/public/images/emoji/black_square_button.png +0 -0
  658. data/templates/new-instance/public/images/emoji/blossom.png +0 -0
  659. data/templates/new-instance/public/images/emoji/blowfish.png +0 -0
  660. data/templates/new-instance/public/images/emoji/blue_book.png +0 -0
  661. data/templates/new-instance/public/images/emoji/blue_car.png +0 -0
  662. data/templates/new-instance/public/images/emoji/blue_heart.png +0 -0
  663. data/templates/new-instance/public/images/emoji/blush.png +0 -0
  664. data/templates/new-instance/public/images/emoji/boar.png +0 -0
  665. data/templates/new-instance/public/images/emoji/boat.png +0 -0
  666. data/templates/new-instance/public/images/emoji/bomb.png +0 -0
  667. data/templates/new-instance/public/images/emoji/book.png +0 -0
  668. data/templates/new-instance/public/images/emoji/bookmark.png +0 -0
  669. data/templates/new-instance/public/images/emoji/bookmark_tabs.png +0 -0
  670. data/templates/new-instance/public/images/emoji/books.png +0 -0
  671. data/templates/new-instance/public/images/emoji/boom.png +0 -0
  672. data/templates/new-instance/public/images/emoji/boot.png +0 -0
  673. data/templates/new-instance/public/images/emoji/bouquet.png +0 -0
  674. data/templates/new-instance/public/images/emoji/bow.png +0 -0
  675. data/templates/new-instance/public/images/emoji/bowling.png +0 -0
  676. data/templates/new-instance/public/images/emoji/bowtie.png +0 -0
  677. data/templates/new-instance/public/images/emoji/boy.png +0 -0
  678. data/templates/new-instance/public/images/emoji/bread.png +0 -0
  679. data/templates/new-instance/public/images/emoji/bride_with_veil.png +0 -0
  680. data/templates/new-instance/public/images/emoji/bridge_at_night.png +0 -0
  681. data/templates/new-instance/public/images/emoji/briefcase.png +0 -0
  682. data/templates/new-instance/public/images/emoji/broken_heart.png +0 -0
  683. data/templates/new-instance/public/images/emoji/bug.png +0 -0
  684. data/templates/new-instance/public/images/emoji/bulb.png +0 -0
  685. data/templates/new-instance/public/images/emoji/bullettrain_front.png +0 -0
  686. data/templates/new-instance/public/images/emoji/bullettrain_side.png +0 -0
  687. data/templates/new-instance/public/images/emoji/bus.png +0 -0
  688. data/templates/new-instance/public/images/emoji/busstop.png +0 -0
  689. data/templates/new-instance/public/images/emoji/bust_in_silhouette.png +0 -0
  690. data/templates/new-instance/public/images/emoji/busts_in_silhouette.png +0 -0
  691. data/templates/new-instance/public/images/emoji/cactus.png +0 -0
  692. data/templates/new-instance/public/images/emoji/cake.png +0 -0
  693. data/templates/new-instance/public/images/emoji/calendar.png +0 -0
  694. data/templates/new-instance/public/images/emoji/calling.png +0 -0
  695. data/templates/new-instance/public/images/emoji/camel.png +0 -0
  696. data/templates/new-instance/public/images/emoji/camera.png +0 -0
  697. data/templates/new-instance/public/images/emoji/cancer.png +0 -0
  698. data/templates/new-instance/public/images/emoji/candy.png +0 -0
  699. data/templates/new-instance/public/images/emoji/capital_abcd.png +0 -0
  700. data/templates/new-instance/public/images/emoji/capricorn.png +0 -0
  701. data/templates/new-instance/public/images/emoji/car.png +0 -0
  702. data/templates/new-instance/public/images/emoji/card_index.png +0 -0
  703. data/templates/new-instance/public/images/emoji/carousel_horse.png +0 -0
  704. data/templates/new-instance/public/images/emoji/cat.png +0 -0
  705. data/templates/new-instance/public/images/emoji/cat2.png +0 -0
  706. data/templates/new-instance/public/images/emoji/cd.png +0 -0
  707. data/templates/new-instance/public/images/emoji/chart.png +0 -0
  708. data/templates/new-instance/public/images/emoji/chart_with_downwards_trend.png +0 -0
  709. data/templates/new-instance/public/images/emoji/chart_with_upwards_trend.png +0 -0
  710. data/templates/new-instance/public/images/emoji/checkered_flag.png +0 -0
  711. data/templates/new-instance/public/images/emoji/cherries.png +0 -0
  712. data/templates/new-instance/public/images/emoji/cherry_blossom.png +0 -0
  713. data/templates/new-instance/public/images/emoji/chestnut.png +0 -0
  714. data/templates/new-instance/public/images/emoji/chicken.png +0 -0
  715. data/templates/new-instance/public/images/emoji/children_crossing.png +0 -0
  716. data/templates/new-instance/public/images/emoji/chocolate_bar.png +0 -0
  717. data/templates/new-instance/public/images/emoji/christmas_tree.png +0 -0
  718. data/templates/new-instance/public/images/emoji/church.png +0 -0
  719. data/templates/new-instance/public/images/emoji/cinema.png +0 -0
  720. data/templates/new-instance/public/images/emoji/circus_tent.png +0 -0
  721. data/templates/new-instance/public/images/emoji/city_sunrise.png +0 -0
  722. data/templates/new-instance/public/images/emoji/city_sunset.png +0 -0
  723. data/templates/new-instance/public/images/emoji/cl.png +0 -0
  724. data/templates/new-instance/public/images/emoji/clap.png +0 -0
  725. data/templates/new-instance/public/images/emoji/clapper.png +0 -0
  726. data/templates/new-instance/public/images/emoji/clipboard.png +0 -0
  727. data/templates/new-instance/public/images/emoji/clock1.png +0 -0
  728. data/templates/new-instance/public/images/emoji/clock10.png +0 -0
  729. data/templates/new-instance/public/images/emoji/clock1030.png +0 -0
  730. data/templates/new-instance/public/images/emoji/clock11.png +0 -0
  731. data/templates/new-instance/public/images/emoji/clock1130.png +0 -0
  732. data/templates/new-instance/public/images/emoji/clock12.png +0 -0
  733. data/templates/new-instance/public/images/emoji/clock1230.png +0 -0
  734. data/templates/new-instance/public/images/emoji/clock130.png +0 -0
  735. data/templates/new-instance/public/images/emoji/clock2.png +0 -0
  736. data/templates/new-instance/public/images/emoji/clock230.png +0 -0
  737. data/templates/new-instance/public/images/emoji/clock3.png +0 -0
  738. data/templates/new-instance/public/images/emoji/clock330.png +0 -0
  739. data/templates/new-instance/public/images/emoji/clock4.png +0 -0
  740. data/templates/new-instance/public/images/emoji/clock430.png +0 -0
  741. data/templates/new-instance/public/images/emoji/clock5.png +0 -0
  742. data/templates/new-instance/public/images/emoji/clock530.png +0 -0
  743. data/templates/new-instance/public/images/emoji/clock6.png +0 -0
  744. data/templates/new-instance/public/images/emoji/clock630.png +0 -0
  745. data/templates/new-instance/public/images/emoji/clock7.png +0 -0
  746. data/templates/new-instance/public/images/emoji/clock730.png +0 -0
  747. data/templates/new-instance/public/images/emoji/clock8.png +0 -0
  748. data/templates/new-instance/public/images/emoji/clock830.png +0 -0
  749. data/templates/new-instance/public/images/emoji/clock9.png +0 -0
  750. data/templates/new-instance/public/images/emoji/clock930.png +0 -0
  751. data/templates/new-instance/public/images/emoji/closed_book.png +0 -0
  752. data/templates/new-instance/public/images/emoji/closed_lock_with_key.png +0 -0
  753. data/templates/new-instance/public/images/emoji/closed_umbrella.png +0 -0
  754. data/templates/new-instance/public/images/emoji/cloud.png +0 -0
  755. data/templates/new-instance/public/images/emoji/clubs.png +0 -0
  756. data/templates/new-instance/public/images/emoji/cn.png +0 -0
  757. data/templates/new-instance/public/images/emoji/cocktail.png +0 -0
  758. data/templates/new-instance/public/images/emoji/coffee.png +0 -0
  759. data/templates/new-instance/public/images/emoji/cold_sweat.png +0 -0
  760. data/templates/new-instance/public/images/emoji/collision.png +0 -0
  761. data/templates/new-instance/public/images/emoji/computer.png +0 -0
  762. data/templates/new-instance/public/images/emoji/confetti_ball.png +0 -0
  763. data/templates/new-instance/public/images/emoji/confounded.png +0 -0
  764. data/templates/new-instance/public/images/emoji/confused.png +0 -0
  765. data/templates/new-instance/public/images/emoji/congratulations.png +0 -0
  766. data/templates/new-instance/public/images/emoji/construction.png +0 -0
  767. data/templates/new-instance/public/images/emoji/construction_worker.png +0 -0
  768. data/templates/new-instance/public/images/emoji/convenience_store.png +0 -0
  769. data/templates/new-instance/public/images/emoji/cookie.png +0 -0
  770. data/templates/new-instance/public/images/emoji/cool.png +0 -0
  771. data/templates/new-instance/public/images/emoji/cop.png +0 -0
  772. data/templates/new-instance/public/images/emoji/copyright.png +0 -0
  773. data/templates/new-instance/public/images/emoji/corn.png +0 -0
  774. data/templates/new-instance/public/images/emoji/couple.png +0 -0
  775. data/templates/new-instance/public/images/emoji/couple_with_heart.png +0 -0
  776. data/templates/new-instance/public/images/emoji/couplekiss.png +0 -0
  777. data/templates/new-instance/public/images/emoji/cow.png +0 -0
  778. data/templates/new-instance/public/images/emoji/cow2.png +0 -0
  779. data/templates/new-instance/public/images/emoji/credit_card.png +0 -0
  780. data/templates/new-instance/public/images/emoji/crescent_moon.png +0 -0
  781. data/templates/new-instance/public/images/emoji/crocodile.png +0 -0
  782. data/templates/new-instance/public/images/emoji/crossed_flags.png +0 -0
  783. data/templates/new-instance/public/images/emoji/crown.png +0 -0
  784. data/templates/new-instance/public/images/emoji/cry.png +0 -0
  785. data/templates/new-instance/public/images/emoji/crying_cat_face.png +0 -0
  786. data/templates/new-instance/public/images/emoji/crystal_ball.png +0 -0
  787. data/templates/new-instance/public/images/emoji/cupid.png +0 -0
  788. data/templates/new-instance/public/images/emoji/curly_loop.png +0 -0
  789. data/templates/new-instance/public/images/emoji/currency_exchange.png +0 -0
  790. data/templates/new-instance/public/images/emoji/curry.png +0 -0
  791. data/templates/new-instance/public/images/emoji/custard.png +0 -0
  792. data/templates/new-instance/public/images/emoji/customs.png +0 -0
  793. data/templates/new-instance/public/images/emoji/cyclone.png +0 -0
  794. data/templates/new-instance/public/images/emoji/dancer.png +0 -0
  795. data/templates/new-instance/public/images/emoji/dancers.png +0 -0
  796. data/templates/new-instance/public/images/emoji/dango.png +0 -0
  797. data/templates/new-instance/public/images/emoji/dart.png +0 -0
  798. data/templates/new-instance/public/images/emoji/dash.png +0 -0
  799. data/templates/new-instance/public/images/emoji/date.png +0 -0
  800. data/templates/new-instance/public/images/emoji/de.png +0 -0
  801. data/templates/new-instance/public/images/emoji/deciduous_tree.png +0 -0
  802. data/templates/new-instance/public/images/emoji/department_store.png +0 -0
  803. data/templates/new-instance/public/images/emoji/diamond_shape_with_a_dot_inside.png +0 -0
  804. data/templates/new-instance/public/images/emoji/diamonds.png +0 -0
  805. data/templates/new-instance/public/images/emoji/disappointed.png +0 -0
  806. data/templates/new-instance/public/images/emoji/disappointed_relieved.png +0 -0
  807. data/templates/new-instance/public/images/emoji/dizzy.png +0 -0
  808. data/templates/new-instance/public/images/emoji/dizzy_face.png +0 -0
  809. data/templates/new-instance/public/images/emoji/do_not_litter.png +0 -0
  810. data/templates/new-instance/public/images/emoji/dog.png +0 -0
  811. data/templates/new-instance/public/images/emoji/dog2.png +0 -0
  812. data/templates/new-instance/public/images/emoji/dollar.png +0 -0
  813. data/templates/new-instance/public/images/emoji/dolls.png +0 -0
  814. data/templates/new-instance/public/images/emoji/dolphin.png +0 -0
  815. data/templates/new-instance/public/images/emoji/door.png +0 -0
  816. data/templates/new-instance/public/images/emoji/doughnut.png +0 -0
  817. data/templates/new-instance/public/images/emoji/dragon.png +0 -0
  818. data/templates/new-instance/public/images/emoji/dragon_face.png +0 -0
  819. data/templates/new-instance/public/images/emoji/dress.png +0 -0
  820. data/templates/new-instance/public/images/emoji/dromedary_camel.png +0 -0
  821. data/templates/new-instance/public/images/emoji/droplet.png +0 -0
  822. data/templates/new-instance/public/images/emoji/dvd.png +0 -0
  823. data/templates/new-instance/public/images/emoji/e-mail.png +0 -0
  824. data/templates/new-instance/public/images/emoji/ear.png +0 -0
  825. data/templates/new-instance/public/images/emoji/ear_of_rice.png +0 -0
  826. data/templates/new-instance/public/images/emoji/earth_africa.png +0 -0
  827. data/templates/new-instance/public/images/emoji/earth_americas.png +0 -0
  828. data/templates/new-instance/public/images/emoji/earth_asia.png +0 -0
  829. data/templates/new-instance/public/images/emoji/egg.png +0 -0
  830. data/templates/new-instance/public/images/emoji/eggplant.png +0 -0
  831. data/templates/new-instance/public/images/emoji/eight.png +0 -0
  832. data/templates/new-instance/public/images/emoji/eight_pointed_black_star.png +0 -0
  833. data/templates/new-instance/public/images/emoji/eight_spoked_asterisk.png +0 -0
  834. data/templates/new-instance/public/images/emoji/electric_plug.png +0 -0
  835. data/templates/new-instance/public/images/emoji/elephant.png +0 -0
  836. data/templates/new-instance/public/images/emoji/email.png +0 -0
  837. data/templates/new-instance/public/images/emoji/end.png +0 -0
  838. data/templates/new-instance/public/images/emoji/envelope.png +0 -0
  839. data/templates/new-instance/public/images/emoji/envelope_with_arrow.png +0 -0
  840. data/templates/new-instance/public/images/emoji/es.png +0 -0
  841. data/templates/new-instance/public/images/emoji/euro.png +0 -0
  842. data/templates/new-instance/public/images/emoji/european_castle.png +0 -0
  843. data/templates/new-instance/public/images/emoji/european_post_office.png +0 -0
  844. data/templates/new-instance/public/images/emoji/evergreen_tree.png +0 -0
  845. data/templates/new-instance/public/images/emoji/exclamation.png +0 -0
  846. data/templates/new-instance/public/images/emoji/expressionless.png +0 -0
  847. data/templates/new-instance/public/images/emoji/eyeglasses.png +0 -0
  848. data/templates/new-instance/public/images/emoji/eyes.png +0 -0
  849. data/templates/new-instance/public/images/emoji/facepunch.png +0 -0
  850. data/templates/new-instance/public/images/emoji/factory.png +0 -0
  851. data/templates/new-instance/public/images/emoji/fallen_leaf.png +0 -0
  852. data/templates/new-instance/public/images/emoji/family.png +0 -0
  853. data/templates/new-instance/public/images/emoji/fast_forward.png +0 -0
  854. data/templates/new-instance/public/images/emoji/fax.png +0 -0
  855. data/templates/new-instance/public/images/emoji/fearful.png +0 -0
  856. data/templates/new-instance/public/images/emoji/feelsgood.png +0 -0
  857. data/templates/new-instance/public/images/emoji/feet.png +0 -0
  858. data/templates/new-instance/public/images/emoji/ferris_wheel.png +0 -0
  859. data/templates/new-instance/public/images/emoji/file_folder.png +0 -0
  860. data/templates/new-instance/public/images/emoji/finnadie.png +0 -0
  861. data/templates/new-instance/public/images/emoji/fire.png +0 -0
  862. data/templates/new-instance/public/images/emoji/fire_engine.png +0 -0
  863. data/templates/new-instance/public/images/emoji/fireworks.png +0 -0
  864. data/templates/new-instance/public/images/emoji/first_quarter_moon.png +0 -0
  865. data/templates/new-instance/public/images/emoji/first_quarter_moon_with_face.png +0 -0
  866. data/templates/new-instance/public/images/emoji/fish.png +0 -0
  867. data/templates/new-instance/public/images/emoji/fish_cake.png +0 -0
  868. data/templates/new-instance/public/images/emoji/fishing_pole_and_fish.png +0 -0
  869. data/templates/new-instance/public/images/emoji/fist.png +0 -0
  870. data/templates/new-instance/public/images/emoji/five.png +0 -0
  871. data/templates/new-instance/public/images/emoji/flags.png +0 -0
  872. data/templates/new-instance/public/images/emoji/flashlight.png +0 -0
  873. data/templates/new-instance/public/images/emoji/floppy_disk.png +0 -0
  874. data/templates/new-instance/public/images/emoji/flower_playing_cards.png +0 -0
  875. data/templates/new-instance/public/images/emoji/flushed.png +0 -0
  876. data/templates/new-instance/public/images/emoji/foggy.png +0 -0
  877. data/templates/new-instance/public/images/emoji/football.png +0 -0
  878. data/templates/new-instance/public/images/emoji/footprints.png +0 -0
  879. data/templates/new-instance/public/images/emoji/fork_and_knife.png +0 -0
  880. data/templates/new-instance/public/images/emoji/fountain.png +0 -0
  881. data/templates/new-instance/public/images/emoji/four.png +0 -0
  882. data/templates/new-instance/public/images/emoji/four_leaf_clover.png +0 -0
  883. data/templates/new-instance/public/images/emoji/fr.png +0 -0
  884. data/templates/new-instance/public/images/emoji/free.png +0 -0
  885. data/templates/new-instance/public/images/emoji/fried_shrimp.png +0 -0
  886. data/templates/new-instance/public/images/emoji/fries.png +0 -0
  887. data/templates/new-instance/public/images/emoji/frog.png +0 -0
  888. data/templates/new-instance/public/images/emoji/frowning.png +0 -0
  889. data/templates/new-instance/public/images/emoji/fu.png +0 -0
  890. data/templates/new-instance/public/images/emoji/fuelpump.png +0 -0
  891. data/templates/new-instance/public/images/emoji/full_moon.png +0 -0
  892. data/templates/new-instance/public/images/emoji/full_moon_with_face.png +0 -0
  893. data/templates/new-instance/public/images/emoji/game_die.png +0 -0
  894. data/templates/new-instance/public/images/emoji/gb.png +0 -0
  895. data/templates/new-instance/public/images/emoji/gem.png +0 -0
  896. data/templates/new-instance/public/images/emoji/gemini.png +0 -0
  897. data/templates/new-instance/public/images/emoji/ghost.png +0 -0
  898. data/templates/new-instance/public/images/emoji/gift.png +0 -0
  899. data/templates/new-instance/public/images/emoji/gift_heart.png +0 -0
  900. data/templates/new-instance/public/images/emoji/girl.png +0 -0
  901. data/templates/new-instance/public/images/emoji/globe_with_meridians.png +0 -0
  902. data/templates/new-instance/public/images/emoji/goat.png +0 -0
  903. data/templates/new-instance/public/images/emoji/goberserk.png +0 -0
  904. data/templates/new-instance/public/images/emoji/godmode.png +0 -0
  905. data/templates/new-instance/public/images/emoji/golf.png +0 -0
  906. data/templates/new-instance/public/images/emoji/grapes.png +0 -0
  907. data/templates/new-instance/public/images/emoji/green_apple.png +0 -0
  908. data/templates/new-instance/public/images/emoji/green_book.png +0 -0
  909. data/templates/new-instance/public/images/emoji/green_heart.png +0 -0
  910. data/templates/new-instance/public/images/emoji/grey_exclamation.png +0 -0
  911. data/templates/new-instance/public/images/emoji/grey_question.png +0 -0
  912. data/templates/new-instance/public/images/emoji/grimacing.png +0 -0
  913. data/templates/new-instance/public/images/emoji/grin.png +0 -0
  914. data/templates/new-instance/public/images/emoji/grinning.png +0 -0
  915. data/templates/new-instance/public/images/emoji/guardsman.png +0 -0
  916. data/templates/new-instance/public/images/emoji/guitar.png +0 -0
  917. data/templates/new-instance/public/images/emoji/gun.png +0 -0
  918. data/templates/new-instance/public/images/emoji/haircut.png +0 -0
  919. data/templates/new-instance/public/images/emoji/hamburger.png +0 -0
  920. data/templates/new-instance/public/images/emoji/hammer.png +0 -0
  921. data/templates/new-instance/public/images/emoji/hamster.png +0 -0
  922. data/templates/new-instance/public/images/emoji/hand.png +0 -0
  923. data/templates/new-instance/public/images/emoji/handbag.png +0 -0
  924. data/templates/new-instance/public/images/emoji/hankey.png +0 -0
  925. data/templates/new-instance/public/images/emoji/hash.png +0 -0
  926. data/templates/new-instance/public/images/emoji/hatched_chick.png +0 -0
  927. data/templates/new-instance/public/images/emoji/hatching_chick.png +0 -0
  928. data/templates/new-instance/public/images/emoji/headphones.png +0 -0
  929. data/templates/new-instance/public/images/emoji/hear_no_evil.png +0 -0
  930. data/templates/new-instance/public/images/emoji/heart.png +0 -0
  931. data/templates/new-instance/public/images/emoji/heart_decoration.png +0 -0
  932. data/templates/new-instance/public/images/emoji/heart_eyes.png +0 -0
  933. data/templates/new-instance/public/images/emoji/heart_eyes_cat.png +0 -0
  934. data/templates/new-instance/public/images/emoji/heartbeat.png +0 -0
  935. data/templates/new-instance/public/images/emoji/heartpulse.png +0 -0
  936. data/templates/new-instance/public/images/emoji/hearts.png +0 -0
  937. data/templates/new-instance/public/images/emoji/heavy_check_mark.png +0 -0
  938. data/templates/new-instance/public/images/emoji/heavy_division_sign.png +0 -0
  939. data/templates/new-instance/public/images/emoji/heavy_dollar_sign.png +0 -0
  940. data/templates/new-instance/public/images/emoji/heavy_exclamation_mark.png +0 -0
  941. data/templates/new-instance/public/images/emoji/heavy_minus_sign.png +0 -0
  942. data/templates/new-instance/public/images/emoji/heavy_multiplication_x.png +0 -0
  943. data/templates/new-instance/public/images/emoji/heavy_plus_sign.png +0 -0
  944. data/templates/new-instance/public/images/emoji/helicopter.png +0 -0
  945. data/templates/new-instance/public/images/emoji/herb.png +0 -0
  946. data/templates/new-instance/public/images/emoji/hibiscus.png +0 -0
  947. data/templates/new-instance/public/images/emoji/high_brightness.png +0 -0
  948. data/templates/new-instance/public/images/emoji/high_heel.png +0 -0
  949. data/templates/new-instance/public/images/emoji/hocho.png +0 -0
  950. data/templates/new-instance/public/images/emoji/honey_pot.png +0 -0
  951. data/templates/new-instance/public/images/emoji/honeybee.png +0 -0
  952. data/templates/new-instance/public/images/emoji/horse.png +0 -0
  953. data/templates/new-instance/public/images/emoji/horse_racing.png +0 -0
  954. data/templates/new-instance/public/images/emoji/hospital.png +0 -0
  955. data/templates/new-instance/public/images/emoji/hotel.png +0 -0
  956. data/templates/new-instance/public/images/emoji/hotsprings.png +0 -0
  957. data/templates/new-instance/public/images/emoji/hourglass.png +0 -0
  958. data/templates/new-instance/public/images/emoji/hourglass_flowing_sand.png +0 -0
  959. data/templates/new-instance/public/images/emoji/house.png +0 -0
  960. data/templates/new-instance/public/images/emoji/house_with_garden.png +0 -0
  961. data/templates/new-instance/public/images/emoji/hurtrealbad.png +0 -0
  962. data/templates/new-instance/public/images/emoji/hushed.png +0 -0
  963. data/templates/new-instance/public/images/emoji/ice_cream.png +0 -0
  964. data/templates/new-instance/public/images/emoji/icecream.png +0 -0
  965. data/templates/new-instance/public/images/emoji/id.png +0 -0
  966. data/templates/new-instance/public/images/emoji/ideograph_advantage.png +0 -0
  967. data/templates/new-instance/public/images/emoji/imp.png +0 -0
  968. data/templates/new-instance/public/images/emoji/inbox_tray.png +0 -0
  969. data/templates/new-instance/public/images/emoji/incoming_envelope.png +0 -0
  970. data/templates/new-instance/public/images/emoji/information_desk_person.png +0 -0
  971. data/templates/new-instance/public/images/emoji/information_source.png +0 -0
  972. data/templates/new-instance/public/images/emoji/innocent.png +0 -0
  973. data/templates/new-instance/public/images/emoji/interrobang.png +0 -0
  974. data/templates/new-instance/public/images/emoji/iphone.png +0 -0
  975. data/templates/new-instance/public/images/emoji/it.png +0 -0
  976. data/templates/new-instance/public/images/emoji/izakaya_lantern.png +0 -0
  977. data/templates/new-instance/public/images/emoji/jack_o_lantern.png +0 -0
  978. data/templates/new-instance/public/images/emoji/japan.png +0 -0
  979. data/templates/new-instance/public/images/emoji/japanese_castle.png +0 -0
  980. data/templates/new-instance/public/images/emoji/japanese_goblin.png +0 -0
  981. data/templates/new-instance/public/images/emoji/japanese_ogre.png +0 -0
  982. data/templates/new-instance/public/images/emoji/jeans.png +0 -0
  983. data/templates/new-instance/public/images/emoji/joy.png +0 -0
  984. data/templates/new-instance/public/images/emoji/joy_cat.png +0 -0
  985. data/templates/new-instance/public/images/emoji/jp.png +0 -0
  986. data/templates/new-instance/public/images/emoji/key.png +0 -0
  987. data/templates/new-instance/public/images/emoji/keycap_ten.png +0 -0
  988. data/templates/new-instance/public/images/emoji/kimono.png +0 -0
  989. data/templates/new-instance/public/images/emoji/kiss.png +0 -0
  990. data/templates/new-instance/public/images/emoji/kissing.png +0 -0
  991. data/templates/new-instance/public/images/emoji/kissing_cat.png +0 -0
  992. data/templates/new-instance/public/images/emoji/kissing_closed_eyes.png +0 -0
  993. data/templates/new-instance/public/images/emoji/kissing_heart.png +0 -0
  994. data/templates/new-instance/public/images/emoji/kissing_smiling_eyes.png +0 -0
  995. data/templates/new-instance/public/images/emoji/koala.png +0 -0
  996. data/templates/new-instance/public/images/emoji/koko.png +0 -0
  997. data/templates/new-instance/public/images/emoji/kr.png +0 -0
  998. data/templates/new-instance/public/images/emoji/lantern.png +0 -0
  999. data/templates/new-instance/public/images/emoji/large_blue_circle.png +0 -0
  1000. data/templates/new-instance/public/images/emoji/large_blue_diamond.png +0 -0
  1001. data/templates/new-instance/public/images/emoji/large_orange_diamond.png +0 -0
  1002. data/templates/new-instance/public/images/emoji/last_quarter_moon.png +0 -0
  1003. data/templates/new-instance/public/images/emoji/last_quarter_moon_with_face.png +0 -0
  1004. data/templates/new-instance/public/images/emoji/laughing.png +0 -0
  1005. data/templates/new-instance/public/images/emoji/leaves.png +0 -0
  1006. data/templates/new-instance/public/images/emoji/ledger.png +0 -0
  1007. data/templates/new-instance/public/images/emoji/left_luggage.png +0 -0
  1008. data/templates/new-instance/public/images/emoji/left_right_arrow.png +0 -0
  1009. data/templates/new-instance/public/images/emoji/leftwards_arrow_with_hook.png +0 -0
  1010. data/templates/new-instance/public/images/emoji/lemon.png +0 -0
  1011. data/templates/new-instance/public/images/emoji/leo.png +0 -0
  1012. data/templates/new-instance/public/images/emoji/leopard.png +0 -0
  1013. data/templates/new-instance/public/images/emoji/libra.png +0 -0
  1014. data/templates/new-instance/public/images/emoji/light_rail.png +0 -0
  1015. data/templates/new-instance/public/images/emoji/link.png +0 -0
  1016. data/templates/new-instance/public/images/emoji/lips.png +0 -0
  1017. data/templates/new-instance/public/images/emoji/lipstick.png +0 -0
  1018. data/templates/new-instance/public/images/emoji/lock.png +0 -0
  1019. data/templates/new-instance/public/images/emoji/lock_with_ink_pen.png +0 -0
  1020. data/templates/new-instance/public/images/emoji/lollipop.png +0 -0
  1021. data/templates/new-instance/public/images/emoji/loop.png +0 -0
  1022. data/templates/new-instance/public/images/emoji/loudspeaker.png +0 -0
  1023. data/templates/new-instance/public/images/emoji/love_hotel.png +0 -0
  1024. data/templates/new-instance/public/images/emoji/love_letter.png +0 -0
  1025. data/templates/new-instance/public/images/emoji/low_brightness.png +0 -0
  1026. data/templates/new-instance/public/images/emoji/m.png +0 -0
  1027. data/templates/new-instance/public/images/emoji/mag.png +0 -0
  1028. data/templates/new-instance/public/images/emoji/mag_right.png +0 -0
  1029. data/templates/new-instance/public/images/emoji/mahjong.png +0 -0
  1030. data/templates/new-instance/public/images/emoji/mailbox.png +0 -0
  1031. data/templates/new-instance/public/images/emoji/mailbox_closed.png +0 -0
  1032. data/templates/new-instance/public/images/emoji/mailbox_with_mail.png +0 -0
  1033. data/templates/new-instance/public/images/emoji/mailbox_with_no_mail.png +0 -0
  1034. data/templates/new-instance/public/images/emoji/man.png +0 -0
  1035. data/templates/new-instance/public/images/emoji/man_with_gua_pi_mao.png +0 -0
  1036. data/templates/new-instance/public/images/emoji/man_with_turban.png +0 -0
  1037. data/templates/new-instance/public/images/emoji/mans_shoe.png +0 -0
  1038. data/templates/new-instance/public/images/emoji/maple_leaf.png +0 -0
  1039. data/templates/new-instance/public/images/emoji/mask.png +0 -0
  1040. data/templates/new-instance/public/images/emoji/massage.png +0 -0
  1041. data/templates/new-instance/public/images/emoji/meat_on_bone.png +0 -0
  1042. data/templates/new-instance/public/images/emoji/mega.png +0 -0
  1043. data/templates/new-instance/public/images/emoji/melon.png +0 -0
  1044. data/templates/new-instance/public/images/emoji/memo.png +0 -0
  1045. data/templates/new-instance/public/images/emoji/mens.png +0 -0
  1046. data/templates/new-instance/public/images/emoji/metal.png +0 -0
  1047. data/templates/new-instance/public/images/emoji/metro.png +0 -0
  1048. data/templates/new-instance/public/images/emoji/microphone.png +0 -0
  1049. data/templates/new-instance/public/images/emoji/microscope.png +0 -0
  1050. data/templates/new-instance/public/images/emoji/milky_way.png +0 -0
  1051. data/templates/new-instance/public/images/emoji/minibus.png +0 -0
  1052. data/templates/new-instance/public/images/emoji/minidisc.png +0 -0
  1053. data/templates/new-instance/public/images/emoji/mobile_phone_off.png +0 -0
  1054. data/templates/new-instance/public/images/emoji/money_with_wings.png +0 -0
  1055. data/templates/new-instance/public/images/emoji/moneybag.png +0 -0
  1056. data/templates/new-instance/public/images/emoji/monkey.png +0 -0
  1057. data/templates/new-instance/public/images/emoji/monkey_face.png +0 -0
  1058. data/templates/new-instance/public/images/emoji/monorail.png +0 -0
  1059. data/templates/new-instance/public/images/emoji/moon.png +0 -0
  1060. data/templates/new-instance/public/images/emoji/mortar_board.png +0 -0
  1061. data/templates/new-instance/public/images/emoji/mount_fuji.png +0 -0
  1062. data/templates/new-instance/public/images/emoji/mountain_bicyclist.png +0 -0
  1063. data/templates/new-instance/public/images/emoji/mountain_cableway.png +0 -0
  1064. data/templates/new-instance/public/images/emoji/mountain_railway.png +0 -0
  1065. data/templates/new-instance/public/images/emoji/mouse.png +0 -0
  1066. data/templates/new-instance/public/images/emoji/mouse2.png +0 -0
  1067. data/templates/new-instance/public/images/emoji/movie_camera.png +0 -0
  1068. data/templates/new-instance/public/images/emoji/moyai.png +0 -0
  1069. data/templates/new-instance/public/images/emoji/muscle.png +0 -0
  1070. data/templates/new-instance/public/images/emoji/mushroom.png +0 -0
  1071. data/templates/new-instance/public/images/emoji/musical_keyboard.png +0 -0
  1072. data/templates/new-instance/public/images/emoji/musical_note.png +0 -0
  1073. data/templates/new-instance/public/images/emoji/musical_score.png +0 -0
  1074. data/templates/new-instance/public/images/emoji/mute.png +0 -0
  1075. data/templates/new-instance/public/images/emoji/nail_care.png +0 -0
  1076. data/templates/new-instance/public/images/emoji/name_badge.png +0 -0
  1077. data/templates/new-instance/public/images/emoji/neckbeard.png +0 -0
  1078. data/templates/new-instance/public/images/emoji/necktie.png +0 -0
  1079. data/templates/new-instance/public/images/emoji/negative_squared_cross_mark.png +0 -0
  1080. data/templates/new-instance/public/images/emoji/neutral_face.png +0 -0
  1081. data/templates/new-instance/public/images/emoji/new.png +0 -0
  1082. data/templates/new-instance/public/images/emoji/new_moon.png +0 -0
  1083. data/templates/new-instance/public/images/emoji/new_moon_with_face.png +0 -0
  1084. data/templates/new-instance/public/images/emoji/newspaper.png +0 -0
  1085. data/templates/new-instance/public/images/emoji/ng.png +0 -0
  1086. data/templates/new-instance/public/images/emoji/nine.png +0 -0
  1087. data/templates/new-instance/public/images/emoji/no_bell.png +0 -0
  1088. data/templates/new-instance/public/images/emoji/no_bicycles.png +0 -0
  1089. data/templates/new-instance/public/images/emoji/no_entry.png +0 -0
  1090. data/templates/new-instance/public/images/emoji/no_entry_sign.png +0 -0
  1091. data/templates/new-instance/public/images/emoji/no_good.png +0 -0
  1092. data/templates/new-instance/public/images/emoji/no_mobile_phones.png +0 -0
  1093. data/templates/new-instance/public/images/emoji/no_mouth.png +0 -0
  1094. data/templates/new-instance/public/images/emoji/no_pedestrians.png +0 -0
  1095. data/templates/new-instance/public/images/emoji/no_smoking.png +0 -0
  1096. data/templates/new-instance/public/images/emoji/non-potable_water.png +0 -0
  1097. data/templates/new-instance/public/images/emoji/nose.png +0 -0
  1098. data/templates/new-instance/public/images/emoji/notebook.png +0 -0
  1099. data/templates/new-instance/public/images/emoji/notebook_with_decorative_cover.png +0 -0
  1100. data/templates/new-instance/public/images/emoji/notes.png +0 -0
  1101. data/templates/new-instance/public/images/emoji/nut_and_bolt.png +0 -0
  1102. data/templates/new-instance/public/images/emoji/o.png +0 -0
  1103. data/templates/new-instance/public/images/emoji/o2.png +0 -0
  1104. data/templates/new-instance/public/images/emoji/ocean.png +0 -0
  1105. data/templates/new-instance/public/images/emoji/octocat.png +0 -0
  1106. data/templates/new-instance/public/images/emoji/octopus.png +0 -0
  1107. data/templates/new-instance/public/images/emoji/oden.png +0 -0
  1108. data/templates/new-instance/public/images/emoji/office.png +0 -0
  1109. data/templates/new-instance/public/images/emoji/ok.png +0 -0
  1110. data/templates/new-instance/public/images/emoji/ok_hand.png +0 -0
  1111. data/templates/new-instance/public/images/emoji/ok_woman.png +0 -0
  1112. data/templates/new-instance/public/images/emoji/older_man.png +0 -0
  1113. data/templates/new-instance/public/images/emoji/older_woman.png +0 -0
  1114. data/templates/new-instance/public/images/emoji/on.png +0 -0
  1115. data/templates/new-instance/public/images/emoji/oncoming_automobile.png +0 -0
  1116. data/templates/new-instance/public/images/emoji/oncoming_bus.png +0 -0
  1117. data/templates/new-instance/public/images/emoji/oncoming_police_car.png +0 -0
  1118. data/templates/new-instance/public/images/emoji/oncoming_taxi.png +0 -0
  1119. data/templates/new-instance/public/images/emoji/one.png +0 -0
  1120. data/templates/new-instance/public/images/emoji/open_book.png +0 -0
  1121. data/templates/new-instance/public/images/emoji/open_file_folder.png +0 -0
  1122. data/templates/new-instance/public/images/emoji/open_hands.png +0 -0
  1123. data/templates/new-instance/public/images/emoji/open_mouth.png +0 -0
  1124. data/templates/new-instance/public/images/emoji/ophiuchus.png +0 -0
  1125. data/templates/new-instance/public/images/emoji/orange_book.png +0 -0
  1126. data/templates/new-instance/public/images/emoji/outbox_tray.png +0 -0
  1127. data/templates/new-instance/public/images/emoji/ox.png +0 -0
  1128. data/templates/new-instance/public/images/emoji/package.png +0 -0
  1129. data/templates/new-instance/public/images/emoji/page_facing_up.png +0 -0
  1130. data/templates/new-instance/public/images/emoji/page_with_curl.png +0 -0
  1131. data/templates/new-instance/public/images/emoji/pager.png +0 -0
  1132. data/templates/new-instance/public/images/emoji/palm_tree.png +0 -0
  1133. data/templates/new-instance/public/images/emoji/panda_face.png +0 -0
  1134. data/templates/new-instance/public/images/emoji/paperclip.png +0 -0
  1135. data/templates/new-instance/public/images/emoji/parking.png +0 -0
  1136. data/templates/new-instance/public/images/emoji/part_alternation_mark.png +0 -0
  1137. data/templates/new-instance/public/images/emoji/partly_sunny.png +0 -0
  1138. data/templates/new-instance/public/images/emoji/passport_control.png +0 -0
  1139. data/templates/new-instance/public/images/emoji/paw_prints.png +0 -0
  1140. data/templates/new-instance/public/images/emoji/peach.png +0 -0
  1141. data/templates/new-instance/public/images/emoji/pear.png +0 -0
  1142. data/templates/new-instance/public/images/emoji/pencil.png +0 -0
  1143. data/templates/new-instance/public/images/emoji/pencil2.png +0 -0
  1144. data/templates/new-instance/public/images/emoji/penguin.png +0 -0
  1145. data/templates/new-instance/public/images/emoji/pensive.png +0 -0
  1146. data/templates/new-instance/public/images/emoji/performing_arts.png +0 -0
  1147. data/templates/new-instance/public/images/emoji/persevere.png +0 -0
  1148. data/templates/new-instance/public/images/emoji/person_frowning.png +0 -0
  1149. data/templates/new-instance/public/images/emoji/person_with_blond_hair.png +0 -0
  1150. data/templates/new-instance/public/images/emoji/person_with_pouting_face.png +0 -0
  1151. data/templates/new-instance/public/images/emoji/phone.png +0 -0
  1152. data/templates/new-instance/public/images/emoji/pig.png +0 -0
  1153. data/templates/new-instance/public/images/emoji/pig2.png +0 -0
  1154. data/templates/new-instance/public/images/emoji/pig_nose.png +0 -0
  1155. data/templates/new-instance/public/images/emoji/pill.png +0 -0
  1156. data/templates/new-instance/public/images/emoji/pineapple.png +0 -0
  1157. data/templates/new-instance/public/images/emoji/pisces.png +0 -0
  1158. data/templates/new-instance/public/images/emoji/pizza.png +0 -0
  1159. data/templates/new-instance/public/images/emoji/point_down.png +0 -0
  1160. data/templates/new-instance/public/images/emoji/point_left.png +0 -0
  1161. data/templates/new-instance/public/images/emoji/point_right.png +0 -0
  1162. data/templates/new-instance/public/images/emoji/point_up.png +0 -0
  1163. data/templates/new-instance/public/images/emoji/point_up_2.png +0 -0
  1164. data/templates/new-instance/public/images/emoji/police_car.png +0 -0
  1165. data/templates/new-instance/public/images/emoji/poodle.png +0 -0
  1166. data/templates/new-instance/public/images/emoji/poop.png +0 -0
  1167. data/templates/new-instance/public/images/emoji/post_office.png +0 -0
  1168. data/templates/new-instance/public/images/emoji/postal_horn.png +0 -0
  1169. data/templates/new-instance/public/images/emoji/postbox.png +0 -0
  1170. data/templates/new-instance/public/images/emoji/potable_water.png +0 -0
  1171. data/templates/new-instance/public/images/emoji/pouch.png +0 -0
  1172. data/templates/new-instance/public/images/emoji/poultry_leg.png +0 -0
  1173. data/templates/new-instance/public/images/emoji/pound.png +0 -0
  1174. data/templates/new-instance/public/images/emoji/pouting_cat.png +0 -0
  1175. data/templates/new-instance/public/images/emoji/pray.png +0 -0
  1176. data/templates/new-instance/public/images/emoji/princess.png +0 -0
  1177. data/templates/new-instance/public/images/emoji/punch.png +0 -0
  1178. data/templates/new-instance/public/images/emoji/purple_heart.png +0 -0
  1179. data/templates/new-instance/public/images/emoji/purse.png +0 -0
  1180. data/templates/new-instance/public/images/emoji/pushpin.png +0 -0
  1181. data/templates/new-instance/public/images/emoji/put_litter_in_its_place.png +0 -0
  1182. data/templates/new-instance/public/images/emoji/question.png +0 -0
  1183. data/templates/new-instance/public/images/emoji/rabbit.png +0 -0
  1184. data/templates/new-instance/public/images/emoji/rabbit2.png +0 -0
  1185. data/templates/new-instance/public/images/emoji/racehorse.png +0 -0
  1186. data/templates/new-instance/public/images/emoji/radio.png +0 -0
  1187. data/templates/new-instance/public/images/emoji/radio_button.png +0 -0
  1188. data/templates/new-instance/public/images/emoji/rage.png +0 -0
  1189. data/templates/new-instance/public/images/emoji/rage1.png +0 -0
  1190. data/templates/new-instance/public/images/emoji/rage2.png +0 -0
  1191. data/templates/new-instance/public/images/emoji/rage3.png +0 -0
  1192. data/templates/new-instance/public/images/emoji/rage4.png +0 -0
  1193. data/templates/new-instance/public/images/emoji/railway_car.png +0 -0
  1194. data/templates/new-instance/public/images/emoji/rainbow.png +0 -0
  1195. data/templates/new-instance/public/images/emoji/raised_hand.png +0 -0
  1196. data/templates/new-instance/public/images/emoji/raised_hands.png +0 -0
  1197. data/templates/new-instance/public/images/emoji/raising_hand.png +0 -0
  1198. data/templates/new-instance/public/images/emoji/ram.png +0 -0
  1199. data/templates/new-instance/public/images/emoji/ramen.png +0 -0
  1200. data/templates/new-instance/public/images/emoji/rat.png +0 -0
  1201. data/templates/new-instance/public/images/emoji/recycle.png +0 -0
  1202. data/templates/new-instance/public/images/emoji/red_car.png +0 -0
  1203. data/templates/new-instance/public/images/emoji/red_circle.png +0 -0
  1204. data/templates/new-instance/public/images/emoji/registered.png +0 -0
  1205. data/templates/new-instance/public/images/emoji/relaxed.png +0 -0
  1206. data/templates/new-instance/public/images/emoji/relieved.png +0 -0
  1207. data/templates/new-instance/public/images/emoji/repeat.png +0 -0
  1208. data/templates/new-instance/public/images/emoji/repeat_one.png +0 -0
  1209. data/templates/new-instance/public/images/emoji/restroom.png +0 -0
  1210. data/templates/new-instance/public/images/emoji/revolving_hearts.png +0 -0
  1211. data/templates/new-instance/public/images/emoji/rewind.png +0 -0
  1212. data/templates/new-instance/public/images/emoji/ribbon.png +0 -0
  1213. data/templates/new-instance/public/images/emoji/rice.png +0 -0
  1214. data/templates/new-instance/public/images/emoji/rice_ball.png +0 -0
  1215. data/templates/new-instance/public/images/emoji/rice_cracker.png +0 -0
  1216. data/templates/new-instance/public/images/emoji/rice_scene.png +0 -0
  1217. data/templates/new-instance/public/images/emoji/ring.png +0 -0
  1218. data/templates/new-instance/public/images/emoji/rocket.png +0 -0
  1219. data/templates/new-instance/public/images/emoji/roller_coaster.png +0 -0
  1220. data/templates/new-instance/public/images/emoji/rooster.png +0 -0
  1221. data/templates/new-instance/public/images/emoji/rose.png +0 -0
  1222. data/templates/new-instance/public/images/emoji/rotating_light.png +0 -0
  1223. data/templates/new-instance/public/images/emoji/round_pushpin.png +0 -0
  1224. data/templates/new-instance/public/images/emoji/rowboat.png +0 -0
  1225. data/templates/new-instance/public/images/emoji/ru.png +0 -0
  1226. data/templates/new-instance/public/images/emoji/rugby_football.png +0 -0
  1227. data/templates/new-instance/public/images/emoji/runner.png +0 -0
  1228. data/templates/new-instance/public/images/emoji/running.png +0 -0
  1229. data/templates/new-instance/public/images/emoji/running_shirt_with_sash.png +0 -0
  1230. data/templates/new-instance/public/images/emoji/sa.png +0 -0
  1231. data/templates/new-instance/public/images/emoji/sagittarius.png +0 -0
  1232. data/templates/new-instance/public/images/emoji/sailboat.png +0 -0
  1233. data/templates/new-instance/public/images/emoji/sake.png +0 -0
  1234. data/templates/new-instance/public/images/emoji/sandal.png +0 -0
  1235. data/templates/new-instance/public/images/emoji/santa.png +0 -0
  1236. data/templates/new-instance/public/images/emoji/satellite.png +0 -0
  1237. data/templates/new-instance/public/images/emoji/satisfied.png +0 -0
  1238. data/templates/new-instance/public/images/emoji/saxophone.png +0 -0
  1239. data/templates/new-instance/public/images/emoji/school.png +0 -0
  1240. data/templates/new-instance/public/images/emoji/school_satchel.png +0 -0
  1241. data/templates/new-instance/public/images/emoji/scissors.png +0 -0
  1242. data/templates/new-instance/public/images/emoji/scorpius.png +0 -0
  1243. data/templates/new-instance/public/images/emoji/scream.png +0 -0
  1244. data/templates/new-instance/public/images/emoji/scream_cat.png +0 -0
  1245. data/templates/new-instance/public/images/emoji/scroll.png +0 -0
  1246. data/templates/new-instance/public/images/emoji/seat.png +0 -0
  1247. data/templates/new-instance/public/images/emoji/secret.png +0 -0
  1248. data/templates/new-instance/public/images/emoji/see_no_evil.png +0 -0
  1249. data/templates/new-instance/public/images/emoji/seedling.png +0 -0
  1250. data/templates/new-instance/public/images/emoji/seven.png +0 -0
  1251. data/templates/new-instance/public/images/emoji/shaved_ice.png +0 -0
  1252. data/templates/new-instance/public/images/emoji/sheep.png +0 -0
  1253. data/templates/new-instance/public/images/emoji/shell.png +0 -0
  1254. data/templates/new-instance/public/images/emoji/ship.png +0 -0
  1255. data/templates/new-instance/public/images/emoji/shipit.png +0 -0
  1256. data/templates/new-instance/public/images/emoji/shirt.png +0 -0
  1257. data/templates/new-instance/public/images/emoji/shit.png +0 -0
  1258. data/templates/new-instance/public/images/emoji/shoe.png +0 -0
  1259. data/templates/new-instance/public/images/emoji/shower.png +0 -0
  1260. data/templates/new-instance/public/images/emoji/signal_strength.png +0 -0
  1261. data/templates/new-instance/public/images/emoji/six.png +0 -0
  1262. data/templates/new-instance/public/images/emoji/six_pointed_star.png +0 -0
  1263. data/templates/new-instance/public/images/emoji/ski.png +0 -0
  1264. data/templates/new-instance/public/images/emoji/skull.png +0 -0
  1265. data/templates/new-instance/public/images/emoji/sleeping.png +0 -0
  1266. data/templates/new-instance/public/images/emoji/sleepy.png +0 -0
  1267. data/templates/new-instance/public/images/emoji/slot_machine.png +0 -0
  1268. data/templates/new-instance/public/images/emoji/small_blue_diamond.png +0 -0
  1269. data/templates/new-instance/public/images/emoji/small_orange_diamond.png +0 -0
  1270. data/templates/new-instance/public/images/emoji/small_red_triangle.png +0 -0
  1271. data/templates/new-instance/public/images/emoji/small_red_triangle_down.png +0 -0
  1272. data/templates/new-instance/public/images/emoji/smile.png +0 -0
  1273. data/templates/new-instance/public/images/emoji/smile_cat.png +0 -0
  1274. data/templates/new-instance/public/images/emoji/smiley.png +0 -0
  1275. data/templates/new-instance/public/images/emoji/smiley_cat.png +0 -0
  1276. data/templates/new-instance/public/images/emoji/smiling_imp.png +0 -0
  1277. data/templates/new-instance/public/images/emoji/smirk.png +0 -0
  1278. data/templates/new-instance/public/images/emoji/smirk_cat.png +0 -0
  1279. data/templates/new-instance/public/images/emoji/smoking.png +0 -0
  1280. data/templates/new-instance/public/images/emoji/snail.png +0 -0
  1281. data/templates/new-instance/public/images/emoji/snake.png +0 -0
  1282. data/templates/new-instance/public/images/emoji/snowboarder.png +0 -0
  1283. data/templates/new-instance/public/images/emoji/snowflake.png +0 -0
  1284. data/templates/new-instance/public/images/emoji/snowman.png +0 -0
  1285. data/templates/new-instance/public/images/emoji/sob.png +0 -0
  1286. data/templates/new-instance/public/images/emoji/soccer.png +0 -0
  1287. data/templates/new-instance/public/images/emoji/soon.png +0 -0
  1288. data/templates/new-instance/public/images/emoji/sos.png +0 -0
  1289. data/templates/new-instance/public/images/emoji/sound.png +0 -0
  1290. data/templates/new-instance/public/images/emoji/space_invader.png +0 -0
  1291. data/templates/new-instance/public/images/emoji/spades.png +0 -0
  1292. data/templates/new-instance/public/images/emoji/spaghetti.png +0 -0
  1293. data/templates/new-instance/public/images/emoji/sparkle.png +0 -0
  1294. data/templates/new-instance/public/images/emoji/sparkler.png +0 -0
  1295. data/templates/new-instance/public/images/emoji/sparkles.png +0 -0
  1296. data/templates/new-instance/public/images/emoji/sparkling_heart.png +0 -0
  1297. data/templates/new-instance/public/images/emoji/speak_no_evil.png +0 -0
  1298. data/templates/new-instance/public/images/emoji/speaker.png +0 -0
  1299. data/templates/new-instance/public/images/emoji/speech_balloon.png +0 -0
  1300. data/templates/new-instance/public/images/emoji/speedboat.png +0 -0
  1301. data/templates/new-instance/public/images/emoji/squirrel.png +0 -0
  1302. data/templates/new-instance/public/images/emoji/star.png +0 -0
  1303. data/templates/new-instance/public/images/emoji/star2.png +0 -0
  1304. data/templates/new-instance/public/images/emoji/stars.png +0 -0
  1305. data/templates/new-instance/public/images/emoji/station.png +0 -0
  1306. data/templates/new-instance/public/images/emoji/statue_of_liberty.png +0 -0
  1307. data/templates/new-instance/public/images/emoji/steam_locomotive.png +0 -0
  1308. data/templates/new-instance/public/images/emoji/stew.png +0 -0
  1309. data/templates/new-instance/public/images/emoji/straight_ruler.png +0 -0
  1310. data/templates/new-instance/public/images/emoji/strawberry.png +0 -0
  1311. data/templates/new-instance/public/images/emoji/stuck_out_tongue.png +0 -0
  1312. data/templates/new-instance/public/images/emoji/stuck_out_tongue_closed_eyes.png +0 -0
  1313. data/templates/new-instance/public/images/emoji/stuck_out_tongue_winking_eye.png +0 -0
  1314. data/templates/new-instance/public/images/emoji/sun_with_face.png +0 -0
  1315. data/templates/new-instance/public/images/emoji/sunflower.png +0 -0
  1316. data/templates/new-instance/public/images/emoji/sunglasses.png +0 -0
  1317. data/templates/new-instance/public/images/emoji/sunny.png +0 -0
  1318. data/templates/new-instance/public/images/emoji/sunrise.png +0 -0
  1319. data/templates/new-instance/public/images/emoji/sunrise_over_mountains.png +0 -0
  1320. data/templates/new-instance/public/images/emoji/surfer.png +0 -0
  1321. data/templates/new-instance/public/images/emoji/sushi.png +0 -0
  1322. data/templates/new-instance/public/images/emoji/suspect.png +0 -0
  1323. data/templates/new-instance/public/images/emoji/suspension_railway.png +0 -0
  1324. data/templates/new-instance/public/images/emoji/sweat.png +0 -0
  1325. data/templates/new-instance/public/images/emoji/sweat_drops.png +0 -0
  1326. data/templates/new-instance/public/images/emoji/sweat_smile.png +0 -0
  1327. data/templates/new-instance/public/images/emoji/sweet_potato.png +0 -0
  1328. data/templates/new-instance/public/images/emoji/swimmer.png +0 -0
  1329. data/templates/new-instance/public/images/emoji/symbols.png +0 -0
  1330. data/templates/new-instance/public/images/emoji/syringe.png +0 -0
  1331. data/templates/new-instance/public/images/emoji/tada.png +0 -0
  1332. data/templates/new-instance/public/images/emoji/tanabata_tree.png +0 -0
  1333. data/templates/new-instance/public/images/emoji/tangerine.png +0 -0
  1334. data/templates/new-instance/public/images/emoji/taurus.png +0 -0
  1335. data/templates/new-instance/public/images/emoji/taxi.png +0 -0
  1336. data/templates/new-instance/public/images/emoji/tea.png +0 -0
  1337. data/templates/new-instance/public/images/emoji/telephone.png +0 -0
  1338. data/templates/new-instance/public/images/emoji/telephone_receiver.png +0 -0
  1339. data/templates/new-instance/public/images/emoji/telescope.png +0 -0
  1340. data/templates/new-instance/public/images/emoji/tennis.png +0 -0
  1341. data/templates/new-instance/public/images/emoji/tent.png +0 -0
  1342. data/templates/new-instance/public/images/emoji/thought_balloon.png +0 -0
  1343. data/templates/new-instance/public/images/emoji/three.png +0 -0
  1344. data/templates/new-instance/public/images/emoji/thumbsdown.png +0 -0
  1345. data/templates/new-instance/public/images/emoji/thumbsup.png +0 -0
  1346. data/templates/new-instance/public/images/emoji/ticket.png +0 -0
  1347. data/templates/new-instance/public/images/emoji/tiger.png +0 -0
  1348. data/templates/new-instance/public/images/emoji/tiger2.png +0 -0
  1349. data/templates/new-instance/public/images/emoji/tired_face.png +0 -0
  1350. data/templates/new-instance/public/images/emoji/tm.png +0 -0
  1351. data/templates/new-instance/public/images/emoji/toilet.png +0 -0
  1352. data/templates/new-instance/public/images/emoji/tokyo_tower.png +0 -0
  1353. data/templates/new-instance/public/images/emoji/tomato.png +0 -0
  1354. data/templates/new-instance/public/images/emoji/tongue.png +0 -0
  1355. data/templates/new-instance/public/images/emoji/top.png +0 -0
  1356. data/templates/new-instance/public/images/emoji/tophat.png +0 -0
  1357. data/templates/new-instance/public/images/emoji/tractor.png +0 -0
  1358. data/templates/new-instance/public/images/emoji/traffic_light.png +0 -0
  1359. data/templates/new-instance/public/images/emoji/train.png +0 -0
  1360. data/templates/new-instance/public/images/emoji/train2.png +0 -0
  1361. data/templates/new-instance/public/images/emoji/tram.png +0 -0
  1362. data/templates/new-instance/public/images/emoji/triangular_flag_on_post.png +0 -0
  1363. data/templates/new-instance/public/images/emoji/triangular_ruler.png +0 -0
  1364. data/templates/new-instance/public/images/emoji/trident.png +0 -0
  1365. data/templates/new-instance/public/images/emoji/triumph.png +0 -0
  1366. data/templates/new-instance/public/images/emoji/trolleybus.png +0 -0
  1367. data/templates/new-instance/public/images/emoji/trollface.png +0 -0
  1368. data/templates/new-instance/public/images/emoji/trophy.png +0 -0
  1369. data/templates/new-instance/public/images/emoji/tropical_drink.png +0 -0
  1370. data/templates/new-instance/public/images/emoji/tropical_fish.png +0 -0
  1371. data/templates/new-instance/public/images/emoji/truck.png +0 -0
  1372. data/templates/new-instance/public/images/emoji/trumpet.png +0 -0
  1373. data/templates/new-instance/public/images/emoji/tshirt.png +0 -0
  1374. data/templates/new-instance/public/images/emoji/tulip.png +0 -0
  1375. data/templates/new-instance/public/images/emoji/turtle.png +0 -0
  1376. data/templates/new-instance/public/images/emoji/tv.png +0 -0
  1377. data/templates/new-instance/public/images/emoji/twisted_rightwards_arrows.png +0 -0
  1378. data/templates/new-instance/public/images/emoji/two.png +0 -0
  1379. data/templates/new-instance/public/images/emoji/two_hearts.png +0 -0
  1380. data/templates/new-instance/public/images/emoji/two_men_holding_hands.png +0 -0
  1381. data/templates/new-instance/public/images/emoji/two_women_holding_hands.png +0 -0
  1382. data/templates/new-instance/public/images/emoji/u5272.png +0 -0
  1383. data/templates/new-instance/public/images/emoji/u5408.png +0 -0
  1384. data/templates/new-instance/public/images/emoji/u55b6.png +0 -0
  1385. data/templates/new-instance/public/images/emoji/u6307.png +0 -0
  1386. data/templates/new-instance/public/images/emoji/u6708.png +0 -0
  1387. data/templates/new-instance/public/images/emoji/u6709.png +0 -0
  1388. data/templates/new-instance/public/images/emoji/u6e80.png +0 -0
  1389. data/templates/new-instance/public/images/emoji/u7121.png +0 -0
  1390. data/templates/new-instance/public/images/emoji/u7533.png +0 -0
  1391. data/templates/new-instance/public/images/emoji/u7981.png +0 -0
  1392. data/templates/new-instance/public/images/emoji/u7a7a.png +0 -0
  1393. data/templates/new-instance/public/images/emoji/uk.png +0 -0
  1394. data/templates/new-instance/public/images/emoji/umbrella.png +0 -0
  1395. data/templates/new-instance/public/images/emoji/unamused.png +0 -0
  1396. data/templates/new-instance/public/images/emoji/underage.png +0 -0
  1397. data/templates/new-instance/public/images/emoji/unicode/0023.png +0 -0
  1398. data/templates/new-instance/public/images/emoji/unicode/0030.png +0 -0
  1399. data/templates/new-instance/public/images/emoji/unicode/0031.png +0 -0
  1400. data/templates/new-instance/public/images/emoji/unicode/0032.png +0 -0
  1401. data/templates/new-instance/public/images/emoji/unicode/0033.png +0 -0
  1402. data/templates/new-instance/public/images/emoji/unicode/0034.png +0 -0
  1403. data/templates/new-instance/public/images/emoji/unicode/0035.png +0 -0
  1404. data/templates/new-instance/public/images/emoji/unicode/0036.png +0 -0
  1405. data/templates/new-instance/public/images/emoji/unicode/0037.png +0 -0
  1406. data/templates/new-instance/public/images/emoji/unicode/0038.png +0 -0
  1407. data/templates/new-instance/public/images/emoji/unicode/0039.png +0 -0
  1408. data/templates/new-instance/public/images/emoji/unicode/00a9.png +0 -0
  1409. data/templates/new-instance/public/images/emoji/unicode/00ae.png +0 -0
  1410. data/templates/new-instance/public/images/emoji/unicode/1f004.png +0 -0
  1411. data/templates/new-instance/public/images/emoji/unicode/1f0cf.png +0 -0
  1412. data/templates/new-instance/public/images/emoji/unicode/1f170.png +0 -0
  1413. data/templates/new-instance/public/images/emoji/unicode/1f171.png +0 -0
  1414. data/templates/new-instance/public/images/emoji/unicode/1f17e.png +0 -0
  1415. data/templates/new-instance/public/images/emoji/unicode/1f17f.png +0 -0
  1416. data/templates/new-instance/public/images/emoji/unicode/1f18e.png +0 -0
  1417. data/templates/new-instance/public/images/emoji/unicode/1f191.png +0 -0
  1418. data/templates/new-instance/public/images/emoji/unicode/1f192.png +0 -0
  1419. data/templates/new-instance/public/images/emoji/unicode/1f193.png +0 -0
  1420. data/templates/new-instance/public/images/emoji/unicode/1f194.png +0 -0
  1421. data/templates/new-instance/public/images/emoji/unicode/1f195.png +0 -0
  1422. data/templates/new-instance/public/images/emoji/unicode/1f196.png +0 -0
  1423. data/templates/new-instance/public/images/emoji/unicode/1f197.png +0 -0
  1424. data/templates/new-instance/public/images/emoji/unicode/1f198.png +0 -0
  1425. data/templates/new-instance/public/images/emoji/unicode/1f199.png +0 -0
  1426. data/templates/new-instance/public/images/emoji/unicode/1f19a.png +0 -0
  1427. data/templates/new-instance/public/images/emoji/unicode/1f1e8-1f1f3.png +0 -0
  1428. data/templates/new-instance/public/images/emoji/unicode/1f1e9-1f1ea.png +0 -0
  1429. data/templates/new-instance/public/images/emoji/unicode/1f1ea-1f1f8.png +0 -0
  1430. data/templates/new-instance/public/images/emoji/unicode/1f1eb-1f1f7.png +0 -0
  1431. data/templates/new-instance/public/images/emoji/unicode/1f1ec-1f1e7.png +0 -0
  1432. data/templates/new-instance/public/images/emoji/unicode/1f1ee-1f1f9.png +0 -0
  1433. data/templates/new-instance/public/images/emoji/unicode/1f1ef-1f1f5.png +0 -0
  1434. data/templates/new-instance/public/images/emoji/unicode/1f1f0-1f1f7.png +0 -0
  1435. data/templates/new-instance/public/images/emoji/unicode/1f1f7-1f1fa.png +0 -0
  1436. data/templates/new-instance/public/images/emoji/unicode/1f1fa-1f1f8.png +0 -0
  1437. data/templates/new-instance/public/images/emoji/unicode/1f201.png +0 -0
  1438. data/templates/new-instance/public/images/emoji/unicode/1f202.png +0 -0
  1439. data/templates/new-instance/public/images/emoji/unicode/1f21a.png +0 -0
  1440. data/templates/new-instance/public/images/emoji/unicode/1f22f.png +0 -0
  1441. data/templates/new-instance/public/images/emoji/unicode/1f232.png +0 -0
  1442. data/templates/new-instance/public/images/emoji/unicode/1f233.png +0 -0
  1443. data/templates/new-instance/public/images/emoji/unicode/1f234.png +0 -0
  1444. data/templates/new-instance/public/images/emoji/unicode/1f235.png +0 -0
  1445. data/templates/new-instance/public/images/emoji/unicode/1f236.png +0 -0
  1446. data/templates/new-instance/public/images/emoji/unicode/1f237.png +0 -0
  1447. data/templates/new-instance/public/images/emoji/unicode/1f238.png +0 -0
  1448. data/templates/new-instance/public/images/emoji/unicode/1f239.png +0 -0
  1449. data/templates/new-instance/public/images/emoji/unicode/1f23a.png +0 -0
  1450. data/templates/new-instance/public/images/emoji/unicode/1f250.png +0 -0
  1451. data/templates/new-instance/public/images/emoji/unicode/1f251.png +0 -0
  1452. data/templates/new-instance/public/images/emoji/unicode/1f300.png +0 -0
  1453. data/templates/new-instance/public/images/emoji/unicode/1f301.png +0 -0
  1454. data/templates/new-instance/public/images/emoji/unicode/1f302.png +0 -0
  1455. data/templates/new-instance/public/images/emoji/unicode/1f303.png +0 -0
  1456. data/templates/new-instance/public/images/emoji/unicode/1f304.png +0 -0
  1457. data/templates/new-instance/public/images/emoji/unicode/1f305.png +0 -0
  1458. data/templates/new-instance/public/images/emoji/unicode/1f306.png +0 -0
  1459. data/templates/new-instance/public/images/emoji/unicode/1f307.png +0 -0
  1460. data/templates/new-instance/public/images/emoji/unicode/1f308.png +0 -0
  1461. data/templates/new-instance/public/images/emoji/unicode/1f309.png +0 -0
  1462. data/templates/new-instance/public/images/emoji/unicode/1f30a.png +0 -0
  1463. data/templates/new-instance/public/images/emoji/unicode/1f30b.png +0 -0
  1464. data/templates/new-instance/public/images/emoji/unicode/1f30c.png +0 -0
  1465. data/templates/new-instance/public/images/emoji/unicode/1f30d.png +0 -0
  1466. data/templates/new-instance/public/images/emoji/unicode/1f30e.png +0 -0
  1467. data/templates/new-instance/public/images/emoji/unicode/1f30f.png +0 -0
  1468. data/templates/new-instance/public/images/emoji/unicode/1f310.png +0 -0
  1469. data/templates/new-instance/public/images/emoji/unicode/1f311.png +0 -0
  1470. data/templates/new-instance/public/images/emoji/unicode/1f312.png +0 -0
  1471. data/templates/new-instance/public/images/emoji/unicode/1f313.png +0 -0
  1472. data/templates/new-instance/public/images/emoji/unicode/1f314.png +0 -0
  1473. data/templates/new-instance/public/images/emoji/unicode/1f315.png +0 -0
  1474. data/templates/new-instance/public/images/emoji/unicode/1f316.png +0 -0
  1475. data/templates/new-instance/public/images/emoji/unicode/1f317.png +0 -0
  1476. data/templates/new-instance/public/images/emoji/unicode/1f318.png +0 -0
  1477. data/templates/new-instance/public/images/emoji/unicode/1f319.png +0 -0
  1478. data/templates/new-instance/public/images/emoji/unicode/1f31a.png +0 -0
  1479. data/templates/new-instance/public/images/emoji/unicode/1f31b.png +0 -0
  1480. data/templates/new-instance/public/images/emoji/unicode/1f31c.png +0 -0
  1481. data/templates/new-instance/public/images/emoji/unicode/1f31d.png +0 -0
  1482. data/templates/new-instance/public/images/emoji/unicode/1f31e.png +0 -0
  1483. data/templates/new-instance/public/images/emoji/unicode/1f31f.png +0 -0
  1484. data/templates/new-instance/public/images/emoji/unicode/1f330.png +0 -0
  1485. data/templates/new-instance/public/images/emoji/unicode/1f331.png +0 -0
  1486. data/templates/new-instance/public/images/emoji/unicode/1f332.png +0 -0
  1487. data/templates/new-instance/public/images/emoji/unicode/1f333.png +0 -0
  1488. data/templates/new-instance/public/images/emoji/unicode/1f334.png +0 -0
  1489. data/templates/new-instance/public/images/emoji/unicode/1f335.png +0 -0
  1490. data/templates/new-instance/public/images/emoji/unicode/1f337.png +0 -0
  1491. data/templates/new-instance/public/images/emoji/unicode/1f338.png +0 -0
  1492. data/templates/new-instance/public/images/emoji/unicode/1f339.png +0 -0
  1493. data/templates/new-instance/public/images/emoji/unicode/1f33a.png +0 -0
  1494. data/templates/new-instance/public/images/emoji/unicode/1f33b.png +0 -0
  1495. data/templates/new-instance/public/images/emoji/unicode/1f33c.png +0 -0
  1496. data/templates/new-instance/public/images/emoji/unicode/1f33d.png +0 -0
  1497. data/templates/new-instance/public/images/emoji/unicode/1f33e.png +0 -0
  1498. data/templates/new-instance/public/images/emoji/unicode/1f33f.png +0 -0
  1499. data/templates/new-instance/public/images/emoji/unicode/1f340.png +0 -0
  1500. data/templates/new-instance/public/images/emoji/unicode/1f341.png +0 -0
  1501. data/templates/new-instance/public/images/emoji/unicode/1f342.png +0 -0
  1502. data/templates/new-instance/public/images/emoji/unicode/1f343.png +0 -0
  1503. data/templates/new-instance/public/images/emoji/unicode/1f344.png +0 -0
  1504. data/templates/new-instance/public/images/emoji/unicode/1f345.png +0 -0
  1505. data/templates/new-instance/public/images/emoji/unicode/1f346.png +0 -0
  1506. data/templates/new-instance/public/images/emoji/unicode/1f347.png +0 -0
  1507. data/templates/new-instance/public/images/emoji/unicode/1f348.png +0 -0
  1508. data/templates/new-instance/public/images/emoji/unicode/1f349.png +0 -0
  1509. data/templates/new-instance/public/images/emoji/unicode/1f34a.png +0 -0
  1510. data/templates/new-instance/public/images/emoji/unicode/1f34b.png +0 -0
  1511. data/templates/new-instance/public/images/emoji/unicode/1f34c.png +0 -0
  1512. data/templates/new-instance/public/images/emoji/unicode/1f34d.png +0 -0
  1513. data/templates/new-instance/public/images/emoji/unicode/1f34e.png +0 -0
  1514. data/templates/new-instance/public/images/emoji/unicode/1f34f.png +0 -0
  1515. data/templates/new-instance/public/images/emoji/unicode/1f350.png +0 -0
  1516. data/templates/new-instance/public/images/emoji/unicode/1f351.png +0 -0
  1517. data/templates/new-instance/public/images/emoji/unicode/1f352.png +0 -0
  1518. data/templates/new-instance/public/images/emoji/unicode/1f353.png +0 -0
  1519. data/templates/new-instance/public/images/emoji/unicode/1f354.png +0 -0
  1520. data/templates/new-instance/public/images/emoji/unicode/1f355.png +0 -0
  1521. data/templates/new-instance/public/images/emoji/unicode/1f356.png +0 -0
  1522. data/templates/new-instance/public/images/emoji/unicode/1f357.png +0 -0
  1523. data/templates/new-instance/public/images/emoji/unicode/1f358.png +0 -0
  1524. data/templates/new-instance/public/images/emoji/unicode/1f359.png +0 -0
  1525. data/templates/new-instance/public/images/emoji/unicode/1f35a.png +0 -0
  1526. data/templates/new-instance/public/images/emoji/unicode/1f35b.png +0 -0
  1527. data/templates/new-instance/public/images/emoji/unicode/1f35c.png +0 -0
  1528. data/templates/new-instance/public/images/emoji/unicode/1f35d.png +0 -0
  1529. data/templates/new-instance/public/images/emoji/unicode/1f35e.png +0 -0
  1530. data/templates/new-instance/public/images/emoji/unicode/1f35f.png +0 -0
  1531. data/templates/new-instance/public/images/emoji/unicode/1f360.png +0 -0
  1532. data/templates/new-instance/public/images/emoji/unicode/1f361.png +0 -0
  1533. data/templates/new-instance/public/images/emoji/unicode/1f362.png +0 -0
  1534. data/templates/new-instance/public/images/emoji/unicode/1f363.png +0 -0
  1535. data/templates/new-instance/public/images/emoji/unicode/1f364.png +0 -0
  1536. data/templates/new-instance/public/images/emoji/unicode/1f365.png +0 -0
  1537. data/templates/new-instance/public/images/emoji/unicode/1f366.png +0 -0
  1538. data/templates/new-instance/public/images/emoji/unicode/1f367.png +0 -0
  1539. data/templates/new-instance/public/images/emoji/unicode/1f368.png +0 -0
  1540. data/templates/new-instance/public/images/emoji/unicode/1f369.png +0 -0
  1541. data/templates/new-instance/public/images/emoji/unicode/1f36a.png +0 -0
  1542. data/templates/new-instance/public/images/emoji/unicode/1f36b.png +0 -0
  1543. data/templates/new-instance/public/images/emoji/unicode/1f36c.png +0 -0
  1544. data/templates/new-instance/public/images/emoji/unicode/1f36d.png +0 -0
  1545. data/templates/new-instance/public/images/emoji/unicode/1f36e.png +0 -0
  1546. data/templates/new-instance/public/images/emoji/unicode/1f36f.png +0 -0
  1547. data/templates/new-instance/public/images/emoji/unicode/1f370.png +0 -0
  1548. data/templates/new-instance/public/images/emoji/unicode/1f371.png +0 -0
  1549. data/templates/new-instance/public/images/emoji/unicode/1f372.png +0 -0
  1550. data/templates/new-instance/public/images/emoji/unicode/1f373.png +0 -0
  1551. data/templates/new-instance/public/images/emoji/unicode/1f374.png +0 -0
  1552. data/templates/new-instance/public/images/emoji/unicode/1f375.png +0 -0
  1553. data/templates/new-instance/public/images/emoji/unicode/1f376.png +0 -0
  1554. data/templates/new-instance/public/images/emoji/unicode/1f377.png +0 -0
  1555. data/templates/new-instance/public/images/emoji/unicode/1f378.png +0 -0
  1556. data/templates/new-instance/public/images/emoji/unicode/1f379.png +0 -0
  1557. data/templates/new-instance/public/images/emoji/unicode/1f37a.png +0 -0
  1558. data/templates/new-instance/public/images/emoji/unicode/1f37b.png +0 -0
  1559. data/templates/new-instance/public/images/emoji/unicode/1f37c.png +0 -0
  1560. data/templates/new-instance/public/images/emoji/unicode/1f380.png +0 -0
  1561. data/templates/new-instance/public/images/emoji/unicode/1f381.png +0 -0
  1562. data/templates/new-instance/public/images/emoji/unicode/1f382.png +0 -0
  1563. data/templates/new-instance/public/images/emoji/unicode/1f383.png +0 -0
  1564. data/templates/new-instance/public/images/emoji/unicode/1f384.png +0 -0
  1565. data/templates/new-instance/public/images/emoji/unicode/1f385.png +0 -0
  1566. data/templates/new-instance/public/images/emoji/unicode/1f386.png +0 -0
  1567. data/templates/new-instance/public/images/emoji/unicode/1f387.png +0 -0
  1568. data/templates/new-instance/public/images/emoji/unicode/1f388.png +0 -0
  1569. data/templates/new-instance/public/images/emoji/unicode/1f389.png +0 -0
  1570. data/templates/new-instance/public/images/emoji/unicode/1f38a.png +0 -0
  1571. data/templates/new-instance/public/images/emoji/unicode/1f38b.png +0 -0
  1572. data/templates/new-instance/public/images/emoji/unicode/1f38c.png +0 -0
  1573. data/templates/new-instance/public/images/emoji/unicode/1f38d.png +0 -0
  1574. data/templates/new-instance/public/images/emoji/unicode/1f38e.png +0 -0
  1575. data/templates/new-instance/public/images/emoji/unicode/1f38f.png +0 -0
  1576. data/templates/new-instance/public/images/emoji/unicode/1f390.png +0 -0
  1577. data/templates/new-instance/public/images/emoji/unicode/1f391.png +0 -0
  1578. data/templates/new-instance/public/images/emoji/unicode/1f392.png +0 -0
  1579. data/templates/new-instance/public/images/emoji/unicode/1f393.png +0 -0
  1580. data/templates/new-instance/public/images/emoji/unicode/1f3a0.png +0 -0
  1581. data/templates/new-instance/public/images/emoji/unicode/1f3a1.png +0 -0
  1582. data/templates/new-instance/public/images/emoji/unicode/1f3a2.png +0 -0
  1583. data/templates/new-instance/public/images/emoji/unicode/1f3a3.png +0 -0
  1584. data/templates/new-instance/public/images/emoji/unicode/1f3a4.png +0 -0
  1585. data/templates/new-instance/public/images/emoji/unicode/1f3a5.png +0 -0
  1586. data/templates/new-instance/public/images/emoji/unicode/1f3a6.png +0 -0
  1587. data/templates/new-instance/public/images/emoji/unicode/1f3a7.png +0 -0
  1588. data/templates/new-instance/public/images/emoji/unicode/1f3a8.png +0 -0
  1589. data/templates/new-instance/public/images/emoji/unicode/1f3a9.png +0 -0
  1590. data/templates/new-instance/public/images/emoji/unicode/1f3aa.png +0 -0
  1591. data/templates/new-instance/public/images/emoji/unicode/1f3ab.png +0 -0
  1592. data/templates/new-instance/public/images/emoji/unicode/1f3ac.png +0 -0
  1593. data/templates/new-instance/public/images/emoji/unicode/1f3ad.png +0 -0
  1594. data/templates/new-instance/public/images/emoji/unicode/1f3ae.png +0 -0
  1595. data/templates/new-instance/public/images/emoji/unicode/1f3af.png +0 -0
  1596. data/templates/new-instance/public/images/emoji/unicode/1f3b0.png +0 -0
  1597. data/templates/new-instance/public/images/emoji/unicode/1f3b1.png +0 -0
  1598. data/templates/new-instance/public/images/emoji/unicode/1f3b2.png +0 -0
  1599. data/templates/new-instance/public/images/emoji/unicode/1f3b3.png +0 -0
  1600. data/templates/new-instance/public/images/emoji/unicode/1f3b4.png +0 -0
  1601. data/templates/new-instance/public/images/emoji/unicode/1f3b5.png +0 -0
  1602. data/templates/new-instance/public/images/emoji/unicode/1f3b6.png +0 -0
  1603. data/templates/new-instance/public/images/emoji/unicode/1f3b7.png +0 -0
  1604. data/templates/new-instance/public/images/emoji/unicode/1f3b8.png +0 -0
  1605. data/templates/new-instance/public/images/emoji/unicode/1f3b9.png +0 -0
  1606. data/templates/new-instance/public/images/emoji/unicode/1f3ba.png +0 -0
  1607. data/templates/new-instance/public/images/emoji/unicode/1f3bb.png +0 -0
  1608. data/templates/new-instance/public/images/emoji/unicode/1f3bc.png +0 -0
  1609. data/templates/new-instance/public/images/emoji/unicode/1f3bd.png +0 -0
  1610. data/templates/new-instance/public/images/emoji/unicode/1f3be.png +0 -0
  1611. data/templates/new-instance/public/images/emoji/unicode/1f3bf.png +0 -0
  1612. data/templates/new-instance/public/images/emoji/unicode/1f3c0.png +0 -0
  1613. data/templates/new-instance/public/images/emoji/unicode/1f3c1.png +0 -0
  1614. data/templates/new-instance/public/images/emoji/unicode/1f3c2.png +0 -0
  1615. data/templates/new-instance/public/images/emoji/unicode/1f3c3.png +0 -0
  1616. data/templates/new-instance/public/images/emoji/unicode/1f3c4.png +0 -0
  1617. data/templates/new-instance/public/images/emoji/unicode/1f3c6.png +0 -0
  1618. data/templates/new-instance/public/images/emoji/unicode/1f3c7.png +0 -0
  1619. data/templates/new-instance/public/images/emoji/unicode/1f3c8.png +0 -0
  1620. data/templates/new-instance/public/images/emoji/unicode/1f3c9.png +0 -0
  1621. data/templates/new-instance/public/images/emoji/unicode/1f3ca.png +0 -0
  1622. data/templates/new-instance/public/images/emoji/unicode/1f3e0.png +0 -0
  1623. data/templates/new-instance/public/images/emoji/unicode/1f3e1.png +0 -0
  1624. data/templates/new-instance/public/images/emoji/unicode/1f3e2.png +0 -0
  1625. data/templates/new-instance/public/images/emoji/unicode/1f3e3.png +0 -0
  1626. data/templates/new-instance/public/images/emoji/unicode/1f3e4.png +0 -0
  1627. data/templates/new-instance/public/images/emoji/unicode/1f3e5.png +0 -0
  1628. data/templates/new-instance/public/images/emoji/unicode/1f3e6.png +0 -0
  1629. data/templates/new-instance/public/images/emoji/unicode/1f3e7.png +0 -0
  1630. data/templates/new-instance/public/images/emoji/unicode/1f3e8.png +0 -0
  1631. data/templates/new-instance/public/images/emoji/unicode/1f3e9.png +0 -0
  1632. data/templates/new-instance/public/images/emoji/unicode/1f3ea.png +0 -0
  1633. data/templates/new-instance/public/images/emoji/unicode/1f3eb.png +0 -0
  1634. data/templates/new-instance/public/images/emoji/unicode/1f3ec.png +0 -0
  1635. data/templates/new-instance/public/images/emoji/unicode/1f3ed.png +0 -0
  1636. data/templates/new-instance/public/images/emoji/unicode/1f3ee.png +0 -0
  1637. data/templates/new-instance/public/images/emoji/unicode/1f3ef.png +0 -0
  1638. data/templates/new-instance/public/images/emoji/unicode/1f3f0.png +0 -0
  1639. data/templates/new-instance/public/images/emoji/unicode/1f400.png +0 -0
  1640. data/templates/new-instance/public/images/emoji/unicode/1f401.png +0 -0
  1641. data/templates/new-instance/public/images/emoji/unicode/1f402.png +0 -0
  1642. data/templates/new-instance/public/images/emoji/unicode/1f403.png +0 -0
  1643. data/templates/new-instance/public/images/emoji/unicode/1f404.png +0 -0
  1644. data/templates/new-instance/public/images/emoji/unicode/1f405.png +0 -0
  1645. data/templates/new-instance/public/images/emoji/unicode/1f406.png +0 -0
  1646. data/templates/new-instance/public/images/emoji/unicode/1f407.png +0 -0
  1647. data/templates/new-instance/public/images/emoji/unicode/1f408.png +0 -0
  1648. data/templates/new-instance/public/images/emoji/unicode/1f409.png +0 -0
  1649. data/templates/new-instance/public/images/emoji/unicode/1f40a.png +0 -0
  1650. data/templates/new-instance/public/images/emoji/unicode/1f40b.png +0 -0
  1651. data/templates/new-instance/public/images/emoji/unicode/1f40c.png +0 -0
  1652. data/templates/new-instance/public/images/emoji/unicode/1f40d.png +0 -0
  1653. data/templates/new-instance/public/images/emoji/unicode/1f40e.png +0 -0
  1654. data/templates/new-instance/public/images/emoji/unicode/1f40f.png +0 -0
  1655. data/templates/new-instance/public/images/emoji/unicode/1f410.png +0 -0
  1656. data/templates/new-instance/public/images/emoji/unicode/1f411.png +0 -0
  1657. data/templates/new-instance/public/images/emoji/unicode/1f412.png +0 -0
  1658. data/templates/new-instance/public/images/emoji/unicode/1f413.png +0 -0
  1659. data/templates/new-instance/public/images/emoji/unicode/1f414.png +0 -0
  1660. data/templates/new-instance/public/images/emoji/unicode/1f415.png +0 -0
  1661. data/templates/new-instance/public/images/emoji/unicode/1f416.png +0 -0
  1662. data/templates/new-instance/public/images/emoji/unicode/1f417.png +0 -0
  1663. data/templates/new-instance/public/images/emoji/unicode/1f418.png +0 -0
  1664. data/templates/new-instance/public/images/emoji/unicode/1f419.png +0 -0
  1665. data/templates/new-instance/public/images/emoji/unicode/1f41a.png +0 -0
  1666. data/templates/new-instance/public/images/emoji/unicode/1f41b.png +0 -0
  1667. data/templates/new-instance/public/images/emoji/unicode/1f41c.png +0 -0
  1668. data/templates/new-instance/public/images/emoji/unicode/1f41d.png +0 -0
  1669. data/templates/new-instance/public/images/emoji/unicode/1f41e.png +0 -0
  1670. data/templates/new-instance/public/images/emoji/unicode/1f41f.png +0 -0
  1671. data/templates/new-instance/public/images/emoji/unicode/1f420.png +0 -0
  1672. data/templates/new-instance/public/images/emoji/unicode/1f421.png +0 -0
  1673. data/templates/new-instance/public/images/emoji/unicode/1f422.png +0 -0
  1674. data/templates/new-instance/public/images/emoji/unicode/1f423.png +0 -0
  1675. data/templates/new-instance/public/images/emoji/unicode/1f424.png +0 -0
  1676. data/templates/new-instance/public/images/emoji/unicode/1f425.png +0 -0
  1677. data/templates/new-instance/public/images/emoji/unicode/1f426.png +0 -0
  1678. data/templates/new-instance/public/images/emoji/unicode/1f427.png +0 -0
  1679. data/templates/new-instance/public/images/emoji/unicode/1f428.png +0 -0
  1680. data/templates/new-instance/public/images/emoji/unicode/1f429.png +0 -0
  1681. data/templates/new-instance/public/images/emoji/unicode/1f42a.png +0 -0
  1682. data/templates/new-instance/public/images/emoji/unicode/1f42b.png +0 -0
  1683. data/templates/new-instance/public/images/emoji/unicode/1f42c.png +0 -0
  1684. data/templates/new-instance/public/images/emoji/unicode/1f42d.png +0 -0
  1685. data/templates/new-instance/public/images/emoji/unicode/1f42e.png +0 -0
  1686. data/templates/new-instance/public/images/emoji/unicode/1f42f.png +0 -0
  1687. data/templates/new-instance/public/images/emoji/unicode/1f430.png +0 -0
  1688. data/templates/new-instance/public/images/emoji/unicode/1f431.png +0 -0
  1689. data/templates/new-instance/public/images/emoji/unicode/1f432.png +0 -0
  1690. data/templates/new-instance/public/images/emoji/unicode/1f433.png +0 -0
  1691. data/templates/new-instance/public/images/emoji/unicode/1f434.png +0 -0
  1692. data/templates/new-instance/public/images/emoji/unicode/1f435.png +0 -0
  1693. data/templates/new-instance/public/images/emoji/unicode/1f436.png +0 -0
  1694. data/templates/new-instance/public/images/emoji/unicode/1f437.png +0 -0
  1695. data/templates/new-instance/public/images/emoji/unicode/1f438.png +0 -0
  1696. data/templates/new-instance/public/images/emoji/unicode/1f439.png +0 -0
  1697. data/templates/new-instance/public/images/emoji/unicode/1f43a.png +0 -0
  1698. data/templates/new-instance/public/images/emoji/unicode/1f43b.png +0 -0
  1699. data/templates/new-instance/public/images/emoji/unicode/1f43c.png +0 -0
  1700. data/templates/new-instance/public/images/emoji/unicode/1f43d.png +0 -0
  1701. data/templates/new-instance/public/images/emoji/unicode/1f43e.png +0 -0
  1702. data/templates/new-instance/public/images/emoji/unicode/1f440.png +0 -0
  1703. data/templates/new-instance/public/images/emoji/unicode/1f442.png +0 -0
  1704. data/templates/new-instance/public/images/emoji/unicode/1f443.png +0 -0
  1705. data/templates/new-instance/public/images/emoji/unicode/1f444.png +0 -0
  1706. data/templates/new-instance/public/images/emoji/unicode/1f445.png +0 -0
  1707. data/templates/new-instance/public/images/emoji/unicode/1f446.png +0 -0
  1708. data/templates/new-instance/public/images/emoji/unicode/1f447.png +0 -0
  1709. data/templates/new-instance/public/images/emoji/unicode/1f448.png +0 -0
  1710. data/templates/new-instance/public/images/emoji/unicode/1f449.png +0 -0
  1711. data/templates/new-instance/public/images/emoji/unicode/1f44a.png +0 -0
  1712. data/templates/new-instance/public/images/emoji/unicode/1f44b.png +0 -0
  1713. data/templates/new-instance/public/images/emoji/unicode/1f44c.png +0 -0
  1714. data/templates/new-instance/public/images/emoji/unicode/1f44d.png +0 -0
  1715. data/templates/new-instance/public/images/emoji/unicode/1f44e.png +0 -0
  1716. data/templates/new-instance/public/images/emoji/unicode/1f44f.png +0 -0
  1717. data/templates/new-instance/public/images/emoji/unicode/1f450.png +0 -0
  1718. data/templates/new-instance/public/images/emoji/unicode/1f451.png +0 -0
  1719. data/templates/new-instance/public/images/emoji/unicode/1f452.png +0 -0
  1720. data/templates/new-instance/public/images/emoji/unicode/1f453.png +0 -0
  1721. data/templates/new-instance/public/images/emoji/unicode/1f454.png +0 -0
  1722. data/templates/new-instance/public/images/emoji/unicode/1f455.png +0 -0
  1723. data/templates/new-instance/public/images/emoji/unicode/1f456.png +0 -0
  1724. data/templates/new-instance/public/images/emoji/unicode/1f457.png +0 -0
  1725. data/templates/new-instance/public/images/emoji/unicode/1f458.png +0 -0
  1726. data/templates/new-instance/public/images/emoji/unicode/1f459.png +0 -0
  1727. data/templates/new-instance/public/images/emoji/unicode/1f45a.png +0 -0
  1728. data/templates/new-instance/public/images/emoji/unicode/1f45b.png +0 -0
  1729. data/templates/new-instance/public/images/emoji/unicode/1f45c.png +0 -0
  1730. data/templates/new-instance/public/images/emoji/unicode/1f45d.png +0 -0
  1731. data/templates/new-instance/public/images/emoji/unicode/1f45e.png +0 -0
  1732. data/templates/new-instance/public/images/emoji/unicode/1f45f.png +0 -0
  1733. data/templates/new-instance/public/images/emoji/unicode/1f460.png +0 -0
  1734. data/templates/new-instance/public/images/emoji/unicode/1f461.png +0 -0
  1735. data/templates/new-instance/public/images/emoji/unicode/1f462.png +0 -0
  1736. data/templates/new-instance/public/images/emoji/unicode/1f463.png +0 -0
  1737. data/templates/new-instance/public/images/emoji/unicode/1f464.png +0 -0
  1738. data/templates/new-instance/public/images/emoji/unicode/1f465.png +0 -0
  1739. data/templates/new-instance/public/images/emoji/unicode/1f466.png +0 -0
  1740. data/templates/new-instance/public/images/emoji/unicode/1f467.png +0 -0
  1741. data/templates/new-instance/public/images/emoji/unicode/1f468.png +0 -0
  1742. data/templates/new-instance/public/images/emoji/unicode/1f469.png +0 -0
  1743. data/templates/new-instance/public/images/emoji/unicode/1f46a.png +0 -0
  1744. data/templates/new-instance/public/images/emoji/unicode/1f46b.png +0 -0
  1745. data/templates/new-instance/public/images/emoji/unicode/1f46c.png +0 -0
  1746. data/templates/new-instance/public/images/emoji/unicode/1f46d.png +0 -0
  1747. data/templates/new-instance/public/images/emoji/unicode/1f46e.png +0 -0
  1748. data/templates/new-instance/public/images/emoji/unicode/1f46f.png +0 -0
  1749. data/templates/new-instance/public/images/emoji/unicode/1f470.png +0 -0
  1750. data/templates/new-instance/public/images/emoji/unicode/1f471.png +0 -0
  1751. data/templates/new-instance/public/images/emoji/unicode/1f472.png +0 -0
  1752. data/templates/new-instance/public/images/emoji/unicode/1f473.png +0 -0
  1753. data/templates/new-instance/public/images/emoji/unicode/1f474.png +0 -0
  1754. data/templates/new-instance/public/images/emoji/unicode/1f475.png +0 -0
  1755. data/templates/new-instance/public/images/emoji/unicode/1f476.png +0 -0
  1756. data/templates/new-instance/public/images/emoji/unicode/1f477.png +0 -0
  1757. data/templates/new-instance/public/images/emoji/unicode/1f478.png +0 -0
  1758. data/templates/new-instance/public/images/emoji/unicode/1f479.png +0 -0
  1759. data/templates/new-instance/public/images/emoji/unicode/1f47a.png +0 -0
  1760. data/templates/new-instance/public/images/emoji/unicode/1f47b.png +0 -0
  1761. data/templates/new-instance/public/images/emoji/unicode/1f47c.png +0 -0
  1762. data/templates/new-instance/public/images/emoji/unicode/1f47d.png +0 -0
  1763. data/templates/new-instance/public/images/emoji/unicode/1f47e.png +0 -0
  1764. data/templates/new-instance/public/images/emoji/unicode/1f47f.png +0 -0
  1765. data/templates/new-instance/public/images/emoji/unicode/1f480.png +0 -0
  1766. data/templates/new-instance/public/images/emoji/unicode/1f481.png +0 -0
  1767. data/templates/new-instance/public/images/emoji/unicode/1f482.png +0 -0
  1768. data/templates/new-instance/public/images/emoji/unicode/1f483.png +0 -0
  1769. data/templates/new-instance/public/images/emoji/unicode/1f484.png +0 -0
  1770. data/templates/new-instance/public/images/emoji/unicode/1f485.png +0 -0
  1771. data/templates/new-instance/public/images/emoji/unicode/1f486.png +0 -0
  1772. data/templates/new-instance/public/images/emoji/unicode/1f487.png +0 -0
  1773. data/templates/new-instance/public/images/emoji/unicode/1f488.png +0 -0
  1774. data/templates/new-instance/public/images/emoji/unicode/1f489.png +0 -0
  1775. data/templates/new-instance/public/images/emoji/unicode/1f48a.png +0 -0
  1776. data/templates/new-instance/public/images/emoji/unicode/1f48b.png +0 -0
  1777. data/templates/new-instance/public/images/emoji/unicode/1f48c.png +0 -0
  1778. data/templates/new-instance/public/images/emoji/unicode/1f48d.png +0 -0
  1779. data/templates/new-instance/public/images/emoji/unicode/1f48e.png +0 -0
  1780. data/templates/new-instance/public/images/emoji/unicode/1f48f.png +0 -0
  1781. data/templates/new-instance/public/images/emoji/unicode/1f490.png +0 -0
  1782. data/templates/new-instance/public/images/emoji/unicode/1f491.png +0 -0
  1783. data/templates/new-instance/public/images/emoji/unicode/1f492.png +0 -0
  1784. data/templates/new-instance/public/images/emoji/unicode/1f493.png +0 -0
  1785. data/templates/new-instance/public/images/emoji/unicode/1f494.png +0 -0
  1786. data/templates/new-instance/public/images/emoji/unicode/1f495.png +0 -0
  1787. data/templates/new-instance/public/images/emoji/unicode/1f496.png +0 -0
  1788. data/templates/new-instance/public/images/emoji/unicode/1f497.png +0 -0
  1789. data/templates/new-instance/public/images/emoji/unicode/1f498.png +0 -0
  1790. data/templates/new-instance/public/images/emoji/unicode/1f499.png +0 -0
  1791. data/templates/new-instance/public/images/emoji/unicode/1f49a.png +0 -0
  1792. data/templates/new-instance/public/images/emoji/unicode/1f49b.png +0 -0
  1793. data/templates/new-instance/public/images/emoji/unicode/1f49c.png +0 -0
  1794. data/templates/new-instance/public/images/emoji/unicode/1f49d.png +0 -0
  1795. data/templates/new-instance/public/images/emoji/unicode/1f49e.png +0 -0
  1796. data/templates/new-instance/public/images/emoji/unicode/1f49f.png +0 -0
  1797. data/templates/new-instance/public/images/emoji/unicode/1f4a0.png +0 -0
  1798. data/templates/new-instance/public/images/emoji/unicode/1f4a1.png +0 -0
  1799. data/templates/new-instance/public/images/emoji/unicode/1f4a2.png +0 -0
  1800. data/templates/new-instance/public/images/emoji/unicode/1f4a3.png +0 -0
  1801. data/templates/new-instance/public/images/emoji/unicode/1f4a4.png +0 -0
  1802. data/templates/new-instance/public/images/emoji/unicode/1f4a5.png +0 -0
  1803. data/templates/new-instance/public/images/emoji/unicode/1f4a6.png +0 -0
  1804. data/templates/new-instance/public/images/emoji/unicode/1f4a7.png +0 -0
  1805. data/templates/new-instance/public/images/emoji/unicode/1f4a8.png +0 -0
  1806. data/templates/new-instance/public/images/emoji/unicode/1f4a9.png +0 -0
  1807. data/templates/new-instance/public/images/emoji/unicode/1f4aa.png +0 -0
  1808. data/templates/new-instance/public/images/emoji/unicode/1f4ab.png +0 -0
  1809. data/templates/new-instance/public/images/emoji/unicode/1f4ac.png +0 -0
  1810. data/templates/new-instance/public/images/emoji/unicode/1f4ad.png +0 -0
  1811. data/templates/new-instance/public/images/emoji/unicode/1f4ae.png +0 -0
  1812. data/templates/new-instance/public/images/emoji/unicode/1f4af.png +0 -0
  1813. data/templates/new-instance/public/images/emoji/unicode/1f4b0.png +0 -0
  1814. data/templates/new-instance/public/images/emoji/unicode/1f4b1.png +0 -0
  1815. data/templates/new-instance/public/images/emoji/unicode/1f4b2.png +0 -0
  1816. data/templates/new-instance/public/images/emoji/unicode/1f4b3.png +0 -0
  1817. data/templates/new-instance/public/images/emoji/unicode/1f4b4.png +0 -0
  1818. data/templates/new-instance/public/images/emoji/unicode/1f4b5.png +0 -0
  1819. data/templates/new-instance/public/images/emoji/unicode/1f4b6.png +0 -0
  1820. data/templates/new-instance/public/images/emoji/unicode/1f4b7.png +0 -0
  1821. data/templates/new-instance/public/images/emoji/unicode/1f4b8.png +0 -0
  1822. data/templates/new-instance/public/images/emoji/unicode/1f4b9.png +0 -0
  1823. data/templates/new-instance/public/images/emoji/unicode/1f4ba.png +0 -0
  1824. data/templates/new-instance/public/images/emoji/unicode/1f4bb.png +0 -0
  1825. data/templates/new-instance/public/images/emoji/unicode/1f4bc.png +0 -0
  1826. data/templates/new-instance/public/images/emoji/unicode/1f4bd.png +0 -0
  1827. data/templates/new-instance/public/images/emoji/unicode/1f4be.png +0 -0
  1828. data/templates/new-instance/public/images/emoji/unicode/1f4bf.png +0 -0
  1829. data/templates/new-instance/public/images/emoji/unicode/1f4c0.png +0 -0
  1830. data/templates/new-instance/public/images/emoji/unicode/1f4c1.png +0 -0
  1831. data/templates/new-instance/public/images/emoji/unicode/1f4c2.png +0 -0
  1832. data/templates/new-instance/public/images/emoji/unicode/1f4c3.png +0 -0
  1833. data/templates/new-instance/public/images/emoji/unicode/1f4c4.png +0 -0
  1834. data/templates/new-instance/public/images/emoji/unicode/1f4c5.png +0 -0
  1835. data/templates/new-instance/public/images/emoji/unicode/1f4c6.png +0 -0
  1836. data/templates/new-instance/public/images/emoji/unicode/1f4c7.png +0 -0
  1837. data/templates/new-instance/public/images/emoji/unicode/1f4c8.png +0 -0
  1838. data/templates/new-instance/public/images/emoji/unicode/1f4c9.png +0 -0
  1839. data/templates/new-instance/public/images/emoji/unicode/1f4ca.png +0 -0
  1840. data/templates/new-instance/public/images/emoji/unicode/1f4cb.png +0 -0
  1841. data/templates/new-instance/public/images/emoji/unicode/1f4cc.png +0 -0
  1842. data/templates/new-instance/public/images/emoji/unicode/1f4cd.png +0 -0
  1843. data/templates/new-instance/public/images/emoji/unicode/1f4ce.png +0 -0
  1844. data/templates/new-instance/public/images/emoji/unicode/1f4cf.png +0 -0
  1845. data/templates/new-instance/public/images/emoji/unicode/1f4d0.png +0 -0
  1846. data/templates/new-instance/public/images/emoji/unicode/1f4d1.png +0 -0
  1847. data/templates/new-instance/public/images/emoji/unicode/1f4d2.png +0 -0
  1848. data/templates/new-instance/public/images/emoji/unicode/1f4d3.png +0 -0
  1849. data/templates/new-instance/public/images/emoji/unicode/1f4d4.png +0 -0
  1850. data/templates/new-instance/public/images/emoji/unicode/1f4d5.png +0 -0
  1851. data/templates/new-instance/public/images/emoji/unicode/1f4d6.png +0 -0
  1852. data/templates/new-instance/public/images/emoji/unicode/1f4d7.png +0 -0
  1853. data/templates/new-instance/public/images/emoji/unicode/1f4d8.png +0 -0
  1854. data/templates/new-instance/public/images/emoji/unicode/1f4d9.png +0 -0
  1855. data/templates/new-instance/public/images/emoji/unicode/1f4da.png +0 -0
  1856. data/templates/new-instance/public/images/emoji/unicode/1f4db.png +0 -0
  1857. data/templates/new-instance/public/images/emoji/unicode/1f4dc.png +0 -0
  1858. data/templates/new-instance/public/images/emoji/unicode/1f4dd.png +0 -0
  1859. data/templates/new-instance/public/images/emoji/unicode/1f4de.png +0 -0
  1860. data/templates/new-instance/public/images/emoji/unicode/1f4df.png +0 -0
  1861. data/templates/new-instance/public/images/emoji/unicode/1f4e0.png +0 -0
  1862. data/templates/new-instance/public/images/emoji/unicode/1f4e1.png +0 -0
  1863. data/templates/new-instance/public/images/emoji/unicode/1f4e2.png +0 -0
  1864. data/templates/new-instance/public/images/emoji/unicode/1f4e3.png +0 -0
  1865. data/templates/new-instance/public/images/emoji/unicode/1f4e4.png +0 -0
  1866. data/templates/new-instance/public/images/emoji/unicode/1f4e5.png +0 -0
  1867. data/templates/new-instance/public/images/emoji/unicode/1f4e6.png +0 -0
  1868. data/templates/new-instance/public/images/emoji/unicode/1f4e7.png +0 -0
  1869. data/templates/new-instance/public/images/emoji/unicode/1f4e8.png +0 -0
  1870. data/templates/new-instance/public/images/emoji/unicode/1f4e9.png +0 -0
  1871. data/templates/new-instance/public/images/emoji/unicode/1f4ea.png +0 -0
  1872. data/templates/new-instance/public/images/emoji/unicode/1f4eb.png +0 -0
  1873. data/templates/new-instance/public/images/emoji/unicode/1f4ec.png +0 -0
  1874. data/templates/new-instance/public/images/emoji/unicode/1f4ed.png +0 -0
  1875. data/templates/new-instance/public/images/emoji/unicode/1f4ee.png +0 -0
  1876. data/templates/new-instance/public/images/emoji/unicode/1f4ef.png +0 -0
  1877. data/templates/new-instance/public/images/emoji/unicode/1f4f0.png +0 -0
  1878. data/templates/new-instance/public/images/emoji/unicode/1f4f1.png +0 -0
  1879. data/templates/new-instance/public/images/emoji/unicode/1f4f2.png +0 -0
  1880. data/templates/new-instance/public/images/emoji/unicode/1f4f3.png +0 -0
  1881. data/templates/new-instance/public/images/emoji/unicode/1f4f4.png +0 -0
  1882. data/templates/new-instance/public/images/emoji/unicode/1f4f5.png +0 -0
  1883. data/templates/new-instance/public/images/emoji/unicode/1f4f6.png +0 -0
  1884. data/templates/new-instance/public/images/emoji/unicode/1f4f7.png +0 -0
  1885. data/templates/new-instance/public/images/emoji/unicode/1f4f9.png +0 -0
  1886. data/templates/new-instance/public/images/emoji/unicode/1f4fa.png +0 -0
  1887. data/templates/new-instance/public/images/emoji/unicode/1f4fb.png +0 -0
  1888. data/templates/new-instance/public/images/emoji/unicode/1f4fc.png +0 -0
  1889. data/templates/new-instance/public/images/emoji/unicode/1f500.png +0 -0
  1890. data/templates/new-instance/public/images/emoji/unicode/1f501.png +0 -0
  1891. data/templates/new-instance/public/images/emoji/unicode/1f502.png +0 -0
  1892. data/templates/new-instance/public/images/emoji/unicode/1f503.png +0 -0
  1893. data/templates/new-instance/public/images/emoji/unicode/1f504.png +0 -0
  1894. data/templates/new-instance/public/images/emoji/unicode/1f505.png +0 -0
  1895. data/templates/new-instance/public/images/emoji/unicode/1f506.png +0 -0
  1896. data/templates/new-instance/public/images/emoji/unicode/1f507.png +0 -0
  1897. data/templates/new-instance/public/images/emoji/unicode/1f509.png +0 -0
  1898. data/templates/new-instance/public/images/emoji/unicode/1f50a.png +0 -0
  1899. data/templates/new-instance/public/images/emoji/unicode/1f50b.png +0 -0
  1900. data/templates/new-instance/public/images/emoji/unicode/1f50c.png +0 -0
  1901. data/templates/new-instance/public/images/emoji/unicode/1f50d.png +0 -0
  1902. data/templates/new-instance/public/images/emoji/unicode/1f50e.png +0 -0
  1903. data/templates/new-instance/public/images/emoji/unicode/1f50f.png +0 -0
  1904. data/templates/new-instance/public/images/emoji/unicode/1f510.png +0 -0
  1905. data/templates/new-instance/public/images/emoji/unicode/1f511.png +0 -0
  1906. data/templates/new-instance/public/images/emoji/unicode/1f512.png +0 -0
  1907. data/templates/new-instance/public/images/emoji/unicode/1f513.png +0 -0
  1908. data/templates/new-instance/public/images/emoji/unicode/1f514.png +0 -0
  1909. data/templates/new-instance/public/images/emoji/unicode/1f515.png +0 -0
  1910. data/templates/new-instance/public/images/emoji/unicode/1f516.png +0 -0
  1911. data/templates/new-instance/public/images/emoji/unicode/1f517.png +0 -0
  1912. data/templates/new-instance/public/images/emoji/unicode/1f518.png +0 -0
  1913. data/templates/new-instance/public/images/emoji/unicode/1f519.png +0 -0
  1914. data/templates/new-instance/public/images/emoji/unicode/1f51a.png +0 -0
  1915. data/templates/new-instance/public/images/emoji/unicode/1f51b.png +0 -0
  1916. data/templates/new-instance/public/images/emoji/unicode/1f51c.png +0 -0
  1917. data/templates/new-instance/public/images/emoji/unicode/1f51d.png +0 -0
  1918. data/templates/new-instance/public/images/emoji/unicode/1f51e.png +0 -0
  1919. data/templates/new-instance/public/images/emoji/unicode/1f51f.png +0 -0
  1920. data/templates/new-instance/public/images/emoji/unicode/1f520.png +0 -0
  1921. data/templates/new-instance/public/images/emoji/unicode/1f521.png +0 -0
  1922. data/templates/new-instance/public/images/emoji/unicode/1f522.png +0 -0
  1923. data/templates/new-instance/public/images/emoji/unicode/1f523.png +0 -0
  1924. data/templates/new-instance/public/images/emoji/unicode/1f524.png +0 -0
  1925. data/templates/new-instance/public/images/emoji/unicode/1f525.png +0 -0
  1926. data/templates/new-instance/public/images/emoji/unicode/1f526.png +0 -0
  1927. data/templates/new-instance/public/images/emoji/unicode/1f527.png +0 -0
  1928. data/templates/new-instance/public/images/emoji/unicode/1f528.png +0 -0
  1929. data/templates/new-instance/public/images/emoji/unicode/1f529.png +0 -0
  1930. data/templates/new-instance/public/images/emoji/unicode/1f52a.png +0 -0
  1931. data/templates/new-instance/public/images/emoji/unicode/1f52b.png +0 -0
  1932. data/templates/new-instance/public/images/emoji/unicode/1f52c.png +0 -0
  1933. data/templates/new-instance/public/images/emoji/unicode/1f52d.png +0 -0
  1934. data/templates/new-instance/public/images/emoji/unicode/1f52e.png +0 -0
  1935. data/templates/new-instance/public/images/emoji/unicode/1f52f.png +0 -0
  1936. data/templates/new-instance/public/images/emoji/unicode/1f530.png +0 -0
  1937. data/templates/new-instance/public/images/emoji/unicode/1f531.png +0 -0
  1938. data/templates/new-instance/public/images/emoji/unicode/1f532.png +0 -0
  1939. data/templates/new-instance/public/images/emoji/unicode/1f533.png +0 -0
  1940. data/templates/new-instance/public/images/emoji/unicode/1f534.png +0 -0
  1941. data/templates/new-instance/public/images/emoji/unicode/1f535.png +0 -0
  1942. data/templates/new-instance/public/images/emoji/unicode/1f536.png +0 -0
  1943. data/templates/new-instance/public/images/emoji/unicode/1f537.png +0 -0
  1944. data/templates/new-instance/public/images/emoji/unicode/1f538.png +0 -0
  1945. data/templates/new-instance/public/images/emoji/unicode/1f539.png +0 -0
  1946. data/templates/new-instance/public/images/emoji/unicode/1f53a.png +0 -0
  1947. data/templates/new-instance/public/images/emoji/unicode/1f53b.png +0 -0
  1948. data/templates/new-instance/public/images/emoji/unicode/1f53c.png +0 -0
  1949. data/templates/new-instance/public/images/emoji/unicode/1f53d.png +0 -0
  1950. data/templates/new-instance/public/images/emoji/unicode/1f550.png +0 -0
  1951. data/templates/new-instance/public/images/emoji/unicode/1f551.png +0 -0
  1952. data/templates/new-instance/public/images/emoji/unicode/1f552.png +0 -0
  1953. data/templates/new-instance/public/images/emoji/unicode/1f553.png +0 -0
  1954. data/templates/new-instance/public/images/emoji/unicode/1f554.png +0 -0
  1955. data/templates/new-instance/public/images/emoji/unicode/1f555.png +0 -0
  1956. data/templates/new-instance/public/images/emoji/unicode/1f556.png +0 -0
  1957. data/templates/new-instance/public/images/emoji/unicode/1f557.png +0 -0
  1958. data/templates/new-instance/public/images/emoji/unicode/1f558.png +0 -0
  1959. data/templates/new-instance/public/images/emoji/unicode/1f559.png +0 -0
  1960. data/templates/new-instance/public/images/emoji/unicode/1f55a.png +0 -0
  1961. data/templates/new-instance/public/images/emoji/unicode/1f55b.png +0 -0
  1962. data/templates/new-instance/public/images/emoji/unicode/1f55c.png +0 -0
  1963. data/templates/new-instance/public/images/emoji/unicode/1f55d.png +0 -0
  1964. data/templates/new-instance/public/images/emoji/unicode/1f55e.png +0 -0
  1965. data/templates/new-instance/public/images/emoji/unicode/1f55f.png +0 -0
  1966. data/templates/new-instance/public/images/emoji/unicode/1f560.png +0 -0
  1967. data/templates/new-instance/public/images/emoji/unicode/1f561.png +0 -0
  1968. data/templates/new-instance/public/images/emoji/unicode/1f562.png +0 -0
  1969. data/templates/new-instance/public/images/emoji/unicode/1f563.png +0 -0
  1970. data/templates/new-instance/public/images/emoji/unicode/1f564.png +0 -0
  1971. data/templates/new-instance/public/images/emoji/unicode/1f565.png +0 -0
  1972. data/templates/new-instance/public/images/emoji/unicode/1f566.png +0 -0
  1973. data/templates/new-instance/public/images/emoji/unicode/1f567.png +0 -0
  1974. data/templates/new-instance/public/images/emoji/unicode/1f5fb.png +0 -0
  1975. data/templates/new-instance/public/images/emoji/unicode/1f5fc.png +0 -0
  1976. data/templates/new-instance/public/images/emoji/unicode/1f5fd.png +0 -0
  1977. data/templates/new-instance/public/images/emoji/unicode/1f5fe.png +0 -0
  1978. data/templates/new-instance/public/images/emoji/unicode/1f5ff.png +0 -0
  1979. data/templates/new-instance/public/images/emoji/unicode/1f600.png +0 -0
  1980. data/templates/new-instance/public/images/emoji/unicode/1f601.png +0 -0
  1981. data/templates/new-instance/public/images/emoji/unicode/1f602.png +0 -0
  1982. data/templates/new-instance/public/images/emoji/unicode/1f603.png +0 -0
  1983. data/templates/new-instance/public/images/emoji/unicode/1f604.png +0 -0
  1984. data/templates/new-instance/public/images/emoji/unicode/1f605.png +0 -0
  1985. data/templates/new-instance/public/images/emoji/unicode/1f606.png +0 -0
  1986. data/templates/new-instance/public/images/emoji/unicode/1f607.png +0 -0
  1987. data/templates/new-instance/public/images/emoji/unicode/1f608.png +0 -0
  1988. data/templates/new-instance/public/images/emoji/unicode/1f609.png +0 -0
  1989. data/templates/new-instance/public/images/emoji/unicode/1f60a.png +0 -0
  1990. data/templates/new-instance/public/images/emoji/unicode/1f60b.png +0 -0
  1991. data/templates/new-instance/public/images/emoji/unicode/1f60c.png +0 -0
  1992. data/templates/new-instance/public/images/emoji/unicode/1f60d.png +0 -0
  1993. data/templates/new-instance/public/images/emoji/unicode/1f60e.png +0 -0
  1994. data/templates/new-instance/public/images/emoji/unicode/1f60f.png +0 -0
  1995. data/templates/new-instance/public/images/emoji/unicode/1f610.png +0 -0
  1996. data/templates/new-instance/public/images/emoji/unicode/1f611.png +0 -0
  1997. data/templates/new-instance/public/images/emoji/unicode/1f612.png +0 -0
  1998. data/templates/new-instance/public/images/emoji/unicode/1f613.png +0 -0
  1999. data/templates/new-instance/public/images/emoji/unicode/1f614.png +0 -0
  2000. data/templates/new-instance/public/images/emoji/unicode/1f615.png +0 -0
  2001. data/templates/new-instance/public/images/emoji/unicode/1f616.png +0 -0
  2002. data/templates/new-instance/public/images/emoji/unicode/1f617.png +0 -0
  2003. data/templates/new-instance/public/images/emoji/unicode/1f618.png +0 -0
  2004. data/templates/new-instance/public/images/emoji/unicode/1f619.png +0 -0
  2005. data/templates/new-instance/public/images/emoji/unicode/1f61a.png +0 -0
  2006. data/templates/new-instance/public/images/emoji/unicode/1f61b.png +0 -0
  2007. data/templates/new-instance/public/images/emoji/unicode/1f61c.png +0 -0
  2008. data/templates/new-instance/public/images/emoji/unicode/1f61d.png +0 -0
  2009. data/templates/new-instance/public/images/emoji/unicode/1f61e.png +0 -0
  2010. data/templates/new-instance/public/images/emoji/unicode/1f61f.png +0 -0
  2011. data/templates/new-instance/public/images/emoji/unicode/1f620.png +0 -0
  2012. data/templates/new-instance/public/images/emoji/unicode/1f621.png +0 -0
  2013. data/templates/new-instance/public/images/emoji/unicode/1f622.png +0 -0
  2014. data/templates/new-instance/public/images/emoji/unicode/1f623.png +0 -0
  2015. data/templates/new-instance/public/images/emoji/unicode/1f624.png +0 -0
  2016. data/templates/new-instance/public/images/emoji/unicode/1f625.png +0 -0
  2017. data/templates/new-instance/public/images/emoji/unicode/1f626.png +0 -0
  2018. data/templates/new-instance/public/images/emoji/unicode/1f627.png +0 -0
  2019. data/templates/new-instance/public/images/emoji/unicode/1f628.png +0 -0
  2020. data/templates/new-instance/public/images/emoji/unicode/1f629.png +0 -0
  2021. data/templates/new-instance/public/images/emoji/unicode/1f62a.png +0 -0
  2022. data/templates/new-instance/public/images/emoji/unicode/1f62b.png +0 -0
  2023. data/templates/new-instance/public/images/emoji/unicode/1f62c.png +0 -0
  2024. data/templates/new-instance/public/images/emoji/unicode/1f62d.png +0 -0
  2025. data/templates/new-instance/public/images/emoji/unicode/1f62e.png +0 -0
  2026. data/templates/new-instance/public/images/emoji/unicode/1f62f.png +0 -0
  2027. data/templates/new-instance/public/images/emoji/unicode/1f630.png +0 -0
  2028. data/templates/new-instance/public/images/emoji/unicode/1f631.png +0 -0
  2029. data/templates/new-instance/public/images/emoji/unicode/1f632.png +0 -0
  2030. data/templates/new-instance/public/images/emoji/unicode/1f633.png +0 -0
  2031. data/templates/new-instance/public/images/emoji/unicode/1f634.png +0 -0
  2032. data/templates/new-instance/public/images/emoji/unicode/1f635.png +0 -0
  2033. data/templates/new-instance/public/images/emoji/unicode/1f636.png +0 -0
  2034. data/templates/new-instance/public/images/emoji/unicode/1f637.png +0 -0
  2035. data/templates/new-instance/public/images/emoji/unicode/1f638.png +0 -0
  2036. data/templates/new-instance/public/images/emoji/unicode/1f639.png +0 -0
  2037. data/templates/new-instance/public/images/emoji/unicode/1f63a.png +0 -0
  2038. data/templates/new-instance/public/images/emoji/unicode/1f63b.png +0 -0
  2039. data/templates/new-instance/public/images/emoji/unicode/1f63c.png +0 -0
  2040. data/templates/new-instance/public/images/emoji/unicode/1f63d.png +0 -0
  2041. data/templates/new-instance/public/images/emoji/unicode/1f63e.png +0 -0
  2042. data/templates/new-instance/public/images/emoji/unicode/1f63f.png +0 -0
  2043. data/templates/new-instance/public/images/emoji/unicode/1f640.png +0 -0
  2044. data/templates/new-instance/public/images/emoji/unicode/1f645.png +0 -0
  2045. data/templates/new-instance/public/images/emoji/unicode/1f646.png +0 -0
  2046. data/templates/new-instance/public/images/emoji/unicode/1f647.png +0 -0
  2047. data/templates/new-instance/public/images/emoji/unicode/1f648.png +0 -0
  2048. data/templates/new-instance/public/images/emoji/unicode/1f649.png +0 -0
  2049. data/templates/new-instance/public/images/emoji/unicode/1f64a.png +0 -0
  2050. data/templates/new-instance/public/images/emoji/unicode/1f64b.png +0 -0
  2051. data/templates/new-instance/public/images/emoji/unicode/1f64c.png +0 -0
  2052. data/templates/new-instance/public/images/emoji/unicode/1f64d.png +0 -0
  2053. data/templates/new-instance/public/images/emoji/unicode/1f64e.png +0 -0
  2054. data/templates/new-instance/public/images/emoji/unicode/1f64f.png +0 -0
  2055. data/templates/new-instance/public/images/emoji/unicode/1f680.png +0 -0
  2056. data/templates/new-instance/public/images/emoji/unicode/1f681.png +0 -0
  2057. data/templates/new-instance/public/images/emoji/unicode/1f682.png +0 -0
  2058. data/templates/new-instance/public/images/emoji/unicode/1f683.png +0 -0
  2059. data/templates/new-instance/public/images/emoji/unicode/1f684.png +0 -0
  2060. data/templates/new-instance/public/images/emoji/unicode/1f685.png +0 -0
  2061. data/templates/new-instance/public/images/emoji/unicode/1f686.png +0 -0
  2062. data/templates/new-instance/public/images/emoji/unicode/1f687.png +0 -0
  2063. data/templates/new-instance/public/images/emoji/unicode/1f688.png +0 -0
  2064. data/templates/new-instance/public/images/emoji/unicode/1f689.png +0 -0
  2065. data/templates/new-instance/public/images/emoji/unicode/1f68a.png +0 -0
  2066. data/templates/new-instance/public/images/emoji/unicode/1f68c.png +0 -0
  2067. data/templates/new-instance/public/images/emoji/unicode/1f68d.png +0 -0
  2068. data/templates/new-instance/public/images/emoji/unicode/1f68e.png +0 -0
  2069. data/templates/new-instance/public/images/emoji/unicode/1f68f.png +0 -0
  2070. data/templates/new-instance/public/images/emoji/unicode/1f690.png +0 -0
  2071. data/templates/new-instance/public/images/emoji/unicode/1f691.png +0 -0
  2072. data/templates/new-instance/public/images/emoji/unicode/1f692.png +0 -0
  2073. data/templates/new-instance/public/images/emoji/unicode/1f693.png +0 -0
  2074. data/templates/new-instance/public/images/emoji/unicode/1f694.png +0 -0
  2075. data/templates/new-instance/public/images/emoji/unicode/1f695.png +0 -0
  2076. data/templates/new-instance/public/images/emoji/unicode/1f696.png +0 -0
  2077. data/templates/new-instance/public/images/emoji/unicode/1f697.png +0 -0
  2078. data/templates/new-instance/public/images/emoji/unicode/1f698.png +0 -0
  2079. data/templates/new-instance/public/images/emoji/unicode/1f699.png +0 -0
  2080. data/templates/new-instance/public/images/emoji/unicode/1f69a.png +0 -0
  2081. data/templates/new-instance/public/images/emoji/unicode/1f69b.png +0 -0
  2082. data/templates/new-instance/public/images/emoji/unicode/1f69c.png +0 -0
  2083. data/templates/new-instance/public/images/emoji/unicode/1f69d.png +0 -0
  2084. data/templates/new-instance/public/images/emoji/unicode/1f69e.png +0 -0
  2085. data/templates/new-instance/public/images/emoji/unicode/1f69f.png +0 -0
  2086. data/templates/new-instance/public/images/emoji/unicode/1f6a0.png +0 -0
  2087. data/templates/new-instance/public/images/emoji/unicode/1f6a1.png +0 -0
  2088. data/templates/new-instance/public/images/emoji/unicode/1f6a2.png +0 -0
  2089. data/templates/new-instance/public/images/emoji/unicode/1f6a3.png +0 -0
  2090. data/templates/new-instance/public/images/emoji/unicode/1f6a4.png +0 -0
  2091. data/templates/new-instance/public/images/emoji/unicode/1f6a5.png +0 -0
  2092. data/templates/new-instance/public/images/emoji/unicode/1f6a6.png +0 -0
  2093. data/templates/new-instance/public/images/emoji/unicode/1f6a7.png +0 -0
  2094. data/templates/new-instance/public/images/emoji/unicode/1f6a8.png +0 -0
  2095. data/templates/new-instance/public/images/emoji/unicode/1f6a9.png +0 -0
  2096. data/templates/new-instance/public/images/emoji/unicode/1f6aa.png +0 -0
  2097. data/templates/new-instance/public/images/emoji/unicode/1f6ab.png +0 -0
  2098. data/templates/new-instance/public/images/emoji/unicode/1f6ac.png +0 -0
  2099. data/templates/new-instance/public/images/emoji/unicode/1f6ad.png +0 -0
  2100. data/templates/new-instance/public/images/emoji/unicode/1f6ae.png +0 -0
  2101. data/templates/new-instance/public/images/emoji/unicode/1f6af.png +0 -0
  2102. data/templates/new-instance/public/images/emoji/unicode/1f6b0.png +0 -0
  2103. data/templates/new-instance/public/images/emoji/unicode/1f6b1.png +0 -0
  2104. data/templates/new-instance/public/images/emoji/unicode/1f6b2.png +0 -0
  2105. data/templates/new-instance/public/images/emoji/unicode/1f6b3.png +0 -0
  2106. data/templates/new-instance/public/images/emoji/unicode/1f6b4.png +0 -0
  2107. data/templates/new-instance/public/images/emoji/unicode/1f6b5.png +0 -0
  2108. data/templates/new-instance/public/images/emoji/unicode/1f6b6.png +0 -0
  2109. data/templates/new-instance/public/images/emoji/unicode/1f6b7.png +0 -0
  2110. data/templates/new-instance/public/images/emoji/unicode/1f6b8.png +0 -0
  2111. data/templates/new-instance/public/images/emoji/unicode/1f6b9.png +0 -0
  2112. data/templates/new-instance/public/images/emoji/unicode/1f6ba.png +0 -0
  2113. data/templates/new-instance/public/images/emoji/unicode/1f6bb.png +0 -0
  2114. data/templates/new-instance/public/images/emoji/unicode/1f6bc.png +0 -0
  2115. data/templates/new-instance/public/images/emoji/unicode/1f6bd.png +0 -0
  2116. data/templates/new-instance/public/images/emoji/unicode/1f6be.png +0 -0
  2117. data/templates/new-instance/public/images/emoji/unicode/1f6bf.png +0 -0
  2118. data/templates/new-instance/public/images/emoji/unicode/1f6c0.png +0 -0
  2119. data/templates/new-instance/public/images/emoji/unicode/1f6c1.png +0 -0
  2120. data/templates/new-instance/public/images/emoji/unicode/1f6c2.png +0 -0
  2121. data/templates/new-instance/public/images/emoji/unicode/1f6c3.png +0 -0
  2122. data/templates/new-instance/public/images/emoji/unicode/1f6c4.png +0 -0
  2123. data/templates/new-instance/public/images/emoji/unicode/1f6c5.png +0 -0
  2124. data/templates/new-instance/public/images/emoji/unicode/203c.png +0 -0
  2125. data/templates/new-instance/public/images/emoji/unicode/2049.png +0 -0
  2126. data/templates/new-instance/public/images/emoji/unicode/2122.png +0 -0
  2127. data/templates/new-instance/public/images/emoji/unicode/2139.png +0 -0
  2128. data/templates/new-instance/public/images/emoji/unicode/2194.png +0 -0
  2129. data/templates/new-instance/public/images/emoji/unicode/2195.png +0 -0
  2130. data/templates/new-instance/public/images/emoji/unicode/2196.png +0 -0
  2131. data/templates/new-instance/public/images/emoji/unicode/2197.png +0 -0
  2132. data/templates/new-instance/public/images/emoji/unicode/2198.png +0 -0
  2133. data/templates/new-instance/public/images/emoji/unicode/2199.png +0 -0
  2134. data/templates/new-instance/public/images/emoji/unicode/21a9.png +0 -0
  2135. data/templates/new-instance/public/images/emoji/unicode/21aa.png +0 -0
  2136. data/templates/new-instance/public/images/emoji/unicode/231a.png +0 -0
  2137. data/templates/new-instance/public/images/emoji/unicode/231b.png +0 -0
  2138. data/templates/new-instance/public/images/emoji/unicode/23e9.png +0 -0
  2139. data/templates/new-instance/public/images/emoji/unicode/23ea.png +0 -0
  2140. data/templates/new-instance/public/images/emoji/unicode/23eb.png +0 -0
  2141. data/templates/new-instance/public/images/emoji/unicode/23ec.png +0 -0
  2142. data/templates/new-instance/public/images/emoji/unicode/23f0.png +0 -0
  2143. data/templates/new-instance/public/images/emoji/unicode/23f3.png +0 -0
  2144. data/templates/new-instance/public/images/emoji/unicode/24c2.png +0 -0
  2145. data/templates/new-instance/public/images/emoji/unicode/25aa.png +0 -0
  2146. data/templates/new-instance/public/images/emoji/unicode/25ab.png +0 -0
  2147. data/templates/new-instance/public/images/emoji/unicode/25b6.png +0 -0
  2148. data/templates/new-instance/public/images/emoji/unicode/25c0.png +0 -0
  2149. data/templates/new-instance/public/images/emoji/unicode/25fb.png +0 -0
  2150. data/templates/new-instance/public/images/emoji/unicode/25fc.png +0 -0
  2151. data/templates/new-instance/public/images/emoji/unicode/25fd.png +0 -0
  2152. data/templates/new-instance/public/images/emoji/unicode/25fe.png +0 -0
  2153. data/templates/new-instance/public/images/emoji/unicode/2600.png +0 -0
  2154. data/templates/new-instance/public/images/emoji/unicode/2601.png +0 -0
  2155. data/templates/new-instance/public/images/emoji/unicode/260e.png +0 -0
  2156. data/templates/new-instance/public/images/emoji/unicode/2611.png +0 -0
  2157. data/templates/new-instance/public/images/emoji/unicode/2614.png +0 -0
  2158. data/templates/new-instance/public/images/emoji/unicode/2615.png +0 -0
  2159. data/templates/new-instance/public/images/emoji/unicode/261d.png +0 -0
  2160. data/templates/new-instance/public/images/emoji/unicode/263a.png +0 -0
  2161. data/templates/new-instance/public/images/emoji/unicode/2648.png +0 -0
  2162. data/templates/new-instance/public/images/emoji/unicode/2649.png +0 -0
  2163. data/templates/new-instance/public/images/emoji/unicode/264a.png +0 -0
  2164. data/templates/new-instance/public/images/emoji/unicode/264b.png +0 -0
  2165. data/templates/new-instance/public/images/emoji/unicode/264c.png +0 -0
  2166. data/templates/new-instance/public/images/emoji/unicode/264d.png +0 -0
  2167. data/templates/new-instance/public/images/emoji/unicode/264e.png +0 -0
  2168. data/templates/new-instance/public/images/emoji/unicode/264f.png +0 -0
  2169. data/templates/new-instance/public/images/emoji/unicode/2650.png +0 -0
  2170. data/templates/new-instance/public/images/emoji/unicode/2651.png +0 -0
  2171. data/templates/new-instance/public/images/emoji/unicode/2652.png +0 -0
  2172. data/templates/new-instance/public/images/emoji/unicode/2653.png +0 -0
  2173. data/templates/new-instance/public/images/emoji/unicode/2660.png +0 -0
  2174. data/templates/new-instance/public/images/emoji/unicode/2663.png +0 -0
  2175. data/templates/new-instance/public/images/emoji/unicode/2665.png +0 -0
  2176. data/templates/new-instance/public/images/emoji/unicode/2666.png +0 -0
  2177. data/templates/new-instance/public/images/emoji/unicode/2668.png +0 -0
  2178. data/templates/new-instance/public/images/emoji/unicode/267b.png +0 -0
  2179. data/templates/new-instance/public/images/emoji/unicode/267f.png +0 -0
  2180. data/templates/new-instance/public/images/emoji/unicode/2693.png +0 -0
  2181. data/templates/new-instance/public/images/emoji/unicode/26a0.png +0 -0
  2182. data/templates/new-instance/public/images/emoji/unicode/26a1.png +0 -0
  2183. data/templates/new-instance/public/images/emoji/unicode/26aa.png +0 -0
  2184. data/templates/new-instance/public/images/emoji/unicode/26ab.png +0 -0
  2185. data/templates/new-instance/public/images/emoji/unicode/26bd.png +0 -0
  2186. data/templates/new-instance/public/images/emoji/unicode/26be.png +0 -0
  2187. data/templates/new-instance/public/images/emoji/unicode/26c4.png +0 -0
  2188. data/templates/new-instance/public/images/emoji/unicode/26c5.png +0 -0
  2189. data/templates/new-instance/public/images/emoji/unicode/26ce.png +0 -0
  2190. data/templates/new-instance/public/images/emoji/unicode/26d4.png +0 -0
  2191. data/templates/new-instance/public/images/emoji/unicode/26ea.png +0 -0
  2192. data/templates/new-instance/public/images/emoji/unicode/26f2.png +0 -0
  2193. data/templates/new-instance/public/images/emoji/unicode/26f3.png +0 -0
  2194. data/templates/new-instance/public/images/emoji/unicode/26f5.png +0 -0
  2195. data/templates/new-instance/public/images/emoji/unicode/26fa.png +0 -0
  2196. data/templates/new-instance/public/images/emoji/unicode/26fd.png +0 -0
  2197. data/templates/new-instance/public/images/emoji/unicode/2702.png +0 -0
  2198. data/templates/new-instance/public/images/emoji/unicode/2705.png +0 -0
  2199. data/templates/new-instance/public/images/emoji/unicode/2708.png +0 -0
  2200. data/templates/new-instance/public/images/emoji/unicode/2709.png +0 -0
  2201. data/templates/new-instance/public/images/emoji/unicode/270a.png +0 -0
  2202. data/templates/new-instance/public/images/emoji/unicode/270b.png +0 -0
  2203. data/templates/new-instance/public/images/emoji/unicode/270c.png +0 -0
  2204. data/templates/new-instance/public/images/emoji/unicode/270f.png +0 -0
  2205. data/templates/new-instance/public/images/emoji/unicode/2712.png +0 -0
  2206. data/templates/new-instance/public/images/emoji/unicode/2714.png +0 -0
  2207. data/templates/new-instance/public/images/emoji/unicode/2716.png +0 -0
  2208. data/templates/new-instance/public/images/emoji/unicode/2728.png +0 -0
  2209. data/templates/new-instance/public/images/emoji/unicode/2733.png +0 -0
  2210. data/templates/new-instance/public/images/emoji/unicode/2734.png +0 -0
  2211. data/templates/new-instance/public/images/emoji/unicode/2744.png +0 -0
  2212. data/templates/new-instance/public/images/emoji/unicode/2747.png +0 -0
  2213. data/templates/new-instance/public/images/emoji/unicode/274c.png +0 -0
  2214. data/templates/new-instance/public/images/emoji/unicode/274e.png +0 -0
  2215. data/templates/new-instance/public/images/emoji/unicode/2753.png +0 -0
  2216. data/templates/new-instance/public/images/emoji/unicode/2754.png +0 -0
  2217. data/templates/new-instance/public/images/emoji/unicode/2755.png +0 -0
  2218. data/templates/new-instance/public/images/emoji/unicode/2757.png +0 -0
  2219. data/templates/new-instance/public/images/emoji/unicode/2764.png +0 -0
  2220. data/templates/new-instance/public/images/emoji/unicode/2795.png +0 -0
  2221. data/templates/new-instance/public/images/emoji/unicode/2796.png +0 -0
  2222. data/templates/new-instance/public/images/emoji/unicode/2797.png +0 -0
  2223. data/templates/new-instance/public/images/emoji/unicode/27a1.png +0 -0
  2224. data/templates/new-instance/public/images/emoji/unicode/27b0.png +0 -0
  2225. data/templates/new-instance/public/images/emoji/unicode/27bf.png +0 -0
  2226. data/templates/new-instance/public/images/emoji/unicode/2934.png +0 -0
  2227. data/templates/new-instance/public/images/emoji/unicode/2935.png +0 -0
  2228. data/templates/new-instance/public/images/emoji/unicode/2b05.png +0 -0
  2229. data/templates/new-instance/public/images/emoji/unicode/2b06.png +0 -0
  2230. data/templates/new-instance/public/images/emoji/unicode/2b07.png +0 -0
  2231. data/templates/new-instance/public/images/emoji/unicode/2b1b.png +0 -0
  2232. data/templates/new-instance/public/images/emoji/unicode/2b1c.png +0 -0
  2233. data/templates/new-instance/public/images/emoji/unicode/2b50.png +0 -0
  2234. data/templates/new-instance/public/images/emoji/unicode/2b55.png +0 -0
  2235. data/templates/new-instance/public/images/emoji/unicode/3030.png +0 -0
  2236. data/templates/new-instance/public/images/emoji/unicode/303d.png +0 -0
  2237. data/templates/new-instance/public/images/emoji/unicode/3297.png +0 -0
  2238. data/templates/new-instance/public/images/emoji/unicode/3299.png +0 -0
  2239. data/templates/new-instance/public/images/emoji/unlock.png +0 -0
  2240. data/templates/new-instance/public/images/emoji/up.png +0 -0
  2241. data/templates/new-instance/public/images/emoji/us.png +0 -0
  2242. data/templates/new-instance/public/images/emoji/v.png +0 -0
  2243. data/templates/new-instance/public/images/emoji/vertical_traffic_light.png +0 -0
  2244. data/templates/new-instance/public/images/emoji/vhs.png +0 -0
  2245. data/templates/new-instance/public/images/emoji/vibration_mode.png +0 -0
  2246. data/templates/new-instance/public/images/emoji/video_camera.png +0 -0
  2247. data/templates/new-instance/public/images/emoji/video_game.png +0 -0
  2248. data/templates/new-instance/public/images/emoji/violin.png +0 -0
  2249. data/templates/new-instance/public/images/emoji/virgo.png +0 -0
  2250. data/templates/new-instance/public/images/emoji/volcano.png +0 -0
  2251. data/templates/new-instance/public/images/emoji/vs.png +0 -0
  2252. data/templates/new-instance/public/images/emoji/walking.png +0 -0
  2253. data/templates/new-instance/public/images/emoji/waning_crescent_moon.png +0 -0
  2254. data/templates/new-instance/public/images/emoji/waning_gibbous_moon.png +0 -0
  2255. data/templates/new-instance/public/images/emoji/warning.png +0 -0
  2256. data/templates/new-instance/public/images/emoji/watch.png +0 -0
  2257. data/templates/new-instance/public/images/emoji/water_buffalo.png +0 -0
  2258. data/templates/new-instance/public/images/emoji/watermelon.png +0 -0
  2259. data/templates/new-instance/public/images/emoji/wave.png +0 -0
  2260. data/templates/new-instance/public/images/emoji/wavy_dash.png +0 -0
  2261. data/templates/new-instance/public/images/emoji/waxing_crescent_moon.png +0 -0
  2262. data/templates/new-instance/public/images/emoji/waxing_gibbous_moon.png +0 -0
  2263. data/templates/new-instance/public/images/emoji/wc.png +0 -0
  2264. data/templates/new-instance/public/images/emoji/weary.png +0 -0
  2265. data/templates/new-instance/public/images/emoji/wedding.png +0 -0
  2266. data/templates/new-instance/public/images/emoji/whale.png +0 -0
  2267. data/templates/new-instance/public/images/emoji/whale2.png +0 -0
  2268. data/templates/new-instance/public/images/emoji/wheelchair.png +0 -0
  2269. data/templates/new-instance/public/images/emoji/white_check_mark.png +0 -0
  2270. data/templates/new-instance/public/images/emoji/white_circle.png +0 -0
  2271. data/templates/new-instance/public/images/emoji/white_flower.png +0 -0
  2272. data/templates/new-instance/public/images/emoji/white_large_square.png +0 -0
  2273. data/templates/new-instance/public/images/emoji/white_medium_small_square.png +0 -0
  2274. data/templates/new-instance/public/images/emoji/white_medium_square.png +0 -0
  2275. data/templates/new-instance/public/images/emoji/white_small_square.png +0 -0
  2276. data/templates/new-instance/public/images/emoji/white_square_button.png +0 -0
  2277. data/templates/new-instance/public/images/emoji/wind_chime.png +0 -0
  2278. data/templates/new-instance/public/images/emoji/wine_glass.png +0 -0
  2279. data/templates/new-instance/public/images/emoji/wink.png +0 -0
  2280. data/templates/new-instance/public/images/emoji/wolf.png +0 -0
  2281. data/templates/new-instance/public/images/emoji/woman.png +0 -0
  2282. data/templates/new-instance/public/images/emoji/womans_clothes.png +0 -0
  2283. data/templates/new-instance/public/images/emoji/womans_hat.png +0 -0
  2284. data/templates/new-instance/public/images/emoji/womens.png +0 -0
  2285. data/templates/new-instance/public/images/emoji/worried.png +0 -0
  2286. data/templates/new-instance/public/images/emoji/wrench.png +0 -0
  2287. data/templates/new-instance/public/images/emoji/x.png +0 -0
  2288. data/templates/new-instance/public/images/emoji/yellow_heart.png +0 -0
  2289. data/templates/new-instance/public/images/emoji/yen.png +0 -0
  2290. data/templates/new-instance/public/images/emoji/yum.png +0 -0
  2291. data/templates/new-instance/public/images/emoji/zap.png +0 -0
  2292. data/templates/new-instance/public/images/emoji/zero.png +0 -0
  2293. data/templates/new-instance/public/images/emoji/zzz.png +0 -0
  2294. data/test/acceptance/creating_a_release_test.rb +0 -72
  2295. data/test/data/backtrace.txt +0 -27
  2296. data/test/data/bare_repo.git/FETCH_HEAD +0 -3
  2297. data/test/data/bare_repo.git/HEAD +0 -1
  2298. data/test/data/bare_repo.git/config +0 -9
  2299. data/test/data/bare_repo.git/description +0 -1
  2300. data/test/data/bare_repo.git/hooks/applypatch-msg.sample +0 -15
  2301. data/test/data/bare_repo.git/hooks/commit-msg.sample +0 -24
  2302. data/test/data/bare_repo.git/hooks/post-update.sample +0 -8
  2303. data/test/data/bare_repo.git/hooks/pre-applypatch.sample +0 -14
  2304. data/test/data/bare_repo.git/hooks/pre-commit.sample +0 -50
  2305. data/test/data/bare_repo.git/hooks/pre-rebase.sample +0 -169
  2306. data/test/data/bare_repo.git/hooks/prepare-commit-msg.sample +0 -36
  2307. data/test/data/bare_repo.git/hooks/update.sample +0 -128
  2308. data/test/data/bare_repo.git/info/exclude +0 -6
  2309. data/test/data/bare_repo.git/objects/22/924bbf4378f83cab93bfd5fa7d7777cbc1f3b4 +0 -0
  2310. data/test/data/bare_repo.git/objects/59/e4862a85cf64d42a8b17db45ebf2ba39568679 +0 -0
  2311. data/test/data/bare_repo.git/objects/5f/8cb742401c71308f858bf537855bb07d2932d8 +0 -3
  2312. data/test/data/bare_repo.git/objects/60/3a4970ec7ed5eb3f7a578850c21b7162424465 +0 -1
  2313. data/test/data/bare_repo.git/objects/6e/eab9f9ee664c1acb08473921238ca95a8c17f5 +0 -0
  2314. data/test/data/bare_repo.git/objects/7f/ce91258d10807380f36192304883e916a48ec0 +0 -0
  2315. data/test/data/bare_repo.git/objects/b3/d156e4d4bb279e09cca0f31af8ea6e35d3df64 +0 -1
  2316. data/test/data/bare_repo.git/objects/b9/1a4fe778398bc87b29842ca84a2727b4763c9d +0 -1
  2317. data/test/data/bare_repo.git/objects/ba/a3ef218a40f23fe542f98d8b8e60a2e8e0bff0 +0 -1
  2318. data/test/data/bare_repo.git/objects/ba/b88c00ec62b5f30bf720ab1136401d1f9d2310 +0 -2
  2319. data/test/data/bare_repo.git/objects/bd/3e9e2e4ddf89a640a4f880cbf55bb46cc7e88a +0 -2
  2320. data/test/data/bare_repo.git/objects/be/63e6ebab6ce87922f97ca24b1338befdbe6915 +0 -0
  2321. data/test/data/bare_repo.git/objects/cc/f4bdedd71011176c0236e98268d71ed73eb80f +0 -0
  2322. data/test/data/bare_repo.git/objects/e0/e4580f44317a084dd5142fef6b4144a4394819 +0 -0
  2323. data/test/data/bare_repo.git/objects/e4/d9901b79d8112dd2fe369fcd8c65594c96a10b +0 -0
  2324. data/test/data/bare_repo.git/objects/pack/pack-dd400c42eded7158ab780652af55aa92c30e37e3.idx +0 -0
  2325. data/test/data/bare_repo.git/objects/pack/pack-dd400c42eded7158ab780652af55aa92c30e37e3.pack +0 -0
  2326. data/test/data/bare_repo.git/packed-refs +0 -2
  2327. data/test/data/bare_repo.git/refs/heads/divergent-branch +0 -1
  2328. data/test/data/bare_repo.git/refs/heads/for-testing +0 -1
  2329. data/test/data/bare_repo.git/refs/heads/master +0 -1
  2330. data/test/data/github_push_event_payload.json +0 -161
  2331. data/test/factories/commit_factory.rb +0 -9
  2332. data/test/factories/deploy_factory.rb +0 -7
  2333. data/test/factories/task_factory.rb +0 -6
  2334. data/test/integration/ci_integration_test.rb +0 -170
  2335. data/test/integration/commits_api_test.rb +0 -68
  2336. data/test/integration/ticket_tasks_api_test.rb +0 -70
  2337. data/test/support/houston/adapters/ci_server/mock_adapter.rb +0 -23
  2338. data/test/support/houston/adapters/ci_server/mock_adapter/job.rb +0 -29
  2339. data/test/support/houston/adapters/error_tracker/mock_adapter.rb +0 -31
  2340. data/test/support/houston/adapters/ticket_tracker/mock_adapter.rb +0 -21
  2341. data/test/support/houston/adapters/version_control/mock_adapter.rb +0 -21
  2342. data/test/unit/adapters/ci_server_adapters_api_test.rb +0 -29
  2343. data/test/unit/adapters/error_tracker_adapters_test.rb +0 -36
  2344. data/test/unit/adapters/git_adapter_test.rb +0 -227
  2345. data/test/unit/adapters/jenkins_adapter_test.rb +0 -184
  2346. data/test/unit/adapters/ticket_tracker_adapters_api_test.rb +0 -67
  2347. data/test/unit/adapters/version_control_adapters_api_test.rb +0 -41
  2348. data/test/unit/concerns/commit_synchronizer_test.rb +0 -150
  2349. data/test/unit/controllers/deploys_controller_test.rb +0 -47
  2350. data/test/unit/controllers/hooks_controller_test.rb +0 -138
  2351. data/test/unit/controllers/sprints_controller_test.rb +0 -54
  2352. data/test/unit/controllers/test_runs_controller_test.rb +0 -20
  2353. data/test/unit/initializers/sync_commits_on_post_receive_test.rb +0 -14
  2354. data/test/unit/models/code_climate_coverage_report_test.rb +0 -137
  2355. data/test/unit/models/commit_test.rb +0 -279
  2356. data/test/unit/models/deploy_test.rb +0 -97
  2357. data/test/unit/models/post_receive_payload_test.rb +0 -19
  2358. data/test/unit/models/project_test.rb +0 -91
  2359. data/test/unit/models/pull_request_test.rb +0 -195
  2360. data/test/unit/models/release_change_test.rb +0 -32
  2361. data/test/unit/models/release_test.rb +0 -53
  2362. data/test/unit/models/source_file_coverage_test.rb +0 -33
  2363. data/test/unit/models/sprint_test.rb +0 -44
  2364. data/test/unit/models/task_test.rb +0 -135
  2365. data/test/unit/models/test_run_test.rb +0 -289
  2366. data/test/unit/models/ticket_test.rb +0 -218
  2367. data/test/unit/presenters/sprint_task_presenter_test.rb +0 -57
  2368. data/test/unit/test_run_comparer_test.rb +0 -108
  2369. data/vendor/assets/stylesheets/alertify-bootstrap-3.css +0 -2
  2370. data/vendor/assets/stylesheets/alertify-bootstrap.css +0 -2
  2371. data/vendor/images/fa-archive.svg +0 -6
  2372. data/vendor/images/fa-asterisk.svg +0 -6
  2373. data/vendor/images/fa-bank.svg +0 -9
  2374. data/vendor/images/fa-bell.svg +0 -9
  2375. data/vendor/images/fa-bomb.svg +0 -9
  2376. data/vendor/images/fa-bookmark.svg +0 -6
  2377. data/vendor/images/fa-bug.svg +0 -9
  2378. data/vendor/images/fa-bullhorn.svg +0 -6
  2379. data/vendor/images/fa-burndown.svg +0 -15
  2380. data/vendor/images/fa-calendar-o.svg +0 -9
  2381. data/vendor/images/fa-certificate.svg +0 -6
  2382. data/vendor/images/fa-comment.svg +0 -9
  2383. data/vendor/images/fa-comments.svg +0 -9
  2384. data/vendor/images/fa-database.svg +0 -9
  2385. data/vendor/images/fa-file.svg +0 -6
  2386. data/vendor/images/fa-fire-extinguisher.svg +0 -9
  2387. data/vendor/images/fa-flag.svg +0 -6
  2388. data/vendor/images/fa-gear.svg +0 -6
  2389. data/vendor/images/fa-home.svg +0 -6
  2390. data/vendor/images/fa-lightbulb-o.svg +0 -9
  2391. data/vendor/images/fa-map-signs.svg +0 -6
  2392. data/vendor/images/fa-map.svg +0 -6
  2393. data/vendor/images/fa-paper-plane.svg +0 -9
  2394. data/vendor/images/fa-road.svg +0 -9
  2395. data/vendor/images/fa-star.svg +0 -6
  2396. data/vendor/images/fa-suitcase.svg +0 -6
  2397. data/vendor/images/fa-user.svg +0 -9
  2398. data/vendor/images/octokit-pull-request.svg +0 -6
@@ -1,50 +1,67 @@
1
1
  !function() {
2
2
  var d3 = {
3
- version: "3.4.1"
4
- };
5
- if (!Date.now) Date.now = function() {
6
- return +new Date();
3
+ version: "3.5.17"
7
4
  };
8
5
  var d3_arraySlice = [].slice, d3_array = function(list) {
9
6
  return d3_arraySlice.call(list);
10
7
  };
11
- var d3_document = document, d3_documentElement = d3_document.documentElement, d3_window = window;
12
- try {
13
- d3_array(d3_documentElement.childNodes)[0].nodeType;
14
- } catch (e) {
15
- d3_array = function(list) {
16
- var i = list.length, array = new Array(i);
17
- while (i--) array[i] = list[i];
18
- return array;
19
- };
8
+ var d3_document = this.document;
9
+ function d3_documentElement(node) {
10
+ return node && (node.ownerDocument || node.document || node).documentElement;
20
11
  }
21
- try {
22
- d3_document.createElement("div").style.setProperty("opacity", 0, "");
23
- } catch (error) {
24
- var d3_element_prototype = d3_window.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = d3_window.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
25
- d3_element_prototype.setAttribute = function(name, value) {
26
- d3_element_setAttribute.call(this, name, value + "");
27
- };
28
- d3_element_prototype.setAttributeNS = function(space, local, value) {
29
- d3_element_setAttributeNS.call(this, space, local, value + "");
30
- };
31
- d3_style_prototype.setProperty = function(name, value, priority) {
32
- d3_style_setProperty.call(this, name, value + "", priority);
33
- };
12
+ function d3_window(node) {
13
+ return node && (node.ownerDocument && node.ownerDocument.defaultView || node.document && node || node.defaultView);
34
14
  }
35
- d3.ascending = function(a, b) {
36
- return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
15
+ if (d3_document) {
16
+ try {
17
+ d3_array(d3_document.documentElement.childNodes)[0].nodeType;
18
+ } catch (e) {
19
+ d3_array = function(list) {
20
+ var i = list.length, array = new Array(i);
21
+ while (i--) array[i] = list[i];
22
+ return array;
23
+ };
24
+ }
25
+ }
26
+ if (!Date.now) Date.now = function() {
27
+ return +new Date();
37
28
  };
29
+ if (d3_document) {
30
+ try {
31
+ d3_document.createElement("DIV").style.setProperty("opacity", 0, "");
32
+ } catch (error) {
33
+ var d3_element_prototype = this.Element.prototype, d3_element_setAttribute = d3_element_prototype.setAttribute, d3_element_setAttributeNS = d3_element_prototype.setAttributeNS, d3_style_prototype = this.CSSStyleDeclaration.prototype, d3_style_setProperty = d3_style_prototype.setProperty;
34
+ d3_element_prototype.setAttribute = function(name, value) {
35
+ d3_element_setAttribute.call(this, name, value + "");
36
+ };
37
+ d3_element_prototype.setAttributeNS = function(space, local, value) {
38
+ d3_element_setAttributeNS.call(this, space, local, value + "");
39
+ };
40
+ d3_style_prototype.setProperty = function(name, value, priority) {
41
+ d3_style_setProperty.call(this, name, value + "", priority);
42
+ };
43
+ }
44
+ }
45
+ d3.ascending = d3_ascending;
46
+ function d3_ascending(a, b) {
47
+ return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
48
+ }
38
49
  d3.descending = function(a, b) {
39
50
  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
40
51
  };
41
52
  d3.min = function(array, f) {
42
53
  var i = -1, n = array.length, a, b;
43
54
  if (arguments.length === 1) {
44
- while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
55
+ while (++i < n) if ((b = array[i]) != null && b >= b) {
56
+ a = b;
57
+ break;
58
+ }
45
59
  while (++i < n) if ((b = array[i]) != null && a > b) a = b;
46
60
  } else {
47
- while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
61
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
62
+ a = b;
63
+ break;
64
+ }
48
65
  while (++i < n) if ((b = f.call(array, array[i], i)) != null && a > b) a = b;
49
66
  }
50
67
  return a;
@@ -52,10 +69,16 @@
52
69
  d3.max = function(array, f) {
53
70
  var i = -1, n = array.length, a, b;
54
71
  if (arguments.length === 1) {
55
- while (++i < n && !((a = array[i]) != null && a <= a)) a = undefined;
72
+ while (++i < n) if ((b = array[i]) != null && b >= b) {
73
+ a = b;
74
+ break;
75
+ }
56
76
  while (++i < n) if ((b = array[i]) != null && b > a) a = b;
57
77
  } else {
58
- while (++i < n && !((a = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
78
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
79
+ a = b;
80
+ break;
81
+ }
59
82
  while (++i < n) if ((b = f.call(array, array[i], i)) != null && b > a) a = b;
60
83
  }
61
84
  return a;
@@ -63,13 +86,19 @@
63
86
  d3.extent = function(array, f) {
64
87
  var i = -1, n = array.length, a, b, c;
65
88
  if (arguments.length === 1) {
66
- while (++i < n && !((a = c = array[i]) != null && a <= a)) a = c = undefined;
89
+ while (++i < n) if ((b = array[i]) != null && b >= b) {
90
+ a = c = b;
91
+ break;
92
+ }
67
93
  while (++i < n) if ((b = array[i]) != null) {
68
94
  if (a > b) a = b;
69
95
  if (c < b) c = b;
70
96
  }
71
97
  } else {
72
- while (++i < n && !((a = c = f.call(array, array[i], i)) != null && a <= a)) a = undefined;
98
+ while (++i < n) if ((b = f.call(array, array[i], i)) != null && b >= b) {
99
+ a = c = b;
100
+ break;
101
+ }
73
102
  while (++i < n) if ((b = f.call(array, array[i], i)) != null) {
74
103
  if (a > b) a = b;
75
104
  if (c < b) c = b;
@@ -77,44 +106,76 @@
77
106
  }
78
107
  return [ a, c ];
79
108
  };
109
+ function d3_number(x) {
110
+ return x === null ? NaN : +x;
111
+ }
112
+ function d3_numeric(x) {
113
+ return !isNaN(x);
114
+ }
80
115
  d3.sum = function(array, f) {
81
116
  var s = 0, n = array.length, a, i = -1;
82
117
  if (arguments.length === 1) {
83
- while (++i < n) if (!isNaN(a = +array[i])) s += a;
118
+ while (++i < n) if (d3_numeric(a = +array[i])) s += a;
84
119
  } else {
85
- while (++i < n) if (!isNaN(a = +f.call(array, array[i], i))) s += a;
120
+ while (++i < n) if (d3_numeric(a = +f.call(array, array[i], i))) s += a;
86
121
  }
87
122
  return s;
88
123
  };
89
- function d3_number(x) {
90
- return x != null && !isNaN(x);
91
- }
92
124
  d3.mean = function(array, f) {
93
- var n = array.length, a, m = 0, i = -1, j = 0;
125
+ var s = 0, n = array.length, a, i = -1, j = n;
94
126
  if (arguments.length === 1) {
95
- while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j;
127
+ while (++i < n) if (d3_numeric(a = d3_number(array[i]))) s += a; else --j;
96
128
  } else {
97
- while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j;
129
+ while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) s += a; else --j;
98
130
  }
99
- return j ? m : undefined;
131
+ if (j) return s / j;
100
132
  };
101
133
  d3.quantile = function(values, p) {
102
134
  var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
103
135
  return e ? v + e * (values[h] - v) : v;
104
136
  };
105
137
  d3.median = function(array, f) {
106
- if (arguments.length > 1) array = array.map(f);
107
- array = array.filter(d3_number);
108
- return array.length ? d3.quantile(array.sort(d3.ascending), .5) : undefined;
138
+ var numbers = [], n = array.length, a, i = -1;
139
+ if (arguments.length === 1) {
140
+ while (++i < n) if (d3_numeric(a = d3_number(array[i]))) numbers.push(a);
141
+ } else {
142
+ while (++i < n) if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) numbers.push(a);
143
+ }
144
+ if (numbers.length) return d3.quantile(numbers.sort(d3_ascending), .5);
109
145
  };
110
- d3.bisector = function(f) {
146
+ d3.variance = function(array, f) {
147
+ var n = array.length, m = 0, a, d, s = 0, i = -1, j = 0;
148
+ if (arguments.length === 1) {
149
+ while (++i < n) {
150
+ if (d3_numeric(a = d3_number(array[i]))) {
151
+ d = a - m;
152
+ m += d / ++j;
153
+ s += d * (a - m);
154
+ }
155
+ }
156
+ } else {
157
+ while (++i < n) {
158
+ if (d3_numeric(a = d3_number(f.call(array, array[i], i)))) {
159
+ d = a - m;
160
+ m += d / ++j;
161
+ s += d * (a - m);
162
+ }
163
+ }
164
+ }
165
+ if (j > 1) return s / (j - 1);
166
+ };
167
+ d3.deviation = function() {
168
+ var v = d3.variance.apply(this, arguments);
169
+ return v ? Math.sqrt(v) : v;
170
+ };
171
+ function d3_bisector(compare) {
111
172
  return {
112
173
  left: function(a, x, lo, hi) {
113
174
  if (arguments.length < 3) lo = 0;
114
175
  if (arguments.length < 4) hi = a.length;
115
176
  while (lo < hi) {
116
177
  var mid = lo + hi >>> 1;
117
- if (f.call(a, a[mid], mid) < x) lo = mid + 1; else hi = mid;
178
+ if (compare(a[mid], x) < 0) lo = mid + 1; else hi = mid;
118
179
  }
119
180
  return lo;
120
181
  },
@@ -123,22 +184,29 @@
123
184
  if (arguments.length < 4) hi = a.length;
124
185
  while (lo < hi) {
125
186
  var mid = lo + hi >>> 1;
126
- if (x < f.call(a, a[mid], mid)) hi = mid; else lo = mid + 1;
187
+ if (compare(a[mid], x) > 0) hi = mid; else lo = mid + 1;
127
188
  }
128
189
  return lo;
129
190
  }
130
191
  };
192
+ }
193
+ var d3_bisect = d3_bisector(d3_ascending);
194
+ d3.bisectLeft = d3_bisect.left;
195
+ d3.bisect = d3.bisectRight = d3_bisect.right;
196
+ d3.bisector = function(f) {
197
+ return d3_bisector(f.length === 1 ? function(d, x) {
198
+ return d3_ascending(f(d), x);
199
+ } : f);
131
200
  };
132
- var d3_bisector = d3.bisector(function(d) {
133
- return d;
134
- });
135
- d3.bisectLeft = d3_bisector.left;
136
- d3.bisect = d3.bisectRight = d3_bisector.right;
137
- d3.shuffle = function(array) {
138
- var m = array.length, t, i;
201
+ d3.shuffle = function(array, i0, i1) {
202
+ if ((m = arguments.length) < 3) {
203
+ i1 = array.length;
204
+ if (m < 2) i0 = 0;
205
+ }
206
+ var m = i1 - i0, t, i;
139
207
  while (m) {
140
208
  i = Math.random() * m-- | 0;
141
- t = array[m], array[m] = array[i], array[i] = t;
209
+ t = array[m + i0], array[m + i0] = array[i + i0], array[i + i0] = t;
142
210
  }
143
211
  return array;
144
212
  };
@@ -152,20 +220,20 @@
152
220
  while (i < n) pairs[i] = [ p0 = p1, p1 = array[++i] ];
153
221
  return pairs;
154
222
  };
155
- d3.zip = function() {
156
- if (!(n = arguments.length)) return [];
157
- for (var i = -1, m = d3.min(arguments, d3_zipLength), zips = new Array(m); ++i < m; ) {
158
- for (var j = -1, n, zip = zips[i] = new Array(n); ++j < n; ) {
159
- zip[j] = arguments[j][i];
223
+ d3.transpose = function(matrix) {
224
+ if (!(n = matrix.length)) return [];
225
+ for (var i = -1, m = d3.min(matrix, d3_transposeLength), transpose = new Array(m); ++i < m; ) {
226
+ for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n; ) {
227
+ row[j] = matrix[j][i];
160
228
  }
161
229
  }
162
- return zips;
230
+ return transpose;
163
231
  };
164
- function d3_zipLength(d) {
232
+ function d3_transposeLength(d) {
165
233
  return d.length;
166
234
  }
167
- d3.transpose = function(matrix) {
168
- return d3.zip.apply(d3, matrix);
235
+ d3.zip = function() {
236
+ return d3.transpose(arguments);
169
237
  };
170
238
  d3.keys = function(map) {
171
239
  var keys = [];
@@ -219,80 +287,84 @@
219
287
  return k;
220
288
  }
221
289
  function d3_class(ctor, properties) {
222
- try {
223
- for (var key in properties) {
224
- Object.defineProperty(ctor.prototype, key, {
225
- value: properties[key],
226
- enumerable: false
227
- });
228
- }
229
- } catch (e) {
230
- ctor.prototype = properties;
290
+ for (var key in properties) {
291
+ Object.defineProperty(ctor.prototype, key, {
292
+ value: properties[key],
293
+ enumerable: false
294
+ });
231
295
  }
232
296
  }
233
- d3.map = function(object) {
297
+ d3.map = function(object, f) {
234
298
  var map = new d3_Map();
235
- if (object instanceof d3_Map) object.forEach(function(key, value) {
236
- map.set(key, value);
237
- }); else for (var key in object) map.set(key, object[key]);
299
+ if (object instanceof d3_Map) {
300
+ object.forEach(function(key, value) {
301
+ map.set(key, value);
302
+ });
303
+ } else if (Array.isArray(object)) {
304
+ var i = -1, n = object.length, o;
305
+ if (arguments.length === 1) while (++i < n) map.set(i, object[i]); else while (++i < n) map.set(f.call(object, o = object[i], i), o);
306
+ } else {
307
+ for (var key in object) map.set(key, object[key]);
308
+ }
238
309
  return map;
239
310
  };
240
- function d3_Map() {}
311
+ function d3_Map() {
312
+ this._ = Object.create(null);
313
+ }
314
+ var d3_map_proto = "__proto__", d3_map_zero = "\x00";
241
315
  d3_class(d3_Map, {
242
316
  has: d3_map_has,
243
317
  get: function(key) {
244
- return this[d3_map_prefix + key];
318
+ return this._[d3_map_escape(key)];
245
319
  },
246
320
  set: function(key, value) {
247
- return this[d3_map_prefix + key] = value;
321
+ return this._[d3_map_escape(key)] = value;
248
322
  },
249
323
  remove: d3_map_remove,
250
324
  keys: d3_map_keys,
251
325
  values: function() {
252
326
  var values = [];
253
- this.forEach(function(key, value) {
254
- values.push(value);
255
- });
327
+ for (var key in this._) values.push(this._[key]);
256
328
  return values;
257
329
  },
258
330
  entries: function() {
259
331
  var entries = [];
260
- this.forEach(function(key, value) {
261
- entries.push({
262
- key: key,
263
- value: value
264
- });
332
+ for (var key in this._) entries.push({
333
+ key: d3_map_unescape(key),
334
+ value: this._[key]
265
335
  });
266
336
  return entries;
267
337
  },
268
338
  size: d3_map_size,
269
339
  empty: d3_map_empty,
270
340
  forEach: function(f) {
271
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) f.call(this, key.substring(1), this[key]);
341
+ for (var key in this._) f.call(this, d3_map_unescape(key), this._[key]);
272
342
  }
273
343
  });
274
- var d3_map_prefix = "\x00", d3_map_prefixCode = d3_map_prefix.charCodeAt(0);
344
+ function d3_map_escape(key) {
345
+ return (key += "") === d3_map_proto || key[0] === d3_map_zero ? d3_map_zero + key : key;
346
+ }
347
+ function d3_map_unescape(key) {
348
+ return (key += "")[0] === d3_map_zero ? key.slice(1) : key;
349
+ }
275
350
  function d3_map_has(key) {
276
- return d3_map_prefix + key in this;
351
+ return d3_map_escape(key) in this._;
277
352
  }
278
353
  function d3_map_remove(key) {
279
- key = d3_map_prefix + key;
280
- return key in this && delete this[key];
354
+ return (key = d3_map_escape(key)) in this._ && delete this._[key];
281
355
  }
282
356
  function d3_map_keys() {
283
357
  var keys = [];
284
- this.forEach(function(key) {
285
- keys.push(key);
286
- });
358
+ for (var key in this._) keys.push(d3_map_unescape(key));
287
359
  return keys;
288
360
  }
289
361
  function d3_map_size() {
290
362
  var size = 0;
291
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) ++size;
363
+ for (var key in this._) ++size;
292
364
  return size;
293
365
  }
294
366
  function d3_map_empty() {
295
- for (var key in this) if (key.charCodeAt(0) === d3_map_prefixCode) return false;
367
+ for (var key in this._) return false;
296
368
  return true;
297
369
  }
298
370
  d3.nest = function() {
@@ -363,25 +435,27 @@
363
435
  if (array) for (var i = 0, n = array.length; i < n; ++i) set.add(array[i]);
364
436
  return set;
365
437
  };
366
- function d3_Set() {}
438
+ function d3_Set() {
439
+ this._ = Object.create(null);
440
+ }
367
441
  d3_class(d3_Set, {
368
442
  has: d3_map_has,
369
- add: function(value) {
370
- this[d3_map_prefix + value] = true;
371
- return value;
372
- },
373
- remove: function(value) {
374
- value = d3_map_prefix + value;
375
- return value in this && delete this[value];
443
+ add: function(key) {
444
+ this._[d3_map_escape(key += "")] = true;
445
+ return key;
376
446
  },
447
+ remove: d3_map_remove,
377
448
  values: d3_map_keys,
378
449
  size: d3_map_size,
379
450
  empty: d3_map_empty,
380
451
  forEach: function(f) {
381
- for (var value in this) if (value.charCodeAt(0) === d3_map_prefixCode) f.call(this, value.substring(1));
452
+ for (var key in this._) f.call(this, d3_map_unescape(key));
382
453
  }
383
454
  });
384
455
  d3.behavior = {};
456
+ function d3_identity(d) {
457
+ return d;
458
+ }
385
459
  d3.rebind = function(target, source) {
386
460
  var i = 1, n = arguments.length, method;
387
461
  while (++i < n) target[method = arguments[i]] = d3_rebind(target, source, source[method]);
@@ -395,7 +469,7 @@
395
469
  }
396
470
  function d3_vendorSymbol(object, name) {
397
471
  if (name in object) return name;
398
- name = name.charAt(0).toUpperCase() + name.substring(1);
472
+ name = name.charAt(0).toUpperCase() + name.slice(1);
399
473
  for (var i = 0, n = d3_vendorPrefixes.length; i < n; ++i) {
400
474
  var prefixName = d3_vendorPrefixes[i] + name;
401
475
  if (prefixName in object) return prefixName;
@@ -412,8 +486,8 @@
412
486
  d3_dispatch.prototype.on = function(type, listener) {
413
487
  var i = type.indexOf("."), name = "";
414
488
  if (i >= 0) {
415
- name = type.substring(i + 1);
416
- type = type.substring(0, i);
489
+ name = type.slice(i + 1);
490
+ type = type.slice(0, i);
417
491
  }
418
492
  if (type) return arguments.length < 2 ? this[type].on(name) : this[type].on(name, listener);
419
493
  if (arguments.length === 2) {
@@ -488,20 +562,22 @@
488
562
  return n.querySelector(s);
489
563
  }, d3_selectAll = function(s, n) {
490
564
  return n.querySelectorAll(s);
491
- }, d3_selectMatcher = d3_documentElement[d3_vendorSymbol(d3_documentElement, "matchesSelector")], d3_selectMatches = function(n, s) {
492
- return d3_selectMatcher.call(n, s);
565
+ }, d3_selectMatches = function(n, s) {
566
+ var d3_selectMatcher = n.matches || n[d3_vendorSymbol(n, "matchesSelector")];
567
+ d3_selectMatches = function(n, s) {
568
+ return d3_selectMatcher.call(n, s);
569
+ };
570
+ return d3_selectMatches(n, s);
493
571
  };
494
572
  if (typeof Sizzle === "function") {
495
573
  d3_select = function(s, n) {
496
574
  return Sizzle(s, n)[0] || null;
497
575
  };
498
- d3_selectAll = function(s, n) {
499
- return Sizzle.uniqueSort(Sizzle(s, n));
500
- };
576
+ d3_selectAll = Sizzle;
501
577
  d3_selectMatches = Sizzle.matchesSelector;
502
578
  }
503
579
  d3.selection = function() {
504
- return d3_selectionRoot;
580
+ return d3.select(d3_document.documentElement);
505
581
  };
506
582
  var d3_selectionPrototype = d3.selection.prototype = [];
507
583
  d3_selectionPrototype.select = function(selector) {
@@ -544,9 +620,10 @@
544
620
  return d3_selectAll(selector, this);
545
621
  };
546
622
  }
623
+ var d3_nsXhtml = "http://www.w3.org/1999/xhtml";
547
624
  var d3_nsPrefix = {
548
625
  svg: "http://www.w3.org/2000/svg",
549
- xhtml: "http://www.w3.org/1999/xhtml",
626
+ xhtml: d3_nsXhtml,
550
627
  xlink: "http://www.w3.org/1999/xlink",
551
628
  xml: "http://www.w3.org/XML/1998/namespace",
552
629
  xmlns: "http://www.w3.org/2000/xmlns/"
@@ -555,10 +632,7 @@
555
632
  prefix: d3_nsPrefix,
556
633
  qualify: function(name) {
557
634
  var i = name.indexOf(":"), prefix = name;
558
- if (i >= 0) {
559
- prefix = name.substring(0, i);
560
- name = name.substring(i + 1);
561
- }
635
+ if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
562
636
  return d3_nsPrefix.hasOwnProperty(prefix) ? {
563
637
  space: d3_nsPrefix[prefix],
564
638
  local: name
@@ -625,7 +699,7 @@
625
699
  return new RegExp("(?:^|\\s+)" + d3.requote(name) + "(?:\\s+|$)", "g");
626
700
  }
627
701
  function d3_selection_classes(name) {
628
- return name.trim().split(/^|\s+/);
702
+ return (name + "").trim().split(/^|\s+/);
629
703
  }
630
704
  function d3_selection_classed(name, value) {
631
705
  name = d3_selection_classes(name).map(d3_selection_classedName);
@@ -661,7 +735,10 @@
661
735
  for (priority in name) this.each(d3_selection_style(priority, name[priority], value));
662
736
  return this;
663
737
  }
664
- if (n < 2) return d3_window.getComputedStyle(this.node(), null).getPropertyValue(name);
738
+ if (n < 2) {
739
+ var node = this.node();
740
+ return d3_window(node).getComputedStyle(node, null).getPropertyValue(name);
741
+ }
665
742
  priority = "";
666
743
  }
667
744
  return this.each(d3_selection_style(name, value, priority));
@@ -727,11 +804,14 @@
727
804
  });
728
805
  };
729
806
  function d3_selection_creator(name) {
730
- return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? function() {
807
+ function create() {
808
+ var document = this.ownerDocument, namespace = this.namespaceURI;
809
+ return namespace === d3_nsXhtml && document.documentElement.namespaceURI === d3_nsXhtml ? document.createElement(name) : document.createElementNS(namespace, name);
810
+ }
811
+ function createNS() {
731
812
  return this.ownerDocument.createElementNS(name.space, name.local);
732
- } : function() {
733
- return this.ownerDocument.createElementNS(this.namespaceURI, name);
734
- };
813
+ }
814
+ return typeof name === "function" ? name : (name = d3.ns.qualify(name)).local ? createNS : create;
735
815
  }
736
816
  d3_selectionPrototype.insert = function(name, before) {
737
817
  name = d3_selection_creator(name);
@@ -741,11 +821,12 @@
741
821
  });
742
822
  };
743
823
  d3_selectionPrototype.remove = function() {
744
- return this.each(function() {
745
- var parent = this.parentNode;
746
- if (parent) parent.removeChild(this);
747
- });
824
+ return this.each(d3_selectionRemove);
748
825
  };
826
+ function d3_selectionRemove() {
827
+ var parent = this.parentNode;
828
+ if (parent) parent.removeChild(this);
829
+ }
749
830
  d3_selectionPrototype.data = function(value, key) {
750
831
  var i = -1, n = this.length, group, node;
751
832
  if (!arguments.length) {
@@ -760,29 +841,28 @@
760
841
  function bind(group, groupData) {
761
842
  var i, n = group.length, m = groupData.length, n0 = Math.min(n, m), updateNodes = new Array(m), enterNodes = new Array(m), exitNodes = new Array(n), node, nodeData;
762
843
  if (key) {
763
- var nodeByKeyValue = new d3_Map(), dataByKeyValue = new d3_Map(), keyValues = [], keyValue;
844
+ var nodeByKeyValue = new d3_Map(), keyValues = new Array(n), keyValue;
764
845
  for (i = -1; ++i < n; ) {
765
- keyValue = key.call(node = group[i], node.__data__, i);
766
- if (nodeByKeyValue.has(keyValue)) {
767
- exitNodes[i] = node;
768
- } else {
769
- nodeByKeyValue.set(keyValue, node);
846
+ if (node = group[i]) {
847
+ if (nodeByKeyValue.has(keyValue = key.call(node, node.__data__, i))) {
848
+ exitNodes[i] = node;
849
+ } else {
850
+ nodeByKeyValue.set(keyValue, node);
851
+ }
852
+ keyValues[i] = keyValue;
770
853
  }
771
- keyValues.push(keyValue);
772
854
  }
773
855
  for (i = -1; ++i < m; ) {
774
- keyValue = key.call(groupData, nodeData = groupData[i], i);
775
- if (node = nodeByKeyValue.get(keyValue)) {
856
+ if (!(node = nodeByKeyValue.get(keyValue = key.call(groupData, nodeData = groupData[i], i)))) {
857
+ enterNodes[i] = d3_selection_dataNode(nodeData);
858
+ } else if (node !== true) {
776
859
  updateNodes[i] = node;
777
860
  node.__data__ = nodeData;
778
- } else if (!dataByKeyValue.has(keyValue)) {
779
- enterNodes[i] = d3_selection_dataNode(nodeData);
780
861
  }
781
- dataByKeyValue.set(keyValue, nodeData);
782
- nodeByKeyValue.remove(keyValue);
862
+ nodeByKeyValue.set(keyValue, true);
783
863
  }
784
864
  for (i = -1; ++i < n; ) {
785
- if (nodeByKeyValue.has(keyValues[i])) {
865
+ if (i in keyValues && nodeByKeyValue.get(keyValues[i]) !== true) {
786
866
  exitNodes[i] = group[i];
787
867
  }
788
868
  }
@@ -872,7 +952,7 @@
872
952
  return this.order();
873
953
  };
874
954
  function d3_selection_sortComparator(comparator) {
875
- if (!arguments.length) comparator = d3.ascending;
955
+ if (!arguments.length) comparator = d3_ascending;
876
956
  return function(a, b) {
877
957
  return a && b ? comparator(a.__data__, b.__data__) : !a - !b;
878
958
  };
@@ -909,7 +989,7 @@
909
989
  };
910
990
  d3_selectionPrototype.size = function() {
911
991
  var n = 0;
912
- this.each(function() {
992
+ d3_selection_each(this, function() {
913
993
  ++n;
914
994
  });
915
995
  return n;
@@ -957,40 +1037,28 @@
957
1037
  return node;
958
1038
  };
959
1039
  }
960
- d3_selectionPrototype.transition = function() {
961
- var id = d3_transitionInheritId || ++d3_transitionId, subgroups = [], subgroup, node, transition = d3_transitionInherit || {
962
- time: Date.now(),
963
- ease: d3_ease_cubicInOut,
964
- delay: 0,
965
- duration: 250
966
- };
967
- for (var j = -1, m = this.length; ++j < m; ) {
968
- subgroups.push(subgroup = []);
969
- for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
970
- if (node = group[i]) d3_transitionNode(node, i, id, transition);
971
- subgroup.push(node);
972
- }
973
- }
974
- return d3_transition(subgroups, id);
975
- };
976
- d3_selectionPrototype.interrupt = function() {
977
- return this.each(d3_selection_interrupt);
978
- };
979
- function d3_selection_interrupt() {
980
- var lock = this.__transition__;
981
- if (lock) ++lock.active;
982
- }
983
1040
  d3.select = function(node) {
984
- var group = [ typeof node === "string" ? d3_select(node, d3_document) : node ];
985
- group.parentNode = d3_documentElement;
1041
+ var group;
1042
+ if (typeof node === "string") {
1043
+ group = [ d3_select(node, d3_document) ];
1044
+ group.parentNode = d3_document.documentElement;
1045
+ } else {
1046
+ group = [ node ];
1047
+ group.parentNode = d3_documentElement(node);
1048
+ }
986
1049
  return d3_selection([ group ]);
987
1050
  };
988
1051
  d3.selectAll = function(nodes) {
989
- var group = d3_array(typeof nodes === "string" ? d3_selectAll(nodes, d3_document) : nodes);
990
- group.parentNode = d3_documentElement;
1052
+ var group;
1053
+ if (typeof nodes === "string") {
1054
+ group = d3_array(d3_selectAll(nodes, d3_document));
1055
+ group.parentNode = d3_document.documentElement;
1056
+ } else {
1057
+ group = d3_array(nodes);
1058
+ group.parentNode = null;
1059
+ }
991
1060
  return d3_selection([ group ]);
992
1061
  };
993
- var d3_selectionRoot = d3.select(d3_documentElement);
994
1062
  d3_selectionPrototype.on = function(type, listener, capture) {
995
1063
  var n = arguments.length;
996
1064
  if (n < 3) {
@@ -1006,7 +1074,7 @@
1006
1074
  };
1007
1075
  function d3_selection_on(type, listener, capture) {
1008
1076
  var name = "__on" + type, i = type.indexOf("."), wrap = d3_selection_onListener;
1009
- if (i > 0) type = type.substring(0, i);
1077
+ if (i > 0) type = type.slice(0, i);
1010
1078
  var filter = d3_selection_onFilters.get(type);
1011
1079
  if (filter) type = filter, wrap = d3_selection_onFilter;
1012
1080
  function onRemove() {
@@ -1038,9 +1106,11 @@
1038
1106
  mouseenter: "mouseover",
1039
1107
  mouseleave: "mouseout"
1040
1108
  });
1041
- d3_selection_onFilters.forEach(function(k) {
1042
- if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
1043
- });
1109
+ if (d3_document) {
1110
+ d3_selection_onFilters.forEach(function(k) {
1111
+ if ("on" + k in d3_document) d3_selection_onFilters.remove(k);
1112
+ });
1113
+ }
1044
1114
  function d3_selection_onListener(listener, argumentz) {
1045
1115
  return function(e) {
1046
1116
  var o = d3.event;
@@ -1062,20 +1132,23 @@
1062
1132
  }
1063
1133
  };
1064
1134
  }
1065
- var d3_event_dragSelect = "onselectstart" in d3_document ? null : d3_vendorSymbol(d3_documentElement.style, "userSelect"), d3_event_dragId = 0;
1066
- function d3_event_dragSuppress() {
1067
- var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault);
1135
+ var d3_event_dragSelect, d3_event_dragId = 0;
1136
+ function d3_event_dragSuppress(node) {
1137
+ var name = ".dragsuppress-" + ++d3_event_dragId, click = "click" + name, w = d3.select(d3_window(node)).on("touchmove" + name, d3_eventPreventDefault).on("dragstart" + name, d3_eventPreventDefault).on("selectstart" + name, d3_eventPreventDefault);
1138
+ if (d3_event_dragSelect == null) {
1139
+ d3_event_dragSelect = "onselectstart" in node ? false : d3_vendorSymbol(node.style, "userSelect");
1140
+ }
1068
1141
  if (d3_event_dragSelect) {
1069
- var style = d3_documentElement.style, select = style[d3_event_dragSelect];
1142
+ var style = d3_documentElement(node).style, select = style[d3_event_dragSelect];
1070
1143
  style[d3_event_dragSelect] = "none";
1071
1144
  }
1072
1145
  return function(suppressClick) {
1073
1146
  w.on(name, null);
1074
1147
  if (d3_event_dragSelect) style[d3_event_dragSelect] = select;
1075
1148
  if (suppressClick) {
1076
- function off() {
1149
+ var off = function() {
1077
1150
  w.on(click, null);
1078
- }
1151
+ };
1079
1152
  w.on(click, function() {
1080
1153
  d3_eventPreventDefault();
1081
1154
  off();
@@ -1087,24 +1160,27 @@
1087
1160
  d3.mouse = function(container) {
1088
1161
  return d3_mousePoint(container, d3_eventSource());
1089
1162
  };
1090
- var d3_mouse_bug44083 = /WebKit/.test(d3_window.navigator.userAgent) ? -1 : 0;
1163
+ var d3_mouse_bug44083 = this.navigator && /WebKit/.test(this.navigator.userAgent) ? -1 : 0;
1091
1164
  function d3_mousePoint(container, e) {
1092
1165
  if (e.changedTouches) e = e.changedTouches[0];
1093
1166
  var svg = container.ownerSVGElement || container;
1094
1167
  if (svg.createSVGPoint) {
1095
1168
  var point = svg.createSVGPoint();
1096
- if (d3_mouse_bug44083 < 0 && (d3_window.scrollX || d3_window.scrollY)) {
1097
- svg = d3.select("body").append("svg").style({
1098
- position: "absolute",
1099
- top: 0,
1100
- left: 0,
1101
- margin: 0,
1102
- padding: 0,
1103
- border: "none"
1104
- }, "important");
1105
- var ctm = svg[0][0].getScreenCTM();
1106
- d3_mouse_bug44083 = !(ctm.f || ctm.e);
1107
- svg.remove();
1169
+ if (d3_mouse_bug44083 < 0) {
1170
+ var window = d3_window(container);
1171
+ if (window.scrollX || window.scrollY) {
1172
+ svg = d3.select("body").append("svg").style({
1173
+ position: "absolute",
1174
+ top: 0,
1175
+ left: 0,
1176
+ margin: 0,
1177
+ padding: 0,
1178
+ border: "none"
1179
+ }, "important");
1180
+ var ctm = svg[0][0].getScreenCTM();
1181
+ d3_mouse_bug44083 = !(ctm.f || ctm.e);
1182
+ svg.remove();
1183
+ }
1108
1184
  }
1109
1185
  if (d3_mouse_bug44083) point.x = e.pageX, point.y = e.pageY; else point.x = e.clientX,
1110
1186
  point.y = e.clientY;
@@ -1114,55 +1190,51 @@
1114
1190
  var rect = container.getBoundingClientRect();
1115
1191
  return [ e.clientX - rect.left - container.clientLeft, e.clientY - rect.top - container.clientTop ];
1116
1192
  }
1117
- d3.touches = function(container, touches) {
1118
- if (arguments.length < 2) touches = d3_eventSource().touches;
1119
- return touches ? d3_array(touches).map(function(touch) {
1120
- var point = d3_mousePoint(container, touch);
1121
- point.identifier = touch.identifier;
1122
- return point;
1123
- }) : [];
1193
+ d3.touch = function(container, touches, identifier) {
1194
+ if (arguments.length < 3) identifier = touches, touches = d3_eventSource().changedTouches;
1195
+ if (touches) for (var i = 0, n = touches.length, touch; i < n; ++i) {
1196
+ if ((touch = touches[i]).identifier === identifier) {
1197
+ return d3_mousePoint(container, touch);
1198
+ }
1199
+ }
1124
1200
  };
1125
1201
  d3.behavior.drag = function() {
1126
- var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, "mousemove", "mouseup"), touchstart = dragstart(touchid, touchposition, "touchmove", "touchend");
1202
+ var event = d3_eventDispatch(drag, "drag", "dragstart", "dragend"), origin = null, mousedown = dragstart(d3_noop, d3.mouse, d3_window, "mousemove", "mouseup"), touchstart = dragstart(d3_behavior_dragTouchId, d3.touch, d3_identity, "touchmove", "touchend");
1127
1203
  function drag() {
1128
1204
  this.on("mousedown.drag", mousedown).on("touchstart.drag", touchstart);
1129
1205
  }
1130
- function touchid() {
1131
- return d3.event.changedTouches[0].identifier;
1132
- }
1133
- function touchposition(parent, id) {
1134
- return d3.touches(parent).filter(function(p) {
1135
- return p.identifier === id;
1136
- })[0];
1137
- }
1138
- function dragstart(id, position, move, end) {
1206
+ function dragstart(id, position, subject, move, end) {
1139
1207
  return function() {
1140
- var target = this, parent = target.parentNode, event_ = event.of(target, arguments), eventTarget = d3.event.target, eventId = id(), drag = eventId == null ? "drag" : "drag-" + eventId, origin_ = position(parent, eventId), dragged = 0, offset, w = d3.select(d3_window).on(move + "." + drag, moved).on(end + "." + drag, ended), dragRestore = d3_event_dragSuppress();
1208
+ var that = this, target = d3.event.target.correspondingElement || d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject(target)).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(target), position0 = position(parent, dragId);
1141
1209
  if (origin) {
1142
- offset = origin.apply(target, arguments);
1143
- offset = [ offset.x - origin_[0], offset.y - origin_[1] ];
1210
+ dragOffset = origin.apply(that, arguments);
1211
+ dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ];
1144
1212
  } else {
1145
- offset = [ 0, 0 ];
1213
+ dragOffset = [ 0, 0 ];
1146
1214
  }
1147
- event_({
1215
+ dispatch({
1148
1216
  type: "dragstart"
1149
1217
  });
1150
1218
  function moved() {
1151
- var p = position(parent, eventId), dx = p[0] - origin_[0], dy = p[1] - origin_[1];
1219
+ var position1 = position(parent, dragId), dx, dy;
1220
+ if (!position1) return;
1221
+ dx = position1[0] - position0[0];
1222
+ dy = position1[1] - position0[1];
1152
1223
  dragged |= dx | dy;
1153
- origin_ = p;
1154
- event_({
1224
+ position0 = position1;
1225
+ dispatch({
1155
1226
  type: "drag",
1156
- x: p[0] + offset[0],
1157
- y: p[1] + offset[1],
1227
+ x: position1[0] + dragOffset[0],
1228
+ y: position1[1] + dragOffset[1],
1158
1229
  dx: dx,
1159
1230
  dy: dy
1160
1231
  });
1161
1232
  }
1162
1233
  function ended() {
1163
- w.on(move + "." + drag, null).on(end + "." + drag, null);
1164
- dragRestore(dragged && d3.event.target === eventTarget);
1165
- event_({
1234
+ if (!position(parent, dragId)) return;
1235
+ dragSubject.on(move + dragName, null).on(end + dragName, null);
1236
+ dragRestore(dragged);
1237
+ dispatch({
1166
1238
  type: "dragend"
1167
1239
  });
1168
1240
  }
@@ -1175,7 +1247,18 @@
1175
1247
  };
1176
1248
  return d3.rebind(drag, event, "on");
1177
1249
  };
1178
- var π = Math.PI, τ = 2 * π, halfπ = π / 2, ε = 1e-6, ε2 = ε * ε, d3_radians = π / 180, d3_degrees = 180 / π;
1250
+ function d3_behavior_dragTouchId() {
1251
+ return d3.event.changedTouches[0].identifier;
1252
+ }
1253
+ d3.touches = function(container, touches) {
1254
+ if (arguments.length < 2) touches = d3_eventSource().touches;
1255
+ return touches ? d3_array(touches).map(function(touch) {
1256
+ var point = d3_mousePoint(container, touch);
1257
+ point.identifier = touch.identifier;
1258
+ return point;
1259
+ }) : [];
1260
+ };
1261
+ var ε = 1e-6, ε2 = ε * ε, π = Math.PI, τ = 2 * π, τε = τ - ε, halfπ = π / 2, d3_radians = π / 180, d3_degrees = 180 / π;
1179
1262
  function d3_sgn(x) {
1180
1263
  return x > 0 ? 1 : x < 0 ? -1 : 0;
1181
1264
  }
@@ -1202,31 +1285,44 @@
1202
1285
  }
1203
1286
  var ρ = Math.SQRT2, ρ2 = 2, ρ4 = 4;
1204
1287
  d3.interpolateZoom = function(p0, p1) {
1205
- var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2];
1206
- var dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1), dr = r1 - r0, S = (dr || Math.log(w1 / w0)) / ρ;
1207
- function interpolate(t) {
1208
- var s = t * S;
1209
- if (dr) {
1210
- var coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
1288
+ var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], ux1 = p1[0], uy1 = p1[1], w1 = p1[2], dx = ux1 - ux0, dy = uy1 - uy0, d2 = dx * dx + dy * dy, i, S;
1289
+ if (d2 < ε2) {
1290
+ S = Math.log(w1 / w0) / ρ;
1291
+ i = function(t) {
1292
+ return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * t * S) ];
1293
+ };
1294
+ } else {
1295
+ var d1 = Math.sqrt(d2), b0 = (w1 * w1 - w0 * w0 + ρ4 * d2) / (2 * w0 * ρ2 * d1), b1 = (w1 * w1 - w0 * w0 - ρ4 * d2) / (2 * w1 * ρ2 * d1), r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
1296
+ S = (r1 - r0) / ρ;
1297
+ i = function(t) {
1298
+ var s = t * S, coshr0 = d3_cosh(r0), u = w0 / (ρ2 * d1) * (coshr0 * d3_tanh(ρ * s + r0) - d3_sinh(r0));
1211
1299
  return [ ux0 + u * dx, uy0 + u * dy, w0 * coshr0 / d3_cosh(ρ * s + r0) ];
1212
- }
1213
- return [ ux0 + t * dx, uy0 + t * dy, w0 * Math.exp(ρ * s) ];
1300
+ };
1214
1301
  }
1215
- interpolate.duration = S * 1e3;
1216
- return interpolate;
1302
+ i.duration = S * 1e3;
1303
+ return i;
1217
1304
  };
1218
1305
  d3.behavior.zoom = function() {
1219
1306
  var view = {
1220
1307
  x: 0,
1221
1308
  y: 0,
1222
1309
  k: 1
1223
- }, translate0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
1310
+ }, translate0, center0, center, size = [ 960, 500 ], scaleExtent = d3_behavior_zoomInfinity, duration = 250, zooming = 0, mousedown = "mousedown.zoom", mousemove = "mousemove.zoom", mouseup = "mouseup.zoom", mousewheelTimer, touchstart = "touchstart.zoom", touchtime, event = d3_eventDispatch(zoom, "zoomstart", "zoom", "zoomend"), x0, x1, y0, y1;
1311
+ if (!d3_behavior_zoomWheel) {
1312
+ d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() {
1313
+ return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
1314
+ }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() {
1315
+ return d3.event.wheelDelta;
1316
+ }, "mousewheel") : (d3_behavior_zoomDelta = function() {
1317
+ return -d3.event.detail;
1318
+ }, "MozMousePixelScroll");
1319
+ }
1224
1320
  function zoom(g) {
1225
- g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on(mousemove, mousewheelreset).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
1321
+ g.on(mousedown, mousedowned).on(d3_behavior_zoomWheel + ".zoom", mousewheeled).on("dblclick.zoom", dblclicked).on(touchstart, touchstarted);
1226
1322
  }
1227
1323
  zoom.event = function(g) {
1228
1324
  g.each(function() {
1229
- var event_ = event.of(this, arguments), view1 = view;
1325
+ var dispatch = event.of(this, arguments), view1 = view;
1230
1326
  if (d3_transitionInheritId) {
1231
1327
  d3.select(this).transition().each("start.zoom", function() {
1232
1328
  view = this.__chart__ || {
@@ -1234,9 +1330,9 @@
1234
1330
  y: 0,
1235
1331
  k: 1
1236
1332
  };
1237
- zoomstarted(event_);
1333
+ zoomstarted(dispatch);
1238
1334
  }).tween("zoom:zoom", function() {
1239
- var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
1335
+ var dx = size[0], dy = size[1], cx = center0 ? center0[0] : dx / 2, cy = center0 ? center0[1] : dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]);
1240
1336
  return function(t) {
1241
1337
  var l = i(t), k = dx / l[2];
1242
1338
  this.__chart__ = view = {
@@ -1244,16 +1340,18 @@
1244
1340
  y: cy - l[1] * k,
1245
1341
  k: k
1246
1342
  };
1247
- zoomed(event_);
1343
+ zoomed(dispatch);
1248
1344
  };
1345
+ }).each("interrupt.zoom", function() {
1346
+ zoomended(dispatch);
1249
1347
  }).each("end.zoom", function() {
1250
- zoomended(event_);
1348
+ zoomended(dispatch);
1251
1349
  });
1252
1350
  } else {
1253
1351
  this.__chart__ = view;
1254
- zoomstarted(event_);
1255
- zoomed(event_);
1256
- zoomended(event_);
1352
+ zoomstarted(dispatch);
1353
+ zoomed(dispatch);
1354
+ zoomended(dispatch);
1257
1355
  }
1258
1356
  });
1259
1357
  };
@@ -1272,8 +1370,9 @@
1272
1370
  view = {
1273
1371
  x: view.x,
1274
1372
  y: view.y,
1275
- k: +_
1373
+ k: null
1276
1374
  };
1375
+ scaleTo(+_);
1277
1376
  rescale();
1278
1377
  return zoom;
1279
1378
  };
@@ -1292,6 +1391,11 @@
1292
1391
  size = _ && [ +_[0], +_[1] ];
1293
1392
  return zoom;
1294
1393
  };
1394
+ zoom.duration = function(_) {
1395
+ if (!arguments.length) return duration;
1396
+ duration = +_;
1397
+ return zoom;
1398
+ };
1295
1399
  zoom.x = function(z) {
1296
1400
  if (!arguments.length) return x1;
1297
1401
  x1 = z;
@@ -1328,6 +1432,18 @@
1328
1432
  view.x += p[0] - l[0];
1329
1433
  view.y += p[1] - l[1];
1330
1434
  }
1435
+ function zoomTo(that, p, l, k) {
1436
+ that.__chart__ = {
1437
+ x: view.x,
1438
+ y: view.y,
1439
+ k: view.k
1440
+ };
1441
+ scaleTo(Math.pow(2, k));
1442
+ translateTo(center0 = p, l);
1443
+ that = d3.select(that);
1444
+ if (duration > 0) that = that.transition().duration(duration);
1445
+ that.call(zoom.event);
1446
+ }
1331
1447
  function rescale() {
1332
1448
  if (x1) x1.domain(x0.range().map(function(x) {
1333
1449
  return (x - view.x) / view.k;
@@ -1336,46 +1452,46 @@
1336
1452
  return (y - view.y) / view.k;
1337
1453
  }).map(y0.invert));
1338
1454
  }
1339
- function zoomstarted(event) {
1340
- event({
1455
+ function zoomstarted(dispatch) {
1456
+ if (!zooming++) dispatch({
1341
1457
  type: "zoomstart"
1342
1458
  });
1343
1459
  }
1344
- function zoomed(event) {
1460
+ function zoomed(dispatch) {
1345
1461
  rescale();
1346
- event({
1462
+ dispatch({
1347
1463
  type: "zoom",
1348
1464
  scale: view.k,
1349
1465
  translate: [ view.x, view.y ]
1350
1466
  });
1351
1467
  }
1352
- function zoomended(event) {
1353
- event({
1468
+ function zoomended(dispatch) {
1469
+ if (!--zooming) dispatch({
1354
1470
  type: "zoomend"
1355
- });
1471
+ }), center0 = null;
1356
1472
  }
1357
1473
  function mousedowned() {
1358
- var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, dragged = 0, w = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), l = location(d3.mouse(target)), dragRestore = d3_event_dragSuppress();
1359
- d3_selection_interrupt.call(target);
1360
- zoomstarted(event_);
1474
+ var that = this, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window(that)).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(that);
1475
+ d3_selection_interrupt.call(that);
1476
+ zoomstarted(dispatch);
1361
1477
  function moved() {
1362
1478
  dragged = 1;
1363
- translateTo(d3.mouse(target), l);
1364
- zoomed(event_);
1479
+ translateTo(d3.mouse(that), location0);
1480
+ zoomed(dispatch);
1365
1481
  }
1366
1482
  function ended() {
1367
- w.on(mousemove, d3_window === target ? mousewheelreset : null).on(mouseup, null);
1368
- dragRestore(dragged && d3.event.target === eventTarget);
1369
- zoomended(event_);
1483
+ subject.on(mousemove, null).on(mouseup, null);
1484
+ dragRestore(dragged);
1485
+ zoomended(dispatch);
1370
1486
  }
1371
1487
  }
1372
1488
  function touchstarted() {
1373
- var target = this, event_ = event.of(target, arguments), locations0 = {}, distance0 = 0, scale0, eventId = d3.event.changedTouches[0].identifier, touchmove = "touchmove.zoom-" + eventId, touchend = "touchend.zoom-" + eventId, w = d3.select(d3_window).on(touchmove, moved).on(touchend, ended), t = d3.select(target).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress();
1374
- d3_selection_interrupt.call(target);
1489
+ var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, targets = [], subject = d3.select(that), dragRestore = d3_event_dragSuppress(that);
1375
1490
  started();
1376
- zoomstarted(event_);
1491
+ zoomstarted(dispatch);
1492
+ subject.on(mousedown, null).on(touchstart, started);
1377
1493
  function relocate() {
1378
- var touches = d3.touches(target);
1494
+ var touches = d3.touches(that);
1379
1495
  scale0 = view.k;
1380
1496
  touches.forEach(function(t) {
1381
1497
  if (t.identifier in locations0) locations0[t.identifier] = location(t);
@@ -1383,6 +1499,9 @@
1383
1499
  return touches;
1384
1500
  }
1385
1501
  function started() {
1502
+ var target = d3.event.target;
1503
+ d3.select(target).on(touchmove, moved).on(touchend, ended);
1504
+ targets.push(target);
1386
1505
  var changed = d3.event.changedTouches;
1387
1506
  for (var i = 0, n = changed.length; i < n; ++i) {
1388
1507
  locations0[changed[i].identifier] = null;
@@ -1390,11 +1509,9 @@
1390
1509
  var touches = relocate(), now = Date.now();
1391
1510
  if (touches.length === 1) {
1392
1511
  if (now - touchtime < 500) {
1393
- var p = touches[0], l = locations0[p.identifier];
1394
- scaleTo(view.k * 2);
1395
- translateTo(p, l);
1512
+ var p = touches[0];
1513
+ zoomTo(that, p, locations0[p.identifier], Math.floor(Math.log(view.k) / Math.LN2) + 1);
1396
1514
  d3_eventPreventDefault();
1397
- zoomed(event_);
1398
1515
  }
1399
1516
  touchtime = now;
1400
1517
  } else if (touches.length > 1) {
@@ -1403,7 +1520,8 @@
1403
1520
  }
1404
1521
  }
1405
1522
  function moved() {
1406
- var touches = d3.touches(target), p0, l0, p1, l1;
1523
+ var touches = d3.touches(that), p0, l0, p1, l1;
1524
+ d3_selection_interrupt.call(that);
1407
1525
  for (var i = 0, n = touches.length; i < n; ++i, l1 = null) {
1408
1526
  p1 = touches[i];
1409
1527
  if (l1 = locations0[p1.identifier]) {
@@ -1419,7 +1537,7 @@
1419
1537
  }
1420
1538
  touchtime = null;
1421
1539
  translateTo(p0, l0);
1422
- zoomed(event_);
1540
+ zoomed(dispatch);
1423
1541
  }
1424
1542
  function ended() {
1425
1543
  if (d3.event.touches.length) {
@@ -1431,71 +1549,49 @@
1431
1549
  return void relocate();
1432
1550
  }
1433
1551
  }
1434
- w.on(touchmove, null).on(touchend, null);
1435
- t.on(mousedown, mousedowned).on(touchstart, touchstarted);
1552
+ d3.selectAll(targets).on(zoomName, null);
1553
+ subject.on(mousedown, mousedowned).on(touchstart, touchstarted);
1436
1554
  dragRestore();
1437
- zoomended(event_);
1555
+ zoomended(dispatch);
1438
1556
  }
1439
1557
  }
1440
1558
  function mousewheeled() {
1441
- var event_ = event.of(this, arguments);
1559
+ var dispatch = event.of(this, arguments);
1442
1560
  if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this),
1443
- zoomstarted(event_);
1561
+ translate0 = location(center0 = center || d3.mouse(this)), zoomstarted(dispatch);
1444
1562
  mousewheelTimer = setTimeout(function() {
1445
1563
  mousewheelTimer = null;
1446
- zoomended(event_);
1564
+ zoomended(dispatch);
1447
1565
  }, 50);
1448
1566
  d3_eventPreventDefault();
1449
- var point = center || d3.mouse(this);
1450
- if (!translate0) translate0 = location(point);
1451
1567
  scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k);
1452
- translateTo(point, translate0);
1453
- zoomed(event_);
1454
- }
1455
- function mousewheelreset() {
1456
- translate0 = null;
1568
+ translateTo(center0, translate0);
1569
+ zoomed(dispatch);
1457
1570
  }
1458
1571
  function dblclicked() {
1459
- var event_ = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2;
1460
- zoomstarted(event_);
1461
- scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1));
1462
- translateTo(p, l);
1463
- zoomed(event_);
1464
- zoomended(event_);
1572
+ var p = d3.mouse(this), k = Math.log(view.k) / Math.LN2;
1573
+ zoomTo(this, p, location(p), d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1);
1465
1574
  }
1466
1575
  return d3.rebind(zoom, event, "on");
1467
1576
  };
1468
- var d3_behavior_zoomInfinity = [ 0, Infinity ];
1469
- var d3_behavior_zoomDelta, d3_behavior_zoomWheel = "onwheel" in d3_document ? (d3_behavior_zoomDelta = function() {
1470
- return -d3.event.deltaY * (d3.event.deltaMode ? 120 : 1);
1471
- }, "wheel") : "onmousewheel" in d3_document ? (d3_behavior_zoomDelta = function() {
1472
- return d3.event.wheelDelta;
1473
- }, "mousewheel") : (d3_behavior_zoomDelta = function() {
1474
- return -d3.event.detail;
1475
- }, "MozMousePixelScroll");
1476
- function d3_Color() {}
1477
- d3_Color.prototype.toString = function() {
1577
+ var d3_behavior_zoomInfinity = [ 0, Infinity ], d3_behavior_zoomDelta, d3_behavior_zoomWheel;
1578
+ d3.color = d3_color;
1579
+ function d3_color() {}
1580
+ d3_color.prototype.toString = function() {
1478
1581
  return this.rgb() + "";
1479
1582
  };
1480
- d3.hsl = function(h, s, l) {
1481
- return arguments.length === 1 ? h instanceof d3_Hsl ? d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : d3_hsl(+h, +s, +l);
1482
- };
1583
+ d3.hsl = d3_hsl;
1483
1584
  function d3_hsl(h, s, l) {
1484
- return new d3_Hsl(h, s, l);
1485
- }
1486
- function d3_Hsl(h, s, l) {
1487
- this.h = h;
1488
- this.s = s;
1489
- this.l = l;
1585
+ return this instanceof d3_hsl ? void (this.h = +h, this.s = +s, this.l = +l) : arguments.length < 2 ? h instanceof d3_hsl ? new d3_hsl(h.h, h.s, h.l) : d3_rgb_parse("" + h, d3_rgb_hsl, d3_hsl) : new d3_hsl(h, s, l);
1490
1586
  }
1491
- var d3_hslPrototype = d3_Hsl.prototype = new d3_Color();
1587
+ var d3_hslPrototype = d3_hsl.prototype = new d3_color();
1492
1588
  d3_hslPrototype.brighter = function(k) {
1493
1589
  k = Math.pow(.7, arguments.length ? k : 1);
1494
- return d3_hsl(this.h, this.s, this.l / k);
1590
+ return new d3_hsl(this.h, this.s, this.l / k);
1495
1591
  };
1496
1592
  d3_hslPrototype.darker = function(k) {
1497
1593
  k = Math.pow(.7, arguments.length ? k : 1);
1498
- return d3_hsl(this.h, this.s, k * this.l);
1594
+ return new d3_hsl(this.h, this.s, k * this.l);
1499
1595
  };
1500
1596
  d3_hslPrototype.rgb = function() {
1501
1597
  return d3_hsl_rgb(this.h, this.s, this.l);
@@ -1517,25 +1613,18 @@
1517
1613
  function vv(h) {
1518
1614
  return Math.round(v(h) * 255);
1519
1615
  }
1520
- return d3_rgb(vv(h + 120), vv(h), vv(h - 120));
1616
+ return new d3_rgb(vv(h + 120), vv(h), vv(h - 120));
1521
1617
  }
1522
- d3.hcl = function(h, c, l) {
1523
- return arguments.length === 1 ? h instanceof d3_Hcl ? d3_hcl(h.h, h.c, h.l) : h instanceof d3_Lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : d3_hcl(+h, +c, +l);
1524
- };
1618
+ d3.hcl = d3_hcl;
1525
1619
  function d3_hcl(h, c, l) {
1526
- return new d3_Hcl(h, c, l);
1527
- }
1528
- function d3_Hcl(h, c, l) {
1529
- this.h = h;
1530
- this.c = c;
1531
- this.l = l;
1620
+ return this instanceof d3_hcl ? void (this.h = +h, this.c = +c, this.l = +l) : arguments.length < 2 ? h instanceof d3_hcl ? new d3_hcl(h.h, h.c, h.l) : h instanceof d3_lab ? d3_lab_hcl(h.l, h.a, h.b) : d3_lab_hcl((h = d3_rgb_lab((h = d3.rgb(h)).r, h.g, h.b)).l, h.a, h.b) : new d3_hcl(h, c, l);
1532
1621
  }
1533
- var d3_hclPrototype = d3_Hcl.prototype = new d3_Color();
1622
+ var d3_hclPrototype = d3_hcl.prototype = new d3_color();
1534
1623
  d3_hclPrototype.brighter = function(k) {
1535
- return d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
1624
+ return new d3_hcl(this.h, this.c, Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)));
1536
1625
  };
1537
1626
  d3_hclPrototype.darker = function(k) {
1538
- return d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
1627
+ return new d3_hcl(this.h, this.c, Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)));
1539
1628
  };
1540
1629
  d3_hclPrototype.rgb = function() {
1541
1630
  return d3_hcl_lab(this.h, this.c, this.l).rgb();
@@ -1543,27 +1632,20 @@
1543
1632
  function d3_hcl_lab(h, c, l) {
1544
1633
  if (isNaN(h)) h = 0;
1545
1634
  if (isNaN(c)) c = 0;
1546
- return d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
1635
+ return new d3_lab(l, Math.cos(h *= d3_radians) * c, Math.sin(h) * c);
1547
1636
  }
1548
- d3.lab = function(l, a, b) {
1549
- return arguments.length === 1 ? l instanceof d3_Lab ? d3_lab(l.l, l.a, l.b) : l instanceof d3_Hcl ? d3_hcl_lab(l.l, l.c, l.h) : d3_rgb_lab((l = d3.rgb(l)).r, l.g, l.b) : d3_lab(+l, +a, +b);
1550
- };
1637
+ d3.lab = d3_lab;
1551
1638
  function d3_lab(l, a, b) {
1552
- return new d3_Lab(l, a, b);
1553
- }
1554
- function d3_Lab(l, a, b) {
1555
- this.l = l;
1556
- this.a = a;
1557
- this.b = b;
1639
+ return this instanceof d3_lab ? void (this.l = +l, this.a = +a, this.b = +b) : arguments.length < 2 ? l instanceof d3_lab ? new d3_lab(l.l, l.a, l.b) : l instanceof d3_hcl ? d3_hcl_lab(l.h, l.c, l.l) : d3_rgb_lab((l = d3_rgb(l)).r, l.g, l.b) : new d3_lab(l, a, b);
1558
1640
  }
1559
1641
  var d3_lab_K = 18;
1560
1642
  var d3_lab_X = .95047, d3_lab_Y = 1, d3_lab_Z = 1.08883;
1561
- var d3_labPrototype = d3_Lab.prototype = new d3_Color();
1643
+ var d3_labPrototype = d3_lab.prototype = new d3_color();
1562
1644
  d3_labPrototype.brighter = function(k) {
1563
- return d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
1645
+ return new d3_lab(Math.min(100, this.l + d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
1564
1646
  };
1565
1647
  d3_labPrototype.darker = function(k) {
1566
- return d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
1648
+ return new d3_lab(Math.max(0, this.l - d3_lab_K * (arguments.length ? k : 1)), this.a, this.b);
1567
1649
  };
1568
1650
  d3_labPrototype.rgb = function() {
1569
1651
  return d3_lab_rgb(this.l, this.a, this.b);
@@ -1573,10 +1655,10 @@
1573
1655
  x = d3_lab_xyz(x) * d3_lab_X;
1574
1656
  y = d3_lab_xyz(y) * d3_lab_Y;
1575
1657
  z = d3_lab_xyz(z) * d3_lab_Z;
1576
- return d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
1658
+ return new d3_rgb(d3_xyz_rgb(3.2404542 * x - 1.5371385 * y - .4985314 * z), d3_xyz_rgb(-.969266 * x + 1.8760108 * y + .041556 * z), d3_xyz_rgb(.0556434 * x - .2040259 * y + 1.0572252 * z));
1577
1659
  }
1578
1660
  function d3_lab_hcl(l, a, b) {
1579
- return l > 0 ? d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : d3_hcl(NaN, NaN, l);
1661
+ return l > 0 ? new d3_hcl(Math.atan2(b, a) * d3_degrees, Math.sqrt(a * a + b * b), l) : new d3_hcl(NaN, NaN, l);
1580
1662
  }
1581
1663
  function d3_lab_xyz(x) {
1582
1664
  return x > .206893034 ? x * x * x : (x - 4 / 29) / 7.787037;
@@ -1587,36 +1669,29 @@
1587
1669
  function d3_xyz_rgb(r) {
1588
1670
  return Math.round(255 * (r <= .00304 ? 12.92 * r : 1.055 * Math.pow(r, 1 / 2.4) - .055));
1589
1671
  }
1590
- d3.rgb = function(r, g, b) {
1591
- return arguments.length === 1 ? r instanceof d3_Rgb ? d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : d3_rgb(~~r, ~~g, ~~b);
1592
- };
1672
+ d3.rgb = d3_rgb;
1673
+ function d3_rgb(r, g, b) {
1674
+ return this instanceof d3_rgb ? void (this.r = ~~r, this.g = ~~g, this.b = ~~b) : arguments.length < 2 ? r instanceof d3_rgb ? new d3_rgb(r.r, r.g, r.b) : d3_rgb_parse("" + r, d3_rgb, d3_hsl_rgb) : new d3_rgb(r, g, b);
1675
+ }
1593
1676
  function d3_rgbNumber(value) {
1594
- return d3_rgb(value >> 16, value >> 8 & 255, value & 255);
1677
+ return new d3_rgb(value >> 16, value >> 8 & 255, value & 255);
1595
1678
  }
1596
1679
  function d3_rgbString(value) {
1597
1680
  return d3_rgbNumber(value) + "";
1598
1681
  }
1599
- function d3_rgb(r, g, b) {
1600
- return new d3_Rgb(r, g, b);
1601
- }
1602
- function d3_Rgb(r, g, b) {
1603
- this.r = r;
1604
- this.g = g;
1605
- this.b = b;
1606
- }
1607
- var d3_rgbPrototype = d3_Rgb.prototype = new d3_Color();
1682
+ var d3_rgbPrototype = d3_rgb.prototype = new d3_color();
1608
1683
  d3_rgbPrototype.brighter = function(k) {
1609
1684
  k = Math.pow(.7, arguments.length ? k : 1);
1610
1685
  var r = this.r, g = this.g, b = this.b, i = 30;
1611
- if (!r && !g && !b) return d3_rgb(i, i, i);
1686
+ if (!r && !g && !b) return new d3_rgb(i, i, i);
1612
1687
  if (r && r < i) r = i;
1613
1688
  if (g && g < i) g = i;
1614
1689
  if (b && b < i) b = i;
1615
- return d3_rgb(Math.min(255, ~~(r / k)), Math.min(255, ~~(g / k)), Math.min(255, ~~(b / k)));
1690
+ return new d3_rgb(Math.min(255, r / k), Math.min(255, g / k), Math.min(255, b / k));
1616
1691
  };
1617
1692
  d3_rgbPrototype.darker = function(k) {
1618
1693
  k = Math.pow(.7, arguments.length ? k : 1);
1619
- return d3_rgb(~~(k * this.r), ~~(k * this.g), ~~(k * this.b));
1694
+ return new d3_rgb(k * this.r, k * this.g, k * this.b);
1620
1695
  };
1621
1696
  d3_rgbPrototype.hsl = function() {
1622
1697
  return d3_rgb_hsl(this.r, this.g, this.b);
@@ -1628,8 +1703,8 @@
1628
1703
  return v < 16 ? "0" + Math.max(0, v).toString(16) : Math.min(255, v).toString(16);
1629
1704
  }
1630
1705
  function d3_rgb_parse(format, rgb, hsl) {
1631
- var r = 0, g = 0, b = 0, m1, m2, name;
1632
- m1 = /([a-z]+)\((.*)\)/i.exec(format);
1706
+ var r = 0, g = 0, b = 0, m1, m2, color;
1707
+ m1 = /([a-z]+)\((.*)\)/.exec(format = format.toLowerCase());
1633
1708
  if (m1) {
1634
1709
  m2 = m1[2].split(",");
1635
1710
  switch (m1[1]) {
@@ -1644,23 +1719,22 @@
1644
1719
  }
1645
1720
  }
1646
1721
  }
1647
- if (name = d3_rgb_names.get(format)) return rgb(name.r, name.g, name.b);
1648
- if (format != null && format.charAt(0) === "#") {
1722
+ if (color = d3_rgb_names.get(format)) {
1723
+ return rgb(color.r, color.g, color.b);
1724
+ }
1725
+ if (format != null && format.charAt(0) === "#" && !isNaN(color = parseInt(format.slice(1), 16))) {
1649
1726
  if (format.length === 4) {
1650
- r = format.charAt(1);
1651
- r += r;
1652
- g = format.charAt(2);
1653
- g += g;
1654
- b = format.charAt(3);
1655
- b += b;
1727
+ r = (color & 3840) >> 4;
1728
+ r = r >> 4 | r;
1729
+ g = color & 240;
1730
+ g = g >> 4 | g;
1731
+ b = color & 15;
1732
+ b = b << 4 | b;
1656
1733
  } else if (format.length === 7) {
1657
- r = format.substring(1, 3);
1658
- g = format.substring(3, 5);
1659
- b = format.substring(5, 7);
1734
+ r = (color & 16711680) >> 16;
1735
+ g = (color & 65280) >> 8;
1736
+ b = color & 255;
1660
1737
  }
1661
- r = parseInt(r, 16);
1662
- g = parseInt(g, 16);
1663
- b = parseInt(b, 16);
1664
1738
  }
1665
1739
  return rgb(r, g, b);
1666
1740
  }
@@ -1674,7 +1748,7 @@
1674
1748
  h = NaN;
1675
1749
  s = l > 0 && l < 1 ? 0 : h;
1676
1750
  }
1677
- return d3_hsl(h, s, l);
1751
+ return new d3_hsl(h, s, l);
1678
1752
  }
1679
1753
  function d3_rgb_lab(r, g, b) {
1680
1754
  r = d3_rgb_xyz(r);
@@ -1810,6 +1884,7 @@
1810
1884
  plum: 14524637,
1811
1885
  powderblue: 11591910,
1812
1886
  purple: 8388736,
1887
+ rebeccapurple: 6697881,
1813
1888
  red: 16711680,
1814
1889
  rosybrown: 12357519,
1815
1890
  royalblue: 4286945,
@@ -1848,9 +1923,6 @@
1848
1923
  };
1849
1924
  }
1850
1925
  d3.functor = d3_functor;
1851
- function d3_identity(d) {
1852
- return d;
1853
- }
1854
1926
  d3.xhr = d3_xhrType(d3_identity);
1855
1927
  function d3_xhrType(response) {
1856
1928
  return function(url, mimeType, callback) {
@@ -1861,13 +1933,13 @@
1861
1933
  }
1862
1934
  function d3_xhr(url, mimeType, response, callback) {
1863
1935
  var xhr = {}, dispatch = d3.dispatch("beforesend", "progress", "load", "error"), headers = {}, request = new XMLHttpRequest(), responseType = null;
1864
- if (d3_window.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
1936
+ if (this.XDomainRequest && !("withCredentials" in request) && /^(http(s)?:)?\/\//.test(url)) request = new XDomainRequest();
1865
1937
  "onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
1866
1938
  request.readyState > 3 && respond();
1867
1939
  };
1868
1940
  function respond() {
1869
1941
  var status = request.status, result;
1870
- if (!status && request.responseText || status >= 200 && status < 300 || status === 304) {
1942
+ if (!status && d3_xhrHasResponse(request) || status >= 200 && status < 300 || status === 304) {
1871
1943
  try {
1872
1944
  result = response.call(xhr, request);
1873
1945
  } catch (e) {
@@ -1939,6 +2011,10 @@
1939
2011
  callback(error == null ? request : null);
1940
2012
  } : callback;
1941
2013
  }
2014
+ function d3_xhrHasResponse(request) {
2015
+ var type = request.responseType;
2016
+ return type && type !== "text" ? request.response : request.responseText;
2017
+ }
1942
2018
  d3.dsv = function(delimiter, mimeType) {
1943
2019
  var reFormat = new RegExp('["' + delimiter + "\n]"), delimiterCode = delimiter.charCodeAt(0);
1944
2020
  function dsv(url, row, callback) {
@@ -1991,7 +2067,7 @@
1991
2067
  } else if (c === 10) {
1992
2068
  eol = true;
1993
2069
  }
1994
- return text.substring(j + 1, i).replace(/""/g, '"');
2070
+ return text.slice(j + 1, i).replace(/""/g, '"');
1995
2071
  }
1996
2072
  while (I < N) {
1997
2073
  var c = text.charCodeAt(I++), k = 1;
@@ -1999,9 +2075,9 @@
1999
2075
  eol = true;
2000
2076
  if (text.charCodeAt(I) === 10) ++I, ++k;
2001
2077
  } else if (c !== delimiterCode) continue;
2002
- return text.substring(j, I - k);
2078
+ return text.slice(j, I - k);
2003
2079
  }
2004
- return text.substring(j);
2080
+ return text.slice(j);
2005
2081
  }
2006
2082
  while ((t = token()) !== EOF) {
2007
2083
  var a = [];
@@ -2009,7 +2085,7 @@
2009
2085
  a.push(t);
2010
2086
  t = token();
2011
2087
  }
2012
- if (f && !(a = f(a, n++))) continue;
2088
+ if (f && (a = f(a, n++)) == null) continue;
2013
2089
  rows.push(a);
2014
2090
  }
2015
2091
  return rows;
@@ -2043,17 +2119,19 @@
2043
2119
  };
2044
2120
  d3.csv = d3.dsv(",", "text/csv");
2045
2121
  d3.tsv = d3.dsv(" ", "text/tab-separated-values");
2046
- var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_active, d3_timer_frame = d3_window[d3_vendorSymbol(d3_window, "requestAnimationFrame")] || function(callback) {
2122
+ var d3_timer_queueHead, d3_timer_queueTail, d3_timer_interval, d3_timer_timeout, d3_timer_frame = this[d3_vendorSymbol(this, "requestAnimationFrame")] || function(callback) {
2047
2123
  setTimeout(callback, 17);
2048
2124
  };
2049
- d3.timer = function(callback, delay, then) {
2125
+ d3.timer = function() {
2126
+ d3_timer.apply(this, arguments);
2127
+ };
2128
+ function d3_timer(callback, delay, then) {
2050
2129
  var n = arguments.length;
2051
2130
  if (n < 2) delay = 0;
2052
2131
  if (n < 3) then = Date.now();
2053
2132
  var time = then + delay, timer = {
2054
2133
  c: callback,
2055
2134
  t: time,
2056
- f: false,
2057
2135
  n: null
2058
2136
  };
2059
2137
  if (d3_timer_queueTail) d3_timer_queueTail.n = timer; else d3_timer_queueHead = timer;
@@ -2063,7 +2141,8 @@
2063
2141
  d3_timer_interval = 1;
2064
2142
  d3_timer_frame(d3_timer_step);
2065
2143
  }
2066
- };
2144
+ return timer;
2145
+ }
2067
2146
  function d3_timer_step() {
2068
2147
  var now = d3_timer_mark(), delay = d3_timer_sweep() - now;
2069
2148
  if (delay > 24) {
@@ -2082,22 +2161,21 @@
2082
2161
  d3_timer_sweep();
2083
2162
  };
2084
2163
  function d3_timer_mark() {
2085
- var now = Date.now();
2086
- d3_timer_active = d3_timer_queueHead;
2087
- while (d3_timer_active) {
2088
- if (now >= d3_timer_active.t) d3_timer_active.f = d3_timer_active.c(now - d3_timer_active.t);
2089
- d3_timer_active = d3_timer_active.n;
2164
+ var now = Date.now(), timer = d3_timer_queueHead;
2165
+ while (timer) {
2166
+ if (now >= timer.t && timer.c(now - timer.t)) timer.c = null;
2167
+ timer = timer.n;
2090
2168
  }
2091
2169
  return now;
2092
2170
  }
2093
2171
  function d3_timer_sweep() {
2094
2172
  var t0, t1 = d3_timer_queueHead, time = Infinity;
2095
2173
  while (t1) {
2096
- if (t1.f) {
2097
- t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
2098
- } else {
2174
+ if (t1.c) {
2099
2175
  if (t1.t < time) time = t1.t;
2100
2176
  t1 = (t0 = t1).n;
2177
+ } else {
2178
+ t1 = t0 ? t0.n = t1.n : d3_timer_queueHead = t1.n;
2101
2179
  }
2102
2180
  }
2103
2181
  d3_timer_queueTail = t0;
@@ -2112,11 +2190,11 @@
2112
2190
  var d3_formatPrefixes = [ "y", "z", "a", "f", "p", "n", "µ", "m", "", "k", "M", "G", "T", "P", "E", "Z", "Y" ].map(d3_formatPrefix);
2113
2191
  d3.formatPrefix = function(value, precision) {
2114
2192
  var i = 0;
2115
- if (value) {
2193
+ if (value = +value) {
2116
2194
  if (value < 0) value *= -1;
2117
2195
  if (precision) value = d3.round(value, d3_format_precision(value, precision));
2118
2196
  i = 1 + Math.floor(1e-12 + Math.log(value) / Math.LN10);
2119
- i = Math.max(-24, Math.min(24, Math.floor((i <= 0 ? i + 1 : i - 1) / 3) * 3));
2197
+ i = Math.max(-24, Math.min(24, Math.floor((i - 1) / 3) * 3));
2120
2198
  }
2121
2199
  return d3_formatPrefixes[8 + i / 3];
2122
2200
  };
@@ -2132,21 +2210,22 @@
2132
2210
  };
2133
2211
  }
2134
2212
  function d3_locale_numberFormat(locale) {
2135
- var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping ? function(value) {
2136
- var i = value.length, t = [], j = 0, g = locale_grouping[0];
2213
+ var locale_decimal = locale.decimal, locale_thousands = locale.thousands, locale_grouping = locale.grouping, locale_currency = locale.currency, formatGroup = locale_grouping && locale_thousands ? function(value, width) {
2214
+ var i = value.length, t = [], j = 0, g = locale_grouping[0], length = 0;
2137
2215
  while (i > 0 && g > 0) {
2216
+ if (length + g + 1 > width) g = Math.max(1, width - length);
2138
2217
  t.push(value.substring(i -= g, i + g));
2218
+ if ((length += g + 1) > width) break;
2139
2219
  g = locale_grouping[j = (j + 1) % locale_grouping.length];
2140
2220
  }
2141
2221
  return t.reverse().join(locale_thousands);
2142
2222
  } : d3_identity;
2143
2223
  return function(specifier) {
2144
- var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false;
2224
+ var match = d3_format_re.exec(specifier), fill = match[1] || " ", align = match[2] || ">", sign = match[3] || "-", symbol = match[4] || "", zfill = match[5], width = +match[6], comma = match[7], precision = match[8], type = match[9], scale = 1, prefix = "", suffix = "", integer = false, exponent = true;
2145
2225
  if (precision) precision = +precision.substring(1);
2146
2226
  if (zfill || fill === "0" && align === "=") {
2147
2227
  zfill = fill = "0";
2148
2228
  align = "=";
2149
- if (comma) width -= Math.floor((width - 1) / 4);
2150
2229
  }
2151
2230
  switch (type) {
2152
2231
  case "n":
@@ -2173,6 +2252,8 @@
2173
2252
  if (symbol === "#") prefix = "0" + type.toLowerCase();
2174
2253
 
2175
2254
  case "c":
2255
+ exponent = false;
2256
+
2176
2257
  case "d":
2177
2258
  integer = true;
2178
2259
  precision = 0;
@@ -2191,23 +2272,31 @@
2191
2272
  type = d3_format_types.get(type) || d3_format_typeDefault;
2192
2273
  var zcomma = zfill && comma;
2193
2274
  return function(value) {
2275
+ var fullSuffix = suffix;
2194
2276
  if (integer && value % 1) return "";
2195
- var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign;
2277
+ var negative = value < 0 || value === 0 && 1 / value < 0 ? (value = -value, "-") : sign === "-" ? "" : sign;
2196
2278
  if (scale < 0) {
2197
2279
  var unit = d3.formatPrefix(value, precision);
2198
2280
  value = unit.scale(value);
2199
- suffix = unit.symbol;
2281
+ fullSuffix = unit.symbol + suffix;
2200
2282
  } else {
2201
2283
  value *= scale;
2202
2284
  }
2203
2285
  value = type(value, precision);
2204
- var i = value.lastIndexOf("."), before = i < 0 ? value : value.substring(0, i), after = i < 0 ? "" : locale_decimal + value.substring(i + 1);
2205
- if (!zfill && comma) before = formatGroup(before);
2286
+ var i = value.lastIndexOf("."), before, after;
2287
+ if (i < 0) {
2288
+ var j = exponent ? value.lastIndexOf("e") : -1;
2289
+ if (j < 0) before = value, after = ""; else before = value.substring(0, j), after = value.substring(j);
2290
+ } else {
2291
+ before = value.substring(0, i);
2292
+ after = locale_decimal + value.substring(i + 1);
2293
+ }
2294
+ if (!zfill && comma) before = formatGroup(before, Infinity);
2206
2295
  var length = prefix.length + before.length + after.length + (zcomma ? 0 : negative.length), padding = length < width ? new Array(length = width - length + 1).join(fill) : "";
2207
- if (zcomma) before = formatGroup(padding + before);
2296
+ if (zcomma) before = formatGroup(padding + before, padding.length ? width - after.length : Infinity);
2208
2297
  negative += prefix;
2209
2298
  value = before + after;
2210
- return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + suffix;
2299
+ return (align === "<" ? negative + value + padding : align === ">" ? padding + negative + value : align === "^" ? padding.substring(0, length >>= 1) + negative + value + padding.substring(length) : negative + (zcomma ? value : padding + value)) + fullSuffix;
2211
2300
  };
2212
2301
  };
2213
2302
  }
@@ -2427,14 +2516,14 @@
2427
2516
  var string = [], i = -1, j = 0, c, p, f;
2428
2517
  while (++i < n) {
2429
2518
  if (template.charCodeAt(i) === 37) {
2430
- string.push(template.substring(j, i));
2519
+ string.push(template.slice(j, i));
2431
2520
  if ((p = d3_time_formatPads[c = template.charAt(++i)]) != null) c = template.charAt(++i);
2432
2521
  if (f = d3_time_formats[c]) c = f(date, p == null ? c === "e" ? " " : "0" : p);
2433
2522
  string.push(c);
2434
2523
  j = i + 1;
2435
2524
  }
2436
2525
  }
2437
- string.push(template.substring(j, i));
2526
+ string.push(template.slice(j, i));
2438
2527
  return string.join("");
2439
2528
  }
2440
2529
  format.parse = function(string) {
@@ -2451,11 +2540,12 @@
2451
2540
  if (i != string.length) return null;
2452
2541
  if ("p" in d) d.H = d.H % 12 + d.p * 12;
2453
2542
  var localZ = d.Z != null && d3_date !== d3_date_utc, date = new (localZ ? d3_date_utc : d3_date)();
2454
- if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("w" in d && ("W" in d || "U" in d)) {
2543
+ if ("j" in d) date.setFullYear(d.y, 0, d.j); else if ("W" in d || "U" in d) {
2544
+ if (!("w" in d)) d.w = "W" in d ? 1 : 0;
2455
2545
  date.setFullYear(d.y, 0, 1);
2456
2546
  date.setFullYear(d.y, 0, "W" in d ? (d.w + 6) % 7 + d.W * 7 - (date.getDay() + 5) % 7 : d.w + d.U * 7 - (date.getDay() + 6) % 7);
2457
2547
  } else date.setFullYear(d.y, d.m, d.d);
2458
- date.setHours(d.H + Math.floor(d.Z / 100), d.M + d.Z % 100, d.S, d.L);
2548
+ date.setHours(d.H + (d.Z / 100 | 0), d.M + d.Z % 100, d.S, d.L);
2459
2549
  return localZ ? date._ : date;
2460
2550
  };
2461
2551
  format.toString = function() {
@@ -2601,22 +2691,22 @@
2601
2691
  };
2602
2692
  function d3_time_parseWeekdayAbbrev(date, string, i) {
2603
2693
  d3_time_dayAbbrevRe.lastIndex = 0;
2604
- var n = d3_time_dayAbbrevRe.exec(string.substring(i));
2694
+ var n = d3_time_dayAbbrevRe.exec(string.slice(i));
2605
2695
  return n ? (date.w = d3_time_dayAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2606
2696
  }
2607
2697
  function d3_time_parseWeekday(date, string, i) {
2608
2698
  d3_time_dayRe.lastIndex = 0;
2609
- var n = d3_time_dayRe.exec(string.substring(i));
2699
+ var n = d3_time_dayRe.exec(string.slice(i));
2610
2700
  return n ? (date.w = d3_time_dayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2611
2701
  }
2612
2702
  function d3_time_parseMonthAbbrev(date, string, i) {
2613
2703
  d3_time_monthAbbrevRe.lastIndex = 0;
2614
- var n = d3_time_monthAbbrevRe.exec(string.substring(i));
2704
+ var n = d3_time_monthAbbrevRe.exec(string.slice(i));
2615
2705
  return n ? (date.m = d3_time_monthAbbrevLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2616
2706
  }
2617
2707
  function d3_time_parseMonth(date, string, i) {
2618
2708
  d3_time_monthRe.lastIndex = 0;
2619
- var n = d3_time_monthRe.exec(string.substring(i));
2709
+ var n = d3_time_monthRe.exec(string.slice(i));
2620
2710
  return n ? (date.m = d3_time_monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
2621
2711
  }
2622
2712
  function d3_time_parseLocaleFull(date, string, i) {
@@ -2629,7 +2719,7 @@
2629
2719
  return d3_time_parse(date, d3_time_formats.X.toString(), string, i);
2630
2720
  }
2631
2721
  function d3_time_parseAmPm(date, string, i) {
2632
- var n = d3_time_periodLookup.get(string.substring(i, i += 2).toLowerCase());
2722
+ var n = d3_time_periodLookup.get(string.slice(i, i += 2).toLowerCase());
2633
2723
  return n == null ? -1 : (date.p = n, i);
2634
2724
  }
2635
2725
  return d3_time_format;
@@ -2653,31 +2743,31 @@
2653
2743
  }
2654
2744
  function d3_time_parseWeekdayNumber(date, string, i) {
2655
2745
  d3_time_numberRe.lastIndex = 0;
2656
- var n = d3_time_numberRe.exec(string.substring(i, i + 1));
2746
+ var n = d3_time_numberRe.exec(string.slice(i, i + 1));
2657
2747
  return n ? (date.w = +n[0], i + n[0].length) : -1;
2658
2748
  }
2659
2749
  function d3_time_parseWeekNumberSunday(date, string, i) {
2660
2750
  d3_time_numberRe.lastIndex = 0;
2661
- var n = d3_time_numberRe.exec(string.substring(i));
2751
+ var n = d3_time_numberRe.exec(string.slice(i));
2662
2752
  return n ? (date.U = +n[0], i + n[0].length) : -1;
2663
2753
  }
2664
2754
  function d3_time_parseWeekNumberMonday(date, string, i) {
2665
2755
  d3_time_numberRe.lastIndex = 0;
2666
- var n = d3_time_numberRe.exec(string.substring(i));
2756
+ var n = d3_time_numberRe.exec(string.slice(i));
2667
2757
  return n ? (date.W = +n[0], i + n[0].length) : -1;
2668
2758
  }
2669
2759
  function d3_time_parseFullYear(date, string, i) {
2670
2760
  d3_time_numberRe.lastIndex = 0;
2671
- var n = d3_time_numberRe.exec(string.substring(i, i + 4));
2761
+ var n = d3_time_numberRe.exec(string.slice(i, i + 4));
2672
2762
  return n ? (date.y = +n[0], i + n[0].length) : -1;
2673
2763
  }
2674
2764
  function d3_time_parseYear(date, string, i) {
2675
2765
  d3_time_numberRe.lastIndex = 0;
2676
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2766
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2677
2767
  return n ? (date.y = d3_time_expandYear(+n[0]), i + n[0].length) : -1;
2678
2768
  }
2679
2769
  function d3_time_parseZone(date, string, i) {
2680
- return /^[+-]\d{4}$/.test(string = string.substring(i, i + 5)) ? (date.Z = +string,
2770
+ return /^[+-]\d{4}$/.test(string = string.slice(i, i + 5)) ? (date.Z = -string,
2681
2771
  i + 5) : -1;
2682
2772
  }
2683
2773
  function d3_time_expandYear(d) {
@@ -2685,46 +2775,46 @@
2685
2775
  }
2686
2776
  function d3_time_parseMonthNumber(date, string, i) {
2687
2777
  d3_time_numberRe.lastIndex = 0;
2688
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2778
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2689
2779
  return n ? (date.m = n[0] - 1, i + n[0].length) : -1;
2690
2780
  }
2691
2781
  function d3_time_parseDay(date, string, i) {
2692
2782
  d3_time_numberRe.lastIndex = 0;
2693
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2783
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2694
2784
  return n ? (date.d = +n[0], i + n[0].length) : -1;
2695
2785
  }
2696
2786
  function d3_time_parseDayOfYear(date, string, i) {
2697
2787
  d3_time_numberRe.lastIndex = 0;
2698
- var n = d3_time_numberRe.exec(string.substring(i, i + 3));
2788
+ var n = d3_time_numberRe.exec(string.slice(i, i + 3));
2699
2789
  return n ? (date.j = +n[0], i + n[0].length) : -1;
2700
2790
  }
2701
2791
  function d3_time_parseHour24(date, string, i) {
2702
2792
  d3_time_numberRe.lastIndex = 0;
2703
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2793
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2704
2794
  return n ? (date.H = +n[0], i + n[0].length) : -1;
2705
2795
  }
2706
2796
  function d3_time_parseMinutes(date, string, i) {
2707
2797
  d3_time_numberRe.lastIndex = 0;
2708
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2798
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2709
2799
  return n ? (date.M = +n[0], i + n[0].length) : -1;
2710
2800
  }
2711
2801
  function d3_time_parseSeconds(date, string, i) {
2712
2802
  d3_time_numberRe.lastIndex = 0;
2713
- var n = d3_time_numberRe.exec(string.substring(i, i + 2));
2803
+ var n = d3_time_numberRe.exec(string.slice(i, i + 2));
2714
2804
  return n ? (date.S = +n[0], i + n[0].length) : -1;
2715
2805
  }
2716
2806
  function d3_time_parseMilliseconds(date, string, i) {
2717
2807
  d3_time_numberRe.lastIndex = 0;
2718
- var n = d3_time_numberRe.exec(string.substring(i, i + 3));
2808
+ var n = d3_time_numberRe.exec(string.slice(i, i + 3));
2719
2809
  return n ? (date.L = +n[0], i + n[0].length) : -1;
2720
2810
  }
2721
2811
  function d3_time_zone(d) {
2722
- var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = ~~(abs(z) / 60), zm = abs(z) % 60;
2812
+ var z = d.getTimezoneOffset(), zs = z > 0 ? "-" : "+", zh = abs(z) / 60 | 0, zm = abs(z) % 60;
2723
2813
  return zs + d3_time_formatPad(zh, "0", 2) + d3_time_formatPad(zm, "0", 2);
2724
2814
  }
2725
2815
  function d3_time_parseLiteralPercent(date, string, i) {
2726
2816
  d3_time_percentRe.lastIndex = 0;
2727
- var n = d3_time_percentRe.exec(string.substring(i, i + 1));
2817
+ var n = d3_time_percentRe.exec(string.slice(i, i + 1));
2728
2818
  return n ? i + n[0].length : -1;
2729
2819
  }
2730
2820
  function d3_time_formatMulti(formats) {
@@ -2876,7 +2966,7 @@
2876
2966
  function nextPoint(λ, φ) {
2877
2967
  λ *= d3_radians;
2878
2968
  φ = φ * d3_radians / 2 + π / 4;
2879
- var dλ = λ - λ0, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(dλ), v = k * Math.sin(dλ);
2969
+ var dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, cosφ = Math.cos(φ), sinφ = Math.sin(φ), k = sinφ0 * sinφ, u = cosφ0 * cosφ + k * Math.cos(adλ), v = k * sdλ * Math.sin(adλ);
2880
2970
  d3_geo_areaRingSum.add(Math.atan2(v, u));
2881
2971
  λ0 = λ, cosφ0 = cosφ, sinφ0 = sinφ;
2882
2972
  }
@@ -3132,6 +3222,15 @@
3132
3222
  d3_geo_centroidPointXYZ(x0, y0, z0);
3133
3223
  }
3134
3224
  }
3225
+ function d3_geo_compose(a, b) {
3226
+ function compose(x, y) {
3227
+ return x = a(x, y), b(x[0], x[1]);
3228
+ }
3229
+ if (a.invert && b.invert) compose.invert = function(x, y) {
3230
+ return x = b.invert(x, y), x && a.invert(x[0], x[1]);
3231
+ };
3232
+ return compose;
3233
+ }
3135
3234
  function d3_true() {
3136
3235
  return true;
3137
3236
  }
@@ -3226,7 +3325,6 @@
3226
3325
  clip.lineEnd = ringEnd;
3227
3326
  segments = [];
3228
3327
  polygon = [];
3229
- listener.polygonStart();
3230
3328
  },
3231
3329
  polygonEnd: function() {
3232
3330
  clip.point = point;
@@ -3235,13 +3333,15 @@
3235
3333
  segments = d3.merge(segments);
3236
3334
  var clipStartInside = d3_geo_pointInPolygon(rotatedClipStart, polygon);
3237
3335
  if (segments.length) {
3336
+ if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
3238
3337
  d3_geo_clipPolygon(segments, d3_geo_clipSort, clipStartInside, interpolate, listener);
3239
3338
  } else if (clipStartInside) {
3339
+ if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
3240
3340
  listener.lineStart();
3241
3341
  interpolate(null, null, 1, listener);
3242
3342
  listener.lineEnd();
3243
3343
  }
3244
- listener.polygonEnd();
3344
+ if (polygonStarted) listener.polygonEnd(), polygonStarted = false;
3245
3345
  segments = polygon = null;
3246
3346
  },
3247
3347
  sphere: function() {
@@ -3269,7 +3369,7 @@
3269
3369
  line.lineEnd();
3270
3370
  }
3271
3371
  var segments;
3272
- var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygon, ring;
3372
+ var buffer = d3_geo_clipBufferListener(), ringListener = clipLine(buffer), polygonStarted = false, polygon, ring;
3273
3373
  function pointRing(λ, φ) {
3274
3374
  ring.push([ λ, φ ]);
3275
3375
  var point = rotate(λ, φ);
@@ -3290,9 +3390,12 @@
3290
3390
  if (clean & 1) {
3291
3391
  segment = ringSegments[0];
3292
3392
  var n = segment.length - 1, i = -1, point;
3293
- listener.lineStart();
3294
- while (++i < n) listener.point((point = segment[i])[0], point[1]);
3295
- listener.lineEnd();
3393
+ if (n > 0) {
3394
+ if (!polygonStarted) listener.polygonStart(), polygonStarted = true;
3395
+ listener.lineStart();
3396
+ while (++i < n) listener.point((point = segment[i])[0], point[1]);
3397
+ listener.lineEnd();
3398
+ }
3296
3399
  return;
3297
3400
  }
3298
3401
  if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
@@ -3328,35 +3431,6 @@
3328
3431
  function d3_geo_clipSort(a, b) {
3329
3432
  return ((a = a.x)[0] < 0 ? a[1] - halfπ - ε : halfπ - a[1]) - ((b = b.x)[0] < 0 ? b[1] - halfπ - ε : halfπ - b[1]);
3330
3433
  }
3331
- function d3_geo_pointInPolygon(point, polygon) {
3332
- var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
3333
- d3_geo_areaRingSum.reset();
3334
- for (var i = 0, n = polygon.length; i < n; ++i) {
3335
- var ring = polygon[i], m = ring.length;
3336
- if (!m) continue;
3337
- var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
3338
- while (true) {
3339
- if (j === m) j = 0;
3340
- point = ring[j];
3341
- var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, antimeridian = abs(dλ) > π, k = sinφ0 * sinφ;
3342
- d3_geo_areaRingSum.add(Math.atan2(k * Math.sin(dλ), cosφ0 * cosφ + k * Math.cos(dλ)));
3343
- polarAngle += antimeridian ? dλ + (dλ >= 0 ? τ : -τ) : dλ;
3344
- if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
3345
- var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
3346
- d3_geo_cartesianNormalize(arc);
3347
- var intersection = d3_geo_cartesianCross(meridianNormal, arc);
3348
- d3_geo_cartesianNormalize(intersection);
3349
- var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
3350
- if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
3351
- winding += antimeridian ^ dλ >= 0 ? 1 : -1;
3352
- }
3353
- }
3354
- if (!j++) break;
3355
- λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
3356
- }
3357
- }
3358
- return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < 0) ^ winding & 1;
3359
- }
3360
3434
  var d3_geo_clipAntimeridian = d3_geo_clip(d3_true, d3_geo_clipAntimeridianLine, d3_geo_clipAntimeridianInterpolate, [ -π, -π / 2 ]);
3361
3435
  function d3_geo_clipAntimeridianLine(listener) {
3362
3436
  var λ0 = NaN, φ0 = NaN, sλ0 = NaN, clean;
@@ -3424,6 +3498,35 @@
3424
3498
  listener.point(to[0], to[1]);
3425
3499
  }
3426
3500
  }
3501
+ function d3_geo_pointInPolygon(point, polygon) {
3502
+ var meridian = point[0], parallel = point[1], meridianNormal = [ Math.sin(meridian), -Math.cos(meridian), 0 ], polarAngle = 0, winding = 0;
3503
+ d3_geo_areaRingSum.reset();
3504
+ for (var i = 0, n = polygon.length; i < n; ++i) {
3505
+ var ring = polygon[i], m = ring.length;
3506
+ if (!m) continue;
3507
+ var point0 = ring[0], λ0 = point0[0], φ0 = point0[1] / 2 + π / 4, sinφ0 = Math.sin(φ0), cosφ0 = Math.cos(φ0), j = 1;
3508
+ while (true) {
3509
+ if (j === m) j = 0;
3510
+ point = ring[j];
3511
+ var λ = point[0], φ = point[1] / 2 + π / 4, sinφ = Math.sin(φ), cosφ = Math.cos(φ), dλ = λ - λ0, sdλ = dλ >= 0 ? 1 : -1, adλ = sdλ * dλ, antimeridian = adλ > π, k = sinφ0 * sinφ;
3512
+ d3_geo_areaRingSum.add(Math.atan2(k * sdλ * Math.sin(adλ), cosφ0 * cosφ + k * Math.cos(adλ)));
3513
+ polarAngle += antimeridian ? dλ + sdλ * τ : dλ;
3514
+ if (antimeridian ^ λ0 >= meridian ^ λ >= meridian) {
3515
+ var arc = d3_geo_cartesianCross(d3_geo_cartesian(point0), d3_geo_cartesian(point));
3516
+ d3_geo_cartesianNormalize(arc);
3517
+ var intersection = d3_geo_cartesianCross(meridianNormal, arc);
3518
+ d3_geo_cartesianNormalize(intersection);
3519
+ var φarc = (antimeridian ^ dλ >= 0 ? -1 : 1) * d3_asin(intersection[2]);
3520
+ if (parallel > φarc || parallel === φarc && (arc[0] || arc[1])) {
3521
+ winding += antimeridian ^ dλ >= 0 ? 1 : -1;
3522
+ }
3523
+ }
3524
+ if (!j++) break;
3525
+ λ0 = λ, sinφ0 = sinφ, cosφ0 = cosφ, point0 = point;
3526
+ }
3527
+ }
3528
+ return (polarAngle < -ε || polarAngle < ε && d3_geo_areaRingSum < -ε) ^ winding & 1;
3529
+ }
3427
3530
  function d3_geo_clipCircle(radius) {
3428
3531
  var cr = Math.cos(radius), smallRadius = cr > 0, notHemisphere = abs(cr) > ε, interpolate = d3_geo_circleInterpolate(radius, 6 * d3_radians);
3429
3532
  return d3_geo_clip(visible, clipLine, interpolate, smallRadius ? [ 0, -radius ] : [ -π, radius - π ]);
@@ -3726,15 +3829,6 @@
3726
3829
  return ca !== cb ? ca - cb : ca === 0 ? b[1] - a[1] : ca === 1 ? a[0] - b[0] : ca === 2 ? a[1] - b[1] : b[0] - a[0];
3727
3830
  }
3728
3831
  }
3729
- function d3_geo_compose(a, b) {
3730
- function compose(x, y) {
3731
- return x = a(x, y), b(x[0], x[1]);
3732
- }
3733
- if (a.invert && b.invert) compose.invert = function(x, y) {
3734
- return x = b.invert(x, y), x && a.invert(x[0], x[1]);
3735
- };
3736
- return compose;
3737
- }
3738
3832
  function d3_geo_conic(projectAt) {
3739
3833
  var φ0 = 0, φ1 = π / 3, m = d3_geo_projectionMutator(projectAt), p = m(φ0, φ1);
3740
3834
  p.parallels = function(_) {
@@ -4006,7 +4100,7 @@
4006
4100
  result: d3_noop
4007
4101
  };
4008
4102
  function point(x, y) {
4009
- context.moveTo(x, y);
4103
+ context.moveTo(x + pointRadius, y);
4010
4104
  context.arc(x, y, pointRadius, 0, τ);
4011
4105
  }
4012
4106
  function pointLineStart(x, y) {
@@ -4597,7 +4691,12 @@
4597
4691
  }, n = φ0 === φ1 ? Math.sin(φ0) : Math.log(cosφ0 / Math.cos(φ1)) / Math.log(t(φ1) / t(φ0)), F = cosφ0 * Math.pow(t(φ0), n) / n;
4598
4692
  if (!n) return d3_geo_mercator;
4599
4693
  function forward(λ, φ) {
4600
- var ρ = abs(abs(φ) - halfπ) < ε ? 0 : F / Math.pow(t(φ), n);
4694
+ if (F > 0) {
4695
+ if (φ < -halfπ + ε) φ = -halfπ + ε;
4696
+ } else {
4697
+ if (φ > halfπ - ε) φ = halfπ - ε;
4698
+ }
4699
+ var ρ = F / Math.pow(t(φ), n);
4601
4700
  return [ ρ * Math.sin(n * λ), F - ρ * Math.cos(n * λ) ];
4602
4701
  }
4603
4702
  forward.invert = function(x, y) {
@@ -4687,13 +4786,13 @@
4687
4786
  (d3.geo.transverseMercator = function() {
4688
4787
  var projection = d3_geo_mercatorProjection(d3_geo_transverseMercator), center = projection.center, rotate = projection.rotate;
4689
4788
  projection.center = function(_) {
4690
- return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ -_[1], _[0] ]);
4789
+ return _ ? center([ -_[1], _[0] ]) : (_ = center(), [ _[1], -_[0] ]);
4691
4790
  };
4692
4791
  projection.rotate = function(_) {
4693
4792
  return _ ? rotate([ _[0], _[1], _.length > 2 ? _[2] + 90 : 90 ]) : (_ = rotate(),
4694
4793
  [ _[0], _[1], _[2] - 90 ]);
4695
4794
  };
4696
- return projection.rotate([ 0, 0 ]);
4795
+ return rotate([ 0, 0, 90 ]);
4697
4796
  }).raw = d3_geo_transverseMercator;
4698
4797
  d3.geom = {};
4699
4798
  function d3_geom_pointX(d) {
@@ -5509,11 +5608,11 @@
5509
5608
  }
5510
5609
  }
5511
5610
  function insertChild(n, d, x, y, x1, y1, x2, y2) {
5512
- var sx = (x1 + x2) * .5, sy = (y1 + y2) * .5, right = x >= sx, bottom = y >= sy, i = (bottom << 1) + right;
5611
+ var xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym, i = below << 1 | right;
5513
5612
  n.leaf = false;
5514
5613
  n = n.nodes[i] || (n.nodes[i] = d3_geom_quadtreeNode());
5515
- if (right) x1 = sx; else x2 = sx;
5516
- if (bottom) y1 = sy; else y2 = sy;
5614
+ if (right) x1 = xm; else x2 = xm;
5615
+ if (below) y1 = ym; else y2 = ym;
5517
5616
  insert(n, d, x, y, x1, y1, x2, y2);
5518
5617
  }
5519
5618
  var root = d3_geom_quadtreeNode();
@@ -5523,6 +5622,9 @@
5523
5622
  root.visit = function(f) {
5524
5623
  d3_geom_quadtreeVisit(f, root, x1_, y1_, x2_, y2_);
5525
5624
  };
5625
+ root.find = function(point) {
5626
+ return d3_geom_quadtreeFind(root, point[0], point[1], x1_, y1_, x2_, y2_);
5627
+ };
5526
5628
  i = -1;
5527
5629
  if (x1 == null) {
5528
5630
  while (++i < n) {
@@ -5576,6 +5678,42 @@
5576
5678
  if (children[3]) d3_geom_quadtreeVisit(f, children[3], sx, sy, x2, y2);
5577
5679
  }
5578
5680
  }
5681
+ function d3_geom_quadtreeFind(root, x, y, x0, y0, x3, y3) {
5682
+ var minDistance2 = Infinity, closestPoint;
5683
+ (function find(node, x1, y1, x2, y2) {
5684
+ if (x1 > x3 || y1 > y3 || x2 < x0 || y2 < y0) return;
5685
+ if (point = node.point) {
5686
+ var point, dx = x - node.x, dy = y - node.y, distance2 = dx * dx + dy * dy;
5687
+ if (distance2 < minDistance2) {
5688
+ var distance = Math.sqrt(minDistance2 = distance2);
5689
+ x0 = x - distance, y0 = y - distance;
5690
+ x3 = x + distance, y3 = y + distance;
5691
+ closestPoint = point;
5692
+ }
5693
+ }
5694
+ var children = node.nodes, xm = (x1 + x2) * .5, ym = (y1 + y2) * .5, right = x >= xm, below = y >= ym;
5695
+ for (var i = below << 1 | right, j = i + 4; i < j; ++i) {
5696
+ if (node = children[i & 3]) switch (i & 3) {
5697
+ case 0:
5698
+ find(node, x1, y1, xm, ym);
5699
+ break;
5700
+
5701
+ case 1:
5702
+ find(node, xm, y1, x2, ym);
5703
+ break;
5704
+
5705
+ case 2:
5706
+ find(node, x1, ym, xm, y2);
5707
+ break;
5708
+
5709
+ case 3:
5710
+ find(node, xm, ym, x2, y2);
5711
+ break;
5712
+ }
5713
+ }
5714
+ })(root, x0, y0, x3, y3);
5715
+ return closestPoint;
5716
+ }
5579
5717
  d3.interpolateRgb = d3_interpolateRgb;
5580
5718
  function d3_interpolateRgb(a, b) {
5581
5719
  a = d3.rgb(a);
@@ -5607,78 +5745,45 @@
5607
5745
  }
5608
5746
  d3.interpolateNumber = d3_interpolateNumber;
5609
5747
  function d3_interpolateNumber(a, b) {
5610
- b -= a = +a;
5611
- return function(t) {
5612
- return a + b * t;
5613
- };
5614
- }
5615
- d3.interpolateString = d3_interpolateString;
5616
- function d3_interpolateString(a, b) {
5617
- var m, i, j, s0 = 0, s1 = 0, s = [], q = [], n, o;
5618
- a = a + "", b = b + "";
5619
- d3_interpolate_number.lastIndex = 0;
5620
- for (i = 0; m = d3_interpolate_number.exec(b); ++i) {
5621
- if (m.index) s.push(b.substring(s0, s1 = m.index));
5622
- q.push({
5623
- i: s.length,
5624
- x: m[0]
5625
- });
5626
- s.push(null);
5627
- s0 = d3_interpolate_number.lastIndex;
5628
- }
5629
- if (s0 < b.length) s.push(b.substring(s0));
5630
- for (i = 0, n = q.length; (m = d3_interpolate_number.exec(a)) && i < n; ++i) {
5631
- o = q[i];
5632
- if (o.x == m[0]) {
5633
- if (o.i) {
5634
- if (s[o.i + 1] == null) {
5635
- s[o.i - 1] += o.x;
5636
- s.splice(o.i, 1);
5637
- for (j = i + 1; j < n; ++j) q[j].i--;
5638
- } else {
5639
- s[o.i - 1] += o.x + s[o.i + 1];
5640
- s.splice(o.i, 2);
5641
- for (j = i + 1; j < n; ++j) q[j].i -= 2;
5642
- }
5643
- } else {
5644
- if (s[o.i + 1] == null) {
5645
- s[o.i] = o.x;
5646
- } else {
5647
- s[o.i] = o.x + s[o.i + 1];
5648
- s.splice(o.i + 1, 1);
5649
- for (j = i + 1; j < n; ++j) q[j].i--;
5650
- }
5651
- }
5652
- q.splice(i, 1);
5653
- n--;
5654
- i--;
5655
- } else {
5656
- o.x = d3_interpolateNumber(parseFloat(m[0]), parseFloat(o.x));
5748
+ a = +a, b = +b;
5749
+ return function(t) {
5750
+ return a * (1 - t) + b * t;
5751
+ };
5752
+ }
5753
+ d3.interpolateString = d3_interpolateString;
5754
+ function d3_interpolateString(a, b) {
5755
+ var bi = d3_interpolate_numberA.lastIndex = d3_interpolate_numberB.lastIndex = 0, am, bm, bs, i = -1, s = [], q = [];
5756
+ a = a + "", b = b + "";
5757
+ while ((am = d3_interpolate_numberA.exec(a)) && (bm = d3_interpolate_numberB.exec(b))) {
5758
+ if ((bs = bm.index) > bi) {
5759
+ bs = b.slice(bi, bs);
5760
+ if (s[i]) s[i] += bs; else s[++i] = bs;
5657
5761
  }
5658
- }
5659
- while (i < n) {
5660
- o = q.pop();
5661
- if (s[o.i + 1] == null) {
5662
- s[o.i] = o.x;
5762
+ if ((am = am[0]) === (bm = bm[0])) {
5763
+ if (s[i]) s[i] += bm; else s[++i] = bm;
5663
5764
  } else {
5664
- s[o.i] = o.x + s[o.i + 1];
5665
- s.splice(o.i + 1, 1);
5765
+ s[++i] = null;
5766
+ q.push({
5767
+ i: i,
5768
+ x: d3_interpolateNumber(am, bm)
5769
+ });
5666
5770
  }
5667
- n--;
5771
+ bi = d3_interpolate_numberB.lastIndex;
5668
5772
  }
5669
- if (s.length === 1) {
5670
- return s[0] == null ? (o = q[0].x, function(t) {
5671
- return o(t) + "";
5672
- }) : function() {
5673
- return b;
5674
- };
5773
+ if (bi < b.length) {
5774
+ bs = b.slice(bi);
5775
+ if (s[i]) s[i] += bs; else s[++i] = bs;
5675
5776
  }
5676
- return function(t) {
5677
- for (i = 0; i < n; ++i) s[(o = q[i]).i] = o.x(t);
5777
+ return s.length < 2 ? q[0] ? (b = q[0].x, function(t) {
5778
+ return b(t) + "";
5779
+ }) : function() {
5780
+ return b;
5781
+ } : (b = q.length, function(t) {
5782
+ for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
5678
5783
  return s.join("");
5679
- };
5784
+ });
5680
5785
  }
5681
- var d3_interpolate_number = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
5786
+ var d3_interpolate_numberA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, d3_interpolate_numberB = new RegExp(d3_interpolate_numberA.source, "g");
5682
5787
  d3.interpolate = d3_interpolate;
5683
5788
  function d3_interpolate(a, b) {
5684
5789
  var i = d3.interpolators.length, f;
@@ -5687,7 +5792,7 @@
5687
5792
  }
5688
5793
  d3.interpolators = [ function(a, b) {
5689
5794
  var t = typeof b;
5690
- return (t === "string" ? d3_rgb_names.has(b) || /^(#|rgb\(|hsl\()/.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_Color ? d3_interpolateRgb : t === "object" ? Array.isArray(b) ? d3_interpolateArray : d3_interpolateObject : d3_interpolateNumber)(a, b);
5795
+ return (t === "string" ? d3_rgb_names.has(b.toLowerCase()) || /^(#|rgb\(|hsl\()/i.test(b) ? d3_interpolateRgb : d3_interpolateString : b instanceof d3_color ? d3_interpolateRgb : Array.isArray(b) ? d3_interpolateArray : t === "object" && isNaN(b) ? d3_interpolateObject : d3_interpolateNumber)(a, b);
5691
5796
  } ];
5692
5797
  d3.interpolateArray = d3_interpolateArray;
5693
5798
  function d3_interpolateArray(a, b) {
@@ -5736,7 +5841,7 @@
5736
5841
  }
5737
5842
  });
5738
5843
  d3.ease = function(name) {
5739
- var i = name.indexOf("-"), t = i >= 0 ? name.substring(0, i) : name, m = i >= 0 ? name.substring(i + 1) : "in";
5844
+ var i = name.indexOf("-"), t = i >= 0 ? name.slice(0, i) : name, m = i >= 0 ? name.slice(i + 1) : "in";
5740
5845
  t = d3_ease.get(t) || d3_ease_default;
5741
5846
  m = d3_ease_mode.get(m) || d3_identity;
5742
5847
  return d3_ease_clamp(m(t.apply(null, d3_arraySlice.call(arguments, 1))));
@@ -5888,68 +5993,82 @@
5888
5993
  f: 0
5889
5994
  };
5890
5995
  d3.interpolateTransform = d3_interpolateTransform;
5891
- function d3_interpolateTransform(a, b) {
5892
- var s = [], q = [], n, A = d3.transform(a), B = d3.transform(b), ta = A.translate, tb = B.translate, ra = A.rotate, rb = B.rotate, wa = A.skew, wb = B.skew, ka = A.scale, kb = B.scale;
5893
- if (ta[0] != tb[0] || ta[1] != tb[1]) {
5894
- s.push("translate(", null, ",", null, ")");
5996
+ function d3_interpolateTransformPop(s) {
5997
+ return s.length ? s.pop() + "," : "";
5998
+ }
5999
+ function d3_interpolateTranslate(ta, tb, s, q) {
6000
+ if (ta[0] !== tb[0] || ta[1] !== tb[1]) {
6001
+ var i = s.push("translate(", null, ",", null, ")");
5895
6002
  q.push({
5896
- i: 1,
6003
+ i: i - 4,
5897
6004
  x: d3_interpolateNumber(ta[0], tb[0])
5898
6005
  }, {
5899
- i: 3,
6006
+ i: i - 2,
5900
6007
  x: d3_interpolateNumber(ta[1], tb[1])
5901
6008
  });
5902
6009
  } else if (tb[0] || tb[1]) {
5903
6010
  s.push("translate(" + tb + ")");
5904
- } else {
5905
- s.push("");
5906
6011
  }
5907
- if (ra != rb) {
6012
+ }
6013
+ function d3_interpolateRotate(ra, rb, s, q) {
6014
+ if (ra !== rb) {
5908
6015
  if (ra - rb > 180) rb += 360; else if (rb - ra > 180) ra += 360;
5909
6016
  q.push({
5910
- i: s.push(s.pop() + "rotate(", null, ")") - 2,
6017
+ i: s.push(d3_interpolateTransformPop(s) + "rotate(", null, ")") - 2,
5911
6018
  x: d3_interpolateNumber(ra, rb)
5912
6019
  });
5913
6020
  } else if (rb) {
5914
- s.push(s.pop() + "rotate(" + rb + ")");
6021
+ s.push(d3_interpolateTransformPop(s) + "rotate(" + rb + ")");
5915
6022
  }
5916
- if (wa != wb) {
6023
+ }
6024
+ function d3_interpolateSkew(wa, wb, s, q) {
6025
+ if (wa !== wb) {
5917
6026
  q.push({
5918
- i: s.push(s.pop() + "skewX(", null, ")") - 2,
6027
+ i: s.push(d3_interpolateTransformPop(s) + "skewX(", null, ")") - 2,
5919
6028
  x: d3_interpolateNumber(wa, wb)
5920
6029
  });
5921
6030
  } else if (wb) {
5922
- s.push(s.pop() + "skewX(" + wb + ")");
6031
+ s.push(d3_interpolateTransformPop(s) + "skewX(" + wb + ")");
5923
6032
  }
5924
- if (ka[0] != kb[0] || ka[1] != kb[1]) {
5925
- n = s.push(s.pop() + "scale(", null, ",", null, ")");
6033
+ }
6034
+ function d3_interpolateScale(ka, kb, s, q) {
6035
+ if (ka[0] !== kb[0] || ka[1] !== kb[1]) {
6036
+ var i = s.push(d3_interpolateTransformPop(s) + "scale(", null, ",", null, ")");
5926
6037
  q.push({
5927
- i: n - 4,
6038
+ i: i - 4,
5928
6039
  x: d3_interpolateNumber(ka[0], kb[0])
5929
6040
  }, {
5930
- i: n - 2,
6041
+ i: i - 2,
5931
6042
  x: d3_interpolateNumber(ka[1], kb[1])
5932
6043
  });
5933
- } else if (kb[0] != 1 || kb[1] != 1) {
5934
- s.push(s.pop() + "scale(" + kb + ")");
6044
+ } else if (kb[0] !== 1 || kb[1] !== 1) {
6045
+ s.push(d3_interpolateTransformPop(s) + "scale(" + kb + ")");
5935
6046
  }
5936
- n = q.length;
6047
+ }
6048
+ function d3_interpolateTransform(a, b) {
6049
+ var s = [], q = [];
6050
+ a = d3.transform(a), b = d3.transform(b);
6051
+ d3_interpolateTranslate(a.translate, b.translate, s, q);
6052
+ d3_interpolateRotate(a.rotate, b.rotate, s, q);
6053
+ d3_interpolateSkew(a.skew, b.skew, s, q);
6054
+ d3_interpolateScale(a.scale, b.scale, s, q);
6055
+ a = b = null;
5937
6056
  return function(t) {
5938
- var i = -1, o;
6057
+ var i = -1, n = q.length, o;
5939
6058
  while (++i < n) s[(o = q[i]).i] = o.x(t);
5940
6059
  return s.join("");
5941
6060
  };
5942
6061
  }
5943
6062
  function d3_uninterpolateNumber(a, b) {
5944
- b = b - (a = +a) ? 1 / (b - a) : 0;
6063
+ b = (b -= a = +a) || 1 / b;
5945
6064
  return function(x) {
5946
- return (x - a) * b;
6065
+ return (x - a) / b;
5947
6066
  };
5948
6067
  }
5949
6068
  function d3_uninterpolateClamp(a, b) {
5950
- b = b - (a = +a) ? 1 / (b - a) : 0;
6069
+ b = (b -= a = +a) || 1 / b;
5951
6070
  return function(x) {
5952
- return Math.max(0, Math.min(1, (x - a) * b));
6071
+ return Math.max(0, Math.min(1, (x - a) / b));
5953
6072
  };
5954
6073
  }
5955
6074
  d3.layout = {};
@@ -6039,7 +6158,7 @@
6039
6158
  index: di,
6040
6159
  startAngle: x0,
6041
6160
  endAngle: x,
6042
- value: (x - x0) / k
6161
+ value: groupSums[di]
6043
6162
  };
6044
6163
  x += padding;
6045
6164
  }
@@ -6107,7 +6226,7 @@
6107
6226
  return chord;
6108
6227
  };
6109
6228
  d3.layout.force = function() {
6110
- var force = {}, event = d3.dispatch("start", "tick", "end"), size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;
6229
+ var force = {}, event = d3.dispatch("start", "tick", "end"), timer, size = [ 1, 1 ], drag, alpha, friction = .9, linkDistance = d3_layout_forceLinkDistance, linkStrength = d3_layout_forceLinkStrength, charge = -30, chargeDistance2 = d3_layout_forceChargeDistance2, gravity = .1, theta2 = .64, nodes = [], links = [], distances, strengths, charges;
6111
6230
  function repulse(node) {
6112
6231
  return function(quad, x1, _, x2) {
6113
6232
  if (quad.point !== node) {
@@ -6131,6 +6250,7 @@
6131
6250
  }
6132
6251
  force.tick = function() {
6133
6252
  if ((alpha *= .99) < .005) {
6253
+ timer = null;
6134
6254
  event.end({
6135
6255
  type: "end",
6136
6256
  alpha: alpha = 0
@@ -6148,7 +6268,7 @@
6148
6268
  l = alpha * strengths[i] * ((l = Math.sqrt(l)) - distances[i]) / l;
6149
6269
  x *= l;
6150
6270
  y *= l;
6151
- t.x -= x * (k = s.weight / (t.weight + s.weight));
6271
+ t.x -= x * (k = s.weight + t.weight ? s.weight / (s.weight + t.weight) : .5);
6152
6272
  t.y -= y * k;
6153
6273
  s.x += x * (k = 1 - k);
6154
6274
  s.y += y * k;
@@ -6244,13 +6364,21 @@
6244
6364
  if (!arguments.length) return alpha;
6245
6365
  x = +x;
6246
6366
  if (alpha) {
6247
- if (x > 0) alpha = x; else alpha = 0;
6367
+ if (x > 0) {
6368
+ alpha = x;
6369
+ } else {
6370
+ timer.c = null, timer.t = NaN, timer = null;
6371
+ event.end({
6372
+ type: "end",
6373
+ alpha: alpha = 0
6374
+ });
6375
+ }
6248
6376
  } else if (x > 0) {
6249
6377
  event.start({
6250
6378
  type: "start",
6251
6379
  alpha: alpha = x
6252
6380
  });
6253
- d3.timer(force.tick);
6381
+ timer = d3_timer(force.tick);
6254
6382
  }
6255
6383
  return force;
6256
6384
  };
@@ -6292,8 +6420,8 @@
6292
6420
  neighbors[o.target.index].push(o.source);
6293
6421
  }
6294
6422
  }
6295
- var candidates = neighbors[i], j = -1, m = candidates.length, x;
6296
- while (++j < m) if (!isNaN(x = candidates[j][dimension])) return x;
6423
+ var candidates = neighbors[i], j = -1, l = candidates.length, x;
6424
+ while (++j < l) if (!isNaN(x = candidates[j][dimension])) return x;
6297
6425
  return Math.random() * size;
6298
6426
  }
6299
6427
  return force.resume();
@@ -6358,41 +6486,30 @@
6358
6486
  var d3_layout_forceLinkDistance = 20, d3_layout_forceLinkStrength = 1, d3_layout_forceChargeDistance2 = Infinity;
6359
6487
  d3.layout.hierarchy = function() {
6360
6488
  var sort = d3_layout_hierarchySort, children = d3_layout_hierarchyChildren, value = d3_layout_hierarchyValue;
6361
- function recurse(node, depth, nodes) {
6362
- var childs = children.call(hierarchy, node, depth);
6363
- node.depth = depth;
6364
- nodes.push(node);
6365
- if (childs && (n = childs.length)) {
6366
- var i = -1, n, c = node.children = new Array(n), v = 0, j = depth + 1, d;
6367
- while (++i < n) {
6368
- d = c[i] = recurse(childs[i], j, nodes);
6369
- d.parent = node;
6370
- v += d.value;
6371
- }
6372
- if (sort) c.sort(sort);
6373
- if (value) node.value = v;
6374
- } else {
6375
- delete node.children;
6376
- if (value) {
6377
- node.value = +value.call(hierarchy, node, depth) || 0;
6489
+ function hierarchy(root) {
6490
+ var stack = [ root ], nodes = [], node;
6491
+ root.depth = 0;
6492
+ while ((node = stack.pop()) != null) {
6493
+ nodes.push(node);
6494
+ if ((childs = children.call(hierarchy, node, node.depth)) && (n = childs.length)) {
6495
+ var n, childs, child;
6496
+ while (--n >= 0) {
6497
+ stack.push(child = childs[n]);
6498
+ child.parent = node;
6499
+ child.depth = node.depth + 1;
6500
+ }
6501
+ if (value) node.value = 0;
6502
+ node.children = childs;
6503
+ } else {
6504
+ if (value) node.value = +value.call(hierarchy, node, node.depth) || 0;
6505
+ delete node.children;
6378
6506
  }
6379
6507
  }
6380
- return node;
6381
- }
6382
- function revalue(node, depth) {
6383
- var children = node.children, v = 0;
6384
- if (children && (n = children.length)) {
6385
- var i = -1, n, j = depth + 1;
6386
- while (++i < n) v += revalue(children[i], j);
6387
- } else if (value) {
6388
- v = +value.call(hierarchy, node, depth) || 0;
6389
- }
6390
- if (value) node.value = v;
6391
- return v;
6392
- }
6393
- function hierarchy(d) {
6394
- var nodes = [];
6395
- recurse(d, 0, nodes);
6508
+ d3_layout_hierarchyVisitAfter(root, function(node) {
6509
+ var childs, parent;
6510
+ if (sort && (childs = node.children)) childs.sort(sort);
6511
+ if (value && (parent = node.parent)) parent.value += node.value;
6512
+ });
6396
6513
  return nodes;
6397
6514
  }
6398
6515
  hierarchy.sort = function(x) {
@@ -6411,7 +6528,16 @@
6411
6528
  return hierarchy;
6412
6529
  };
6413
6530
  hierarchy.revalue = function(root) {
6414
- revalue(root, 0);
6531
+ if (value) {
6532
+ d3_layout_hierarchyVisitBefore(root, function(node) {
6533
+ if (node.children) node.value = 0;
6534
+ });
6535
+ d3_layout_hierarchyVisitAfter(root, function(node) {
6536
+ var parent;
6537
+ if (!node.children) node.value = +value.call(hierarchy, node, node.depth) || 0;
6538
+ if (parent = node.parent) parent.value += node.value;
6539
+ });
6540
+ }
6415
6541
  return root;
6416
6542
  };
6417
6543
  return hierarchy;
@@ -6422,6 +6548,29 @@
6422
6548
  object.links = d3_layout_hierarchyLinks;
6423
6549
  return object;
6424
6550
  }
6551
+ function d3_layout_hierarchyVisitBefore(node, callback) {
6552
+ var nodes = [ node ];
6553
+ while ((node = nodes.pop()) != null) {
6554
+ callback(node);
6555
+ if ((children = node.children) && (n = children.length)) {
6556
+ var n, children;
6557
+ while (--n >= 0) nodes.push(children[n]);
6558
+ }
6559
+ }
6560
+ }
6561
+ function d3_layout_hierarchyVisitAfter(node, callback) {
6562
+ var nodes = [ node ], nodes2 = [];
6563
+ while ((node = nodes.pop()) != null) {
6564
+ nodes2.push(node);
6565
+ if ((children = node.children) && (n = children.length)) {
6566
+ var i = -1, n, children;
6567
+ while (++i < n) nodes.push(children[i]);
6568
+ }
6569
+ }
6570
+ while ((node = nodes2.pop()) != null) {
6571
+ callback(node);
6572
+ }
6573
+ }
6425
6574
  function d3_layout_hierarchyChildren(d) {
6426
6575
  return d.children;
6427
6576
  }
@@ -6479,49 +6628,50 @@
6479
6628
  return d3_layout_hierarchyRebind(partition, hierarchy);
6480
6629
  };
6481
6630
  d3.layout.pie = function() {
6482
- var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ;
6631
+ var value = Number, sort = d3_layout_pieSortByValue, startAngle = 0, endAngle = τ, padAngle = 0;
6483
6632
  function pie(data) {
6484
- var values = data.map(function(d, i) {
6633
+ var n = data.length, values = data.map(function(d, i) {
6485
6634
  return +value.call(pie, d, i);
6486
- });
6487
- var a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle);
6488
- var k = ((typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a) / d3.sum(values);
6489
- var index = d3.range(data.length);
6635
+ }), a = +(typeof startAngle === "function" ? startAngle.apply(this, arguments) : startAngle), da = (typeof endAngle === "function" ? endAngle.apply(this, arguments) : endAngle) - a, p = Math.min(Math.abs(da) / n, +(typeof padAngle === "function" ? padAngle.apply(this, arguments) : padAngle)), pa = p * (da < 0 ? -1 : 1), sum = d3.sum(values), k = sum ? (da - n * pa) / sum : 0, index = d3.range(n), arcs = [], v;
6490
6636
  if (sort != null) index.sort(sort === d3_layout_pieSortByValue ? function(i, j) {
6491
6637
  return values[j] - values[i];
6492
6638
  } : function(i, j) {
6493
6639
  return sort(data[i], data[j]);
6494
6640
  });
6495
- var arcs = [];
6496
6641
  index.forEach(function(i) {
6497
- var d;
6498
6642
  arcs[i] = {
6499
6643
  data: data[i],
6500
- value: d = values[i],
6644
+ value: v = values[i],
6501
6645
  startAngle: a,
6502
- endAngle: a += d * k
6646
+ endAngle: a += v * k + pa,
6647
+ padAngle: p
6503
6648
  };
6504
6649
  });
6505
6650
  return arcs;
6506
6651
  }
6507
- pie.value = function(x) {
6652
+ pie.value = function(_) {
6508
6653
  if (!arguments.length) return value;
6509
- value = x;
6654
+ value = _;
6510
6655
  return pie;
6511
6656
  };
6512
- pie.sort = function(x) {
6657
+ pie.sort = function(_) {
6513
6658
  if (!arguments.length) return sort;
6514
- sort = x;
6659
+ sort = _;
6515
6660
  return pie;
6516
6661
  };
6517
- pie.startAngle = function(x) {
6662
+ pie.startAngle = function(_) {
6518
6663
  if (!arguments.length) return startAngle;
6519
- startAngle = x;
6664
+ startAngle = _;
6520
6665
  return pie;
6521
6666
  };
6522
- pie.endAngle = function(x) {
6667
+ pie.endAngle = function(_) {
6523
6668
  if (!arguments.length) return endAngle;
6524
- endAngle = x;
6669
+ endAngle = _;
6670
+ return pie;
6671
+ };
6672
+ pie.padAngle = function(_) {
6673
+ if (!arguments.length) return padAngle;
6674
+ padAngle = _;
6525
6675
  return pie;
6526
6676
  };
6527
6677
  return pie;
@@ -6530,6 +6680,7 @@
6530
6680
  d3.layout.stack = function() {
6531
6681
  var values = d3_identity, order = d3_layout_stackOrderDefault, offset = d3_layout_stackOffsetZero, out = d3_layout_stackOut, x = d3_layout_stackX, y = d3_layout_stackY;
6532
6682
  function stack(data, index) {
6683
+ if (!(n = data.length)) return data;
6533
6684
  var series = data.map(function(d, i) {
6534
6685
  return values.call(stack, d, i);
6535
6686
  });
@@ -6542,7 +6693,7 @@
6542
6693
  series = d3.permute(series, orders);
6543
6694
  points = d3.permute(points, orders);
6544
6695
  var offsets = offset.call(stack, points, index);
6545
- var n = series.length, m = series[0].length, i, j, o;
6696
+ var m = series[0].length, n, i, j, o;
6546
6697
  for (j = 0; j < m; ++j) {
6547
6698
  out.call(stack, series[0][j], o = offsets[j], points[0][j][1]);
6548
6699
  for (i = 1; i < n; ++i) {
@@ -6737,185 +6888,6 @@
6737
6888
  function d3_layout_histogramRange(values) {
6738
6889
  return [ d3.min(values), d3.max(values) ];
6739
6890
  }
6740
- d3.layout.tree = function() {
6741
- var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
6742
- function tree(d, i) {
6743
- var nodes = hierarchy.call(this, d, i), root = nodes[0];
6744
- function firstWalk(node, previousSibling) {
6745
- var children = node.children, layout = node._tree;
6746
- if (children && (n = children.length)) {
6747
- var n, firstChild = children[0], previousChild, ancestor = firstChild, child, i = -1;
6748
- while (++i < n) {
6749
- child = children[i];
6750
- firstWalk(child, previousChild);
6751
- ancestor = apportion(child, previousChild, ancestor);
6752
- previousChild = child;
6753
- }
6754
- d3_layout_treeShift(node);
6755
- var midpoint = .5 * (firstChild._tree.prelim + child._tree.prelim);
6756
- if (previousSibling) {
6757
- layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
6758
- layout.mod = layout.prelim - midpoint;
6759
- } else {
6760
- layout.prelim = midpoint;
6761
- }
6762
- } else {
6763
- if (previousSibling) {
6764
- layout.prelim = previousSibling._tree.prelim + separation(node, previousSibling);
6765
- }
6766
- }
6767
- }
6768
- function secondWalk(node, x) {
6769
- node.x = node._tree.prelim + x;
6770
- var children = node.children;
6771
- if (children && (n = children.length)) {
6772
- var i = -1, n;
6773
- x += node._tree.mod;
6774
- while (++i < n) {
6775
- secondWalk(children[i], x);
6776
- }
6777
- }
6778
- }
6779
- function apportion(node, previousSibling, ancestor) {
6780
- if (previousSibling) {
6781
- var vip = node, vop = node, vim = previousSibling, vom = node.parent.children[0], sip = vip._tree.mod, sop = vop._tree.mod, sim = vim._tree.mod, som = vom._tree.mod, shift;
6782
- while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
6783
- vom = d3_layout_treeLeft(vom);
6784
- vop = d3_layout_treeRight(vop);
6785
- vop._tree.ancestor = node;
6786
- shift = vim._tree.prelim + sim - vip._tree.prelim - sip + separation(vim, vip);
6787
- if (shift > 0) {
6788
- d3_layout_treeMove(d3_layout_treeAncestor(vim, node, ancestor), node, shift);
6789
- sip += shift;
6790
- sop += shift;
6791
- }
6792
- sim += vim._tree.mod;
6793
- sip += vip._tree.mod;
6794
- som += vom._tree.mod;
6795
- sop += vop._tree.mod;
6796
- }
6797
- if (vim && !d3_layout_treeRight(vop)) {
6798
- vop._tree.thread = vim;
6799
- vop._tree.mod += sim - sop;
6800
- }
6801
- if (vip && !d3_layout_treeLeft(vom)) {
6802
- vom._tree.thread = vip;
6803
- vom._tree.mod += sip - som;
6804
- ancestor = node;
6805
- }
6806
- }
6807
- return ancestor;
6808
- }
6809
- d3_layout_treeVisitAfter(root, function(node, previousSibling) {
6810
- node._tree = {
6811
- ancestor: node,
6812
- prelim: 0,
6813
- mod: 0,
6814
- change: 0,
6815
- shift: 0,
6816
- number: previousSibling ? previousSibling._tree.number + 1 : 0
6817
- };
6818
- });
6819
- firstWalk(root);
6820
- secondWalk(root, -root._tree.prelim);
6821
- var left = d3_layout_treeSearch(root, d3_layout_treeLeftmost), right = d3_layout_treeSearch(root, d3_layout_treeRightmost), deep = d3_layout_treeSearch(root, d3_layout_treeDeepest), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2, y1 = deep.depth || 1;
6822
- d3_layout_treeVisitAfter(root, nodeSize ? function(node) {
6823
- node.x *= size[0];
6824
- node.y = node.depth * size[1];
6825
- delete node._tree;
6826
- } : function(node) {
6827
- node.x = (node.x - x0) / (x1 - x0) * size[0];
6828
- node.y = node.depth / y1 * size[1];
6829
- delete node._tree;
6830
- });
6831
- return nodes;
6832
- }
6833
- tree.separation = function(x) {
6834
- if (!arguments.length) return separation;
6835
- separation = x;
6836
- return tree;
6837
- };
6838
- tree.size = function(x) {
6839
- if (!arguments.length) return nodeSize ? null : size;
6840
- nodeSize = (size = x) == null;
6841
- return tree;
6842
- };
6843
- tree.nodeSize = function(x) {
6844
- if (!arguments.length) return nodeSize ? size : null;
6845
- nodeSize = (size = x) != null;
6846
- return tree;
6847
- };
6848
- return d3_layout_hierarchyRebind(tree, hierarchy);
6849
- };
6850
- function d3_layout_treeSeparation(a, b) {
6851
- return a.parent == b.parent ? 1 : 2;
6852
- }
6853
- function d3_layout_treeLeft(node) {
6854
- var children = node.children;
6855
- return children && children.length ? children[0] : node._tree.thread;
6856
- }
6857
- function d3_layout_treeRight(node) {
6858
- var children = node.children, n;
6859
- return children && (n = children.length) ? children[n - 1] : node._tree.thread;
6860
- }
6861
- function d3_layout_treeSearch(node, compare) {
6862
- var children = node.children;
6863
- if (children && (n = children.length)) {
6864
- var child, n, i = -1;
6865
- while (++i < n) {
6866
- if (compare(child = d3_layout_treeSearch(children[i], compare), node) > 0) {
6867
- node = child;
6868
- }
6869
- }
6870
- }
6871
- return node;
6872
- }
6873
- function d3_layout_treeRightmost(a, b) {
6874
- return a.x - b.x;
6875
- }
6876
- function d3_layout_treeLeftmost(a, b) {
6877
- return b.x - a.x;
6878
- }
6879
- function d3_layout_treeDeepest(a, b) {
6880
- return a.depth - b.depth;
6881
- }
6882
- function d3_layout_treeVisitAfter(node, callback) {
6883
- function visit(node, previousSibling) {
6884
- var children = node.children;
6885
- if (children && (n = children.length)) {
6886
- var child, previousChild = null, i = -1, n;
6887
- while (++i < n) {
6888
- child = children[i];
6889
- visit(child, previousChild);
6890
- previousChild = child;
6891
- }
6892
- }
6893
- callback(node, previousSibling);
6894
- }
6895
- visit(node, null);
6896
- }
6897
- function d3_layout_treeShift(node) {
6898
- var shift = 0, change = 0, children = node.children, i = children.length, child;
6899
- while (--i >= 0) {
6900
- child = children[i]._tree;
6901
- child.prelim += shift;
6902
- child.mod += shift;
6903
- shift += child.shift + (change += child.change);
6904
- }
6905
- }
6906
- function d3_layout_treeMove(ancestor, node, shift) {
6907
- ancestor = ancestor._tree;
6908
- node = node._tree;
6909
- var change = shift / (node.number - ancestor.number);
6910
- ancestor.change += change;
6911
- node.change -= change;
6912
- node.shift += shift;
6913
- node.prelim += shift;
6914
- node.mod += shift;
6915
- }
6916
- function d3_layout_treeAncestor(vim, node, ancestor) {
6917
- return vim._tree.ancestor.parent == node.parent ? vim._tree.ancestor : ancestor;
6918
- }
6919
6891
  d3.layout.pack = function() {
6920
6892
  var hierarchy = d3.layout.hierarchy().sort(d3_layout_packSort), padding = 0, size = [ 1, 1 ], radius;
6921
6893
  function pack(d, i) {
@@ -6923,17 +6895,17 @@
6923
6895
  return radius;
6924
6896
  };
6925
6897
  root.x = root.y = 0;
6926
- d3_layout_treeVisitAfter(root, function(d) {
6898
+ d3_layout_hierarchyVisitAfter(root, function(d) {
6927
6899
  d.r = +r(d.value);
6928
6900
  });
6929
- d3_layout_treeVisitAfter(root, d3_layout_packSiblings);
6901
+ d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
6930
6902
  if (padding) {
6931
6903
  var dr = padding * (radius ? 1 : Math.max(2 * root.r / w, 2 * root.r / h)) / 2;
6932
- d3_layout_treeVisitAfter(root, function(d) {
6904
+ d3_layout_hierarchyVisitAfter(root, function(d) {
6933
6905
  d.r += dr;
6934
6906
  });
6935
- d3_layout_treeVisitAfter(root, d3_layout_packSiblings);
6936
- d3_layout_treeVisitAfter(root, function(d) {
6907
+ d3_layout_hierarchyVisitAfter(root, d3_layout_packSiblings);
6908
+ d3_layout_hierarchyVisitAfter(root, function(d) {
6937
6909
  d.r -= dr;
6938
6910
  });
6939
6911
  }
@@ -7070,11 +7042,158 @@
7070
7042
  c.y = a.y;
7071
7043
  }
7072
7044
  }
7045
+ d3.layout.tree = function() {
7046
+ var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = null;
7047
+ function tree(d, i) {
7048
+ var nodes = hierarchy.call(this, d, i), root0 = nodes[0], root1 = wrapTree(root0);
7049
+ d3_layout_hierarchyVisitAfter(root1, firstWalk), root1.parent.m = -root1.z;
7050
+ d3_layout_hierarchyVisitBefore(root1, secondWalk);
7051
+ if (nodeSize) d3_layout_hierarchyVisitBefore(root0, sizeNode); else {
7052
+ var left = root0, right = root0, bottom = root0;
7053
+ d3_layout_hierarchyVisitBefore(root0, function(node) {
7054
+ if (node.x < left.x) left = node;
7055
+ if (node.x > right.x) right = node;
7056
+ if (node.depth > bottom.depth) bottom = node;
7057
+ });
7058
+ var tx = separation(left, right) / 2 - left.x, kx = size[0] / (right.x + separation(right, left) / 2 + tx), ky = size[1] / (bottom.depth || 1);
7059
+ d3_layout_hierarchyVisitBefore(root0, function(node) {
7060
+ node.x = (node.x + tx) * kx;
7061
+ node.y = node.depth * ky;
7062
+ });
7063
+ }
7064
+ return nodes;
7065
+ }
7066
+ function wrapTree(root0) {
7067
+ var root1 = {
7068
+ A: null,
7069
+ children: [ root0 ]
7070
+ }, queue = [ root1 ], node1;
7071
+ while ((node1 = queue.pop()) != null) {
7072
+ for (var children = node1.children, child, i = 0, n = children.length; i < n; ++i) {
7073
+ queue.push((children[i] = child = {
7074
+ _: children[i],
7075
+ parent: node1,
7076
+ children: (child = children[i].children) && child.slice() || [],
7077
+ A: null,
7078
+ a: null,
7079
+ z: 0,
7080
+ m: 0,
7081
+ c: 0,
7082
+ s: 0,
7083
+ t: null,
7084
+ i: i
7085
+ }).a = child);
7086
+ }
7087
+ }
7088
+ return root1.children[0];
7089
+ }
7090
+ function firstWalk(v) {
7091
+ var children = v.children, siblings = v.parent.children, w = v.i ? siblings[v.i - 1] : null;
7092
+ if (children.length) {
7093
+ d3_layout_treeShift(v);
7094
+ var midpoint = (children[0].z + children[children.length - 1].z) / 2;
7095
+ if (w) {
7096
+ v.z = w.z + separation(v._, w._);
7097
+ v.m = v.z - midpoint;
7098
+ } else {
7099
+ v.z = midpoint;
7100
+ }
7101
+ } else if (w) {
7102
+ v.z = w.z + separation(v._, w._);
7103
+ }
7104
+ v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
7105
+ }
7106
+ function secondWalk(v) {
7107
+ v._.x = v.z + v.parent.m;
7108
+ v.m += v.parent.m;
7109
+ }
7110
+ function apportion(v, w, ancestor) {
7111
+ if (w) {
7112
+ var vip = v, vop = v, vim = w, vom = vip.parent.children[0], sip = vip.m, sop = vop.m, sim = vim.m, som = vom.m, shift;
7113
+ while (vim = d3_layout_treeRight(vim), vip = d3_layout_treeLeft(vip), vim && vip) {
7114
+ vom = d3_layout_treeLeft(vom);
7115
+ vop = d3_layout_treeRight(vop);
7116
+ vop.a = v;
7117
+ shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
7118
+ if (shift > 0) {
7119
+ d3_layout_treeMove(d3_layout_treeAncestor(vim, v, ancestor), v, shift);
7120
+ sip += shift;
7121
+ sop += shift;
7122
+ }
7123
+ sim += vim.m;
7124
+ sip += vip.m;
7125
+ som += vom.m;
7126
+ sop += vop.m;
7127
+ }
7128
+ if (vim && !d3_layout_treeRight(vop)) {
7129
+ vop.t = vim;
7130
+ vop.m += sim - sop;
7131
+ }
7132
+ if (vip && !d3_layout_treeLeft(vom)) {
7133
+ vom.t = vip;
7134
+ vom.m += sip - som;
7135
+ ancestor = v;
7136
+ }
7137
+ }
7138
+ return ancestor;
7139
+ }
7140
+ function sizeNode(node) {
7141
+ node.x *= size[0];
7142
+ node.y = node.depth * size[1];
7143
+ }
7144
+ tree.separation = function(x) {
7145
+ if (!arguments.length) return separation;
7146
+ separation = x;
7147
+ return tree;
7148
+ };
7149
+ tree.size = function(x) {
7150
+ if (!arguments.length) return nodeSize ? null : size;
7151
+ nodeSize = (size = x) == null ? sizeNode : null;
7152
+ return tree;
7153
+ };
7154
+ tree.nodeSize = function(x) {
7155
+ if (!arguments.length) return nodeSize ? size : null;
7156
+ nodeSize = (size = x) == null ? null : sizeNode;
7157
+ return tree;
7158
+ };
7159
+ return d3_layout_hierarchyRebind(tree, hierarchy);
7160
+ };
7161
+ function d3_layout_treeSeparation(a, b) {
7162
+ return a.parent == b.parent ? 1 : 2;
7163
+ }
7164
+ function d3_layout_treeLeft(v) {
7165
+ var children = v.children;
7166
+ return children.length ? children[0] : v.t;
7167
+ }
7168
+ function d3_layout_treeRight(v) {
7169
+ var children = v.children, n;
7170
+ return (n = children.length) ? children[n - 1] : v.t;
7171
+ }
7172
+ function d3_layout_treeMove(wm, wp, shift) {
7173
+ var change = shift / (wp.i - wm.i);
7174
+ wp.c -= change;
7175
+ wp.s += shift;
7176
+ wm.c += change;
7177
+ wp.z += shift;
7178
+ wp.m += shift;
7179
+ }
7180
+ function d3_layout_treeShift(v) {
7181
+ var shift = 0, change = 0, children = v.children, i = children.length, w;
7182
+ while (--i >= 0) {
7183
+ w = children[i];
7184
+ w.z += shift;
7185
+ w.m += shift;
7186
+ shift += w.s + (change += w.c);
7187
+ }
7188
+ }
7189
+ function d3_layout_treeAncestor(vim, v, ancestor) {
7190
+ return vim.a.parent === v.parent ? vim.a : ancestor;
7191
+ }
7073
7192
  d3.layout.cluster = function() {
7074
7193
  var hierarchy = d3.layout.hierarchy().sort(null).value(null), separation = d3_layout_treeSeparation, size = [ 1, 1 ], nodeSize = false;
7075
7194
  function cluster(d, i) {
7076
7195
  var nodes = hierarchy.call(this, d, i), root = nodes[0], previousNode, x = 0;
7077
- d3_layout_treeVisitAfter(root, function(node) {
7196
+ d3_layout_hierarchyVisitAfter(root, function(node) {
7078
7197
  var children = node.children;
7079
7198
  if (children && children.length) {
7080
7199
  node.x = d3_layout_clusterX(children);
@@ -7086,7 +7205,7 @@
7086
7205
  }
7087
7206
  });
7088
7207
  var left = d3_layout_clusterLeft(root), right = d3_layout_clusterRight(root), x0 = left.x - separation(left, right) / 2, x1 = right.x + separation(right, left) / 2;
7089
- d3_layout_treeVisitAfter(root, nodeSize ? function(node) {
7208
+ d3_layout_hierarchyVisitAfter(root, nodeSize ? function(node) {
7090
7209
  node.x = (node.x - root.x) * size[0];
7091
7210
  node.y = (root.y - node.y) * size[1];
7092
7211
  } : function(node) {
@@ -7226,10 +7345,8 @@
7226
7345
  }
7227
7346
  function treemap(d) {
7228
7347
  var nodes = stickies || hierarchy(d), root = nodes[0];
7229
- root.x = 0;
7230
- root.y = 0;
7231
- root.dx = size[0];
7232
- root.dy = size[1];
7348
+ root.x = root.y = 0;
7349
+ if (root.value) root.dx = size[0], root.dy = size[1]; else root.dx = root.dy = 0;
7233
7350
  if (stickies) hierarchy.revalue(root);
7234
7351
  scale([ root ], root.dx * root.dy / root.value);
7235
7352
  (stickies ? stickify : squarify)(root);
@@ -7449,7 +7566,9 @@
7449
7566
  return d3.rebind(scale, linear, "range", "rangeRound", "interpolate", "clamp");
7450
7567
  }
7451
7568
  function d3_scale_linearNice(domain, m) {
7452
- return d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
7569
+ d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
7570
+ d3_scale_nice(domain, d3_scale_niceStep(d3_scale_linearTickRange(domain, m)[2]));
7571
+ return domain;
7453
7572
  }
7454
7573
  function d3_scale_linearTickRange(domain, m) {
7455
7574
  if (m == null) m = 10;
@@ -7465,9 +7584,24 @@
7465
7584
  }
7466
7585
  function d3_scale_linearTickFormat(domain, m, format) {
7467
7586
  var range = d3_scale_linearTickRange(domain, m);
7468
- return d3.format(format ? format.replace(d3_format_re, function(a, b, c, d, e, f, g, h, i, j) {
7469
- return [ b, c, d, e, f, g, h, i || "." + d3_scale_linearFormatPrecision(j, range), j ].join("");
7470
- }) : ",." + d3_scale_linearPrecision(range[2]) + "f");
7587
+ if (format) {
7588
+ var match = d3_format_re.exec(format);
7589
+ match.shift();
7590
+ if (match[8] === "s") {
7591
+ var prefix = d3.formatPrefix(Math.max(abs(range[0]), abs(range[1])));
7592
+ if (!match[7]) match[7] = "." + d3_scale_linearPrecision(prefix.scale(range[2]));
7593
+ match[8] = "f";
7594
+ format = d3.format(match.join(""));
7595
+ return function(d) {
7596
+ return format(prefix.scale(d)) + prefix.symbol;
7597
+ };
7598
+ }
7599
+ if (!match[7]) match[7] = "." + d3_scale_linearFormatPrecision(match[8], range);
7600
+ format = match.join("");
7601
+ } else {
7602
+ format = ",." + d3_scale_linearPrecision(range[2]) + "f";
7603
+ }
7604
+ return d3.format(format);
7471
7605
  }
7472
7606
  var d3_scale_linearFormatSignificant = {
7473
7607
  s: 1,
@@ -7481,7 +7615,7 @@
7481
7615
  }
7482
7616
  function d3_scale_linearFormatPrecision(type, range) {
7483
7617
  var p = d3_scale_linearPrecision(range[2]);
7484
- return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(Math.abs(range[0]), Math.abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2;
7618
+ return type in d3_scale_linearFormatSignificant ? Math.abs(p - d3_scale_linearPrecision(Math.max(abs(range[0]), abs(range[1])))) + +(type !== "e") : p - (type === "%") * 2;
7485
7619
  }
7486
7620
  d3.scale.log = function() {
7487
7621
  return d3_scale_log(d3.scale.linear().domain([ 0, 1 ]), 10, true, [ 1, 10 ]);
@@ -7536,10 +7670,11 @@
7536
7670
  scale.tickFormat = function(n, format) {
7537
7671
  if (!arguments.length) return d3_scale_logFormat;
7538
7672
  if (arguments.length < 2) format = d3_scale_logFormat; else if (typeof format !== "function") format = d3.format(format);
7539
- var k = Math.max(.1, n / scale.ticks().length), f = positive ? (e = 1e-12, Math.ceil) : (e = -1e-12,
7540
- Math.floor), e;
7673
+ var k = Math.max(1, base * n / scale.ticks().length);
7541
7674
  return function(d) {
7542
- return d / pow(f(log(d) + e)) <= k ? format(d) : "";
7675
+ var i = d / pow(Math.round(log(d)));
7676
+ if (i * base < base - .5) i *= base;
7677
+ return i <= k ? format(d) : "";
7543
7678
  };
7544
7679
  };
7545
7680
  scale.copy = function() {
@@ -7609,7 +7744,7 @@
7609
7744
  function d3_scale_ordinal(domain, ranger) {
7610
7745
  var index, range, rangeBand;
7611
7746
  function scale(x) {
7612
- return range[((index.get(x) || ranger.t === "range" && index.set(x, domain.push(x))) - 1) % range.length];
7747
+ return range[((index.get(x) || (ranger.t === "range" ? index.set(x, domain.push(x)) : NaN)) - 1) % range.length];
7613
7748
  }
7614
7749
  function steps(start, step) {
7615
7750
  return d3.range(domain.length).map(function(i) {
@@ -7636,8 +7771,9 @@
7636
7771
  };
7637
7772
  scale.rangePoints = function(x, padding) {
7638
7773
  if (arguments.length < 2) padding = 0;
7639
- var start = x[0], stop = x[1], step = (stop - start) / (Math.max(1, domain.length - 1) + padding);
7640
- range = steps(domain.length < 2 ? (start + stop) / 2 : start + step * padding / 2, step);
7774
+ var start = x[0], stop = x[1], step = domain.length < 2 ? (start = (start + stop) / 2,
7775
+ 0) : (stop - start) / (domain.length - 1 + padding);
7776
+ range = steps(start + step * padding / 2, step);
7641
7777
  rangeBand = 0;
7642
7778
  ranger = {
7643
7779
  t: "rangePoints",
@@ -7645,6 +7781,18 @@
7645
7781
  };
7646
7782
  return scale;
7647
7783
  };
7784
+ scale.rangeRoundPoints = function(x, padding) {
7785
+ if (arguments.length < 2) padding = 0;
7786
+ var start = x[0], stop = x[1], step = domain.length < 2 ? (start = stop = Math.round((start + stop) / 2),
7787
+ 0) : (stop - start) / (domain.length - 1 + padding) | 0;
7788
+ range = steps(start + Math.round(step * padding / 2 + (stop - start - (domain.length - 1 + padding) * step) / 2), step);
7789
+ rangeBand = 0;
7790
+ ranger = {
7791
+ t: "rangeRoundPoints",
7792
+ a: arguments
7793
+ };
7794
+ return scale;
7795
+ };
7648
7796
  scale.rangeBands = function(x, padding, outerPadding) {
7649
7797
  if (arguments.length < 2) padding = 0;
7650
7798
  if (arguments.length < 3) outerPadding = padding;
@@ -7661,8 +7809,8 @@
7661
7809
  scale.rangeRoundBands = function(x, padding, outerPadding) {
7662
7810
  if (arguments.length < 2) padding = 0;
7663
7811
  if (arguments.length < 3) outerPadding = padding;
7664
- var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding)), error = stop - start - (domain.length - padding) * step;
7665
- range = steps(start + Math.round(error / 2), step);
7812
+ var reverse = x[1] < x[0], start = x[reverse - 0], stop = x[1 - reverse], step = Math.floor((stop - start) / (domain.length - padding + 2 * outerPadding));
7813
+ range = steps(start + Math.round((stop - start - (domain.length - padding) * step) / 2), step);
7666
7814
  if (reverse) range.reverse();
7667
7815
  rangeBand = Math.round(step * (1 - padding));
7668
7816
  ranger = {
@@ -7714,9 +7862,7 @@
7714
7862
  }
7715
7863
  scale.domain = function(x) {
7716
7864
  if (!arguments.length) return domain;
7717
- domain = x.filter(function(d) {
7718
- return !isNaN(d);
7719
- }).sort(d3.ascending);
7865
+ domain = x.map(d3_number).filter(d3_numeric).sort(d3_ascending);
7720
7866
  return rescale();
7721
7867
  };
7722
7868
  scale.range = function(x) {
@@ -7821,12 +7967,91 @@
7821
7967
  return identity;
7822
7968
  }
7823
7969
  d3.svg = {};
7970
+ function d3_zero() {
7971
+ return 0;
7972
+ }
7824
7973
  d3.svg.arc = function() {
7825
- var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle;
7974
+ var innerRadius = d3_svg_arcInnerRadius, outerRadius = d3_svg_arcOuterRadius, cornerRadius = d3_zero, padRadius = d3_svg_arcAuto, startAngle = d3_svg_arcStartAngle, endAngle = d3_svg_arcEndAngle, padAngle = d3_svg_arcPadAngle;
7826
7975
  function arc() {
7827
- var r0 = innerRadius.apply(this, arguments), r1 = outerRadius.apply(this, arguments), a0 = startAngle.apply(this, arguments) + d3_svg_arcOffset, a1 = endAngle.apply(this, arguments) + d3_svg_arcOffset, da = (a1 < a0 && (da = a0,
7828
- a0 = a1, a1 = da), a1 - a0), df = da < π ? "0" : "1", c0 = Math.cos(a0), s0 = Math.sin(a0), c1 = Math.cos(a1), s1 = Math.sin(a1);
7829
- return da >= d3_svg_arcMax ? r0 ? "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "M0," + r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + -r0 + "A" + r0 + "," + r0 + " 0 1,0 0," + r0 + "Z" : "M0," + r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + -r1 + "A" + r1 + "," + r1 + " 0 1,1 0," + r1 + "Z" : r0 ? "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L" + r0 * c1 + "," + r0 * s1 + "A" + r0 + "," + r0 + " 0 " + df + ",0 " + r0 * c0 + "," + r0 * s0 + "Z" : "M" + r1 * c0 + "," + r1 * s0 + "A" + r1 + "," + r1 + " 0 " + df + ",1 " + r1 * c1 + "," + r1 * s1 + "L0,0" + "Z";
7976
+ var r0 = Math.max(0, +innerRadius.apply(this, arguments)), r1 = Math.max(0, +outerRadius.apply(this, arguments)), a0 = startAngle.apply(this, arguments) - halfπ, a1 = endAngle.apply(this, arguments) - halfπ, da = Math.abs(a1 - a0), cw = a0 > a1 ? 0 : 1;
7977
+ if (r1 < r0) rc = r1, r1 = r0, r0 = rc;
7978
+ if (da >= τε) return circleSegment(r1, cw) + (r0 ? circleSegment(r0, 1 - cw) : "") + "Z";
7979
+ var rc, cr, rp, ap, p0 = 0, p1 = 0, x0, y0, x1, y1, x2, y2, x3, y3, path = [];
7980
+ if (ap = (+padAngle.apply(this, arguments) || 0) / 2) {
7981
+ rp = padRadius === d3_svg_arcAuto ? Math.sqrt(r0 * r0 + r1 * r1) : +padRadius.apply(this, arguments);
7982
+ if (!cw) p1 *= -1;
7983
+ if (r1) p1 = d3_asin(rp / r1 * Math.sin(ap));
7984
+ if (r0) p0 = d3_asin(rp / r0 * Math.sin(ap));
7985
+ }
7986
+ if (r1) {
7987
+ x0 = r1 * Math.cos(a0 + p1);
7988
+ y0 = r1 * Math.sin(a0 + p1);
7989
+ x1 = r1 * Math.cos(a1 - p1);
7990
+ y1 = r1 * Math.sin(a1 - p1);
7991
+ var l1 = Math.abs(a1 - a0 - 2 * p1) <= π ? 0 : 1;
7992
+ if (p1 && d3_svg_arcSweep(x0, y0, x1, y1) === cw ^ l1) {
7993
+ var h1 = (a0 + a1) / 2;
7994
+ x0 = r1 * Math.cos(h1);
7995
+ y0 = r1 * Math.sin(h1);
7996
+ x1 = y1 = null;
7997
+ }
7998
+ } else {
7999
+ x0 = y0 = 0;
8000
+ }
8001
+ if (r0) {
8002
+ x2 = r0 * Math.cos(a1 - p0);
8003
+ y2 = r0 * Math.sin(a1 - p0);
8004
+ x3 = r0 * Math.cos(a0 + p0);
8005
+ y3 = r0 * Math.sin(a0 + p0);
8006
+ var l0 = Math.abs(a0 - a1 + 2 * p0) <= π ? 0 : 1;
8007
+ if (p0 && d3_svg_arcSweep(x2, y2, x3, y3) === 1 - cw ^ l0) {
8008
+ var h0 = (a0 + a1) / 2;
8009
+ x2 = r0 * Math.cos(h0);
8010
+ y2 = r0 * Math.sin(h0);
8011
+ x3 = y3 = null;
8012
+ }
8013
+ } else {
8014
+ x2 = y2 = 0;
8015
+ }
8016
+ if (da > ε && (rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments))) > .001) {
8017
+ cr = r0 < r1 ^ cw ? 0 : 1;
8018
+ var rc1 = rc, rc0 = rc;
8019
+ if (da < π) {
8020
+ var oc = x3 == null ? [ x2, y2 ] : x1 == null ? [ x0, y0 ] : d3_geom_polygonIntersect([ x0, y0 ], [ x3, y3 ], [ x1, y1 ], [ x2, y2 ]), ax = x0 - oc[0], ay = y0 - oc[1], bx = x1 - oc[0], by = y1 - oc[1], kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2), lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
8021
+ rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
8022
+ rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
8023
+ }
8024
+ if (x1 != null) {
8025
+ var t30 = d3_svg_arcCornerTangents(x3 == null ? [ x2, y2 ] : [ x3, y3 ], [ x0, y0 ], r1, rc1, cw), t12 = d3_svg_arcCornerTangents([ x1, y1 ], [ x2, y2 ], r1, rc1, cw);
8026
+ if (rc === rc1) {
8027
+ path.push("M", t30[0], "A", rc1, ",", rc1, " 0 0,", cr, " ", t30[1], "A", r1, ",", r1, " 0 ", 1 - cw ^ d3_svg_arcSweep(t30[1][0], t30[1][1], t12[1][0], t12[1][1]), ",", cw, " ", t12[1], "A", rc1, ",", rc1, " 0 0,", cr, " ", t12[0]);
8028
+ } else {
8029
+ path.push("M", t30[0], "A", rc1, ",", rc1, " 0 1,", cr, " ", t12[0]);
8030
+ }
8031
+ } else {
8032
+ path.push("M", x0, ",", y0);
8033
+ }
8034
+ if (x3 != null) {
8035
+ var t03 = d3_svg_arcCornerTangents([ x0, y0 ], [ x3, y3 ], r0, -rc0, cw), t21 = d3_svg_arcCornerTangents([ x2, y2 ], x1 == null ? [ x0, y0 ] : [ x1, y1 ], r0, -rc0, cw);
8036
+ if (rc === rc0) {
8037
+ path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t21[1], "A", r0, ",", r0, " 0 ", cw ^ d3_svg_arcSweep(t21[1][0], t21[1][1], t03[1][0], t03[1][1]), ",", 1 - cw, " ", t03[1], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
8038
+ } else {
8039
+ path.push("L", t21[0], "A", rc0, ",", rc0, " 0 0,", cr, " ", t03[0]);
8040
+ }
8041
+ } else {
8042
+ path.push("L", x2, ",", y2);
8043
+ }
8044
+ } else {
8045
+ path.push("M", x0, ",", y0);
8046
+ if (x1 != null) path.push("A", r1, ",", r1, " 0 ", l1, ",", cw, " ", x1, ",", y1);
8047
+ path.push("L", x2, ",", y2);
8048
+ if (x3 != null) path.push("A", r0, ",", r0, " 0 ", l0, ",", 1 - cw, " ", x3, ",", y3);
8049
+ }
8050
+ path.push("Z");
8051
+ return path.join("");
8052
+ }
8053
+ function circleSegment(r1, cw) {
8054
+ return "M0," + r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + -r1 + "A" + r1 + "," + r1 + " 0 1," + cw + " 0," + r1;
7830
8055
  }
7831
8056
  arc.innerRadius = function(v) {
7832
8057
  if (!arguments.length) return innerRadius;
@@ -7838,6 +8063,16 @@
7838
8063
  outerRadius = d3_functor(v);
7839
8064
  return arc;
7840
8065
  };
8066
+ arc.cornerRadius = function(v) {
8067
+ if (!arguments.length) return cornerRadius;
8068
+ cornerRadius = d3_functor(v);
8069
+ return arc;
8070
+ };
8071
+ arc.padRadius = function(v) {
8072
+ if (!arguments.length) return padRadius;
8073
+ padRadius = v == d3_svg_arcAuto ? d3_svg_arcAuto : d3_functor(v);
8074
+ return arc;
8075
+ };
7841
8076
  arc.startAngle = function(v) {
7842
8077
  if (!arguments.length) return startAngle;
7843
8078
  startAngle = d3_functor(v);
@@ -7848,13 +8083,18 @@
7848
8083
  endAngle = d3_functor(v);
7849
8084
  return arc;
7850
8085
  };
8086
+ arc.padAngle = function(v) {
8087
+ if (!arguments.length) return padAngle;
8088
+ padAngle = d3_functor(v);
8089
+ return arc;
8090
+ };
7851
8091
  arc.centroid = function() {
7852
- var r = (innerRadius.apply(this, arguments) + outerRadius.apply(this, arguments)) / 2, a = (startAngle.apply(this, arguments) + endAngle.apply(this, arguments)) / 2 + d3_svg_arcOffset;
8092
+ var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - halfπ;
7853
8093
  return [ Math.cos(a) * r, Math.sin(a) * r ];
7854
8094
  };
7855
8095
  return arc;
7856
8096
  };
7857
- var d3_svg_arcOffset = -halfπ, d3_svg_arcMax = τ - ε;
8097
+ var d3_svg_arcAuto = "auto";
7858
8098
  function d3_svg_arcInnerRadius(d) {
7859
8099
  return d.innerRadius;
7860
8100
  }
@@ -7867,6 +8107,17 @@
7867
8107
  function d3_svg_arcEndAngle(d) {
7868
8108
  return d.endAngle;
7869
8109
  }
8110
+ function d3_svg_arcPadAngle(d) {
8111
+ return d && d.padAngle;
8112
+ }
8113
+ function d3_svg_arcSweep(x0, y0, x1, y1) {
8114
+ return (x0 - x1) * y0 - (y0 - y1) * x0 > 0 ? 0 : 1;
8115
+ }
8116
+ function d3_svg_arcCornerTangents(p0, p1, r1, rc, cw) {
8117
+ var x01 = p0[0] - p1[0], y01 = p0[1] - p1[1], lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01), ox = lo * y01, oy = -lo * x01, x1 = p0[0] + ox, y1 = p0[1] + oy, x2 = p1[0] + ox, y2 = p1[1] + oy, x3 = (x1 + x2) / 2, y3 = (y1 + y2) / 2, dx = x2 - x1, dy = y2 - y1, d2 = dx * dx + dy * dy, r = r1 - rc, D = x1 * y2 - x2 * y1, d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)), cx0 = (D * dy - dx * d) / d2, cy0 = (-D * dx - dy * d) / d2, cx1 = (D * dy + dx * d) / d2, cy1 = (-D * dx + dy * d) / d2, dx0 = cx0 - x3, dy0 = cy0 - y3, dx1 = cx1 - x3, dy1 = cy1 - y3;
8118
+ if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
8119
+ return [ [ cx0 - ox, cy0 - oy ], [ cx0 * r1 / r, cy0 * r1 / r ] ];
8120
+ }
7870
8121
  function d3_svg_line(projection) {
7871
8122
  var x = d3_geom_pointX, y = d3_geom_pointY, defined = d3_true, interpolate = d3_svg_lineLinear, interpolateKey = interpolate.key, tension = .7;
7872
8123
  function line(data) {
@@ -7935,10 +8186,10 @@
7935
8186
  value.closed = /-closed$/.test(key);
7936
8187
  });
7937
8188
  function d3_svg_lineLinear(points) {
7938
- return points.join("L");
8189
+ return points.length > 1 ? points.join("L") : points + "Z";
7939
8190
  }
7940
8191
  function d3_svg_lineLinearClosed(points) {
7941
- return d3_svg_lineLinear(points) + "Z";
8192
+ return points.join("L") + "Z";
7942
8193
  }
7943
8194
  function d3_svg_lineStep(points) {
7944
8195
  var i = 0, n = points.length, p = points[0], path = [ p[0], ",", p[1] ];
@@ -7957,10 +8208,10 @@
7957
8208
  return path.join("");
7958
8209
  }
7959
8210
  function d3_svg_lineCardinalOpen(points, tension) {
7960
- return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, points.length - 1), d3_svg_lineCardinalTangents(points, tension));
8211
+ return points.length < 4 ? d3_svg_lineLinear(points) : points[1] + d3_svg_lineHermite(points.slice(1, -1), d3_svg_lineCardinalTangents(points, tension));
7961
8212
  }
7962
8213
  function d3_svg_lineCardinalClosed(points, tension) {
7963
- return points.length < 3 ? d3_svg_lineLinear(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
8214
+ return points.length < 3 ? d3_svg_lineLinearClosed(points) : points[0] + d3_svg_lineHermite((points.push(points[0]),
7964
8215
  points), d3_svg_lineCardinalTangents([ points[points.length - 2] ].concat(points, [ points[1] ]), tension));
7965
8216
  }
7966
8217
  function d3_svg_lineCardinal(points, tension) {
@@ -8127,7 +8378,7 @@
8127
8378
  while (++i < n) {
8128
8379
  point = points[i];
8129
8380
  r = point[0];
8130
- a = point[1] + d3_svg_arcOffset;
8381
+ a = point[1] - halfπ;
8131
8382
  point[0] = r * Math.cos(a);
8132
8383
  point[1] = r * Math.sin(a);
8133
8384
  }
@@ -8228,7 +8479,7 @@
8228
8479
  return "M" + s.p0 + arc(s.r, s.p1, s.a1 - s.a0) + (equals(s, t) ? curve(s.r, s.p1, s.r, s.p0) : curve(s.r, s.p1, t.r, t.p0) + arc(t.r, t.p1, t.a1 - t.a0) + curve(t.r, t.p1, s.r, s.p0)) + "Z";
8229
8480
  }
8230
8481
  function subgroup(self, f, d, i) {
8231
- var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) + d3_svg_arcOffset, a1 = endAngle.call(self, subgroup, i) + d3_svg_arcOffset;
8482
+ var subgroup = f.call(self, d, i), r = radius.call(self, subgroup, i), a0 = startAngle.call(self, subgroup, i) - halfπ, a1 = endAngle.call(self, subgroup, i) - halfπ;
8232
8483
  return {
8233
8484
  r: r,
8234
8485
  a0: a0,
@@ -8318,7 +8569,7 @@
8318
8569
  };
8319
8570
  function d3_svg_diagonalRadialProjection(projection) {
8320
8571
  return function() {
8321
- var d = projection.apply(this, arguments), r = d[0], a = d[1] + d3_svg_arcOffset;
8572
+ var d = projection.apply(this, arguments), r = d[0], a = d[1] - halfπ;
8322
8573
  return [ r * Math.cos(a), r * Math.sin(a) ];
8323
8574
  };
8324
8575
  }
@@ -8374,8 +8625,41 @@
8374
8625
  });
8375
8626
  d3.svg.symbolTypes = d3_svg_symbols.keys();
8376
8627
  var d3_svg_symbolSqrt3 = Math.sqrt(3), d3_svg_symbolTan30 = Math.tan(30 * d3_radians);
8377
- function d3_transition(groups, id) {
8628
+ d3_selectionPrototype.transition = function(name) {
8629
+ var id = d3_transitionInheritId || ++d3_transitionId, ns = d3_transitionNamespace(name), subgroups = [], subgroup, node, transition = d3_transitionInherit || {
8630
+ time: Date.now(),
8631
+ ease: d3_ease_cubicInOut,
8632
+ delay: 0,
8633
+ duration: 250
8634
+ };
8635
+ for (var j = -1, m = this.length; ++j < m; ) {
8636
+ subgroups.push(subgroup = []);
8637
+ for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
8638
+ if (node = group[i]) d3_transitionNode(node, i, ns, id, transition);
8639
+ subgroup.push(node);
8640
+ }
8641
+ }
8642
+ return d3_transition(subgroups, ns, id);
8643
+ };
8644
+ d3_selectionPrototype.interrupt = function(name) {
8645
+ return this.each(name == null ? d3_selection_interrupt : d3_selection_interruptNS(d3_transitionNamespace(name)));
8646
+ };
8647
+ var d3_selection_interrupt = d3_selection_interruptNS(d3_transitionNamespace());
8648
+ function d3_selection_interruptNS(ns) {
8649
+ return function() {
8650
+ var lock, activeId, active;
8651
+ if ((lock = this[ns]) && (active = lock[activeId = lock.active])) {
8652
+ active.timer.c = null;
8653
+ active.timer.t = NaN;
8654
+ if (--lock.count) delete lock[activeId]; else delete this[ns];
8655
+ lock.active += .5;
8656
+ active.event && active.event.interrupt.call(this, this.__data__, active.index);
8657
+ }
8658
+ };
8659
+ }
8660
+ function d3_transition(groups, ns, id) {
8378
8661
  d3_subclass(groups, d3_transitionPrototype);
8662
+ groups.namespace = ns;
8379
8663
  groups.id = id;
8380
8664
  return groups;
8381
8665
  }
@@ -8384,44 +8668,44 @@
8384
8668
  d3_transitionPrototype.empty = d3_selectionPrototype.empty;
8385
8669
  d3_transitionPrototype.node = d3_selectionPrototype.node;
8386
8670
  d3_transitionPrototype.size = d3_selectionPrototype.size;
8387
- d3.transition = function(selection) {
8388
- return arguments.length ? d3_transitionInheritId ? selection.transition() : selection : d3_selectionRoot.transition();
8671
+ d3.transition = function(selection, name) {
8672
+ return selection && selection.transition ? d3_transitionInheritId ? selection.transition(name) : selection : d3.selection().transition(selection);
8389
8673
  };
8390
8674
  d3.transition.prototype = d3_transitionPrototype;
8391
8675
  d3_transitionPrototype.select = function(selector) {
8392
- var id = this.id, subgroups = [], subgroup, subnode, node;
8676
+ var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnode, node;
8393
8677
  selector = d3_selection_selector(selector);
8394
8678
  for (var j = -1, m = this.length; ++j < m; ) {
8395
8679
  subgroups.push(subgroup = []);
8396
8680
  for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
8397
8681
  if ((node = group[i]) && (subnode = selector.call(node, node.__data__, i, j))) {
8398
8682
  if ("__data__" in node) subnode.__data__ = node.__data__;
8399
- d3_transitionNode(subnode, i, id, node.__transition__[id]);
8683
+ d3_transitionNode(subnode, i, ns, id, node[ns][id]);
8400
8684
  subgroup.push(subnode);
8401
8685
  } else {
8402
8686
  subgroup.push(null);
8403
8687
  }
8404
8688
  }
8405
8689
  }
8406
- return d3_transition(subgroups, id);
8690
+ return d3_transition(subgroups, ns, id);
8407
8691
  };
8408
8692
  d3_transitionPrototype.selectAll = function(selector) {
8409
- var id = this.id, subgroups = [], subgroup, subnodes, node, subnode, transition;
8693
+ var id = this.id, ns = this.namespace, subgroups = [], subgroup, subnodes, node, subnode, transition;
8410
8694
  selector = d3_selection_selectorAll(selector);
8411
8695
  for (var j = -1, m = this.length; ++j < m; ) {
8412
8696
  for (var group = this[j], i = -1, n = group.length; ++i < n; ) {
8413
8697
  if (node = group[i]) {
8414
- transition = node.__transition__[id];
8698
+ transition = node[ns][id];
8415
8699
  subnodes = selector.call(node, node.__data__, i, j);
8416
8700
  subgroups.push(subgroup = []);
8417
8701
  for (var k = -1, o = subnodes.length; ++k < o; ) {
8418
- if (subnode = subnodes[k]) d3_transitionNode(subnode, k, id, transition);
8702
+ if (subnode = subnodes[k]) d3_transitionNode(subnode, k, ns, id, transition);
8419
8703
  subgroup.push(subnode);
8420
8704
  }
8421
8705
  }
8422
8706
  }
8423
8707
  }
8424
- return d3_transition(subgroups, id);
8708
+ return d3_transition(subgroups, ns, id);
8425
8709
  };
8426
8710
  d3_transitionPrototype.filter = function(filter) {
8427
8711
  var subgroups = [], subgroup, group, node;
@@ -8434,23 +8718,23 @@
8434
8718
  }
8435
8719
  }
8436
8720
  }
8437
- return d3_transition(subgroups, this.id);
8721
+ return d3_transition(subgroups, this.namespace, this.id);
8438
8722
  };
8439
8723
  d3_transitionPrototype.tween = function(name, tween) {
8440
- var id = this.id;
8441
- if (arguments.length < 2) return this.node().__transition__[id].tween.get(name);
8724
+ var id = this.id, ns = this.namespace;
8725
+ if (arguments.length < 2) return this.node()[ns][id].tween.get(name);
8442
8726
  return d3_selection_each(this, tween == null ? function(node) {
8443
- node.__transition__[id].tween.remove(name);
8727
+ node[ns][id].tween.remove(name);
8444
8728
  } : function(node) {
8445
- node.__transition__[id].tween.set(name, tween);
8729
+ node[ns][id].tween.set(name, tween);
8446
8730
  });
8447
8731
  };
8448
8732
  function d3_transition_tween(groups, name, value, tween) {
8449
- var id = groups.id;
8733
+ var id = groups.id, ns = groups.namespace;
8450
8734
  return d3_selection_each(groups, typeof value === "function" ? function(node, i, j) {
8451
- node.__transition__[id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
8735
+ node[ns][id].tween.set(name, tween(value.call(node, node.__data__, i, j)));
8452
8736
  } : (value = tween(value), function(node) {
8453
- node.__transition__[id].tween.set(name, value);
8737
+ node[ns][id].tween.set(name, value);
8454
8738
  }));
8455
8739
  }
8456
8740
  d3_transitionPrototype.attr = function(nameNS, value) {
@@ -8514,7 +8798,7 @@
8514
8798
  }
8515
8799
  function styleString(b) {
8516
8800
  return b == null ? styleNull : (b += "", function() {
8517
- var a = d3_window.getComputedStyle(this, null).getPropertyValue(name), i;
8801
+ var a = d3_window(this).getComputedStyle(this, null).getPropertyValue(name), i;
8518
8802
  return a !== b && (i = d3_interpolate(a, b), function(t) {
8519
8803
  this.style.setProperty(name, i(t), priority);
8520
8804
  });
@@ -8525,7 +8809,7 @@
8525
8809
  d3_transitionPrototype.styleTween = function(name, tween, priority) {
8526
8810
  if (arguments.length < 3) priority = "";
8527
8811
  function styleTween(d, i) {
8528
- var f = tween.call(this, d, i, d3_window.getComputedStyle(this, null).getPropertyValue(name));
8812
+ var f = tween.call(this, d, i, d3_window(this).getComputedStyle(this, null).getPropertyValue(name));
8529
8813
  return f && function(t) {
8530
8814
  this.style.setProperty(name, f(t), priority);
8531
8815
  };
@@ -8542,119 +8826,155 @@
8542
8826
  };
8543
8827
  }
8544
8828
  d3_transitionPrototype.remove = function() {
8829
+ var ns = this.namespace;
8545
8830
  return this.each("end.transition", function() {
8546
8831
  var p;
8547
- if (this.__transition__.count < 2 && (p = this.parentNode)) p.removeChild(this);
8832
+ if (this[ns].count < 2 && (p = this.parentNode)) p.removeChild(this);
8548
8833
  });
8549
8834
  };
8550
8835
  d3_transitionPrototype.ease = function(value) {
8551
- var id = this.id;
8552
- if (arguments.length < 1) return this.node().__transition__[id].ease;
8836
+ var id = this.id, ns = this.namespace;
8837
+ if (arguments.length < 1) return this.node()[ns][id].ease;
8553
8838
  if (typeof value !== "function") value = d3.ease.apply(d3, arguments);
8554
8839
  return d3_selection_each(this, function(node) {
8555
- node.__transition__[id].ease = value;
8840
+ node[ns][id].ease = value;
8556
8841
  });
8557
8842
  };
8558
8843
  d3_transitionPrototype.delay = function(value) {
8559
- var id = this.id;
8844
+ var id = this.id, ns = this.namespace;
8845
+ if (arguments.length < 1) return this.node()[ns][id].delay;
8560
8846
  return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
8561
- node.__transition__[id].delay = +value.call(node, node.__data__, i, j);
8847
+ node[ns][id].delay = +value.call(node, node.__data__, i, j);
8562
8848
  } : (value = +value, function(node) {
8563
- node.__transition__[id].delay = value;
8849
+ node[ns][id].delay = value;
8564
8850
  }));
8565
8851
  };
8566
8852
  d3_transitionPrototype.duration = function(value) {
8567
- var id = this.id;
8853
+ var id = this.id, ns = this.namespace;
8854
+ if (arguments.length < 1) return this.node()[ns][id].duration;
8568
8855
  return d3_selection_each(this, typeof value === "function" ? function(node, i, j) {
8569
- node.__transition__[id].duration = Math.max(1, value.call(node, node.__data__, i, j));
8856
+ node[ns][id].duration = Math.max(1, value.call(node, node.__data__, i, j));
8570
8857
  } : (value = Math.max(1, value), function(node) {
8571
- node.__transition__[id].duration = value;
8858
+ node[ns][id].duration = value;
8572
8859
  }));
8573
8860
  };
8574
8861
  d3_transitionPrototype.each = function(type, listener) {
8575
- var id = this.id;
8862
+ var id = this.id, ns = this.namespace;
8576
8863
  if (arguments.length < 2) {
8577
8864
  var inherit = d3_transitionInherit, inheritId = d3_transitionInheritId;
8578
- d3_transitionInheritId = id;
8579
- d3_selection_each(this, function(node, i, j) {
8580
- d3_transitionInherit = node.__transition__[id];
8581
- type.call(node, node.__data__, i, j);
8582
- });
8583
- d3_transitionInherit = inherit;
8584
- d3_transitionInheritId = inheritId;
8865
+ try {
8866
+ d3_transitionInheritId = id;
8867
+ d3_selection_each(this, function(node, i, j) {
8868
+ d3_transitionInherit = node[ns][id];
8869
+ type.call(node, node.__data__, i, j);
8870
+ });
8871
+ } finally {
8872
+ d3_transitionInherit = inherit;
8873
+ d3_transitionInheritId = inheritId;
8874
+ }
8585
8875
  } else {
8586
8876
  d3_selection_each(this, function(node) {
8587
- var transition = node.__transition__[id];
8588
- (transition.event || (transition.event = d3.dispatch("start", "end"))).on(type, listener);
8877
+ var transition = node[ns][id];
8878
+ (transition.event || (transition.event = d3.dispatch("start", "end", "interrupt"))).on(type, listener);
8589
8879
  });
8590
8880
  }
8591
8881
  return this;
8592
8882
  };
8593
8883
  d3_transitionPrototype.transition = function() {
8594
- var id0 = this.id, id1 = ++d3_transitionId, subgroups = [], subgroup, group, node, transition;
8884
+ var id0 = this.id, id1 = ++d3_transitionId, ns = this.namespace, subgroups = [], subgroup, group, node, transition;
8595
8885
  for (var j = 0, m = this.length; j < m; j++) {
8596
8886
  subgroups.push(subgroup = []);
8597
8887
  for (var group = this[j], i = 0, n = group.length; i < n; i++) {
8598
8888
  if (node = group[i]) {
8599
- transition = Object.create(node.__transition__[id0]);
8600
- transition.delay += transition.duration;
8601
- d3_transitionNode(node, i, id1, transition);
8889
+ transition = node[ns][id0];
8890
+ d3_transitionNode(node, i, ns, id1, {
8891
+ time: transition.time,
8892
+ ease: transition.ease,
8893
+ delay: transition.delay + transition.duration,
8894
+ duration: transition.duration
8895
+ });
8602
8896
  }
8603
8897
  subgroup.push(node);
8604
8898
  }
8605
8899
  }
8606
- return d3_transition(subgroups, id1);
8900
+ return d3_transition(subgroups, ns, id1);
8607
8901
  };
8608
- function d3_transitionNode(node, i, id, inherit) {
8609
- var lock = node.__transition__ || (node.__transition__ = {
8902
+ function d3_transitionNamespace(name) {
8903
+ return name == null ? "__transition__" : "__transition_" + name + "__";
8904
+ }
8905
+ function d3_transitionNode(node, i, ns, id, inherit) {
8906
+ var lock = node[ns] || (node[ns] = {
8610
8907
  active: 0,
8611
8908
  count: 0
8612
- }), transition = lock[id];
8909
+ }), transition = lock[id], time, timer, duration, ease, tweens;
8910
+ function schedule(elapsed) {
8911
+ var delay = transition.delay;
8912
+ timer.t = delay + time;
8913
+ if (delay <= elapsed) return start(elapsed - delay);
8914
+ timer.c = start;
8915
+ }
8916
+ function start(elapsed) {
8917
+ var activeId = lock.active, active = lock[activeId];
8918
+ if (active) {
8919
+ active.timer.c = null;
8920
+ active.timer.t = NaN;
8921
+ --lock.count;
8922
+ delete lock[activeId];
8923
+ active.event && active.event.interrupt.call(node, node.__data__, active.index);
8924
+ }
8925
+ for (var cancelId in lock) {
8926
+ if (+cancelId < id) {
8927
+ var cancel = lock[cancelId];
8928
+ cancel.timer.c = null;
8929
+ cancel.timer.t = NaN;
8930
+ --lock.count;
8931
+ delete lock[cancelId];
8932
+ }
8933
+ }
8934
+ timer.c = tick;
8935
+ d3_timer(function() {
8936
+ if (timer.c && tick(elapsed || 1)) {
8937
+ timer.c = null;
8938
+ timer.t = NaN;
8939
+ }
8940
+ return 1;
8941
+ }, 0, time);
8942
+ lock.active = id;
8943
+ transition.event && transition.event.start.call(node, node.__data__, i);
8944
+ tweens = [];
8945
+ transition.tween.forEach(function(key, value) {
8946
+ if (value = value.call(node, node.__data__, i)) {
8947
+ tweens.push(value);
8948
+ }
8949
+ });
8950
+ ease = transition.ease;
8951
+ duration = transition.duration;
8952
+ }
8953
+ function tick(elapsed) {
8954
+ var t = elapsed / duration, e = ease(t), n = tweens.length;
8955
+ while (n > 0) {
8956
+ tweens[--n].call(node, e);
8957
+ }
8958
+ if (t >= 1) {
8959
+ transition.event && transition.event.end.call(node, node.__data__, i);
8960
+ if (--lock.count) delete lock[id]; else delete node[ns];
8961
+ return 1;
8962
+ }
8963
+ }
8613
8964
  if (!transition) {
8614
- var time = inherit.time;
8965
+ time = inherit.time;
8966
+ timer = d3_timer(schedule, 0, time);
8615
8967
  transition = lock[id] = {
8616
8968
  tween: new d3_Map(),
8617
8969
  time: time,
8618
- ease: inherit.ease,
8970
+ timer: timer,
8619
8971
  delay: inherit.delay,
8620
- duration: inherit.duration
8972
+ duration: inherit.duration,
8973
+ ease: inherit.ease,
8974
+ index: i
8621
8975
  };
8976
+ inherit = null;
8622
8977
  ++lock.count;
8623
- d3.timer(function(elapsed) {
8624
- var d = node.__data__, ease = transition.ease, delay = transition.delay, duration = transition.duration, timer = d3_timer_active, tweened = [];
8625
- timer.t = delay + time;
8626
- if (delay <= elapsed) return start(elapsed - delay);
8627
- timer.c = start;
8628
- function start(elapsed) {
8629
- if (lock.active > id) return stop();
8630
- lock.active = id;
8631
- transition.event && transition.event.start.call(node, d, i);
8632
- transition.tween.forEach(function(key, value) {
8633
- if (value = value.call(node, d, i)) {
8634
- tweened.push(value);
8635
- }
8636
- });
8637
- d3.timer(function() {
8638
- timer.c = tick(elapsed || 1) ? d3_true : tick;
8639
- return 1;
8640
- }, 0, time);
8641
- }
8642
- function tick(elapsed) {
8643
- if (lock.active !== id) return stop();
8644
- var t = elapsed / duration, e = ease(t), n = tweened.length;
8645
- while (n > 0) {
8646
- tweened[--n].call(node, e);
8647
- }
8648
- if (t >= 1) {
8649
- transition.event && transition.event.end.call(node, d, i);
8650
- return stop();
8651
- }
8652
- }
8653
- function stop() {
8654
- if (--lock.count) delete lock[id]; else delete node.__transition__;
8655
- return 1;
8656
- }
8657
- }, 0, time);
8658
8978
  }
8659
8979
  }
8660
8980
  d3.svg.axis = function() {
@@ -8663,61 +8983,25 @@
8663
8983
  g.each(function() {
8664
8984
  var g = d3.select(this);
8665
8985
  var scale0 = this.__chart__ || scale, scale1 = this.__chart__ = scale.copy();
8666
- var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick).style("opacity", 1), tickTransform;
8986
+ var ticks = tickValues == null ? scale1.ticks ? scale1.ticks.apply(scale1, tickArguments_) : scale1.domain() : tickValues, tickFormat = tickFormat_ == null ? scale1.tickFormat ? scale1.tickFormat.apply(scale1, tickArguments_) : d3_identity : tickFormat_, tick = g.selectAll(".tick").data(ticks, scale1), tickEnter = tick.enter().insert("g", ".domain").attr("class", "tick").style("opacity", ε), tickExit = d3.transition(tick.exit()).style("opacity", ε).remove(), tickUpdate = d3.transition(tick.order()).style("opacity", 1), tickSpacing = Math.max(innerTickSize, 0) + tickPadding, tickTransform;
8667
8987
  var range = d3_scaleRange(scale1), path = g.selectAll(".domain").data([ 0 ]), pathUpdate = (path.enter().append("path").attr("class", "domain"),
8668
8988
  d3.transition(path));
8669
8989
  tickEnter.append("line");
8670
8990
  tickEnter.append("text");
8671
- var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text");
8672
- switch (orient) {
8673
- case "bottom":
8674
- {
8675
- tickTransform = d3_svg_axisX;
8676
- lineEnter.attr("y2", innerTickSize);
8677
- textEnter.attr("y", Math.max(innerTickSize, 0) + tickPadding);
8678
- lineUpdate.attr("x2", 0).attr("y2", innerTickSize);
8679
- textUpdate.attr("x", 0).attr("y", Math.max(innerTickSize, 0) + tickPadding);
8680
- text.attr("dy", ".71em").style("text-anchor", "middle");
8681
- pathUpdate.attr("d", "M" + range[0] + "," + outerTickSize + "V0H" + range[1] + "V" + outerTickSize);
8682
- break;
8683
- }
8684
-
8685
- case "top":
8686
- {
8687
- tickTransform = d3_svg_axisX;
8688
- lineEnter.attr("y2", -innerTickSize);
8689
- textEnter.attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
8690
- lineUpdate.attr("x2", 0).attr("y2", -innerTickSize);
8691
- textUpdate.attr("x", 0).attr("y", -(Math.max(innerTickSize, 0) + tickPadding));
8692
- text.attr("dy", "0em").style("text-anchor", "middle");
8693
- pathUpdate.attr("d", "M" + range[0] + "," + -outerTickSize + "V0H" + range[1] + "V" + -outerTickSize);
8694
- break;
8695
- }
8696
-
8697
- case "left":
8698
- {
8699
- tickTransform = d3_svg_axisY;
8700
- lineEnter.attr("x2", -innerTickSize);
8701
- textEnter.attr("x", -(Math.max(innerTickSize, 0) + tickPadding));
8702
- lineUpdate.attr("x2", -innerTickSize).attr("y2", 0);
8703
- textUpdate.attr("x", -(Math.max(innerTickSize, 0) + tickPadding)).attr("y", 0);
8704
- text.attr("dy", ".32em").style("text-anchor", "end");
8705
- pathUpdate.attr("d", "M" + -outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + -outerTickSize);
8706
- break;
8707
- }
8708
-
8709
- case "right":
8710
- {
8711
- tickTransform = d3_svg_axisY;
8712
- lineEnter.attr("x2", innerTickSize);
8713
- textEnter.attr("x", Math.max(innerTickSize, 0) + tickPadding);
8714
- lineUpdate.attr("x2", innerTickSize).attr("y2", 0);
8715
- textUpdate.attr("x", Math.max(innerTickSize, 0) + tickPadding).attr("y", 0);
8716
- text.attr("dy", ".32em").style("text-anchor", "start");
8717
- pathUpdate.attr("d", "M" + outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + outerTickSize);
8718
- break;
8719
- }
8720
- }
8991
+ var lineEnter = tickEnter.select("line"), lineUpdate = tickUpdate.select("line"), text = tick.select("text").text(tickFormat), textEnter = tickEnter.select("text"), textUpdate = tickUpdate.select("text"), sign = orient === "top" || orient === "left" ? -1 : 1, x1, x2, y1, y2;
8992
+ if (orient === "bottom" || orient === "top") {
8993
+ tickTransform = d3_svg_axisX, x1 = "x", y1 = "y", x2 = "x2", y2 = "y2";
8994
+ text.attr("dy", sign < 0 ? "0em" : ".71em").style("text-anchor", "middle");
8995
+ pathUpdate.attr("d", "M" + range[0] + "," + sign * outerTickSize + "V0H" + range[1] + "V" + sign * outerTickSize);
8996
+ } else {
8997
+ tickTransform = d3_svg_axisY, x1 = "y", y1 = "x", x2 = "y2", y2 = "x2";
8998
+ text.attr("dy", ".32em").style("text-anchor", sign < 0 ? "end" : "start");
8999
+ pathUpdate.attr("d", "M" + sign * outerTickSize + "," + range[0] + "H0V" + range[1] + "H" + sign * outerTickSize);
9000
+ }
9001
+ lineEnter.attr(y2, sign * innerTickSize);
9002
+ textEnter.attr(y1, sign * tickSpacing);
9003
+ lineUpdate.attr(x2, 0).attr(y2, sign * innerTickSize);
9004
+ textUpdate.attr(x1, 0).attr(y1, sign * tickSpacing);
8721
9005
  if (scale1.rangeBand) {
8722
9006
  var x = scale1, dx = x.rangeBand() / 2;
8723
9007
  scale0 = scale1 = function(d) {
@@ -8726,10 +9010,10 @@
8726
9010
  } else if (scale0.rangeBand) {
8727
9011
  scale0 = scale1;
8728
9012
  } else {
8729
- tickExit.call(tickTransform, scale1);
9013
+ tickExit.call(tickTransform, scale1, scale0);
8730
9014
  }
8731
- tickEnter.call(tickTransform, scale0);
8732
- tickUpdate.call(tickTransform, scale1);
9015
+ tickEnter.call(tickTransform, scale0, scale1);
9016
+ tickUpdate.call(tickTransform, scale1, scale1);
8733
9017
  });
8734
9018
  }
8735
9019
  axis.scale = function(x) {
@@ -8744,7 +9028,7 @@
8744
9028
  };
8745
9029
  axis.ticks = function() {
8746
9030
  if (!arguments.length) return tickArguments_;
8747
- tickArguments_ = arguments;
9031
+ tickArguments_ = d3_array(arguments);
8748
9032
  return axis;
8749
9033
  };
8750
9034
  axis.tickValues = function(x) {
@@ -8790,14 +9074,16 @@
8790
9074
  bottom: 1,
8791
9075
  left: 1
8792
9076
  };
8793
- function d3_svg_axisX(selection, x) {
9077
+ function d3_svg_axisX(selection, x0, x1) {
8794
9078
  selection.attr("transform", function(d) {
8795
- return "translate(" + x(d) + ",0)";
9079
+ var v0 = x0(d);
9080
+ return "translate(" + (isFinite(v0) ? v0 : x1(d)) + ",0)";
8796
9081
  });
8797
9082
  }
8798
- function d3_svg_axisY(selection, y) {
9083
+ function d3_svg_axisY(selection, y0, y1) {
8799
9084
  selection.attr("transform", function(d) {
8800
- return "translate(0," + y(d) + ")";
9085
+ var v0 = y0(d);
9086
+ return "translate(0," + (isFinite(v0) ? v0 : y1(d)) + ")";
8801
9087
  });
8802
9088
  }
8803
9089
  d3.svg.brush = function() {
@@ -8902,8 +9188,8 @@
8902
9188
  g.selectAll(".extent,.e>rect,.w>rect").attr("height", yExtent[1] - yExtent[0]);
8903
9189
  }
8904
9190
  function brushstart() {
8905
- var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(), center, origin = d3.mouse(target), offset;
8906
- var w = d3.select(d3_window).on("keydown.brush", keydown).on("keyup.brush", keyup);
9191
+ var target = this, eventTarget = d3.select(d3.event.target), event_ = event.of(target, arguments), g = d3.select(target), resizing = eventTarget.datum(), resizingX = !/^(n|s)$/.test(resizing) && x, resizingY = !/^(e|w)$/.test(resizing) && y, dragging = eventTarget.classed("extent"), dragRestore = d3_event_dragSuppress(target), center, origin = d3.mouse(target), offset;
9192
+ var w = d3.select(d3_window(target)).on("keydown.brush", keydown).on("keyup.brush", keyup);
8907
9193
  if (d3.event.changedTouches) {
8908
9194
  w.on("touchmove.brush", brushmove).on("touchend.brush", brushend);
8909
9195
  } else {
@@ -9213,7 +9499,7 @@
9213
9499
  } ], [ "%Y", d3_true ] ]);
9214
9500
  var d3_time_scaleMilliseconds = {
9215
9501
  range: function(start, stop, step) {
9216
- return d3.range(+start, +stop, step).map(d3_time_scaleDate);
9502
+ return d3.range(Math.ceil(start / step) * step, +stop, step).map(d3_time_scaleDate);
9217
9503
  },
9218
9504
  floor: d3_identity,
9219
9505
  ceil: d3_identity
@@ -9264,11 +9550,5 @@
9264
9550
  d3.xml = d3_xhrType(function(request) {
9265
9551
  return request.responseXML;
9266
9552
  });
9267
- if (typeof define === "function" && define.amd) {
9268
- define(d3);
9269
- } else if (typeof module === "object" && module.exports) {
9270
- module.exports = d3;
9271
- } else {
9272
- this.d3 = d3;
9273
- }
9553
+ if (typeof define === "function" && define.amd) this.d3 = d3, define(d3); else if (typeof module === "object" && module.exports) module.exports = d3; else this.d3 = d3;
9274
9554
  }();