summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@jameslopez.es>2016-02-22 16:37:03 +0100
committerJames Lopez <james@jameslopez.es>2016-02-22 16:37:03 +0100
commitf96abe4b12da8c25d790f347afd58f1dbd4ac960 (patch)
tree9e13a7c3217d7596e8dc99abdb1473a1b60c38c5
parentc3fe7388caa1bd49f25434b8109c4a1ab42d5b27 (diff)
parent5803a5308f5a7a84cc84dd0a7d8a89565bae0717 (diff)
downloadgitlab-ce-f96abe4b12da8c25d790f347afd58f1dbd4ac960.tar.gz
Merge branch 'master' of gitlab.com:gitlab-org/gitlab-ce into feature/slack-notifications-on-ci
# Conflicts: # .gitlab-ci.yml
-rw-r--r--.gitlab-ci.yml66
-rw-r--r--.ruby-version2
-rw-r--r--CHANGELOG19
-rw-r--r--Gemfile4
-rw-r--r--Gemfile.lock18
-rw-r--r--README.md2
-rw-r--r--VERSION2
-rw-r--r--app/assets/images/emoji.pngbin832902 -> 263533 bytes
-rw-r--r--app/assets/images/emoji@2x.pngbin0 -> 690504 bytes
-rw-r--r--app/assets/javascripts/issuable_context.js.coffee2
-rw-r--r--app/assets/javascripts/merge_request_tabs.js.coffee8
-rw-r--r--app/assets/javascripts/milestone.js.coffee10
-rw-r--r--app/assets/stylesheets/framework/gitlab-theme.scss16
-rw-r--r--app/assets/stylesheets/pages/emojis.scss3002
-rw-r--r--app/assets/stylesheets/pages/issues.scss2
-rw-r--r--app/assets/stylesheets/pages/labels.scss2
-rw-r--r--app/assets/stylesheets/pages/merge_requests.scss2
-rw-r--r--app/assets/stylesheets/pages/milestone.scss57
-rw-r--r--app/assets/stylesheets/pages/projects.scss19
-rw-r--r--app/assets/stylesheets/pages/todos.scss124
-rw-r--r--app/controllers/admin/labels_controller.rb2
-rw-r--r--app/controllers/application_controller.rb9
-rw-r--r--app/controllers/concerns/creates_commit.rb53
-rw-r--r--app/controllers/concerns/issues_action.rb2
-rw-r--r--app/controllers/concerns/merge_requests_action.rb2
-rw-r--r--app/controllers/dashboard/todos_controller.rb35
-rw-r--r--app/controllers/omniauth_callbacks_controller.rb54
-rw-r--r--app/controllers/projects/blob_controller.rb2
-rw-r--r--app/controllers/projects/builds_controller.rb6
-rw-r--r--app/controllers/projects/commit_controller.rb44
-rw-r--r--app/controllers/projects/forks_controller.rb2
-rw-r--r--app/controllers/projects/issues_controller.rb1
-rw-r--r--app/controllers/projects/labels_controller.rb2
-rw-r--r--app/controllers/projects/merge_requests_controller.rb4
-rw-r--r--app/controllers/projects/milestones_controller.rb1
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/finders/issuable_finder.rb20
-rw-r--r--app/finders/todos_finder.rb129
-rw-r--r--app/helpers/application_helper.rb6
-rw-r--r--app/helpers/blob_helper.rb4
-rw-r--r--app/helpers/commits_helper.rb31
-rw-r--r--app/helpers/diff_helper.rb2
-rw-r--r--app/helpers/nav_helper.rb1
-rw-r--r--app/helpers/todos_helper.rb87
-rw-r--r--app/helpers/tree_helper.rb3
-rw-r--r--app/models/blob.rb34
-rw-r--r--app/models/ci/build.rb52
-rw-r--r--app/models/ci/runner.rb6
-rw-r--r--app/models/commit.rb38
-rw-r--r--app/models/commit_status.rb16
-rw-r--r--app/models/label.rb19
-rw-r--r--app/models/merge_request.rb9
-rw-r--r--app/models/milestone.rb14
-rw-r--r--app/models/note.rb5
-rw-r--r--app/models/project_team.rb2
-rw-r--r--app/models/repository.rb64
-rw-r--r--app/models/todo.rb53
-rw-r--r--app/models/user.rb2
-rw-r--r--app/services/base_service.rb4
-rw-r--r--app/services/ci/create_builds_service.rb1
-rw-r--r--app/services/commits/revert_service.rb58
-rw-r--r--app/services/issuable_base_service.rb15
-rw-r--r--app/services/issues/close_service.rb2
-rw-r--r--app/services/issues/create_service.rb1
-rw-r--r--app/services/issues/update_service.rb12
-rw-r--r--app/services/merge_requests/build_service.rb2
-rw-r--r--app/services/merge_requests/close_service.rb1
-rw-r--r--app/services/merge_requests/create_service.rb3
-rw-r--r--app/services/merge_requests/merge_service.rb3
-rw-r--r--app/services/merge_requests/merge_when_build_succeeds_service.rb15
-rw-r--r--app/services/merge_requests/update_service.rb12
-rw-r--r--app/services/notes/create_service.rb1
-rw-r--r--app/services/notes/post_process_service.rb2
-rw-r--r--app/services/notes/update_service.rb4
-rw-r--r--app/services/todo_service.rb170
-rw-r--r--app/views/admin/labels/_form.html.haml4
-rw-r--r--app/views/admin/labels/_label.html.haml10
-rw-r--r--app/views/dashboard/projects/_zero_authorized_projects.html.haml4
-rw-r--r--app/views/dashboard/todos/_todo.html.haml21
-rw-r--r--app/views/dashboard/todos/index.html.haml62
-rw-r--r--app/views/layouts/header/_default.html.haml6
-rw-r--r--app/views/layouts/nav/_dashboard.html.haml18
-rw-r--r--app/views/projects/_home_panel.html.haml11
-rw-r--r--app/views/projects/blob/_blob.html.haml12
-rw-r--r--app/views/projects/blob/_image.html.haml2
-rw-r--r--app/views/projects/builds/show.html.haml78
-rw-r--r--app/views/projects/commit/_commit_box.html.haml2
-rw-r--r--app/views/projects/commit/_revert.html.haml31
-rw-r--r--app/views/projects/commit/show.html.haml2
-rw-r--r--app/views/projects/diffs/_text_file.html.haml4
-rw-r--r--app/views/projects/edit.html.haml4
-rw-r--r--app/views/projects/issues/_issue.html.haml12
-rw-r--r--app/views/projects/labels/_form.html.haml4
-rw-r--r--app/views/projects/labels/_label.html.haml3
-rw-r--r--app/views/projects/merge_requests/_merge_request.html.haml12
-rw-r--r--app/views/projects/merge_requests/_show.html.haml2
-rw-r--r--app/views/projects/merge_requests/show/_mr_title.html.haml2
-rw-r--r--app/views/projects/merge_requests/widget/_merged.html.haml14
-rw-r--r--app/views/projects/merge_requests/widget/_merged_buttons.haml11
-rw-r--r--app/views/projects/milestones/_issue.html.haml13
-rw-r--r--app/views/projects/milestones/_issues.html.haml5
-rw-r--r--app/views/projects/milestones/_merge_requests.html.haml1
-rw-r--r--app/views/projects/milestones/show.html.haml87
-rw-r--r--app/views/shared/_label_row.html.haml4
-rw-r--r--app/views/shared/_project_limit.html.haml2
-rw-r--r--app/views/shared/issuable/_filter.html.haml4
-rw-r--r--app/views/shared/projects/_project.html.haml2
-rw-r--r--config/application.rb8
-rw-r--r--config/gitlab.yml.example11
-rw-r--r--config/initializers/2_app.rb4
-rw-r--r--config/initializers/sentry.rb1
-rw-r--r--config/routes.rb8
-rw-r--r--config/sidekiq.yml.example2
-rw-r--r--db/migrate/20160129155512_add_merge_commit_sha_to_merge_requests.rb5
-rw-r--r--db/migrate/20160202091601_add_erasable_to_ci_build.rb6
-rw-r--r--db/migrate/20160212123307_create_tasks.rb14
-rw-r--r--db/migrate/20160217100506_add_description_to_label.rb5
-rw-r--r--db/migrate/20160217174422_add_note_to_tasks.rb5
-rw-r--r--db/migrate/20160220123949_rename_tasks_to_todos.rb5
-rw-r--r--db/schema.rb29
-rw-r--r--doc/api/README.md1
-rw-r--r--doc/api/builds.md88
-rw-r--r--doc/api/runners.md322
-rw-r--r--doc/ci/api/runners.md6
-rw-r--r--doc/ci/quick_start/README.md15
-rw-r--r--doc/ci/yaml/README.md28
-rw-r--r--doc/development/ci_setup.md2
-rw-r--r--doc/install/installation.md8
-rw-r--r--doc/install/requirements.md2
-rw-r--r--doc/project_services/builds_emails.md16
-rw-r--r--doc/project_services/img/builds_emails_service.pngbin0 -> 41222 bytes
-rw-r--r--doc/project_services/project_services.md2
-rw-r--r--doc/update/8.3-to-8.4.md21
-rw-r--r--doc/workflow/README.md1
-rw-r--r--doc/workflow/img/revert_changes_commit.pngbin0 -> 360098 bytes
-rw-r--r--doc/workflow/img/revert_changes_commit_modal.pngbin0 -> 327932 bytes
-rw-r--r--doc/workflow/img/revert_changes_mr.pngbin0 -> 367881 bytes
-rw-r--r--doc/workflow/img/revert_changes_mr_modal.pngbin0 -> 335010 bytes
-rw-r--r--doc/workflow/img/web_editor_new_branch_dropdown.pngbin0 -> 34233 bytes
-rw-r--r--doc/workflow/img/web_editor_new_branch_page.pngbin0 -> 21618 bytes
-rw-r--r--doc/workflow/img/web_editor_new_directory_dialog.pngbin0 -> 26145 bytes
-rw-r--r--doc/workflow/img/web_editor_new_directory_dropdown.pngbin0 -> 33714 bytes
-rw-r--r--doc/workflow/img/web_editor_new_file_dropdown.pngbin0 -> 34978 bytes
-rw-r--r--doc/workflow/img/web_editor_new_file_editor.pngbin0 -> 128658 bytes
-rw-r--r--doc/workflow/img/web_editor_new_push_widget.pngbin0 -> 11220 bytes
-rw-r--r--doc/workflow/img/web_editor_new_tag_dropdown.pngbin0 -> 33753 bytes
-rw-r--r--doc/workflow/img/web_editor_new_tag_page.pngbin0 -> 75536 bytes
-rw-r--r--doc/workflow/img/web_editor_start_new_merge_request.pngbin0 -> 14352 bytes
-rw-r--r--doc/workflow/img/web_editor_upload_file_dialog.pngbin0 -> 46219 bytes
-rw-r--r--doc/workflow/img/web_editor_upload_file_dropdown.pngbin0 -> 34835 bytes
-rw-r--r--doc/workflow/revert_changes.md64
-rw-r--r--doc/workflow/web_editor.md126
-rw-r--r--doc/workflow/web_editor/edit_file.pngbin89039 -> 0 bytes
-rw-r--r--doc/workflow/web_editor/empty_project.pngbin122296 -> 0 bytes
-rw-r--r--doc/workflow/web_editor/new_file.pngbin85526 -> 0 bytes
-rw-r--r--doc/workflow/web_editor/show_file.pngbin111479 -> 0 bytes
-rw-r--r--features/dashboard/todos.feature38
-rw-r--r--features/project/builds/summary.feature9
-rw-r--r--features/project/commits/revert.feature28
-rw-r--r--features/project/fork.feature7
-rw-r--r--features/project/merge_requests/revert.feature30
-rw-r--r--features/project/milestone.feature23
-rw-r--r--features/steps/dashboard/todos.rb128
-rw-r--r--features/steps/project/builds/summary.rb20
-rw-r--r--features/steps/project/commits/revert.rb40
-rw-r--r--features/steps/project/fork.rb6
-rw-r--r--features/steps/project/issues/issues.rb4
-rw-r--r--features/steps/project/merge_requests.rb4
-rw-r--r--features/steps/project/merge_requests/revert.rb56
-rw-r--r--features/steps/project/project_milestone.rb53
-rw-r--r--features/steps/shared/builds.rb4
-rw-r--r--features/steps/shared/paths.rb4
-rw-r--r--fixtures/emojis/aliases.json138
-rwxr-xr-xfixtures/emojis/generate_aliases.rb18
-rw-r--r--fixtures/emojis/index.json20099
-rw-r--r--lib/api/api.rb1
-rw-r--r--lib/api/builds.rb46
-rw-r--r--lib/api/entities.rb23
-rw-r--r--lib/api/runners.rb175
-rw-r--r--lib/banzai/filter/emoji_filter.rb3
-rw-r--r--lib/ci/api/builds.rb6
-rw-r--r--lib/ci/status.rb4
-rw-r--r--lib/gitlab/ldap/user.rb4
-rw-r--r--lib/gitlab/o_auth/user.rb13
-rw-r--r--lib/gitlab/saml/user.rb47
-rw-r--r--lib/tasks/cache.rake18
-rw-r--r--spec/controllers/commit_controller_spec.rb49
-rw-r--r--spec/controllers/profiles/keys_controller_spec.rb (renamed from spec/controllers/profile_keys_controller_spec.rb)0
-rw-r--r--spec/controllers/projects/blame_controller_spec.rb (renamed from spec/controllers/blame_controller_spec.rb)0
-rw-r--r--spec/controllers/projects/branches_controller_spec.rb (renamed from spec/controllers/branches_controller_spec.rb)0
-rw-r--r--spec/controllers/projects/commits_controller_spec.rb (renamed from spec/controllers/commits_controller_spec.rb)0
-rw-r--r--spec/controllers/sent_notifications_controller_spec.rb (renamed from spec/controllers/sent_notification_controller_spec.rb)0
-rw-r--r--spec/factories/ci/builds.rb35
-rw-r--r--spec/factories/ci/runners.rb10
-rw-r--r--spec/factories/merge_requests.rb1
-rw-r--r--spec/factories/todos.rb34
-rw-r--r--spec/features/runners_spec.rb10
-rw-r--r--spec/helpers/gitlab_markdown_helper_spec.rb2
-rw-r--r--spec/lib/banzai/filter/emoji_filter_spec.rb4
-rw-r--r--spec/lib/ci/status_spec.rb41
-rw-r--r--spec/lib/gitlab/o_auth/user_spec.rb26
-rw-r--r--spec/lib/gitlab/saml/user_spec.rb271
-rw-r--r--spec/models/blob_spec.rb81
-rw-r--r--spec/models/build_spec.rb133
-rw-r--r--spec/models/ci/commit_spec.rb29
-rw-r--r--spec/models/ci/runner_spec.rb14
-rw-r--r--spec/models/merge_request_spec.rb1
-rw-r--r--spec/models/note_spec.rb14
-rw-r--r--spec/models/project_spec.rb4
-rw-r--r--spec/models/project_team_spec.rb26
-rw-r--r--spec/models/repository_spec.rb97
-rw-r--r--spec/models/todo_spec.rb.rb89
-rw-r--r--spec/models/user_spec.rb1
-rw-r--r--spec/requests/api/builds_spec.rb162
-rw-r--r--spec/requests/api/runners_spec.rb464
-rw-r--r--spec/requests/ci/api/builds_spec.rb44
-rw-r--r--spec/services/ci/create_builds_service_spec.rb28
-rw-r--r--spec/services/issues/close_service_spec.rb6
-rw-r--r--spec/services/issues/create_service_spec.rb23
-rw-r--r--spec/services/issues/update_service_spec.rb69
-rw-r--r--spec/services/merge_requests/close_service_spec.rb5
-rw-r--r--spec/services/merge_requests/create_service_spec.rb42
-rw-r--r--spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb66
-rw-r--r--spec/services/merge_requests/update_service_spec.rb79
-rw-r--r--spec/services/notes/post_process_service_spec.rb1
-rw-r--r--spec/services/notes/update_service_spec.rb45
-rw-r--r--spec/services/todo_service_spec.rb264
227 files changed, 25421 insertions, 3633 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index cc711bf9d6b..c1b753f25d5 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,4 +1,4 @@
-image: "ruby:2.2"
+image: "ruby:2.1"
services:
- mysql:latest
@@ -6,7 +6,7 @@ services:
- redis:latest
cache:
- key: "ruby22"
+ key: "ruby21"
paths:
- vendor
@@ -160,9 +160,9 @@ bundler:audit:
- mysql
allow_failure: true
-## Ruby 2.1 jobs
+# Ruby 2.1 jobs
-spec:feature:ruby21:
+spec:feature:ruby22:
stage: test
image: ruby:2.1
only:
@@ -171,82 +171,82 @@ spec:feature:ruby21:
- RAILS_ENV=test bundle exec rake assets:precompile 2>/dev/null
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:feature
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spec:api:ruby21:
+spec:api:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:api
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spec:models:ruby21:
+spec:models:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:models
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spec:lib:ruby21:
+spec:lib:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:lib
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spec:services:ruby21:
+spec:services:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:services
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spec:benchmark:ruby21:
- stage: test
- image: ruby:2.1
+spec:benchmark:ruby22:
+ stage: test
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test bundle exec rake spec:benchmark
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
@@ -254,60 +254,60 @@ spec:benchmark:ruby21:
- mysql
allow_failure: true
-spec:other:ruby21:
+spec:other:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spec:other
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spinach:project:half:ruby21:
+spinach:project:half:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project:half
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spinach:project:rest:ruby21:
+spinach:project:rest:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:project:rest
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
- ruby
- mysql
-spinach:other:ruby21:
+spinach:other:ruby22:
stage: test
- image: ruby:2.1
+ image: ruby:2.2
only:
- master
script:
- RAILS_ENV=test SIMPLECOV=true bundle exec rake spinach:other
cache:
- key: "ruby21"
+ key: "ruby22"
paths:
- vendor
tags:
diff --git a/.ruby-version b/.ruby-version
index 530cdd91a20..ebf14b46981 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-2.2.4
+2.1.8
diff --git a/CHANGELOG b/CHANGELOG
index 08a9b8df4a0..7fcb4628058 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,8 @@
Please view this file on the master branch, on stable branches it's out of date.
-v 8.5.0 (unreleased)
+v 8.6.0 (unreleased)
+
+v 8.5.0
- Fix duplicate "me" in tooltip of the "thumbsup" awards Emoji (Stan Hu)
- Cache various Repository methods to improve performance (Yorick Peterse)
- Fix duplicated branch creation/deletion Web hooks/service notifications when using Web UI (Stan Hu)
@@ -46,23 +48,38 @@ v 8.5.0 (unreleased)
- Deprecate API "merge_request/:merge_request_id/comments". Use "merge_requests/:merge_request_id/notes" instead
- Deprecate API "merge_request/:merge_request_id/...". Use "merge_requests/:merge_request_id/..." instead
- Prevent parse error when name of project ends with .atom and prevent path issues
+ - Discover branches for commit statuses ref-less when doing merge when succeeded
- Mark inline difference between old and new paths when a file is renamed
- Support Akismet spam checking for creation of issues via API (Stan Hu)
- API: Allow to set or update a merge-request's milestone (Kirill Skachkov)
- Improve UI consistency between projects and groups lists
- Add sort dropdown to dashboard projects page
- Fixed logo animation on Safari (Roman Rott)
+ - Fix Merge When Succeeded when multiple stages
- Hide remove source branch button when the MR is merged but new commits are pushed (Zeger-Jan van de Weg)
- In seach autocomplete show only groups and projects you are member of
- Don't process cross-reference notes from forks
- Fix: init.d script not working on OS X
- Faster snippet search
+ - Added API to download build artifacts
- Title for milestones should be unique (Zeger-Jan van de Weg)
- Validate correctness of maximum attachment size application setting
- Replaces "Create merge request" link with one to the "Merge Request" when one exists
- Fix CI builds badge, add a new link to builds badge, deprecate the old one
- Fix broken link to project in build notification emails
- Ability to see and sort on vote count from Issues and MR lists
+ - Fix builds scheduler when first build in stage was allowed to fail
+ - User project limit is reached notice is hidden if the projects limit is zero
+ - Add API support for managing runners and project's runners
+ - Allow SAML users to login with no previous account without having to allow
+ all Omniauth providers to do so.
+ - Allow existing users to auto link their SAML credentials by logging in via SAML
+ - Make it possible to erase a build (trace, artifacts) using UI and API
+ - Ability to revert changes from a Merge Request or Commit
+ - Emoji comment on diffs are not award emoji
+ - Add label description (Nuttanart Pornprasitsakul)
+ - Show label row when filtering issues or merge requests by label (Nuttanart Pornprasitsakul)
+ - Add Todos
v 8.4.4
- Update omniauth-saml gem to 1.4.2
diff --git a/Gemfile b/Gemfile
index 6dcc9b0dd80..1602ef871c7 100644
--- a/Gemfile
+++ b/Gemfile
@@ -50,7 +50,7 @@ gem "browser", '~> 1.0.0'
# Extracting information from a git repository
# Provide access to Gitlab::Git library
-gem "gitlab_git", '~> 8.1'
+gem "gitlab_git", '~> 8.2'
# LDAP Auth
# GitLab fork with several improvements to original library. For full list of changes
@@ -204,7 +204,7 @@ gem 'jquery-turbolinks', '~> 2.1.0'
gem 'addressable', '~> 2.3.8'
gem 'bootstrap-sass', '~> 3.3.0'
gem 'font-awesome-rails', '~> 4.2'
-gem 'gitlab_emoji', '~> 0.2.0'
+gem 'gitlab_emoji', '~> 0.3.0'
gem 'gon', '~> 6.0.1'
gem 'jquery-atwho-rails', '~> 1.3.2'
gem 'jquery-rails', '~> 4.0.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index cebd79843b1..4681adf2bd0 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -336,11 +336,11 @@ GEM
ruby-progressbar (~> 1.4)
gemnasium-gitlab-service (0.2.6)
rugged (~> 0.21)
- gemojione (2.1.1)
+ gemojione (2.2.1)
json
get_process_mem (0.2.0)
gherkin-ruby (0.3.2)
- github-linguist (4.7.3)
+ github-linguist (4.7.5)
charlock_holmes (~> 0.7.3)
escape_utils (~> 1.1.0)
mime-types (>= 1.19)
@@ -355,13 +355,13 @@ GEM
diff-lcs (~> 1.1)
mime-types (~> 1.15)
posix-spawn (~> 0.3)
- gitlab_emoji (0.2.0)
- gemojione (~> 2.1)
- gitlab_git (8.1.0)
+ gitlab_emoji (0.3.1)
+ gemojione (~> 2.2, >= 2.2.1)
+ gitlab_git (8.2.0)
activesupport (~> 4.0)
charlock_holmes (~> 0.7.3)
github-linguist (~> 4.7.0)
- rugged (~> 0.23.3)
+ rugged (~> 0.24.0b13)
gitlab_meta (7.0)
gitlab_omniauth-ldap (1.2.1)
net-ldap (~> 0.9)
@@ -700,7 +700,7 @@ GEM
rubyntlm (0.5.2)
rubypants (0.2.0)
rufus-scheduler (3.1.10)
- rugged (0.23.3)
+ rugged (0.24.0b13)
safe_yaml (1.0.4)
sanitize (2.1.0)
nokogiri (>= 1.4.4)
@@ -931,8 +931,8 @@ DEPENDENCIES
github-linguist (~> 4.7.0)
github-markup (~> 1.3.1)
gitlab-flowdock-git-hook (~> 1.0.1)
- gitlab_emoji (~> 0.2.0)
- gitlab_git (~> 8.1)
+ gitlab_emoji (~> 0.3.0)
+ gitlab_git (~> 8.2)
gitlab_meta (= 7.0)
gitlab_omniauth-ldap (~> 1.2.1)
gollum-lib (~> 4.1.0)
diff --git a/README.md b/README.md
index 22dbf841bdc..3ec1d4a776c 100644
--- a/README.md
+++ b/README.md
@@ -67,7 +67,7 @@ Instructions on how to start GitLab and how to run the tests can be found in the
GitLab is a Ruby on Rails application that runs on the following software:
- Ubuntu/Debian/CentOS/RHEL
-- Ruby (MRI) 2.1 or 2.2
+- Ruby (MRI) 2.1
- Git 1.7.10+
- Redis 2.8+
- MySQL or PostgreSQL
diff --git a/VERSION b/VERSION
index ffec98087cb..cac7d91adda 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-8.5.0-pre
+8.6.0-pre
diff --git a/app/assets/images/emoji.png b/app/assets/images/emoji.png
index a8ad7b6eab6..1e7cf79ea45 100644
--- a/app/assets/images/emoji.png
+++ b/app/assets/images/emoji.png
Binary files differ
diff --git a/app/assets/images/emoji@2x.png b/app/assets/images/emoji@2x.png
new file mode 100644
index 00000000000..74d67f7520d
--- /dev/null
+++ b/app/assets/images/emoji@2x.png
Binary files differ
diff --git a/app/assets/javascripts/issuable_context.js.coffee b/app/assets/javascripts/issuable_context.js.coffee
index d17b1123418..e52b73f94f6 100644
--- a/app/assets/javascripts/issuable_context.js.coffee
+++ b/app/assets/javascripts/issuable_context.js.coffee
@@ -15,3 +15,5 @@ class @IssuableContext
block.find('.selectbox').show()
block.find('.value').hide()
block.find('.js-select2').select2("open")
+
+ $(".right-sidebar").niceScroll()
diff --git a/app/assets/javascripts/merge_request_tabs.js.coffee b/app/assets/javascripts/merge_request_tabs.js.coffee
index b10e1db7f3f..6f569f9e1aa 100644
--- a/app/assets/javascripts/merge_request_tabs.js.coffee
+++ b/app/assets/javascripts/merge_request_tabs.js.coffee
@@ -146,6 +146,7 @@ class @MergeRequestTabs
success: (data) =>
document.querySelector("div#diffs").innerHTML = data.html
$('div#diffs .js-syntax-highlight').syntaxHighlight()
+ @expandViewContainer() if @diffViewType() is 'parallel'
@diffsLoaded = true
@scrollToElement("#diffs")
@@ -177,3 +178,10 @@ class @MergeRequestTabs
options = $.extend({}, defaults, options)
$.ajax(options)
+
+ # Returns diff view type
+ diffViewType: ->
+ $('.inline-parallel-buttons a.active').data('view-type')
+
+ expandViewContainer: ->
+ $('.container-fluid').removeClass('container-limited')
diff --git a/app/assets/javascripts/milestone.js.coffee b/app/assets/javascripts/milestone.js.coffee
index d644d50b669..31f6c6d3d47 100644
--- a/app/assets/javascripts/milestone.js.coffee
+++ b/app/assets/javascripts/milestone.js.coffee
@@ -64,6 +64,7 @@ class @Milestone
constructor: ->
@bindIssuesSorting()
@bindMergeRequestSorting()
+ @bindTabsSwitching
bindIssuesSorting: ->
$("#issues-list-unassigned, #issues-list-ongoing, #issues-list-closed").sortable(
@@ -122,3 +123,12 @@ class @Milestone
Milestone.updateMergeRequest(ui.item, merge_request_url, data)
).disableSelection()
+
+ bindMergeRequestSorting: ->
+ $('a[data-toggle="tab"]').on 'show.bs.tab', (e) ->
+ currentTabClass = $(e.target).data('show')
+ previousTabClass = $(e.relatedTarget).data('show')
+
+ $(previousTabClass).hide()
+ $(currentTabClass).removeClass('hidden')
+ $(currentTabClass).show()
diff --git a/app/assets/stylesheets/framework/gitlab-theme.scss b/app/assets/stylesheets/framework/gitlab-theme.scss
index 0f68582e447..12cef6f8ea1 100644
--- a/app/assets/stylesheets/framework/gitlab-theme.scss
+++ b/app/assets/stylesheets/framework/gitlab-theme.scss
@@ -117,20 +117,4 @@ body {
&.ui_violet {
@include gitlab-theme(#9988CC, $theme-violet, #443366, #332255);
}
-}
-
-::-webkit-scrollbar{
- width: 3px;
-}
-
-::-webkit-scrollbar-thumb{
- background-color:$theme-charcoal; border-radius: 0;
-}
-
-::-webkit-scrollbar-thumb:hover{
- background-color:$theme-charcoal;
-}
-
-::-webkit-scrollbar-track{
- background-color:#FFF;
} \ No newline at end of file
diff --git a/app/assets/stylesheets/pages/emojis.scss b/app/assets/stylesheets/pages/emojis.scss
index 89a94c5a780..6c721b514f8 100644
--- a/app/assets/stylesheets/pages/emojis.scss
+++ b/app/assets/stylesheets/pages/emojis.scss
@@ -1,1272 +1,1736 @@
-/*
-File is generated by https://github.com/jakesgordon/sprite-factory and midified manualy
-The source: gemojione gem.
-*/
+.emoji-0023-20E3 { background-position: 0px 0px; }
+.emoji-002A-20E3 { background-position: -20px 0px; }
+.emoji-0030-20E3 { background-position: 0px -20px; }
+.emoji-0031-20E3 { background-position: -20px -20px; }
+.emoji-0032-20E3 { background-position: -40px 0px; }
+.emoji-0033-20E3 { background-position: -40px -20px; }
+.emoji-0034-20E3 { background-position: 0px -40px; }
+.emoji-0035-20E3 { background-position: -20px -40px; }
+.emoji-0036-20E3 { background-position: -40px -40px; }
+.emoji-0037-20E3 { background-position: -60px 0px; }
+.emoji-0038-20E3 { background-position: -60px -20px; }
+.emoji-0039-20E3 { background-position: -60px -40px; }
+.emoji-00A9 { background-position: 0px -60px; }
+.emoji-00AE { background-position: -20px -60px; }
+.emoji-1F004 { background-position: -40px -60px; }
+.emoji-1F0CF { background-position: -60px -60px; }
+.emoji-1F170 { background-position: -80px 0px; }
+.emoji-1F171 { background-position: -80px -20px; }
+.emoji-1F17E { background-position: -80px -40px; }
+.emoji-1F17F { background-position: -80px -60px; }
+.emoji-1F18E { background-position: 0px -80px; }
+.emoji-1F191 { background-position: -20px -80px; }
+.emoji-1F192 { background-position: -40px -80px; }
+.emoji-1F193 { background-position: -60px -80px; }
+.emoji-1F194 { background-position: -80px -80px; }
+.emoji-1F195 { background-position: -100px 0px; }
+.emoji-1F196 { background-position: -100px -20px; }
+.emoji-1F197 { background-position: -100px -40px; }
+.emoji-1F198 { background-position: -100px -60px; }
+.emoji-1F199 { background-position: -100px -80px; }
+.emoji-1F19A { background-position: 0px -100px; }
+.emoji-1F1E6-1F1E8 { background-position: -20px -100px; }
+.emoji-1F1E6-1F1E9 { background-position: -40px -100px; }
+.emoji-1F1E6-1F1EA { background-position: -60px -100px; }
+.emoji-1F1E6-1F1EB { background-position: -80px -100px; }
+.emoji-1F1E6-1F1EC { background-position: -100px -100px; }
+.emoji-1F1E6-1F1EE { background-position: -120px 0px; }
+.emoji-1F1E6-1F1F1 { background-position: -120px -20px; }
+.emoji-1F1E6-1F1F2 { background-position: -120px -40px; }
+.emoji-1F1E6-1F1F4 { background-position: -120px -60px; }
+.emoji-1F1E6-1F1F6 { background-position: -120px -80px; }
+.emoji-1F1E6-1F1F7 { background-position: -120px -100px; }
+.emoji-1F1E6-1F1F8 { background-position: 0px -120px; }
+.emoji-1F1E6-1F1F9 { background-position: -20px -120px; }
+.emoji-1F1E6-1F1FA { background-position: -40px -120px; }
+.emoji-1F1E6-1F1FC { background-position: -60px -120px; }
+.emoji-1F1E6-1F1FD { background-position: -80px -120px; }
+.emoji-1F1E6-1F1FF { background-position: -100px -120px; }
+.emoji-1F1E7-1F1E6 { background-position: -120px -120px; }
+.emoji-1F1E7-1F1E7 { background-position: -140px 0px; }
+.emoji-1F1E7-1F1E9 { background-position: -140px -20px; }
+.emoji-1F1E7-1F1EA { background-position: -140px -40px; }
+.emoji-1F1E7-1F1EB { background-position: -140px -60px; }
+.emoji-1F1E7-1F1EC { background-position: -140px -80px; }
+.emoji-1F1E7-1F1ED { background-position: -140px -100px; }
+.emoji-1F1E7-1F1EE { background-position: -140px -120px; }
+.emoji-1F1E7-1F1EF { background-position: 0px -140px; }
+.emoji-1F1E7-1F1F1 { background-position: -20px -140px; }
+.emoji-1F1E7-1F1F2 { background-position: -40px -140px; }
+.emoji-1F1E7-1F1F3 { background-position: -60px -140px; }
+.emoji-1F1E7-1F1F4 { background-position: -80px -140px; }
+.emoji-1F1E7-1F1F6 { background-position: -100px -140px; }
+.emoji-1F1E7-1F1F7 { background-position: -120px -140px; }
+.emoji-1F1E7-1F1F8 { background-position: -140px -140px; }
+.emoji-1F1E7-1F1F9 { background-position: -160px 0px; }
+.emoji-1F1E7-1F1FB { background-position: -160px -20px; }
+.emoji-1F1E7-1F1FC { background-position: -160px -40px; }
+.emoji-1F1E7-1F1FE { background-position: -160px -60px; }
+.emoji-1F1E7-1F1FF { background-position: -160px -80px; }
+.emoji-1F1E8-1F1E6 { background-position: -160px -100px; }
+.emoji-1F1E8-1F1E8 { background-position: -160px -120px; }
+.emoji-1F1E8-1F1E9 { background-position: -160px -140px; }
+.emoji-1F1E8-1F1EB { background-position: 0px -160px; }
+.emoji-1F1E8-1F1EC { background-position: -20px -160px; }
+.emoji-1F1E8-1F1ED { background-position: -40px -160px; }
+.emoji-1F1E8-1F1EE { background-position: -60px -160px; }
+.emoji-1F1E8-1F1F0 { background-position: -80px -160px; }
+.emoji-1F1E8-1F1F1 { background-position: -100px -160px; }
+.emoji-1F1E8-1F1F2 { background-position: -120px -160px; }
+.emoji-1F1E8-1F1F3 { background-position: -140px -160px; }
+.emoji-1F1E8-1F1F4 { background-position: -160px -160px; }
+.emoji-1F1E8-1F1F5 { background-position: -180px 0px; }
+.emoji-1F1E8-1F1F7 { background-position: -180px -20px; }
+.emoji-1F1E8-1F1FA { background-position: -180px -40px; }
+.emoji-1F1E8-1F1FB { background-position: -180px -60px; }
+.emoji-1F1E8-1F1FC { background-position: -180px -80px; }
+.emoji-1F1E8-1F1FD { background-position: -180px -100px; }
+.emoji-1F1E8-1F1FE { background-position: -180px -120px; }
+.emoji-1F1E8-1F1FF { background-position: -180px -140px; }
+.emoji-1F1E9-1F1EA { background-position: -180px -160px; }
+.emoji-1F1E9-1F1EC { background-position: 0px -180px; }
+.emoji-1F1E9-1F1EF { background-position: -20px -180px; }
+.emoji-1F1E9-1F1F0 { background-position: -40px -180px; }
+.emoji-1F1E9-1F1F2 { background-position: -60px -180px; }
+.emoji-1F1E9-1F1F4 { background-position: -80px -180px; }
+.emoji-1F1E9-1F1FF { background-position: -100px -180px; }
+.emoji-1F1EA-1F1E6 { background-position: -120px -180px; }
+.emoji-1F1EA-1F1E8 { background-position: -140px -180px; }
+.emoji-1F1EA-1F1EA { background-position: -160px -180px; }
+.emoji-1F1EA-1F1EC { background-position: -180px -180px; }
+.emoji-1F1EA-1F1ED { background-position: -200px 0px; }
+.emoji-1F1EA-1F1F7 { background-position: -200px -20px; }
+.emoji-1F1EA-1F1F8 { background-position: -200px -40px; }
+.emoji-1F1EA-1F1F9 { background-position: -200px -60px; }
+.emoji-1F1EA-1F1FA { background-position: -200px -80px; }
+.emoji-1F1EB-1F1EE { background-position: -200px -100px; }
+.emoji-1F1EB-1F1EF { background-position: -200px -120px; }
+.emoji-1F1EB-1F1F0 { background-position: -200px -140px; }
+.emoji-1F1EB-1F1F2 { background-position: -200px -160px; }
+.emoji-1F1EB-1F1F4 { background-position: -200px -180px; }
+.emoji-1F1EB-1F1F7 { background-position: 0px -200px; }
+.emoji-1F1EC-1F1E6 { background-position: -20px -200px; }
+.emoji-1F1EC-1F1E7 { background-position: -40px -200px; }
+.emoji-1F1EC-1F1E9 { background-position: -60px -200px; }
+.emoji-1F1EC-1F1EA { background-position: -80px -200px; }
+.emoji-1F1EC-1F1EB { background-position: -100px -200px; }
+.emoji-1F1EC-1F1EC { background-position: -120px -200px; }
+.emoji-1F1EC-1F1ED { background-position: -140px -200px; }
+.emoji-1F1EC-1F1EE { background-position: -160px -200px; }
+.emoji-1F1EC-1F1F1 { background-position: -180px -200px; }
+.emoji-1F1EC-1F1F2 { background-position: -200px -200px; }
+.emoji-1F1EC-1F1F3 { background-position: -220px 0px; }
+.emoji-1F1EC-1F1F5 { background-position: -220px -20px; }
+.emoji-1F1EC-1F1F6 { background-position: -220px -40px; }
+.emoji-1F1EC-1F1F7 { background-position: -220px -60px; }
+.emoji-1F1EC-1F1F8 { background-position: -220px -80px; }
+.emoji-1F1EC-1F1F9 { background-position: -220px -100px; }
+.emoji-1F1EC-1F1FA { background-position: -220px -120px; }
+.emoji-1F1EC-1F1FC { background-position: -220px -140px; }
+.emoji-1F1EC-1F1FE { background-position: -220px -160px; }
+.emoji-1F1ED-1F1F0 { background-position: -220px -180px; }
+.emoji-1F1ED-1F1F2 { background-position: -220px -200px; }
+.emoji-1F1ED-1F1F3 { background-position: 0px -220px; }
+.emoji-1F1ED-1F1F7 { background-position: -20px -220px; }
+.emoji-1F1ED-1F1F9 { background-position: -40px -220px; }
+.emoji-1F1ED-1F1FA { background-position: -60px -220px; }
+.emoji-1F1EE-1F1E8 { background-position: -80px -220px; }
+.emoji-1F1EE-1F1E9 { background-position: -100px -220px; }
+.emoji-1F1EE-1F1EA { background-position: -120px -220px; }
+.emoji-1F1EE-1F1F1 { background-position: -140px -220px; }
+.emoji-1F1EE-1F1F2 { background-position: -160px -220px; }
+.emoji-1F1EE-1F1F3 { background-position: -180px -220px; }
+.emoji-1F1EE-1F1F4 { background-position: -200px -220px; }
+.emoji-1F1EE-1F1F6 { background-position: -220px -220px; }
+.emoji-1F1EE-1F1F7 { background-position: -240px 0px; }
+.emoji-1F1EE-1F1F8 { background-position: -240px -20px; }
+.emoji-1F1EE-1F1F9 { background-position: -240px -40px; }
+.emoji-1F1EF-1F1EA { background-position: -240px -60px; }
+.emoji-1F1EF-1F1F2 { background-position: -240px -80px; }
+.emoji-1F1EF-1F1F4 { background-position: -240px -100px; }
+.emoji-1F1EF-1F1F5 { background-position: -240px -120px; }
+.emoji-1F1F0-1F1EA { background-position: -240px -140px; }
+.emoji-1F1F0-1F1EC { background-position: -240px -160px; }
+.emoji-1F1F0-1F1ED { background-position: -240px -180px; }
+.emoji-1F1F0-1F1EE { background-position: -240px -200px; }
+.emoji-1F1F0-1F1F2 { background-position: -240px -220px; }
+.emoji-1F1F0-1F1F3 { background-position: 0px -240px; }
+.emoji-1F1F0-1F1F5 { background-position: -20px -240px; }
+.emoji-1F1F0-1F1F7 { background-position: -40px -240px; }
+.emoji-1F1F0-1F1FC { background-position: -60px -240px; }
+.emoji-1F1F0-1F1FE { background-position: -80px -240px; }
+.emoji-1F1F0-1F1FF { background-position: -100px -240px; }
+.emoji-1F1F1-1F1E6 { background-position: -120px -240px; }
+.emoji-1F1F1-1F1E7 { background-position: -140px -240px; }
+.emoji-1F1F1-1F1E8 { background-position: -160px -240px; }
+.emoji-1F1F1-1F1EE { background-position: -180px -240px; }
+.emoji-1F1F1-1F1F0 { background-position: -200px -240px; }
+.emoji-1F1F1-1F1F7 { background-position: -220px -240px; }
+.emoji-1F1F1-1F1F8 { background-position: -240px -240px; }
+.emoji-1F1F1-1F1F9 { background-position: -260px 0px; }
+.emoji-1F1F1-1F1FA { background-position: -260px -20px; }
+.emoji-1F1F1-1F1FB { background-position: -260px -40px; }
+.emoji-1F1F1-1F1FE { background-position: -260px -60px; }
+.emoji-1F1F2-1F1E6 { background-position: -260px -80px; }
+.emoji-1F1F2-1F1E8 { background-position: -260px -100px; }
+.emoji-1F1F2-1F1E9 { background-position: -260px -120px; }
+.emoji-1F1F2-1F1EA { background-position: -260px -140px; }
+.emoji-1F1F2-1F1EB { background-position: -260px -160px; }
+.emoji-1F1F2-1F1EC { background-position: -260px -180px; }
+.emoji-1F1F2-1F1ED { background-position: -260px -200px; }
+.emoji-1F1F2-1F1F0 { background-position: -260px -220px; }
+.emoji-1F1F2-1F1F1 { background-position: -260px -240px; }
+.emoji-1F1F2-1F1F2 { background-position: 0px -260px; }
+.emoji-1F1F2-1F1F3 { background-position: -20px -260px; }
+.emoji-1F1F2-1F1F4 { background-position: -40px -260px; }
+.emoji-1F1F2-1F1F5 { background-position: -60px -260px; }
+.emoji-1F1F2-1F1F6 { background-position: -80px -260px; }
+.emoji-1F1F2-1F1F7 { background-position: -100px -260px; }
+.emoji-1F1F2-1F1F8 { background-position: -120px -260px; }
+.emoji-1F1F2-1F1F9 { background-position: -140px -260px; }
+.emoji-1F1F2-1F1FA { background-position: -160px -260px; }
+.emoji-1F1F2-1F1FB { background-position: -180px -260px; }
+.emoji-1F1F2-1F1FC { background-position: -200px -260px; }
+.emoji-1F1F2-1F1FD { background-position: -220px -260px; }
+.emoji-1F1F2-1F1FE { background-position: -240px -260px; }
+.emoji-1F1F2-1F1FF { background-position: -260px -260px; }
+.emoji-1F1F3-1F1E6 { background-position: -280px 0px; }
+.emoji-1F1F3-1F1E8 { background-position: -280px -20px; }
+.emoji-1F1F3-1F1EA { background-position: -280px -40px; }
+.emoji-1F1F3-1F1EB { background-position: -280px -60px; }
+.emoji-1F1F3-1F1EC { background-position: -280px -80px; }
+.emoji-1F1F3-1F1EE { background-position: -280px -100px; }
+.emoji-1F1F3-1F1F1 { background-position: -280px -120px; }
+.emoji-1F1F3-1F1F4 { background-position: -280px -140px; }
+.emoji-1F1F3-1F1F5 { background-position: -280px -160px; }
+.emoji-1F1F3-1F1F7 { background-position: -280px -180px; }
+.emoji-1F1F3-1F1FA { background-position: -280px -200px; }
+.emoji-1F1F3-1F1FF { background-position: -280px -220px; }
+.emoji-1F1F4-1F1F2 { background-position: -280px -240px; }
+.emoji-1F1F5-1F1E6 { background-position: -280px -260px; }
+.emoji-1F1F5-1F1EA { background-position: 0px -280px; }
+.emoji-1F1F5-1F1EB { background-position: -20px -280px; }
+.emoji-1F1F5-1F1EC { background-position: -40px -280px; }
+.emoji-1F1F5-1F1ED { background-position: -60px -280px; }
+.emoji-1F1F5-1F1F0 { background-position: -80px -280px; }
+.emoji-1F1F5-1F1F1 { background-position: -100px -280px; }
+.emoji-1F1F5-1F1F2 { background-position: -120px -280px; }
+.emoji-1F1F5-1F1F3 { background-position: -140px -280px; }
+.emoji-1F1F5-1F1F7 { background-position: -160px -280px; }
+.emoji-1F1F5-1F1F8 { background-position: -180px -280px; }
+.emoji-1F1F5-1F1F9 { background-position: -200px -280px; }
+.emoji-1F1F5-1F1FC { background-position: -220px -280px; }
+.emoji-1F1F5-1F1FE { background-position: -240px -280px; }
+.emoji-1F1F6-1F1E6 { background-position: -260px -280px; }
+.emoji-1F1F7-1F1EA { background-position: -280px -280px; }
+.emoji-1F1F7-1F1F4 { background-position: -300px 0px; }
+.emoji-1F1F7-1F1F8 { background-position: -300px -20px; }
+.emoji-1F1F7-1F1FA { background-position: -300px -40px; }
+.emoji-1F1F7-1F1FC { background-position: -300px -60px; }
+.emoji-1F1F8-1F1E6 { background-position: -300px -80px; }
+.emoji-1F1F8-1F1E7 { background-position: -300px -100px; }
+.emoji-1F1F8-1F1E8 { background-position: -300px -120px; }
+.emoji-1F1F8-1F1E9 { background-position: -300px -140px; }
+.emoji-1F1F8-1F1EA { background-position: -300px -160px; }
+.emoji-1F1F8-1F1EC { background-position: -300px -180px; }
+.emoji-1F1F8-1F1ED { background-position: -300px -200px; }
+.emoji-1F1F8-1F1EE { background-position: -300px -220px; }
+.emoji-1F1F8-1F1EF { background-position: -300px -240px; }
+.emoji-1F1F8-1F1F0 { background-position: -300px -260px; }
+.emoji-1F1F8-1F1F1 { background-position: -300px -280px; }
+.emoji-1F1F8-1F1F2 { background-position: 0px -300px; }
+.emoji-1F1F8-1F1F3 { background-position: -20px -300px; }
+.emoji-1F1F8-1F1F4 { background-position: -40px -300px; }
+.emoji-1F1F8-1F1F7 { background-position: -60px -300px; }
+.emoji-1F1F8-1F1F8 { background-position: -80px -300px; }
+.emoji-1F1F8-1F1F9 { background-position: -100px -300px; }
+.emoji-1F1F8-1F1FB { background-position: -120px -300px; }
+.emoji-1F1F8-1F1FD { background-position: -140px -300px; }
+.emoji-1F1F8-1F1FE { background-position: -160px -300px; }
+.emoji-1F1F8-1F1FF { background-position: -180px -300px; }
+.emoji-1F1F9-1F1E6 { background-position: -200px -300px; }
+.emoji-1F1F9-1F1E8 { background-position: -220px -300px; }
+.emoji-1F1F9-1F1E9 { background-position: -240px -300px; }
+.emoji-1F1F9-1F1EB { background-position: -260px -300px; }
+.emoji-1F1F9-1F1EC { background-position: -280px -300px; }
+.emoji-1F1F9-1F1ED { background-position: -300px -300px; }
+.emoji-1F1F9-1F1EF { background-position: -320px 0px; }
+.emoji-1F1F9-1F1F0 { background-position: -320px -20px; }
+.emoji-1F1F9-1F1F1 { background-position: -320px -40px; }
+.emoji-1F1F9-1F1F2 { background-position: -320px -60px; }
+.emoji-1F1F9-1F1F3 { background-position: -320px -80px; }
+.emoji-1F1F9-1F1F4 { background-position: -320px -100px; }
+.emoji-1F1F9-1F1F7 { background-position: -320px -120px; }
+.emoji-1F1F9-1F1F9 { background-position: -320px -140px; }
+.emoji-1F1F9-1F1FB { background-position: -320px -160px; }
+.emoji-1F1F9-1F1FC { background-position: -320px -180px; }
+.emoji-1F1F9-1F1FF { background-position: -320px -200px; }
+.emoji-1F1FA-1F1E6 { background-position: -320px -220px; }
+.emoji-1F1FA-1F1EC { background-position: -320px -240px; }
+.emoji-1F1FA-1F1F2 { background-position: -320px -260px; }
+.emoji-1F1FA-1F1F8 { background-position: -320px -280px; }
+.emoji-1F1FA-1F1FE { background-position: -320px -300px; }
+.emoji-1F1FA-1F1FF { background-position: 0px -320px; }
+.emoji-1F1FB-1F1E6 { background-position: -20px -320px; }
+.emoji-1F1FB-1F1E8 { background-position: -40px -320px; }
+.emoji-1F1FB-1F1EA { background-position: -60px -320px; }
+.emoji-1F1FB-1F1EC { background-position: -80px -320px; }
+.emoji-1F1FB-1F1EE { background-position: -100px -320px; }
+.emoji-1F1FB-1F1F3 { background-position: -120px -320px; }
+.emoji-1F1FB-1F1FA { background-position: -140px -320px; }
+.emoji-1F1FC-1F1EB { background-position: -160px -320px; }
+.emoji-1F1FC-1F1F8 { background-position: -180px -320px; }
+.emoji-1F1FD-1F1F0 { background-position: -200px -320px; }
+.emoji-1F1FE-1F1EA { background-position: -220px -320px; }
+.emoji-1F1FE-1F1F9 { background-position: -240px -320px; }
+.emoji-1F1FF-1F1E6 { background-position: -260px -320px; }
+.emoji-1F1FF-1F1F2 { background-position: -280px -320px; }
+.emoji-1F1FF-1F1FC { background-position: -300px -320px; }
+.emoji-1F201 { background-position: -320px -320px; }
+.emoji-1F202 { background-position: -340px 0px; }
+.emoji-1F21A { background-position: -340px -20px; }
+.emoji-1F22F { background-position: -340px -40px; }
+.emoji-1F232 { background-position: -340px -60px; }
+.emoji-1F233 { background-position: -340px -80px; }
+.emoji-1F234 { background-position: -340px -100px; }
+.emoji-1F235 { background-position: -340px -120px; }
+.emoji-1F236 { background-position: -340px -140px; }
+.emoji-1F237 { background-position: -340px -160px; }
+.emoji-1F238 { background-position: -340px -180px; }
+.emoji-1F239 { background-position: -340px -200px; }
+.emoji-1F23A { background-position: -340px -220px; }
+.emoji-1F250 { background-position: -340px -240px; }
+.emoji-1F251 { background-position: -340px -260px; }
+.emoji-1F300 { background-position: -340px -280px; }
+.emoji-1F301 { background-position: -340px -300px; }
+.emoji-1F302 { background-position: -340px -320px; }
+.emoji-1F303 { background-position: 0px -340px; }
+.emoji-1F304 { background-position: -20px -340px; }
+.emoji-1F305 { background-position: -40px -340px; }
+.emoji-1F306 { background-position: -60px -340px; }
+.emoji-1F307 { background-position: -80px -340px; }
+.emoji-1F308 { background-position: -100px -340px; }
+.emoji-1F309 { background-position: -120px -340px; }
+.emoji-1F30A { background-position: -140px -340px; }
+.emoji-1F30B { background-position: -160px -340px; }
+.emoji-1F30C { background-position: -180px -340px; }
+.emoji-1F30D { background-position: -200px -340px; }
+.emoji-1F30E { background-position: -220px -340px; }
+.emoji-1F30F { background-position: -240px -340px; }
+.emoji-1F310 { background-position: -260px -340px; }
+.emoji-1F311 { background-position: -280px -340px; }
+.emoji-1F312 { background-position: -300px -340px; }
+.emoji-1F313 { background-position: -320px -340px; }
+.emoji-1F314 { background-position: -340px -340px; }
+.emoji-1F315 { background-position: -360px 0px; }
+.emoji-1F316 { background-position: -360px -20px; }
+.emoji-1F317 { background-position: -360px -40px; }
+.emoji-1F318 { background-position: -360px -60px; }
+.emoji-1F319 { background-position: -360px -80px; }
+.emoji-1F31A { background-position: -360px -100px; }
+.emoji-1F31B { background-position: -360px -120px; }
+.emoji-1F31C { background-position: -360px -140px; }
+.emoji-1F31D { background-position: -360px -160px; }
+.emoji-1F31E { background-position: -360px -180px; }
+.emoji-1F31F { background-position: -360px -200px; }
+.emoji-1F320 { background-position: -360px -220px; }
+.emoji-1F321 { background-position: -360px -240px; }
+.emoji-1F324 { background-position: -360px -260px; }
+.emoji-1F325 { background-position: -360px -280px; }
+.emoji-1F326 { background-position: -360px -300px; }
+.emoji-1F327 { background-position: -360px -320px; }
+.emoji-1F328 { background-position: -360px -340px; }
+.emoji-1F329 { background-position: 0px -360px; }
+.emoji-1F32A { background-position: -20px -360px; }
+.emoji-1F32B { background-position: -40px -360px; }
+.emoji-1F32C { background-position: -60px -360px; }
+.emoji-1F32D { background-position: -80px -360px; }
+.emoji-1F32E { background-position: -100px -360px; }
+.emoji-1F32F { background-position: -120px -360px; }
+.emoji-1F330 { background-position: -140px -360px; }
+.emoji-1F331 { background-position: -160px -360px; }
+.emoji-1F332 { background-position: -180px -360px; }
+.emoji-1F333 { background-position: -200px -360px; }
+.emoji-1F334 { background-position: -220px -360px; }
+.emoji-1F335 { background-position: -240px -360px; }
+.emoji-1F336 { background-position: -260px -360px; }
+.emoji-1F337 { background-position: -280px -360px; }
+.emoji-1F338 { background-position: -300px -360px; }
+.emoji-1F339 { background-position: -320px -360px; }
+.emoji-1F33A { background-position: -340px -360px; }
+.emoji-1F33B { background-position: -360px -360px; }
+.emoji-1F33C { background-position: -380px 0px; }
+.emoji-1F33D { background-position: -380px -20px; }
+.emoji-1F33E { background-position: -380px -40px; }
+.emoji-1F33F { background-position: -380px -60px; }
+.emoji-1F340 { background-position: -380px -80px; }
+.emoji-1F341 { background-position: -380px -100px; }
+.emoji-1F342 { background-position: -380px -120px; }
+.emoji-1F343 { background-position: -380px -140px; }
+.emoji-1F344 { background-position: -380px -160px; }
+.emoji-1F345 { background-position: -380px -180px; }
+.emoji-1F346 { background-position: -380px -200px; }
+.emoji-1F347 { background-position: -380px -220px; }
+.emoji-1F348 { background-position: -380px -240px; }
+.emoji-1F349 { background-position: -380px -260px; }
+.emoji-1F34A { background-position: -380px -280px; }
+.emoji-1F34B { background-position: -380px -300px; }
+.emoji-1F34C { background-position: -380px -320px; }
+.emoji-1F34D { background-position: -380px -340px; }
+.emoji-1F34E { background-position: -380px -360px; }
+.emoji-1F34F { background-position: 0px -380px; }
+.emoji-1F350 { background-position: -20px -380px; }
+.emoji-1F351 { background-position: -40px -380px; }
+.emoji-1F352 { background-position: -60px -380px; }
+.emoji-1F353 { background-position: -80px -380px; }
+.emoji-1F354 { background-position: -100px -380px; }
+.emoji-1F355 { background-position: -120px -380px; }
+.emoji-1F356 { background-position: -140px -380px; }
+.emoji-1F357 { background-position: -160px -380px; }
+.emoji-1F358 { background-position: -180px -380px; }
+.emoji-1F359 { background-position: -200px -380px; }
+.emoji-1F35A { background-position: -220px -380px; }
+.emoji-1F35B { background-position: -240px -380px; }
+.emoji-1F35C { background-position: -260px -380px; }
+.emoji-1F35D { background-position: -280px -380px; }
+.emoji-1F35E { background-position: -300px -380px; }
+.emoji-1F35F { background-position: -320px -380px; }
+.emoji-1F360 { background-position: -340px -380px; }
+.emoji-1F361 { background-position: -360px -380px; }
+.emoji-1F362 { background-position: -380px -380px; }
+.emoji-1F363 { background-position: -400px 0px; }
+.emoji-1F364 { background-position: -400px -20px; }
+.emoji-1F365 { background-position: -400px -40px; }
+.emoji-1F366 { background-position: -400px -60px; }
+.emoji-1F367 { background-position: -400px -80px; }
+.emoji-1F368 { background-position: -400px -100px; }
+.emoji-1F369 { background-position: -400px -120px; }
+.emoji-1F36A { background-position: -400px -140px; }
+.emoji-1F36B { background-position: -400px -160px; }
+.emoji-1F36C { background-position: -400px -180px; }
+.emoji-1F36D { background-position: -400px -200px; }
+.emoji-1F36E { background-position: -400px -220px; }
+.emoji-1F36F { background-position: -400px -240px; }
+.emoji-1F370 { background-position: -400px -260px; }
+.emoji-1F371 { background-position: -400px -280px; }
+.emoji-1F372 { background-position: -400px -300px; }
+.emoji-1F373 { background-position: -400px -320px; }
+.emoji-1F374 { background-position: -400px -340px; }
+.emoji-1F375 { background-position: -400px -360px; }
+.emoji-1F376 { background-position: -400px -380px; }
+.emoji-1F377 { background-position: 0px -400px; }
+.emoji-1F378 { background-position: -20px -400px; }
+.emoji-1F379 { background-position: -40px -400px; }
+.emoji-1F37A { background-position: -60px -400px; }
+.emoji-1F37B { background-position: -80px -400px; }
+.emoji-1F37C { background-position: -100px -400px; }
+.emoji-1F37D { background-position: -120px -400px; }
+.emoji-1F37E { background-position: -140px -400px; }
+.emoji-1F37F { background-position: -160px -400px; }
+.emoji-1F380 { background-position: -180px -400px; }
+.emoji-1F381 { background-position: -200px -400px; }
+.emoji-1F382 { background-position: -220px -400px; }
+.emoji-1F383 { background-position: -240px -400px; }
+.emoji-1F384 { background-position: -260px -400px; }
+.emoji-1F385 { background-position: -280px -400px; }
+.emoji-1F385-1F3FB { background-position: -300px -400px; }
+.emoji-1F385-1F3FC { background-position: -320px -400px; }
+.emoji-1F385-1F3FD { background-position: -340px -400px; }
+.emoji-1F385-1F3FE { background-position: -360px -400px; }
+.emoji-1F385-1F3FF { background-position: -380px -400px; }
+.emoji-1F386 { background-position: -400px -400px; }
+.emoji-1F387 { background-position: -420px 0px; }
+.emoji-1F388 { background-position: -420px -20px; }
+.emoji-1F389 { background-position: -420px -40px; }
+.emoji-1F38A { background-position: -420px -60px; }
+.emoji-1F38B { background-position: -420px -80px; }
+.emoji-1F38C { background-position: -420px -100px; }
+.emoji-1F38D { background-position: -420px -120px; }
+.emoji-1F38E { background-position: -420px -140px; }
+.emoji-1F38F { background-position: -420px -160px; }
+.emoji-1F390 { background-position: -420px -180px; }
+.emoji-1F391 { background-position: -420px -200px; }
+.emoji-1F392 { background-position: -420px -220px; }
+.emoji-1F393 { background-position: -420px -240px; }
+.emoji-1F394 { background-position: -420px -260px; }
+.emoji-1F395 { background-position: -420px -280px; }
+.emoji-1F396 { background-position: -420px -300px; }
+.emoji-1F397 { background-position: -420px -320px; }
+.emoji-1F398 { background-position: -420px -340px; }
+.emoji-1F399 { background-position: -420px -360px; }
+.emoji-1F39A { background-position: -420px -380px; }
+.emoji-1F39B { background-position: -420px -400px; }
+.emoji-1F39C { background-position: 0px -420px; }
+.emoji-1F39D { background-position: -20px -420px; }
+.emoji-1F39E { background-position: -40px -420px; }
+.emoji-1F39F { background-position: -60px -420px; }
+.emoji-1F3A0 { background-position: -80px -420px; }
+.emoji-1F3A1 { background-position: -100px -420px; }
+.emoji-1F3A2 { background-position: -120px -420px; }
+.emoji-1F3A3 { background-position: -140px -420px; }
+.emoji-1F3A4 { background-position: -160px -420px; }
+.emoji-1F3A5 { background-position: -180px -420px; }
+.emoji-1F3A6 { background-position: -200px -420px; }
+.emoji-1F3A7 { background-position: -220px -420px; }
+.emoji-1F3A8 { background-position: -240px -420px; }
+.emoji-1F3A9 { background-position: -260px -420px; }
+.emoji-1F3AA { background-position: -280px -420px; }
+.emoji-1F3AB { background-position: -300px -420px; }
+.emoji-1F3AC { background-position: -320px -420px; }
+.emoji-1F3AD { background-position: -340px -420px; }
+.emoji-1F3AE { background-position: -360px -420px; }
+.emoji-1F3AF { background-position: -380px -420px; }
+.emoji-1F3B0 { background-position: -400px -420px; }
+.emoji-1F3B1 { background-position: -420px -420px; }
+.emoji-1F3B2 { background-position: -440px 0px; }
+.emoji-1F3B3 { background-position: -440px -20px; }
+.emoji-1F3B4 { background-position: -440px -40px; }
+.emoji-1F3B5 { background-position: -440px -60px; }
+.emoji-1F3B6 { background-position: -440px -80px; }
+.emoji-1F3B7 { background-position: -440px -100px; }
+.emoji-1F3B8 { background-position: -440px -120px; }
+.emoji-1F3B9 { background-position: -440px -140px; }
+.emoji-1F3BA { background-position: -440px -160px; }
+.emoji-1F3BB { background-position: -440px -180px; }
+.emoji-1F3BC { background-position: -440px -200px; }
+.emoji-1F3BD { background-position: -440px -220px; }
+.emoji-1F3BE { background-position: -440px -240px; }
+.emoji-1F3BF { background-position: -440px -260px; }
+.emoji-1F3C0 { background-position: -440px -280px; }
+.emoji-1F3C1 { background-position: -440px -300px; }
+.emoji-1F3C2 { background-position: -440px -320px; }
+.emoji-1F3C3 { background-position: -440px -340px; }
+.emoji-1F3C3-1F3FB { background-position: -440px -360px; }
+.emoji-1F3C3-1F3FC { background-position: -440px -380px; }
+.emoji-1F3C3-1F3FD { background-position: -440px -400px; }
+.emoji-1F3C3-1F3FE { background-position: -440px -420px; }
+.emoji-1F3C3-1F3FF { background-position: 0px -440px; }
+.emoji-1F3C4 { background-position: -20px -440px; }
+.emoji-1F3C4-1F3FB { background-position: -40px -440px; }
+.emoji-1F3C4-1F3FC { background-position: -60px -440px; }
+.emoji-1F3C4-1F3FD { background-position: -80px -440px; }
+.emoji-1F3C4-1F3FE { background-position: -100px -440px; }
+.emoji-1F3C4-1F3FF { background-position: -120px -440px; }
+.emoji-1F3C5 { background-position: -140px -440px; }
+.emoji-1F3C6 { background-position: -160px -440px; }
+.emoji-1F3C7 { background-position: -180px -440px; }
+.emoji-1F3C7-1F3FB { background-position: -200px -440px; }
+.emoji-1F3C7-1F3FC { background-position: -220px -440px; }
+.emoji-1F3C7-1F3FD { background-position: -240px -440px; }
+.emoji-1F3C7-1F3FE { background-position: -260px -440px; }
+.emoji-1F3C7-1F3FF { background-position: -280px -440px; }
+.emoji-1F3C8 { background-position: -300px -440px; }
+.emoji-1F3C9 { background-position: -320px -440px; }
+.emoji-1F3CA { background-position: -340px -440px; }
+.emoji-1F3CA-1F3FB { background-position: -360px -440px; }
+.emoji-1F3CA-1F3FC { background-position: -380px -440px; }
+.emoji-1F3CA-1F3FD { background-position: -400px -440px; }
+.emoji-1F3CA-1F3FE { background-position: -420px -440px; }
+.emoji-1F3CA-1F3FF { background-position: -440px -440px; }
+.emoji-1F3CB { background-position: -460px 0px; }
+.emoji-1F3CB-1F3FB { background-position: -460px -20px; }
+.emoji-1F3CB-1F3FC { background-position: -460px -40px; }
+.emoji-1F3CB-1F3FD { background-position: -460px -60px; }
+.emoji-1F3CB-1F3FE { background-position: -460px -80px; }
+.emoji-1F3CB-1F3FF { background-position: -460px -100px; }
+.emoji-1F3CC { background-position: -460px -120px; }
+.emoji-1F3CD { background-position: -460px -140px; }
+.emoji-1F3CE { background-position: -460px -160px; }
+.emoji-1F3CF { background-position: -460px -180px; }
+.emoji-1F3D0 { background-position: -460px -200px; }
+.emoji-1F3D1 { background-position: -460px -220px; }
+.emoji-1F3D2 { background-position: -460px -240px; }
+.emoji-1F3D3 { background-position: -460px -260px; }
+.emoji-1F3D4 { background-position: -460px -280px; }
+.emoji-1F3D5 { background-position: -460px -300px; }
+.emoji-1F3D6 { background-position: -460px -320px; }
+.emoji-1F3D7 { background-position: -460px -340px; }
+.emoji-1F3D8 { background-position: -460px -360px; }
+.emoji-1F3D9 { background-position: -460px -380px; }
+.emoji-1F3DA { background-position: -460px -400px; }
+.emoji-1F3DB { background-position: -460px -420px; }
+.emoji-1F3DC { background-position: -460px -440px; }
+.emoji-1F3DD { background-position: 0px -460px; }
+.emoji-1F3DE { background-position: -20px -460px; }
+.emoji-1F3DF { background-position: -40px -460px; }
+.emoji-1F3E0 { background-position: -60px -460px; }
+.emoji-1F3E1 { background-position: -80px -460px; }
+.emoji-1F3E2 { background-position: -100px -460px; }
+.emoji-1F3E3 { background-position: -120px -460px; }
+.emoji-1F3E4 { background-position: -140px -460px; }
+.emoji-1F3E5 { background-position: -160px -460px; }
+.emoji-1F3E6 { background-position: -180px -460px; }
+.emoji-1F3E7 { background-position: -200px -460px; }
+.emoji-1F3E8 { background-position: -220px -460px; }
+.emoji-1F3E9 { background-position: -240px -460px; }
+.emoji-1F3EA { background-position: -260px -460px; }
+.emoji-1F3EB { background-position: -280px -460px; }
+.emoji-1F3EC { background-position: -300px -460px; }
+.emoji-1F3ED { background-position: -320px -460px; }
+.emoji-1F3EE { background-position: -340px -460px; }
+.emoji-1F3EF { background-position: -360px -460px; }
+.emoji-1F3F0 { background-position: -380px -460px; }
+.emoji-1F3F1 { background-position: -400px -460px; }
+.emoji-1F3F2 { background-position: -420px -460px; }
+.emoji-1F3F3 { background-position: -440px -460px; }
+.emoji-1F3F4 { background-position: -460px -460px; }
+.emoji-1F3F5 { background-position: -480px 0px; }
+.emoji-1F3F6 { background-position: -480px -20px; }
+.emoji-1F3F7 { background-position: -480px -40px; }
+.emoji-1F3F8 { background-position: -480px -60px; }
+.emoji-1F3F9 { background-position: -480px -80px; }
+.emoji-1F3FA { background-position: -480px -100px; }
+.emoji-1F3FB { background-position: -480px -120px; }
+.emoji-1F3FC { background-position: -480px -140px; }
+.emoji-1F3FD { background-position: -480px -160px; }
+.emoji-1F3FE { background-position: -480px -180px; }
+.emoji-1F3FF { background-position: -480px -200px; }
+.emoji-1F400 { background-position: -480px -220px; }
+.emoji-1F401 { background-position: -480px -240px; }
+.emoji-1F402 { background-position: -480px -260px; }
+.emoji-1F403 { background-position: -480px -280px; }
+.emoji-1F404 { background-position: -480px -300px; }
+.emoji-1F405 { background-position: -480px -320px; }
+.emoji-1F406 { background-position: -480px -340px; }
+.emoji-1F407 { background-position: -480px -360px; }
+.emoji-1F408 { background-position: -480px -380px; }
+.emoji-1F409 { background-position: -480px -400px; }
+.emoji-1F40A { background-position: -480px -420px; }
+.emoji-1F40B { background-position: -480px -440px; }
+.emoji-1F40C { background-position: -480px -460px; }
+.emoji-1F40D { background-position: 0px -480px; }
+.emoji-1F40E { background-position: -20px -480px; }
+.emoji-1F40F { background-position: -40px -480px; }
+.emoji-1F410 { background-position: -60px -480px; }
+.emoji-1F411 { background-position: -80px -480px; }
+.emoji-1F412 { background-position: -100px -480px; }
+.emoji-1F413 { background-position: -120px -480px; }
+.emoji-1F414 { background-position: -140px -480px; }
+.emoji-1F415 { background-position: -160px -480px; }
+.emoji-1F416 { background-position: -180px -480px; }
+.emoji-1F417 { background-position: -200px -480px; }
+.emoji-1F418 { background-position: -220px -480px; }
+.emoji-1F419 { background-position: -240px -480px; }
+.emoji-1F41A { background-position: -260px -480px; }
+.emoji-1F41B { background-position: -280px -480px; }
+.emoji-1F41C { background-position: -300px -480px; }
+.emoji-1F41D { background-position: -320px -480px; }
+.emoji-1F41E { background-position: -340px -480px; }
+.emoji-1F41F { background-position: -360px -480px; }
+.emoji-1F420 { background-position: -380px -480px; }
+.emoji-1F421 { background-position: -400px -480px; }
+.emoji-1F422 { background-position: -420px -480px; }
+.emoji-1F423 { background-position: -440px -480px; }
+.emoji-1F424 { background-position: -460px -480px; }
+.emoji-1F425 { background-position: -480px -480px; }
+.emoji-1F426 { background-position: -500px 0px; }
+.emoji-1F427 { background-position: -500px -20px; }
+.emoji-1F428 { background-position: -500px -40px; }
+.emoji-1F429 { background-position: -500px -60px; }
+.emoji-1F42A { background-position: -500px -80px; }
+.emoji-1F42B { background-position: -500px -100px; }
+.emoji-1F42C { background-position: -500px -120px; }
+.emoji-1F42D { background-position: -500px -140px; }
+.emoji-1F42E { background-position: -500px -160px; }
+.emoji-1F42F { background-position: -500px -180px; }
+.emoji-1F430 { background-position: -500px -200px; }
+.emoji-1F431 { background-position: -500px -220px; }
+.emoji-1F432 { background-position: -500px -240px; }
+.emoji-1F433 { background-position: -500px -260px; }
+.emoji-1F434 { background-position: -500px -280px; }
+.emoji-1F435 { background-position: -500px -300px; }
+.emoji-1F436 { background-position: -500px -320px; }
+.emoji-1F437 { background-position: -500px -340px; }
+.emoji-1F438 { background-position: -500px -360px; }
+.emoji-1F439 { background-position: -500px -380px; }
+.emoji-1F43A { background-position: -500px -400px; }
+.emoji-1F43B { background-position: -500px -420px; }
+.emoji-1F43C { background-position: -500px -440px; }
+.emoji-1F43D { background-position: -500px -460px; }
+.emoji-1F43E { background-position: -500px -480px; }
+.emoji-1F43F { background-position: 0px -500px; }
+.emoji-1F440 { background-position: -20px -500px; }
+.emoji-1F441 { background-position: -40px -500px; }
+.emoji-1F441-1F5E8 { background-position: -60px -500px; }
+.emoji-1F442 { background-position: -80px -500px; }
+.emoji-1F442-1F3FB { background-position: -100px -500px; }
+.emoji-1F442-1F3FC { background-position: -120px -500px; }
+.emoji-1F442-1F3FD { background-position: -140px -500px; }
+.emoji-1F442-1F3FE { background-position: -160px -500px; }
+.emoji-1F442-1F3FF { background-position: -180px -500px; }
+.emoji-1F443 { background-position: -200px -500px; }
+.emoji-1F443-1F3FB { background-position: -220px -500px; }
+.emoji-1F443-1F3FC { background-position: -240px -500px; }
+.emoji-1F443-1F3FD { background-position: -260px -500px; }
+.emoji-1F443-1F3FE { background-position: -280px -500px; }
+.emoji-1F443-1F3FF { background-position: -300px -500px; }
+.emoji-1F444 { background-position: -320px -500px; }
+.emoji-1F445 { background-position: -340px -500px; }
+.emoji-1F446 { background-position: -360px -500px; }
+.emoji-1F446-1F3FB { background-position: -380px -500px; }
+.emoji-1F446-1F3FC { background-position: -400px -500px; }
+.emoji-1F446-1F3FD { background-position: -420px -500px; }
+.emoji-1F446-1F3FE { background-position: -440px -500px; }
+.emoji-1F446-1F3FF { background-position: -460px -500px; }
+.emoji-1F447 { background-position: -480px -500px; }
+.emoji-1F447-1F3FB { background-position: -500px -500px; }
+.emoji-1F447-1F3FC { background-position: -520px 0px; }
+.emoji-1F447-1F3FD { background-position: -520px -20px; }
+.emoji-1F447-1F3FE { background-position: -520px -40px; }
+.emoji-1F447-1F3FF { background-position: -520px -60px; }
+.emoji-1F448 { background-position: -520px -80px; }
+.emoji-1F448-1F3FB { background-position: -520px -100px; }
+.emoji-1F448-1F3FC { background-position: -520px -120px; }
+.emoji-1F448-1F3FD { background-position: -520px -140px; }
+.emoji-1F448-1F3FE { background-position: -520px -160px; }
+.emoji-1F448-1F3FF { background-position: -520px -180px; }
+.emoji-1F449 { background-position: -520px -200px; }
+.emoji-1F449-1F3FB { background-position: -520px -220px; }
+.emoji-1F449-1F3FC { background-position: -520px -240px; }
+.emoji-1F449-1F3FD { background-position: -520px -260px; }
+.emoji-1F449-1F3FE { background-position: -520px -280px; }
+.emoji-1F449-1F3FF { background-position: -520px -300px; }
+.emoji-1F44A { background-position: -520px -320px; }
+.emoji-1F44A-1F3FB { background-position: -520px -340px; }
+.emoji-1F44A-1F3FC { background-position: -520px -360px; }
+.emoji-1F44A-1F3FD { background-position: -520px -380px; }
+.emoji-1F44A-1F3FE { background-position: -520px -400px; }
+.emoji-1F44A-1F3FF { background-position: -520px -420px; }
+.emoji-1F44B { background-position: -520px -440px; }
+.emoji-1F44B-1F3FB { background-position: -520px -460px; }
+.emoji-1F44B-1F3FC { background-position: -520px -480px; }
+.emoji-1F44B-1F3FD { background-position: -520px -500px; }
+.emoji-1F44B-1F3FE { background-position: 0px -520px; }
+.emoji-1F44B-1F3FF { background-position: -20px -520px; }
+.emoji-1F44C { background-position: -40px -520px; }
+.emoji-1F44C-1F3FB { background-position: -60px -520px; }
+.emoji-1F44C-1F3FC { background-position: -80px -520px; }
+.emoji-1F44C-1F3FD { background-position: -100px -520px; }
+.emoji-1F44C-1F3FE { background-position: -120px -520px; }
+.emoji-1F44C-1F3FF { background-position: -140px -520px; }
+.emoji-1F44D { background-position: -160px -520px; }
+.emoji-1F44D-1F3FB { background-position: -180px -520px; }
+.emoji-1F44D-1F3FC { background-position: -200px -520px; }
+.emoji-1F44D-1F3FD { background-position: -220px -520px; }
+.emoji-1F44D-1F3FE { background-position: -240px -520px; }
+.emoji-1F44D-1F3FF { background-position: -260px -520px; }
+.emoji-1F44E { background-position: -280px -520px; }
+.emoji-1F44E-1F3FB { background-position: -300px -520px; }
+.emoji-1F44E-1F3FC { background-position: -320px -520px; }
+.emoji-1F44E-1F3FD { background-position: -340px -520px; }
+.emoji-1F44E-1F3FE { background-position: -360px -520px; }
+.emoji-1F44E-1F3FF { background-position: -380px -520px; }
+.emoji-1F44F { background-position: -400px -520px; }
+.emoji-1F44F-1F3FB { background-position: -420px -520px; }
+.emoji-1F44F-1F3FC { background-position: -440px -520px; }
+.emoji-1F44F-1F3FD { background-position: -460px -520px; }
+.emoji-1F44F-1F3FE { background-position: -480px -520px; }
+.emoji-1F44F-1F3FF { background-position: -500px -520px; }
+.emoji-1F450 { background-position: -520px -520px; }
+.emoji-1F450-1F3FB { background-position: -540px 0px; }
+.emoji-1F450-1F3FC { background-position: -540px -20px; }
+.emoji-1F450-1F3FD { background-position: -540px -40px; }
+.emoji-1F450-1F3FE { background-position: -540px -60px; }
+.emoji-1F450-1F3FF { background-position: -540px -80px; }
+.emoji-1F451 { background-position: -540px -100px; }
+.emoji-1F452 { background-position: -540px -120px; }
+.emoji-1F453 { background-position: -540px -140px; }
+.emoji-1F454 { background-position: -540px -160px; }
+.emoji-1F455 { background-position: -540px -180px; }
+.emoji-1F456 { background-position: -540px -200px; }
+.emoji-1F457 { background-position: -540px -220px; }
+.emoji-1F458 { background-position: -540px -240px; }
+.emoji-1F459 { background-position: -540px -260px; }
+.emoji-1F45A { background-position: -540px -280px; }
+.emoji-1F45B { background-position: -540px -300px; }
+.emoji-1F45C { background-position: -540px -320px; }
+.emoji-1F45D { background-position: -540px -340px; }
+.emoji-1F45E { background-position: -540px -360px; }
+.emoji-1F45F { background-position: -540px -380px; }
+.emoji-1F460 { background-position: -540px -400px; }
+.emoji-1F461 { background-position: -540px -420px; }
+.emoji-1F462 { background-position: -540px -440px; }
+.emoji-1F463 { background-position: -540px -460px; }
+.emoji-1F464 { background-position: -540px -480px; }
+.emoji-1F465 { background-position: -540px -500px; }
+.emoji-1F466 { background-position: -540px -520px; }
+.emoji-1F466-1F3FB { background-position: 0px -540px; }
+.emoji-1F466-1F3FC { background-position: -20px -540px; }
+.emoji-1F466-1F3FD { background-position: -40px -540px; }
+.emoji-1F466-1F3FE { background-position: -60px -540px; }
+.emoji-1F466-1F3FF { background-position: -80px -540px; }
+.emoji-1F467 { background-position: -100px -540px; }
+.emoji-1F467-1F3FB { background-position: -120px -540px; }
+.emoji-1F467-1F3FC { background-position: -140px -540px; }
+.emoji-1F467-1F3FD { background-position: -160px -540px; }
+.emoji-1F467-1F3FE { background-position: -180px -540px; }
+.emoji-1F467-1F3FF { background-position: -200px -540px; }
+.emoji-1F468 { background-position: -220px -540px; }
+.emoji-1F468-1F3FB { background-position: -240px -540px; }
+.emoji-1F468-1F3FC { background-position: -260px -540px; }
+.emoji-1F468-1F3FD { background-position: -280px -540px; }
+.emoji-1F468-1F3FE { background-position: -300px -540px; }
+.emoji-1F468-1F3FF { background-position: -320px -540px; }
+.emoji-1F468-1F468-1F466 { background-position: -340px -540px; }
+.emoji-1F468-1F468-1F466-1F466 { background-position: -360px -540px; }
+.emoji-1F468-1F468-1F467 { background-position: -380px -540px; }
+.emoji-1F468-1F468-1F467-1F466 { background-position: -400px -540px; }
+.emoji-1F468-1F468-1F467-1F467 { background-position: -420px -540px; }
+.emoji-1F468-1F469-1F466-1F466 { background-position: -440px -540px; }
+.emoji-1F468-1F469-1F467 { background-position: -460px -540px; }
+.emoji-1F468-1F469-1F467-1F466 { background-position: -480px -540px; }
+.emoji-1F468-1F469-1F467-1F467 { background-position: -500px -540px; }
+.emoji-1F468-2764-1F468 { background-position: -520px -540px; }
+.emoji-1F468-2764-1F48B-1F468 { background-position: -540px -540px; }
+.emoji-1F469 { background-position: -560px 0px; }
+.emoji-1F469-1F3FB { background-position: -560px -20px; }
+.emoji-1F469-1F3FC { background-position: -560px -40px; }
+.emoji-1F469-1F3FD { background-position: -560px -60px; }
+.emoji-1F469-1F3FE { background-position: -560px -80px; }
+.emoji-1F469-1F3FF { background-position: -560px -100px; }
+.emoji-1F469-1F469-1F466 { background-position: -560px -120px; }
+.emoji-1F469-1F469-1F466-1F466 { background-position: -560px -140px; }
+.emoji-1F469-1F469-1F467 { background-position: -560px -160px; }
+.emoji-1F469-1F469-1F467-1F466 { background-position: -560px -180px; }
+.emoji-1F469-1F469-1F467-1F467 { background-position: -560px -200px; }
+.emoji-1F469-2764-1F469 { background-position: -560px -220px; }
+.emoji-1F469-2764-1F48B-1F469 { background-position: -560px -240px; }
+.emoji-1F46A { background-position: -560px -260px; }
+.emoji-1F46B { background-position: -560px -280px; }
+.emoji-1F46C { background-position: -560px -300px; }
+.emoji-1F46D { background-position: -560px -320px; }
+.emoji-1F46E { background-position: -560px -340px; }
+.emoji-1F46E-1F3FB { background-position: -560px -360px; }
+.emoji-1F46E-1F3FC { background-position: -560px -380px; }
+.emoji-1F46E-1F3FD { background-position: -560px -400px; }
+.emoji-1F46E-1F3FE { background-position: -560px -420px; }
+.emoji-1F46E-1F3FF { background-position: -560px -440px; }
+.emoji-1F46F { background-position: -560px -460px; }
+.emoji-1F470 { background-position: -560px -480px; }
+.emoji-1F470-1F3FB { background-position: -560px -500px; }
+.emoji-1F470-1F3FC { background-position: -560px -520px; }
+.emoji-1F470-1F3FD { background-position: -560px -540px; }
+.emoji-1F470-1F3FE { background-position: 0px -560px; }
+.emoji-1F470-1F3FF { background-position: -20px -560px; }
+.emoji-1F471 { background-position: -40px -560px; }
+.emoji-1F471-1F3FB { background-position: -60px -560px; }
+.emoji-1F471-1F3FC { background-position: -80px -560px; }
+.emoji-1F471-1F3FD { background-position: -100px -560px; }
+.emoji-1F471-1F3FE { background-position: -120px -560px; }
+.emoji-1F471-1F3FF { background-position: -140px -560px; }
+.emoji-1F472 { background-position: -160px -560px; }
+.emoji-1F472-1F3FB { background-position: -180px -560px; }
+.emoji-1F472-1F3FC { background-position: -200px -560px; }
+.emoji-1F472-1F3FD { background-position: -220px -560px; }
+.emoji-1F472-1F3FE { background-position: -240px -560px; }
+.emoji-1F472-1F3FF { background-position: -260px -560px; }
+.emoji-1F473 { background-position: -280px -560px; }
+.emoji-1F473-1F3FB { background-position: -300px -560px; }
+.emoji-1F473-1F3FC { background-position: -320px -560px; }
+.emoji-1F473-1F3FD { background-position: -340px -560px; }
+.emoji-1F473-1F3FE { background-position: -360px -560px; }
+.emoji-1F473-1F3FF { background-position: -380px -560px; }
+.emoji-1F474 { background-position: -400px -560px; }
+.emoji-1F474-1F3FB { background-position: -420px -560px; }
+.emoji-1F474-1F3FC { background-position: -440px -560px; }
+.emoji-1F474-1F3FD { background-position: -460px -560px; }
+.emoji-1F474-1F3FE { background-position: -480px -560px; }
+.emoji-1F474-1F3FF { background-position: -500px -560px; }
+.emoji-1F475 { background-position: -520px -560px; }
+.emoji-1F475-1F3FB { background-position: -540px -560px; }
+.emoji-1F475-1F3FC { background-position: -560px -560px; }
+.emoji-1F475-1F3FD { background-position: -580px 0px; }
+.emoji-1F475-1F3FE { background-position: -580px -20px; }
+.emoji-1F475-1F3FF { background-position: -580px -40px; }
+.emoji-1F476 { background-position: -580px -60px; }
+.emoji-1F476-1F3FB { background-position: -580px -80px; }
+.emoji-1F476-1F3FC { background-position: -580px -100px; }
+.emoji-1F476-1F3FD { background-position: -580px -120px; }
+.emoji-1F476-1F3FE { background-position: -580px -140px; }
+.emoji-1F476-1F3FF { background-position: -580px -160px; }
+.emoji-1F477 { background-position: -580px -180px; }
+.emoji-1F477-1F3FB { background-position: -580px -200px; }
+.emoji-1F477-1F3FC { background-position: -580px -220px; }
+.emoji-1F477-1F3FD { background-position: -580px -240px; }
+.emoji-1F477-1F3FE { background-position: -580px -260px; }
+.emoji-1F477-1F3FF { background-position: -580px -280px; }
+.emoji-1F478 { background-position: -580px -300px; }
+.emoji-1F478-1F3FB { background-position: -580px -320px; }
+.emoji-1F478-1F3FC { background-position: -580px -340px; }
+.emoji-1F478-1F3FD { background-position: -580px -360px; }
+.emoji-1F478-1F3FE { background-position: -580px -380px; }
+.emoji-1F478-1F3FF { background-position: -580px -400px; }
+.emoji-1F479 { background-position: -580px -420px; }
+.emoji-1F47A { background-position: -580px -440px; }
+.emoji-1F47B { background-position: -580px -460px; }
+.emoji-1F47C { background-position: -580px -480px; }
+.emoji-1F47C-1F3FB { background-position: -580px -500px; }
+.emoji-1F47C-1F3FC { background-position: -580px -520px; }
+.emoji-1F47C-1F3FD { background-position: -580px -540px; }
+.emoji-1F47C-1F3FE { background-position: -580px -560px; }
+.emoji-1F47C-1F3FF { background-position: 0px -580px; }
+.emoji-1F47D { background-position: -20px -580px; }
+.emoji-1F47E { background-position: -40px -580px; }
+.emoji-1F47F { background-position: -60px -580px; }
+.emoji-1F480 { background-position: -80px -580px; }
+.emoji-1F481 { background-position: -100px -580px; }
+.emoji-1F481-1F3FB { background-position: -120px -580px; }
+.emoji-1F481-1F3FC { background-position: -140px -580px; }
+.emoji-1F481-1F3FD { background-position: -160px -580px; }
+.emoji-1F481-1F3FE { background-position: -180px -580px; }
+.emoji-1F481-1F3FF { background-position: -200px -580px; }
+.emoji-1F482 { background-position: -220px -580px; }
+.emoji-1F482-1F3FB { background-position: -240px -580px; }
+.emoji-1F482-1F3FC { background-position: -260px -580px; }
+.emoji-1F482-1F3FD { background-position: -280px -580px; }
+.emoji-1F482-1F3FE { background-position: -300px -580px; }
+.emoji-1F482-1F3FF { background-position: -320px -580px; }
+.emoji-1F483 { background-position: -340px -580px; }
+.emoji-1F483-1F3FB { background-position: -360px -580px; }
+.emoji-1F483-1F3FC { background-position: -380px -580px; }
+.emoji-1F483-1F3FD { background-position: -400px -580px; }
+.emoji-1F483-1F3FE { background-position: -420px -580px; }
+.emoji-1F483-1F3FF { background-position: -440px -580px; }
+.emoji-1F484 { background-position: -460px -580px; }
+.emoji-1F485 { background-position: -480px -580px; }
+.emoji-1F485-1F3FB { background-position: -500px -580px; }
+.emoji-1F485-1F3FC { background-position: -520px -580px; }
+.emoji-1F485-1F3FD { background-position: -540px -580px; }
+.emoji-1F485-1F3FE { background-position: -560px -580px; }
+.emoji-1F485-1F3FF { background-position: -580px -580px; }
+.emoji-1F486 { background-position: -600px 0px; }
+.emoji-1F486-1F3FB { background-position: -600px -20px; }
+.emoji-1F486-1F3FC { background-position: -600px -40px; }
+.emoji-1F486-1F3FD { background-position: -600px -60px; }
+.emoji-1F486-1F3FE { background-position: -600px -80px; }
+.emoji-1F486-1F3FF { background-position: -600px -100px; }
+.emoji-1F487 { background-position: -600px -120px; }
+.emoji-1F487-1F3FB { background-position: -600px -140px; }
+.emoji-1F487-1F3FC { background-position: -600px -160px; }
+.emoji-1F487-1F3FD { background-position: -600px -180px; }
+.emoji-1F487-1F3FE { background-position: -600px -200px; }
+.emoji-1F487-1F3FF { background-position: -600px -220px; }
+.emoji-1F488 { background-position: -600px -240px; }
+.emoji-1F489 { background-position: -600px -260px; }
+.emoji-1F48A { background-position: -600px -280px; }
+.emoji-1F48B { background-position: -600px -300px; }
+.emoji-1F48C { background-position: -600px -320px; }
+.emoji-1F48D { background-position: -600px -340px; }
+.emoji-1F48E { background-position: -600px -360px; }
+.emoji-1F48F { background-position: -600px -380px; }
+.emoji-1F490 { background-position: -600px -400px; }
+.emoji-1F491 { background-position: -600px -420px; }
+.emoji-1F492 { background-position: -600px -440px; }
+.emoji-1F493 { background-position: -600px -460px; }
+.emoji-1F494 { background-position: -600px -480px; }
+.emoji-1F495 { background-position: -600px -500px; }
+.emoji-1F496 { background-position: -600px -520px; }
+.emoji-1F497 { background-position: -600px -540px; }
+.emoji-1F498 { background-position: -600px -560px; }
+.emoji-1F499 { background-position: -600px -580px; }
+.emoji-1F49A { background-position: 0px -600px; }
+.emoji-1F49B { background-position: -20px -600px; }
+.emoji-1F49C { background-position: -40px -600px; }
+.emoji-1F49D { background-position: -60px -600px; }
+.emoji-1F49E { background-position: -80px -600px; }
+.emoji-1F49F { background-position: -100px -600px; }
+.emoji-1F4A0 { background-position: -120px -600px; }
+.emoji-1F4A1 { background-position: -140px -600px; }
+.emoji-1F4A2 { background-position: -160px -600px; }
+.emoji-1F4A3 { background-position: -180px -600px; }
+.emoji-1F4A4 { background-position: -200px -600px; }
+.emoji-1F4A5 { background-position: -220px -600px; }
+.emoji-1F4A6 { background-position: -240px -600px; }
+.emoji-1F4A7 { background-position: -260px -600px; }
+.emoji-1F4A8 { background-position: -280px -600px; }
+.emoji-1F4A9 { background-position: -300px -600px; }
+.emoji-1F4AA { background-position: -320px -600px; }
+.emoji-1F4AA-1F3FB { background-position: -340px -600px; }
+.emoji-1F4AA-1F3FC { background-position: -360px -600px; }
+.emoji-1F4AA-1F3FD { background-position: -380px -600px; }
+.emoji-1F4AA-1F3FE { background-position: -400px -600px; }
+.emoji-1F4AA-1F3FF { background-position: -420px -600px; }
+.emoji-1F4AB { background-position: -440px -600px; }
+.emoji-1F4AC { background-position: -460px -600px; }
+.emoji-1F4AD { background-position: -480px -600px; }
+.emoji-1F4AE { background-position: -500px -600px; }
+.emoji-1F4AF { background-position: -520px -600px; }
+.emoji-1F4B0 { background-position: -540px -600px; }
+.emoji-1F4B1 { background-position: -560px -600px; }
+.emoji-1F4B2 { background-position: -580px -600px; }
+.emoji-1F4B3 { background-position: -600px -600px; }
+.emoji-1F4B4 { background-position: -620px 0px; }
+.emoji-1F4B5 { background-position: -620px -20px; }
+.emoji-1F4B6 { background-position: -620px -40px; }
+.emoji-1F4B7 { background-position: -620px -60px; }
+.emoji-1F4B8 { background-position: -620px -80px; }
+.emoji-1F4B9 { background-position: -620px -100px; }
+.emoji-1F4BA { background-position: -620px -120px; }
+.emoji-1F4BB { background-position: -620px -140px; }
+.emoji-1F4BC { background-position: -620px -160px; }
+.emoji-1F4BD { background-position: -620px -180px; }
+.emoji-1F4BE { background-position: -620px -200px; }
+.emoji-1F4BF { background-position: -620px -220px; }
+.emoji-1F4C0 { background-position: -620px -240px; }
+.emoji-1F4C1 { background-position: -620px -260px; }
+.emoji-1F4C2 { background-position: -620px -280px; }
+.emoji-1F4C3 { background-position: -620px -300px; }
+.emoji-1F4C4 { background-position: -620px -320px; }
+.emoji-1F4C5 { background-position: -620px -340px; }
+.emoji-1F4C6 { background-position: -620px -360px; }
+.emoji-1F4C7 { background-position: -620px -380px; }
+.emoji-1F4C8 { background-position: -620px -400px; }
+.emoji-1F4C9 { background-position: -620px -420px; }
+.emoji-1F4CA { background-position: -620px -440px; }
+.emoji-1F4CB { background-position: -620px -460px; }
+.emoji-1F4CC { background-position: -620px -480px; }
+.emoji-1F4CD { background-position: -620px -500px; }
+.emoji-1F4CE { background-position: -620px -520px; }
+.emoji-1F4CF { background-position: -620px -540px; }
+.emoji-1F4D0 { background-position: -620px -560px; }
+.emoji-1F4D1 { background-position: -620px -580px; }
+.emoji-1F4D2 { background-position: -620px -600px; }
+.emoji-1F4D3 { background-position: 0px -620px; }
+.emoji-1F4D4 { background-position: -20px -620px; }
+.emoji-1F4D5 { background-position: -40px -620px; }
+.emoji-1F4D6 { background-position: -60px -620px; }
+.emoji-1F4D7 { background-position: -80px -620px; }
+.emoji-1F4D8 { background-position: -100px -620px; }
+.emoji-1F4D9 { background-position: -120px -620px; }
+.emoji-1F4DA { background-position: -140px -620px; }
+.emoji-1F4DB { background-position: -160px -620px; }
+.emoji-1F4DC { background-position: -180px -620px; }
+.emoji-1F4DD { background-position: -200px -620px; }
+.emoji-1F4DE { background-position: -220px -620px; }
+.emoji-1F4DF { background-position: -240px -620px; }
+.emoji-1F4E0 { background-position: -260px -620px; }
+.emoji-1F4E1 { background-position: -280px -620px; }
+.emoji-1F4E2 { background-position: -300px -620px; }
+.emoji-1F4E3 { background-position: -320px -620px; }
+.emoji-1F4E4 { background-position: -340px -620px; }
+.emoji-1F4E5 { background-position: -360px -620px; }
+.emoji-1F4E6 { background-position: -380px -620px; }
+.emoji-1F4E7 { background-position: -400px -620px; }
+.emoji-1F4E8 { background-position: -420px -620px; }
+.emoji-1F4E9 { background-position: -440px -620px; }
+.emoji-1F4EA { background-position: -460px -620px; }
+.emoji-1F4EB { background-position: -480px -620px; }
+.emoji-1F4EC { background-position: -500px -620px; }
+.emoji-1F4ED { background-position: -520px -620px; }
+.emoji-1F4EE { background-position: -540px -620px; }
+.emoji-1F4EF { background-position: -560px -620px; }
+.emoji-1F4F0 { background-position: -580px -620px; }
+.emoji-1F4F1 { background-position: -600px -620px; }
+.emoji-1F4F2 { background-position: -620px -620px; }
+.emoji-1F4F3 { background-position: -640px 0px; }
+.emoji-1F4F4 { background-position: -640px -20px; }
+.emoji-1F4F5 { background-position: -640px -40px; }
+.emoji-1F4F6 { background-position: -640px -60px; }
+.emoji-1F4F7 { background-position: -640px -80px; }
+.emoji-1F4F8 { background-position: -640px -100px; }
+.emoji-1F4F9 { background-position: -640px -120px; }
+.emoji-1F4FA { background-position: -640px -140px; }
+.emoji-1F4FB { background-position: -640px -160px; }
+.emoji-1F4FC { background-position: -640px -180px; }
+.emoji-1F4FD { background-position: -640px -200px; }
+.emoji-1F4FE { background-position: -640px -220px; }
+.emoji-1F4FF { background-position: -640px -240px; }
+.emoji-1F500 { background-position: -640px -260px; }
+.emoji-1F501 { background-position: -640px -280px; }
+.emoji-1F502 { background-position: -640px -300px; }
+.emoji-1F503 { background-position: -640px -320px; }
+.emoji-1F504 { background-position: -640px -340px; }
+.emoji-1F505 { background-position: -640px -360px; }
+.emoji-1F506 { background-position: -640px -380px; }
+.emoji-1F507 { background-position: -640px -400px; }
+.emoji-1F508 { background-position: -640px -420px; }
+.emoji-1F509 { background-position: -640px -440px; }
+.emoji-1F50A { background-position: -640px -460px; }
+.emoji-1F50B { background-position: -640px -480px; }
+.emoji-1F50C { background-position: -640px -500px; }
+.emoji-1F50D { background-position: -640px -520px; }
+.emoji-1F50E { background-position: -640px -540px; }
+.emoji-1F50F { background-position: -640px -560px; }
+.emoji-1F510 { background-position: -640px -580px; }
+.emoji-1F511 { background-position: -640px -600px; }
+.emoji-1F512 { background-position: -640px -620px; }
+.emoji-1F513 { background-position: 0px -640px; }
+.emoji-1F514 { background-position: -20px -640px; }
+.emoji-1F515 { background-position: -40px -640px; }
+.emoji-1F516 { background-position: -60px -640px; }
+.emoji-1F517 { background-position: -80px -640px; }
+.emoji-1F518 { background-position: -100px -640px; }
+.emoji-1F519 { background-position: -120px -640px; }
+.emoji-1F51A { background-position: -140px -640px; }
+.emoji-1F51B { background-position: -160px -640px; }
+.emoji-1F51C { background-position: -180px -640px; }
+.emoji-1F51D { background-position: -200px -640px; }
+.emoji-1F51E { background-position: -220px -640px; }
+.emoji-1F51F { background-position: -240px -640px; }
+.emoji-1F520 { background-position: -260px -640px; }
+.emoji-1F521 { background-position: -280px -640px; }
+.emoji-1F522 { background-position: -300px -640px; }
+.emoji-1F523 { background-position: -320px -640px; }
+.emoji-1F524 { background-position: -340px -640px; }
+.emoji-1F525 { background-position: -360px -640px; }
+.emoji-1F526 { background-position: -380px -640px; }
+.emoji-1F527 { background-position: -400px -640px; }
+.emoji-1F528 { background-position: -420px -640px; }
+.emoji-1F529 { background-position: -440px -640px; }
+.emoji-1F52A { background-position: -460px -640px; }
+.emoji-1F52B { background-position: -480px -640px; }
+.emoji-1F52C { background-position: -500px -640px; }
+.emoji-1F52D { background-position: -520px -640px; }
+.emoji-1F52E { background-position: -540px -640px; }
+.emoji-1F52F { background-position: -560px -640px; }
+.emoji-1F530 { background-position: -580px -640px; }
+.emoji-1F531 { background-position: -600px -640px; }
+.emoji-1F532 { background-position: -620px -640px; }
+.emoji-1F533 { background-position: -640px -640px; }
+.emoji-1F534 { background-position: -660px 0px; }
+.emoji-1F535 { background-position: -660px -20px; }
+.emoji-1F536 { background-position: -660px -40px; }
+.emoji-1F537 { background-position: -660px -60px; }
+.emoji-1F538 { background-position: -660px -80px; }
+.emoji-1F539 { background-position: -660px -100px; }
+.emoji-1F53A { background-position: -660px -120px; }
+.emoji-1F53B { background-position: -660px -140px; }
+.emoji-1F53C { background-position: -660px -160px; }
+.emoji-1F53D { background-position: -660px -180px; }
+.emoji-1F546 { background-position: -660px -200px; }
+.emoji-1F547 { background-position: -660px -220px; }
+.emoji-1F548 { background-position: -660px -240px; }
+.emoji-1F549 { background-position: -660px -260px; }
+.emoji-1F54A { background-position: -660px -280px; }
+.emoji-1F54B { background-position: -660px -300px; }
+.emoji-1F54C { background-position: -660px -320px; }
+.emoji-1F54D { background-position: -660px -340px; }
+.emoji-1F54E { background-position: -660px -360px; }
+.emoji-1F550 { background-position: -660px -380px; }
+.emoji-1F551 { background-position: -660px -400px; }
+.emoji-1F552 { background-position: -660px -420px; }
+.emoji-1F553 { background-position: -660px -440px; }
+.emoji-1F554 { background-position: -660px -460px; }
+.emoji-1F555 { background-position: -660px -480px; }
+.emoji-1F556 { background-position: -660px -500px; }
+.emoji-1F557 { background-position: -660px -520px; }
+.emoji-1F558 { background-position: -660px -540px; }
+.emoji-1F559 { background-position: -660px -560px; }
+.emoji-1F55A { background-position: -660px -580px; }
+.emoji-1F55B { background-position: -660px -600px; }
+.emoji-1F55C { background-position: -660px -620px; }
+.emoji-1F55D { background-position: -660px -640px; }
+.emoji-1F55E { background-position: 0px -660px; }
+.emoji-1F55F { background-position: -20px -660px; }
+.emoji-1F560 { background-position: -40px -660px; }
+.emoji-1F561 { background-position: -60px -660px; }
+.emoji-1F562 { background-position: -80px -660px; }
+.emoji-1F563 { background-position: -100px -660px; }
+.emoji-1F564 { background-position: -120px -660px; }
+.emoji-1F565 { background-position: -140px -660px; }
+.emoji-1F566 { background-position: -160px -660px; }
+.emoji-1F567 { background-position: -180px -660px; }
+.emoji-1F568 { background-position: -200px -660px; }
+.emoji-1F569 { background-position: -220px -660px; }
+.emoji-1F56A { background-position: -240px -660px; }
+.emoji-1F56B { background-position: -260px -660px; }
+.emoji-1F56C { background-position: -280px -660px; }
+.emoji-1F56D { background-position: -300px -660px; }
+.emoji-1F56E { background-position: -320px -660px; }
+.emoji-1F56F { background-position: -340px -660px; }
+.emoji-1F570 { background-position: -360px -660px; }
+.emoji-1F571 { background-position: -380px -660px; }
+.emoji-1F572 { background-position: -400px -660px; }
+.emoji-1F573 { background-position: -420px -660px; }
+.emoji-1F574 { background-position: -440px -660px; }
+.emoji-1F575 { background-position: -460px -660px; }
+.emoji-1F575-1F3FB { background-position: -480px -660px; }
+.emoji-1F575-1F3FC { background-position: -500px -660px; }
+.emoji-1F575-1F3FD { background-position: -520px -660px; }
+.emoji-1F575-1F3FE { background-position: -540px -660px; }
+.emoji-1F575-1F3FF { background-position: -560px -660px; }
+.emoji-1F576 { background-position: -580px -660px; }
+.emoji-1F577 { background-position: -600px -660px; }
+.emoji-1F578 { background-position: -620px -660px; }
+.emoji-1F579 { background-position: -640px -660px; }
+.emoji-1F57B { background-position: -660px -660px; }
+.emoji-1F57E { background-position: -680px 0px; }
+.emoji-1F57F { background-position: -680px -20px; }
+.emoji-1F581 { background-position: -680px -40px; }
+.emoji-1F582 { background-position: -680px -60px; }
+.emoji-1F583 { background-position: -680px -80px; }
+.emoji-1F585 { background-position: -680px -100px; }
+.emoji-1F586 { background-position: -680px -120px; }
+.emoji-1F587 { background-position: -680px -140px; }
+.emoji-1F588 { background-position: -680px -160px; }
+.emoji-1F589 { background-position: -680px -180px; }
+.emoji-1F58A { background-position: -680px -200px; }
+.emoji-1F58B { background-position: -680px -220px; }
+.emoji-1F58C { background-position: -680px -240px; }
+.emoji-1F58D { background-position: -680px -260px; }
+.emoji-1F58E { background-position: -680px -280px; }
+.emoji-1F58F { background-position: -680px -300px; }
+.emoji-1F590 { background-position: -680px -320px; }
+.emoji-1F590-1F3FB { background-position: -680px -340px; }
+.emoji-1F590-1F3FC { background-position: -680px -360px; }
+.emoji-1F590-1F3FD { background-position: -680px -380px; }
+.emoji-1F590-1F3FE { background-position: -680px -400px; }
+.emoji-1F590-1F3FF { background-position: -680px -420px; }
+.emoji-1F591 { background-position: -680px -440px; }
+.emoji-1F592 { background-position: -680px -460px; }
+.emoji-1F593 { background-position: -680px -480px; }
+.emoji-1F594 { background-position: -680px -500px; }
+.emoji-1F595 { background-position: -680px -520px; }
+.emoji-1F595-1F3FB { background-position: -680px -540px; }
+.emoji-1F595-1F3FC { background-position: -680px -560px; }
+.emoji-1F595-1F3FD { background-position: -680px -580px; }
+.emoji-1F595-1F3FE { background-position: -680px -600px; }
+.emoji-1F595-1F3FF { background-position: -680px -620px; }
+.emoji-1F596 { background-position: -680px -640px; }
+.emoji-1F596-1F3FB { background-position: -680px -660px; }
+.emoji-1F596-1F3FC { background-position: 0px -680px; }
+.emoji-1F596-1F3FD { background-position: -20px -680px; }
+.emoji-1F596-1F3FE { background-position: -40px -680px; }
+.emoji-1F596-1F3FF { background-position: -60px -680px; }
+.emoji-1F597 { background-position: -80px -680px; }
+.emoji-1F598 { background-position: -100px -680px; }
+.emoji-1F599 { background-position: -120px -680px; }
+.emoji-1F59E { background-position: -140px -680px; }
+.emoji-1F59F { background-position: -160px -680px; }
+.emoji-1F5A5 { background-position: -180px -680px; }
+.emoji-1F5A6 { background-position: -200px -680px; }
+.emoji-1F5A7 { background-position: -220px -680px; }
+.emoji-1F5A8 { background-position: -240px -680px; }
+.emoji-1F5A9 { background-position: -260px -680px; }
+.emoji-1F5AA { background-position: -280px -680px; }
+.emoji-1F5AB { background-position: -300px -680px; }
+.emoji-1F5AD { background-position: -320px -680px; }
+.emoji-1F5AE { background-position: -340px -680px; }
+.emoji-1F5AF { background-position: -360px -680px; }
+.emoji-1F5B1 { background-position: -380px -680px; }
+.emoji-1F5B2 { background-position: -400px -680px; }
+.emoji-1F5B3 { background-position: -420px -680px; }
+.emoji-1F5B4 { background-position: -440px -680px; }
+.emoji-1F5B8 { background-position: -460px -680px; }
+.emoji-1F5B9 { background-position: -480px -680px; }
+.emoji-1F5BC { background-position: -500px -680px; }
+.emoji-1F5BD { background-position: -520px -680px; }
+.emoji-1F5BE { background-position: -540px -680px; }
+.emoji-1F5C0 { background-position: -560px -680px; }
+.emoji-1F5C1 { background-position: -580px -680px; }
+.emoji-1F5C2 { background-position: -600px -680px; }
+.emoji-1F5C3 { background-position: -620px -680px; }
+.emoji-1F5C4 { background-position: -640px -680px; }
+.emoji-1F5C6 { background-position: -660px -680px; }
+.emoji-1F5C7 { background-position: -680px -680px; }
+.emoji-1F5C9 { background-position: -700px 0px; }
+.emoji-1F5CA { background-position: -700px -20px; }
+.emoji-1F5CE { background-position: -700px -40px; }
+.emoji-1F5CF { background-position: -700px -60px; }
+.emoji-1F5D0 { background-position: -700px -80px; }
+.emoji-1F5D1 { background-position: -700px -100px; }
+.emoji-1F5D2 { background-position: -700px -120px; }
+.emoji-1F5D3 { background-position: -700px -140px; }
+.emoji-1F5D4 { background-position: -700px -160px; }
+.emoji-1F5D8 { background-position: -700px -180px; }
+.emoji-1F5D9 { background-position: -700px -200px; }
+.emoji-1F5DC { background-position: -700px -220px; }
+.emoji-1F5DD { background-position: -700px -240px; }
+.emoji-1F5DE { background-position: -700px -260px; }
+.emoji-1F5E0 { background-position: -700px -280px; }
+.emoji-1F5E1 { background-position: -700px -300px; }
+.emoji-1F5E2 { background-position: -700px -320px; }
+.emoji-1F5E3 { background-position: -700px -340px; }
+.emoji-1F5E8 { background-position: -700px -360px; }
+.emoji-1F5E9 { background-position: -700px -380px; }
+.emoji-1F5EA { background-position: -700px -400px; }
+.emoji-1F5EB { background-position: -700px -420px; }
+.emoji-1F5EC { background-position: -700px -440px; }
+.emoji-1F5ED { background-position: -700px -460px; }
+.emoji-1F5EE { background-position: -700px -480px; }
+.emoji-1F5EF { background-position: -700px -500px; }
+.emoji-1F5F0 { background-position: -700px -520px; }
+.emoji-1F5F1 { background-position: -700px -540px; }
+.emoji-1F5F2 { background-position: -700px -560px; }
+.emoji-1F5F3 { background-position: -700px -580px; }
+.emoji-1F5F4 { background-position: -700px -600px; }
+.emoji-1F5F5 { background-position: -700px -620px; }
+.emoji-1F5F8 { background-position: -700px -640px; }
+.emoji-1F5F9 { background-position: -700px -660px; }
+.emoji-1F5FA { background-position: -700px -680px; }
+.emoji-1F5FB { background-position: 0px -700px; }
+.emoji-1F5FC { background-position: -20px -700px; }
+.emoji-1F5FD { background-position: -40px -700px; }
+.emoji-1F5FE { background-position: -60px -700px; }
+.emoji-1F5FF { background-position: -80px -700px; }
+.emoji-1F600 { background-position: -100px -700px; }
+.emoji-1F601 { background-position: -120px -700px; }
+.emoji-1F602 { background-position: -140px -700px; }
+.emoji-1F603 { background-position: -160px -700px; }
+.emoji-1F604 { background-position: -180px -700px; }
+.emoji-1F605 { background-position: -200px -700px; }
+.emoji-1F606 { background-position: -220px -700px; }
+.emoji-1F607 { background-position: -240px -700px; }
+.emoji-1F608 { background-position: -260px -700px; }
+.emoji-1F609 { background-position: -280px -700px; }
+.emoji-1F60A { background-position: -300px -700px; }
+.emoji-1F60B { background-position: -320px -700px; }
+.emoji-1F60C { background-position: -340px -700px; }
+.emoji-1F60D { background-position: -360px -700px; }
+.emoji-1F60E { background-position: -380px -700px; }
+.emoji-1F60F { background-position: -400px -700px; }
+.emoji-1F610 { background-position: -420px -700px; }
+.emoji-1F611 { background-position: -440px -700px; }
+.emoji-1F612 { background-position: -460px -700px; }
+.emoji-1F613 { background-position: -480px -700px; }
+.emoji-1F614 { background-position: -500px -700px; }
+.emoji-1F615 { background-position: -520px -700px; }
+.emoji-1F616 { background-position: -540px -700px; }
+.emoji-1F617 { background-position: -560px -700px; }
+.emoji-1F618 { background-position: -580px -700px; }
+.emoji-1F619 { background-position: -600px -700px; }
+.emoji-1F61A { background-position: -620px -700px; }
+.emoji-1F61B { background-position: -640px -700px; }
+.emoji-1F61C { background-position: -660px -700px; }
+.emoji-1F61D { background-position: -680px -700px; }
+.emoji-1F61E { background-position: -700px -700px; }
+.emoji-1F61F { background-position: -720px 0px; }
+.emoji-1F620 { background-position: -720px -20px; }
+.emoji-1F621 { background-position: -720px -40px; }
+.emoji-1F622 { background-position: -720px -60px; }
+.emoji-1F623 { background-position: -720px -80px; }
+.emoji-1F624 { background-position: -720px -100px; }
+.emoji-1F625 { background-position: -720px -120px; }
+.emoji-1F626 { background-position: -720px -140px; }
+.emoji-1F627 { background-position: -720px -160px; }
+.emoji-1F628 { background-position: -720px -180px; }
+.emoji-1F629 { background-position: -720px -200px; }
+.emoji-1F62A { background-position: -720px -220px; }
+.emoji-1F62B { background-position: -720px -240px; }
+.emoji-1F62C { background-position: -720px -260px; }
+.emoji-1F62D { background-position: -720px -280px; }
+.emoji-1F62E { background-position: -720px -300px; }
+.emoji-1F62F { background-position: -720px -320px; }
+.emoji-1F630 { background-position: -720px -340px; }
+.emoji-1F631 { background-position: -720px -360px; }
+.emoji-1F632 { background-position: -720px -380px; }
+.emoji-1F633 { background-position: -720px -400px; }
+.emoji-1F634 { background-position: -720px -420px; }
+.emoji-1F635 { background-position: -720px -440px; }
+.emoji-1F636 { background-position: -720px -460px; }
+.emoji-1F637 { background-position: -720px -480px; }
+.emoji-1F638 { background-position: -720px -500px; }
+.emoji-1F639 { background-position: -720px -520px; }
+.emoji-1F63A { background-position: -720px -540px; }
+.emoji-1F63B { background-position: -720px -560px; }
+.emoji-1F63C { background-position: -720px -580px; }
+.emoji-1F63D { background-position: -720px -600px; }
+.emoji-1F63E { background-position: -720px -620px; }
+.emoji-1F63F { background-position: -720px -640px; }
+.emoji-1F640 { background-position: -720px -660px; }
+.emoji-1F641 { background-position: -720px -680px; }
+.emoji-1F642 { background-position: -720px -700px; }
+.emoji-1F643 { background-position: 0px -720px; }
+.emoji-1F644 { background-position: -20px -720px; }
+.emoji-1F645 { background-position: -40px -720px; }
+.emoji-1F645-1F3FB { background-position: -60px -720px; }
+.emoji-1F645-1F3FC { background-position: -80px -720px; }
+.emoji-1F645-1F3FD { background-position: -100px -720px; }
+.emoji-1F645-1F3FE { background-position: -120px -720px; }
+.emoji-1F645-1F3FF { background-position: -140px -720px; }
+.emoji-1F646 { background-position: -160px -720px; }
+.emoji-1F646-1F3FB { background-position: -180px -720px; }
+.emoji-1F646-1F3FC { background-position: -200px -720px; }
+.emoji-1F646-1F3FD { background-position: -220px -720px; }
+.emoji-1F646-1F3FE { background-position: -240px -720px; }
+.emoji-1F646-1F3FF { background-position: -260px -720px; }
+.emoji-1F647 { background-position: -280px -720px; }
+.emoji-1F647-1F3FB { background-position: -300px -720px; }
+.emoji-1F647-1F3FC { background-position: -320px -720px; }
+.emoji-1F647-1F3FD { background-position: -340px -720px; }
+.emoji-1F647-1F3FE { background-position: -360px -720px; }
+.emoji-1F647-1F3FF { background-position: -380px -720px; }
+.emoji-1F648 { background-position: -400px -720px; }
+.emoji-1F649 { background-position: -420px -720px; }
+.emoji-1F64A { background-position: -440px -720px; }
+.emoji-1F64B { background-position: -460px -720px; }
+.emoji-1F64B-1F3FB { background-position: -480px -720px; }
+.emoji-1F64B-1F3FC { background-position: -500px -720px; }
+.emoji-1F64B-1F3FD { background-position: -520px -720px; }
+.emoji-1F64B-1F3FE { background-position: -540px -720px; }
+.emoji-1F64B-1F3FF { background-position: -560px -720px; }
+.emoji-1F64C { background-position: -580px -720px; }
+.emoji-1F64C-1F3FB { background-position: -600px -720px; }
+.emoji-1F64C-1F3FC { background-position: -620px -720px; }
+.emoji-1F64C-1F3FD { background-position: -640px -720px; }
+.emoji-1F64C-1F3FE { background-position: -660px -720px; }
+.emoji-1F64C-1F3FF { background-position: -680px -720px; }
+.emoji-1F64D { background-position: -700px -720px; }
+.emoji-1F64D-1F3FB { background-position: -720px -720px; }
+.emoji-1F64D-1F3FC { background-position: -740px 0px; }
+.emoji-1F64D-1F3FD { background-position: -740px -20px; }
+.emoji-1F64D-1F3FE { background-position: -740px -40px; }
+.emoji-1F64D-1F3FF { background-position: -740px -60px; }
+.emoji-1F64E { background-position: -740px -80px; }
+.emoji-1F64E-1F3FB { background-position: -740px -100px; }
+.emoji-1F64E-1F3FC { background-position: -740px -120px; }
+.emoji-1F64E-1F3FD { background-position: -740px -140px; }
+.emoji-1F64E-1F3FE { background-position: -740px -160px; }
+.emoji-1F64E-1F3FF { background-position: -740px -180px; }
+.emoji-1F64F { background-position: -740px -200px; }
+.emoji-1F64F-1F3FB { background-position: -740px -220px; }
+.emoji-1F64F-1F3FC { background-position: -740px -240px; }
+.emoji-1F64F-1F3FD { background-position: -740px -260px; }
+.emoji-1F64F-1F3FE { background-position: -740px -280px; }
+.emoji-1F64F-1F3FF { background-position: -740px -300px; }
+.emoji-1F680 { background-position: -740px -320px; }
+.emoji-1F681 { background-position: -740px -340px; }
+.emoji-1F682 { background-position: -740px -360px; }
+.emoji-1F683 { background-position: -740px -380px; }
+.emoji-1F684 { background-position: -740px -400px; }
+.emoji-1F685 { background-position: -740px -420px; }
+.emoji-1F686 { background-position: -740px -440px; }
+.emoji-1F687 { background-position: -740px -460px; }
+.emoji-1F688 { background-position: -740px -480px; }
+.emoji-1F689 { background-position: -740px -500px; }
+.emoji-1F68A { background-position: -740px -520px; }
+.emoji-1F68B { background-position: -740px -540px; }
+.emoji-1F68C { background-position: -740px -560px; }
+.emoji-1F68D { background-position: -740px -580px; }
+.emoji-1F68E { background-position: -740px -600px; }
+.emoji-1F68F { background-position: -740px -620px; }
+.emoji-1F690 { background-position: -740px -640px; }
+.emoji-1F691 { background-position: -740px -660px; }
+.emoji-1F692 { background-position: -740px -680px; }
+.emoji-1F693 { background-position: -740px -700px; }
+.emoji-1F694 { background-position: -740px -720px; }
+.emoji-1F695 { background-position: 0px -740px; }
+.emoji-1F696 { background-position: -20px -740px; }
+.emoji-1F697 { background-position: -40px -740px; }
+.emoji-1F698 { background-position: -60px -740px; }
+.emoji-1F699 { background-position: -80px -740px; }
+.emoji-1F69A { background-position: -100px -740px; }
+.emoji-1F69B { background-position: -120px -740px; }
+.emoji-1F69C { background-position: -140px -740px; }
+.emoji-1F69D { background-position: -160px -740px; }
+.emoji-1F69E { background-position: -180px -740px; }
+.emoji-1F69F { background-position: -200px -740px; }
+.emoji-1F6A0 { background-position: -220px -740px; }
+.emoji-1F6A1 { background-position: -240px -740px; }
+.emoji-1F6A2 { background-position: -260px -740px; }
+.emoji-1F6A3 { background-position: -280px -740px; }
+.emoji-1F6A3-1F3FB { background-position: -300px -740px; }
+.emoji-1F6A3-1F3FC { background-position: -320px -740px; }
+.emoji-1F6A3-1F3FD { background-position: -340px -740px; }
+.emoji-1F6A3-1F3FE { background-position: -360px -740px; }
+.emoji-1F6A3-1F3FF { background-position: -380px -740px; }
+.emoji-1F6A4 { background-position: -400px -740px; }
+.emoji-1F6A5 { background-position: -420px -740px; }
+.emoji-1F6A6 { background-position: -440px -740px; }
+.emoji-1F6A7 { background-position: -460px -740px; }
+.emoji-1F6A8 { background-position: -480px -740px; }
+.emoji-1F6A9 { background-position: -500px -740px; }
+.emoji-1F6AA { background-position: -520px -740px; }
+.emoji-1F6AB { background-position: -540px -740px; }
+.emoji-1F6AC { background-position: -560px -740px; }
+.emoji-1F6AD { background-position: -580px -740px; }
+.emoji-1F6AE { background-position: -600px -740px; }
+.emoji-1F6AF { background-position: -620px -740px; }
+.emoji-1F6B0 { background-position: -640px -740px; }
+.emoji-1F6B1 { background-position: -660px -740px; }
+.emoji-1F6B2 { background-position: -680px -740px; }
+.emoji-1F6B3 { background-position: -700px -740px; }
+.emoji-1F6B4 { background-position: -720px -740px; }
+.emoji-1F6B4-1F3FB { background-position: -740px -740px; }
+.emoji-1F6B4-1F3FC { background-position: -760px 0px; }
+.emoji-1F6B4-1F3FD { background-position: -760px -20px; }
+.emoji-1F6B4-1F3FE { background-position: -760px -40px; }
+.emoji-1F6B4-1F3FF { background-position: -760px -60px; }
+.emoji-1F6B5 { background-position: -760px -80px; }
+.emoji-1F6B5-1F3FB { background-position: -760px -100px; }
+.emoji-1F6B5-1F3FC { background-position: -760px -120px; }
+.emoji-1F6B5-1F3FD { background-position: -760px -140px; }
+.emoji-1F6B5-1F3FE { background-position: -760px -160px; }
+.emoji-1F6B5-1F3FF { background-position: -760px -180px; }
+.emoji-1F6B6 { background-position: -760px -200px; }
+.emoji-1F6B6-1F3FB { background-position: -760px -220px; }
+.emoji-1F6B6-1F3FC { background-position: -760px -240px; }
+.emoji-1F6B6-1F3FD { background-position: -760px -260px; }
+.emoji-1F6B6-1F3FE { background-position: -760px -280px; }
+.emoji-1F6B6-1F3FF { background-position: -760px -300px; }
+.emoji-1F6B7 { background-position: -760px -320px; }
+.emoji-1F6B8 { background-position: -760px -340px; }
+.emoji-1F6B9 { background-position: -760px -360px; }
+.emoji-1F6BA { background-position: -760px -380px; }
+.emoji-1F6BB { background-position: -760px -400px; }
+.emoji-1F6BC { background-position: -760px -420px; }
+.emoji-1F6BD { background-position: -760px -440px; }
+.emoji-1F6BE { background-position: -760px -460px; }
+.emoji-1F6BF { background-position: -760px -480px; }
+.emoji-1F6C0 { background-position: -760px -500px; }
+.emoji-1F6C0-1F3FB { background-position: -760px -520px; }
+.emoji-1F6C0-1F3FC { background-position: -760px -540px; }
+.emoji-1F6C0-1F3FD { background-position: -760px -560px; }
+.emoji-1F6C0-1F3FE { background-position: -760px -580px; }
+.emoji-1F6C0-1F3FF { background-position: -760px -600px; }
+.emoji-1F6C1 { background-position: -760px -620px; }
+.emoji-1F6C2 { background-position: -760px -640px; }
+.emoji-1F6C3 { background-position: -760px -660px; }
+.emoji-1F6C4 { background-position: -760px -680px; }
+.emoji-1F6C5 { background-position: -760px -700px; }
+.emoji-1F6C6 { background-position: -760px -720px; }
+.emoji-1F6C7 { background-position: -760px -740px; }
+.emoji-1F6C8 { background-position: 0px -760px; }
+.emoji-1F6C9 { background-position: -20px -760px; }
+.emoji-1F6CA { background-position: -40px -760px; }
+.emoji-1F6CB { background-position: -60px -760px; }
+.emoji-1F6CC { background-position: -80px -760px; }
+.emoji-1F6CD { background-position: -100px -760px; }
+.emoji-1F6CE { background-position: -120px -760px; }
+.emoji-1F6CF { background-position: -140px -760px; }
+.emoji-1F6D0 { background-position: -160px -760px; }
+.emoji-1F6E0 { background-position: -180px -760px; }
+.emoji-1F6E1 { background-position: -200px -760px; }
+.emoji-1F6E2 { background-position: -220px -760px; }
+.emoji-1F6E3 { background-position: -240px -760px; }
+.emoji-1F6E4 { background-position: -260px -760px; }
+.emoji-1F6E5 { background-position: -280px -760px; }
+.emoji-1F6E6 { background-position: -300px -760px; }
+.emoji-1F6E7 { background-position: -320px -760px; }
+.emoji-1F6E8 { background-position: -340px -760px; }
+.emoji-1F6E9 { background-position: -360px -760px; }
+.emoji-1F6EA { background-position: -380px -760px; }
+.emoji-1F6EB { background-position: -400px -760px; }
+.emoji-1F6EC { background-position: -420px -760px; }
+.emoji-1F6F0 { background-position: -440px -760px; }
+.emoji-1F6F1 { background-position: -460px -760px; }
+.emoji-1F6F2 { background-position: -480px -760px; }
+.emoji-1F6F3 { background-position: -500px -760px; }
+.emoji-1F910 { background-position: -520px -760px; }
+.emoji-1F911 { background-position: -540px -760px; }
+.emoji-1F912 { background-position: -560px -760px; }
+.emoji-1F913 { background-position: -580px -760px; }
+.emoji-1F914 { background-position: -600px -760px; }
+.emoji-1F915 { background-position: -620px -760px; }
+.emoji-1F916 { background-position: -640px -760px; }
+.emoji-1F917 { background-position: -660px -760px; }
+.emoji-1F918 { background-position: -680px -760px; }
+.emoji-1F918-1F3FB { background-position: -700px -760px; }
+.emoji-1F918-1F3FC { background-position: -720px -760px; }
+.emoji-1F918-1F3FD { background-position: -740px -760px; }
+.emoji-1F918-1F3FE { background-position: -760px -760px; }
+.emoji-1F918-1F3FF { background-position: -780px 0px; }
+.emoji-1F980 { background-position: -780px -20px; }
+.emoji-1F981 { background-position: -780px -40px; }
+.emoji-1F982 { background-position: -780px -60px; }
+.emoji-1F983 { background-position: -780px -80px; }
+.emoji-1F984 { background-position: -780px -100px; }
+.emoji-1F9C0 { background-position: -780px -120px; }
+.emoji-203C { background-position: -780px -140px; }
+.emoji-2049 { background-position: -780px -160px; }
+.emoji-2122 { background-position: -780px -180px; }
+.emoji-2139 { background-position: -780px -200px; }
+.emoji-2194 { background-position: -780px -220px; }
+.emoji-2195 { background-position: -780px -240px; }
+.emoji-2196 { background-position: -780px -260px; }
+.emoji-2197 { background-position: -780px -280px; }
+.emoji-2198 { background-position: -780px -300px; }
+.emoji-2199 { background-position: -780px -320px; }
+.emoji-21A9 { background-position: -780px -340px; }
+.emoji-21AA { background-position: -780px -360px; }
+.emoji-231A { background-position: -780px -380px; }
+.emoji-231B { background-position: -780px -400px; }
+.emoji-2328 { background-position: -780px -420px; }
+.emoji-23E9 { background-position: -780px -440px; }
+.emoji-23EA { background-position: -780px -460px; }
+.emoji-23EB { background-position: -780px -480px; }
+.emoji-23EC { background-position: -780px -500px; }
+.emoji-23ED { background-position: -780px -520px; }
+.emoji-23EE { background-position: -780px -540px; }
+.emoji-23EF { background-position: -780px -560px; }
+.emoji-23F0 { background-position: -780px -580px; }
+.emoji-23F1 { background-position: -780px -600px; }
+.emoji-23F2 { background-position: -780px -620px; }
+.emoji-23F3 { background-position: -780px -640px; }
+.emoji-23F8 { background-position: -780px -660px; }
+.emoji-23F9 { background-position: -780px -680px; }
+.emoji-23FA { background-position: -780px -700px; }
+.emoji-24C2 { background-position: -780px -720px; }
+.emoji-25AA { background-position: -780px -740px; }
+.emoji-25AB { background-position: -780px -760px; }
+.emoji-25B6 { background-position: 0px -780px; }
+.emoji-25C0 { background-position: -20px -780px; }
+.emoji-25FB { background-position: -40px -780px; }
+.emoji-25FC { background-position: -60px -780px; }
+.emoji-25FD { background-position: -80px -780px; }
+.emoji-25FE { background-position: -100px -780px; }
+.emoji-2600 { background-position: -120px -780px; }
+.emoji-2601 { background-position: -140px -780px; }
+.emoji-2602 { background-position: -160px -780px; }
+.emoji-2603 { background-position: -180px -780px; }
+.emoji-2604 { background-position: -200px -780px; }
+.emoji-260E { background-position: -220px -780px; }
+.emoji-2611 { background-position: -240px -780px; }
+.emoji-2614 { background-position: -260px -780px; }
+.emoji-2615 { background-position: -280px -780px; }
+.emoji-2618 { background-position: -300px -780px; }
+.emoji-261D { background-position: -320px -780px; }
+.emoji-261D-1F3FB { background-position: -340px -780px; }
+.emoji-261D-1F3FC { background-position: -360px -780px; }
+.emoji-261D-1F3FD { background-position: -380px -780px; }
+.emoji-261D-1F3FE { background-position: -400px -780px; }
+.emoji-261D-1F3FF { background-position: -420px -780px; }
+.emoji-2620 { background-position: -440px -780px; }
+.emoji-2622 { background-position: -460px -780px; }
+.emoji-2623 { background-position: -480px -780px; }
+.emoji-2626 { background-position: -500px -780px; }
+.emoji-262A { background-position: -520px -780px; }
+.emoji-262E { background-position: -540px -780px; }
+.emoji-262F { background-position: -560px -780px; }
+.emoji-2638 { background-position: -580px -780px; }
+.emoji-2639 { background-position: -600px -780px; }
+.emoji-263A { background-position: -620px -780px; }
+.emoji-2648 { background-position: -640px -780px; }
+.emoji-2649 { background-position: -660px -780px; }
+.emoji-264A { background-position: -680px -780px; }
+.emoji-264B { background-position: -700px -780px; }
+.emoji-264C { background-position: -720px -780px; }
+.emoji-264D { background-position: -740px -780px; }
+.emoji-264E { background-position: -760px -780px; }
+.emoji-264F { background-position: -780px -780px; }
+.emoji-2650 { background-position: -800px 0px; }
+.emoji-2651 { background-position: -800px -20px; }
+.emoji-2652 { background-position: -800px -40px; }
+.emoji-2653 { background-position: -800px -60px; }
+.emoji-2660 { background-position: -800px -80px; }
+.emoji-2663 { background-position: -800px -100px; }
+.emoji-2665 { background-position: -800px -120px; }
+.emoji-2666 { background-position: -800px -140px; }
+.emoji-2668 { background-position: -800px -160px; }
+.emoji-267B { background-position: -800px -180px; }
+.emoji-267F { background-position: -800px -200px; }
+.emoji-2692 { background-position: -800px -220px; }
+.emoji-2693 { background-position: -800px -240px; }
+.emoji-2694 { background-position: -800px -260px; }
+.emoji-2696 { background-position: -800px -280px; }
+.emoji-2697 { background-position: -800px -300px; }
+.emoji-2699 { background-position: -800px -320px; }
+.emoji-269B { background-position: -800px -340px; }
+.emoji-269C { background-position: -800px -360px; }
+.emoji-26A0 { background-position: -800px -380px; }
+.emoji-26A1 { background-position: -800px -400px; }
+.emoji-26AA { background-position: -800px -420px; }
+.emoji-26AB { background-position: -800px -440px; }
+.emoji-26B0 { background-position: -800px -460px; }
+.emoji-26B1 { background-position: -800px -480px; }
+.emoji-26BD { background-position: -800px -500px; }
+.emoji-26BE { background-position: -800px -520px; }
+.emoji-26C4 { background-position: -800px -540px; }
+.emoji-26C5 { background-position: -800px -560px; }
+.emoji-26C8 { background-position: -800px -580px; }
+.emoji-26CE { background-position: -800px -600px; }
+.emoji-26CF { background-position: -800px -620px; }
+.emoji-26D1 { background-position: -800px -640px; }
+.emoji-26D3 { background-position: -800px -660px; }
+.emoji-26D4 { background-position: -800px -680px; }
+.emoji-26E9 { background-position: -800px -700px; }
+.emoji-26EA { background-position: -800px -720px; }
+.emoji-26F0 { background-position: -800px -740px; }
+.emoji-26F1 { background-position: -800px -760px; }
+.emoji-26F2 { background-position: -800px -780px; }
+.emoji-26F3 { background-position: 0px -800px; }
+.emoji-26F4 { background-position: -20px -800px; }
+.emoji-26F5 { background-position: -40px -800px; }
+.emoji-26F7 { background-position: -60px -800px; }
+.emoji-26F8 { background-position: -80px -800px; }
+.emoji-26F9 { background-position: -100px -800px; }
+.emoji-26F9-1F3FB { background-position: -120px -800px; }
+.emoji-26F9-1F3FC { background-position: -140px -800px; }
+.emoji-26F9-1F3FD { background-position: -160px -800px; }
+.emoji-26F9-1F3FE { background-position: -180px -800px; }
+.emoji-26F9-1F3FF { background-position: -200px -800px; }
+.emoji-26FA { background-position: -220px -800px; }
+.emoji-26FD { background-position: -240px -800px; }
+.emoji-2702 { background-position: -260px -800px; }
+.emoji-2705 { background-position: -280px -800px; }
+.emoji-2708 { background-position: -300px -800px; }
+.emoji-2709 { background-position: -320px -800px; }
+.emoji-270A { background-position: -340px -800px; }
+.emoji-270A-1F3FB { background-position: -360px -800px; }
+.emoji-270A-1F3FC { background-position: -380px -800px; }
+.emoji-270A-1F3FD { background-position: -400px -800px; }
+.emoji-270A-1F3FE { background-position: -420px -800px; }
+.emoji-270A-1F3FF { background-position: -440px -800px; }
+.emoji-270B { background-position: -460px -800px; }
+.emoji-270B-1F3FB { background-position: -480px -800px; }
+.emoji-270B-1F3FC { background-position: -500px -800px; }
+.emoji-270B-1F3FD { background-position: -520px -800px; }
+.emoji-270B-1F3FE { background-position: -540px -800px; }
+.emoji-270B-1F3FF { background-position: -560px -800px; }
+.emoji-270C { background-position: -580px -800px; }
+.emoji-270C-1F3FB { background-position: -600px -800px; }
+.emoji-270C-1F3FC { background-position: -620px -800px; }
+.emoji-270C-1F3FD { background-position: -640px -800px; }
+.emoji-270C-1F3FE { background-position: -660px -800px; }
+.emoji-270C-1F3FF { background-position: -680px -800px; }
+.emoji-270D { background-position: -700px -800px; }
+.emoji-270D-1F3FB { background-position: -720px -800px; }
+.emoji-270D-1F3FC { background-position: -740px -800px; }
+.emoji-270D-1F3FD { background-position: -760px -800px; }
+.emoji-270D-1F3FE { background-position: -780px -800px; }
+.emoji-270D-1F3FF { background-position: -800px -800px; }
+.emoji-270F { background-position: -820px 0px; }
+.emoji-2712 { background-position: -820px -20px; }
+.emoji-2714 { background-position: -820px -40px; }
+.emoji-2716 { background-position: -820px -60px; }
+.emoji-271D { background-position: -820px -80px; }
+.emoji-2721 { background-position: -820px -100px; }
+.emoji-2728 { background-position: -820px -120px; }
+.emoji-2733 { background-position: -820px -140px; }
+.emoji-2734 { background-position: -820px -160px; }
+.emoji-2744 { background-position: -820px -180px; }
+.emoji-2747 { background-position: -820px -200px; }
+.emoji-274C { background-position: -820px -220px; }
+.emoji-274E { background-position: -820px -240px; }
+.emoji-2753 { background-position: -820px -260px; }
+.emoji-2754 { background-position: -820px -280px; }
+.emoji-2755 { background-position: -820px -300px; }
+.emoji-2757 { background-position: -820px -320px; }
+.emoji-2763 { background-position: -820px -340px; }
+.emoji-2764 { background-position: -820px -360px; }
+.emoji-2795 { background-position: -820px -380px; }
+.emoji-2796 { background-position: -820px -400px; }
+.emoji-2797 { background-position: -820px -420px; }
+.emoji-27A1 { background-position: -820px -440px; }
+.emoji-27B0 { background-position: -820px -460px; }
+.emoji-27BF { background-position: -820px -480px; }
+.emoji-2934 { background-position: -820px -500px; }
+.emoji-2935 { background-position: -820px -520px; }
+.emoji-2B05 { background-position: -820px -540px; }
+.emoji-2B06 { background-position: -820px -560px; }
+.emoji-2B07 { background-position: -820px -580px; }
+.emoji-2B1B { background-position: -820px -600px; }
+.emoji-2B1C { background-position: -820px -620px; }
+.emoji-2B50 { background-position: -820px -640px; }
+.emoji-2B55 { background-position: -820px -660px; }
+.emoji-3030 { background-position: -820px -680px; }
+.emoji-303D { background-position: -820px -700px; }
+.emoji-3297 { background-position: -820px -720px; }
+.emoji-3299 { background-position: -820px -740px; }
-.emoji-icon{
- background-image: image-url("emoji.png");
+.emoji-icon {
+ background-image: image-url('emoji.png');
background-repeat: no-repeat;
-}
+ height: 20px;
+ width: 20px;
-.emoji-0023-20E3 { background-position: 0px 0px; }
-.emoji-0030-20E3 { background-position: -20px 0px; }
-.emoji-0031-20E3 { background-position: -40px 0px; }
-.emoji-0032-20E3 { background-position: -60px 0px; }
-.emoji-0033-20E3 { background-position: -80px 0px; }
-.emoji-0034-20E3 { background-position: -100px 0px; }
-.emoji-0035-20E3 { background-position: -120px 0px; }
-.emoji-0036-20E3 { background-position: -140px 0px; }
-.emoji-0037-20E3 { background-position: -160px 0px; }
-.emoji-0038-20E3 { background-position: -180px 0px; }
-.emoji-0039-20E3 { background-position: -200px 0px; }
-.emoji-00A9 { background-position: -220px 0px; }
-.emoji-00AE { background-position: -240px 0px; }
-.emoji-1F004 { background-position: -260px 0px; }
-.emoji-1F0CF { background-position: -280px 0px; }
-.emoji-1F170 { background-position: -300px 0px; }
-.emoji-1F171 { background-position: -320px 0px; }
-.emoji-1F17E { background-position: -340px 0px; }
-.emoji-1F17F { background-position: -360px 0px; }
-.emoji-1F18E { background-position: -380px 0px; }
-.emoji-1F191 { background-position: -400px 0px; }
-.emoji-1F192 { background-position: -420px 0px; }
-.emoji-1F193 { background-position: -440px 0px; }
-.emoji-1F194 { background-position: -460px 0px; }
-.emoji-1F195 { background-position: -480px 0px; }
-.emoji-1F196 { background-position: -500px 0px; }
-.emoji-1F197 { background-position: -520px 0px; }
-.emoji-1F198 { background-position: -540px 0px; }
-.emoji-1F199 { background-position: -560px 0px; }
-.emoji-1F19A { background-position: -580px 0px; }
-.emoji-1F1E6-1F1E8 { background-position: -600px 0px; }
-.emoji-1F1E6-1F1E9 { background-position: -620px 0px; }
-.emoji-1F1E6-1F1EA { background-position: -640px 0px; }
-.emoji-1F1E6-1F1EB { background-position: -660px 0px; }
-.emoji-1F1E6-1F1EC { background-position: -680px 0px; }
-.emoji-1F1E6-1F1EE { background-position: -700px 0px; }
-.emoji-1F1E6-1F1F1 { background-position: -720px 0px; }
-.emoji-1F1E6-1F1F2 { background-position: -740px 0px; }
-.emoji-1F1E6-1F1F4 { background-position: -760px 0px; }
-.emoji-1F1E6-1F1F7 { background-position: -780px 0px; }
-.emoji-1F1E6-1F1F9 { background-position: -800px 0px; }
-.emoji-1F1E6-1F1FA { background-position: -820px 0px; }
-.emoji-1F1E6-1F1FC { background-position: -840px 0px; }
-.emoji-1F1E6-1F1FF { background-position: -860px 0px; }
-.emoji-1F1E7-1F1E6 { background-position: -880px 0px; }
-.emoji-1F1E7-1F1E7 { background-position: -900px 0px; }
-.emoji-1F1E7-1F1E9 { background-position: -920px 0px; }
-.emoji-1F1E7-1F1EA { background-position: -940px 0px; }
-.emoji-1F1E7-1F1EB { background-position: -960px 0px; }
-.emoji-1F1E7-1F1EC { background-position: -980px 0px; }
-.emoji-1F1E7-1F1ED { background-position: -1000px 0px; }
-.emoji-1F1E7-1F1EE { background-position: -1020px 0px; }
-.emoji-1F1E7-1F1EF { background-position: -1040px 0px; }
-.emoji-1F1E7-1F1F2 { background-position: -1060px 0px; }
-.emoji-1F1E7-1F1F3 { background-position: -1080px 0px; }
-.emoji-1F1E7-1F1F4 { background-position: -1100px 0px; }
-.emoji-1F1E7-1F1F7 { background-position: -1120px 0px; }
-.emoji-1F1E7-1F1F8 { background-position: -1140px 0px; }
-.emoji-1F1E7-1F1F9 { background-position: -1160px 0px; }
-.emoji-1F1E7-1F1FC { background-position: -1180px 0px; }
-.emoji-1F1E7-1F1FE { background-position: -1200px 0px; }
-.emoji-1F1E7-1F1FF { background-position: -1220px 0px; }
-.emoji-1F1E8-1F1E6 { background-position: -1240px 0px; }
-.emoji-1F1E8-1F1E9 { background-position: -1260px 0px; }
-.emoji-1F1E8-1F1EB { background-position: -1280px 0px; }
-.emoji-1F1E8-1F1EC { background-position: -1300px 0px; }
-.emoji-1F1E8-1F1ED { background-position: -1320px 0px; }
-.emoji-1F1E8-1F1EE { background-position: -1340px 0px; }
-.emoji-1F1E8-1F1F1 { background-position: -1360px 0px; }
-.emoji-1F1E8-1F1F2 { background-position: -1380px 0px; }
-.emoji-1F1E8-1F1F3 { background-position: -1400px 0px; }
-.emoji-1F1E8-1F1F4 { background-position: -1420px 0px; }
-.emoji-1F1E8-1F1F7 { background-position: -1440px 0px; }
-.emoji-1F1E8-1F1FA { background-position: -1460px 0px; }
-.emoji-1F1E8-1F1FB { background-position: -1480px 0px; }
-.emoji-1F1E8-1F1FE { background-position: -1500px 0px; }
-.emoji-1F1E8-1F1FF { background-position: -1520px 0px; }
-.emoji-1F1E9-1F1EA { background-position: -1540px 0px; }
-.emoji-1F1E9-1F1EF { background-position: -1560px 0px; }
-.emoji-1F1E9-1F1F0 { background-position: -1580px 0px; }
-.emoji-1F1E9-1F1F2 { background-position: -1600px 0px; }
-.emoji-1F1E9-1F1F4 { background-position: -1620px 0px; }
-.emoji-1F1E9-1F1FF { background-position: -1640px 0px; }
-.emoji-1F1EA-1F1E8 { background-position: -1660px 0px; }
-.emoji-1F1EA-1F1EA { background-position: -1680px 0px; }
-.emoji-1F1EA-1F1EC { background-position: -1700px 0px; }
-.emoji-1F1EA-1F1ED { background-position: -1720px 0px; }
-.emoji-1F1EA-1F1F7 { background-position: -1740px 0px; }
-.emoji-1F1EA-1F1F8 { background-position: -1760px 0px; }
-.emoji-1F1EA-1F1F9 { background-position: -1780px 0px; }
-.emoji-1F1EB-1F1EE { background-position: -1800px 0px; }
-.emoji-1F1EB-1F1EF { background-position: -1820px 0px; }
-.emoji-1F1EB-1F1F0 { background-position: -1840px 0px; }
-.emoji-1F1EB-1F1F2 { background-position: -1860px 0px; }
-.emoji-1F1EB-1F1F4 { background-position: -1880px 0px; }
-.emoji-1F1EB-1F1F7 { background-position: -1900px 0px; }
-.emoji-1F1EC-1F1E6 { background-position: -1920px 0px; }
-.emoji-1F1EC-1F1E7 { background-position: -1940px 0px; }
-.emoji-1F1EC-1F1E9 { background-position: -1960px 0px; }
-.emoji-1F1EC-1F1EA { background-position: -1980px 0px; }
-.emoji-1F1EC-1F1ED { background-position: -2000px 0px; }
-.emoji-1F1EC-1F1EE { background-position: -2020px 0px; }
-.emoji-1F1EC-1F1F1 { background-position: -2040px 0px; }
-.emoji-1F1EC-1F1F2 { background-position: -2060px 0px; }
-.emoji-1F1EC-1F1F3 { background-position: -2080px 0px; }
-.emoji-1F1EC-1F1F6 { background-position: -2100px 0px; }
-.emoji-1F1EC-1F1F7 { background-position: -2120px 0px; }
-.emoji-1F1EC-1F1F9 { background-position: -2140px 0px; }
-.emoji-1F1EC-1F1FA { background-position: -2160px 0px; }
-.emoji-1F1EC-1F1FC { background-position: -2180px 0px; }
-.emoji-1F1EC-1F1FE { background-position: -2200px 0px; }
-.emoji-1F1ED-1F1F0 { background-position: -2220px 0px; }
-.emoji-1F1ED-1F1F3 { background-position: -2240px 0px; }
-.emoji-1F1ED-1F1F7 { background-position: -2260px 0px; }
-.emoji-1F1ED-1F1F9 { background-position: -2280px 0px; }
-.emoji-1F1ED-1F1FA { background-position: -2300px 0px; }
-.emoji-1F1EE-1F1E9 { background-position: -2320px 0px; }
-.emoji-1F1EE-1F1EA { background-position: -2340px 0px; }
-.emoji-1F1EE-1F1F1 { background-position: -2360px 0px; }
-.emoji-1F1EE-1F1F3 { background-position: -2380px 0px; }
-.emoji-1F1EE-1F1F6 { background-position: -2400px 0px; }
-.emoji-1F1EE-1F1F7 { background-position: -2420px 0px; }
-.emoji-1F1EE-1F1F8 { background-position: -2440px 0px; }
-.emoji-1F1EE-1F1F9 { background-position: -2460px 0px; }
-.emoji-1F1EF-1F1EA { background-position: -2480px 0px; }
-.emoji-1F1EF-1F1F2 { background-position: -2500px 0px; }
-.emoji-1F1EF-1F1F4 { background-position: -2520px 0px; }
-.emoji-1F1EF-1F1F5 { background-position: -2540px 0px; }
-.emoji-1F1F0-1F1EA { background-position: -2560px 0px; }
-.emoji-1F1F0-1F1EC { background-position: -2580px 0px; }
-.emoji-1F1F0-1F1ED { background-position: -2600px 0px; }
-.emoji-1F1F0-1F1EE { background-position: -2620px 0px; }
-.emoji-1F1F0-1F1F2 { background-position: -2640px 0px; }
-.emoji-1F1F0-1F1F3 { background-position: -2660px 0px; }
-.emoji-1F1F0-1F1F5 { background-position: -2680px 0px; }
-.emoji-1F1F0-1F1F7 { background-position: -2700px 0px; }
-.emoji-1F1F0-1F1FC { background-position: -2720px 0px; }
-.emoji-1F1F0-1F1FE { background-position: -2740px 0px; }
-.emoji-1F1F0-1F1FF { background-position: -2760px 0px; }
-.emoji-1F1F1-1F1E6 { background-position: -2780px 0px; }
-.emoji-1F1F1-1F1E7 { background-position: -2800px 0px; }
-.emoji-1F1F1-1F1E8 { background-position: -2820px 0px; }
-.emoji-1F1F1-1F1EE { background-position: -2840px 0px; }
-.emoji-1F1F1-1F1F0 { background-position: -2860px 0px; }
-.emoji-1F1F1-1F1F7 { background-position: -2880px 0px; }
-.emoji-1F1F1-1F1F8 { background-position: -2900px 0px; }
-.emoji-1F1F1-1F1F9 { background-position: -2920px 0px; }
-.emoji-1F1F1-1F1FA { background-position: -2940px 0px; }
-.emoji-1F1F1-1F1FB { background-position: -2960px 0px; }
-.emoji-1F1F1-1F1FE { background-position: -2980px 0px; }
-.emoji-1F1F2-1F1E6 { background-position: -3000px 0px; }
-.emoji-1F1F2-1F1E8 { background-position: -3020px 0px; }
-.emoji-1F1F2-1F1E9 { background-position: -3040px 0px; }
-.emoji-1F1F2-1F1EA { background-position: -3060px 0px; }
-.emoji-1F1F2-1F1EC { background-position: -3080px 0px; }
-.emoji-1F1F2-1F1ED { background-position: -3100px 0px; }
-.emoji-1F1F2-1F1F0 { background-position: -3120px 0px; }
-.emoji-1F1F2-1F1F1 { background-position: -3140px 0px; }
-.emoji-1F1F2-1F1F2 { background-position: -3160px 0px; }
-.emoji-1F1F2-1F1F3 { background-position: -3180px 0px; }
-.emoji-1F1F2-1F1F4 { background-position: -3200px 0px; }
-.emoji-1F1F2-1F1F7 { background-position: -3220px 0px; }
-.emoji-1F1F2-1F1F8 { background-position: -3240px 0px; }
-.emoji-1F1F2-1F1F9 { background-position: -3260px 0px; }
-.emoji-1F1F2-1F1FA { background-position: -3280px 0px; }
-.emoji-1F1F2-1F1FB { background-position: -3300px 0px; }
-.emoji-1F1F2-1F1FC { background-position: -3320px 0px; }
-.emoji-1F1F2-1F1FD { background-position: -3340px 0px; }
-.emoji-1F1F2-1F1FE { background-position: -3360px 0px; }
-.emoji-1F1F2-1F1FF { background-position: -3380px 0px; }
-.emoji-1F1F3-1F1E6 { background-position: -3400px 0px; }
-.emoji-1F1F3-1F1E8 { background-position: -3420px 0px; }
-.emoji-1F1F3-1F1EA { background-position: -3440px 0px; }
-.emoji-1F1F3-1F1EC { background-position: -3460px 0px; }
-.emoji-1F1F3-1F1EE { background-position: -3480px 0px; }
-.emoji-1F1F3-1F1F1 { background-position: -3500px 0px; }
-.emoji-1F1F3-1F1F4 { background-position: -3520px 0px; }
-.emoji-1F1F3-1F1F5 { background-position: -3540px 0px; }
-.emoji-1F1F3-1F1F7 { background-position: -3560px 0px; }
-.emoji-1F1F3-1F1FA { background-position: -3580px 0px; }
-.emoji-1F1F3-1F1FF { background-position: -3600px 0px; }
-.emoji-1F1F4-1F1F2 { background-position: -3620px 0px; }
-.emoji-1F1F5-1F1E6 { background-position: -3640px 0px; }
-.emoji-1F1F5-1F1EA { background-position: -3660px 0px; }
-.emoji-1F1F5-1F1EB { background-position: -3680px 0px; }
-.emoji-1F1F5-1F1EC { background-position: -3700px 0px; }
-.emoji-1F1F5-1F1ED { background-position: -3720px 0px; }
-.emoji-1F1F5-1F1F0 { background-position: -3740px 0px; }
-.emoji-1F1F5-1F1F1 { background-position: -3760px 0px; }
-.emoji-1F1F5-1F1F7 { background-position: -3780px 0px; }
-.emoji-1F1F5-1F1F8 { background-position: -3800px 0px; }
-.emoji-1F1F5-1F1F9 { background-position: -3820px 0px; }
-.emoji-1F1F5-1F1FC { background-position: -3840px 0px; }
-.emoji-1F1F5-1F1FE { background-position: -3860px 0px; }
-.emoji-1F1F6-1F1E6 { background-position: -3880px 0px; }
-.emoji-1F1F7-1F1F4 { background-position: -3900px 0px; }
-.emoji-1F1F7-1F1F8 { background-position: -3920px 0px; }
-.emoji-1F1F7-1F1FA { background-position: -3940px 0px; }
-.emoji-1F1F7-1F1FC { background-position: -3960px 0px; }
-.emoji-1F1F8-1F1E6 { background-position: -3980px 0px; }
-.emoji-1F1F8-1F1E7 { background-position: -4000px 0px; }
-.emoji-1F1F8-1F1E8 { background-position: -4020px 0px; }
-.emoji-1F1F8-1F1E9 { background-position: -4040px 0px; }
-.emoji-1F1F8-1F1EA { background-position: -4060px 0px; }
-.emoji-1F1F8-1F1EC { background-position: -4080px 0px; }
-.emoji-1F1F8-1F1ED { background-position: -4100px 0px; }
-.emoji-1F1F8-1F1EE { background-position: -4120px 0px; }
-.emoji-1F1F8-1F1F0 { background-position: -4140px 0px; }
-.emoji-1F1F8-1F1F1 { background-position: -4160px 0px; }
-.emoji-1F1F8-1F1F2 { background-position: -4180px 0px; }
-.emoji-1F1F8-1F1F3 { background-position: -4200px 0px; }
-.emoji-1F1F8-1F1F4 { background-position: -4220px 0px; }
-.emoji-1F1F8-1F1F7 { background-position: -4240px 0px; }
-.emoji-1F1F8-1F1F9 { background-position: -4260px 0px; }
-.emoji-1F1F8-1F1FB { background-position: -4280px 0px; }
-.emoji-1F1F8-1F1FE { background-position: -4300px 0px; }
-.emoji-1F1F8-1F1FF { background-position: -4320px 0px; }
-.emoji-1F1F9-1F1E9 { background-position: -4340px 0px; }
-.emoji-1F1F9-1F1EC { background-position: -4360px 0px; }
-.emoji-1F1F9-1F1ED { background-position: -4380px 0px; }
-.emoji-1F1F9-1F1EF { background-position: -4400px 0px; }
-.emoji-1F1F9-1F1F1 { background-position: -4420px 0px; }
-.emoji-1F1F9-1F1F2 { background-position: -4440px 0px; }
-.emoji-1F1F9-1F1F3 { background-position: -4460px 0px; }
-.emoji-1F1F9-1F1F4 { background-position: -4480px 0px; }
-.emoji-1F1F9-1F1F7 { background-position: -4500px 0px; }
-.emoji-1F1F9-1F1F9 { background-position: -4520px 0px; }
-.emoji-1F1F9-1F1FB { background-position: -4540px 0px; }
-.emoji-1F1F9-1F1FC { background-position: -4560px 0px; }
-.emoji-1F1F9-1F1FF { background-position: -4580px 0px; }
-.emoji-1F1FA-1F1E6 { background-position: -4600px 0px; }
-.emoji-1F1FA-1F1EC { background-position: -4620px 0px; }
-.emoji-1F1FA-1F1F8 { background-position: -4640px 0px; }
-.emoji-1F1FA-1F1FE { background-position: -4660px 0px; }
-.emoji-1F1FA-1F1FF { background-position: -4680px 0px; }
-.emoji-1F1FB-1F1E6 { background-position: -4700px 0px; }
-.emoji-1F1FB-1F1E8 { background-position: -4720px 0px; }
-.emoji-1F1FB-1F1EA { background-position: -4740px 0px; }
-.emoji-1F1FB-1F1EE { background-position: -4760px 0px; }
-.emoji-1F1FB-1F1F3 { background-position: -4780px 0px; }
-.emoji-1F1FB-1F1FA { background-position: -4800px 0px; }
-.emoji-1F1FC-1F1EB { background-position: -4820px 0px; }
-.emoji-1F1FC-1F1F8 { background-position: -4840px 0px; }
-.emoji-1F1FD-1F1F0 { background-position: -4860px 0px; }
-.emoji-1F1FE-1F1EA { background-position: -4880px 0px; }
-.emoji-1F1FF-1F1E6 { background-position: -4900px 0px; }
-.emoji-1F1FF-1F1F2 { background-position: -4920px 0px; }
-.emoji-1F1FF-1F1FC { background-position: -4940px 0px; }
-.emoji-1F201 { background-position: -4960px 0px; }
-.emoji-1F202 { background-position: -4980px 0px; }
-.emoji-1F21A { background-position: -5000px 0px; }
-.emoji-1F22F { background-position: -5020px 0px; }
-.emoji-1F232 { background-position: -5040px 0px; }
-.emoji-1F233 { background-position: -5060px 0px; }
-.emoji-1F234 { background-position: -5080px 0px; }
-.emoji-1F235 { background-position: -5100px 0px; }
-.emoji-1F236 { background-position: -5120px 0px; }
-.emoji-1F237 { background-position: -5140px 0px; }
-.emoji-1F238 { background-position: -5160px 0px; }
-.emoji-1F239 { background-position: -5180px 0px; }
-.emoji-1F23A { background-position: -5200px 0px; }
-.emoji-1F250 { background-position: -5220px 0px; }
-.emoji-1F251 { background-position: -5240px 0px; }
-.emoji-1F300 { background-position: -5260px 0px; }
-.emoji-1F301 { background-position: -5280px 0px; }
-.emoji-1F302 { background-position: -5300px 0px; }
-.emoji-1F303 { background-position: -5320px 0px; }
-.emoji-1F304 { background-position: -5340px 0px; }
-.emoji-1F305 { background-position: -5360px 0px; }
-.emoji-1F306 { background-position: -5380px 0px; }
-.emoji-1F307 { background-position: -5400px 0px; }
-.emoji-1F308 { background-position: -5420px 0px; }
-.emoji-1F309 { background-position: -5440px 0px; }
-.emoji-1F30A { background-position: -5460px 0px; }
-.emoji-1F30B { background-position: -5480px 0px; }
-.emoji-1F30C { background-position: -5500px 0px; }
-.emoji-1F30D { background-position: -5520px 0px; }
-.emoji-1F30E { background-position: -5540px 0px; }
-.emoji-1F30F { background-position: -5560px 0px; }
-.emoji-1F310 { background-position: -5580px 0px; }
-.emoji-1F311 { background-position: -5600px 0px; }
-.emoji-1F312 { background-position: -5620px 0px; }
-.emoji-1F313 { background-position: -5640px 0px; }
-.emoji-1F314 { background-position: -5660px 0px; }
-.emoji-1F315 { background-position: -5680px 0px; }
-.emoji-1F316 { background-position: -5700px 0px; }
-.emoji-1F317 { background-position: -5720px 0px; }
-.emoji-1F318 { background-position: -5740px 0px; }
-.emoji-1F319 { background-position: -5760px 0px; }
-.emoji-1F31A { background-position: -5780px 0px; }
-.emoji-1F31B { background-position: -5800px 0px; }
-.emoji-1F31C { background-position: -5820px 0px; }
-.emoji-1F31D { background-position: -5840px 0px; }
-.emoji-1F31E { background-position: -5860px 0px; }
-.emoji-1F31F { background-position: -5880px 0px; }
-.emoji-1F320 { background-position: -5900px 0px; }
-.emoji-1F321 { background-position: -5920px 0px; }
-.emoji-1F327 { background-position: -5940px 0px; }
-.emoji-1F328 { background-position: -5960px 0px; }
-.emoji-1F329 { background-position: -5980px 0px; }
-.emoji-1F32A { background-position: -6000px 0px; }
-.emoji-1F32B { background-position: -6020px 0px; }
-.emoji-1F32C { background-position: -6040px 0px; }
-.emoji-1F330 { background-position: -6060px 0px; }
-.emoji-1F331 { background-position: -6080px 0px; }
-.emoji-1F332 { background-position: -6100px 0px; }
-.emoji-1F333 { background-position: -6120px 0px; }
-.emoji-1F334 { background-position: -6140px 0px; }
-.emoji-1F335 { background-position: -6160px 0px; }
-.emoji-1F336 { background-position: -6180px 0px; }
-.emoji-1F337 { background-position: -6200px 0px; }
-.emoji-1F338 { background-position: -6220px 0px; }
-.emoji-1F339 { background-position: -6240px 0px; }
-.emoji-1F33A { background-position: -6260px 0px; }
-.emoji-1F33B { background-position: -6280px 0px; }
-.emoji-1F33C { background-position: -6300px 0px; }
-.emoji-1F33D { background-position: -6320px 0px; }
-.emoji-1F33E { background-position: -6340px 0px; }
-.emoji-1F33F { background-position: -6360px 0px; }
-.emoji-1F340 { background-position: -6380px 0px; }
-.emoji-1F341 { background-position: -6400px 0px; }
-.emoji-1F342 { background-position: -6420px 0px; }
-.emoji-1F343 { background-position: -6440px 0px; }
-.emoji-1F344 { background-position: -6460px 0px; }
-.emoji-1F345 { background-position: -6480px 0px; }
-.emoji-1F346 { background-position: -6500px 0px; }
-.emoji-1F347 { background-position: -6520px 0px; }
-.emoji-1F348 { background-position: -6540px 0px; }
-.emoji-1F349 { background-position: -6560px 0px; }
-.emoji-1F34A { background-position: -6580px 0px; }
-.emoji-1F34B { background-position: -6600px 0px; }
-.emoji-1F34C { background-position: -6620px 0px; }
-.emoji-1F34D { background-position: -6640px 0px; }
-.emoji-1F34E { background-position: -6660px 0px; }
-.emoji-1F34F { background-position: -6680px 0px; }
-.emoji-1F350 { background-position: -6700px 0px; }
-.emoji-1F351 { background-position: -6720px 0px; }
-.emoji-1F352 { background-position: -6740px 0px; }
-.emoji-1F353 { background-position: -6760px 0px; }
-.emoji-1F354 { background-position: -6780px 0px; }
-.emoji-1F355 { background-position: -6800px 0px; }
-.emoji-1F356 { background-position: -6820px 0px; }
-.emoji-1F357 { background-position: -6840px 0px; }
-.emoji-1F358 { background-position: -6860px 0px; }
-.emoji-1F359 { background-position: -6880px 0px; }
-.emoji-1F35A { background-position: -6900px 0px; }
-.emoji-1F35B { background-position: -6920px 0px; }
-.emoji-1F35C { background-position: -6940px 0px; }
-.emoji-1F35D { background-position: -6960px 0px; }
-.emoji-1F35E { background-position: -6980px 0px; }
-.emoji-1F35F { background-position: -7000px 0px; }
-.emoji-1F360 { background-position: -7020px 0px; }
-.emoji-1F361 { background-position: -7040px 0px; }
-.emoji-1F362 { background-position: -7060px 0px; }
-.emoji-1F363 { background-position: -7080px 0px; }
-.emoji-1F364 { background-position: -7100px 0px; }
-.emoji-1F365 { background-position: -7120px 0px; }
-.emoji-1F366 { background-position: -7140px 0px; }
-.emoji-1F367 { background-position: -7160px 0px; }
-.emoji-1F368 { background-position: -7180px 0px; }
-.emoji-1F369 { background-position: -7200px 0px; }
-.emoji-1F36A { background-position: -7220px 0px; }
-.emoji-1F36B { background-position: -7240px 0px; }
-.emoji-1F36C { background-position: -7260px 0px; }
-.emoji-1F36D { background-position: -7280px 0px; }
-.emoji-1F36E { background-position: -7300px 0px; }
-.emoji-1F36F { background-position: -7320px 0px; }
-.emoji-1F370 { background-position: -7340px 0px; }
-.emoji-1F371 { background-position: -7360px 0px; }
-.emoji-1F372 { background-position: -7380px 0px; }
-.emoji-1F373 { background-position: -7400px 0px; }
-.emoji-1F374 { background-position: -7420px 0px; }
-.emoji-1F375 { background-position: -7440px 0px; }
-.emoji-1F376 { background-position: -7460px 0px; }
-.emoji-1F377 { background-position: -7480px 0px; }
-.emoji-1F378 { background-position: -7500px 0px; }
-.emoji-1F379 { background-position: -7520px 0px; }
-.emoji-1F37A { background-position: -7540px 0px; }
-.emoji-1F37B { background-position: -7560px 0px; }
-.emoji-1F37C { background-position: -7580px 0px; }
-.emoji-1F37D { background-position: -7600px 0px; }
-.emoji-1F380 { background-position: -7620px 0px; }
-.emoji-1F381 { background-position: -7640px 0px; }
-.emoji-1F382 { background-position: -7660px 0px; }
-.emoji-1F383 { background-position: -7680px 0px; }
-.emoji-1F384 { background-position: -7700px 0px; }
-.emoji-1F385 { background-position: -7720px 0px; }
-.emoji-1F386 { background-position: -7740px 0px; }
-.emoji-1F387 { background-position: -7760px 0px; }
-.emoji-1F388 { background-position: -7780px 0px; }
-.emoji-1F389 { background-position: -7800px 0px; }
-.emoji-1F38A { background-position: -7820px 0px; }
-.emoji-1F38B { background-position: -7840px 0px; }
-.emoji-1F38C { background-position: -7860px 0px; }
-.emoji-1F38D { background-position: -7880px 0px; }
-.emoji-1F38E { background-position: -7900px 0px; }
-.emoji-1F38F { background-position: -7920px 0px; }
-.emoji-1F390 { background-position: -7940px 0px; }
-.emoji-1F391 { background-position: -7960px 0px; }
-.emoji-1F392 { background-position: -7980px 0px; }
-.emoji-1F393 { background-position: -8000px 0px; }
-.emoji-1F394 { background-position: -8020px 0px; }
-.emoji-1F395 { background-position: -8040px 0px; }
-.emoji-1F396 { background-position: -8060px 0px; }
-.emoji-1F397 { background-position: -8080px 0px; }
-.emoji-1F398 { background-position: -8100px 0px; }
-.emoji-1F399 { background-position: -8120px 0px; }
-.emoji-1F39A { background-position: -8140px 0px; }
-.emoji-1F39B { background-position: -8160px 0px; }
-.emoji-1F39C { background-position: -8180px 0px; }
-.emoji-1F39D { background-position: -8200px 0px; }
-.emoji-1F39E { background-position: -8220px 0px; }
-.emoji-1F39F { background-position: -8240px 0px; }
-.emoji-1F3A0 { background-position: -8260px 0px; }
-.emoji-1F3A1 { background-position: -8280px 0px; }
-.emoji-1F3A2 { background-position: -8300px 0px; }
-.emoji-1F3A3 { background-position: -8320px 0px; }
-.emoji-1F3A4 { background-position: -8340px 0px; }
-.emoji-1F3A5 { background-position: -8360px 0px; }
-.emoji-1F3A6 { background-position: -8380px 0px; }
-.emoji-1F3A7 { background-position: -8400px 0px; }
-.emoji-1F3A8 { background-position: -8420px 0px; }
-.emoji-1F3A9 { background-position: -8440px 0px; }
-.emoji-1F3AA { background-position: -8460px 0px; }
-.emoji-1F3AB { background-position: -8480px 0px; }
-.emoji-1F3AC { background-position: -8500px 0px; }
-.emoji-1F3AD { background-position: -8520px 0px; }
-.emoji-1F3AE { background-position: -8540px 0px; }
-.emoji-1F3AF { background-position: -8560px 0px; }
-.emoji-1F3B0 { background-position: -8580px 0px; }
-.emoji-1F3B1 { background-position: -8600px 0px; }
-.emoji-1F3B2 { background-position: -8620px 0px; }
-.emoji-1F3B3 { background-position: -8640px 0px; }
-.emoji-1F3B4 { background-position: -8660px 0px; }
-.emoji-1F3B5 { background-position: -8680px 0px; }
-.emoji-1F3B6 { background-position: -8700px 0px; }
-.emoji-1F3B7 { background-position: -8720px 0px; }
-.emoji-1F3B8 { background-position: -8740px 0px; }
-.emoji-1F3B9 { background-position: -8760px 0px; }
-.emoji-1F3BA { background-position: -8780px 0px; }
-.emoji-1F3BB { background-position: -8800px 0px; }
-.emoji-1F3BC { background-position: -8820px 0px; }
-.emoji-1F3BD { background-position: -8840px 0px; }
-.emoji-1F3BE { background-position: -8860px 0px; }
-.emoji-1F3BF { background-position: -8880px 0px; }
-.emoji-1F3C0 { background-position: -8900px 0px; }
-.emoji-1F3C1 { background-position: -8920px 0px; }
-.emoji-1F3C2 { background-position: -8940px 0px; }
-.emoji-1F3C3 { background-position: -8960px 0px; }
-.emoji-1F3C4 { background-position: -8980px 0px; }
-.emoji-1F3C5 { background-position: -9000px 0px; }
-.emoji-1F3C6 { background-position: -9020px 0px; }
-.emoji-1F3C7 { background-position: -9040px 0px; }
-.emoji-1F3C8 { background-position: -9060px 0px; }
-.emoji-1F3C9 { background-position: -9080px 0px; }
-.emoji-1F3CA { background-position: -9100px 0px; }
-.emoji-1F3CB { background-position: -9120px 0px; }
-.emoji-1F3CC { background-position: -9140px 0px; }
-.emoji-1F3CD { background-position: -9160px 0px; }
-.emoji-1F3CE { background-position: -9180px 0px; }
-.emoji-1F3D4 { background-position: -9200px 0px; }
-.emoji-1F3D5 { background-position: -9220px 0px; }
-.emoji-1F3D6 { background-position: -9240px 0px; }
-.emoji-1F3D7 { background-position: -9260px 0px; }
-.emoji-1F3D8 { background-position: -9280px 0px; }
-.emoji-1F3D9 { background-position: -9300px 0px; }
-.emoji-1F3DA { background-position: -9320px 0px; }
-.emoji-1F3DB { background-position: -9340px 0px; }
-.emoji-1F3DC { background-position: -9360px 0px; }
-.emoji-1F3DD { background-position: -9380px 0px; }
-.emoji-1F3DE { background-position: -9400px 0px; }
-.emoji-1F3DF { background-position: -9420px 0px; }
-.emoji-1F3E0 { background-position: -9440px 0px; }
-.emoji-1F3E1 { background-position: -9460px 0px; }
-.emoji-1F3E2 { background-position: -9480px 0px; }
-.emoji-1F3E3 { background-position: -9500px 0px; }
-.emoji-1F3E4 { background-position: -9520px 0px; }
-.emoji-1F3E5 { background-position: -9540px 0px; }
-.emoji-1F3E6 { background-position: -9560px 0px; }
-.emoji-1F3E7 { background-position: -9580px 0px; }
-.emoji-1F3E8 { background-position: -9600px 0px; }
-.emoji-1F3E9 { background-position: -9620px 0px; }
-.emoji-1F3EA { background-position: -9640px 0px; }
-.emoji-1F3EB { background-position: -9660px 0px; }
-.emoji-1F3EC { background-position: -9680px 0px; }
-.emoji-1F3ED { background-position: -9700px 0px; }
-.emoji-1F3EE { background-position: -9720px 0px; }
-.emoji-1F3EF { background-position: -9740px 0px; }
-.emoji-1F3F0 { background-position: -9760px 0px; }
-.emoji-1F3F1 { background-position: -9780px 0px; }
-.emoji-1F3F2 { background-position: -9800px 0px; }
-.emoji-1F3F3 { background-position: -9820px 0px; }
-.emoji-1F3F4 { background-position: -9840px 0px; }
-.emoji-1F3F5 { background-position: -9860px 0px; }
-.emoji-1F3F6 { background-position: -9880px 0px; }
-.emoji-1F3F7 { background-position: -9900px 0px; }
-.emoji-1F400 { background-position: -9920px 0px; }
-.emoji-1F401 { background-position: -9940px 0px; }
-.emoji-1F402 { background-position: -9960px 0px; }
-.emoji-1F403 { background-position: -9980px 0px; }
-.emoji-1F404 { background-position: -10000px 0px; }
-.emoji-1F405 { background-position: -10020px 0px; }
-.emoji-1F406 { background-position: -10040px 0px; }
-.emoji-1F407 { background-position: -10060px 0px; }
-.emoji-1F408 { background-position: -10080px 0px; }
-.emoji-1F409 { background-position: -10100px 0px; }
-.emoji-1F40A { background-position: -10120px 0px; }
-.emoji-1F40B { background-position: -10140px 0px; }
-.emoji-1F40C { background-position: -10160px 0px; }
-.emoji-1F40D { background-position: -10180px 0px; }
-.emoji-1F40E { background-position: -10200px 0px; }
-.emoji-1F40F { background-position: -10220px 0px; }
-.emoji-1F410 { background-position: -10240px 0px; }
-.emoji-1F411 { background-position: -10260px 0px; }
-.emoji-1F412 { background-position: -10280px 0px; }
-.emoji-1F413 { background-position: -10300px 0px; }
-.emoji-1F414 { background-position: -10320px 0px; }
-.emoji-1F415 { background-position: -10340px 0px; }
-.emoji-1F416 { background-position: -10360px 0px; }
-.emoji-1F417 { background-position: -10380px 0px; }
-.emoji-1F418 { background-position: -10400px 0px; }
-.emoji-1F419 { background-position: -10420px 0px; }
-.emoji-1F41A { background-position: -10440px 0px; }
-.emoji-1F41B { background-position: -10460px 0px; }
-.emoji-1F41C { background-position: -10480px 0px; }
-.emoji-1F41D { background-position: -10500px 0px; }
-.emoji-1F41E { background-position: -10520px 0px; }
-.emoji-1F41F { background-position: -10540px 0px; }
-.emoji-1F420 { background-position: -10560px 0px; }
-.emoji-1F421 { background-position: -10580px 0px; }
-.emoji-1F422 { background-position: -10600px 0px; }
-.emoji-1F423 { background-position: -10620px 0px; }
-.emoji-1F424 { background-position: -10640px 0px; }
-.emoji-1F425 { background-position: -10660px 0px; }
-.emoji-1F426 { background-position: -10680px 0px; }
-.emoji-1F427 { background-position: -10700px 0px; }
-.emoji-1F428 { background-position: -10720px 0px; }
-.emoji-1F429 { background-position: -10740px 0px; }
-.emoji-1F42A { background-position: -10760px 0px; }
-.emoji-1F42B { background-position: -10780px 0px; }
-.emoji-1F42C { background-position: -10800px 0px; }
-.emoji-1F42D { background-position: -10820px 0px; }
-.emoji-1F42E { background-position: -10840px 0px; }
-.emoji-1F42F { background-position: -10860px 0px; }
-.emoji-1F430 { background-position: -10880px 0px; }
-.emoji-1F431 { background-position: -10900px 0px; }
-.emoji-1F432 { background-position: -10920px 0px; }
-.emoji-1F433 { background-position: -10940px 0px; }
-.emoji-1F434 { background-position: -10960px 0px; }
-.emoji-1F435 { background-position: -10980px 0px; }
-.emoji-1F436 { background-position: -11000px 0px; }
-.emoji-1F437 { background-position: -11020px 0px; }
-.emoji-1F438 { background-position: -11040px 0px; }
-.emoji-1F439 { background-position: -11060px 0px; }
-.emoji-1F43A { background-position: -11080px 0px; }
-.emoji-1F43B { background-position: -11100px 0px; }
-.emoji-1F43C { background-position: -11120px 0px; }
-.emoji-1F43D { background-position: -11140px 0px; }
-.emoji-1F43E { background-position: -11160px 0px; }
-.emoji-1F43F { background-position: -11180px 0px; }
-.emoji-1F440 { background-position: -11200px 0px; }
-.emoji-1F441 { background-position: -11220px 0px; }
-.emoji-1F442 { background-position: -11240px 0px; }
-.emoji-1F443 { background-position: -11260px 0px; }
-.emoji-1F444 { background-position: -11280px 0px; }
-.emoji-1F445 { background-position: -11300px 0px; }
-.emoji-1F446 { background-position: -11320px 0px; }
-.emoji-1F447 { background-position: -11340px 0px; }
-.emoji-1F448 { background-position: -11360px 0px; }
-.emoji-1F449 { background-position: -11380px 0px; }
-.emoji-1F44A { background-position: -11400px 0px; }
-.emoji-1F44B { background-position: -11420px 0px; }
-.emoji-1F44C { background-position: -11440px 0px; }
-.emoji-1F44D { background-position: -11460px 0px; }
-.emoji-1F44E { background-position: -11480px 0px; }
-.emoji-1F44F { background-position: -11500px 0px; }
-.emoji-1F450 { background-position: -11520px 0px; }
-.emoji-1F451 { background-position: -11540px 0px; }
-.emoji-1F452 { background-position: -11560px 0px; }
-.emoji-1F453 { background-position: -11580px 0px; }
-.emoji-1F454 { background-position: -11600px 0px; }
-.emoji-1F455 { background-position: -11620px 0px; }
-.emoji-1F456 { background-position: -11640px 0px; }
-.emoji-1F457 { background-position: -11660px 0px; }
-.emoji-1F458 { background-position: -11680px 0px; }
-.emoji-1F459 { background-position: -11700px 0px; }
-.emoji-1F45A { background-position: -11720px 0px; }
-.emoji-1F45B { background-position: -11740px 0px; }
-.emoji-1F45C { background-position: -11760px 0px; }
-.emoji-1F45D { background-position: -11780px 0px; }
-.emoji-1F45E { background-position: -11800px 0px; }
-.emoji-1F45F { background-position: -11820px 0px; }
-.emoji-1F460 { background-position: -11840px 0px; }
-.emoji-1F461 { background-position: -11860px 0px; }
-.emoji-1F462 { background-position: -11880px 0px; }
-.emoji-1F463 { background-position: -11900px 0px; }
-.emoji-1F464 { background-position: -11920px 0px; }
-.emoji-1F465 { background-position: -11940px 0px; }
-.emoji-1F466 { background-position: -11960px 0px; }
-.emoji-1F467 { background-position: -11980px 0px; }
-.emoji-1F468 { background-position: -12000px 0px; }
-.emoji-1F468-1F468-1F466 { background-position: -12020px 0px; }
-.emoji-1F468-1F468-1F466-1F466 { background-position: -12040px 0px; }
-.emoji-1F468-1F468-1F467 { background-position: -12060px 0px; }
-.emoji-1F468-1F468-1F467-1F466 { background-position: -12080px 0px; }
-.emoji-1F468-1F468-1F467-1F467 { background-position: -12100px 0px; }
-.emoji-1F468-1F469-1F466-1F466 { background-position: -12120px 0px; }
-.emoji-1F468-1F469-1F467 { background-position: -12140px 0px; }
-.emoji-1F468-1F469-1F467-1F466 { background-position: -12160px 0px; }
-.emoji-1F468-1F469-1F467-1F467 { background-position: -12180px 0px; }
-.emoji-1F468-2764-1F468 { background-position: -12200px 0px; }
-.emoji-1F468-2764-1F48B-1F468 { background-position: -12220px 0px; }
-.emoji-1F469 { background-position: -12240px 0px; }
-.emoji-1F469-1F469-1F466 { background-position: -12260px 0px; }
-.emoji-1F469-1F469-1F466-1F466 { background-position: -12280px 0px; }
-.emoji-1F469-1F469-1F467 { background-position: -12300px 0px; }
-.emoji-1F469-1F469-1F467-1F466 { background-position: -12320px 0px; }
-.emoji-1F469-1F469-1F467-1F467 { background-position: -12340px 0px; }
-.emoji-1F469-2764-1F469 { background-position: -12360px 0px; }
-.emoji-1F469-2764-1F48B-1F469 { background-position: -12380px 0px; }
-.emoji-1F46A { background-position: -12400px 0px; }
-.emoji-1F46B { background-position: -12420px 0px; }
-.emoji-1F46C { background-position: -12440px 0px; }
-.emoji-1F46D { background-position: -12460px 0px; }
-.emoji-1F46E { background-position: -12480px 0px; }
-.emoji-1F46F { background-position: -12500px 0px; }
-.emoji-1F470 { background-position: -12520px 0px; }
-.emoji-1F471 { background-position: -12540px 0px; }
-.emoji-1F472 { background-position: -12560px 0px; }
-.emoji-1F473 { background-position: -12580px 0px; }
-.emoji-1F474 { background-position: -12600px 0px; }
-.emoji-1F475 { background-position: -12620px 0px; }
-.emoji-1F476 { background-position: -12640px 0px; }
-.emoji-1F477 { background-position: -12660px 0px; }
-.emoji-1F478 { background-position: -12680px 0px; }
-.emoji-1F479 { background-position: -12700px 0px; }
-.emoji-1F47A { background-position: -12720px 0px; }
-.emoji-1F47B { background-position: -12740px 0px; }
-.emoji-1F47C { background-position: -12760px 0px; }
-.emoji-1F47D { background-position: -12780px 0px; }
-.emoji-1F47E { background-position: -12800px 0px; }
-.emoji-1F47F { background-position: -12820px 0px; }
-.emoji-1F480 { background-position: -12840px 0px; }
-.emoji-1F481 { background-position: -12860px 0px; }
-.emoji-1F482 { background-position: -12880px 0px; }
-.emoji-1F483 { background-position: -12900px 0px; }
-.emoji-1F484 { background-position: -12920px 0px; }
-.emoji-1F485 { background-position: -12940px 0px; }
-.emoji-1F486 { background-position: -12960px 0px; }
-.emoji-1F487 { background-position: -12980px 0px; }
-.emoji-1F488 { background-position: -13000px 0px; }
-.emoji-1F489 { background-position: -13020px 0px; }
-.emoji-1F48A { background-position: -13040px 0px; }
-.emoji-1F48B { background-position: -13060px 0px; }
-.emoji-1F48C { background-position: -13080px 0px; }
-.emoji-1F48D { background-position: -13100px 0px; }
-.emoji-1F48E { background-position: -13120px 0px; }
-.emoji-1F48F { background-position: -13140px 0px; }
-.emoji-1F490 { background-position: -13160px 0px; }
-.emoji-1F491 { background-position: -13180px 0px; }
-.emoji-1F492 { background-position: -13200px 0px; }
-.emoji-1F493 { background-position: -13220px 0px; }
-.emoji-1F494 { background-position: -13240px 0px; }
-.emoji-1F495 { background-position: -13260px 0px; }
-.emoji-1F496 { background-position: -13280px 0px; }
-.emoji-1F497 { background-position: -13300px 0px; }
-.emoji-1F498 { background-position: -13320px 0px; }
-.emoji-1F499 { background-position: -13340px 0px; }
-.emoji-1F49A { background-position: -13360px 0px; }
-.emoji-1F49B { background-position: -13380px 0px; }
-.emoji-1F49C { background-position: -13400px 0px; }
-.emoji-1F49D { background-position: -13420px 0px; }
-.emoji-1F49E { background-position: -13440px 0px; }
-.emoji-1F49F { background-position: -13460px 0px; }
-.emoji-1F4A0 { background-position: -13480px 0px; }
-.emoji-1F4A1 { background-position: -13500px 0px; }
-.emoji-1F4A2 { background-position: -13520px 0px; }
-.emoji-1F4A3 { background-position: -13540px 0px; }
-.emoji-1F4A4 { background-position: -13560px 0px; }
-.emoji-1F4A5 { background-position: -13580px 0px; }
-.emoji-1F4A6 { background-position: -13600px 0px; }
-.emoji-1F4A7 { background-position: -13620px 0px; }
-.emoji-1F4A8 { background-position: -13640px 0px; }
-.emoji-1F4A9 { background-position: -13660px 0px; }
-.emoji-1F4AA { background-position: -13680px 0px; }
-.emoji-1F4AB { background-position: -13700px 0px; }
-.emoji-1F4AC { background-position: -13720px 0px; }
-.emoji-1F4AD { background-position: -13740px 0px; }
-.emoji-1F4AE { background-position: -13760px 0px; }
-.emoji-1F4AF { background-position: -13780px 0px; }
-.emoji-1F4B0 { background-position: -13800px 0px; }
-.emoji-1F4B1 { background-position: -13820px 0px; }
-.emoji-1F4B2 { background-position: -13840px 0px; }
-.emoji-1F4B3 { background-position: -13860px 0px; }
-.emoji-1F4B4 { background-position: -13880px 0px; }
-.emoji-1F4B5 { background-position: -13900px 0px; }
-.emoji-1F4B6 { background-position: -13920px 0px; }
-.emoji-1F4B7 { background-position: -13940px 0px; }
-.emoji-1F4B8 { background-position: -13960px 0px; }
-.emoji-1F4B9 { background-position: -13980px 0px; }
-.emoji-1F4BA { background-position: -14000px 0px; }
-.emoji-1F4BB { background-position: -14020px 0px; }
-.emoji-1F4BC { background-position: -14040px 0px; }
-.emoji-1F4BD { background-position: -14060px 0px; }
-.emoji-1F4BE { background-position: -14080px 0px; }
-.emoji-1F4BF { background-position: -14100px 0px; }
-.emoji-1F4C0 { background-position: -14120px 0px; }
-.emoji-1F4C1 { background-position: -14140px 0px; }
-.emoji-1F4C2 { background-position: -14160px 0px; }
-.emoji-1F4C3 { background-position: -14180px 0px; }
-.emoji-1F4C4 { background-position: -14200px 0px; }
-.emoji-1F4C5 { background-position: -14220px 0px; }
-.emoji-1F4C6 { background-position: -14240px 0px; }
-.emoji-1F4C7 { background-position: -14260px 0px; }
-.emoji-1F4C8 { background-position: -14280px 0px; }
-.emoji-1F4C9 { background-position: -14300px 0px; }
-.emoji-1F4CA { background-position: -14320px 0px; }
-.emoji-1F4CB { background-position: -14340px 0px; }
-.emoji-1F4CC { background-position: -14360px 0px; }
-.emoji-1F4CD { background-position: -14380px 0px; }
-.emoji-1F4CE { background-position: -14400px 0px; }
-.emoji-1F4CF { background-position: -14420px 0px; }
-.emoji-1F4D0 { background-position: -14440px 0px; }
-.emoji-1F4D1 { background-position: -14460px 0px; }
-.emoji-1F4D2 { background-position: -14480px 0px; }
-.emoji-1F4D3 { background-position: -14500px 0px; }
-.emoji-1F4D4 { background-position: -14520px 0px; }
-.emoji-1F4D5 { background-position: -14540px 0px; }
-.emoji-1F4D6 { background-position: -14560px 0px; }
-.emoji-1F4D7 { background-position: -14580px 0px; }
-.emoji-1F4D8 { background-position: -14600px 0px; }
-.emoji-1F4D9 { background-position: -14620px 0px; }
-.emoji-1F4DA { background-position: -14640px 0px; }
-.emoji-1F4DB { background-position: -14660px 0px; }
-.emoji-1F4DC { background-position: -14680px 0px; }
-.emoji-1F4DD { background-position: -14700px 0px; }
-.emoji-1F4DE { background-position: -14720px 0px; }
-.emoji-1F4DF { background-position: -14740px 0px; }
-.emoji-1F4E0 { background-position: -14760px 0px; }
-.emoji-1F4E1 { background-position: -14780px 0px; }
-.emoji-1F4E2 { background-position: -14800px 0px; }
-.emoji-1F4E3 { background-position: -14820px 0px; }
-.emoji-1F4E4 { background-position: -14840px 0px; }
-.emoji-1F4E5 { background-position: -14860px 0px; }
-.emoji-1F4E6 { background-position: -14880px 0px; }
-.emoji-1F4E7 { background-position: -14900px 0px; }
-.emoji-1F4E8 { background-position: -14920px 0px; }
-.emoji-1F4E9 { background-position: -14940px 0px; }
-.emoji-1F4EA { background-position: -14960px 0px; }
-.emoji-1F4EB { background-position: -14980px 0px; }
-.emoji-1F4EC { background-position: -15000px 0px; }
-.emoji-1F4ED { background-position: -15020px 0px; }
-.emoji-1F4EE { background-position: -15040px 0px; }
-.emoji-1F4EF { background-position: -15060px 0px; }
-.emoji-1F4F0 { background-position: -15080px 0px; }
-.emoji-1F4F1 { background-position: -15100px 0px; }
-.emoji-1F4F2 { background-position: -15120px 0px; }
-.emoji-1F4F3 { background-position: -15140px 0px; }
-.emoji-1F4F4 { background-position: -15160px 0px; }
-.emoji-1F4F5 { background-position: -15180px 0px; }
-.emoji-1F4F6 { background-position: -15200px 0px; }
-.emoji-1F4F7 { background-position: -15220px 0px; }
-.emoji-1F4F8 { background-position: -15240px 0px; }
-.emoji-1F4F9 { background-position: -15260px 0px; }
-.emoji-1F4FA { background-position: -15280px 0px; }
-.emoji-1F4FB { background-position: -15300px 0px; }
-.emoji-1F4FC { background-position: -15320px 0px; }
-.emoji-1F4FD { background-position: -15340px 0px; }
-.emoji-1F4FE { background-position: -15360px 0px; }
-.emoji-1F500 { background-position: -15380px 0px; }
-.emoji-1F501 { background-position: -15400px 0px; }
-.emoji-1F502 { background-position: -15420px 0px; }
-.emoji-1F503 { background-position: -15440px 0px; }
-.emoji-1F504 { background-position: -15460px 0px; }
-.emoji-1F505 { background-position: -15480px 0px; }
-.emoji-1F506 { background-position: -15500px 0px; }
-.emoji-1F507 { background-position: -15520px 0px; }
-.emoji-1F508 { background-position: -15540px 0px; }
-.emoji-1F509 { background-position: -15560px 0px; }
-.emoji-1F50A { background-position: -15580px 0px; }
-.emoji-1F50B { background-position: -15600px 0px; }
-.emoji-1F50C { background-position: -15620px 0px; }
-.emoji-1F50D { background-position: -15640px 0px; }
-.emoji-1F50E { background-position: -15660px 0px; }
-.emoji-1F50F { background-position: -15680px 0px; }
-.emoji-1F510 { background-position: -15700px 0px; }
-.emoji-1F511 { background-position: -15720px 0px; }
-.emoji-1F512 { background-position: -15740px 0px; }
-.emoji-1F513 { background-position: -15760px 0px; }
-.emoji-1F514 { background-position: -15780px 0px; }
-.emoji-1F515 { background-position: -15800px 0px; }
-.emoji-1F516 { background-position: -15820px 0px; }
-.emoji-1F517 { background-position: -15840px 0px; }
-.emoji-1F518 { background-position: -15860px 0px; }
-.emoji-1F519 { background-position: -15880px 0px; }
-.emoji-1F51A { background-position: -15900px 0px; }
-.emoji-1F51B { background-position: -15920px 0px; }
-.emoji-1F51C { background-position: -15940px 0px; }
-.emoji-1F51D { background-position: -15960px 0px; }
-.emoji-1F51E { background-position: -15980px 0px; }
-.emoji-1F51F { background-position: -16000px 0px; }
-.emoji-1F520 { background-position: -16020px 0px; }
-.emoji-1F521 { background-position: -16040px 0px; }
-.emoji-1F522 { background-position: -16060px 0px; }
-.emoji-1F523 { background-position: -16080px 0px; }
-.emoji-1F524 { background-position: -16100px 0px; }
-.emoji-1F525 { background-position: -16120px 0px; }
-.emoji-1F526 { background-position: -16140px 0px; }
-.emoji-1F527 { background-position: -16160px 0px; }
-.emoji-1F528 { background-position: -16180px 0px; }
-.emoji-1F529 { background-position: -16200px 0px; }
-.emoji-1F52A { background-position: -16220px 0px; }
-.emoji-1F52B { background-position: -16240px 0px; }
-.emoji-1F52C { background-position: -16260px 0px; }
-.emoji-1F52D { background-position: -16280px 0px; }
-.emoji-1F52E { background-position: -16300px 0px; }
-.emoji-1F52F { background-position: -16320px 0px; }
-.emoji-1F530 { background-position: -16340px 0px; }
-.emoji-1F531 { background-position: -16360px 0px; }
-.emoji-1F532 { background-position: -16380px 0px; }
-.emoji-1F533 { background-position: -16400px 0px; }
-.emoji-1F534 { background-position: -16420px 0px; }
-.emoji-1F535 { background-position: -16440px 0px; }
-.emoji-1F536 { background-position: -16460px 0px; }
-.emoji-1F537 { background-position: -16480px 0px; }
-.emoji-1F538 { background-position: -16500px 0px; }
-.emoji-1F539 { background-position: -16520px 0px; }
-.emoji-1F53A { background-position: -16540px 0px; }
-.emoji-1F53B { background-position: -16560px 0px; }
-.emoji-1F53C { background-position: -16580px 0px; }
-.emoji-1F53D { background-position: -16600px 0px; }
-.emoji-1F546 { background-position: -16620px 0px; }
-.emoji-1F547 { background-position: -16640px 0px; }
-.emoji-1F548 { background-position: -16660px 0px; }
-.emoji-1F549 { background-position: -16680px 0px; }
-.emoji-1F54A { background-position: -16700px 0px; }
-.emoji-1F550 { background-position: -16720px 0px; }
-.emoji-1F551 { background-position: -16740px 0px; }
-.emoji-1F552 { background-position: -16760px 0px; }
-.emoji-1F553 { background-position: -16780px 0px; }
-.emoji-1F554 { background-position: -16800px 0px; }
-.emoji-1F555 { background-position: -16820px 0px; }
-.emoji-1F556 { background-position: -16840px 0px; }
-.emoji-1F557 { background-position: -16860px 0px; }
-.emoji-1F558 { background-position: -16880px 0px; }
-.emoji-1F559 { background-position: -16900px 0px; }
-.emoji-1F55A { background-position: -16920px 0px; }
-.emoji-1F55B { background-position: -16940px 0px; }
-.emoji-1F55C { background-position: -16960px 0px; }
-.emoji-1F55D { background-position: -16980px 0px; }
-.emoji-1F55E { background-position: -17000px 0px; }
-.emoji-1F55F { background-position: -17020px 0px; }
-.emoji-1F560 { background-position: -17040px 0px; }
-.emoji-1F561 { background-position: -17060px 0px; }
-.emoji-1F562 { background-position: -17080px 0px; }
-.emoji-1F563 { background-position: -17100px 0px; }
-.emoji-1F564 { background-position: -17120px 0px; }
-.emoji-1F565 { background-position: -17140px 0px; }
-.emoji-1F566 { background-position: -17160px 0px; }
-.emoji-1F567 { background-position: -17180px 0px; }
-.emoji-1F568 { background-position: -17200px 0px; }
-.emoji-1F569 { background-position: -17220px 0px; }
-.emoji-1F56A { background-position: -17240px 0px; }
-.emoji-1F56B { background-position: -17260px 0px; }
-.emoji-1F56C { background-position: -17280px 0px; }
-.emoji-1F56D { background-position: -17300px 0px; }
-.emoji-1F56E { background-position: -17320px 0px; }
-.emoji-1F56F { background-position: -17340px 0px; }
-.emoji-1F570 { background-position: -17360px 0px; }
-.emoji-1F571 { background-position: -17380px 0px; }
-.emoji-1F572 { background-position: -17400px 0px; }
-.emoji-1F573 { background-position: -17420px 0px; }
-.emoji-1F574 { background-position: -17440px 0px; }
-.emoji-1F575 { background-position: -17460px 0px; }
-.emoji-1F576 { background-position: -17480px 0px; }
-.emoji-1F577 { background-position: -17500px 0px; }
-.emoji-1F578 { background-position: -17520px 0px; }
-.emoji-1F579 { background-position: -17540px 0px; }
-.emoji-1F57B { background-position: -17560px 0px; }
-.emoji-1F57E { background-position: -17580px 0px; }
-.emoji-1F57F { background-position: -17600px 0px; }
-.emoji-1F581 { background-position: -17620px 0px; }
-.emoji-1F582 { background-position: -17640px 0px; }
-.emoji-1F583 { background-position: -17660px 0px; }
-.emoji-1F585 { background-position: -17680px 0px; }
-.emoji-1F586 { background-position: -17700px 0px; }
-.emoji-1F587 { background-position: -17720px 0px; }
-.emoji-1F588 { background-position: -17740px 0px; }
-.emoji-1F589 { background-position: -17760px 0px; }
-.emoji-1F58A { background-position: -17780px 0px; }
-.emoji-1F58B { background-position: -17800px 0px; }
-.emoji-1F58C { background-position: -17820px 0px; }
-.emoji-1F58D { background-position: -17840px 0px; }
-.emoji-1F58E { background-position: -17860px 0px; }
-.emoji-1F58F { background-position: -17880px 0px; }
-.emoji-1F590 { background-position: -17900px 0px; }
-.emoji-1F591 { background-position: -17920px 0px; }
-.emoji-1F592 { background-position: -17940px 0px; }
-.emoji-1F593 { background-position: -17960px 0px; }
-.emoji-1F594 { background-position: -17980px 0px; }
-.emoji-1F595 { background-position: -18000px 0px; }
-.emoji-1F596 { background-position: -18020px 0px; }
-.emoji-1F597 { background-position: -18040px 0px; }
-.emoji-1F598 { background-position: -18060px 0px; }
-.emoji-1F599 { background-position: -18080px 0px; }
-.emoji-1F59E { background-position: -18100px 0px; }
-.emoji-1F59F { background-position: -18120px 0px; }
-.emoji-1F5A5 { background-position: -18140px 0px; }
-.emoji-1F5A6 { background-position: -18160px 0px; }
-.emoji-1F5A7 { background-position: -18180px 0px; }
-.emoji-1F5A8 { background-position: -18200px 0px; }
-.emoji-1F5A9 { background-position: -18220px 0px; }
-.emoji-1F5AA { background-position: -18240px 0px; }
-.emoji-1F5AB { background-position: -18260px 0px; }
-.emoji-1F5AD { background-position: -18280px 0px; }
-.emoji-1F5AE { background-position: -18300px 0px; }
-.emoji-1F5AF { background-position: -18320px 0px; }
-.emoji-1F5B2 { background-position: -18340px 0px; }
-.emoji-1F5B3 { background-position: -18360px 0px; }
-.emoji-1F5B4 { background-position: -18380px 0px; }
-.emoji-1F5B8 { background-position: -18400px 0px; }
-.emoji-1F5B9 { background-position: -18420px 0px; }
-.emoji-1F5BC { background-position: -18440px 0px; }
-.emoji-1F5BD { background-position: -18460px 0px; }
-.emoji-1F5BE { background-position: -18480px 0px; }
-.emoji-1F5C0 { background-position: -18500px 0px; }
-.emoji-1F5C1 { background-position: -18520px 0px; }
-.emoji-1F5C2 { background-position: -18540px 0px; }
-.emoji-1F5C3 { background-position: -18560px 0px; }
-.emoji-1F5C4 { background-position: -18580px 0px; }
-.emoji-1F5C6 { background-position: -18600px 0px; }
-.emoji-1F5C7 { background-position: -18620px 0px; }
-.emoji-1F5C9 { background-position: -18640px 0px; }
-.emoji-1F5CA { background-position: -18660px 0px; }
-.emoji-1F5CE { background-position: -18680px 0px; }
-.emoji-1F5CF { background-position: -18700px 0px; }
-.emoji-1F5D0 { background-position: -18720px 0px; }
-.emoji-1F5D1 { background-position: -18740px 0px; }
-.emoji-1F5D2 { background-position: -18760px 0px; }
-.emoji-1F5D3 { background-position: -18780px 0px; }
-.emoji-1F5D4 { background-position: -18800px 0px; }
-.emoji-1F5D8 { background-position: -18820px 0px; }
-.emoji-1F5D9 { background-position: -18840px 0px; }
-.emoji-1F5DC { background-position: -18860px 0px; }
-.emoji-1F5DD { background-position: -18880px 0px; }
-.emoji-1F5DE { background-position: -18900px 0px; }
-.emoji-1F5E0 { background-position: -18920px 0px; }
-.emoji-1F5E1 { background-position: -18940px 0px; }
-.emoji-1F5E2 { background-position: -18960px 0px; }
-.emoji-1F5E3 { background-position: -18980px 0px; }
-.emoji-1F5E8 { background-position: -19000px 0px; }
-.emoji-1F5E9 { background-position: -19020px 0px; }
-.emoji-1F5EA { background-position: -19040px 0px; }
-.emoji-1F5EB { background-position: -19060px 0px; }
-.emoji-1F5EC { background-position: -19080px 0px; }
-.emoji-1F5ED { background-position: -19100px 0px; }
-.emoji-1F5EE { background-position: -19120px 0px; }
-.emoji-1F5EF { background-position: -19140px 0px; }
-.emoji-1F5F0 { background-position: -19160px 0px; }
-.emoji-1F5F1 { background-position: -19180px 0px; }
-.emoji-1F5F2 { background-position: -19200px 0px; }
-.emoji-1F5F3 { background-position: -19220px 0px; }
-.emoji-1F5F4 { background-position: -19240px 0px; }
-.emoji-1F5F5 { background-position: -19260px 0px; }
-.emoji-1F5F8 { background-position: -19280px 0px; }
-.emoji-1F5F9 { background-position: -19300px 0px; }
-.emoji-1F5FA { background-position: -19320px 0px; }
-.emoji-1F5FB { background-position: -19340px 0px; }
-.emoji-1F5FC { background-position: -19360px 0px; }
-.emoji-1F5FD { background-position: -19380px 0px; }
-.emoji-1F5FE { background-position: -19400px 0px; }
-.emoji-1F5FF { background-position: -19420px 0px; }
-.emoji-1F600 { background-position: -19440px 0px; }
-.emoji-1F601 { background-position: -19460px 0px; }
-.emoji-1F602 { background-position: -19480px 0px; }
-.emoji-1F603 { background-position: -19500px 0px; }
-.emoji-1F604 { background-position: -19520px 0px; }
-.emoji-1F605 { background-position: -19540px 0px; }
-.emoji-1F606 { background-position: -19560px 0px; }
-.emoji-1F607 { background-position: -19580px 0px; }
-.emoji-1F608 { background-position: -19600px 0px; }
-.emoji-1F609 { background-position: -19620px 0px; }
-.emoji-1F60A { background-position: -19640px 0px; }
-.emoji-1F60B { background-position: -19660px 0px; }
-.emoji-1F60C { background-position: -19680px 0px; }
-.emoji-1F60D { background-position: -19700px 0px; }
-.emoji-1F60E { background-position: -19720px 0px; }
-.emoji-1F60F { background-position: -19740px 0px; }
-.emoji-1F610 { background-position: -19760px 0px; }
-.emoji-1F611 { background-position: -19780px 0px; }
-.emoji-1F612 { background-position: -19800px 0px; }
-.emoji-1F613 { background-position: -19820px 0px; }
-.emoji-1F614 { background-position: -19840px 0px; }
-.emoji-1F615 { background-position: -19860px 0px; }
-.emoji-1F616 { background-position: -19880px 0px; }
-.emoji-1F617 { background-position: -19900px 0px; }
-.emoji-1F618 { background-position: -19920px 0px; }
-.emoji-1F619 { background-position: -19940px 0px; }
-.emoji-1F61A { background-position: -19960px 0px; }
-.emoji-1F61B { background-position: -19980px 0px; }
-.emoji-1F61C { background-position: -20000px 0px; }
-.emoji-1F61D { background-position: -20020px 0px; }
-.emoji-1F61E { background-position: -20040px 0px; }
-.emoji-1F61F { background-position: -20060px 0px; }
-.emoji-1F620 { background-position: -20080px 0px; }
-.emoji-1F621 { background-position: -20100px 0px; }
-.emoji-1F622 { background-position: -20120px 0px; }
-.emoji-1F623 { background-position: -20140px 0px; }
-.emoji-1F624 { background-position: -20160px 0px; }
-.emoji-1F625 { background-position: -20180px 0px; }
-.emoji-1F626 { background-position: -20200px 0px; }
-.emoji-1F627 { background-position: -20220px 0px; }
-.emoji-1F628 { background-position: -20240px 0px; }
-.emoji-1F629 { background-position: -20260px 0px; }
-.emoji-1F62A { background-position: -20280px 0px; }
-.emoji-1F62B { background-position: -20300px 0px; }
-.emoji-1F62C { background-position: -20320px 0px; }
-.emoji-1F62D { background-position: -20340px 0px; }
-.emoji-1F62E { background-position: -20360px 0px; }
-.emoji-1F62F { background-position: -20380px 0px; }
-.emoji-1F630 { background-position: -20400px 0px; }
-.emoji-1F631 { background-position: -20420px 0px; }
-.emoji-1F632 { background-position: -20440px 0px; }
-.emoji-1F633 { background-position: -20460px 0px; }
-.emoji-1F634 { background-position: -20480px 0px; }
-.emoji-1F635 { background-position: -20500px 0px; }
-.emoji-1F636 { background-position: -20520px 0px; }
-.emoji-1F637 { background-position: -20540px 0px; }
-.emoji-1F638 { background-position: -20560px 0px; }
-.emoji-1F639 { background-position: -20580px 0px; }
-.emoji-1F63A { background-position: -20600px 0px; }
-.emoji-1F63B { background-position: -20620px 0px; }
-.emoji-1F63C { background-position: -20640px 0px; }
-.emoji-1F63D { background-position: -20660px 0px; }
-.emoji-1F63E { background-position: -20680px 0px; }
-.emoji-1F63F { background-position: -20700px 0px; }
-.emoji-1F640 { background-position: -20720px 0px; }
-.emoji-1F641 { background-position: -20740px 0px; }
-.emoji-1F642 { background-position: -20760px 0px; }
-.emoji-1F645 { background-position: -20780px 0px; }
-.emoji-1F646 { background-position: -20800px 0px; }
-.emoji-1F647 { background-position: -20820px 0px; }
-.emoji-1F648 { background-position: -20840px 0px; }
-.emoji-1F649 { background-position: -20860px 0px; }
-.emoji-1F64A { background-position: -20880px 0px; }
-.emoji-1F64B { background-position: -20900px 0px; }
-.emoji-1F64C { background-position: -20920px 0px; }
-.emoji-1F64D { background-position: -20940px 0px; }
-.emoji-1F64E { background-position: -20960px 0px; }
-.emoji-1F64F { background-position: -20980px 0px; }
-.emoji-1F680 { background-position: -21000px 0px; }
-.emoji-1F681 { background-position: -21020px 0px; }
-.emoji-1F682 { background-position: -21040px 0px; }
-.emoji-1F683 { background-position: -21060px 0px; }
-.emoji-1F684 { background-position: -21080px 0px; }
-.emoji-1F685 { background-position: -21100px 0px; }
-.emoji-1F686 { background-position: -21120px 0px; }
-.emoji-1F687 { background-position: -21140px 0px; }
-.emoji-1F688 { background-position: -21160px 0px; }
-.emoji-1F689 { background-position: -21180px 0px; }
-.emoji-1F68A { background-position: -21200px 0px; }
-.emoji-1F68B { background-position: -21220px 0px; }
-.emoji-1F68C { background-position: -21240px 0px; }
-.emoji-1F68D { background-position: -21260px 0px; }
-.emoji-1F68E { background-position: -21280px 0px; }
-.emoji-1F68F { background-position: -21300px 0px; }
-.emoji-1F690 { background-position: -21320px 0px; }
-.emoji-1F691 { background-position: -21340px 0px; }
-.emoji-1F692 { background-position: -21360px 0px; }
-.emoji-1F693 { background-position: -21380px 0px; }
-.emoji-1F694 { background-position: -21400px 0px; }
-.emoji-1F695 { background-position: -21420px 0px; }
-.emoji-1F696 { background-position: -21440px 0px; }
-.emoji-1F697 { background-position: -21460px 0px; }
-.emoji-1F698 { background-position: -21480px 0px; }
-.emoji-1F699 { background-position: -21500px 0px; }
-.emoji-1F69A { background-position: -21520px 0px; }
-.emoji-1F69B { background-position: -21540px 0px; }
-.emoji-1F69C { background-position: -21560px 0px; }
-.emoji-1F69D { background-position: -21580px 0px; }
-.emoji-1F69E { background-position: -21600px 0px; }
-.emoji-1F69F { background-position: -21620px 0px; }
-.emoji-1F6A0 { background-position: -21640px 0px; }
-.emoji-1F6A1 { background-position: -21660px 0px; }
-.emoji-1F6A2 { background-position: -21680px 0px; }
-.emoji-1F6A3 { background-position: -21700px 0px; }
-.emoji-1F6A4 { background-position: -21720px 0px; }
-.emoji-1F6A5 { background-position: -21740px 0px; }
-.emoji-1F6A6 { background-position: -21760px 0px; }
-.emoji-1F6A7 { background-position: -21780px 0px; }
-.emoji-1F6A8 { background-position: -21800px 0px; }
-.emoji-1F6A9 { background-position: -21820px 0px; }
-.emoji-1F6AA { background-position: -21840px 0px; }
-.emoji-1F6AB { background-position: -21860px 0px; }
-.emoji-1F6AC { background-position: -21880px 0px; }
-.emoji-1F6AD { background-position: -21900px 0px; }
-.emoji-1F6AE { background-position: -21920px 0px; }
-.emoji-1F6AF { background-position: -21940px 0px; }
-.emoji-1F6B0 { background-position: -21960px 0px; }
-.emoji-1F6B1 { background-position: -21980px 0px; }
-.emoji-1F6B2 { background-position: -22000px 0px; }
-.emoji-1F6B3 { background-position: -22020px 0px; }
-.emoji-1F6B4 { background-position: -22040px 0px; }
-.emoji-1F6B5 { background-position: -22060px 0px; }
-.emoji-1F6B6 { background-position: -22080px 0px; }
-.emoji-1F6B7 { background-position: -22100px 0px; }
-.emoji-1F6B8 { background-position: -22120px 0px; }
-.emoji-1F6B9 { background-position: -22140px 0px; }
-.emoji-1F6BA { background-position: -22160px 0px; }
-.emoji-1F6BB { background-position: -22180px 0px; }
-.emoji-1F6BC { background-position: -22200px 0px; }
-.emoji-1F6BD { background-position: -22220px 0px; }
-.emoji-1F6BE { background-position: -22240px 0px; }
-.emoji-1F6BF { background-position: -22260px 0px; }
-.emoji-1F6C0 { background-position: -22280px 0px; }
-.emoji-1F6C1 { background-position: -22300px 0px; }
-.emoji-1F6C2 { background-position: -22320px 0px; }
-.emoji-1F6C3 { background-position: -22340px 0px; }
-.emoji-1F6C4 { background-position: -22360px 0px; }
-.emoji-1F6C5 { background-position: -22380px 0px; }
-.emoji-1F6C6 { background-position: -22400px 0px; }
-.emoji-1F6C7 { background-position: -22420px 0px; }
-.emoji-1F6C8 { background-position: -22440px 0px; }
-.emoji-1F6C9 { background-position: -22460px 0px; }
-.emoji-1F6CA { background-position: -22480px 0px; }
-.emoji-1F6CB { background-position: -22500px 0px; }
-.emoji-1F6CC { background-position: -22520px 0px; }
-.emoji-1F6CD { background-position: -22540px 0px; }
-.emoji-1F6CE { background-position: -22560px 0px; }
-.emoji-1F6CF { background-position: -22580px 0px; }
-.emoji-1F6E0 { background-position: -22600px 0px; }
-.emoji-1F6E1 { background-position: -22620px 0px; }
-.emoji-1F6E2 { background-position: -22640px 0px; }
-.emoji-1F6E3 { background-position: -22660px 0px; }
-.emoji-1F6E4 { background-position: -22680px 0px; }
-.emoji-1F6E5 { background-position: -22700px 0px; }
-.emoji-1F6E6 { background-position: -22720px 0px; }
-.emoji-1F6E7 { background-position: -22740px 0px; }
-.emoji-1F6E8 { background-position: -22760px 0px; }
-.emoji-1F6E9 { background-position: -22780px 0px; }
-.emoji-1F6EA { background-position: -22800px 0px; }
-.emoji-1F6EB { background-position: -22820px 0px; }
-.emoji-1F6EC { background-position: -22840px 0px; }
-.emoji-1F6F0 { background-position: -22860px 0px; }
-.emoji-1F6F1 { background-position: -22880px 0px; }
-.emoji-1F6F2 { background-position: -22900px 0px; }
-.emoji-1F6F3 { background-position: -22920px 0px; }
-.emoji-203C { background-position: -22940px 0px; }
-.emoji-2049 { background-position: -22960px 0px; }
-.emoji-2122 { background-position: -22980px 0px; }
-.emoji-2139 { background-position: -23000px 0px; }
-.emoji-2194 { background-position: -23020px 0px; }
-.emoji-2195 { background-position: -23040px 0px; }
-.emoji-2196 { background-position: -23060px 0px; }
-.emoji-2197 { background-position: -23080px 0px; }
-.emoji-2198 { background-position: -23100px 0px; }
-.emoji-2199 { background-position: -23120px 0px; }
-.emoji-21A9 { background-position: -23140px 0px; }
-.emoji-21AA { background-position: -23160px 0px; }
-.emoji-231A { background-position: -23180px 0px; }
-.emoji-231B { background-position: -23200px 0px; }
-.emoji-23E9 { background-position: -23220px 0px; }
-.emoji-23EA { background-position: -23240px 0px; }
-.emoji-23EB { background-position: -23260px 0px; }
-.emoji-23EC { background-position: -23280px 0px; }
-.emoji-23F0 { background-position: -23300px 0px; }
-.emoji-23F3 { background-position: -23320px 0px; }
-.emoji-24C2 { background-position: -23340px 0px; }
-.emoji-25AA { background-position: -23360px 0px; }
-.emoji-25AB { background-position: -23380px 0px; }
-.emoji-25B6 { background-position: -23400px 0px; }
-.emoji-25C0 { background-position: -23420px 0px; }
-.emoji-25FB { background-position: -23440px 0px; }
-.emoji-25FC { background-position: -23460px 0px; }
-.emoji-25FD { background-position: -23480px 0px; }
-.emoji-25FE { background-position: -23500px 0px; }
-.emoji-2600 { background-position: -23520px 0px; }
-.emoji-2601 { background-position: -23540px 0px; }
-.emoji-260E { background-position: -23560px 0px; }
-.emoji-2611 { background-position: -23580px 0px; }
-.emoji-2614 { background-position: -23600px 0px; }
-.emoji-2615 { background-position: -23620px 0px; }
-.emoji-261D { background-position: -23640px 0px; }
-.emoji-263A { background-position: -23660px 0px; }
-.emoji-2648 { background-position: -23680px 0px; }
-.emoji-2649 { background-position: -23700px 0px; }
-.emoji-264A { background-position: -23720px 0px; }
-.emoji-264B { background-position: -23740px 0px; }
-.emoji-264C { background-position: -23760px 0px; }
-.emoji-264D { background-position: -23780px 0px; }
-.emoji-264E { background-position: -23800px 0px; }
-.emoji-264F { background-position: -23820px 0px; }
-.emoji-2650 { background-position: -23840px 0px; }
-.emoji-2651 { background-position: -23860px 0px; }
-.emoji-2652 { background-position: -23880px 0px; }
-.emoji-2653 { background-position: -23900px 0px; }
-.emoji-2660 { background-position: -23920px 0px; }
-.emoji-2663 { background-position: -23940px 0px; }
-.emoji-2665 { background-position: -23960px 0px; }
-.emoji-2666 { background-position: -23980px 0px; }
-.emoji-2668 { background-position: -24000px 0px; }
-.emoji-267B { background-position: -24020px 0px; }
-.emoji-267F { background-position: -24040px 0px; }
-.emoji-2693 { background-position: -24060px 0px; }
-.emoji-26A0 { background-position: -24080px 0px; }
-.emoji-26A1 { background-position: -24100px 0px; }
-.emoji-26AA { background-position: -24120px 0px; }
-.emoji-26AB { background-position: -24140px 0px; }
-.emoji-26BD { background-position: -24160px 0px; }
-.emoji-26BE { background-position: -24180px 0px; }
-.emoji-26C4 { background-position: -24200px 0px; }
-.emoji-26C5 { background-position: -24220px 0px; }
-.emoji-26CE { background-position: -24240px 0px; }
-.emoji-26D4 { background-position: -24260px 0px; }
-.emoji-26EA { background-position: -24280px 0px; }
-.emoji-26F2 { background-position: -24300px 0px; }
-.emoji-26F3 { background-position: -24320px 0px; }
-.emoji-26F5 { background-position: -24340px 0px; }
-.emoji-26FA { background-position: -24360px 0px; }
-.emoji-26FD { background-position: -24380px 0px; }
-.emoji-2702 { background-position: -24400px 0px; }
-.emoji-2705 { background-position: -24420px 0px; }
-.emoji-2708 { background-position: -24440px 0px; }
-.emoji-2709 { background-position: -24460px 0px; }
-.emoji-270A { background-position: -24480px 0px; }
-.emoji-270B { background-position: -24500px 0px; }
-.emoji-270C { background-position: -24520px 0px; }
-.emoji-270F { background-position: -24540px 0px; }
-.emoji-2712 { background-position: -24560px 0px; }
-.emoji-2714 { background-position: -24580px 0px; }
-.emoji-2716 { background-position: -24600px 0px; }
-.emoji-2728 { background-position: -24620px 0px; }
-.emoji-2733 { background-position: -24640px 0px; }
-.emoji-2734 { background-position: -24660px 0px; }
-.emoji-2744 { background-position: -24680px 0px; }
-.emoji-2747 { background-position: -24700px 0px; }
-.emoji-274C { background-position: -24720px 0px; }
-.emoji-274E { background-position: -24740px 0px; }
-.emoji-2753 { background-position: -24760px 0px; }
-.emoji-2754 { background-position: -24780px 0px; }
-.emoji-2755 { background-position: -24800px 0px; }
-.emoji-2757 { background-position: -24820px 0px; }
-.emoji-2764 { background-position: -24840px 0px; }
-.emoji-2795 { background-position: -24860px 0px; }
-.emoji-2796 { background-position: -24880px 0px; }
-.emoji-2797 { background-position: -24900px 0px; }
-.emoji-27A1 { background-position: -24920px 0px; }
-.emoji-27B0 { background-position: -24940px 0px; }
-.emoji-27BF { background-position: -24960px 0px; }
-.emoji-2934 { background-position: -24980px 0px; }
-.emoji-2935 { background-position: -25000px 0px; }
-.emoji-2B05 { background-position: -25020px 0px; }
-.emoji-2B06 { background-position: -25040px 0px; }
-.emoji-2B07 { background-position: -25060px 0px; }
-.emoji-2B1B { background-position: -25080px 0px; }
-.emoji-2B1C { background-position: -25100px 0px; }
-.emoji-2B50 { background-position: -25120px 0px; }
-.emoji-2B55 { background-position: -25140px 0px; }
-.emoji-3030 { background-position: -25160px 0px; }
-.emoji-303D { background-position: -25180px 0px; }
-.emoji-3297 { background-position: -25200px 0px; }
-.emoji-3299 { background-position: -25220px 0px; } \ No newline at end of file
+ @media only screen and (-webkit-min-device-pixel-ratio: 2),
+ only screen and (min--moz-device-pixel-ratio: 2),
+ only screen and (-o-min-device-pixel-ratio: 2/1),
+ only screen and (min-device-pixel-ratio: 2),
+ only screen and (min-resolution: 192dpi),
+ only screen and (min-resolution: 2dppx) {
+ background-image: image-url('emoji@2x.png');
+ background-size: 840px 820px;
+ }
+}
diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss
index 1cc853dd4f5..8694bd654a7 100644
--- a/app/assets/stylesheets/pages/issues.scss
+++ b/app/assets/stylesheets/pages/issues.scss
@@ -24,7 +24,7 @@
display: inline-block;
}
- .issue-no-comments, .issue-no-votes {
+ .issue-no-comments {
opacity: 0.5;
}
}
diff --git a/app/assets/stylesheets/pages/labels.scss b/app/assets/stylesheets/pages/labels.scss
index d1590e42fcb..1c78aafdb87 100644
--- a/app/assets/stylesheets/pages/labels.scss
+++ b/app/assets/stylesheets/pages/labels.scss
@@ -9,7 +9,7 @@
}
}
-.manage-labels-list {
+.label-row {
.label {
padding: 9px;
font-size: 14px;
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index 6b497cd56ed..9a2c4b83ffb 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -163,7 +163,7 @@
display: inline-block;
}
- .merge-request-no-comments, .merge-request-no-votes {
+ .merge-request-no-comments {
opacity: 0.5;
}
}
diff --git a/app/assets/stylesheets/pages/milestone.scss b/app/assets/stylesheets/pages/milestone.scss
index e80dc9e84a1..9144a83647d 100644
--- a/app/assets/stylesheets/pages/milestone.scss
+++ b/app/assets/stylesheets/pages/milestone.scss
@@ -11,3 +11,60 @@ li.milestone {
height: 6px;
}
}
+
+.milestone-content {
+ .issues-count {
+ margin-right: 17px;
+ float: right;
+ width: 105px;
+ }
+
+ .issue-row {
+ .color-label {
+ border-radius: 2px;
+ padding: 3px !important;
+ }
+
+ // Issue title
+ span a {
+ color: rgba(0,0,0,0.64);
+ }
+ }
+}
+
+.milestone-summary {
+ margin-bottom: 25px;
+
+ .milestone-stat {
+ margin-right: 10px;
+ }
+
+ .time-elapsed {
+ color: $orange-light;
+ }
+}
+
+.issues-sortable-list {
+ .issue-detail {
+ display: block;
+
+ .issue-number{
+ color: rgba(0,0,0,0.44);
+ margin-right: 5px;
+ }
+ .color-label {
+ padding: 6px 10px;
+ margin-right: 7px;
+ margin-top: 10px;
+ }
+
+ .avatar {
+ float: none;
+ }
+ }
+}
+
+.milestone-detail {
+ border-bottom: 1px solid $border-color;
+ padding: 20px 0;
+}
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index 046bae672fc..542ac896f6b 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -73,24 +73,19 @@
font-weight: normal;
}
+ .visibility-icon {
+ display: inline-block;
+ margin-left: 5px;
+ font-size: 18px;
+ color: $gray;
+ }
+
p {
padding: 0 $gl-padding;
color: #5c5d5e;
}
}
- .visibility-level-label {
- @extend .btn;
- @extend .btn-gray;
-
- color: $gray;
- cursor: default;
-
- i {
- color: inherit;
- }
- }
-
.project-repo-buttons {
margin-top: 20px;
margin-bottom: 0px;
diff --git a/app/assets/stylesheets/pages/todos.scss b/app/assets/stylesheets/pages/todos.scss
new file mode 100644
index 00000000000..2f57f21963d
--- /dev/null
+++ b/app/assets/stylesheets/pages/todos.scss
@@ -0,0 +1,124 @@
+/**
+ * Dashboard Todos
+ *
+ */
+
+.navbar-nav {
+ li {
+ .badge.todos-pending-count {
+ background-color: #7f8fa4;
+ margin-top: -5px;
+ }
+ }
+}
+
+.todos {
+ .panel {
+ border-top: none;
+ margin-bottom: 0;
+ }
+}
+
+.todo-item {
+ font-size: $gl-font-size;
+ padding: $gl-padding-top 0 $gl-padding-top ($gl-avatar-size + $gl-padding-top);
+ border-bottom: 1px solid $table-border-color;
+ color: #7f8fa4;
+
+ &.todo-inline {
+ .avatar {
+ position: relative;
+ top: -2px;
+ }
+
+ .todo-title {
+ line-height: 40px;
+ }
+ }
+
+ a {
+ color: #4c4e54;
+ }
+
+ .avatar {
+ margin-left: -($gl-avatar-size + $gl-padding-top);
+ }
+
+ .todo-title {
+ @include str-truncated(calc(100% - 174px));
+ font-weight: 600;
+
+ .author_name {
+ color: #333;
+ }
+ }
+
+ .todo-body {
+ margin-right: 174px;
+
+ .todo-note {
+ word-wrap: break-word;
+
+ .md {
+ color: #7f8fa4;
+ font-size: $gl-font-size;
+
+ p {
+ color: #5c5d5e;
+ }
+ }
+
+ pre {
+ border: none;
+ background: #f9f9f9;
+ border-radius: 0;
+ color: #777;
+ margin: 0 20px;
+ overflow: hidden;
+ }
+
+ .note-image-attach {
+ margin-top: 4px;
+ margin-left: 0px;
+ max-width: 200px;
+ float: none;
+ }
+
+ p:last-child {
+ margin-bottom: 0;
+ }
+ }
+
+ .todo-note-icon {
+ color: #777;
+ float: left;
+ font-size: $gl-font-size;
+ line-height: 16px;
+ margin-right: 5px;
+ }
+ }
+
+ &:last-child { border:none }
+}
+
+@media (max-width: $screen-xs-max) {
+ .todo-item {
+ padding-left: $gl-padding;
+
+ .todo-title {
+ white-space: normal;
+ overflow: visible;
+ max-width: 100%;
+ }
+
+ .avatar {
+ display: none;
+ }
+
+ .todo-body {
+ margin: 0;
+ border-left: 2px solid #DDD;
+ padding-left: 10px;
+ }
+ }
+}
diff --git a/app/controllers/admin/labels_controller.rb b/app/controllers/admin/labels_controller.rb
index 3b070e65d0d..d79ce2b10fe 100644
--- a/app/controllers/admin/labels_controller.rb
+++ b/app/controllers/admin/labels_controller.rb
@@ -53,6 +53,6 @@ class Admin::LabelsController < Admin::ApplicationController
end
def label_params
- params[:label].permit(:title, :color)
+ params[:label].permit(:title, :description, :color)
end
end
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 2c329b60a19..fb74919ea23 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -25,7 +25,7 @@ class ApplicationController < ActionController::Base
helper_method :abilities, :can?, :current_application_settings
helper_method :import_sources_enabled?, :github_import_enabled?, :github_import_configured?, :gitlab_import_enabled?, :gitlab_import_configured?, :bitbucket_import_enabled?, :bitbucket_import_configured?, :gitorious_import_enabled?, :google_code_import_enabled?, :fogbugz_import_enabled?, :git_import_enabled?
- helper_method :repository
+ helper_method :repository, :can_collaborate_with_project?
rescue_from Encoding::CompatibilityError do |exception|
log_exception(exception)
@@ -410,6 +410,13 @@ class ApplicationController < ActionController::Base
current_user.nil? && root_path == request.path
end
+ def can_collaborate_with_project?(project = nil)
+ project ||= @project
+
+ can?(current_user, :push_code, project) ||
+ (current_user && current_user.already_forked?(project))
+ end
+
private
def set_default_sort
diff --git a/app/controllers/concerns/creates_commit.rb b/app/controllers/concerns/creates_commit.rb
index b9eb0a22f88..787416c17ab 100644
--- a/app/controllers/concerns/creates_commit.rb
+++ b/app/controllers/concerns/creates_commit.rb
@@ -13,17 +13,11 @@ module CreatesCommit
result = service.new(@tree_edit_project, current_user, commit_params).execute
if result[:status] == :success
- flash[:notice] = success_notice || "Your changes have been successfully committed."
-
- if create_merge_request?
- success_path = new_merge_request_path
- target = different_project? ? "project" : "branch"
- flash[:notice] << " You can now submit a merge request to get this change into the original #{target}."
- end
+ update_flash_notice(success_notice)
respond_to do |format|
- format.html { redirect_to success_path }
- format.json { render json: { message: "success", filePath: success_path } }
+ format.html { redirect_to final_success_path(success_path) }
+ format.json { render json: { message: "success", filePath: final_success_path(success_path) } }
end
else
flash[:alert] = result[:message]
@@ -41,14 +35,32 @@ module CreatesCommit
end
def authorize_edit_tree!
- return if can?(current_user, :push_code, project)
- return if current_user && current_user.already_forked?(project)
+ return if can_collaborate_with_project?
access_denied!
end
private
+ def update_flash_notice(success_notice)
+ flash[:notice] = success_notice || "Your changes have been successfully committed."
+
+ if create_merge_request?
+ if merge_request_exists?
+ flash[:notice] = nil
+ else
+ target = different_project? ? "project" : "branch"
+ flash[:notice] << " You can now submit a merge request to get this change into the original #{target}."
+ end
+ end
+ end
+
+ def final_success_path(success_path)
+ return success_path unless create_merge_request?
+
+ merge_request_exists? ? existing_merge_request_path : new_merge_request_path
+ end
+
def new_merge_request_path
new_namespace_project_merge_request_path(
@mr_source_project.namespace,
@@ -62,6 +74,19 @@ module CreatesCommit
)
end
+ def existing_merge_request_path
+ namespace_project_merge_request_path(@mr_target_project.namespace, @mr_target_project, @merge_request)
+ end
+
+ def merge_request_exists?
+ return @merge_request if defined?(@merge_request)
+
+ @merge_request = @mr_target_project.merge_requests.opened.find_by(
+ source_branch: @mr_source_branch,
+ target_branch: @mr_target_branch
+ )
+ end
+
def different_project?
@mr_source_project != @mr_target_project
end
@@ -75,7 +100,7 @@ module CreatesCommit
end
def set_commit_variables
- @mr_source_branch = @target_branch
+ @mr_source_branch ||= @target_branch
if can?(current_user, :push_code, @project)
# Edit file in this project
@@ -89,7 +114,7 @@ module CreatesCommit
else
# Merge request to this project
@mr_target_project = @project
- @mr_target_branch = @ref
+ @mr_target_branch ||= @ref
end
else
# Edit file in fork
@@ -97,7 +122,7 @@ module CreatesCommit
# Merge request from fork to this project
@mr_source_project = @tree_edit_project
@mr_target_project = @project
- @mr_target_branch = @ref
+ @mr_target_branch ||= @ref
end
end
end
diff --git a/app/controllers/concerns/issues_action.rb b/app/controllers/concerns/issues_action.rb
index effd4721949..5b098628557 100644
--- a/app/controllers/concerns/issues_action.rb
+++ b/app/controllers/concerns/issues_action.rb
@@ -6,6 +6,8 @@ module IssuesAction
@issues = @issues.page(params[:page]).per(ApplicationController::PER_PAGE)
@issues = @issues.preload(:author, :project)
+ @label = @issuable_finder.labels.first
+
respond_to do |format|
format.html
format.atom { render layout: false }
diff --git a/app/controllers/concerns/merge_requests_action.rb b/app/controllers/concerns/merge_requests_action.rb
index f7a25111db9..f6de696e84d 100644
--- a/app/controllers/concerns/merge_requests_action.rb
+++ b/app/controllers/concerns/merge_requests_action.rb
@@ -5,5 +5,7 @@ module MergeRequestsAction
@merge_requests = get_merge_requests_collection
@merge_requests = @merge_requests.page(params[:page]).per(ApplicationController::PER_PAGE)
@merge_requests = @merge_requests.preload(:author, :target_project)
+
+ @label = @issuable_finder.labels.first
end
end
diff --git a/app/controllers/dashboard/todos_controller.rb b/app/controllers/dashboard/todos_controller.rb
new file mode 100644
index 00000000000..9ee9039f004
--- /dev/null
+++ b/app/controllers/dashboard/todos_controller.rb
@@ -0,0 +1,35 @@
+class Dashboard::TodosController < Dashboard::ApplicationController
+ before_action :find_todos, only: [:index, :destroy_all]
+
+ def index
+ @todos = @todos.page(params[:page]).per(PER_PAGE)
+ end
+
+ def destroy
+ todo.done!
+
+ respond_to do |format|
+ format.html { redirect_to dashboard_todos_path, notice: 'Todo was successfully marked as done.' }
+ format.js { render nothing: true }
+ end
+ end
+
+ def destroy_all
+ @todos.each(&:done)
+
+ respond_to do |format|
+ format.html { redirect_to dashboard_todos_path, notice: 'All todos were marked as done.' }
+ format.js { render nothing: true }
+ end
+ end
+
+ private
+
+ def todo
+ @todo ||= current_user.todos.find(params[:id])
+ end
+
+ def find_todos
+ @todos = TodosFinder.new(current_user, params).execute
+ end
+end
diff --git a/app/controllers/omniauth_callbacks_controller.rb b/app/controllers/omniauth_callbacks_controller.rb
index 9cf76521a0d..21135f7d607 100644
--- a/app/controllers/omniauth_callbacks_controller.rb
+++ b/app/controllers/omniauth_callbacks_controller.rb
@@ -42,6 +42,26 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
end
end
+ def saml
+ if current_user
+ log_audit_event(current_user, with: :saml)
+ # Update SAML identity if data has changed.
+ identity = current_user.identities.find_by(extern_uid: oauth['uid'], provider: :saml)
+ if identity.nil?
+ current_user.identities.create(extern_uid: oauth['uid'], provider: :saml)
+ redirect_to profile_account_path, notice: 'Authentication method updated'
+ else
+ redirect_to after_sign_in_path_for(current_user)
+ end
+ else
+ saml_user = Gitlab::Saml::User.new(oauth)
+ saml_user.save
+ @user = saml_user.gl_user
+
+ continue_login_process
+ end
+ end
+
def omniauth_error
@provider = params[:provider]
@error = params[:error]
@@ -65,25 +85,11 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
log_audit_event(current_user, with: oauth['provider'])
redirect_to profile_account_path, notice: 'Authentication method updated'
else
- @user = Gitlab::OAuth::User.new(oauth)
- @user.save
+ oauth_user = Gitlab::OAuth::User.new(oauth)
+ oauth_user.save
+ @user = oauth_user.gl_user
- # Only allow properly saved users to login.
- if @user.persisted? && @user.valid?
- log_audit_event(@user.gl_user, with: oauth['provider'])
- sign_in_and_redirect(@user.gl_user)
- else
- error_message =
- if @user.gl_user.errors.any?
- @user.gl_user.errors.map do |attribute, message|
- "#{attribute} #{message}"
- end.join(", ")
- else
- ''
- end
-
- redirect_to omniauth_error_path(oauth['provider'], error: error_message) and return
- end
+ continue_login_process
end
rescue Gitlab::OAuth::SignupDisabledError
label = Gitlab::OAuth::Provider.label_for(oauth['provider'])
@@ -104,6 +110,18 @@ class OmniauthCallbacksController < Devise::OmniauthCallbacksController
session[:service_tickets][provider] = ticket
end
+ def continue_login_process
+ # Only allow properly saved users to login.
+ if @user.persisted? && @user.valid?
+ log_audit_event(@user, with: oauth['provider'])
+ sign_in_and_redirect(@user)
+ else
+ error_message = @user.errors.full_messages.to_sentence
+
+ redirect_to omniauth_error_path(oauth['provider'], error: error_message) and return
+ end
+ end
+
def oauth
@oauth ||= request.env['omniauth.auth']
end
diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb
index 495a432347e..cd8b2911674 100644
--- a/app/controllers/projects/blob_controller.rb
+++ b/app/controllers/projects/blob_controller.rb
@@ -87,7 +87,7 @@ class Projects::BlobController < Projects::ApplicationController
private
def blob
- @blob ||= @repository.blob_at(@commit.id, @path)
+ @blob ||= Blob.decorate(@repository.blob_at(@commit.id, @path))
if @blob
@blob
diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index ec379c53b8f..f159e169f6d 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -56,6 +56,12 @@ class Projects::BuildsController < Projects::ApplicationController
render json: @build.to_json(only: [:status, :id, :sha, :coverage], methods: :sha)
end
+ def erase
+ @build.erase(erased_by: current_user)
+ redirect_to namespace_project_build_path(project.namespace, project, @build),
+ notice: "Build has been sucessfully erased!"
+ end
+
private
def build
diff --git a/app/controllers/projects/commit_controller.rb b/app/controllers/projects/commit_controller.rb
index 36951b91372..97d31a4229a 100644
--- a/app/controllers/projects/commit_controller.rb
+++ b/app/controllers/projects/commit_controller.rb
@@ -2,6 +2,8 @@
#
# Not to be confused with CommitsController, plural.
class Projects::CommitController < Projects::ApplicationController
+ include CreatesCommit
+
# Authorize
before_action :require_non_empty_project
before_action :authorize_download_code!, except: [:cancel_builds, :retry_builds]
@@ -9,6 +11,7 @@ class Projects::CommitController < Projects::ApplicationController
before_action :authorize_read_commit_status!, only: [:builds]
before_action :commit
before_action :define_show_vars, only: [:show, :builds]
+ before_action :authorize_edit_tree!, only: [:revert]
def show
apply_diff_view_cookie!
@@ -55,8 +58,37 @@ class Projects::CommitController < Projects::ApplicationController
render layout: false
end
+ def revert
+ assign_revert_commit_vars
+
+ return render_404 if @target_branch.blank?
+
+ create_commit(Commits::RevertService, success_notice: "The #{revert_type_title} has been successfully reverted.",
+ success_path: successful_revert_path, failure_path: failed_revert_path)
+ end
+
private
+ def revert_type_title
+ @commit.merged_merge_request ? 'merge request' : 'commit'
+ end
+
+ def successful_revert_path
+ return referenced_merge_request_url if @commit.merged_merge_request
+
+ namespace_project_commits_url(@project.namespace, @project, @target_branch)
+ end
+
+ def failed_revert_path
+ return referenced_merge_request_url if @commit.merged_merge_request
+
+ namespace_project_commit_url(@project.namespace, @project, params[:id])
+ end
+
+ def referenced_merge_request_url
+ namespace_project_merge_request_url(@project.namespace, @project, @commit.merged_merge_request)
+ end
+
def commit
@commit ||= @project.commit(params[:id])
end
@@ -79,4 +111,16 @@ class Projects::CommitController < Projects::ApplicationController
@statuses = ci_commit.statuses if ci_commit
end
+
+ def assign_revert_commit_vars
+ @commit = project.commit(params[:id])
+ @target_branch = params[:target_branch]
+ @mr_source_branch = @commit.revert_branch_name
+ @mr_target_branch = @target_branch
+ @commit_params = {
+ commit: @commit,
+ revert_type_title: revert_type_title,
+ create_merge_request: params[:create_merge_request].present? || different_project?
+ }
+ end
end
diff --git a/app/controllers/projects/forks_controller.rb b/app/controllers/projects/forks_controller.rb
index e61e01c4a59..0c551501ca4 100644
--- a/app/controllers/projects/forks_controller.rb
+++ b/app/controllers/projects/forks_controller.rb
@@ -32,7 +32,7 @@ class Projects::ForksController < Projects::ApplicationController
if continue_params
redirect_to continue_params[:to], notice: continue_params[:notice]
else
- redirect_to namespace_project_path(@forked_project.namespace, @forked_project), notice: "The project was successfully forked."
+ redirect_to namespace_project_path(@forked_project.namespace, @forked_project), notice: "The project '#{@forked_project.name}' was successfully forked."
end
end
else
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index 68244883803..67faa1e4437 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -32,6 +32,7 @@ class Projects::IssuesController < Projects::ApplicationController
end
@issues = @issues.page(params[:page]).per(PER_PAGE)
+ @label = @project.labels.find_by(title: params[:label_name])
respond_to do |format|
format.html
diff --git a/app/controllers/projects/labels_controller.rb b/app/controllers/projects/labels_controller.rb
index 86d6e3e0f6b..ecac3c395ec 100644
--- a/app/controllers/projects/labels_controller.rb
+++ b/app/controllers/projects/labels_controller.rb
@@ -69,7 +69,7 @@ class Projects::LabelsController < Projects::ApplicationController
end
def label_params
- params.require(:label).permit(:title, :color)
+ params.require(:label).permit(:title, :description, :color)
end
def label
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 9d588c370aa..5fe21694605 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -34,6 +34,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
@merge_requests = @merge_requests.page(params[:page]).per(PER_PAGE)
@merge_requests = @merge_requests.preload(:target_project)
+ @label = @project.labels.find_by(title: params[:label_name])
+
respond_to do |format|
format.html
format.json do
@@ -179,6 +181,8 @@ class Projects::MergeRequestsController < Projects::ApplicationController
return
end
+ TodoService.new.merge_merge_request(merge_request, current_user)
+
@merge_request.update(merge_error: nil)
if params[:merge_when_build_succeeds].present? && @merge_request.ci_commit && @merge_request.ci_commit.active?
diff --git a/app/controllers/projects/milestones_controller.rb b/app/controllers/projects/milestones_controller.rb
index a5c4ef1c7c7..21f30f278c8 100644
--- a/app/controllers/projects/milestones_controller.rb
+++ b/app/controllers/projects/milestones_controller.rb
@@ -35,6 +35,7 @@ class Projects::MilestonesController < Projects::ApplicationController
@issues = @milestone.issues
@users = @milestone.participants.uniq
@merge_requests = @milestone.merge_requests
+ @labels = @milestone.labels
end
def create
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 14ca7426c2f..aea08ecce3e 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -236,7 +236,7 @@ class ProjectsController < ApplicationController
Emoji.emojis.map do |name, emoji|
{
name: name,
- path: view_context.image_url("emoji/#{emoji["unicode"]}.png")
+ path: view_context.image_url("#{emoji["unicode"]}.png")
}
end
end
diff --git a/app/finders/issuable_finder.rb b/app/finders/issuable_finder.rb
index 0a4192e6bac..f7240edd618 100644
--- a/app/finders/issuable_finder.rb
+++ b/app/finders/issuable_finder.rb
@@ -119,6 +119,20 @@ class IssuableFinder
labels? && params[:label_name] == Label::None.title
end
+ def labels
+ return @labels if defined?(@labels)
+
+ if labels? && !filter_by_no_label?
+ @labels = Label.where(title: label_names)
+
+ if projects
+ @labels = @labels.where(project: projects)
+ end
+ else
+ @labels = Label.none
+ end
+ end
+
def assignee?
params[:assignee_id].present?
end
@@ -253,8 +267,6 @@ class IssuableFinder
joins("LEFT OUTER JOIN label_links ON label_links.target_type = '#{klass.name}' AND label_links.target_id = #{klass.table_name}.id").
where(label_links: { id: nil })
else
- label_names = params[:label_name].split(",")
-
items = items.joins(:labels).where(labels: { title: label_names })
if projects
@@ -266,6 +278,10 @@ class IssuableFinder
items
end
+ def label_names
+ params[:label_name].split(',')
+ end
+
def current_user_related?
params[:scope] == 'created-by-me' || params[:scope] == 'authored' || params[:scope] == 'assigned-to-me'
end
diff --git a/app/finders/todos_finder.rb b/app/finders/todos_finder.rb
new file mode 100644
index 00000000000..3ba27c40504
--- /dev/null
+++ b/app/finders/todos_finder.rb
@@ -0,0 +1,129 @@
+# TodosFinder
+#
+# Used to filter Todos by set of params
+#
+# Arguments:
+# current_user - which user use
+# params:
+# action_id: integer
+# author_id: integer
+# project_id; integer
+# state: 'pending' or 'done'
+# type: 'Issue' or 'MergeRequest'
+#
+
+class TodosFinder
+ NONE = '0'
+
+ attr_accessor :current_user, :params
+
+ def initialize(current_user, params)
+ @current_user = current_user
+ @params = params
+ end
+
+ def execute
+ items = current_user.todos
+ items = by_action_id(items)
+ items = by_author(items)
+ items = by_project(items)
+ items = by_state(items)
+ items = by_type(items)
+
+ items
+ end
+
+ private
+
+ def action_id?
+ action_id.present? && [Todo::ASSIGNED, Todo::MENTIONED].include?(action_id.to_i)
+ end
+
+ def action_id
+ params[:action_id]
+ end
+
+ def author?
+ params[:author_id].present?
+ end
+
+ def author
+ return @author if defined?(@author)
+
+ @author =
+ if author? && params[:author_id] != NONE
+ User.find(params[:author_id])
+ else
+ nil
+ end
+ end
+
+ def project?
+ params[:project_id].present?
+ end
+
+ def project
+ return @project if defined?(@project)
+
+ if project?
+ @project = Project.find(params[:project_id])
+
+ unless Ability.abilities.allowed?(current_user, :read_project, @project)
+ @project = nil
+ end
+ else
+ @project = nil
+ end
+
+ @project
+ end
+
+ def type?
+ type.present? && ['Issue', 'MergeRequest'].include?(type)
+ end
+
+ def type
+ params[:type]
+ end
+
+ def by_action_id(items)
+ if action_id?
+ items = items.where(action: action_id)
+ end
+
+ items
+ end
+
+ def by_author(items)
+ if author?
+ items = items.where(author_id: author.try(:id))
+ end
+
+ items
+ end
+
+ def by_project(items)
+ if project?
+ items = items.where(project: project)
+ end
+
+ items
+ end
+
+ def by_state(items)
+ case params[:state]
+ when 'done'
+ items.done
+ else
+ items.pending
+ end
+ end
+
+ def by_type(items)
+ if type?
+ items = items.where(target_type: type)
+ end
+
+ items
+ end
+end
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index ecefa9b006d..f0aa2b57121 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -118,12 +118,6 @@ module ApplicationHelper
grouped_options_for_select(options, @ref || @project.default_branch)
end
- def emoji_autocomplete_source
- # should be an array of strings
- # so to_s can be called, because it is sufficient and to_json is too slow
- Emoji.names.to_s
- end
-
# Define whenever show last push event
# with suggestion to create MR
def show_last_push_widget?(event)
diff --git a/app/helpers/blob_helper.rb b/app/helpers/blob_helper.rb
index 16967927922..7143a744869 100644
--- a/app/helpers/blob_helper.rb
+++ b/app/helpers/blob_helper.rb
@@ -127,10 +127,6 @@ module BlobHelper
end
end
- def blob_svg?(blob)
- blob.language && blob.language.name == 'SVG'
- end
-
# SVGs can contain malicious JavaScript; only include whitelisted
# elements and attributes. Note that this whitelist is by no means complete
# and may omit some elements.
diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb
index 1d14ee52cfc..7ff539118d3 100644
--- a/app/helpers/commits_helper.rb
+++ b/app/helpers/commits_helper.rb
@@ -123,6 +123,37 @@ module CommitsHelper
)
end
+ def revert_commit_link(commit, continue_to_path, btn_class: nil)
+ return unless current_user
+
+ tooltip = "Revert this #{revert_commit_type(commit)} in a new merge request"
+
+ if can_collaborate_with_project?
+ content_tag :span, 'data-toggle' => 'modal', 'data-target' => '#modal-revert-commit' do
+ link_to 'Revert', '#modal-revert-commit', 'data-toggle' => 'tooltip', title: tooltip, class: "btn btn-default btn-grouped btn-#{btn_class}"
+ end
+ elsif can?(current_user, :fork_project, @project)
+ continue_params = {
+ to: continue_to_path,
+ notice: edit_in_new_fork_notice + ' Try to revert this commit again.',
+ notice_now: edit_in_new_fork_notice_now
+ }
+ fork_path = namespace_project_forks_path(@project.namespace, @project,
+ namespace_key: current_user.namespace.id,
+ continue: continue_params)
+
+ link_to 'Revert', fork_path, class: 'btn btn-grouped btn-close', method: :post, 'data-toggle' => 'tooltip', title: tooltip
+ end
+ end
+
+ def revert_commit_type(commit)
+ if commit.merged_merge_request
+ 'merge request'
+ else
+ 'commit'
+ end
+ end
+
protected
# Private: Returns a link to a person. If the person has a matching user and
diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index 6a3ab3ea40a..d76db867c5a 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -137,7 +137,7 @@ module DiffHelper
# Always use HTML to handle case where JSON diff rendered this button
params_copy.delete(:format)
- link_to url_for(params_copy), id: "#{name}-diff-btn", class: (selected ? 'btn active' : 'btn') do
+ link_to url_for(params_copy), id: "#{name}-diff-btn", class: (selected ? 'btn active' : 'btn'), data: { view_type: name } do
title
end
end
diff --git a/app/helpers/nav_helper.rb b/app/helpers/nav_helper.rb
index 29cb753e62c..5d86bd490a8 100644
--- a/app/helpers/nav_helper.rb
+++ b/app/helpers/nav_helper.rb
@@ -23,6 +23,7 @@ module NavHelper
if current_path?('merge_requests#show') ||
current_path?('merge_requests#diffs') ||
current_path?('merge_requests#commits') ||
+ current_path?('merge_requests#builds') ||
current_path?('issues#show')
if cookies[:collapsed_gutter] == 'true'
"page-gutter right-sidebar-collapsed"
diff --git a/app/helpers/todos_helper.rb b/app/helpers/todos_helper.rb
new file mode 100644
index 00000000000..4b745a5b969
--- /dev/null
+++ b/app/helpers/todos_helper.rb
@@ -0,0 +1,87 @@
+module TodosHelper
+ def todos_pending_count
+ current_user.todos.pending.count
+ end
+
+ def todos_done_count
+ current_user.todos.done.count
+ end
+
+ def todo_action_name(todo)
+ case todo.action
+ when Todo::ASSIGNED then 'assigned you'
+ when Todo::MENTIONED then 'mentioned you on'
+ end
+ end
+
+ def todo_target_link(todo)
+ target = todo.target_type.titleize.downcase
+ link_to "#{target} #{todo.target.to_reference}", todo_target_path(todo)
+ end
+
+ def todo_target_path(todo)
+ anchor = dom_id(todo.note) if todo.note.present?
+
+ polymorphic_path([todo.project.namespace.becomes(Namespace),
+ todo.project, todo.target], anchor: anchor)
+ end
+
+ def todos_filter_params
+ {
+ state: params[:state],
+ project_id: params[:project_id],
+ author_id: params[:author_id],
+ type: params[:type],
+ action_id: params[:action_id],
+ }
+ end
+
+ def todos_filter_path(options = {})
+ without = options.delete(:without)
+
+ options = todos_filter_params.merge(options)
+
+ if without.present?
+ without.each do |key|
+ options.delete(key)
+ end
+ end
+
+ path = request.path
+ path << "?#{options.to_param}"
+ path
+ end
+
+ def todo_actions_options
+ actions = [
+ OpenStruct.new(id: '', title: 'Any Action'),
+ OpenStruct.new(id: Todo::ASSIGNED, title: 'Assigned'),
+ OpenStruct.new(id: Todo::MENTIONED, title: 'Mentioned')
+ ]
+
+ options_from_collection_for_select(actions, 'id', 'title', params[:action_id])
+ end
+
+ def todo_projects_options
+ projects = current_user.authorized_projects.sorted_by_activity.non_archived
+ projects = projects.includes(:namespace)
+
+ projects = projects.map do |project|
+ OpenStruct.new(id: project.id, title: project.name_with_namespace)
+ end
+
+ projects.unshift(OpenStruct.new(id: '', title: 'Any Project'))
+
+ options_from_collection_for_select(projects, 'id', 'title', params[:project_id])
+ end
+
+ def todo_types_options
+ types = [
+ OpenStruct.new(title: 'Any Type', name: ''),
+ OpenStruct.new(title: 'Issue', name: 'Issue'),
+ OpenStruct.new(title: 'Merge Request', name: 'MergeRequest')
+ ]
+
+ options_from_collection_for_select(types, 'name', 'title', params[:type])
+ end
+end
diff --git a/app/helpers/tree_helper.rb b/app/helpers/tree_helper.rb
index 2ad7c80dae0..4920ca5af6e 100644
--- a/app/helpers/tree_helper.rb
+++ b/app/helpers/tree_helper.rb
@@ -56,8 +56,7 @@ module TreeHelper
return false unless on_top_of_branch?(project, ref)
- can?(current_user, :push_code, project) ||
- (current_user && current_user.already_forked?(project))
+ can_collaborate_with_project?(project)
end
def tree_edit_branch(project = @project, ref = @ref)
diff --git a/app/models/blob.rb b/app/models/blob.rb
new file mode 100644
index 00000000000..8ee9f3006b2
--- /dev/null
+++ b/app/models/blob.rb
@@ -0,0 +1,34 @@
+# Blob is a Rails-specific wrapper around Gitlab::Git::Blob objects
+class Blob < SimpleDelegator
+ # Wrap a Gitlab::Git::Blob object, or return nil when given nil
+ #
+ # This method prevents the decorated object from evaluating to "truthy" when
+ # given a nil value. For example:
+ #
+ # blob = Blob.new(nil)
+ # puts "truthy" if blob # => "truthy"
+ #
+ # blob = Blob.decorate(nil)
+ # puts "truthy" if blob # No output
+ def self.decorate(blob)
+ return if blob.nil?
+
+ new(blob)
+ end
+
+ def svg?
+ text? && language && language.name == 'SVG'
+ end
+
+ def to_partial_path
+ if lfs_pointer?
+ 'download'
+ elsif image? || svg?
+ 'image'
+ elsif text?
+ 'text'
+ else
+ 'download'
+ end
+ end
+end
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index 623edd8bc57..1227458e525 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -31,15 +31,19 @@
# artifacts_file :text
# gl_project_id :integer
# artifacts_metadata :text
+# erased_by_id :integer
+# erased_at :datetime
#
module Ci
class Build < CommitStatus
include Gitlab::Application.routes.url_helpers
+
LAZY_ATTRIBUTES = ['trace']
belongs_to :runner, class_name: 'Ci::Runner'
belongs_to :trigger_request, class_name: 'Ci::TriggerRequest'
+ belongs_to :erased_by, class_name: 'User'
serialize :options
@@ -103,23 +107,22 @@ module Ci
end
state_machine :status, initial: :pending do
- after_transition pending: :running do |build, transition|
+ after_transition pending: :running do |build|
build.execute_hooks
end
- after_transition any => [:success, :failed, :canceled] do |build, transition|
- return unless build.project
+ # We use around_transition to create builds for next stage as soon as possible, before the `after_*` is executed
+ around_transition any => [:success, :failed, :canceled] do |build, block|
+ block.call
+ build.commit.create_next_builds(build) if build.commit
+ end
+ after_transition any => [:success, :failed, :canceled] do |build|
build.update_coverage
- build.commit.create_next_builds(build)
build.execute_hooks
end
end
- def ignored?
- failed? && allow_failure?
- end
-
def retryable?
project.builds_enabled? && commands.present?
end
@@ -179,6 +182,7 @@ module Ci
end
def update_coverage
+ return unless project
coverage_regex = project.build_coverage_regex
return unless coverage_regex
coverage = extract_coverage(trace, coverage_regex)
@@ -203,6 +207,10 @@ module Ci
end
end
+ def has_trace?
+ raw_trace.present?
+ end
+
def raw_trace
if File.file?(path_to_trace)
File.read(path_to_trace)
@@ -330,6 +338,7 @@ module Ci
end
def execute_hooks
+ return unless project
build_data = Gitlab::BuildDataBuilder.build(self)
project.execute_hooks(build_data.dup, :build_hooks)
project.execute_services(build_data.dup, :build_hooks)
@@ -359,6 +368,33 @@ module Ci
Gitlab::Ci::Build::Artifacts::Metadata.new(artifacts_metadata.path, path, **options).to_entry
end
+ def erase(opts = {})
+ return false unless erasable?
+
+ remove_artifacts_file!
+ remove_artifacts_metadata!
+ erase_trace!
+ update_erased!(opts[:erased_by])
+ end
+
+ def erasable?
+ complete? && (artifacts? || has_trace?)
+ end
+
+ def erased?
+ !self.erased_at.nil?
+ end
+
+ private
+
+ def erase_trace!
+ self.trace = nil
+ end
+
+ def update_erased!(user = nil)
+ self.update(erased_by: user, erased_at: Time.now)
+ end
+
private
def yaml_variables
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb
index 38b20cd7faa..e725a6d468c 100644
--- a/app/models/ci/runner.rb
+++ b/app/models/ci/runner.rb
@@ -22,6 +22,7 @@ module Ci
extend Ci::Model
LAST_CONTACT_TIME = 5.minutes.ago
+ AVAILABLE_SCOPES = ['specific', 'shared', 'active', 'paused', 'online']
has_many :builds, class_name: 'Ci::Build'
has_many :runner_projects, dependent: :destroy, class_name: 'Ci::RunnerProject'
@@ -38,6 +39,11 @@ module Ci
scope :online, ->() { where('contacted_at > ?', LAST_CONTACT_TIME) }
scope :ordered, ->() { order(id: :desc) }
+ scope :owned_or_shared, ->(project_id) do
+ joins('LEFT JOIN ci_runner_projects ON ci_runner_projects.runner_id = ci_runners.id')
+ .where("ci_runner_projects.gl_project_id = :project_id OR ci_runners.is_shared = true", project_id: project_id)
+ end
+
acts_as_taggable
def self.search(query)
diff --git a/app/models/commit.rb b/app/models/commit.rb
index 23b771aebb7..b99abb540ea 100644
--- a/app/models/commit.rb
+++ b/app/models/commit.rb
@@ -215,6 +215,44 @@ class Commit
ci_commit.try(:status) || :not_found
end
+ def revert_branch_name
+ "revert-#{short_id}"
+ end
+
+ def revert_description
+ if merged_merge_request
+ "This reverts merge request #{merged_merge_request.to_reference}"
+ else
+ "This reverts commit #{sha}"
+ end
+ end
+
+ def revert_message
+ %Q{Revert "#{title}"\n\n#{revert_description}}
+ end
+
+ def reverts_commit?(commit)
+ description.include?(commit.revert_description)
+ end
+
+ def merge_commit?
+ parents.size > 1
+ end
+
+ def merged_merge_request
+ return @merged_merge_request if defined?(@merged_merge_request)
+
+ @merged_merge_request = project.merge_requests.find_by(merge_commit_sha: id) if merge_commit?
+ end
+
+ def has_been_reverted?(current_user = nil, noteable = self)
+ Gitlab::ReferenceExtractor.lazily do
+ noteable.notes.system.flat_map do |note|
+ note.all_references(current_user).commits
+ end
+ end.any? { |commit_ref| commit_ref.reverts_commit?(self) }
+ end
+
private
def repo_changes
diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb
index 66e0502fc0c..7ef50836322 100644
--- a/app/models/commit_status.rb
+++ b/app/models/commit_status.rb
@@ -75,16 +75,16 @@ class CommitStatus < ActiveRecord::Base
transition [:pending, :running] => :canceled
end
- after_transition pending: :running do |build, transition|
- build.update_attributes started_at: Time.now
+ after_transition pending: :running do |commit_status|
+ commit_status.update_attributes started_at: Time.now
end
- after_transition any => [:success, :failed, :canceled] do |build, transition|
- build.update_attributes finished_at: Time.now
+ after_transition any => [:success, :failed, :canceled] do |commit_status|
+ commit_status.update_attributes finished_at: Time.now
end
- after_transition [:pending, :running] => :success do |build, transition|
- MergeRequests::MergeWhenBuildSucceedsService.new(build.commit.project, nil).trigger(build)
+ after_transition [:pending, :running] => :success do |commit_status|
+ MergeRequests::MergeWhenBuildSucceedsService.new(commit_status.commit.project, nil).trigger(commit_status)
end
state :pending, value: 'pending'
@@ -113,6 +113,10 @@ class CommitStatus < ActiveRecord::Base
canceled? || success? || failed?
end
+ def ignored?
+ failed? && allow_failure?
+ end
+
def duration
if started_at && finished_at
finished_at - started_at
diff --git a/app/models/label.rb b/app/models/label.rb
index 220da10a6ab..07a1db4abe5 100644
--- a/app/models/label.rb
+++ b/app/models/label.rb
@@ -2,13 +2,14 @@
#
# Table name: labels
#
-# id :integer not null, primary key
-# title :string(255)
-# color :string(255)
-# project_id :integer
-# created_at :datetime
-# updated_at :datetime
-# template :boolean default(FALSE)
+# id :integer not null, primary key
+# title :string(255)
+# color :string(255)
+# project_id :integer
+# created_at :datetime
+# updated_at :datetime
+# template :boolean default(FALSE)
+# description :string(255)
#
class Label < ActiveRecord::Base
@@ -85,6 +86,10 @@ class Label < ActiveRecord::Base
issues.opened.count
end
+ def closed_issues_count
+ issues.closed.count
+ end
+
def template?
template
end
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index ea2b0e075f6..1543ef311d7 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -24,6 +24,7 @@
# merge_params :text
# merge_when_build_succeeds :boolean default(FALSE), not null
# merge_user_id :integer
+# merge_commit_sha :string
#
require Rails.root.join("app/models/commit")
@@ -532,4 +533,12 @@ class MergeRequest < ActiveRecord::Base
[diff_base_commit, last_commit]
end
+
+ def merge_commit
+ @merge_commit ||= project.commit(merge_commit_sha) if merge_commit_sha
+ end
+
+ def can_be_reverted?(current_user = nil)
+ merge_commit && !merge_commit.has_been_reverted?(current_user, self)
+ end
end
diff --git a/app/models/milestone.rb b/app/models/milestone.rb
index 9c4476c768e..cbe65d70997 100644
--- a/app/models/milestone.rb
+++ b/app/models/milestone.rb
@@ -27,6 +27,7 @@ class Milestone < ActiveRecord::Base
belongs_to :project
has_many :issues
+ has_many :labels, through: :issues
has_many :merge_requests
has_many :participants, through: :issues, source: :assignee
@@ -109,6 +110,19 @@ class Milestone < ActiveRecord::Base
0
end
+ # Returns the elapsed time (in percent) since the Milestone creation date until today.
+ # If the Milestone doesn't have a due_date then returns 0 since we can't calculate the elapsed time.
+ # If the Milestone is overdue then it returns 100%.
+ def percent_time_used
+ return 0 unless due_date
+ return 100 if expired?
+
+ duration = ((created_at - due_date.to_datetime) / 1.day)
+ days_elapsed = ((created_at - Time.now) / 1.day)
+
+ ((days_elapsed.to_f / duration) * 100).floor
+ end
+
def expires_at
if due_date
if due_date.past?
diff --git a/app/models/note.rb b/app/models/note.rb
index 55255d22c2f..d287e0f3c6d 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -37,6 +37,8 @@ class Note < ActiveRecord::Base
belongs_to :author, class_name: "User"
belongs_to :updated_by, class_name: "User"
+ has_many :todos, dependent: :destroy
+
delegate :name, to: :project, prefix: true
delegate :name, :email, to: :author, prefix: true
@@ -375,6 +377,7 @@ class Note < ActiveRecord::Base
#
def set_award!
return unless awards_supported? && contains_emoji_only?
+
self.is_award = true
self.note = award_emoji_name
end
@@ -382,7 +385,7 @@ class Note < ActiveRecord::Base
private
def awards_supported?
- noteable.kind_of?(Issue) || noteable.is_a?(MergeRequest)
+ (noteable.kind_of?(Issue) || noteable.is_a?(MergeRequest)) && !for_diff_line?
end
def contains_emoji_only?
diff --git a/app/models/project_team.rb b/app/models/project_team.rb
index 9f380a382cb..9629c7e1bb9 100644
--- a/app/models/project_team.rb
+++ b/app/models/project_team.rb
@@ -136,7 +136,7 @@ class ProjectTeam
end
def human_max_access(user_id)
- Gitlab::Access.options.key max_member_access(user_id)
+ Gitlab::Access.options_with_owner.key(max_member_access(user_id))
end
# This method assumes project and group members are eager loaded for optimal
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 5a25ccb1dd6..e050bd45254 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -23,13 +23,11 @@ class Repository
def raw_repository
return nil unless path_with_namespace
- @raw_repository ||= begin
- repo = Gitlab::Git::Repository.new(path_to_repo)
- repo.autocrlf = :input
- repo
- rescue Gitlab::Git::Repository::NoRepository
- nil
- end
+ @raw_repository ||= Gitlab::Git::Repository.new(path_to_repo)
+ end
+
+ def update_autocrlf_option
+ raw_repository.autocrlf = :input if raw_repository.autocrlf != :input
end
# Return absolute path to repository
@@ -40,7 +38,12 @@ class Repository
end
def exists?
- raw_repository
+ return false unless raw_repository
+
+ raw_repository.rugged
+ true
+ rescue Gitlab::Git::Repository::NoRepository
+ false
end
def empty?
@@ -67,7 +70,7 @@ class Repository
end
def commit(id = 'HEAD')
- return nil unless raw_repository
+ return nil unless exists?
commit = Gitlab::Git::Commit.find(raw_repository, id)
commit = Commit.new(commit, @project) if commit
commit
@@ -236,6 +239,10 @@ class Repository
end
expire_branch_cache(branch_name)
+
+ # This ensures this particular cache is flushed after the first commit to a
+ # new repository.
+ expire_emptiness_caches if empty?
end
# Expires _all_ caches, including those that would normally only be expired
@@ -616,6 +623,34 @@ class Repository
end
end
+ def revert(user, commit, base_branch, target_branch = nil)
+ source_sha = find_branch(base_branch).target
+ target_branch ||= base_branch
+ args = [commit.id, source_sha]
+ args << { mainline: 1 } if commit.merge_commit?
+
+ revert_index = rugged.revert_commit(*args)
+ return false if revert_index.conflicts?
+
+ tree_id = revert_index.write_tree(rugged)
+ return false unless diff_exists?(source_sha, tree_id)
+
+ commit_with_hooks(user, target_branch) do |ref|
+ committer = user_to_committer(user)
+ source_sha = Rugged::Commit.create(rugged,
+ message: commit.revert_message,
+ author: committer,
+ committer: committer,
+ tree: tree_id,
+ parents: [rugged.lookup(source_sha)],
+ update_ref: ref)
+ end
+ end
+
+ def diff_exists?(sha1, sha2)
+ rugged.diff(sha1, sha2).size > 0
+ end
+
def merged_to_root_ref?(branch_name)
branch_commit = commit(branch_name)
root_ref_commit = commit(root_ref)
@@ -693,12 +728,15 @@ class Repository
end
def commit_with_hooks(current_user, branch)
+ update_autocrlf_option
+
oldrev = Gitlab::Git::BLANK_SHA
ref = Gitlab::Git::BRANCH_REF_PREFIX + branch
+ target_branch = find_branch(branch)
was_empty = empty?
- unless was_empty
- oldrev = find_branch(branch).target
+ if !was_empty && target_branch
+ oldrev = target_branch.target
end
with_tmp_ref(oldrev) do |tmp_ref|
@@ -710,7 +748,7 @@ class Repository
end
GitHooksService.new.execute(current_user, path_to_repo, oldrev, newrev, ref) do
- if was_empty
+ if was_empty || !target_branch
# Create branch
rugged.references.create(ref, newrev)
else
@@ -725,6 +763,8 @@ class Repository
end
end
end
+
+ newrev
end
end
diff --git a/app/models/todo.rb b/app/models/todo.rb
new file mode 100644
index 00000000000..34d71c1b0d3
--- /dev/null
+++ b/app/models/todo.rb
@@ -0,0 +1,53 @@
+# == Schema Information
+#
+# Table name: todos
+#
+# id :integer not null, primary key
+# user_id :integer not null
+# project_id :integer not null
+# target_id :integer not null
+# target_type :string not null
+# author_id :integer
+# note_id :integer
+# action :integer not null
+# state :string not null
+# created_at :datetime
+# updated_at :datetime
+#
+
+class Todo < ActiveRecord::Base
+ ASSIGNED = 1
+ MENTIONED = 2
+
+ belongs_to :author, class_name: "User"
+ belongs_to :note
+ belongs_to :project
+ belongs_to :target, polymorphic: true, touch: true
+ belongs_to :user
+
+ delegate :name, :email, to: :author, prefix: true, allow_nil: true
+
+ validates :action, :project, :target, :user, presence: true
+
+ default_scope { reorder(id: :desc) }
+
+ scope :pending, -> { with_state(:pending) }
+ scope :done, -> { with_state(:done) }
+
+ state_machine :state, initial: :pending do
+ event :done do
+ transition pending: :done
+ end
+
+ state :pending
+ state :done
+ end
+
+ def body
+ if note.present?
+ note.note
+ else
+ target.title
+ end
+ end
+end
diff --git a/app/models/user.rb b/app/models/user.rb
index 9fe94b13e52..02ff2456f2b 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -140,7 +140,7 @@ class User < ActiveRecord::Base
has_one :abuse_report, dependent: :destroy
has_many :spam_logs, dependent: :destroy
has_many :builds, dependent: :nullify, class_name: 'Ci::Build'
-
+ has_many :todos, dependent: :destroy
#
# Validations
diff --git a/app/services/base_service.rb b/app/services/base_service.rb
index b48ca67d4d2..8563633816c 100644
--- a/app/services/base_service.rb
+++ b/app/services/base_service.rb
@@ -23,6 +23,10 @@ class BaseService
EventCreateService.new
end
+ def todo_service
+ TodoService.new
+ end
+
def log_info(message)
Gitlab::AppLogger.info message
end
diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb
index ad901f2da5d..002f7ba1278 100644
--- a/app/services/ci/create_builds_service.rb
+++ b/app/services/ci/create_builds_service.rb
@@ -34,6 +34,7 @@ module Ci
build = commit.builds.create!(build_attrs)
build.execute_hooks
+ build
end
end
end
diff --git a/app/services/commits/revert_service.rb b/app/services/commits/revert_service.rb
new file mode 100644
index 00000000000..43d1c766e35
--- /dev/null
+++ b/app/services/commits/revert_service.rb
@@ -0,0 +1,58 @@
+module Commits
+ class RevertService < ::BaseService
+ class ValidationError < StandardError; end
+ class ReversionError < StandardError; end
+
+ def execute
+ @source_project = params[:source_project] || @project
+ @target_branch = params[:target_branch]
+ @commit = params[:commit]
+ @create_merge_request = params[:create_merge_request].present?
+
+ validate and commit
+ rescue Repository::CommitError, Gitlab::Git::Repository::InvalidBlobName, GitHooksService::PreReceiveError,
+ ValidationError, ReversionError => ex
+ error(ex.message)
+ end
+
+ def commit
+ revert_into = @create_merge_request ? @commit.revert_branch_name : @target_branch
+
+ if @create_merge_request
+ # Temporary branch exists and contains the revert commit
+ return success if repository.find_branch(revert_into)
+
+ create_target_branch
+ end
+
+ unless repository.revert(current_user, @commit, revert_into)
+ error_msg = "Sorry, we cannot revert this #{params[:revert_type_title]} automatically.
+ It may have already been reverted, or a more recent commit may have updated some of its content."
+ raise ReversionError, error_msg
+ end
+
+ success
+ end
+
+ private
+
+ def create_target_branch
+ result = CreateBranchService.new(@project, current_user)
+ .execute(@commit.revert_branch_name, @target_branch, source_project: @source_project)
+
+ if result[:status] == :error
+ raise ReversionError, "There was an error creating the source branch: #{result[:message]}"
+ end
+ end
+
+ def validate
+ allowed = ::Gitlab::GitAccess.new(current_user, project).can_push_to_branch?(@target_branch)
+
+ unless allowed
+ raise_error('You are not allowed to push into this branch')
+ end
+
+ true
+ end
+ end
+end
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index 2556f06e2d3..ca87dca4a70 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -54,7 +54,7 @@ class IssuableBaseService < BaseService
if params.present? && issuable.update_attributes(params.merge(updated_by: current_user))
issuable.reset_events_cache
handle_common_system_notes(issuable, old_labels: old_labels)
- handle_changes(issuable)
+ handle_changes(issuable, old_labels: old_labels)
issuable.create_new_cross_references!(current_user)
execute_hooks(issuable, 'update')
end
@@ -71,6 +71,19 @@ class IssuableBaseService < BaseService
end
end
+ def has_changes?(issuable, options = {})
+ valid_attrs = [:title, :description, :assignee_id, :milestone_id, :target_branch]
+
+ attrs_changed = valid_attrs.any? do |attr|
+ issuable.previous_changes.include?(attr.to_s)
+ end
+
+ old_labels = options[:old_labels]
+ labels_changed = old_labels && issuable.labels != old_labels
+
+ attrs_changed || labels_changed
+ end
+
def handle_common_system_notes(issuable, options = {})
if issuable.previous_changes.include?('title')
create_title_change_note(issuable, issuable.previous_changes['title'].first)
diff --git a/app/services/issues/close_service.rb b/app/services/issues/close_service.rb
index a1a20e47681..78254b49af3 100644
--- a/app/services/issues/close_service.rb
+++ b/app/services/issues/close_service.rb
@@ -3,6 +3,7 @@ module Issues
def execute(issue, commit = nil)
if project.jira_tracker? && project.jira_service.active
project.jira_service.execute(commit, issue)
+ todo_service.close_issue(issue, current_user)
return issue
end
@@ -10,6 +11,7 @@ module Issues
event_service.close_issue(issue, current_user)
create_note(issue, commit)
notification_service.close_issue(issue, current_user)
+ todo_service.close_issue(issue, current_user)
execute_hooks(issue, 'close')
end
diff --git a/app/services/issues/create_service.rb b/app/services/issues/create_service.rb
index bcb380d3215..10787e8873c 100644
--- a/app/services/issues/create_service.rb
+++ b/app/services/issues/create_service.rb
@@ -9,6 +9,7 @@ module Issues
if issue.save
issue.update_attributes(label_ids: label_params)
notification_service.new_issue(issue, current_user)
+ todo_service.new_issue(issue, current_user)
event_service.open_issue(issue, current_user)
issue.create_cross_references!(current_user)
execute_hooks(issue, 'open')
diff --git a/app/services/issues/update_service.rb b/app/services/issues/update_service.rb
index a55a04dd5e0..51ef9dfe610 100644
--- a/app/services/issues/update_service.rb
+++ b/app/services/issues/update_service.rb
@@ -4,7 +4,16 @@ module Issues
update(issue)
end
- def handle_changes(issue)
+ def handle_changes(issue, options = {})
+ if has_changes?(issue, options)
+ todo_service.mark_pending_todos_as_done(issue, current_user)
+ end
+
+ if issue.previous_changes.include?('title') ||
+ issue.previous_changes.include?('description')
+ todo_service.update_issue(issue, current_user)
+ end
+
if issue.previous_changes.include?('milestone_id')
create_milestone_note(issue)
end
@@ -12,6 +21,7 @@ module Issues
if issue.previous_changes.include?('assignee_id')
create_assignee_note(issue)
notification_service.reassigned_issue(issue, current_user)
+ todo_service.reassigned_issue(issue, current_user)
end
end
diff --git a/app/services/merge_requests/build_service.rb b/app/services/merge_requests/build_service.rb
index a9b29f9654d..c0700d953dd 100644
--- a/app/services/merge_requests/build_service.rb
+++ b/app/services/merge_requests/build_service.rb
@@ -56,7 +56,7 @@ module MergeRequests
if commits && commits.count == 1
commit = commits.first
merge_request.title = commit.title
- merge_request.description = commit.description.try(:strip)
+ merge_request.description ||= commit.description.try(:strip)
else
merge_request.title = merge_request.source_branch.titleize.humanize
end
diff --git a/app/services/merge_requests/close_service.rb b/app/services/merge_requests/close_service.rb
index 47454f9f0c2..27ee81fe3e7 100644
--- a/app/services/merge_requests/close_service.rb
+++ b/app/services/merge_requests/close_service.rb
@@ -9,6 +9,7 @@ module MergeRequests
event_service.close_mr(merge_request, current_user)
create_note(merge_request)
notification_service.close_mr(merge_request, current_user)
+ todo_service.close_merge_request(merge_request, current_user)
execute_hooks(merge_request, 'close')
end
diff --git a/app/services/merge_requests/create_service.rb b/app/services/merge_requests/create_service.rb
index 009d5a6867e..33609d01f20 100644
--- a/app/services/merge_requests/create_service.rb
+++ b/app/services/merge_requests/create_service.rb
@@ -2,7 +2,7 @@ module MergeRequests
class CreateService < MergeRequests::BaseService
def execute
# @project is used to determine whether the user can set the merge request's
- # assignee, milestone and labels. Whether they can depends on their
+ # assignee, milestone and labels. Whether they can depends on their
# permissions on the target project.
source_project = @project
@project = Project.find(params[:target_project_id]) if params[:target_project_id]
@@ -18,6 +18,7 @@ module MergeRequests
merge_request.update_attributes(label_ids: label_params)
event_service.open_mr(merge_request, current_user)
notification_service.new_merge_request(merge_request, current_user)
+ todo_service.new_merge_request(merge_request, current_user)
merge_request.create_cross_references!(current_user)
execute_hooks(merge_request)
end
diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb
index e8bef250d8b..9a58383b398 100644
--- a/app/services/merge_requests/merge_service.rb
+++ b/app/services/merge_requests/merge_service.rb
@@ -34,7 +34,8 @@ module MergeRequests
committer: committer
}
- repository.merge(current_user, merge_request.source_sha, merge_request.target_branch, options)
+ commit_id = repository.merge(current_user, merge_request.source_sha, merge_request.target_branch, options)
+ merge_request.update(merge_commit_sha: commit_id)
rescue StandardError => e
merge_request.update(merge_error: "Something went wrong during merge")
Rails.logger.error(e.message)
diff --git a/app/services/merge_requests/merge_when_build_succeeds_service.rb b/app/services/merge_requests/merge_when_build_succeeds_service.rb
index 5cf7404a493..531bbc9b067 100644
--- a/app/services/merge_requests/merge_when_build_succeeds_service.rb
+++ b/app/services/merge_requests/merge_when_build_succeeds_service.rb
@@ -19,8 +19,8 @@ module MergeRequests
end
# Triggers the automatic merge of merge_request once the build succeeds
- def trigger(build)
- merge_requests = merge_request_from(build)
+ def trigger(commit_status)
+ merge_requests = merge_request_from(commit_status)
merge_requests.each do |merge_request|
next unless merge_request.merge_when_build_succeeds?
@@ -45,9 +45,14 @@ module MergeRequests
private
- def merge_request_from(build)
- merge_requests = @project.origin_merge_requests.opened.where(source_branch: build.ref).to_a
- merge_requests += @project.fork_merge_requests.opened.where(source_branch: build.ref).to_a
+ def merge_request_from(commit_status)
+ branches = commit_status.ref
+
+ # This is for ref-less builds
+ branches ||= @project.repository.branch_names_contains(commit_status.sha)
+
+ merge_requests = @project.origin_merge_requests.opened.where(source_branch: branches).to_a
+ merge_requests += @project.fork_merge_requests.opened.where(source_branch: branches).to_a
merge_requests.uniq.select(&:source_project)
end
diff --git a/app/services/merge_requests/update_service.rb b/app/services/merge_requests/update_service.rb
index 5ff2cc03dda..6319ad805b6 100644
--- a/app/services/merge_requests/update_service.rb
+++ b/app/services/merge_requests/update_service.rb
@@ -14,7 +14,16 @@ module MergeRequests
update(merge_request)
end
- def handle_changes(merge_request)
+ def handle_changes(merge_request, options = {})
+ if has_changes?(merge_request, options)
+ todo_service.mark_pending_todos_as_done(merge_request, current_user)
+ end
+
+ if merge_request.previous_changes.include?('title') ||
+ merge_request.previous_changes.include?('description')
+ todo_service.update_merge_request(merge_request, current_user)
+ end
+
if merge_request.previous_changes.include?('target_branch')
create_branch_change_note(merge_request, 'target',
merge_request.previous_changes['target_branch'].first,
@@ -28,6 +37,7 @@ module MergeRequests
if merge_request.previous_changes.include?('assignee_id')
create_assignee_note(merge_request)
notification_service.reassigned_merge_request(merge_request, current_user)
+ todo_service.reassigned_merge_request(merge_request, current_user)
end
if merge_request.previous_changes.include?('target_branch') ||
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index 8d9661167b5..b970439b921 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -8,6 +8,7 @@ module Notes
if note.save
# Finish the harder work in the background
NewNoteWorker.perform_in(2.seconds, note.id, params)
+ TodoService.new.new_note(note, current_user)
end
note
diff --git a/app/services/notes/post_process_service.rb b/app/services/notes/post_process_service.rb
index f37d3c50cdd..e818f58d13c 100644
--- a/app/services/notes/post_process_service.rb
+++ b/app/services/notes/post_process_service.rb
@@ -1,6 +1,5 @@
module Notes
class PostProcessService
-
attr_accessor :note
def initialize(note)
@@ -25,6 +24,5 @@ module Notes
@note.project.execute_hooks(note_data, :note_hooks)
@note.project.execute_services(note_data, :note_hooks)
end
-
end
end
diff --git a/app/services/notes/update_service.rb b/app/services/notes/update_service.rb
index 72e2f78008d..1361b1e0300 100644
--- a/app/services/notes/update_service.rb
+++ b/app/services/notes/update_service.rb
@@ -7,6 +7,10 @@ module Notes
note.create_new_cross_references!(current_user)
note.reset_events_cache
+ if note.previous_changes.include?('note')
+ TodoService.new.update_note(note, current_user)
+ end
+
note
end
end
diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb
new file mode 100644
index 00000000000..dc270602ebc
--- /dev/null
+++ b/app/services/todo_service.rb
@@ -0,0 +1,170 @@
+# TodoService class
+#
+# Used for creating todos after certain user actions
+#
+# Ex.
+# TodoService.new.new_issue(issue, current_user)
+#
+class TodoService
+ # When create an issue we should:
+ #
+ # * create a todo for assignee if issue is assigned
+ # * create a todo for each mentioned user on issue
+ #
+ def new_issue(issue, current_user)
+ new_issuable(issue, current_user)
+ end
+
+ # When update an issue we should:
+ #
+ # * mark all pending todos related to the issue for the current user as done
+ #
+ def update_issue(issue, current_user)
+ create_mention_todos(issue.project, issue, current_user)
+ end
+
+ # When close an issue we should:
+ #
+ # * mark all pending todos related to the target for the current user as done
+ #
+ def close_issue(issue, current_user)
+ mark_pending_todos_as_done(issue, current_user)
+ end
+
+ # When we reassign an issue we should:
+ #
+ # * create a pending todo for new assignee if issue is assigned
+ #
+ def reassigned_issue(issue, current_user)
+ create_assignment_todo(issue, current_user)
+ end
+
+ # When create a merge request we should:
+ #
+ # * creates a pending todo for assignee if merge request is assigned
+ # * create a todo for each mentioned user on merge request
+ #
+ def new_merge_request(merge_request, current_user)
+ new_issuable(merge_request, current_user)
+ end
+
+ # When update a merge request we should:
+ #
+ # * create a todo for each mentioned user on merge request
+ #
+ def update_merge_request(merge_request, current_user)
+ create_mention_todos(merge_request.project, merge_request, current_user)
+ end
+
+ # When close a merge request we should:
+ #
+ # * mark all pending todos related to the target for the current user as done
+ #
+ def close_merge_request(merge_request, current_user)
+ mark_pending_todos_as_done(merge_request, current_user)
+ end
+
+ # When we reassign a merge request we should:
+ #
+ # * creates a pending todo for new assignee if merge request is assigned
+ #
+ def reassigned_merge_request(merge_request, current_user)
+ create_assignment_todo(merge_request, current_user)
+ end
+
+ # When merge a merge request we should:
+ #
+ # * mark all pending todos related to the target for the current user as done
+ #
+ def merge_merge_request(merge_request, current_user)
+ mark_pending_todos_as_done(merge_request, current_user)
+ end
+
+ # When create a note we should:
+ #
+ # * mark all pending todos related to the noteable for the note author as done
+ # * create a todo for each mentioned user on note
+ #
+ def new_note(note, current_user)
+ handle_note(note, current_user)
+ end
+
+ # When update a note we should:
+ #
+ # * mark all pending todos related to the noteable for the current user as done
+ # * create a todo for each new user mentioned on note
+ #
+ def update_note(note, current_user)
+ handle_note(note, current_user)
+ end
+
+ # When marking pending todos as done we should:
+ #
+ # * mark all pending todos related to the target for the current user as done
+ #
+ def mark_pending_todos_as_done(target, user)
+ pending_todos(user, target.project, target).update_all(state: :done)
+ end
+
+ private
+
+ def create_todos(project, target, author, users, action, note = nil)
+ Array(users).each do |user|
+ next if pending_todos(user, project, target).exists?
+
+ Todo.create(
+ project: project,
+ user_id: user.id,
+ author_id: author.id,
+ target_id: target.id,
+ target_type: target.class.name,
+ action: action,
+ note: note
+ )
+ end
+ end
+
+ def new_issuable(issuable, author)
+ create_assignment_todo(issuable, author)
+ create_mention_todos(issuable.project, issuable, author)
+ end
+
+ def handle_note(note, author)
+ # Skip system notes, like status changes and cross-references
+ return if note.system
+
+ project = note.project
+ target = note.noteable
+
+ mark_pending_todos_as_done(target, author)
+ create_mention_todos(project, target, author, note)
+ end
+
+ def create_assignment_todo(issuable, author)
+ if issuable.assignee && issuable.assignee != author
+ create_todos(issuable.project, issuable, author, issuable.assignee, Todo::ASSIGNED)
+ end
+ end
+
+ def create_mention_todos(project, issuable, author, note = nil)
+ mentioned_users = filter_mentioned_users(project, note || issuable, author)
+ create_todos(project, issuable, author, mentioned_users, Todo::MENTIONED, note)
+ end
+
+ def filter_mentioned_users(project, target, author)
+ mentioned_users = target.mentioned_users.select do |user|
+ user.can?(:read_project, project)
+ end
+
+ mentioned_users.delete(author)
+ mentioned_users.uniq
+ end
+
+ def pending_todos(user, project, target)
+ user.todos.pending.where(
+ project_id: project.id,
+ target_id: target.id,
+ target_type: target.class.name
+ )
+ end
+end
diff --git a/app/views/admin/labels/_form.html.haml b/app/views/admin/labels/_form.html.haml
index eaa94ed9e36..8c6b389bf15 100644
--- a/app/views/admin/labels/_form.html.haml
+++ b/app/views/admin/labels/_form.html.haml
@@ -12,6 +12,10 @@
.col-sm-10
= f.text_field :title, class: "form-control", required: true
.form-group
+ = f.label :description, class: 'control-label'
+ .col-sm-10
+ = f.text_field :description, class: "form-control js-quick-submit"
+ .form-group
= f.label :color, "Background color", class: 'control-label'
.col-sm-10
.input-group
diff --git a/app/views/admin/labels/_label.html.haml b/app/views/admin/labels/_label.html.haml
index e3ccbf6c3a8..5736a301910 100644
--- a/app/views/admin/labels/_label.html.haml
+++ b/app/views/admin/labels/_label.html.haml
@@ -1,5 +1,7 @@
%li{id: dom_id(label)}
- = render_colored_label(label)
- .pull-right
- = link_to 'Edit', edit_admin_label_path(label), class: 'btn btn-sm'
- = link_to 'Delete', admin_label_path(label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Delete this label? Are you sure?"}
+ .label-row
+ = render_colored_label(label)
+ = markdown(label.description, pipeline: :single_line)
+ .pull-right
+ = link_to 'Edit', edit_admin_label_path(label), class: 'btn btn-sm'
+ = link_to 'Delete', admin_label_path(label), class: 'btn btn-sm btn-remove remove-row', method: :delete, remote: true, data: {confirm: "Delete this label? Are you sure?"}
diff --git a/app/views/dashboard/projects/_zero_authorized_projects.html.haml b/app/views/dashboard/projects/_zero_authorized_projects.html.haml
index 4e7d6639727..c3efa7727b1 100644
--- a/app/views/dashboard/projects/_zero_authorized_projects.html.haml
+++ b/app/views/dashboard/projects/_zero_authorized_projects.html.haml
@@ -11,7 +11,7 @@
%br
- if current_user.can_create_project?
You can create up to
- %strong= pluralize(current_user.projects_limit, "project") + "."
+ %strong= pluralize(number_with_delimiter(current_user.projects_limit), "project") + "."
- else
If you are added to a project, it will be displayed here.
@@ -44,7 +44,7 @@
.dashboard-intro-text
%p.slead
There are
- %strong= publicish_project_count
+ %strong= number_with_delimiter(publicish_project_count)
public projects on this server.
%br
Public projects are an easy way to allow everyone to have read-only access.
diff --git a/app/views/dashboard/todos/_todo.html.haml b/app/views/dashboard/todos/_todo.html.haml
new file mode 100644
index 00000000000..6975f6ed0db
--- /dev/null
+++ b/app/views/dashboard/todos/_todo.html.haml
@@ -0,0 +1,21 @@
+%li{class: "todo todo-#{todo.done? ? 'done' : 'pending'}", id: dom_id(todo) }
+ .todo-item{class: 'todo-block'}
+ = image_tag avatar_icon(todo.author_email, 40), class: 'avatar s40', alt:''
+
+ .todo-title
+ %span.author_name
+ = link_to_author todo
+ %span.todo_label
+ = todo_action_name(todo)
+ = todo_target_link(todo)
+
+ &middot; #{time_ago_with_tooltip(todo.created_at)}
+
+ - if todo.pending?
+ .todo-actions.pull-right
+ = link_to 'Done', [:dashboard, todo], method: :delete, class: 'btn'
+
+ .todo-body
+ .todo-note
+ .md
+ = event_note(todo.body, project: todo.project)
diff --git a/app/views/dashboard/todos/index.html.haml b/app/views/dashboard/todos/index.html.haml
new file mode 100644
index 00000000000..946d7df3933
--- /dev/null
+++ b/app/views/dashboard/todos/index.html.haml
@@ -0,0 +1,62 @@
+- page_title "Todos"
+- header_title "Todos", dashboard_todos_path
+
+.top-area
+ %ul.nav-links
+ %li{class: ('active' if params[:state].blank? || params[:state] == 'pending')}
+ = link_to todos_filter_path(state: 'pending') do
+ %span
+ To do
+ %span{class: 'badge'}
+ = todos_pending_count
+ %li{class: ('active' if params[:state] == 'done')}
+ = link_to todos_filter_path(state: 'done') do
+ %span
+ Done
+ %span{class: 'badge'}
+ = todos_done_count
+
+ .nav-controls
+ - if @todos.any?(&:pending?)
+ = link_to 'Mark all as done', destroy_all_dashboard_todos_path(todos_filter_params), class: 'btn', method: :delete
+
+.todos-filters
+ .gray-content-block.second-block
+ = form_tag todos_filter_path(without: [:project_id, :author_id, :type, :action_id]), method: :get, class: 'filter-form' do
+ .filter-item.inline
+ = select_tag('project_id', todo_projects_options,
+ class: 'select2 trigger-submit', include_blank: true,
+ data: {placeholder: 'Project'})
+ .filter-item.inline
+ = users_select_tag(:author_id, selected: params[:author_id],
+ placeholder: 'Author', class: 'trigger-submit', any_user: "Any Author", first_user: true, current_user: true)
+ .filter-item.inline
+ = select_tag('type', todo_types_options,
+ class: 'select2 trigger-submit', include_blank: true,
+ data: {placeholder: 'Type'})
+ .filter-item.inline.actions-filter
+ = select_tag('action_id', todo_actions_options,
+ class: 'select2 trigger-submit', include_blank: true,
+ data: {placeholder: 'Action'})
+
+.prepend-top-default
+ - if @todos.any?
+ - @todos.group_by(&:project).each do |group|
+ .panel.panel-default.panel-small
+ - project = group[0]
+ .panel-heading
+ = link_to project.name_with_namespace, namespace_project_path(project.namespace, project)
+
+ %ul.well-list.todos-list
+ = render group[1]
+ = paginate @todos, theme: "gitlab"
+ - else
+ .nothing-here-block You're all done!
+
+:javascript
+ new UsersSelect();
+
+ $('form.filter-form').on('submit', function (event) {
+ event.preventDefault();
+ Turbolinks.visit(this.action + '&' + $(this).serialize());
+ });
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index fcb6b835a7e..4781ff23507 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -21,6 +21,10 @@
%li
= link_to admin_root_path, title: 'Admin Area', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
= icon('wrench fw')
+ %li
+ = link_to dashboard_todos_path, title: 'Todos', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
+ %span.badge.todos-pending-count
+ = todos_pending_count
- if current_user.can_create_project?
%li
= link_to new_project_path, title: 'New project', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
@@ -39,4 +43,4 @@
= render 'shared/outdated_browser'
- if @project && !@project.empty_repo?
:javascript
- var findFileURL = "#{namespace_project_find_file_path(@project.namespace, @project, @ref || @project.repository.root_ref)}"; \ No newline at end of file
+ var findFileURL = "#{namespace_project_find_file_path(@project.namespace, @project, @ref || @project.repository.root_ref)}";
diff --git a/app/views/layouts/nav/_dashboard.html.haml b/app/views/layouts/nav/_dashboard.html.haml
index 106abd24a56..db0cf393922 100644
--- a/app/views/layouts/nav/_dashboard.html.haml
+++ b/app/views/layouts/nav/_dashboard.html.haml
@@ -4,6 +4,12 @@
= icon('home fw')
%span
Projects
+ = nav_link(controller: :todos) do
+ = link_to dashboard_todos_path, title: 'Todos' do
+ = icon('bell fw')
+ %span
+ Todos
+ %span.count= number_with_delimiter(todos_pending_count)
= nav_link(path: 'dashboard#activity') do
= link_to activity_dashboard_path, class: 'shortcuts-activity', title: 'Activity' do
= icon('dashboard fw')
@@ -25,12 +31,12 @@
%span
Issues
%span.count= number_with_delimiter(current_user.assigned_issues.opened.count)
- = nav_link(path: 'dashboard#merge_requests') do
- = link_to assigned_mrs_dashboard_path, title: 'Merge Requests', class: 'shortcuts-merge_requests' do
- = icon('tasks fw')
- %span
- Merge Requests
- %span.count= number_with_delimiter(current_user.assigned_merge_requests.opened.count)
+ = nav_link(path: 'dashboard#merge_requests') do
+ = link_to assigned_mrs_dashboard_path, title: 'Merge Requests', class: 'shortcuts-merge_requests' do
+ = icon('tasks fw')
+ %span
+ Merge Requests
+ %span.count= number_with_delimiter(current_user.assigned_merge_requests.opened.count)
= nav_link(controller: :snippets) do
= link_to dashboard_snippets_path, title: 'Snippets' do
= icon('clipboard fw')
diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml
index 298c6664997..b45df44f270 100644
--- a/app/views/projects/_home_panel.html.haml
+++ b/app/views/projects/_home_panel.html.haml
@@ -3,7 +3,12 @@
.project-identicon-holder
= project_icon(@project, alt: '', class: 'project-avatar avatar s90')
.project-home-desc
- %h1= @project.name
+ %h1
+ = @project.name
+ %span.visibility-icon.has_tooltip{data: { container: 'body' },
+ title: "#{visibility_level_label(@project.visibility_level)} - #{project_visibility_level_description(@project.visibility_level)}"}
+ = visibility_level_icon(@project.visibility_level, fw: false)
+
- if @project.description.present?
= markdown(@project.description, pipeline: :description)
@@ -12,10 +17,6 @@
Forked from
= link_to project_path(forked_from_project) do
= forked_from_project.namespace.try(:name)
- .cover-controls.left
- .visibility-level-label.has_tooltip{title: project_visibility_level_description(@project.visibility_level), data: { container: 'body' } }
- = visibility_level_icon(@project.visibility_level, fw: false)
- = visibility_level_label(@project.visibility_level)
.cover-controls
- if current_user
diff --git a/app/views/projects/blob/_blob.html.haml b/app/views/projects/blob/_blob.html.haml
index f3bfe0a18b0..3ffc3fcb7ac 100644
--- a/app/views/projects/blob/_blob.html.haml
+++ b/app/views/projects/blob/_blob.html.haml
@@ -32,14 +32,4 @@
= number_to_human_size(blob_size(blob))
.file-actions.hidden-xs
= render "actions"
- - if blob.lfs_pointer?
- = render "download", blob: blob
- - elsif blob.text?
- - if blob_svg?(blob)
- = render "image", blob: blob
- - else
- = render "text", blob: blob
- - elsif blob.image?
- = render "image", blob: blob
- - else
- = render "download", blob: blob
+ = render blob, blob: blob
diff --git a/app/views/projects/blob/_image.html.haml b/app/views/projects/blob/_image.html.haml
index 113dba5d832..3c11b97921f 100644
--- a/app/views/projects/blob/_image.html.haml
+++ b/app/views/projects/blob/_image.html.haml
@@ -1,5 +1,5 @@
.file-content.image_file
- - if blob_svg?(blob)
+ - if blob.svg?
- # We need to scrub SVG but we cannot do so in the RawController: it would
- # be wrong/strange if RawController modified the data.
- blob.load_all_data!(@repository)
diff --git a/app/views/projects/builds/show.html.haml b/app/views/projects/builds/show.html.haml
index ca1441a20d8..8eec78a557c 100644
--- a/app/views/projects/builds/show.html.haml
+++ b/app/views/projects/builds/show.html.haml
@@ -76,10 +76,16 @@
= link_to '#down-build-trace', class: 'btn' do
%i.fa.fa-angle-down
- %pre.trace#build-trace
- %code.bash
- = preserve do
- = raw @build.trace_html
+ - if @build.erased?
+ .erased.alert.alert-warning
+ - erased_by = "by #{link_to @build.erased_by.name, user_path(@build.erased_by)}" if @build.erased_by
+ Build has been erased #{erased_by.html_safe} #{time_ago_with_tooltip(@build.erased_at)}
+ - else
+ %pre.trace#build-trace
+ %code.bash
+ = preserve do
+ = raw @build.trace_html
+
%div#down-build-trace
.col-md-3
@@ -94,37 +100,55 @@
%h4.title Build artifacts
.center
.btn-group{ role: :group }
- = link_to "Download", @build.artifacts_download_url, class: 'btn btn-sm btn-primary'
+ = link_to @build.artifacts_download_url, class: 'btn btn-sm btn-primary' do
+ = icon('download')
+ Download
+
- if @build.artifacts_metadata?
- = link_to "Browse", @build.artifacts_browse_url, class: 'btn btn-sm btn-primary'
+ = link_to @build.artifacts_browse_url, class: 'btn btn-sm btn-primary' do
+ = icon('folder-open')
+ Browse
.build-widget
%h4.title
Build ##{@build.id}
- if can?(current_user, :update_build, @project)
- .pull-right
- - if @build.cancel_url
- = link_to "Cancel", @build.cancel_url, class: 'btn btn-sm btn-danger', method: :post
- - elsif @build.retry_url
- = link_to "Retry", @build.retry_url, class: 'btn btn-sm btn-primary', method: :post
-
- - if @build.duration
+ .center
+ .btn-group{ role: :group }
+ - if @build.cancel_url
+ = link_to "Cancel", @build.cancel_url, class: 'btn btn-sm btn-danger', method: :post
+ - elsif @build.retry_url
+ = link_to "Retry", @build.retry_url, class: 'btn btn-sm btn-primary', method: :post
+
+ - if @build.erasable?
+ = link_to erase_namespace_project_build_path(@project.namespace, @project, @build),
+ class: 'btn btn-sm btn-warning', method: :post,
+ data: { confirm: 'Are you sure you want to erase this build?' } do
+ = icon('eraser')
+ Erase
+
+ .clearfix
+ - if @build.duration
+ %p
+ %span.attr-name Duration:
+ #{duration_in_words(@build.finished_at, @build.started_at)}
%p
- %span.attr-name Duration:
- #{duration_in_words(@build.finished_at, @build.started_at)}
- %p
- %span.attr-name Created:
- #{time_ago_with_tooltip(@build.created_at)}
- - if @build.finished_at
+ %span.attr-name Created:
+ #{time_ago_with_tooltip(@build.created_at)}
+ - if @build.finished_at
+ %p
+ %span.attr-name Finished:
+ #{time_ago_with_tooltip(@build.finished_at)}
+ - if @build.erased_at
+ %p
+ %span.attr-name Erased:
+ #{time_ago_with_tooltip(@build.erased_at)}
%p
- %span.attr-name Finished:
- #{time_ago_with_tooltip(@build.finished_at)}
- %p
- %span.attr-name Runner:
- - if @build.runner && current_user && current_user.admin
- = link_to "##{@build.runner.id}", admin_runner_path(@build.runner.id)
- - elsif @build.runner
- \##{@build.runner.id}
+ %span.attr-name Runner:
+ - if @build.runner && current_user && current_user.admin
+ = link_to "##{@build.runner.id}", admin_runner_path(@build.runner.id)
+ - elsif @build.runner
+ \##{@build.runner.id}
- if @build.trigger_request
.build-widget
diff --git a/app/views/projects/commit/_commit_box.html.haml b/app/views/projects/commit/_commit_box.html.haml
index bbe820b8842..71995fcc487 100644
--- a/app/views/projects/commit/_commit_box.html.haml
+++ b/app/views/projects/commit/_commit_box.html.haml
@@ -16,6 +16,8 @@
= link_to namespace_project_tree_path(@project.namespace, @project, @commit), class: "btn btn-grouped" do
= icon('files-o')
Browse Files
+ - unless @commit.has_been_reverted?(current_user)
+ = revert_commit_link(@commit, namespace_project_commit_path(@project.namespace, @project, @commit.id))
%div
%p
diff --git a/app/views/projects/commit/_revert.html.haml b/app/views/projects/commit/_revert.html.haml
new file mode 100644
index 00000000000..52ca3ed5b14
--- /dev/null
+++ b/app/views/projects/commit/_revert.html.haml
@@ -0,0 +1,31 @@
+#modal-revert-commit.modal
+ .modal-dialog
+ .modal-content
+ .modal-header
+ %a.close{href: "#", "data-dismiss" => "modal"} ×
+ %h3.page-title== Revert this #{revert_commit_type(commit)}
+ .modal-body
+ = form_tag revert_namespace_project_commit_path(@project.namespace, @project, commit.id), method: :post, remote: false, class: 'form-horizontal js-create-dir-form js-requires-input' do
+ .form-group.branch
+ = label_tag 'target_branch', 'Revert in branch', class: 'control-label'
+ .col-sm-10
+ = select_tag "target_branch", grouped_options_refs, class: "select2 select2-sm js-target-branch"
+ - if can?(current_user, :push_code, @project)
+ .js-create-merge-request-container
+ .checkbox
+ - nonce = SecureRandom.hex
+ = label_tag "create_merge_request-#{nonce}" do
+ = check_box_tag 'create_merge_request', 1, true, class: 'js-create-merge-request', id: "create_merge_request-#{nonce}"
+ Start a <strong>new merge request</strong> with these changes
+ - else
+ = hidden_field_tag 'create_merge_request', 1
+ .form-actions
+ = submit_tag "Revert", class: 'btn btn-create'
+ = link_to "Cancel", '#', class: "btn btn-cancel", "data-dismiss" => "modal"
+
+ - unless can?(current_user, :push_code, @project)
+ .inline.prepend-left-10
+ = commit_in_fork_help
+
+:javascript
+ new NewCommitForm($('.js-create-dir-form'))
diff --git a/app/views/projects/commit/show.html.haml b/app/views/projects/commit/show.html.haml
index 05dbe5ebea4..21e186120c3 100644
--- a/app/views/projects/commit/show.html.haml
+++ b/app/views/projects/commit/show.html.haml
@@ -12,3 +12,5 @@
= render "projects/diffs/diffs", diffs: @diffs, project: @project,
diff_refs: @diff_refs
= render "projects/notes/notes_with_form"
+- if can_collaborate_with_project?
+ = render "projects/commit/revert", commit: @commit, title: @commit.title
diff --git a/app/views/projects/diffs/_text_file.html.haml b/app/views/projects/diffs/_text_file.html.haml
index 5e835b10e1f..d75e9ef2a49 100644
--- a/app/views/projects/diffs/_text_file.html.haml
+++ b/app/views/projects/diffs/_text_file.html.haml
@@ -35,8 +35,8 @@
= render "projects/notes/diff_notes_with_reply", notes: comments, line: raw_diff_lines[index].text
- if last_line > 0
- = render "projects/diffs/match_line", {line: "",
- line_old: last_line, line_new: last_line, bottom: true, new_file: diff_file.new_file}
+ = render "projects/diffs/match_line", { line: "",
+ line_old: last_line, line_new: last_line, bottom: true, new_file: diff_file.new_file }
- if diff_file.diff.blank? && diff_file.mode_changed?
.file-mode-changed
diff --git a/app/views/projects/edit.html.haml b/app/views/projects/edit.html.haml
index fdcb6987471..042f660077e 100644
--- a/app/views/projects/edit.html.haml
+++ b/app/views/projects/edit.html.haml
@@ -119,13 +119,13 @@
.col-sm-offset-2.col-sm-10
%p Get recent application code using the following command:
.radio
- = f.label :build_allow_git_fetch do
+ = f.label :build_allow_git_fetch_false do
= f.radio_button :build_allow_git_fetch, 'false'
%strong git clone
%br
%span.descr Slower but makes sure you have a clean dir before every build
.radio
- = f.label :build_allow_git_fetch do
+ = f.label :build_allow_git_fetch_true do
= f.radio_button :build_allow_git_fetch, 'true'
%strong git fetch
%br
diff --git a/app/views/projects/issues/_issue.html.haml b/app/views/projects/issues/_issue.html.haml
index 5b0edcfa978..654d8cd5ed0 100644
--- a/app/views/projects/issues/_issue.html.haml
+++ b/app/views/projects/issues/_issue.html.haml
@@ -16,23 +16,15 @@
= link_to_member(@project, issue.assignee, name: false, title: "Assigned to :name")
- upvotes, downvotes = issue.upvotes, issue.downvotes
- - if upvotes > 0 || downvotes > 0
+ - if upvotes > 0
%li
= icon('thumbs-up')
= upvotes
- - else
- %li{ class: 'issue-no-votes' }
- = icon('thumbs-up')
- = upvotes
- - if upvotes > 0 || downvotes > 0
+ - if downvotes > 0
%li
= icon('thumbs-down')
= downvotes
- - else
- %li{ class: 'issue-no-votes' }
- = icon('thumbs-down')
- = downvotes
- note_count = issue.notes.user.count
- if note_count > 0
diff --git a/app/views/projects/labels/_form.html.haml b/app/views/projects/labels/_form.html.haml
index 5ce2a7b985d..d63d3a3ec20 100644
--- a/app/views/projects/labels/_form.html.haml
+++ b/app/views/projects/labels/_form.html.haml
@@ -12,6 +12,10 @@
.col-sm-10
= f.text_field :title, class: "form-control js-quick-submit", required: true, autofocus: true
.form-group
+ = f.label :description, class: 'control-label'
+ .col-sm-10
+ = f.text_field :description, class: "form-control js-quick-submit"
+ .form-group
= f.label :color, "Background color", class: 'control-label'
.col-sm-10
.input-group
diff --git a/app/views/projects/labels/_label.html.haml b/app/views/projects/labels/_label.html.haml
index b70a9fc9fe5..5b35acc66c0 100644
--- a/app/views/projects/labels/_label.html.haml
+++ b/app/views/projects/labels/_label.html.haml
@@ -1,5 +1,6 @@
%li{id: dom_id(label)}
- = link_to_label(label)
+ = render "shared/label_row", label: label
+
.pull-right
%strong.append-right-20
= link_to_label(label) do
diff --git a/app/views/projects/merge_requests/_merge_request.html.haml b/app/views/projects/merge_requests/_merge_request.html.haml
index b230b3a0110..b55f6a2d32a 100644
--- a/app/views/projects/merge_requests/_merge_request.html.haml
+++ b/app/views/projects/merge_requests/_merge_request.html.haml
@@ -25,23 +25,15 @@
= link_to_member(merge_request.source_project, merge_request.assignee, name: false, title: "Assigned to :name")
- upvotes, downvotes = merge_request.upvotes, merge_request.downvotes
- - if upvotes > 0 || downvotes > 0
+ - if upvotes > 0
%li
= icon('thumbs-up')
= upvotes
- - else
- %li{ class: 'merge-request-no-votes' }
- = icon('thumbs-up')
- = upvotes
- - if upvotes > 0 || downvotes > 0
+ - if downvotes > 0
%li
= icon('thumbs-down')
= downvotes
- - else
- %li{ class: 'merge-request-no-votes' }
- = icon('thumbs-down')
- = downvotes
- note_count = merge_request.mr_and_commit_notes.user.count
- if note_count > 0
diff --git a/app/views/projects/merge_requests/_show.html.haml b/app/views/projects/merge_requests/_show.html.haml
index da67645bc2b..648512e5379 100644
--- a/app/views/projects/merge_requests/_show.html.haml
+++ b/app/views/projects/merge_requests/_show.html.haml
@@ -85,6 +85,8 @@
= spinner
= render 'shared/issuable/sidebar', issuable: @merge_request
+- if @merge_request.can_be_reverted?
+ = render "projects/commit/revert", commit: @merge_request.merge_commit, title: @merge_request.title
:javascript
var merge_request;
diff --git a/app/views/projects/merge_requests/show/_mr_title.html.haml b/app/views/projects/merge_requests/show/_mr_title.html.haml
index 473fbff721b..14ea7b17786 100644
--- a/app/views/projects/merge_requests/show/_mr_title.html.haml
+++ b/app/views/projects/merge_requests/show/_mr_title.html.haml
@@ -5,7 +5,7 @@
Merge Request ##{@merge_request.iid}
%span.creator
&middot;
- opened by #{link_to_member(@project, @merge_request.author, size: 24)}
+ by #{link_to_member(@project, @merge_request.author, size: 24)}
&middot;
= time_ago_with_tooltip(@merge_request.created_at)
diff --git a/app/views/projects/merge_requests/widget/_merged.html.haml b/app/views/projects/merge_requests/widget/_merged.html.haml
index d1d602eecdc..3abae9f0bf6 100644
--- a/app/views/projects/merge_requests/widget/_merged.html.haml
+++ b/app/views/projects/merge_requests/widget/_merged.html.haml
@@ -8,20 +8,18 @@
#{time_ago_with_tooltip(@merge_request.merge_event.created_at)}
%div
- if !@merge_request.source_branch_exists? || (params[:delete_source] == 'true')
- The changes were merged into
- #{link_to @merge_request.target_branch, namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch), class: "label-branch"}.
- The source branch has been removed.
-
+ %p
+ The changes were merged into
+ #{link_to @merge_request.target_branch, namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch), class: "label-branch"}.
+ The source branch has been removed.
+ = render 'projects/merge_requests/widget/merged_buttons'
- elsif @merge_request.can_remove_source_branch?(current_user)
.remove_source_branch_widget
%p
The changes were merged into
#{link_to @merge_request.target_branch, namespace_project_commits_path(@project.namespace, @project, @merge_request.target_branch), class: "label-branch"}.
You can remove the source branch now.
- = link_to namespace_project_branch_path(@merge_request.source_project.namespace, @merge_request.source_project, @merge_request.source_branch), remote: true, method: :delete, class: "btn btn-primary btn-sm remove_source_branch" do
- %i.fa.fa-times
- Remove Source Branch
-
+ = render 'projects/merge_requests/widget/merged_buttons', source_branch_exists: true
.remove_source_branch_widget.failed.hide
%p
Failed to remove source branch '#{@merge_request.source_branch}'.
diff --git a/app/views/projects/merge_requests/widget/_merged_buttons.haml b/app/views/projects/merge_requests/widget/_merged_buttons.haml
new file mode 100644
index 00000000000..85a3a6ba9e2
--- /dev/null
+++ b/app/views/projects/merge_requests/widget/_merged_buttons.haml
@@ -0,0 +1,11 @@
+- source_branch_exists = local_assigns.fetch(:source_branch_exists, false)
+- mr_can_be_reverted = @merge_request.can_be_reverted?
+
+- if source_branch_exists || mr_can_be_reverted
+ .btn-group
+ - if source_branch_exists
+ = link_to namespace_project_branch_path(@merge_request.source_project.namespace, @merge_request.source_project, @merge_request.source_branch), remote: true, method: :delete, class: "btn btn-default btn-grouped btn-sm remove_source_branch" do
+ = icon('trash-o')
+ Remove Source Branch
+ - if mr_can_be_reverted
+ = revert_commit_link(@merge_request.merge_commit, namespace_project_merge_request_path(@project.namespace, @project, @merge_request), btn_class: 'sm')
diff --git a/app/views/projects/milestones/_issue.html.haml b/app/views/projects/milestones/_issue.html.haml
index 133d802aaca..ca51b8c745d 100644
--- a/app/views/projects/milestones/_issue.html.haml
+++ b/app/views/projects/milestones/_issue.html.haml
@@ -1,9 +1,10 @@
%li{ id: dom_id(issue, 'sortable'), class: 'issue-row', 'data-iid' => issue.iid, 'data-url' => issue_path(issue) }
- .pull-right.assignee-icon
- - if issue.assignee
- = image_tag avatar_icon(issue.assignee, 16), class: "avatar s16", alt: ''
%span
- = link_to [@project.namespace.becomes(Namespace), @project, issue] do
- %span.cgray ##{issue.iid}
= link_to_gfm issue.title, [@project.namespace.becomes(Namespace), @project, issue], title: issue.title
-
+ .issue-detail
+ = link_to [@project.namespace.becomes(Namespace), @project, issue] do
+ %span.issue-number ##{issue.iid}
+ - issue.labels.each do |label|
+ = render_colored_label(label)
+ - if issue.assignee
+ = image_tag avatar_icon(issue.assignee, 16), class: "avatar s24", alt: ''
diff --git a/app/views/projects/milestones/_issues.html.haml b/app/views/projects/milestones/_issues.html.haml
index 6e4df75a3df..6f8a341e478 100644
--- a/app/views/projects/milestones/_issues.html.haml
+++ b/app/views/projects/milestones/_issues.html.haml
@@ -1,6 +1,7 @@
.panel.panel-default
- .panel-heading= title
+ .panel-heading
+ = title
+ .pull-right= issues.size
%ul{ class: "well-list issues-sortable-list", id: "issues-list-#{id}", "data-state" => id }
- issues.sort_by(&:position).each do |issue|
= render 'issue', issue: issue
- %li.light.ui-sort-disabled Drag and drop available
diff --git a/app/views/projects/milestones/_merge_requests.html.haml b/app/views/projects/milestones/_merge_requests.html.haml
index 00889a5eb24..9a5a02af215 100644
--- a/app/views/projects/milestones/_merge_requests.html.haml
+++ b/app/views/projects/milestones/_merge_requests.html.haml
@@ -3,4 +3,3 @@
%ul{ class: "well-list merge_requests-sortable-list", id: "merge_requests-list-#{id}", "data-state" => id }
- merge_requests.sort_by(&:position).each do |merge_request|
= render 'merge_request', merge_request: merge_request
- %li.light.ui-sort-disabled Drag and drop available
diff --git a/app/views/projects/milestones/show.html.haml b/app/views/projects/milestones/show.html.haml
index 528a4f9552f..631bc8c3e9d 100644
--- a/app/views/projects/milestones/show.html.haml
+++ b/app/views/projects/milestones/show.html.haml
@@ -24,7 +24,7 @@
- else
= link_to 'Reopen Milestone', namespace_project_milestone_path(@project.namespace, @project, @milestone, milestone: {state_event: :activate }), method: :put, class: "btn btn-reopen btn-nr btn-grouped"
- = link_to namespace_project_milestone_path(@project.namespace, @project, @milestone), data: { confirm: 'Are you sure?' }, method: :delete, class: "btn btn-grouped btn-nr btn-remove" do
+ = link_to namespace_project_milestone_path(@project.namespace, @project, @milestone), data: { confirm: 'Are you sure?' }, method: :delete, class: "btn btn-grouped btn-nr" do
= icon('trash-o')
Delete
@@ -32,7 +32,7 @@
= icon('pencil-square-o')
Edit
-.detail-page-description.content-block
+.detail-page-description.milestone-detail.second-block
%h2.title
= markdown escape_once(@milestone.title), pipeline: :single_line
%div
@@ -47,44 +47,55 @@
%span All issues for this milestone are closed. You may close milestone now.
.context.prepend-top-default
- %p.lead
- Progress:
- #{@milestone.closed_items_count} closed
- &ndash;
- #{@milestone.open_items_count} open
- &nbsp;
- %span.light #{@milestone.percent_complete}% complete
- %span.pull-right= @milestone.expires_at
+ .milestone-summary
+ %h4 Progress
+ %strong= @milestone.issues.count
+ issues:
+ %span.milestone-stat
+ %strong= @milestone.open_items_count
+ open and
+ %strong= @milestone.closed_items_count
+ closed
+ %span.milestone-stat
+ %strong== #{@milestone.percent_complete}%
+ complete
+ %span.milestone-stat
+ %span.time-elapsed
+ %strong== #{@milestone.percent_time_used}%
+ time elapsed
+ %span.pull-right.tab-issues-buttons
+ - if can?(current_user, :create_issue, @project)
+ = link_to new_namespace_project_issue_path(@project.namespace, @project, issue: { milestone_id: @milestone.id }), class: "btn btn-grouped", title: "New Issue" do
+ %i.fa.fa-plus
+ New Issue
+ - if can?(current_user, :read_issue, @project)
+ = link_to 'Browse Issues', namespace_project_issues_path(@milestone.project.namespace, @milestone.project, milestone_title: @milestone.title), class: "btn btn-grouped"
+ %span.pull-right.tab-merge-requests-buttons.hidden
+ - if can?(current_user, :read_merge_request, @project)
+ = link_to 'Browse Merge Requests', namespace_project_merge_requests_path(@milestone.project.namespace, @milestone.project, milestone_title: @milestone.title), class: "btn btn-grouped"
+
= milestone_progress_bar(@milestone)
%ul.nav-links.no-top.no-bottom
%li.active
- = link_to '#tab-issues', 'data-toggle' => 'tab' do
+ = link_to '#tab-issues', 'data-toggle' => 'tab', 'data-show' => '.tab-issues-buttons' do
Issues
%span.badge= @issues.count
%li
- = link_to '#tab-merge-requests', 'data-toggle' => 'tab' do
+ = link_to '#tab-merge-requests', 'data-toggle' => 'tab', 'data-show' => '.tab-merge-requests-buttons' do
Merge Requests
%span.badge= @merge_requests.count
%li
= link_to '#tab-participants', 'data-toggle' => 'tab' do
Participants
%span.badge= @users.count
+ %li
+ = link_to '#tab-labels', 'data-toggle' => 'tab', 'data-show' => '.tab-issues-buttons' do
+ Labels
+ %span.badge= @labels.count
-.tab-content
+.tab-content.milestone-content
.tab-pane.active#tab-issues
- .content-block.oneline-block
- .controls
- - if can?(current_user, :create_issue, @project)
- = link_to new_namespace_project_issue_path(@project.namespace, @project, issue: { milestone_id: @milestone.id }), class: "btn btn-grouped", title: "New Issue" do
- %i.fa.fa-plus
- New Issue
- - if can?(current_user, :read_issue, @project)
- = link_to 'Browse Issues', namespace_project_issues_path(@milestone.project.namespace, @milestone.project, milestone_title: @milestone.title), class: "btn btn-grouped"
-
- .oneline
- All issues in this milestone
-
.row.prepend-top-default
.col-md-4
= render('issues', title: 'Unstarted Issues (open and unassigned)', issues: @issues.opened.unassigned, id: 'unassigned')
@@ -94,14 +105,6 @@
= render('issues', title: 'Completed Issues (closed)', issues: @issues.closed, id: 'closed')
.tab-pane#tab-merge-requests
- .content-block.oneline-block
- .controls
- - if can?(current_user, :read_merge_request, @project)
- = link_to 'Browse Merge Requests', namespace_project_merge_requests_path(@milestone.project.namespace, @milestone.project, milestone_title: @milestone.title), class: "btn btn-grouped"
-
- .oneline
- All merge requests in this milestone
-
.row.prepend-top-default
.col-md-3
= render('merge_requests', title: 'Work in progress (open and unassigned)', merge_requests: @merge_requests.opened.unassigned, id: 'unassigned')
@@ -117,9 +120,6 @@
= render 'merge_request', merge_request: merge_request
.tab-pane#tab-participants
- .content-block.oneline-block
- All participants to this milestone
-
%ul.bordered-list
- @users.each do |user|
%li
@@ -128,3 +128,18 @@
%strong= truncate(user.name, lenght: 40)
%br
%small.cgray= user.username
+
+ .tab-pane#tab-labels
+ %ul.bordered-list.manage-labels-list
+ - @labels.each do |label|
+ %li
+ = render_colored_label(label)
+ - args = [@milestone.project.namespace, @milestone.project, milestone_title: @milestone.title, label_name: label.title]
+ - options = args.extract_options!
+
+ %span.issues-count
+ = link_to namespace_project_issues_path(*args, options.merge(state: 'opened')) do
+ = pluralize label.open_issues_count, 'open issue'
+ %span.issues-count
+ = link_to namespace_project_issues_path(*args, options.merge(state: 'closed')) do
+ = pluralize label.closed_issues_count, 'closed issue'
diff --git a/app/views/shared/_label_row.html.haml b/app/views/shared/_label_row.html.haml
new file mode 100644
index 00000000000..8134b15d245
--- /dev/null
+++ b/app/views/shared/_label_row.html.haml
@@ -0,0 +1,4 @@
+%span.label-row
+ = link_to_label(label)
+ %span.prepend-left-10
+ = markdown(label.description, pipeline: :single_line)
diff --git a/app/views/shared/_project_limit.html.haml b/app/views/shared/_project_limit.html.haml
index 960ff00b49d..f4eb8e491b9 100644
--- a/app/views/shared/_project_limit.html.haml
+++ b/app/views/shared/_project_limit.html.haml
@@ -1,4 +1,4 @@
-- if cookies[:hide_project_limit_message].blank? && !current_user.hide_project_limit && !current_user.can_create_project?
+- if cookies[:hide_project_limit_message].blank? && !current_user.hide_project_limit && !current_user.can_create_project? && current_user.projects_limit > 0
.project-limit-message.alert.alert-warning.hidden-xs
You won't be able to create new projects because you have reached your project limit.
diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml
index b7e350d27af..e55159d996b 100644
--- a/app/views/shared/issuable/_filter.html.haml
+++ b/app/views/shared/issuable/_filter.html.haml
@@ -41,6 +41,10 @@
.filter-item.inline
= button_tag "Update issues", class: "btn update_selected_issues btn-save"
+- if @label
+ .gray-content-block.second-block
+ = render "shared/label_row", label: @label
+
:javascript
new UsersSelect();
$('form.filter-form').on('submit', function (event) {
diff --git a/app/views/shared/projects/_project.html.haml b/app/views/shared/projects/_project.html.haml
index 00bf9dcd2d5..97db5b1d41e 100644
--- a/app/views/shared/projects/_project.html.haml
+++ b/app/views/shared/projects/_project.html.haml
@@ -4,7 +4,7 @@
- ci = false unless local_assigns[:ci] == true
- skip_namespace = false unless local_assigns[:skip_namespace] == true
- css_class = '' unless local_assigns[:css_class]
-- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true
+- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true && project.commit
- css_class += " no-description" if project.description.blank? && !show_last_commit_as_description
- ci_commit = project.ci_commit(project.commit.sha) if ci && !project.empty_repo? && project.commit
- cache_key = [project.namespace, project, controller.controller_name, controller.action_name, current_application_settings, 'v2.2']
diff --git a/config/application.rb b/config/application.rb
index 1e9ec74cdbf..b905f1a3e90 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -6,6 +6,8 @@ I18n.config.enforce_available_locales = false
Bundler.require(:default, Rails.env)
module Gitlab
+ REDIS_CACHE_NAMESPACE = 'cache:gitlab'
+
class Application < Rails::Application
# Settings in config/environments/* take precedence over those specified here.
# Application configuration should go into files in config/initializers
@@ -43,8 +45,8 @@ module Gitlab
# Enable the asset pipeline
config.assets.enabled = true
- config.assets.paths << Emoji.images_path
- config.assets.precompile << "emoji/*.png"
+ config.assets.paths << Gemojione.index.images_path
+ config.assets.precompile << "*.png"
config.assets.precompile << "print.css"
# Version of your assets, change this if you want to expire all your assets
@@ -89,7 +91,7 @@ module Gitlab
redis_config_hash[:path] = redis_uri.path
end
- redis_config_hash[:namespace] = 'cache:gitlab'
+ redis_config_hash[:namespace] = REDIS_CACHE_NAMESPACE
redis_config_hash[:expires_in] = 2.weeks # Cache should not grow forever
config.cache_store = :redis_store, redis_config_hash
diff --git a/config/gitlab.yml.example b/config/gitlab.yml.example
index faf05ecd466..05f127d622a 100644
--- a/config/gitlab.yml.example
+++ b/config/gitlab.yml.example
@@ -288,15 +288,22 @@ production: &base
# auto_sign_in_with_provider: saml
# CAUTION!
- # This allows users to login without having a user account first (default: false).
+ # This allows users to login without having a user account first. Define the allowed providers
+ # using an array, e.g. ["saml", "twitter"], or as true/false to allow all providers or none.
# User accounts will be created automatically when authentication was successful.
- allow_single_sign_on: false
+ allow_single_sign_on: ["saml"]
+
# Locks down those users until they have been cleared by the admin (default: true).
block_auto_created_users: true
# Look up new users in LDAP servers. If a match is found (same uid), automatically
# link the omniauth identity with the LDAP account. (default: false)
auto_link_ldap_user: false
+ # Allow users with existing accounts to login and auto link their account via SAML
+ # login, without having to do a manual login first and manually add SAML
+ # (default: false)
+ auto_link_saml_user: false
+
## Auth providers
# Uncomment the following lines and fill in the data of the auth provider you want to use
# If your favorite auth provider is not listed you can use others:
diff --git a/config/initializers/2_app.rb b/config/initializers/2_app.rb
index 35b150c9929..bd74f90e7d2 100644
--- a/config/initializers/2_app.rb
+++ b/config/initializers/2_app.rb
@@ -3,6 +3,6 @@ module Gitlab
Settings
end
- VERSION = File.read(Rails.root.join("VERSION")).strip
- REVISION = Gitlab::Popen.popen(%W(#{config.git.bin_path} log --pretty=format:%h -n 1)).first.chomp
+ VERSION = File.read(Rails.root.join("VERSION")).strip.freeze
+ REVISION = Gitlab::Popen.popen(%W(#{config.git.bin_path} log --pretty=format:%h -n 1)).first.chomp.freeze
end
diff --git a/config/initializers/sentry.rb b/config/initializers/sentry.rb
index d0630b9fa07..e87899b2d5c 100644
--- a/config/initializers/sentry.rb
+++ b/config/initializers/sentry.rb
@@ -14,6 +14,7 @@ if Rails.env.production?
if sentry_enabled
Raven.configure do |config|
config.dsn = current_application_settings.sentry_dsn
+ config.release = Gitlab::REVISION
end
end
end
diff --git a/config/routes.rb b/config/routes.rb
index 507bcbc53d7..30681356c5f 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -334,6 +334,12 @@ Rails.application.routes.draw do
resources :groups, only: [:index]
resources :snippets, only: [:index]
+ resources :todos, only: [:index, :destroy] do
+ collection do
+ delete :destroy_all
+ end
+ end
+
resources :projects, only: [:index] do
collection do
get :starred
@@ -502,6 +508,7 @@ Rails.application.routes.draw do
get :builds
post :cancel_builds
post :retry_builds
+ post :revert
end
end
@@ -617,6 +624,7 @@ Rails.application.routes.draw do
get :status
post :cancel
post :retry
+ post :erase
end
resource :artifacts, only: [] do
diff --git a/config/sidekiq.yml.example b/config/sidekiq.yml.example
index c691db67c6c..714bc06cb24 100644
--- a/config/sidekiq.yml.example
+++ b/config/sidekiq.yml.example
@@ -1,2 +1,2 @@
---
+---
:concurrency: 5 \ No newline at end of file
diff --git a/db/migrate/20160129155512_add_merge_commit_sha_to_merge_requests.rb b/db/migrate/20160129155512_add_merge_commit_sha_to_merge_requests.rb
new file mode 100644
index 00000000000..f0d94226514
--- /dev/null
+++ b/db/migrate/20160129155512_add_merge_commit_sha_to_merge_requests.rb
@@ -0,0 +1,5 @@
+class AddMergeCommitShaToMergeRequests < ActiveRecord::Migration
+ def change
+ add_column :merge_requests, :merge_commit_sha, :string
+ end
+end
diff --git a/db/migrate/20160202091601_add_erasable_to_ci_build.rb b/db/migrate/20160202091601_add_erasable_to_ci_build.rb
new file mode 100644
index 00000000000..f9912f2274e
--- /dev/null
+++ b/db/migrate/20160202091601_add_erasable_to_ci_build.rb
@@ -0,0 +1,6 @@
+class AddErasableToCiBuild < ActiveRecord::Migration
+ def change
+ add_reference :ci_builds, :erased_by, references: :users, index: true
+ add_column :ci_builds, :erased_at, :datetime
+ end
+end
diff --git a/db/migrate/20160212123307_create_tasks.rb b/db/migrate/20160212123307_create_tasks.rb
new file mode 100644
index 00000000000..c3f6f3abc26
--- /dev/null
+++ b/db/migrate/20160212123307_create_tasks.rb
@@ -0,0 +1,14 @@
+class CreateTasks < ActiveRecord::Migration
+ def change
+ create_table :tasks do |t|
+ t.references :user, null: false, index: true
+ t.references :project, null: false, index: true
+ t.references :target, polymorphic: true, null: false, index: true
+ t.integer :author_id, index: true
+ t.integer :action, null: false
+ t.string :state, null: false, index: true
+
+ t.timestamps
+ end
+ end
+end
diff --git a/db/migrate/20160217100506_add_description_to_label.rb b/db/migrate/20160217100506_add_description_to_label.rb
new file mode 100644
index 00000000000..eed6d1f236a
--- /dev/null
+++ b/db/migrate/20160217100506_add_description_to_label.rb
@@ -0,0 +1,5 @@
+class AddDescriptionToLabel < ActiveRecord::Migration
+ def change
+ add_column :labels, :description, :string
+ end
+end
diff --git a/db/migrate/20160217174422_add_note_to_tasks.rb b/db/migrate/20160217174422_add_note_to_tasks.rb
new file mode 100644
index 00000000000..da5cb2e05db
--- /dev/null
+++ b/db/migrate/20160217174422_add_note_to_tasks.rb
@@ -0,0 +1,5 @@
+class AddNoteToTasks < ActiveRecord::Migration
+ def change
+ add_reference :tasks, :note, index: true
+ end
+end
diff --git a/db/migrate/20160220123949_rename_tasks_to_todos.rb b/db/migrate/20160220123949_rename_tasks_to_todos.rb
new file mode 100644
index 00000000000..30c10d27146
--- /dev/null
+++ b/db/migrate/20160220123949_rename_tasks_to_todos.rb
@@ -0,0 +1,5 @@
+class RenameTasksToTodos < ActiveRecord::Migration
+ def change
+ rename_table :tasks, :todos
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 689a8c3ecc5..4708c29d9ae 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -11,7 +11,7 @@
#
# It's strongly recommended that you check this file into your version control system.
-ActiveRecord::Schema.define(version: 20160209130428) do
+ActiveRecord::Schema.define(version: 20160220123949) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -129,6 +129,8 @@ ActiveRecord::Schema.define(version: 20160209130428) do
t.text "artifacts_file"
t.integer "gl_project_id"
t.text "artifacts_metadata"
+ t.integer "erased_by_id"
+ t.datetime "erased_at"
end
add_index "ci_builds", ["commit_id", "stage_idx", "created_at"], name: "index_ci_builds_on_commit_id_and_stage_idx_and_created_at", using: :btree
@@ -136,6 +138,7 @@ ActiveRecord::Schema.define(version: 20160209130428) do
add_index "ci_builds", ["commit_id", "type", "name", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_name_and_ref", using: :btree
add_index "ci_builds", ["commit_id", "type", "ref"], name: "index_ci_builds_on_commit_id_and_type_and_ref", using: :btree
add_index "ci_builds", ["commit_id"], name: "index_ci_builds_on_commit_id", using: :btree
+ add_index "ci_builds", ["erased_by_id"], name: "index_ci_builds_on_erased_by_id", using: :btree
add_index "ci_builds", ["gl_project_id"], name: "index_ci_builds_on_gl_project_id", using: :btree
add_index "ci_builds", ["project_id", "commit_id"], name: "index_ci_builds_on_project_id_and_commit_id", using: :btree
add_index "ci_builds", ["project_id"], name: "index_ci_builds_on_project_id", using: :btree
@@ -442,7 +445,8 @@ ActiveRecord::Schema.define(version: 20160209130428) do
t.integer "project_id"
t.datetime "created_at"
t.datetime "updated_at"
- t.boolean "template", default: false
+ t.boolean "template", default: false
+ t.string "description"
end
add_index "labels", ["project_id"], name: "index_labels_on_project_id", using: :btree
@@ -522,6 +526,7 @@ ActiveRecord::Schema.define(version: 20160209130428) do
t.text "merge_params"
t.boolean "merge_when_build_succeeds", default: false, null: false
t.integer "merge_user_id"
+ t.string "merge_commit_sha"
end
add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
@@ -819,6 +824,26 @@ ActiveRecord::Schema.define(version: 20160209130428) do
add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree
+ create_table "todos", force: :cascade do |t|
+ t.integer "user_id", null: false
+ t.integer "project_id", null: false
+ t.integer "target_id", null: false
+ t.string "target_type", null: false
+ t.integer "author_id"
+ t.integer "action", null: false
+ t.string "state", null: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.integer "note_id"
+ end
+
+ add_index "todos", ["author_id"], name: "index_todos_on_author_id", using: :btree
+ add_index "todos", ["note_id"], name: "index_todos_on_note_id", using: :btree
+ add_index "todos", ["project_id"], name: "index_todos_on_project_id", using: :btree
+ add_index "todos", ["state"], name: "index_todos_on_state", using: :btree
+ add_index "todos", ["target_type", "target_id"], name: "index_todos_on_target_type_and_target_id", using: :btree
+ add_index "todos", ["user_id"], name: "index_todos_on_user_id", using: :btree
+
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
diff --git a/doc/api/README.md b/doc/api/README.md
index 9f3ad126320..7629ef294ac 100644
--- a/doc/api/README.md
+++ b/doc/api/README.md
@@ -32,6 +32,7 @@ following locations:
- [Builds](builds.md)
- [Build triggers](build_triggers.md)
- [Build Variables](build_variables.md)
+- [Runners](runners.md)
## Authentication
diff --git a/doc/api/builds.md b/doc/api/builds.md
index 43edb40e911..d3ce72e59fc 100644
--- a/doc/api/builds.md
+++ b/doc/api/builds.md
@@ -34,6 +34,10 @@ Example of response
"coverage": null,
"created_at": "2015-12-24T15:51:21.802Z",
"download_url": null,
+ "artifacts_file": {
+ "filename": "artifacts.zip",
+ "size": 1000
+ },
"finished_at": "2015-12-24T17:54:27.895Z",
"id": 7,
"name": "teaspoon",
@@ -72,6 +76,7 @@ Example of response
"coverage": null,
"created_at": "2015-12-24T15:51:21.727Z",
"download_url": null,
+ "artifacts_file": null,
"finished_at": "2015-12-24T17:54:24.921Z",
"id": 6,
"name": "spinach:other",
@@ -135,6 +140,7 @@ Example of response
"coverage": null,
"created_at": "2016-01-11T10:13:33.506Z",
"download_url": null,
+ "artifacts_file": null,
"finished_at": "2016-01-11T10:14:09.526Z",
"id": 69,
"name": "rubocop",
@@ -159,6 +165,7 @@ Example of response
"coverage": null,
"created_at": "2015-12-24T15:51:21.957Z",
"download_url": null,
+ "artifacts_file": null,
"finished_at": "2015-12-24T17:54:33.913Z",
"id": 9,
"name": "brakeman",
@@ -220,6 +227,7 @@ Example of response
"coverage": null,
"created_at": "2015-12-24T15:51:21.880Z",
"download_url": null,
+ "artifacts_file": null,
"finished_at": "2015-12-24T17:54:31.198Z",
"id": 8,
"name": "rubocop",
@@ -247,6 +255,34 @@ Example of response
}
```
+## Get build artifacts
+
+> [Introduced][ce-2893] in GitLab 8.5
+
+Get build artifacts of a project
+
+```
+GET /projects/:id/builds/:build_id/artifacts
+```
+
+| Attribute | Type | Required | Description |
+|------------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a project |
+| `build_id` | integer | yes | The ID of a build |
+
+```
+curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/builds/8/artifacts"
+```
+
+Response:
+
+| Status | Description |
+|-----------|---------------------------------|
+| 200 | Serves the artifacts file |
+| 404 | Build not found or no artifacts |
+
+[ce-2893]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2893
+
## Cancel a build
Cancel a single build of a project
@@ -280,6 +316,7 @@ Example of response
"coverage": null,
"created_at": "2016-01-11T10:13:33.506Z",
"download_url": null,
+ "artifacts_file": null,
"finished_at": "2016-01-11T10:14:09.526Z",
"id": 69,
"name": "rubocop",
@@ -326,6 +363,7 @@ Example of response
"coverage": null,
"created_at": "2016-01-11T10:13:33.506Z",
"download_url": null,
+ "artifacts_file": null,
"finished_at": null,
"id": 69,
"name": "rubocop",
@@ -338,3 +376,53 @@ Example of response
"user": null
}
```
+
+## Erase a build
+
+Erase a single build of a project (remove build artifacts and a build trace)
+
+```
+POST /projects/:id/builds/:build_id/erase
+```
+
+Parameters
+
+| Attribute | Type | required | Description |
+|-------------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a project |
+| `build_id` | integer | yes | The ID of a build |
+
+Example of request
+
+```
+curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/builds/1/erase"
+```
+
+Example of response
+
+```json
+{
+ "commit": {
+ "author_email": "admin@example.com",
+ "author_name": "Administrator",
+ "created_at": "2015-12-24T16:51:14.000+01:00",
+ "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
+ "message": "Test the CI integration.",
+ "short_id": "0ff3ae19",
+ "title": "Test the CI integration."
+ },
+ "coverage": null,
+ "download_url": null,
+ "id": 69,
+ "name": "rubocop",
+ "ref": "master",
+ "runner": null,
+ "stage": "test",
+ "created_at": "2016-01-11T10:13:33.506Z",
+ "started_at": "2016-01-11T10:13:33.506Z",
+ "finished_at": "2016-01-11T10:15:10.506Z",
+ "status": "failed",
+ "tag": false,
+ "user": null
+}
+```
diff --git a/doc/api/runners.md b/doc/api/runners.md
new file mode 100644
index 00000000000..cc6c6b7cb2f
--- /dev/null
+++ b/doc/api/runners.md
@@ -0,0 +1,322 @@
+# Runners API
+
+> [Introduced][ce-2640] in GitLab 8.5
+
+[ce-2640]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2640
+
+## List owned runners
+
+Get a list of specific runners available to the user.
+
+```
+GET /runners
+GET /runners?scope=active
+```
+
+| Attribute | Type | Required | Description |
+|-----------|---------|----------|---------------------|
+| `scope` | string | no | The scope of specific runners to show, one of: `active`, `paused`, `online`; showing all runners if none provided |
+
+```
+curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/runners"
+```
+
+Example response:
+
+```json
+[
+ {
+ "active": true,
+ "description": "test-1-20150125",
+ "id": 6,
+ "is_shared": false,
+ "name": null
+ },
+ {
+ "active": true,
+ "description": "test-2-20150125",
+ "id": 8,
+ "is_shared": false,
+ "name": null
+ }
+]
+```
+
+## List all runners
+
+Get a list of all runners in the GitLab instance (specific and shared). Access
+is restricted to users with `admin` privileges.
+
+```
+GET /runners/all
+GET /runners/all?scope=online
+```
+
+| Attribute | Type | Required | Description |
+|-----------|---------|----------|---------------------|
+| `scope` | string | no | The scope of runners to show, one of: `specific`, `shared`, `active`, `paused`, `online`; showing all runners if none provided |
+
+```
+curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/runners/all"
+```
+
+Example response:
+
+```json
+[
+ {
+ "active": true,
+ "description": "shared-runner-1",
+ "id": 1,
+ "is_shared": true,
+ "name": null
+ },
+ {
+ "active": true,
+ "description": "shared-runner-2",
+ "id": 3,
+ "is_shared": true,
+ "name": null
+ },
+ {
+ "active": true,
+ "description": "test-1-20150125",
+ "id": 6,
+ "is_shared": false,
+ "name": null
+ },
+ {
+ "active": true,
+ "description": "test-2-20150125",
+ "id": 8,
+ "is_shared": false,
+ "name": null
+ }
+]
+```
+
+## Get runner's details
+
+Get details of a runner.
+
+```
+GET /runners/:id
+```
+
+| Attribute | Type | Required | Description |
+|-----------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a runner |
+
+```
+curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/runners/6"
+```
+
+Example response:
+
+```json
+{
+ "active": true,
+ "architecture": null,
+ "description": "test-1-20150125",
+ "id": 6,
+ "is_shared": false,
+ "contacted_at": "2016-01-25T16:39:48.066Z",
+ "name": null,
+ "platform": null,
+ "projects": [
+ {
+ "id": 1,
+ "name": "GitLab Community Edition",
+ "name_with_namespace": "GitLab.org / GitLab Community Edition",
+ "path": "gitlab-ce",
+ "path_with_namespace": "gitlab-org/gitlab-ce"
+ }
+ ],
+ "token": "205086a8e3b9a2b818ffac9b89d102",
+ "revision": null,
+ "tag_list": [
+ "ruby",
+ "mysql"
+ ],
+ "version": null
+}
+```
+
+## Update runner's details
+
+Update details of a runner.
+
+```
+PUT /runners/:id
+```
+
+| Attribute | Type | Required | Description |
+|---------------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a runner |
+| `description` | string | no | The description of a runner |
+| `active` | boolean | no | The state of a runner; can be set to `true` or `false` |
+| `tag_list` | array | no | The list of tags for a runner; put array of tags, that should be finally assigned to a runner |
+
+```
+curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/runners/6" -F "description=test-1-20150125-test" -F "tag_list=ruby,mysql,tag1,tag2"
+```
+
+Example response:
+
+```json
+{
+ "active": true,
+ "architecture": null,
+ "description": "test-1-20150125-test",
+ "id": 6,
+ "is_shared": false,
+ "contacted_at": "2016-01-25T16:39:48.066Z",
+ "name": null,
+ "platform": null,
+ "projects": [
+ {
+ "id": 1,
+ "name": "GitLab Community Edition",
+ "name_with_namespace": "GitLab.org / GitLab Community Edition",
+ "path": "gitlab-ce",
+ "path_with_namespace": "gitlab-org/gitlab-ce"
+ }
+ ],
+ "token": "205086a8e3b9a2b818ffac9b89d102",
+ "revision": null,
+ "tag_list": [
+ "ruby",
+ "mysql",
+ "tag1",
+ "tag2"
+ ],
+ "version": null
+}
+```
+
+## Remove a runner
+
+Remove a runner.
+
+```
+DELETE /runners/:id
+```
+
+| Attribute | Type | Required | Description |
+|-----------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a runner |
+
+```
+curl -X DELETE -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/runners/6"
+```
+
+Example response:
+
+```json
+{
+ "active": true,
+ "description": "test-1-20150125-test",
+ "id": 6,
+ "is_shared": false,
+ "name": null,
+}
+```
+
+## List project's runners
+
+List all runners (specific and shared) available in the project. Shared runners
+are listed if at least one shared runner is defined **and** shared runners
+usage is enabled in the project's settings.
+
+```
+GET /projects/:id/runners
+```
+
+| Attribute | Type | Required | Description |
+|-----------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a project |
+
+```
+curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/9/runners"
+```
+
+Example response:
+
+```json
+[
+ {
+ "active": true,
+ "description": "test-2-20150125",
+ "id": 8,
+ "is_shared": false,
+ "name": null
+ },
+ {
+ "active": true,
+ "description": "development_runner",
+ "id": 5,
+ "is_shared": true,
+ "name": null
+ }
+]
+```
+
+## Enable a runner in project
+
+Enable an available specific runner in the project.
+
+```
+POST /projects/:id/runners
+```
+
+| Attribute | Type | Required | Description |
+|-------------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a project |
+| `runner_id` | integer | yes | The ID of a runner |
+
+```
+curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/project/9/runners" -F "runner_id=9"
+```
+
+Example response:
+
+```json
+{
+ "active": true,
+ "description": "test-2016-02-01",
+ "id": 9,
+ "is_shared": false,
+ "name": null
+}
+```
+
+## Disable a runner from project
+
+Disable a specific runner from the project. It works only if the project isn't
+the only project associated with the specified runner. If so, an error is
+returned. Use the [Remove a runner](#remove-a-runner) call instead.
+
+```
+DELETE /projects/:id/runners/:runner_id
+```
+
+| Attribute | Type | Required | Description |
+|-------------|---------|----------|---------------------|
+| `id` | integer | yes | The ID of a project |
+| `runner_id` | integer | yes | The ID of a runner |
+
+```
+curl -X DELETE -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/project/9/runners/9"
+```
+
+Example response:
+
+```json
+{
+ "active": true,
+ "description": "test-2016-02-01",
+ "id": 9,
+ "is_shared": false,
+ "name": null
+}
+```
diff --git a/doc/ci/api/runners.md b/doc/ci/api/runners.md
index c383dc4bcc9..e9033aeacd5 100644
--- a/doc/ci/api/runners.md
+++ b/doc/ci/api/runners.md
@@ -1,5 +1,9 @@
# Runners API
+_**Note:** This API is intended to be used only by Runners as their own
+communication channel. For the consumer API see the
+[new Runners API](../../api/runners.md)._
+
## Runners
### Retrieve all runners
@@ -74,4 +78,4 @@ Returns:
"updated_at" : "2015-02-26T11:39:39.232Z",
"description" : "awesome runner"
}
-``` \ No newline at end of file
+```
diff --git a/doc/ci/quick_start/README.md b/doc/ci/quick_start/README.md
index ae7b760fa67..07e566e3710 100644
--- a/doc/ci/quick_start/README.md
+++ b/doc/ci/quick_start/README.md
@@ -36,13 +36,13 @@ file and start builds on _Runners_ according to the contents of the file,
for that commit.
Because `.gitlab-ci.yml` is in the repository, it is version controlled,
-old versions still build succesfully, forks can easily make use of CI,
+old versions still build successfully, forks can easily make use of CI,
branches can have separate builds and you have a single source of truth for CI.
You can read more about the reasons why we are using `.gitlab-ci.yml`
[in our blog about it][blog-ci].
**Note:** `.gitlab-ci.yml` is a [YAML](https://en.wikipedia.org/wiki/YAML) file
-so you have to pay extra attention to the identation. Always use spaces, not
+so you have to pay extra attention to the indentation. Always use spaces, not
tabs.
### Creating a simple `.gitlab-ci.yml` file
@@ -168,7 +168,7 @@ To enable **Shared Runners** you have to go to your project's
## Seeing the status of your build
-After configuring the Runner succesfully, you should see the status of your
+After configuring the Runner successfully, you should see the status of your
last commit change from _pending_ to either _running_, _success_ or _failed_.
You can view all builds, by going to the **Builds** page in your project.
@@ -184,6 +184,15 @@ you expected.
You are also able to view the status of any commit in the various pages in
GitLab, such as **Commits** and **Merge Requests**.
+## Enabling build emails
+
+If you want to receive e-mail notifications about the result status of the
+builds, you should explicitly enable the **Builds Emails** service under your
+project's settings.
+
+For more information read the [Builds emails service documentation]
+(../../project_services/builds_emails.md).
+
## Builds badge
You can access a builds badge image using following link:
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 194c8171bb9..0edb56dc20e 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -33,7 +33,7 @@ The YAML syntax allows for using more complex job specifications than in the
above example:
```yaml
-image: ruby:2.2
+image: ruby:2.1
services:
- postgres
@@ -428,8 +428,30 @@ artifacts:
- binaries/
```
-The artifacts will be send after a successful build success to GitLab, and will
-be accessible in the GitLab UI to download.
+You may want to create artifacts only for tagged releases to avoid filling the
+build server storage with temporary build artifacts.
+
+Create artifacts only for tags (`default-job` will not create artifacts):
+
+```yaml
+default-job:
+ script:
+ - mvn test -U
+ except:
+ - tags
+
+release-job:
+ script:
+ - mvn package -U
+ artifacts:
+ paths:
+ - target/*.war
+ only:
+ - tags
+```
+
+The artifacts will be sent to GitLab after a successful build and will
+be available for download in the GitLab UI.
### cache
diff --git a/doc/development/ci_setup.md b/doc/development/ci_setup.md
index 05db30b4a7e..6776d9b083f 100644
--- a/doc/development/ci_setup.md
+++ b/doc/development/ci_setup.md
@@ -26,7 +26,7 @@ We use [these build scripts](https://gitlab.com/gitlab-org/gitlab-ci/blob/master
# Build configuration on [Semaphore](https://semaphoreapp.com/gitlabhq/gitlabhq/) for testing the [GitHub.com repo](https://github.com/gitlabhq/gitlabhq)
- Language: Ruby
-- Ruby version: 2.2.4
+- Ruby version: 2.1.8
- database.yml: pg
Build commands
diff --git a/doc/install/installation.md b/doc/install/installation.md
index 7f16e6ff5c4..2a5b99609e4 100644
--- a/doc/install/installation.md
+++ b/doc/install/installation.md
@@ -107,7 +107,7 @@ Then select 'Internet Site' and press enter to confirm the hostname.
## 2. Ruby
-_**Note:** The current supported Ruby versions are 2.1.x and 2.2.x. Ruby 2.3 is
+_**Note:** The current supported Ruby version is 2.1.x. Ruby 2.2 and 2.3 are
currently not supported._
The use of Ruby version managers such as [RVM], [rbenv] or [chruby] with GitLab
@@ -123,9 +123,9 @@ Remove the old Ruby 1.8 if present:
Download Ruby and compile it:
mkdir /tmp/ruby && cd /tmp/ruby
- curl -O --progress https://cache.ruby-lang.org/pub/ruby/2.2/ruby-2.2.4.tar.gz
- echo 'b6eff568b48e0fda76e5a36333175df049b204e91217aa32a65153cc0cdcb761 ruby-2.2.4.tar.gz' | sha256sum -c - && tar xzf ruby-2.2.4.tar.gz
- cd ruby-2.2.4
+ curl -O --progress https://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.8.tar.gz
+ echo 'c7e50159357afd87b13dc5eaf4ac486a70011149 ruby-2.1.8.tar.gz' | shasum -c - && tar xzf ruby-2.1.8.tar.gz
+ cd ruby-2.1.8
./configure --disable-install-rdoc
make
sudo make install
diff --git a/doc/install/requirements.md b/doc/install/requirements.md
index c6a1c20d02f..3cab677fdc7 100644
--- a/doc/install/requirements.md
+++ b/doc/install/requirements.md
@@ -32,7 +32,7 @@ Please consider using a virtual machine to run GitLab.
## Ruby versions
-GitLab requires Ruby (MRI) 2.1.x or 2.2.x and currently does not work with version 2.3.
+GitLab requires Ruby (MRI) 2.1.x and currently does not work with versions 2.2 or 2.3.
You will have to use the standard MRI implementation of Ruby.
We love [JRuby](http://jruby.org/) and [Rubinius](http://rubini.us/) but GitLab
diff --git a/doc/project_services/builds_emails.md b/doc/project_services/builds_emails.md
new file mode 100644
index 00000000000..af0b1a287c7
--- /dev/null
+++ b/doc/project_services/builds_emails.md
@@ -0,0 +1,16 @@
+## Enabling build emails
+
+To receive e-mail notifications about the result status of your builds, visit
+your project's **Settings > Services > Builds emails** and activate the service.
+
+In the _Recipients_ area, provide a list of e-mails separated by comma.
+
+Check the _Add pusher_ checkbox if you want the committer to also receive
+e-mail notifications about each build's status.
+
+If you enable the _Notify only broken builds_ option, e-mail notifications will
+be sent only for failed builds.
+
+---
+
+![Builds emails service settings](img/builds_emails_service.png)
diff --git a/doc/project_services/img/builds_emails_service.png b/doc/project_services/img/builds_emails_service.png
new file mode 100644
index 00000000000..e604dd73ffa
--- /dev/null
+++ b/doc/project_services/img/builds_emails_service.png
Binary files differ
diff --git a/doc/project_services/project_services.md b/doc/project_services/project_services.md
index 55db3e4f2f3..3fea2cff0b9 100644
--- a/doc/project_services/project_services.md
+++ b/doc/project_services/project_services.md
@@ -12,7 +12,7 @@ further configuration instructions and details. Contributions are welcome.
| Assembla | Project Management Software (Source Commits Endpoint) |
| [Atlassian Bamboo CI](bamboo.md) | A continuous integration and build server |
| Buildkite | Continuous integration and deployments |
-| Builds emails | Email the builds status to a list of recipients |
+| [Builds emails](builds_emails.md) | Email the builds status to a list of recipients |
| Campfire | Simple web-based real-time group chat |
| Custom Issue Tracker | Custom issue tracker |
| Drone CI | Continuous Integration platform built on Docker, written in Go |
diff --git a/doc/update/8.3-to-8.4.md b/doc/update/8.3-to-8.4.md
index 616b1f58b65..269deec7a9c 100644
--- a/doc/update/8.3-to-8.4.md
+++ b/doc/update/8.3-to-8.4.md
@@ -81,27 +81,6 @@ There are new configuration options available for [`gitlab.yml`](config/gitlab.y
git diff origin/8-3-stable:config/gitlab.yml.example origin/8-4-stable:config/gitlab.yml.example
```
-#### Nginx configuration
-
-GitLab 8.3 introduced major changes in the NGINX configuration. Ensure you're
-still up-to-date with the latest changes:
-
-```sh
-# For HTTPS configurations
-git diff origin/8-3-stable:lib/support/nginx/gitlab-ssl origin/8-4-stable:lib/support/nginx/gitlab-ssl
-
-# For HTTP configurations
-git diff origin/8-3-stable:lib/support/nginx/gitlab origin/8-4-stable:lib/support/nginx/gitlab
-```
-
-If you are using Apache instead of NGINX please see the updated [Apache templates].
-Also note that because Apache does not support upstreams behind Unix sockets you
-will need to let gitlab-workhorse listen on a TCP port. You can do this
-via [/etc/default/gitlab].
-
-[Apache templates]: https://gitlab.com/gitlab-org/gitlab-recipes/tree/master/web-server/apache
-[/etc/default/gitlab]: https://gitlab.com/gitlab-org/gitlab-ce/blob/8-4-stable/lib/support/init.d/gitlab.default.example#L34
-
#### Init script
We updated the init script for GitLab in order to set a specific PATH for gitlab-workhorse.
diff --git a/doc/workflow/README.md b/doc/workflow/README.md
index bf62ab41053..5199ff9390a 100644
--- a/doc/workflow/README.md
+++ b/doc/workflow/README.md
@@ -17,6 +17,7 @@
- [Releases](releases.md)
- [Milestones](milestones.md)
- [Merge Requests](merge_requests.md)
+- [Revert changes](revert_changes.md)
- ["Work In Progress" Merge Requests](wip_merge_requests.md)
- [Merge When Build Succeeds](merge_when_build_succeeds.md)
- [Manage large binaries with Git LFS](lfs/manage_large_binaries_with_git_lfs.md)
diff --git a/doc/workflow/img/revert_changes_commit.png b/doc/workflow/img/revert_changes_commit.png
new file mode 100644
index 00000000000..d84211e20db
--- /dev/null
+++ b/doc/workflow/img/revert_changes_commit.png
Binary files differ
diff --git a/doc/workflow/img/revert_changes_commit_modal.png b/doc/workflow/img/revert_changes_commit_modal.png
new file mode 100644
index 00000000000..e94d151a2af
--- /dev/null
+++ b/doc/workflow/img/revert_changes_commit_modal.png
Binary files differ
diff --git a/doc/workflow/img/revert_changes_mr.png b/doc/workflow/img/revert_changes_mr.png
new file mode 100644
index 00000000000..7adad88463b
--- /dev/null
+++ b/doc/workflow/img/revert_changes_mr.png
Binary files differ
diff --git a/doc/workflow/img/revert_changes_mr_modal.png b/doc/workflow/img/revert_changes_mr_modal.png
new file mode 100644
index 00000000000..9da78f84828
--- /dev/null
+++ b/doc/workflow/img/revert_changes_mr_modal.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_branch_dropdown.png b/doc/workflow/img/web_editor_new_branch_dropdown.png
new file mode 100644
index 00000000000..009e4b05adf
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_branch_dropdown.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_branch_page.png b/doc/workflow/img/web_editor_new_branch_page.png
new file mode 100644
index 00000000000..dd6cfc6e7bb
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_branch_page.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_directory_dialog.png b/doc/workflow/img/web_editor_new_directory_dialog.png
new file mode 100644
index 00000000000..2c76f84f395
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_directory_dialog.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_directory_dropdown.png b/doc/workflow/img/web_editor_new_directory_dropdown.png
new file mode 100644
index 00000000000..cedf46aedfd
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_directory_dropdown.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_file_dropdown.png b/doc/workflow/img/web_editor_new_file_dropdown.png
new file mode 100644
index 00000000000..6e884f6504d
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_file_dropdown.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_file_editor.png b/doc/workflow/img/web_editor_new_file_editor.png
new file mode 100644
index 00000000000..c76473bcfa7
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_file_editor.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_push_widget.png b/doc/workflow/img/web_editor_new_push_widget.png
new file mode 100644
index 00000000000..a2108735741
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_push_widget.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_tag_dropdown.png b/doc/workflow/img/web_editor_new_tag_dropdown.png
new file mode 100644
index 00000000000..263dd635b95
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_tag_dropdown.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_new_tag_page.png b/doc/workflow/img/web_editor_new_tag_page.png
new file mode 100644
index 00000000000..64d7cd11ed1
--- /dev/null
+++ b/doc/workflow/img/web_editor_new_tag_page.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_start_new_merge_request.png b/doc/workflow/img/web_editor_start_new_merge_request.png
new file mode 100644
index 00000000000..be12a151cac
--- /dev/null
+++ b/doc/workflow/img/web_editor_start_new_merge_request.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_upload_file_dialog.png b/doc/workflow/img/web_editor_upload_file_dialog.png
new file mode 100644
index 00000000000..6dd2207bca0
--- /dev/null
+++ b/doc/workflow/img/web_editor_upload_file_dialog.png
Binary files differ
diff --git a/doc/workflow/img/web_editor_upload_file_dropdown.png b/doc/workflow/img/web_editor_upload_file_dropdown.png
new file mode 100644
index 00000000000..bf6528701b0
--- /dev/null
+++ b/doc/workflow/img/web_editor_upload_file_dropdown.png
Binary files differ
diff --git a/doc/workflow/revert_changes.md b/doc/workflow/revert_changes.md
new file mode 100644
index 00000000000..399366b0cdc
--- /dev/null
+++ b/doc/workflow/revert_changes.md
@@ -0,0 +1,64 @@
+# Reverting changes
+
+_**Note:** This feature was [introduced][ce-1990] in GitLab 8.5._
+
+---
+
+GitLab implements Git's powerful feature to [revert any commit][git-revert]
+with introducing a **Revert** button in Merge Requests and commit details.
+
+## Reverting a Merge Request
+
+_**Note:** The **Revert** button will only be available for Merge Requests
+created since GitLab 8.5. However, you can still revert a Merge Request
+by reverting the merge commit from the list of Commits page._
+
+After the Merge Request has been merged, a **Revert** button will be available
+to revert the changes introduced by that Merge Request:
+
+![Revert Merge Request](img/revert_changes_mr.png)
+
+---
+
+You can revert the changes directly into the selected branch or you can opt to
+create a new Merge Request with the revert changes:
+
+![Revert Merge Request modal](img/revert_changes_mr_modal.png)
+
+---
+
+After the Merge Request has been reverted, the **Revert** button will not be
+available anymore.
+
+## Reverting a Commit
+
+You can revert a Commit from the Commit details page:
+
+![Revert commit](img/revert_changes_commit.png)
+
+---
+
+Similar to reverting a Merge Request, you can opt to revert the changes
+directly into the target branch or create a new Merge Request to revert the
+changes:
+
+![Revert commit modal](img/revert_changes_commit_modal.png)
+
+---
+
+After the Commit has been reverted, the **Revert** button will not be available
+anymore.
+
+Please note that when reverting merge commits, the mainline will always be the
+first parent. If you want to use a different mainline then you need to do that
+from the command line.
+
+Here is a quick example to revert a merge commit using the second parent as the
+mainline:
+
+```bash
+git revert -m 2 7a39eb0
+```
+
+[ce-1990]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/1990 "Revert button Merge Request"
+[git-revert]: https://git-scm.com/docs/git-revert "Git revert documentation"
diff --git a/doc/workflow/web_editor.md b/doc/workflow/web_editor.md
index 7fc8f96b9ec..4a451d98953 100644
--- a/doc/workflow/web_editor.md
+++ b/doc/workflow/web_editor.md
@@ -1,26 +1,120 @@
# GitLab Web Editor
-In GitLab you can create new files and edit existing files using our web editor.
-This is especially useful if you don't have access to a command line or you just want to do a quick fix.
-You can easily access the web editor, depending on the context.
-Let's start from newly created project.
+Sometimes it's easier to make quick changes directly from the GitLab interface
+than to clone the project and use the Git command line tool. In this feature
+highlight we look at how you can create a new file, directory, branch or
+tag from the file browser. All of these actions are available from a single
+dropdown menu.
-Click on `Add a file`
-to create the first file and open it in the web editor.
+## Create a file
-![web editor 1](web_editor/empty_project.png)
+From a project's files page, click the '+' button to the right of the branch selector.
+Choose **New file** from the dropdown.
-Fill in a file name, some content, a commit message, branch name and press the commit button.
-The file will be saved to the repository.
+![New file dropdown menu](img/web_editor_new_file_dropdown.png)
-![web editor 2](web_editor/new_file.png)
+---
-You can edit any text file in a repository by pressing the edit button, when
-viewing the file.
+Enter a file name in the **File name** box. Then, add file content in the editor
+area. Add a descriptive commit message and choose a branch. The branch field
+will default to the branch you were viewing in the file browser. If you enter
+a new branch name, a checkbox will appear allowing you to start a new merge
+request after you commit the changes.
-![web editor 3](web_editor/show_file.png)
+When you are satisfied with your new file, click **Commit Changes** at the bottom.
-Editing a file is almost the same as creating a new file,
-with as addition the ability to preview your changes in a separate tab. Also you can save your change to another branch by filling out field `branch`
+![Create file editor](img/web_editor_new_file_editor.png)
-![web editor 3](web_editor/edit_file.png)
+## Upload a file
+
+The ability to create a file is great when the content is text. However, this
+doesn't work well for binary data such as images, PDFs or other file types. In
+this case you need to upload a file.
+
+From a project's files page, click the '+' button to the right of the branch
+selector. Choose **Upload file** from the dropdown.
+
+![Upload file dropdown menu](img/web_editor_upload_file_dropdown.png)
+
+---
+
+Once the upload dialog pops up there are two ways to upload your file. Either
+drag and drop a file on the pop up or use the **click to upload** link. A file
+preview will appear once you have selected a file to upload.
+
+Enter a commit message, choose a branch, and click **Upload file** when you are
+ready.
+
+![Upload file dialog](img/web_editor_upload_file_dialog.png)
+
+## Create a directory
+
+To keep files in the repository organized it is often helpful to create a new
+directory.
+
+From a project's files page, click the '+' button to the right of the branch selector.
+Choose **New directory** from the dropdown.
+
+![New directory dropdown](img/web_editor_new_directory_dropdown.png)
+
+---
+
+In the new directory dialog enter a directory name, a commit message and choose
+the target branch. Click **Create directory** to finish.
+
+![New directory dialog](img/web_editor_new_directory_dialog.png)
+
+## Create a new branch
+
+If you want to make changes to several files before creating a new merge
+request, you can create a new branch up front. From a project's files page,
+choose **New branch** from the dropdown.
+
+![New branch dropdown](img/web_editor_new_branch_dropdown.png)
+
+---
+
+Enter a new **Branch name**. Optionally, change the **Create from** field
+to choose which branch, tag or commit SHA this new branch will originate from.
+This field will autocomplete if you start typing an existing branch or tag.
+Click **Create branch** and you will be returned to the file browser on this new
+branch.
+
+![New branch page](img/web_editor_new_branch_page.png)
+
+---
+
+You can now make changes to any files, as needed. When you're ready to merge
+the changes back to master you can use the widget at the top of the screen.
+This widget only appears for a period of time after you create the branch or
+modify files.
+
+![New push widget](img/web_editor_new_push_widget.png)
+
+## Create a new tag
+
+Tags are useful for marking major milestones such as production releases,
+release candidates, and more. You can create a tag from a branch or a commit
+SHA. From a project's files page, choose **New tag** from the dropdown.
+
+![New tag dropdown](img/web_editor_new_tag_dropdown.png)
+
+---
+
+Give the tag a name such as `v1.0.0`. Choose the branch or SHA from which you
+would like to create this new tag. You can optionally add a message and
+release notes. The release notes section supports markdown format and you can
+also upload an attachment. Click **Create tag** and you will be taken to the tag
+list page.
+
+![New tag page](img/web_editor_new_tag_page.png)
+
+## Tips
+
+When creating or uploading a new file, or creating a new directory, you can
+trigger a new merge request rather than committing directly to master. Enter
+a new branch name in the **Target branch** field. You will notice a checkbox
+appear that is labeled **Start a new merge request with these changes**. After
+you commit the changes you will be taken to a new merge request form.
+
+![Start a new merge request with these changes](img/web_editor_start_new_merge_request.png)
diff --git a/doc/workflow/web_editor/edit_file.png b/doc/workflow/web_editor/edit_file.png
deleted file mode 100644
index f480c69ac3e..00000000000
--- a/doc/workflow/web_editor/edit_file.png
+++ /dev/null
Binary files differ
diff --git a/doc/workflow/web_editor/empty_project.png b/doc/workflow/web_editor/empty_project.png
deleted file mode 100644
index 6a049f6beaf..00000000000
--- a/doc/workflow/web_editor/empty_project.png
+++ /dev/null
Binary files differ
diff --git a/doc/workflow/web_editor/new_file.png b/doc/workflow/web_editor/new_file.png
deleted file mode 100644
index 55ebd9e0257..00000000000
--- a/doc/workflow/web_editor/new_file.png
+++ /dev/null
Binary files differ
diff --git a/doc/workflow/web_editor/show_file.png b/doc/workflow/web_editor/show_file.png
deleted file mode 100644
index 9cafcb55109..00000000000
--- a/doc/workflow/web_editor/show_file.png
+++ /dev/null
Binary files differ
diff --git a/features/dashboard/todos.feature b/features/dashboard/todos.feature
new file mode 100644
index 00000000000..1e7b1b50d64
--- /dev/null
+++ b/features/dashboard/todos.feature
@@ -0,0 +1,38 @@
+@dashboard
+Feature: Dashboard Todos
+ Background:
+ Given I sign in as a user
+ And I own project "Shop"
+ And "John Doe" is a developer of project "Shop"
+ And "Mary Jane" is a developer of project "Shop"
+ And "Mary Jane" owns private project "Enterprise"
+ And I am a developer of project "Enterprise"
+ And I have todos
+ And I visit dashboard todos page
+
+ @javascript
+ Scenario: I mark todos as done
+ Then I should see todos assigned to me
+ And I mark the todo as done
+ And I click on the "Done" tab
+ Then I should see all todos marked as done
+
+ @javascript
+ Scenario: I filter by project
+ Given I filter by "Enterprise"
+ Then I should not see todos
+
+ @javascript
+ Scenario: I filter by author
+ Given I filter by "John Doe"
+ Then I should not see todos related to "Mary Jane" in the list
+
+ @javascript
+ Scenario: I filter by type
+ Given I filter by "Issue"
+ Then I should not see todos related to "Merge Requests" in the list
+
+ @javascript
+ Scenario: I filter by action
+ Given I filter by "Mentioned"
+ Then I should not see todos related to "Assignments" in the list
diff --git a/features/project/builds/summary.feature b/features/project/builds/summary.feature
index b69d279517b..4f3fd194d00 100644
--- a/features/project/builds/summary.feature
+++ b/features/project/builds/summary.feature
@@ -13,3 +13,12 @@ Feature: Project Builds Summary
Scenario: I browse project builds page
When I visit project builds page
Then I see button to CI Lint
+
+ Scenario: I erase a build
+ Given recent build is successful
+ And recent build has a build trace
+ When I visit recent build details page
+ And I click erase build button
+ Then recent build has been erased
+ And recent build summary does not have artifacts widget
+ And recent build summary contains information saying that build has been erased
diff --git a/features/project/commits/revert.feature b/features/project/commits/revert.feature
new file mode 100644
index 00000000000..7a2effafe03
--- /dev/null
+++ b/features/project/commits/revert.feature
@@ -0,0 +1,28 @@
+@project_commits
+Feature: Revert Commits
+ Background:
+ Given I sign in as a user
+ And I own a project
+ And I visit my project's commits page
+
+ Scenario: I revert a commit
+ Given I click on commit link
+ And I click on the revert button
+ And I revert the changes directly
+ Then I should see the revert commit notice
+
+ Scenario: I revert a commit that was previously reverted
+ Given I click on commit link
+ And I click on the revert button
+ And I revert the changes directly
+ And I visit my project's commits page
+ And I click on commit link
+ And I click on the revert button
+ And I revert the changes directly
+ Then I should see a revert error
+
+ Scenario: I revert a commit in a new merge request
+ Given I click on commit link
+ And I click on the revert button
+ And I revert the changes in a new merge request
+ Then I should see the new merge request notice
diff --git a/features/project/fork.feature b/features/project/fork.feature
index 12695204e47..ca3f2771aa5 100644
--- a/features/project/fork.feature
+++ b/features/project/fork.feature
@@ -32,6 +32,13 @@ Feature: Project Fork
And I visit the forks page of the "Shop" project
Then I should see my fork on the list
+ Scenario: Viewing forks of a Project that has no repo
+ Given I click link "Fork"
+ When I fork to my namespace
+ And I make forked repo invalid
+ And I visit the forks page of the "Shop" project
+ Then I should see my fork on the list
+
Scenario: Viewing private forks of a Project
Given There is an existent fork of the "Shop" project
And I click link "Fork"
diff --git a/features/project/merge_requests/revert.feature b/features/project/merge_requests/revert.feature
new file mode 100644
index 00000000000..d767b088883
--- /dev/null
+++ b/features/project/merge_requests/revert.feature
@@ -0,0 +1,30 @@
+@project_merge_requests
+Feature: Revert Merge Requests
+ Background:
+ Given There is an open Merge Request
+ And I am signed in as a developer of the project
+ And I am on the Merge Request detail page
+ And I click on Accept Merge Request
+
+ @javascript
+ Scenario: I revert a merge request
+ Given I click on the revert button
+ And I revert the changes directly
+ Then I should see the revert merge request notice
+
+ @javascript
+ Scenario: I revert a merge request that was previously reverted
+ Given I click on the revert button
+ And I revert the changes directly
+ And I am on the Merge Request detail page
+ And I click on the revert button
+ And I revert the changes directly
+ Then I should see a revert error
+
+ @javascript
+ Scenario: I revert a merge request in a new merge request
+ Given I click on the revert button
+ And I am on the Merge Request detail page
+ And I click on the revert button
+ And I revert the changes in a new merge request
+ Then I should see the new merge request notice
diff --git a/features/project/milestone.feature b/features/project/milestone.feature
new file mode 100644
index 00000000000..e0f4c0e9d7c
--- /dev/null
+++ b/features/project/milestone.feature
@@ -0,0 +1,23 @@
+Feature: Project Milestone
+ Background:
+ Given I sign in as a user
+ And I own project "Shop"
+ And project "Shop" has labels: "bug", "feature", "enhancement"
+ And project "Shop" has milestone "v2.2"
+ And milestone has issue "Bugfix1" with labels: "bug", "feature"
+ And milestone has issue "Bugfix2" with labels: "bug", "enhancement"
+
+
+ @javascript
+ Scenario: Listing issues from issues tab
+ Given I visit project "Shop" milestones page
+ And I click link "v2.2"
+ Then I should see the labels "bug", "enhancement" and "feature"
+
+ @javascript
+ Scenario: Listing labels from labels tab
+ Given I visit project "Shop" milestones page
+ And I click link "v2.2"
+ And I click link "Labels"
+ Then I should see the list of labels
+ And I should see the labels "bug", "enhancement" and "feature"
diff --git a/features/steps/dashboard/todos.rb b/features/steps/dashboard/todos.rb
new file mode 100644
index 00000000000..9722a5a848c
--- /dev/null
+++ b/features/steps/dashboard/todos.rb
@@ -0,0 +1,128 @@
+class Spinach::Features::DashboardTodos < Spinach::FeatureSteps
+ include SharedAuthentication
+ include SharedPaths
+ include SharedProject
+ include SharedUser
+ include Select2Helper
+
+ step '"John Doe" is a developer of project "Shop"' do
+ project.team << [john_doe, :developer]
+ end
+
+ step 'I am a developer of project "Enterprise"' do
+ enterprise.team << [current_user, :developer]
+ end
+
+ step '"Mary Jane" is a developer of project "Shop"' do
+ project.team << [john_doe, :developer]
+ end
+
+ step 'I have todos' do
+ create(:todo, user: current_user, project: project, author: mary_jane, target: issue, action: Todo::MENTIONED)
+ create(:todo, user: current_user, project: project, author: john_doe, target: issue, action: Todo::ASSIGNED)
+ note = create(:note, author: john_doe, noteable: issue, note: "#{current_user.to_reference} Wdyt?")
+ create(:todo, user: current_user, project: project, author: john_doe, target: issue, action: Todo::MENTIONED, note: note)
+ create(:todo, user: current_user, project: project, author: john_doe, target: merge_request, action: Todo::ASSIGNED)
+ end
+
+ step 'I should see todos assigned to me' do
+ expect(page).to have_content 'To do 4'
+ expect(page).to have_content 'Done 0'
+
+ expect(page).to have_link project.name_with_namespace
+ should_see_todo(1, "John Doe assigned you merge request !#{merge_request.iid}", merge_request.title)
+ should_see_todo(2, "John Doe mentioned you on issue ##{issue.iid}", "#{current_user.to_reference} Wdyt?")
+ should_see_todo(3, "John Doe assigned you issue ##{issue.iid}", issue.title)
+ should_see_todo(4, "Mary Jane mentioned you on issue ##{issue.iid}", issue.title)
+ end
+
+ step 'I mark the todo as done' do
+ page.within('.todo:nth-child(1)') do
+ click_link 'Done'
+ end
+
+ expect(page).to have_content 'Todo was successfully marked as done.'
+ expect(page).to have_content 'To do 3'
+ expect(page).to have_content 'Done 1'
+ should_not_see_todo "John Doe assigned you merge request !#{merge_request.iid}"
+ end
+
+ step 'I click on the "Done" tab' do
+ click_link 'Done 1'
+ end
+
+ step 'I should see all todos marked as done' do
+ expect(page).to have_link project.name_with_namespace
+ should_see_todo(1, "John Doe assigned you merge request !#{merge_request.iid}", merge_request.title, false)
+ end
+
+ step 'I filter by "Enterprise"' do
+ select2(enterprise.id, from: "#project_id")
+ end
+
+ step 'I filter by "John Doe"' do
+ select2(john_doe.id, from: "#author_id")
+ end
+
+ step 'I filter by "Issue"' do
+ select2('Issue', from: "#type")
+ end
+
+ step 'I filter by "Mentioned"' do
+ select2("#{Todo::MENTIONED}", from: '#action_id')
+ end
+
+ step 'I should not see todos' do
+ expect(page).to have_content "You're all done!"
+ end
+
+ step 'I should not see todos related to "Mary Jane" in the list' do
+ should_not_see_todo "Mary Jane mentioned you on issue ##{issue.iid}"
+ end
+
+ step 'I should not see todos related to "Merge Requests" in the list' do
+ should_not_see_todo "John Doe assigned you merge request !#{merge_request.iid}"
+ end
+
+ step 'I should not see todos related to "Assignments" in the list' do
+ should_not_see_todo "John Doe assigned you merge request !#{merge_request.iid}"
+ should_not_see_todo "John Doe assigned you issue ##{issue.iid}"
+ end
+
+ def should_see_todo(position, title, body, pending = true)
+ page.within(".todo:nth-child(#{position})") do
+ expect(page).to have_content title
+ expect(page).to have_content body
+
+ if pending
+ expect(page).to have_link 'Done'
+ else
+ expect(page).to_not have_link 'Done'
+ end
+ end
+ end
+
+ def should_not_see_todo(title)
+ expect(page).not_to have_content title
+ end
+
+ def john_doe
+ @john_doe ||= user_exists("John Doe", { username: "john_doe" })
+ end
+
+ def mary_jane
+ @mary_jane ||= user_exists("Mary Jane", { username: "mary_jane" })
+ end
+
+ def enterprise
+ @enterprise ||= Project.find_by(name: 'Enterprise')
+ end
+
+ def issue
+ @issue ||= create(:issue, assignee: current_user, project: project)
+ end
+
+ def merge_request
+ @merge_request ||= create(:merge_request, assignee: current_user, source_project: project)
+ end
+end
diff --git a/features/steps/project/builds/summary.rb b/features/steps/project/builds/summary.rb
index 4f94fc96354..4688a0e2096 100644
--- a/features/steps/project/builds/summary.rb
+++ b/features/steps/project/builds/summary.rb
@@ -10,4 +10,24 @@ class Spinach::Features::ProjectBuildsSummary < Spinach::FeatureSteps
expect(ci_lint_tool_link[:href]).to eq ci_lint_path
end
end
+
+ step 'I click erase build button' do
+ click_link 'Erase'
+ end
+
+ step 'recent build has been erased' do
+ expect(@build.artifacts_file.exists?).to be_falsy
+ expect(@build.artifacts_metadata.exists?).to be_falsy
+ expect(@build.trace).to be_empty
+ end
+
+ step 'recent build summary does not have artifacts widget' do
+ expect(page).to have_no_css('.artifacts')
+ end
+
+ step 'recent build summary contains information saying that build has been erased' do
+ page.within('.erased') do
+ expect(page).to have_content 'Build has been erased'
+ end
+ end
end
diff --git a/features/steps/project/commits/revert.rb b/features/steps/project/commits/revert.rb
new file mode 100644
index 00000000000..94a5d4e2e4d
--- /dev/null
+++ b/features/steps/project/commits/revert.rb
@@ -0,0 +1,40 @@
+class Spinach::Features::RevertCommits < Spinach::FeatureSteps
+ include SharedAuthentication
+ include SharedProject
+ include SharedPaths
+ include SharedDiffNote
+ include RepoHelpers
+
+ step 'I click on commit link' do
+ visit namespace_project_commit_path(@project.namespace, @project, sample_commit.id)
+ end
+
+ step 'I click on the revert button' do
+ find("a[href='#modal-revert-commit']").click
+ end
+
+ step 'I revert the changes directly' do
+ page.within('#modal-revert-commit') do
+ uncheck 'create_merge_request'
+ click_button 'Revert'
+ end
+ end
+
+ step 'I should see the revert commit notice' do
+ page.should have_content('The commit has been successfully reverted.')
+ end
+
+ step 'I should see a revert error' do
+ page.should have_content('Sorry, we cannot revert this commit automatically.')
+ end
+
+ step 'I revert the changes in a new merge request' do
+ page.within('#modal-revert-commit') do
+ click_button 'Revert'
+ end
+ end
+
+ step 'I should see the new merge request notice' do
+ page.should have_content('The commit has been successfully reverted. You can now submit a merge request to get this change into the original branch.')
+ end
+end
diff --git a/features/steps/project/fork.rb b/features/steps/project/fork.rb
index 5810276ced3..527f7853da9 100644
--- a/features/steps/project/fork.rb
+++ b/features/steps/project/fork.rb
@@ -62,6 +62,12 @@ class Spinach::Features::ProjectFork < Spinach::FeatureSteps
end
end
+ step 'I make forked repo invalid' do
+ project = @user.fork_of(@project)
+ project.path = 'test-crappy-path'
+ project.save!
+ end
+
step 'There is an existent fork of the "Shop" project' do
user = create(:user, name: 'Mike')
@forked_project = Projects::ForkService.new(@project, user).execute
diff --git a/features/steps/project/issues/issues.rb b/features/steps/project/issues/issues.rb
index 54d64bacc52..565bf088b41 100644
--- a/features/steps/project/issues/issues.rb
+++ b/features/steps/project/issues/issues.rb
@@ -214,7 +214,7 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps
page.within 'li.issue:nth-child(3)' do
expect(page).to have_content 'Bugfix'
- expect(page).to have_content '0 0'
+ expect(page).to_not have_content '0 0'
end
end
end
@@ -233,7 +233,7 @@ class Spinach::Features::ProjectIssues < Spinach::FeatureSteps
page.within 'li.issue:nth-child(3)' do
expect(page).to have_content 'Bugfix'
- expect(page).to have_content '0 0'
+ expect(page).to_not have_content '0 0'
end
end
end
diff --git a/features/steps/project/merge_requests.rb b/features/steps/project/merge_requests.rb
index 2160d8645fd..dde864f5180 100644
--- a/features/steps/project/merge_requests.rb
+++ b/features/steps/project/merge_requests.rb
@@ -164,7 +164,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
page.within 'li.merge-request:nth-child(3)' do
expect(page).to have_content 'Bug NS-05'
- expect(page).to have_content '0 0'
+ expect(page).to_not have_content '0 0'
end
end
end
@@ -183,7 +183,7 @@ class Spinach::Features::ProjectMergeRequests < Spinach::FeatureSteps
page.within 'li.merge-request:nth-child(3)' do
expect(page).to have_content 'Bug NS-05'
- expect(page).to have_content '0 0'
+ expect(page).to_not have_content '0 0'
end
end
end
diff --git a/features/steps/project/merge_requests/revert.rb b/features/steps/project/merge_requests/revert.rb
new file mode 100644
index 00000000000..c5a4cfce6f0
--- /dev/null
+++ b/features/steps/project/merge_requests/revert.rb
@@ -0,0 +1,56 @@
+class Spinach::Features::RevertMergeRequests < Spinach::FeatureSteps
+ include LoginHelpers
+ include GitlabRoutingHelper
+
+ step 'I click on the revert button' do
+ find("a[href='#modal-revert-commit']").click
+ end
+
+ step 'I revert the changes directly' do
+ page.within('#modal-revert-commit') do
+ uncheck 'create_merge_request'
+ click_button 'Revert'
+ end
+ end
+
+ step 'I should see the revert merge request notice' do
+ page.should have_content('The merge request has been successfully reverted.')
+ end
+
+ step 'I should not see the revert button' do
+ expect(page).not_to have_selector(:xpath, "a[href='#modal-revert-commit']")
+ end
+
+ step 'I am on the Merge Request detail page' do
+ visit merge_request_path(@merge_request)
+ end
+
+ step 'I click on Accept Merge Request' do
+ click_button('Accept Merge Request')
+ end
+
+ step 'I am signed in as a developer of the project' do
+ login_as(@user)
+ end
+
+ step 'There is an open Merge Request' do
+ @user = create(:user)
+ @project = create(:project, :public)
+ @project_member = create(:project_member, user: @user, project: @project, access_level: ProjectMember::DEVELOPER)
+ @merge_request = create(:merge_request, :with_diffs, :simple, source_project: @project)
+ end
+
+ step 'I should see a revert error' do
+ page.should have_content('Sorry, we cannot revert this merge request automatically.')
+ end
+
+ step 'I revert the changes in a new merge request' do
+ page.within('#modal-revert-commit') do
+ click_button 'Revert'
+ end
+ end
+
+ step 'I should see the new merge request notice' do
+ page.should have_content('The merge request has been successfully reverted. You can now submit a merge request to get this change into the original branch.')
+ end
+end
diff --git a/features/steps/project/project_milestone.rb b/features/steps/project/project_milestone.rb
new file mode 100644
index 00000000000..ec881c0d8fc
--- /dev/null
+++ b/features/steps/project/project_milestone.rb
@@ -0,0 +1,53 @@
+class Spinach::Features::ProjectMilestone < Spinach::FeatureSteps
+ include SharedAuthentication
+ include SharedProject
+ include SharedPaths
+
+ step 'milestone has issue "Bugfix1" with labels: "bug", "feature"' do
+ project = Project.find_by(name: "Shop")
+ milestone = project.milestones.find_by(title: 'v2.2')
+ issue = create(:issue, title: "Bugfix1", project: project, milestone: milestone)
+ issue.labels << project.labels.find_by(title: 'bug')
+ issue.labels << project.labels.find_by(title: 'feature')
+ end
+
+ step 'milestone has issue "Bugfix2" with labels: "bug", "enhancement"' do
+ project = Project.find_by(name: "Shop")
+ milestone = project.milestones.find_by(title: 'v2.2')
+ issue = create(:issue, title: "Bugfix2", project: project, milestone: milestone)
+ issue.labels << project.labels.find_by(title: 'bug')
+ issue.labels << project.labels.find_by(title: 'enhancement')
+ end
+
+ step 'project "Shop" has milestone "v2.2"' do
+ project = Project.find_by(name: "Shop")
+ milestone = create(:milestone,
+ title: "v2.2",
+ project: project,
+ description: "# Description header"
+ )
+ 3.times { create(:issue, project: project, milestone: milestone) }
+ end
+
+ step 'I should see the list of labels' do
+ expect(page).to have_selector('ul.manage-labels-list')
+ end
+
+ step 'I should see the labels "bug", "enhancement" and "feature"' do
+ page.within('#tab-issues') do
+ expect(page).to have_content 'bug'
+ expect(page).to have_content 'enhancement'
+ expect(page).to have_content 'feature'
+ end
+ end
+
+ step 'I click link "v2.2"' do
+ click_link "v2.2"
+ end
+
+ step 'I click link "Labels"' do
+ page.within('.nav-links') do
+ page.find(:xpath, "//a[@href='#tab-labels']").click
+ end
+ end
+end
diff --git a/features/steps/shared/builds.rb b/features/steps/shared/builds.rb
index fa54c93df0f..0bd5d93b997 100644
--- a/features/steps/shared/builds.rb
+++ b/features/steps/shared/builds.rb
@@ -42,6 +42,10 @@ module SharedBuilds
@build.update_attributes(artifacts_metadata: gzip)
end
+ step 'recent build has a build trace' do
+ @build.trace = 'build trace'
+ end
+
step 'download of build artifacts archive starts' do
expect(page.response_headers['Content-Type']).to eq 'application/zip'
expect(page.response_headers['Content-Transfer-Encoding']).to eq 'binary'
diff --git a/features/steps/shared/paths.rb b/features/steps/shared/paths.rb
index 2c854ac7bf9..f4df4874d2f 100644
--- a/features/steps/shared/paths.rb
+++ b/features/steps/shared/paths.rb
@@ -103,6 +103,10 @@ module SharedPaths
visit dashboard_groups_path
end
+ step 'I visit dashboard todos page' do
+ visit dashboard_todos_path
+ end
+
step 'I should be redirected to the dashboard groups page' do
expect(current_path).to eq dashboard_groups_path
end
diff --git a/fixtures/emojis/aliases.json b/fixtures/emojis/aliases.json
index 547ce7978b3..d3831d8045b 100644
--- a/fixtures/emojis/aliases.json
+++ b/fixtures/emojis/aliases.json
@@ -1,22 +1,35 @@
-{
+{
"northeast_pointing_airplane":"airplane_northeast",
"small_airplane":"airplane_small",
"up_pointing_small_airplane":"airplane_small_up",
"up_pointing_airplane":"airplane_up",
"left_anger_bubble":"anger_left",
"right_anger_bubble":"anger_right",
+ "keycap_asterisk":"asterisk",
+ "atom_symbol":"atom",
"ballot_box_with_ballot":"ballot_box",
"ballot_box_with_bold_check":"ballot_box_check",
"ballot_box_with_script_x":"ballot_box_x",
"ballot_script_x":"ballot_x",
+ "person_with_ball":"basketball_player",
+ "person_with_ball_tone1":"basketball_player_tone1",
+ "person_with_ball_tone2":"basketball_player_tone2",
+ "person_with_ball_tone3":"basketball_player_tone3",
+ "person_with_ball_tone4":"basketball_player_tone4",
+ "person_with_ball_tone5":"basketball_player_tone5",
"beach_with_umbrella":"beach",
+ "umbrella_on_ground":"beach_umbrella",
"bellhop_bell":"bellhop",
+ "biohazard_sign":"biohazard",
"bouquet_of_flowers":"bouquet2",
+ "archery":"bow_and_arrow",
"bullhorn_with_sound_waves":"bullhorn_waves",
"pocket calculator":"calculator",
"spiral_calendar_pad":"calendar_spiral",
"card_file_box":"card_box",
"tape_cartridge":"cartridge",
+ "bottle_with_popping_cork":"champagne",
+ "cheese_wedge":"cheese",
"city_sunrise":"city_sunset",
"mantlepiece_clock":"clock",
"clockwise_right_and_left_semicircle_arrows":"clockwise_arrows",
@@ -30,6 +43,8 @@
"couple_with_heart_mm":"couple_mm",
"couple_with_heart_ww":"couple_ww",
"lower_left_crayon":"crayon",
+ "cricket_bat_ball":"cricket",
+ "latin_cross":"cross",
"heavy_latin_cross":"cross_heavy",
"white_latin_cross":"cross_white",
"black_skull_and_crossbones":"crossbones",
@@ -60,10 +75,13 @@
"al":"flag_al",
"am":"flag_am",
"ao":"flag_ao",
+ "aq":"flag_aq",
"ar":"flag_ar",
+ "as":"flag_as",
"at":"flag_at",
"au":"flag_au",
"aw":"flag_aw",
+ "ax":"flag_ax",
"az":"flag_az",
"ba":"flag_ba",
"bb":"flag_bb",
@@ -74,37 +92,47 @@
"bh":"flag_bh",
"bi":"flag_bi",
"bj":"flag_bj",
+ "bl":"flag_bl",
"waving_black_flag":"flag_black",
"bm":"flag_bm",
"bn":"flag_bn",
"bo":"flag_bo",
+ "bq":"flag_bq",
"br":"flag_br",
"bs":"flag_bs",
"bt":"flag_bt",
+ "bv":"flag_bv",
"bw":"flag_bw",
"by":"flag_by",
"bz":"flag_bz",
"ca":"flag_ca",
+ "cc":"flag_cc",
"congo":"flag_cd",
"cf":"flag_cf",
"cg":"flag_cg",
"ch":"flag_ch",
"ci":"flag_ci",
+ "ck":"flag_ck",
"chile":"flag_cl",
"cm":"flag_cm",
"cn":"flag_cn",
"co":"flag_co",
+ "cp":"flag_cp",
"cr":"flag_cr",
"cu":"flag_cu",
"cv":"flag_cv",
+ "cw":"flag_cw",
+ "cx":"flag_cx",
"cy":"flag_cy",
"cz":"flag_cz",
"de":"flag_de",
+ "dg":"flag_dg",
"dj":"flag_dj",
"dk":"flag_dk",
"dm":"flag_dm",
"do":"flag_do",
"dz":"flag_dz",
+ "ea":"flag_ea",
"ec":"flag_ec",
"ee":"flag_ee",
"eg":"flag_eg",
@@ -112,6 +140,7 @@
"er":"flag_er",
"es":"flag_es",
"et":"flag_et",
+ "eu":"flag_eu",
"fi":"flag_fi",
"fj":"flag_fj",
"fk":"flag_fk",
@@ -122,26 +151,34 @@
"gb":"flag_gb",
"gd":"flag_gd",
"ge":"flag_ge",
+ "gf":"flag_gf",
+ "gg":"flag_gg",
"gh":"flag_gh",
"gi":"flag_gi",
"gl":"flag_gl",
"gm":"flag_gm",
"gn":"flag_gn",
+ "gp":"flag_gp",
"gq":"flag_gq",
"gr":"flag_gr",
+ "gs":"flag_gs",
"gt":"flag_gt",
"gu":"flag_gu",
"gw":"flag_gw",
"gy":"flag_gy",
"hk":"flag_hk",
+ "hm":"flag_hm",
"hn":"flag_hn",
"hr":"flag_hr",
"ht":"flag_ht",
"hu":"flag_hu",
+ "ic":"flag_ic",
"indonesia":"flag_id",
"ie":"flag_ie",
"il":"flag_il",
+ "im":"flag_im",
"in":"flag_in",
+ "io":"flag_io",
"iq":"flag_iq",
"ir":"flag_ir",
"is":"flag_is",
@@ -176,6 +213,7 @@
"mc":"flag_mc",
"md":"flag_md",
"me":"flag_me",
+ "mf":"flag_mf",
"mg":"flag_mg",
"mh":"flag_mh",
"mk":"flag_mk",
@@ -183,6 +221,8 @@
"mm":"flag_mm",
"mn":"flag_mn",
"mo":"flag_mo",
+ "mp":"flag_mp",
+ "mq":"flag_mq",
"mr":"flag_mr",
"ms":"flag_ms",
"mt":"flag_mt",
@@ -195,6 +235,7 @@
"na":"flag_na",
"nc":"flag_nc",
"ne":"flag_ne",
+ "nf":"flag_nf",
"nigeria":"flag_ng",
"ni":"flag_ni",
"nl":"flag_nl",
@@ -211,12 +252,15 @@
"ph":"flag_ph",
"pk":"flag_pk",
"pl":"flag_pl",
+ "pm":"flag_pm",
+ "pn":"flag_pn",
"pr":"flag_pr",
"ps":"flag_ps",
"pt":"flag_pt",
"pw":"flag_pw",
"py":"flag_py",
"qa":"flag_qa",
+ "re":"flag_re",
"ro":"flag_ro",
"rs":"flag_rs",
"ru":"flag_ru",
@@ -230,20 +274,27 @@
"sg":"flag_sg",
"sh":"flag_sh",
"si":"flag_si",
+ "sj":"flag_sj",
"sk":"flag_sk",
"sl":"flag_sl",
"sm":"flag_sm",
"sn":"flag_sn",
"so":"flag_so",
"sr":"flag_sr",
+ "ss":"flag_ss",
"st":"flag_st",
"sv":"flag_sv",
+ "sx":"flag_sx",
"sy":"flag_sy",
"sz":"flag_sz",
+ "ta":"flag_ta",
+ "tc":"flag_tc",
"td":"flag_td",
+ "tf":"flag_tf",
"tg":"flag_tg",
"th":"flag_th",
"tj":"flag_tj",
+ "tk":"flag_tk",
"tl":"flag_tl",
"turkmenistan":"flag_tm",
"tn":"flag_tn",
@@ -255,12 +306,14 @@
"tz":"flag_tz",
"ua":"flag_ua",
"ug":"flag_ug",
+ "um":"flag_um",
"us":"flag_us",
"uy":"flag_uy",
"uz":"flag_uz",
"va":"flag_va",
"vc":"flag_vc",
"ve":"flag_ve",
+ "vg":"flag_vg",
"vi":"flag_vi",
"vn":"flag_vn",
"vu":"flag_vu",
@@ -269,6 +322,7 @@
"ws":"flag_ws",
"xk":"flag_xk",
"ye":"flag_ye",
+ "yt":"flag_yt",
"za":"flag_za",
"zm":"flag_zm",
"zw":"flag_zw",
@@ -281,12 +335,24 @@
"frame_with_tiles":"frame_tiles",
"frame_with_an_x":"frame_x",
"anguished":"frowning",
+ "white_frowning_face":"frowning2",
+ "hammer_and_pick":"hammer_pick",
"raised_hand_with_fingers_splayed":"hand_splayed",
"reversed_raised_hand_with_fingers_splayed":"hand_splayed_reverse",
+ "raised_hand_with_fingers_splayed_tone1":"hand_splayed_tone1",
+ "raised_hand_with_fingers_splayed_tone2":"hand_splayed_tone2",
+ "raised_hand_with_fingers_splayed_tone3":"hand_splayed_tone3",
+ "raised_hand_with_fingers_splayed_tone4":"hand_splayed_tone4",
+ "raised_hand_with_fingers_splayed_tone5":"hand_splayed_tone5",
"reversed_victory_hand":"hand_victory",
+ "face_with_head_bandage":"head_bandage",
+ "heavy_heart_exclamation_mark_ornament":"heart_exclamation",
"heart_with_tip_on_the_left":"heart_tip",
+ "helmet_with_white_cross":"helmet_with_cross",
"house_buildings":"homes",
+ "hot_dog":"hotdog",
"derelict_house_building":"house_abandoned",
+ "hugging_face":"hugging",
"circled_information_source":"info",
"desert_island":"island",
"up_pointing_military_airplane":"jet_up",
@@ -300,16 +366,36 @@
"left_hand_telephone_receiver":"left_receiver",
"man_in_business_suit_levitating":"levitate",
"weight_lifter":"lifter",
+ "weight_lifter_tone1":"lifter_tone1",
+ "weight_lifter_tone2":"lifter_tone2",
+ "weight_lifter_tone3":"lifter_tone3",
+ "weight_lifter_tone4":"lifter_tone4",
+ "weight_lifter_tone5":"lifter_tone5",
"light_mark":"light_check_mark",
+ "lion":"lion_face",
"world_map":"map",
"sports_medal":"medal",
+ "sign_of_the_horns":"metal",
+ "sign_of_the_horns_tone1":"metal_tone1",
+ "sign_of_the_horns_tone2":"metal_tone2",
+ "sign_of_the_horns_tone3":"metal_tone3",
+ "sign_of_the_horns_tone4":"metal_tone4",
+ "sign_of_the_horns_tone5":"metal_tone5",
"studio_microphone":"microphone2",
"reversed_hand_with_middle_finger_extended":"middle_finger",
+ "reversed_hand_with_middle_finger_extended_tone1":"middle_finger_tone1",
+ "reversed_hand_with_middle_finger_extended_tone2":"middle_finger_tone2",
+ "reversed_hand_with_middle_finger_extended_tone3":"middle_finger_tone3",
+ "reversed_hand_with_middle_finger_extended_tone4":"middle_finger_tone4",
+ "reversed_hand_with_middle_finger_extended_tone5":"middle_finger_tone5",
+ "money_mouth_face":"money_mouth",
"lightning_mood_bubble":"mood_bubble_lightning",
"lightning_mood":"mood_lightning",
"racing_motorcycle":"motorcycle",
"snow_capped_mountain":"mountain_snow",
"one_button_mouse":"mouse_one",
+ "three_button_mouse":"mouse_three_button",
+ "nerd_face":"nerd",
"three_networked_computers":"network",
"rolled_up_newspaper":"newspaper2",
"note_page":"note",
@@ -319,27 +405,40 @@
"spiral_note_pad":"notepad_spiral",
"oil_drum":"oil",
"grandma":"older_woman",
+ "grandma_tone1":"older_woman_tone1",
+ "grandma_tone2":"older_woman_tone2",
+ "grandma_tone3":"older_woman_tone3",
+ "grandma_tone4":"older_woman_tone4",
+ "grandma_tone5":"older_woman_tone5",
"optical_disc_icon":"optical_disk",
"lower_left_paintbrush":"paintbrush",
"linked_paperclips":"paperclips",
"national_park":"park",
+ "double_vertical_bar":"pause_button",
+ "peace_symbol":"peace",
"lower_left_ballpoint_pen":"pen_ballpoint",
"lower_left_fountain_pen":"pen_fountain",
"memo":"pencil",
"lower_left_pencil":"pencil3",
"black_pennant":"pennant_black",
"white_pennant":"pennant_white",
+ "table_tennis":"ping_pong",
"no_piracy":"piracy",
+ "worship_symbol":"place_of_worship",
"shit":"poop",
"hankey":"poop",
"poo":"poop",
"prohibited_sign":"prohibited",
"film_projector":"projector",
"racing_car":"race_car",
+ "radioactive_sign":"radioactive",
"railroad_track":"railway_track",
"right_speaker_with_one_sound_wave":"right_speaker_one",
"right_speaker_with_three_sound_waves":"right_speaker_three",
+ "robot_face":"robot",
+ "face_with_rolling_eyes":"rolling_eyes",
"skeleton":"skull",
+ "skull_and_crossbones":"skull_crossbones",
"slightly_frowning_face":"slight_frown",
"slightly_smiling_face":"slight_smile",
"speaking_head_in_silhouette":"speaking_head",
@@ -348,20 +447,53 @@
"three_speech_bubbles":"speech_three",
"two_speech_bubbles":"speech_two",
"sleuth_or_spy":"spy",
+ "sleuth_or_spy_tone1":"spy_tone1",
+ "sleuth_or_spy_tone2":"spy_tone2",
+ "sleuth_or_spy_tone3":"spy_tone3",
+ "sleuth_or_spy_tone4":"spy_tone4",
+ "sleuth_or_spy_tone5":"spy_tone5",
"portable_stereo":"stereo",
"black_touchtone_telephone":"telephone_black",
"white_touchtone_telephone":"telephone_white",
+ "face_with_thermometer":"thermometer_face",
+ "thinking_face":"thinking",
"left_thought_bubble":"thought_left",
"right_thought_bubble":"thought_right",
"reversed_thumbs_down_sign":"thumbs_down_reverse",
"reversed_thumbs_up_sign":"thumbs_up_reverse",
"-1":"thumbsdown",
+ "-1_tone1":"thumbsdown_tone1",
+ "-1_tone2":"thumbsdown_tone2",
+ "-1_tone3":"thumbsdown_tone3",
+ "-1_tone4":"thumbsdown_tone4",
+ "-1_tone5":"thumbsdown_tone5",
"+1":"thumbsup",
+ "+1_tone1":"thumbsup_tone1",
+ "+1_tone2":"thumbsup_tone2",
+ "+1_tone3":"thumbsup_tone3",
+ "+1_tone4":"thumbsup_tone4",
+ "+1_tone5":"thumbsup_tone5",
+ "thunder_cloud_and_rain":"thunder_cloud_rain",
"admission_tickets":"tickets",
+ "timer_clock":"timer",
"hammer_and_wrench":"tools",
+ "next_track":"track_next",
+ "previous_track":"track_previous",
"diesel_locomotive":"train_diesel",
"triangle_with_rounded_corners":"triangle_round",
"turned_ok_hand_sign":"turned_ok_hand",
+ "unicorn_face":"unicorn",
+ "upside_down_face":"upside_down",
+ "funeral_urn":"urn",
"raised_hand_with_part_between_middle_and_ring_fingers":"vulcan",
- "left_writing_hand":"writing_hand"
-} \ No newline at end of file
+ "raised_hand_with_part_between_middle_and_ring_fingers_tone1":"vulcan_tone1",
+ "raised_hand_with_part_between_middle_and_ring_fingers_tone2":"vulcan_tone2",
+ "raised_hand_with_part_between_middle_and_ring_fingers_tone3":"vulcan_tone3",
+ "raised_hand_with_part_between_middle_and_ring_fingers_tone4":"vulcan_tone4",
+ "raised_hand_with_part_between_middle_and_ring_fingers_tone5":"vulcan_tone5",
+ "white_sun_behind_cloud":"white_sun_cloud",
+ "white_sun_behind_cloud_with_rain":"white_sun_rain_cloud",
+ "white_sun_with_small_cloud":"white_sun_small_cloud",
+ "left_writing_hand":"writing_hand",
+ "zipper_mouth_face":"zipper_mouth"
+}
diff --git a/fixtures/emojis/generate_aliases.rb b/fixtures/emojis/generate_aliases.rb
new file mode 100755
index 00000000000..8838fb9a3af
--- /dev/null
+++ b/fixtures/emojis/generate_aliases.rb
@@ -0,0 +1,18 @@
+#!/usr/bin/env ruby
+
+require 'json'
+
+aliases = {}
+
+index_file = File.expand_path("./index.json")
+index = JSON.parse(File.read(index_file))
+
+index.each_pair do |key, data|
+ data['aliases'].each do |a|
+ a.tr!(':', '')
+
+ aliases[a] = key
+ end
+end
+
+puts JSON.pretty_generate(aliases, indent: ' ', space: '', space_before: '')
diff --git a/fixtures/emojis/index.json b/fixtures/emojis/index.json
index 60ef2399e14..7f204c1a8e0 100644
--- a/fixtures/emojis/index.json
+++ b/fixtures/emojis/index.json
@@ -7,7 +7,21 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["numbers", "perfect", "score", "100", "percent", "a", "plus", "perfect", "school", "quiz", "score", "test", "exam"],
+ "keywords": [
+ "numbers",
+ "perfect",
+ "score",
+ "100",
+ "percent",
+ "a",
+ "plus",
+ "perfect",
+ "school",
+ "quiz",
+ "score",
+ "test",
+ "exam"
+ ],
"moji": "💯"
},
"1234": {
@@ -18,7 +32,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "numbers"],
+ "keywords": [
+ "blue-square",
+ "numbers"
+ ],
"moji": "🔢"
},
"8ball": {
@@ -29,7 +46,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["pool", "billiards", "eight ball", "pool", "pocket ball", "cue"],
+ "keywords": [
+ "pool",
+ "billiards",
+ "eight ball",
+ "pool",
+ "pocket ball",
+ "cue"
+ ],
"moji": "🎱"
},
"a": {
@@ -40,7 +64,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "letter", "red-square"],
+ "keywords": [
+ "alphabet",
+ "letter",
+ "red-square"
+ ],
"moji": "🅰"
},
"ab": {
@@ -51,7 +79,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "red-square"],
+ "keywords": [
+ "alphabet",
+ "red-square"
+ ],
"moji": "🆎"
},
"abc": {
@@ -62,7 +93,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "blue-square"],
+ "keywords": [
+ "alphabet",
+ "blue-square"
+ ],
"moji": "🔤"
},
"abcd": {
@@ -73,7 +107,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "blue-square"],
+ "keywords": [
+ "alphabet",
+ "blue-square"
+ ],
"moji": "🔡"
},
"accept": {
@@ -84,7 +121,14 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["agree", "chinese", "good", "kanji", "ok", "yes"],
+ "keywords": [
+ "agree",
+ "chinese",
+ "good",
+ "kanji",
+ "ok",
+ "yes"
+ ],
"moji": "🉑"
},
"aerial_tramway": {
@@ -95,18 +139,42 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "aerial", "tram", "tramway", "cable", "transport"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "aerial",
+ "tram",
+ "tramway",
+ "cable",
+ "transport"
+ ],
"moji": "🚡"
},
"airplane": {
"unicode": "2708",
- "unicode_alternates": ["2708-FE0F"],
+ "unicode_alternates": [
+ "2708-FE0F"
+ ],
"name": "airplane",
"shortname": ":airplane:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flight", "transportation", "vehicle", "airplane", "plane", "airport", "travel", "airlines", "fly", "jet", "jumbo", "boeing", "airbus"],
+ "keywords": [
+ "flight",
+ "transportation",
+ "vehicle",
+ "airplane",
+ "plane",
+ "airport",
+ "travel",
+ "airlines",
+ "fly",
+ "jet",
+ "jumbo",
+ "boeing",
+ "airbus"
+ ],
"moji": "✈"
},
"airplane_arriving": {
@@ -117,7 +185,20 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flight", "transportation", "vehicle", "plane", "airport", "travel", "airlines", "fly", "jet", "jumbo", "boeing", "airbus"]
+ "keywords": [
+ "flight",
+ "transportation",
+ "vehicle",
+ "plane",
+ "airport",
+ "travel",
+ "airlines",
+ "fly",
+ "jet",
+ "jumbo",
+ "boeing",
+ "airbus"
+ ]
},
"airplane_departure": {
"unicode": "1F6EB",
@@ -127,7 +208,21 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flight", "transportation", "vehicle", "plane", "airport", "travel", "airlines", "fly", "jet", "jumbo", "boeing", "airbus", "leaving"]
+ "keywords": [
+ "flight",
+ "transportation",
+ "vehicle",
+ "plane",
+ "airport",
+ "travel",
+ "airlines",
+ "fly",
+ "jet",
+ "jumbo",
+ "boeing",
+ "airbus",
+ "leaving"
+ ]
},
"airplane_northeast": {
"unicode": "1F6EA",
@@ -135,9 +230,14 @@
"name": "northeast-pointing airplane",
"shortname": ":airplane_northeast:",
"category": "travel_places",
- "aliases": [":northeast_pointing_airplane:"],
+ "aliases": [
+ ":northeast_pointing_airplane:"
+ ],
"aliases_ascii": [],
- "keywords": ["plane", "travel"]
+ "keywords": [
+ "plane",
+ "travel"
+ ]
},
"airplane_small": {
"unicode": "1F6E9",
@@ -145,9 +245,24 @@
"name": "small airplane",
"shortname": ":airplane_small:",
"category": "travel_places",
- "aliases": [":small_airplane:"],
- "aliases_ascii": [],
- "keywords": ["flight", "transportation", "vehicle", "plane", "airport", "travel", "airlines", "fly", "jet", "jumbo", "boeing", "airbus"]
+ "aliases": [
+ ":small_airplane:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "flight",
+ "transportation",
+ "vehicle",
+ "plane",
+ "airport",
+ "travel",
+ "airlines",
+ "fly",
+ "jet",
+ "jumbo",
+ "boeing",
+ "airbus"
+ ]
},
"airplane_small_up": {
"unicode": "1F6E8",
@@ -155,9 +270,14 @@
"name": "up-pointing small airplane",
"shortname": ":airplane_small_up:",
"category": "travel_places",
- "aliases": [":up_pointing_small_airplane:"],
+ "aliases": [
+ ":up_pointing_small_airplane:"
+ ],
"aliases_ascii": [],
- "keywords": ["plane", "travel"]
+ "keywords": [
+ "plane",
+ "travel"
+ ]
},
"airplane_up": {
"unicode": "1F6E7",
@@ -165,9 +285,14 @@
"name": "up-pointing airplane",
"shortname": ":airplane_up:",
"category": "travel_places",
- "aliases": [":up_pointing_airplane:"],
+ "aliases": [
+ ":up_pointing_airplane:"
+ ],
"aliases_ascii": [],
- "keywords": ["plane", "travel"]
+ "keywords": [
+ "plane",
+ "travel"
+ ]
},
"alarm_clock": {
"unicode": "23F0",
@@ -177,9 +302,26 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["time", "wake"],
+ "keywords": [
+ "time",
+ "wake"
+ ],
"moji": "⏰"
},
+ "alembic": {
+ "unicode": "2697",
+ "unicode_alternates": "",
+ "name": "alembic",
+ "shortname": ":alembic:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "chemistry",
+ "object",
+ "tool"
+ ]
+ },
"alien": {
"unicode": "1F47D",
"unicode_alternates": [],
@@ -188,7 +330,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["UFO", "paul", "alien", "ufo"],
+ "keywords": [
+ "UFO",
+ "paul",
+ "alien",
+ "ufo"
+ ],
"moji": "👽"
},
"ambulance": {
@@ -199,18 +346,50 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["911", "health", "ambulance", "emergency", "medical", "help", "assistance"],
+ "keywords": [
+ "911",
+ "health",
+ "ambulance",
+ "emergency",
+ "medical",
+ "help",
+ "assistance"
+ ],
"moji": "🚑"
},
+ "amphora": {
+ "unicode": "1F3FA",
+ "unicode_alternates": "",
+ "name": "amphora",
+ "shortname": ":amphora:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"anchor": {
"unicode": "2693",
- "unicode_alternates": ["2693-FE0F"],
+ "unicode_alternates": [
+ "2693-FE0F"
+ ],
"name": "anchor",
"shortname": ":anchor:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ferry", "ship", "anchor", "ship", "boat", "ocean", "harbor", "marina", "shipyard", "sailor", "tattoo"],
+ "keywords": [
+ "ferry",
+ "ship",
+ "anchor",
+ "ship",
+ "boat",
+ "ocean",
+ "harbor",
+ "marina",
+ "shipyard",
+ "sailor",
+ "tattoo"
+ ],
"moji": "⚓"
},
"angel": {
@@ -221,9 +400,99 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["baby", "angel", "halo", "cupid", "wings", "halo", "heaven", "wings", "jesus"],
+ "keywords": [
+ "baby",
+ "angel",
+ "halo",
+ "cupid",
+ "wings",
+ "halo",
+ "heaven",
+ "wings",
+ "jesus"
+ ],
"moji": "👼"
},
+ "angel_tone1": {
+ "unicode": "1F47C-1F3FB",
+ "unicode_alternates": "",
+ "name": "baby angel tone 1",
+ "shortname": ":angel_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "halo",
+ "cupid",
+ "heaven",
+ "wings",
+ "jesus"
+ ]
+ },
+ "angel_tone2": {
+ "unicode": "1F47C-1F3FC",
+ "unicode_alternates": "",
+ "name": "baby angel tone 2",
+ "shortname": ":angel_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "halo",
+ "cupid",
+ "heaven",
+ "wings",
+ "jesus"
+ ]
+ },
+ "angel_tone3": {
+ "unicode": "1F47C-1F3FD",
+ "unicode_alternates": "",
+ "name": "baby angel tone 3",
+ "shortname": ":angel_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "halo",
+ "cupid",
+ "heaven",
+ "wings",
+ "jesus"
+ ]
+ },
+ "angel_tone4": {
+ "unicode": "1F47C-1F3FE",
+ "unicode_alternates": "",
+ "name": "baby angel tone 4",
+ "shortname": ":angel_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "halo",
+ "cupid",
+ "heaven",
+ "wings",
+ "jesus"
+ ]
+ },
+ "angel_tone5": {
+ "unicode": "1F47C-1F3FF",
+ "unicode_alternates": "",
+ "name": "baby angel tone 5",
+ "shortname": ":angel_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "halo",
+ "cupid",
+ "heaven",
+ "wings",
+ "jesus"
+ ]
+ },
"anger": {
"unicode": "1F4A2",
"unicode_alternates": [],
@@ -232,7 +501,11 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["anger", "angry", "mad"],
+ "keywords": [
+ "anger",
+ "angry",
+ "mad"
+ ],
"moji": "💢"
},
"anger_left": {
@@ -241,9 +514,20 @@
"name": "left anger bubble",
"shortname": ":anger_left:",
"category": "objects_symbols",
- "aliases": [":left_anger_bubble:"],
- "aliases_ascii": [],
- "keywords": ["speech", "balloon", "talk", "mood", "conversation", "communication", "comic", "angry"]
+ "aliases": [
+ ":left_anger_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "speech",
+ "balloon",
+ "talk",
+ "mood",
+ "conversation",
+ "communication",
+ "comic",
+ "angry"
+ ]
},
"anger_right": {
"unicode": "1F5EF",
@@ -251,9 +535,20 @@
"name": "right anger bubble",
"shortname": ":anger_right:",
"category": "objects_symbols",
- "aliases": [":right_anger_bubble:"],
- "aliases_ascii": [],
- "keywords": ["speech", "balloon", "talk", "mood", "conversation", "communication", "comic", "angry"]
+ "aliases": [
+ ":right_anger_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "speech",
+ "balloon",
+ "talk",
+ "mood",
+ "conversation",
+ "communication",
+ "comic",
+ "angry"
+ ]
},
"angry": {
"unicode": "1F620",
@@ -262,8 +557,22 @@
"shortname": ":angry:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [">:(", ">:-(", ":@"],
- "keywords": ["angry", "livid", "mad", "vexed", "irritated", "annoyed", "face", "frustrated", "mad"],
+ "aliases_ascii": [
+ ">:(",
+ ">:-(",
+ ":@"
+ ],
+ "keywords": [
+ "angry",
+ "livid",
+ "mad",
+ "vexed",
+ "irritated",
+ "annoyed",
+ "face",
+ "frustrated",
+ "mad"
+ ],
"moji": "😠"
},
"anguished": {
@@ -274,7 +583,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "nervous", "stunned", "pain", "anguish", "ouch", "misery", "distress", "grief"],
+ "keywords": [
+ "face",
+ "nervous",
+ "stunned",
+ "pain",
+ "anguish",
+ "ouch",
+ "misery",
+ "distress",
+ "grief"
+ ],
"moji": "😧"
},
"ant": {
@@ -285,7 +604,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "insect", "ant", "queen", "insect", "team"],
+ "keywords": [
+ "animal",
+ "insect",
+ "ant",
+ "queen",
+ "insect",
+ "team"
+ ],
"moji": "🐜"
},
"apple": {
@@ -296,40 +622,87 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fruit", "mac", "apple", "fruit", "electronics", "red", "doctor", "teacher", "school", "core"],
+ "keywords": [
+ "fruit",
+ "mac",
+ "apple",
+ "fruit",
+ "electronics",
+ "red",
+ "doctor",
+ "teacher",
+ "school",
+ "core"
+ ],
"moji": "🍎"
},
"aquarius": {
"unicode": "2652",
- "unicode_alternates": ["2652-FE0F"],
+ "unicode_alternates": [
+ "2652-FE0F"
+ ],
"name": "aquarius",
"shortname": ":aquarius:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["aquarius", "water", "bearer", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "purple-square", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "aquarius",
+ "water",
+ "bearer",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "purple-square",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♒"
},
"aries": {
"unicode": "2648",
- "unicode_alternates": ["2648-FE0F"],
+ "unicode_alternates": [
+ "2648-FE0F"
+ ],
"name": "aries",
"shortname": ":aries:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["aries", "ram", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "purple-square", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "aries",
+ "ram",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "purple-square",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♈"
},
"arrow_backward": {
"unicode": "25C0",
- "unicode_alternates": ["25C0-FE0F"],
+ "unicode_alternates": [
+ "25C0-FE0F"
+ ],
"name": "black left-pointing triangle",
"shortname": ":arrow_backward:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "◀"
},
"arrow_double_down": {
@@ -340,7 +713,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "⏬"
},
"arrow_double_up": {
@@ -351,18 +727,26 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "⏫"
},
"arrow_down": {
"unicode": "2B07",
- "unicode_alternates": ["2B07-FE0F"],
+ "unicode_alternates": [
+ "2B07-FE0F"
+ ],
"name": "downwards black arrow",
"shortname": ":arrow_down:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "⬇"
},
"arrow_down_small": {
@@ -373,117 +757,168 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "🔽"
},
"arrow_forward": {
"unicode": "25B6",
- "unicode_alternates": ["25B6-FE0F"],
+ "unicode_alternates": [
+ "25B6-FE0F"
+ ],
"name": "black right-pointing triangle",
"shortname": ":arrow_forward:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "▶"
},
"arrow_heading_down": {
"unicode": "2935",
- "unicode_alternates": ["2935-FE0F"],
+ "unicode_alternates": [
+ "2935-FE0F"
+ ],
"name": "arrow pointing rightwards then curving downwards",
"shortname": ":arrow_heading_down:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "⤵"
},
"arrow_heading_up": {
"unicode": "2934",
- "unicode_alternates": ["2934-FE0F"],
+ "unicode_alternates": [
+ "2934-FE0F"
+ ],
"name": "arrow pointing rightwards then curving upwards",
"shortname": ":arrow_heading_up:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "⤴"
},
"arrow_left": {
"unicode": "2B05",
- "unicode_alternates": ["2B05-FE0F"],
+ "unicode_alternates": [
+ "2B05-FE0F"
+ ],
"name": "leftwards black arrow",
"shortname": ":arrow_left:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square", "previous"],
+ "keywords": [
+ "arrow",
+ "blue-square",
+ "previous"
+ ],
"moji": "⬅"
},
"arrow_lower_left": {
"unicode": "2199",
- "unicode_alternates": ["2199-FE0F"],
+ "unicode_alternates": [
+ "2199-FE0F"
+ ],
"name": "south west arrow",
"shortname": ":arrow_lower_left:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "↙"
},
"arrow_lower_right": {
"unicode": "2198",
- "unicode_alternates": ["2198-FE0F"],
+ "unicode_alternates": [
+ "2198-FE0F"
+ ],
"name": "south east arrow",
"shortname": ":arrow_lower_right:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "blue-square"],
+ "keywords": [
+ "arrow",
+ "blue-square"
+ ],
"moji": "↘"
},
"arrow_right": {
"unicode": "27A1",
- "unicode_alternates": ["27A1-FE0F"],
+ "unicode_alternates": [
+ "27A1-FE0F"
+ ],
"name": "black rightwards arrow",
"shortname": ":arrow_right:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "next"],
+ "keywords": [
+ "blue-square",
+ "next"
+ ],
"moji": "➡"
},
"arrow_right_hook": {
"unicode": "21AA",
- "unicode_alternates": ["21AA-FE0F"],
+ "unicode_alternates": [
+ "21AA-FE0F"
+ ],
"name": "rightwards arrow with hook",
"shortname": ":arrow_right_hook:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "↪"
},
"arrow_up": {
"unicode": "2B06",
- "unicode_alternates": ["2B06-FE0F"],
+ "unicode_alternates": [
+ "2B06-FE0F"
+ ],
"name": "upwards black arrow",
"shortname": ":arrow_up:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "⬆"
},
"arrow_up_down": {
"unicode": "2195",
- "unicode_alternates": ["2195-FE0F"],
+ "unicode_alternates": [
+ "2195-FE0F"
+ ],
"name": "up down arrow",
"shortname": ":arrow_up_down:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "↕"
},
"arrow_up_small": {
@@ -494,29 +929,39 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "🔼"
},
"arrow_upper_left": {
"unicode": "2196",
- "unicode_alternates": ["2196-FE0F"],
+ "unicode_alternates": [
+ "2196-FE0F"
+ ],
"name": "north west arrow",
"shortname": ":arrow_upper_left:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "↖"
},
"arrow_upper_right": {
"unicode": "2197",
- "unicode_alternates": ["2197-FE0F"],
+ "unicode_alternates": [
+ "2197-FE0F"
+ ],
"name": "north east arrow",
"shortname": ":arrow_upper_right:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "↗"
},
"arrows_clockwise": {
@@ -527,7 +972,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sync"],
+ "keywords": [
+ "sync"
+ ],
"moji": "🔃"
},
"arrows_counterclockwise": {
@@ -538,7 +985,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "sync"],
+ "keywords": [
+ "blue-square",
+ "sync"
+ ],
"moji": "🔄"
},
"art": {
@@ -549,7 +999,20 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["design", "draw", "paint", "artist", "palette", "art", "colors", "paint", "draw", "brush", "pastels", "oils"],
+ "keywords": [
+ "design",
+ "draw",
+ "paint",
+ "artist",
+ "palette",
+ "art",
+ "colors",
+ "paint",
+ "draw",
+ "brush",
+ "pastels",
+ "oils"
+ ],
"moji": "🎨"
},
"articulated_lorry": {
@@ -560,7 +1023,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cars", "transportation", "vehicle", "truck", "delivery", "semi", "lorry", "articulated"],
+ "keywords": [
+ "cars",
+ "transportation",
+ "vehicle",
+ "truck",
+ "delivery",
+ "semi",
+ "lorry",
+ "articulated"
+ ],
"moji": "🚛"
},
"ascending_notes": {
@@ -571,7 +1043,28 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["score", "music", "sound", "tone"]
+ "keywords": [
+ "score",
+ "music",
+ "sound",
+ "tone"
+ ]
+ },
+ "asterisk": {
+ "unicode": "002A-20E3",
+ "unicode_alternates": "002a-fe0f-20e3",
+ "name": "keycap asterisk",
+ "shortname": ":asterisk:",
+ "category": "symbols",
+ "aliases": [
+ ":keycap_asterisk:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "*",
+ "star",
+ "symbol"
+ ]
},
"astonished": {
"unicode": "1F632",
@@ -581,7 +1074,13 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "xox", "shocked", "surprise", "astonished"],
+ "keywords": [
+ "face",
+ "xox",
+ "shocked",
+ "surprise",
+ "astonished"
+ ],
"moji": "😲"
},
"athletic_shoe": {
@@ -592,7 +1091,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shoes", "sports"],
+ "keywords": [
+ "shoes",
+ "sports"
+ ],
"moji": "👟"
},
"atm": {
@@ -603,9 +1105,38 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["atm", "cash", "withdrawal", "money", "deposit", "financial", "bank", "adam", "payday", "bank", "blue-square", "cash", "money", "payment"],
+ "keywords": [
+ "atm",
+ "cash",
+ "withdrawal",
+ "money",
+ "deposit",
+ "financial",
+ "bank",
+ "adam",
+ "payday",
+ "bank",
+ "blue-square",
+ "cash",
+ "money",
+ "payment"
+ ],
"moji": "🏧"
},
+ "atom": {
+ "unicode": "269B",
+ "unicode_alternates": "",
+ "name": "atom symbol",
+ "shortname": ":atom:",
+ "category": "symbols",
+ "aliases": [
+ ":atom_symbol:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "atheist"
+ ]
+ },
"b": {
"unicode": "1F171",
"unicode_alternates": [],
@@ -614,7 +1145,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "letter", "red-square"],
+ "keywords": [
+ "alphabet",
+ "letter",
+ "red-square"
+ ],
"moji": "🅱"
},
"baby": {
@@ -625,7 +1160,11 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["boy", "child", "infant"],
+ "keywords": [
+ "boy",
+ "child",
+ "infant"
+ ],
"moji": "👶"
},
"baby_bottle": {
@@ -636,7 +1175,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["container", "food", "baby", "bottle", "milk", "mother", "nipple", "newborn", "formula"],
+ "keywords": [
+ "container",
+ "food",
+ "baby",
+ "bottle",
+ "milk",
+ "mother",
+ "nipple",
+ "newborn",
+ "formula"
+ ],
"moji": "🍼"
},
"baby_chick": {
@@ -647,7 +1196,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "chicken", "chick", "baby", "bird", "chicken", "young", "woman", "cute"],
+ "keywords": [
+ "animal",
+ "chicken",
+ "chick",
+ "baby",
+ "bird",
+ "chicken",
+ "young",
+ "woman",
+ "cute"
+ ],
"moji": "🐤"
},
"baby_symbol": {
@@ -658,9 +1217,89 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["child", "orange-square", "baby", "crawl", "newborn", "human", "diaper", "small", "babe"],
+ "keywords": [
+ "child",
+ "orange-square",
+ "baby",
+ "crawl",
+ "newborn",
+ "human",
+ "diaper",
+ "small",
+ "babe"
+ ],
"moji": "🚼"
},
+ "baby_tone1": {
+ "unicode": "1F476-1F3FB",
+ "unicode_alternates": "",
+ "name": "baby tone 1",
+ "shortname": ":baby_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "child",
+ "infant",
+ "toddler"
+ ]
+ },
+ "baby_tone2": {
+ "unicode": "1F476-1F3FC",
+ "unicode_alternates": "",
+ "name": "baby tone 2",
+ "shortname": ":baby_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "child",
+ "infant",
+ "toddler"
+ ]
+ },
+ "baby_tone3": {
+ "unicode": "1F476-1F3FD",
+ "unicode_alternates": "",
+ "name": "baby tone 3",
+ "shortname": ":baby_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "child",
+ "infant",
+ "toddler"
+ ]
+ },
+ "baby_tone4": {
+ "unicode": "1F476-1F3FE",
+ "unicode_alternates": "",
+ "name": "baby tone 4",
+ "shortname": ":baby_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "child",
+ "infant",
+ "toddler"
+ ]
+ },
+ "baby_tone5": {
+ "unicode": "1F476-1F3FF",
+ "unicode_alternates": "",
+ "name": "baby tone 5",
+ "shortname": ":baby_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "child",
+ "infant",
+ "toddler"
+ ]
+ },
"back": {
"unicode": "1F519",
"unicode_alternates": [],
@@ -669,9 +1308,21 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow"],
+ "keywords": [
+ "arrow"
+ ],
"moji": "🔙"
},
+ "badminton": {
+ "unicode": "1F3F8",
+ "unicode_alternates": "",
+ "name": "badminton racquet",
+ "shortname": ":badminton:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"baggage_claim": {
"unicode": "1F6C4",
"unicode_alternates": [],
@@ -680,7 +1331,15 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["airport", "blue-square", "transport", "bag", "baggage", "luggage", "travel"],
+ "keywords": [
+ "airport",
+ "blue-square",
+ "transport",
+ "bag",
+ "baggage",
+ "luggage",
+ "travel"
+ ],
"moji": "🛄"
},
"balloon": {
@@ -691,7 +1350,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["celebration", "party", "balloon", "birthday", "celebration", "helium", "gas", "children", "float"],
+ "keywords": [
+ "celebration",
+ "party",
+ "balloon",
+ "birthday",
+ "celebration",
+ "helium",
+ "gas",
+ "children",
+ "float"
+ ],
"moji": "🎈"
},
"ballot_box": {
@@ -700,9 +1369,13 @@
"name": "ballot box with ballot",
"shortname": ":ballot_box:",
"category": "objects_symbols",
- "aliases": [":ballot_box_with_ballot:"],
+ "aliases": [
+ ":ballot_box_with_ballot:"
+ ],
"aliases_ascii": [],
- "keywords": ["vote"]
+ "keywords": [
+ "vote"
+ ]
},
"ballot_box_check": {
"unicode": "1F5F9",
@@ -710,19 +1383,29 @@
"name": "ballot box with bold check",
"shortname": ":ballot_box_check:",
"category": "objects_symbols",
- "aliases": [":ballot_box_with_bold_check:"],
+ "aliases": [
+ ":ballot_box_with_bold_check:"
+ ],
"aliases_ascii": [],
- "keywords": ["mark", "vote"]
+ "keywords": [
+ "mark",
+ "vote"
+ ]
},
"ballot_box_with_check": {
"unicode": "2611",
- "unicode_alternates": ["2611-FE0F"],
+ "unicode_alternates": [
+ "2611-FE0F"
+ ],
"name": "ballot box with check",
"shortname": ":ballot_box_with_check:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["agree", "ok"],
+ "keywords": [
+ "agree",
+ "ok"
+ ],
"moji": "☑"
},
"ballot_box_x": {
@@ -731,9 +1414,14 @@
"name": "ballot box with script x",
"shortname": ":ballot_box_x:",
"category": "objects_symbols",
- "aliases": [":ballot_box_with_script_x:"],
+ "aliases": [
+ ":ballot_box_with_script_x:"
+ ],
"aliases_ascii": [],
- "keywords": ["mark", "vote"]
+ "keywords": [
+ "mark",
+ "vote"
+ ]
},
"ballot_x": {
"unicode": "1F5F4",
@@ -741,9 +1429,14 @@
"name": "ballot script x",
"shortname": ":ballot_x:",
"category": "objects_symbols",
- "aliases": [":ballot_script_x:"],
+ "aliases": [
+ ":ballot_script_x:"
+ ],
"aliases_ascii": [],
- "keywords": ["mark", "vote"]
+ "keywords": [
+ "mark",
+ "vote"
+ ]
},
"bamboo": {
"unicode": "1F38D",
@@ -753,7 +1446,25 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "vegetable", "pine", "bamboo", "decoration", "new", "years", "spirits", "harvest", "prosperity", "longevity", "fortune", "luck", "welcome", "farming", "agriculture"],
+ "keywords": [
+ "nature",
+ "plant",
+ "vegetable",
+ "pine",
+ "bamboo",
+ "decoration",
+ "new",
+ "years",
+ "spirits",
+ "harvest",
+ "prosperity",
+ "longevity",
+ "fortune",
+ "luck",
+ "welcome",
+ "farming",
+ "agriculture"
+ ],
"moji": "🎍"
},
"banana": {
@@ -764,18 +1475,29 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "banana", "peel", "bunch"],
+ "keywords": [
+ "food",
+ "fruit",
+ "banana",
+ "peel",
+ "bunch"
+ ],
"moji": "🍌"
},
"bangbang": {
"unicode": "203C",
- "unicode_alternates": ["203C-FE0F"],
+ "unicode_alternates": [
+ "203C-FE0F"
+ ],
"name": "double exclamation mark",
"shortname": ":bangbang:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["exclamation", "surprise"],
+ "keywords": [
+ "exclamation",
+ "surprise"
+ ],
"moji": "‼"
},
"bank": {
@@ -786,7 +1508,9 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building"],
+ "keywords": [
+ "building"
+ ],
"moji": "🏦"
},
"bar_chart": {
@@ -797,7 +1521,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["graph", "presentation", "stats"],
+ "keywords": [
+ "graph",
+ "presentation",
+ "stats"
+ ],
"moji": "📊"
},
"barber": {
@@ -808,18 +1536,28 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["hair", "salon", "style"],
+ "keywords": [
+ "hair",
+ "salon",
+ "style"
+ ],
"moji": "💈"
},
"baseball": {
"unicode": "26BE",
- "unicode_alternates": ["26BE-FE0F"],
+ "unicode_alternates": [
+ "26BE-FE0F"
+ ],
"name": "baseball",
"shortname": ":baseball:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["MLB", "balls", "sports"],
+ "keywords": [
+ "MLB",
+ "balls",
+ "sports"
+ ],
"moji": "⚾"
},
"basketball": {
@@ -830,9 +1568,95 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["NBA", "balls", "sports", "basketball", "bball", "dribble", "hoop", "net", "swish", "rip city"],
+ "keywords": [
+ "NBA",
+ "balls",
+ "sports",
+ "basketball",
+ "bball",
+ "dribble",
+ "hoop",
+ "net",
+ "swish",
+ "rip city"
+ ],
"moji": "🏀"
},
+ "basketball_player": {
+ "unicode": "26F9",
+ "unicode_alternates": "",
+ "name": "person with ball",
+ "shortname": ":basketball_player:",
+ "category": "activity",
+ "aliases": [
+ ":person_with_ball:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "travel"
+ ]
+ },
+ "basketball_player_tone1": {
+ "unicode": "26F9-1F3FB",
+ "unicode_alternates": "",
+ "name": "person with ball tone 1",
+ "shortname": ":basketball_player_tone1:",
+ "category": "activity",
+ "aliases": [
+ ":person_with_ball_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "basketball_player_tone2": {
+ "unicode": "26F9-1F3FC",
+ "unicode_alternates": "",
+ "name": "person with ball tone 2",
+ "shortname": ":basketball_player_tone2:",
+ "category": "activity",
+ "aliases": [
+ ":person_with_ball_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "basketball_player_tone3": {
+ "unicode": "26F9-1F3FD",
+ "unicode_alternates": "",
+ "name": "person with ball tone 3",
+ "shortname": ":basketball_player_tone3:",
+ "category": "activity",
+ "aliases": [
+ ":person_with_ball_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "basketball_player_tone4": {
+ "unicode": "26F9-1F3FE",
+ "unicode_alternates": "",
+ "name": "person with ball tone 4",
+ "shortname": ":basketball_player_tone4:",
+ "category": "activity",
+ "aliases": [
+ ":person_with_ball_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "basketball_player_tone5": {
+ "unicode": "26F9-1F3FF",
+ "unicode_alternates": "",
+ "name": "person with ball tone 5",
+ "shortname": ":basketball_player_tone5:",
+ "category": "activity",
+ "aliases": [
+ ":person_with_ball_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"bath": {
"unicode": "1F6C0",
"unicode_alternates": [],
@@ -841,9 +1665,140 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clean", "shower", "bath", "tub", "basin", "wash", "bubble", "soak", "bathroom", "soap", "water", "clean", "shampoo", "lather", "water"],
+ "keywords": [
+ "clean",
+ "shower",
+ "bath",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather",
+ "water"
+ ],
"moji": "🛀"
},
+ "bath_tone1": {
+ "unicode": "1F6C0-1F3FB",
+ "unicode_alternates": "",
+ "name": "bath tone 1",
+ "shortname": ":bath_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "shower",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather"
+ ]
+ },
+ "bath_tone2": {
+ "unicode": "1F6C0-1F3FC",
+ "unicode_alternates": "",
+ "name": "bath tone 2",
+ "shortname": ":bath_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "shower",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather"
+ ]
+ },
+ "bath_tone3": {
+ "unicode": "1F6C0-1F3FD",
+ "unicode_alternates": "",
+ "name": "bath tone 3",
+ "shortname": ":bath_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "shower",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather"
+ ]
+ },
+ "bath_tone4": {
+ "unicode": "1F6C0-1F3FE",
+ "unicode_alternates": "",
+ "name": "bath tone 4",
+ "shortname": ":bath_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "shower",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather"
+ ]
+ },
+ "bath_tone5": {
+ "unicode": "1F6C0-1F3FF",
+ "unicode_alternates": "",
+ "name": "bath tone 5",
+ "shortname": ":bath_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "shower",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather"
+ ]
+ },
"bathtub": {
"unicode": "1F6C1",
"unicode_alternates": [],
@@ -852,7 +1807,23 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clean", "shower", "bath", "tub", "basin", "wash", "bubble", "soak", "bathroom", "soap", "water", "clean", "shampoo", "lather", "water"],
+ "keywords": [
+ "clean",
+ "shower",
+ "bath",
+ "tub",
+ "basin",
+ "wash",
+ "bubble",
+ "soak",
+ "bathroom",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather",
+ "water"
+ ],
"moji": "🛁"
},
"battery": {
@@ -863,7 +1834,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["energy", "power", "sustain"],
+ "keywords": [
+ "energy",
+ "power",
+ "sustain"
+ ],
"moji": "🔋"
},
"beach": {
@@ -872,9 +1847,38 @@
"name": "beach with umbrella",
"shortname": ":beach:",
"category": "travel_places",
- "aliases": [":beach_with_umbrella:"],
- "aliases_ascii": [],
- "keywords": ["sand", "sun", "surf", "vacation", "relaxation", "tanning", "tan", "swimming"]
+ "aliases": [
+ ":beach_with_umbrella:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "sand",
+ "sun",
+ "surf",
+ "vacation",
+ "relaxation",
+ "tanning",
+ "tan",
+ "swimming"
+ ]
+ },
+ "beach_umbrella": {
+ "unicode": "26F1",
+ "unicode_alternates": "",
+ "name": "umbrella on ground",
+ "shortname": ":beach_umbrella:",
+ "category": "objects",
+ "aliases": [
+ ":umbrella_on_ground:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "nature",
+ "rain",
+ "sun",
+ "travel",
+ "weather"
+ ]
},
"bear": {
"unicode": "1F43B",
@@ -884,7 +1888,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐻"
},
"bed": {
@@ -895,7 +1902,15 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sleep", "sex", "queen", "full", "twin", "king", "mattress"]
+ "keywords": [
+ "sleep",
+ "sex",
+ "queen",
+ "full",
+ "twin",
+ "king",
+ "mattress"
+ ]
},
"bee": {
"unicode": "1F41D",
@@ -905,7 +1920,20 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "insect", "bee", "queen", "buzz", "flower", "pollen", "sting", "honey", "hive", "bumble", "pollination"],
+ "keywords": [
+ "animal",
+ "insect",
+ "bee",
+ "queen",
+ "buzz",
+ "flower",
+ "pollen",
+ "sting",
+ "honey",
+ "hive",
+ "bumble",
+ "pollination"
+ ],
"moji": "🐝"
},
"beer": {
@@ -916,7 +1944,26 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beverage", "drink", "drunk", "party", "pub", "relax", "beer", "hops", "mug", "barley", "malt", "yeast", "portland", "oregon", "brewery", "micro", "pint", "boot"],
+ "keywords": [
+ "beverage",
+ "drink",
+ "drunk",
+ "party",
+ "pub",
+ "relax",
+ "beer",
+ "hops",
+ "mug",
+ "barley",
+ "malt",
+ "yeast",
+ "portland",
+ "oregon",
+ "brewery",
+ "micro",
+ "pint",
+ "boot"
+ ],
"moji": "🍺"
},
"beers": {
@@ -927,7 +1974,25 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beverage", "drink", "drunk", "party", "pub", "relax", "beer", "beers", "cheers", "mug", "toast", "celebrate", "pub", "bar", "jolly", "hops", "clink"],
+ "keywords": [
+ "beverage",
+ "drink",
+ "drunk",
+ "party",
+ "pub",
+ "relax",
+ "beer",
+ "beers",
+ "cheers",
+ "mug",
+ "toast",
+ "celebrate",
+ "pub",
+ "bar",
+ "jolly",
+ "hops",
+ "clink"
+ ],
"moji": "🍻"
},
"beetle": {
@@ -938,7 +2003,19 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["insect", "nature", "lady", "bug", "ladybug", "ladybird", "beetle", "cow", "lady cow", "insect", "endearment"],
+ "keywords": [
+ "insect",
+ "nature",
+ "lady",
+ "bug",
+ "ladybug",
+ "ladybird",
+ "beetle",
+ "cow",
+ "lady cow",
+ "insect",
+ "endearment"
+ ],
"moji": "🐞"
},
"beginner": {
@@ -949,7 +2026,10 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["badge", "shield"],
+ "keywords": [
+ "badge",
+ "shield"
+ ],
"moji": "🔰"
},
"bell": {
@@ -960,7 +2040,13 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chime", "christmas", "notification", "sound", "xmas"],
+ "keywords": [
+ "chime",
+ "christmas",
+ "notification",
+ "sound",
+ "xmas"
+ ],
"moji": "🔔"
},
"bellhop": {
@@ -969,9 +2055,15 @@
"name": "bellhop bell",
"shortname": ":bellhop:",
"category": "travel_places",
- "aliases": [":bellhop_bell:"],
+ "aliases": [
+ ":bellhop_bell:"
+ ],
"aliases_ascii": [],
- "keywords": ["hotel", "porter", "ding"]
+ "keywords": [
+ "hotel",
+ "porter",
+ "ding"
+ ]
},
"bento": {
"unicode": "1F371",
@@ -981,7 +2073,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["box", "food", "japanese", "bento", "japanese", "rice", "meal", "box", "obento", "convenient", "lunchbox"],
+ "keywords": [
+ "box",
+ "food",
+ "japanese",
+ "bento",
+ "japanese",
+ "rice",
+ "meal",
+ "box",
+ "obento",
+ "convenient",
+ "lunchbox"
+ ],
"moji": "🍱"
},
"bicyclist": {
@@ -992,9 +2096,115 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bike", "exercise", "hipster", "sports", "bicyclist", "road", "bike", "pedal", "bicycle", "transportation"],
+ "keywords": [
+ "bike",
+ "exercise",
+ "hipster",
+ "sports",
+ "bicyclist",
+ "road",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ],
"moji": "🚴"
},
+ "bicyclist_tone1": {
+ "unicode": "1F6B4-1F3FB",
+ "unicode_alternates": "",
+ "name": "bicyclist tone 1",
+ "shortname": ":bicyclist_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "bike",
+ "exercise",
+ "hipster",
+ "sport",
+ "road",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "bicyclist_tone2": {
+ "unicode": "1F6B4-1F3FC",
+ "unicode_alternates": "",
+ "name": "bicyclist tone 2",
+ "shortname": ":bicyclist_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "bike",
+ "exercise",
+ "hipster",
+ "sport",
+ "road",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "bicyclist_tone3": {
+ "unicode": "1F6B4-1F3FD",
+ "unicode_alternates": "",
+ "name": "bicyclist tone 3",
+ "shortname": ":bicyclist_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "bike",
+ "exercise",
+ "hipster",
+ "sport",
+ "road",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "bicyclist_tone4": {
+ "unicode": "1F6B4-1F3FE",
+ "unicode_alternates": "",
+ "name": "bicyclist tone 4",
+ "shortname": ":bicyclist_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "bike",
+ "exercise",
+ "hipster",
+ "sport",
+ "road",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "bicyclist_tone5": {
+ "unicode": "1F6B4-1F3FF",
+ "unicode_alternates": "",
+ "name": "bicyclist tone 5",
+ "shortname": ":bicyclist_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "bike",
+ "exercise",
+ "hipster",
+ "sport",
+ "road",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
"bike": {
"unicode": "1F6B2",
"unicode_alternates": [],
@@ -1003,7 +2213,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bicycle", "exercise", "hipster", "sports", "bike", "pedal", "bicycle", "transportation"],
+ "keywords": [
+ "bicycle",
+ "exercise",
+ "hipster",
+ "sports",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ],
"moji": "🚲"
},
"bikini": {
@@ -1014,9 +2233,30 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beach", "fashion", "female", "girl", "swimming", "woman"],
+ "keywords": [
+ "beach",
+ "fashion",
+ "female",
+ "girl",
+ "swimming",
+ "woman"
+ ],
"moji": "👙"
},
+ "biohazard": {
+ "unicode": "2623",
+ "unicode_alternates": "",
+ "name": "biohazard sign",
+ "shortname": ":biohazard:",
+ "category": "symbols",
+ "aliases": [
+ ":biohazard_sign:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "symbol"
+ ]
+ },
"bird": {
"unicode": "1F426",
"unicode_alternates": [],
@@ -1025,7 +2265,12 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "fly", "nature", "tweet"],
+ "keywords": [
+ "animal",
+ "fly",
+ "nature",
+ "tweet"
+ ],
"moji": "🐦"
},
"birthday": {
@@ -1036,18 +2281,31 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cake", "party", "birthday", "birth", "cake", "dessert", "wish", "celebrate"],
+ "keywords": [
+ "cake",
+ "party",
+ "birthday",
+ "birth",
+ "cake",
+ "dessert",
+ "wish",
+ "celebrate"
+ ],
"moji": "🎂"
},
"black_circle": {
"unicode": "26AB",
- "unicode_alternates": ["26AB-FE0F"],
+ "unicode_alternates": [
+ "26AB-FE0F"
+ ],
"name": "medium black circle",
"shortname": ":black_circle:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "⚫"
},
"black_joker": {
@@ -1058,23 +2316,33 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cards", "game", "poker"],
+ "keywords": [
+ "cards",
+ "game",
+ "poker"
+ ],
"moji": "🃏"
},
"black_large_square": {
"unicode": "2B1B",
- "unicode_alternates": ["2B1B-FE0F"],
+ "unicode_alternates": [
+ "2B1B-FE0F"
+ ],
"name": "black large square",
"shortname": ":black_large_square:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "⬛"
},
"black_medium_small_square": {
"unicode": "25FE",
- "unicode_alternates": ["25FE-FE0F"],
+ "unicode_alternates": [
+ "25FE-FE0F"
+ ],
"name": "black medium small square",
"shortname": ":black_medium_small_square:",
"category": "other",
@@ -1085,29 +2353,40 @@
},
"black_medium_square": {
"unicode": "25FC",
- "unicode_alternates": ["25FC-FE0F"],
+ "unicode_alternates": [
+ "25FC-FE0F"
+ ],
"name": "black medium square",
"shortname": ":black_medium_square:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "◼"
},
"black_nib": {
"unicode": "2712",
- "unicode_alternates": ["2712-FE0F"],
+ "unicode_alternates": [
+ "2712-FE0F"
+ ],
"name": "black nib",
"shortname": ":black_nib:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["pen", "stationery"],
+ "keywords": [
+ "pen",
+ "stationery"
+ ],
"moji": "✒"
},
"black_small_square": {
"unicode": "25AA",
- "unicode_alternates": ["25AA-FE0F"],
+ "unicode_alternates": [
+ "25AA-FE0F"
+ ],
"name": "black small square",
"shortname": ":black_small_square:",
"category": "other",
@@ -1124,7 +2403,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["frame"],
+ "keywords": [
+ "frame"
+ ],
"moji": "🔲"
},
"blossom": {
@@ -1135,7 +2416,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flowers", "nature", "yellow", "blossom", "daisy", "flower"],
+ "keywords": [
+ "flowers",
+ "nature",
+ "yellow",
+ "blossom",
+ "daisy",
+ "flower"
+ ],
"moji": "🌼"
},
"blowfish": {
@@ -1146,7 +2434,19 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "nature", "ocean", "sea", "blowfish", "pufferfish", "puffer", "ballonfish", "toadfish", "fugu fish", "sushi"],
+ "keywords": [
+ "food",
+ "nature",
+ "ocean",
+ "sea",
+ "blowfish",
+ "pufferfish",
+ "puffer",
+ "ballonfish",
+ "toadfish",
+ "fugu fish",
+ "sushi"
+ ],
"moji": "🐡"
},
"blue_book": {
@@ -1157,7 +2457,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["knowledge", "library", "read"],
+ "keywords": [
+ "knowledge",
+ "library",
+ "read"
+ ],
"moji": "📘"
},
"blue_car": {
@@ -1168,7 +2472,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["car", "suv", "car", "wagon", "automobile"],
+ "keywords": [
+ "car",
+ "suv",
+ "car",
+ "wagon",
+ "automobile"
+ ],
"moji": "🚙"
},
"blue_heart": {
@@ -1179,7 +2489,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines", "blue", "heart", "love", "stability", "truth", "loyalty", "trust"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines",
+ "blue",
+ "heart",
+ "love",
+ "stability",
+ "truth",
+ "loyalty",
+ "trust"
+ ],
"moji": "💙"
},
"blush": {
@@ -1190,7 +2512,18 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["crush", "embarrassed", "face", "flushed", "happy", "shy", "smile", "smiling", "smile", "smiley"],
+ "keywords": [
+ "crush",
+ "embarrassed",
+ "face",
+ "flushed",
+ "happy",
+ "shy",
+ "smile",
+ "smiling",
+ "smile",
+ "smiley"
+ ],
"moji": "😊"
},
"boar": {
@@ -1201,7 +2534,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐗"
},
"bomb": {
@@ -1212,7 +2548,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["boom", "explode"],
+ "keywords": [
+ "boom",
+ "explode"
+ ],
"moji": "💣"
},
"book": {
@@ -1223,7 +2562,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["library", "literature"],
+ "keywords": [
+ "library",
+ "literature"
+ ],
"moji": "📖"
},
"book2": {
@@ -1234,7 +2576,13 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["library", "literature", "novel", "reading", "story"]
+ "keywords": [
+ "library",
+ "literature",
+ "novel",
+ "reading",
+ "story"
+ ]
},
"bookmark": {
"unicode": "1F516",
@@ -1244,7 +2592,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["favorite"],
+ "keywords": [
+ "favorite"
+ ],
"moji": "🔖"
},
"bookmark_tabs": {
@@ -1255,7 +2605,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["favorite"],
+ "keywords": [
+ "favorite"
+ ],
"moji": "📑"
},
"books": {
@@ -1266,7 +2618,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["library", "literature"],
+ "keywords": [
+ "library",
+ "literature"
+ ],
"moji": "📚"
},
"boom": {
@@ -1277,7 +2632,18 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bomb", "explode", "explosion", "boom", "bang", "collision", "fire", "emphasis", "wow", "bam"],
+ "keywords": [
+ "bomb",
+ "explode",
+ "explosion",
+ "boom",
+ "bang",
+ "collision",
+ "fire",
+ "emphasis",
+ "wow",
+ "bam"
+ ],
"moji": "💥"
},
"boot": {
@@ -1288,7 +2654,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "shoes"],
+ "keywords": [
+ "fashion",
+ "shoes"
+ ],
"moji": "👢"
},
"bouquet": {
@@ -1299,7 +2668,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flowers", "nature"],
+ "keywords": [
+ "flowers",
+ "nature"
+ ],
"moji": "💐"
},
"bouquet2": {
@@ -1308,9 +2680,16 @@
"name": "bouquet of flowers",
"shortname": ":bouquet2:",
"category": "celebration",
- "aliases": [":bouquet_of_flowers:"],
+ "aliases": [
+ ":bouquet_of_flowers:"
+ ],
"aliases_ascii": [],
- "keywords": ["nature", "marriage", "wedding", "bride"]
+ "keywords": [
+ "nature",
+ "marriage",
+ "wedding",
+ "bride"
+ ]
},
"bow": {
"unicode": "1F647",
@@ -1320,9 +2699,120 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["boy", "male", "man", "sorry", "bow", "respect", "curtsy", "bend"],
+ "keywords": [
+ "boy",
+ "male",
+ "man",
+ "sorry",
+ "bow",
+ "respect",
+ "curtsy",
+ "bend"
+ ],
"moji": "🙇"
},
+ "bow_and_arrow": {
+ "unicode": "1F3F9",
+ "unicode_alternates": "",
+ "name": "bow and arrow",
+ "shortname": ":bow_and_arrow:",
+ "category": "activity",
+ "aliases": [
+ ":archery:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "bow_tone1": {
+ "unicode": "1F647-1F3FB",
+ "unicode_alternates": "",
+ "name": "person bowing deeply tone 1",
+ "shortname": ":bow_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "man",
+ "sorry",
+ "bow",
+ "respect",
+ "bend"
+ ]
+ },
+ "bow_tone2": {
+ "unicode": "1F647-1F3FC",
+ "unicode_alternates": "",
+ "name": "person bowing deeply tone 2",
+ "shortname": ":bow_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "man",
+ "sorry",
+ "bow",
+ "respect",
+ "bend"
+ ]
+ },
+ "bow_tone3": {
+ "unicode": "1F647-1F3FD",
+ "unicode_alternates": "",
+ "name": "person bowing deeply tone 3",
+ "shortname": ":bow_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "man",
+ "sorry",
+ "bow",
+ "respect",
+ "bend"
+ ]
+ },
+ "bow_tone4": {
+ "unicode": "1F647-1F3FE",
+ "unicode_alternates": "",
+ "name": "person bowing deeply tone 4",
+ "shortname": ":bow_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "man",
+ "sorry",
+ "bow",
+ "respect",
+ "bend"
+ ]
+ },
+ "bow_tone5": {
+ "unicode": "1F647-1F3FF",
+ "unicode_alternates": "",
+ "name": "person bowing deeply tone 5",
+ "shortname": ":bow_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "man",
+ "sorry",
+ "bow",
+ "respect",
+ "bend"
+ ]
+ },
"bowling": {
"unicode": "1F3B3",
"unicode_alternates": [],
@@ -1331,7 +2821,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fun", "play", "sports", "bowl", "bowling", "ball", "pin", "strike", "spare", "game"],
+ "keywords": [
+ "fun",
+ "play",
+ "sports",
+ "bowl",
+ "bowling",
+ "ball",
+ "pin",
+ "strike",
+ "spare",
+ "game"
+ ],
"moji": "🎳"
},
"boy": {
@@ -1342,9 +2843,83 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["guy", "male", "man"],
+ "keywords": [
+ "guy",
+ "male",
+ "man"
+ ],
"moji": "👦"
},
+ "boy_tone1": {
+ "unicode": "1F466-1F3FB",
+ "unicode_alternates": "",
+ "name": "boy tone 1",
+ "shortname": ":boy_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "kid",
+ "child"
+ ]
+ },
+ "boy_tone2": {
+ "unicode": "1F466-1F3FC",
+ "unicode_alternates": "",
+ "name": "boy tone 2",
+ "shortname": ":boy_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "kid",
+ "child"
+ ]
+ },
+ "boy_tone3": {
+ "unicode": "1F466-1F3FD",
+ "unicode_alternates": "",
+ "name": "boy tone 3",
+ "shortname": ":boy_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "kid",
+ "child"
+ ]
+ },
+ "boy_tone4": {
+ "unicode": "1F466-1F3FE",
+ "unicode_alternates": "",
+ "name": "boy tone 4",
+ "shortname": ":boy_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "kid",
+ "child"
+ ]
+ },
+ "boy_tone5": {
+ "unicode": "1F466-1F3FF",
+ "unicode_alternates": "",
+ "name": "boy tone 5",
+ "shortname": ":boy_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "kid",
+ "child"
+ ]
+ },
"boys_symbol": {
"unicode": "1F6C9",
"unicode_alternates": [],
@@ -1353,7 +2928,10 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["male", "child"]
+ "keywords": [
+ "male",
+ "child"
+ ]
},
"bread": {
"unicode": "1F35E",
@@ -1363,7 +2941,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["breakfast", "food", "toast", "wheat", "bread", "loaf", "yeast"],
+ "keywords": [
+ "breakfast",
+ "food",
+ "toast",
+ "wheat",
+ "bread",
+ "loaf",
+ "yeast"
+ ],
"moji": "🍞"
},
"bride_with_veil": {
@@ -1374,9 +2960,121 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["couple", "marriage", "wedding", "bride", "wedding", "planning", "veil", "gown", "dress", "engagement", "white"],
+ "keywords": [
+ "couple",
+ "marriage",
+ "wedding",
+ "bride",
+ "wedding",
+ "planning",
+ "veil",
+ "gown",
+ "dress",
+ "engagement",
+ "white"
+ ],
"moji": "👰"
},
+ "bride_with_veil_tone1": {
+ "unicode": "1F470-1F3FB",
+ "unicode_alternates": "",
+ "name": "bride with veil tone 1",
+ "shortname": ":bride_with_veil_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "couple",
+ "marriage",
+ "wedding",
+ "wedding",
+ "planning",
+ "gown",
+ "dress",
+ "engagement",
+ "white"
+ ]
+ },
+ "bride_with_veil_tone2": {
+ "unicode": "1F470-1F3FC",
+ "unicode_alternates": "",
+ "name": "bride with veil tone 2",
+ "shortname": ":bride_with_veil_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "couple",
+ "marriage",
+ "wedding",
+ "wedding",
+ "planning",
+ "gown",
+ "dress",
+ "engagement",
+ "white"
+ ]
+ },
+ "bride_with_veil_tone3": {
+ "unicode": "1F470-1F3FD",
+ "unicode_alternates": "",
+ "name": "bride with veil tone 3",
+ "shortname": ":bride_with_veil_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "couple",
+ "marriage",
+ "wedding",
+ "wedding",
+ "planning",
+ "gown",
+ "dress",
+ "engagement",
+ "white"
+ ]
+ },
+ "bride_with_veil_tone4": {
+ "unicode": "1F470-1F3FE",
+ "unicode_alternates": "",
+ "name": "bride with veil tone 4",
+ "shortname": ":bride_with_veil_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "couple",
+ "marriage",
+ "wedding",
+ "wedding",
+ "planning",
+ "gown",
+ "dress",
+ "engagement",
+ "white"
+ ]
+ },
+ "bride_with_veil_tone5": {
+ "unicode": "1F470-1F3FF",
+ "unicode_alternates": "",
+ "name": "bride with veil tone 5",
+ "shortname": ":bride_with_veil_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "couple",
+ "marriage",
+ "wedding",
+ "wedding",
+ "planning",
+ "gown",
+ "dress",
+ "engagement",
+ "white"
+ ]
+ },
"bridge_at_night": {
"unicode": "1F309",
"unicode_alternates": [],
@@ -1385,7 +3083,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo", "sanfrancisco", "bridge", "night", "water", "road", "evening", "suspension", "golden", "gate"],
+ "keywords": [
+ "photo",
+ "sanfrancisco",
+ "bridge",
+ "night",
+ "water",
+ "road",
+ "evening",
+ "suspension",
+ "golden",
+ "gate"
+ ],
"moji": "🌉"
},
"briefcase": {
@@ -1396,7 +3105,11 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["business", "documents", "work"],
+ "keywords": [
+ "business",
+ "documents",
+ "work"
+ ],
"moji": "💼"
},
"broken_heart": {
@@ -1406,8 +3119,13 @@
"shortname": ":broken_heart:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["</3"],
- "keywords": ["sad", "sorry"],
+ "aliases_ascii": [
+ "</3"
+ ],
+ "keywords": [
+ "sad",
+ "sorry"
+ ],
"moji": "💔"
},
"bug": {
@@ -1418,7 +3136,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["insect", "nature", "bug", "insect", "virus", "error"],
+ "keywords": [
+ "insect",
+ "nature",
+ "bug",
+ "insect",
+ "virus",
+ "error"
+ ],
"moji": "🐛"
},
"bulb": {
@@ -1429,7 +3154,13 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["electricity", "light", "idea", "bulb", "light"],
+ "keywords": [
+ "electricity",
+ "light",
+ "idea",
+ "bulb",
+ "light"
+ ],
"moji": "💡"
},
"bullettrain_front": {
@@ -1440,7 +3171,12 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "train", "bullet", "rail"],
+ "keywords": [
+ "transportation",
+ "train",
+ "bullet",
+ "rail"
+ ],
"moji": "🚅"
},
"bullettrain_side": {
@@ -1451,7 +3187,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "train", "bullet", "rail"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "train",
+ "bullet",
+ "rail"
+ ],
"moji": "🚄"
},
"bullhorn": {
@@ -1462,7 +3204,12 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sound", "noise", "announcement", "megaphone"]
+ "keywords": [
+ "sound",
+ "noise",
+ "announcement",
+ "megaphone"
+ ]
},
"bullhorn_waves": {
"unicode": "1F56C",
@@ -1470,9 +3217,26 @@
"name": "bullhorn with sound waves",
"shortname": ":bullhorn_waves:",
"category": "objects_symbols",
- "aliases": [":bullhorn_with_sound_waves:"],
+ "aliases": [
+ ":bullhorn_with_sound_waves:"
+ ],
"aliases_ascii": [],
- "keywords": ["sound", "noise", "announcement", "megaphone"]
+ "keywords": [
+ "sound",
+ "noise",
+ "announcement",
+ "megaphone"
+ ]
+ },
+ "burrito": {
+ "unicode": "1F32F",
+ "unicode_alternates": "",
+ "name": "burrito",
+ "shortname": ":burrito:",
+ "category": "foods",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
},
"bus": {
"unicode": "1F68C",
@@ -1482,7 +3246,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["car", "transportation", "vehicle", "bus", "school", "city", "transportation", "public"],
+ "keywords": [
+ "car",
+ "transportation",
+ "vehicle",
+ "bus",
+ "school",
+ "city",
+ "transportation",
+ "public"
+ ],
"moji": "🚌"
},
"busstop": {
@@ -1493,7 +3266,14 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "bus", "stop", "city", "transport", "transportation"],
+ "keywords": [
+ "transportation",
+ "bus",
+ "stop",
+ "city",
+ "transport",
+ "transportation"
+ ],
"moji": "🚏"
},
"bust_in_silhouette": {
@@ -1504,7 +3284,24 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["human", "man", "person", "user", "silhouette", "person", "user", "member", "account", "guest", "icon", "avatar", "profile", "me", "myself", "i"],
+ "keywords": [
+ "human",
+ "man",
+ "person",
+ "user",
+ "silhouette",
+ "person",
+ "user",
+ "member",
+ "account",
+ "guest",
+ "icon",
+ "avatar",
+ "profile",
+ "me",
+ "myself",
+ "i"
+ ],
"moji": "👤"
},
"busts_in_silhouette": {
@@ -1515,7 +3312,22 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["group", "human", "man", "person", "team", "user", "silhouette", "silhouettes", "people", "user", "members", "accounts", "relationship", "shadow"],
+ "keywords": [
+ "group",
+ "human",
+ "man",
+ "person",
+ "team",
+ "user",
+ "silhouette",
+ "silhouettes",
+ "people",
+ "user",
+ "members",
+ "accounts",
+ "relationship",
+ "shadow"
+ ],
"moji": "👥"
},
"cactus": {
@@ -1526,7 +3338,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "vegetable", "cactus", "desert", "drought", "spike", "poke"],
+ "keywords": [
+ "nature",
+ "plant",
+ "vegetable",
+ "cactus",
+ "desert",
+ "drought",
+ "spike",
+ "poke"
+ ],
"moji": "🌵"
},
"cake": {
@@ -1537,7 +3358,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "food", "cake", "short", "dessert", "strawberry"],
+ "keywords": [
+ "desert",
+ "food",
+ "cake",
+ "short",
+ "dessert",
+ "strawberry"
+ ],
"moji": "🍰"
},
"calculator": {
@@ -1546,9 +3374,17 @@
"name": "pocket calculator",
"shortname": ":calculator:",
"category": "objects_symbols",
- "aliases": [":pocket calculator:"],
- "aliases_ascii": [],
- "keywords": ["add", "subtract", "multiple", "divide", "scientific"]
+ "aliases": [
+ ":pocket calculator:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "add",
+ "subtract",
+ "multiple",
+ "divide",
+ "scientific"
+ ]
},
"calendar": {
"unicode": "1F4C6",
@@ -1558,7 +3394,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["schedule"],
+ "keywords": [
+ "schedule"
+ ],
"moji": "📆"
},
"calendar_spiral": {
@@ -1567,9 +3405,15 @@
"name": "spiral calendar pad",
"shortname": ":calendar_spiral:",
"category": "objects_symbols",
- "aliases": [":spiral_calendar_pad:"],
+ "aliases": [
+ ":spiral_calendar_pad:"
+ ],
"aliases_ascii": [],
- "keywords": ["schedule", "date", "day"]
+ "keywords": [
+ "schedule",
+ "date",
+ "day"
+ ]
},
"calling": {
"unicode": "1F4F2",
@@ -1579,7 +3423,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["incoming", "iphone"],
+ "keywords": [
+ "incoming",
+ "iphone"
+ ],
"moji": "📲"
},
"camel": {
@@ -1590,7 +3437,22 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "hot", "nature", "bactrian", "camel", "hump", "desert", "central asia", "heat", "hot", "water", "hump day", "wednesday", "sex"],
+ "keywords": [
+ "animal",
+ "hot",
+ "nature",
+ "bactrian",
+ "camel",
+ "hump",
+ "desert",
+ "central asia",
+ "heat",
+ "hot",
+ "water",
+ "hump day",
+ "wednesday",
+ "sex"
+ ],
"moji": "🐫"
},
"camera": {
@@ -1601,7 +3463,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["gadgets", "photo"],
+ "keywords": [
+ "gadgets",
+ "photo"
+ ],
"moji": "📷"
},
"camera_with_flash": {
@@ -1612,7 +3477,10 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo", "picture"]
+ "keywords": [
+ "photo",
+ "picture"
+ ]
},
"camping": {
"unicode": "1F3D5",
@@ -1622,7 +3490,13 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["outdoors", "nature", "wilderness", "roughing", "activity"]
+ "keywords": [
+ "outdoors",
+ "nature",
+ "wilderness",
+ "roughing",
+ "activity"
+ ]
},
"cancellation_x": {
"unicode": "1F5D9",
@@ -1632,17 +3506,35 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cancel", "stop", "delete"]
+ "keywords": [
+ "cancel",
+ "stop",
+ "delete"
+ ]
},
"cancer": {
"unicode": "264B",
- "unicode_alternates": ["264B-FE0F"],
+ "unicode_alternates": [
+ "264B-FE0F"
+ ],
"name": "cancer",
"shortname": ":cancer:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cancer", "crab", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "cancer",
+ "crab",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♋"
},
"candle": {
@@ -1653,7 +3545,10 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["light", "wax"]
+ "keywords": [
+ "light",
+ "wax"
+ ]
},
"candy": {
"unicode": "1F36C",
@@ -1663,7 +3558,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "snack", "candy", "sugar", "sweet", "hard"],
+ "keywords": [
+ "desert",
+ "snack",
+ "candy",
+ "sugar",
+ "sweet",
+ "hard"
+ ],
"moji": "🍬"
},
"capital_abcd": {
@@ -1674,18 +3576,37 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "blue-square", "words"],
+ "keywords": [
+ "alphabet",
+ "blue-square",
+ "words"
+ ],
"moji": "🔠"
},
"capricorn": {
"unicode": "2651",
- "unicode_alternates": ["2651-FE0F"],
+ "unicode_alternates": [
+ "2651-FE0F"
+ ],
"name": "capricorn",
"shortname": ":capricorn:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["capricorn", "sea-goat", "goat-horned", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "capricorn",
+ "sea-goat",
+ "goat-horned",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♑"
},
"card_box": {
@@ -1694,9 +3615,14 @@
"name": "card file box",
"shortname": ":card_box:",
"category": "objects_symbols",
- "aliases": [":card_file_box:"],
+ "aliases": [
+ ":card_file_box:"
+ ],
"aliases_ascii": [],
- "keywords": ["index", "organization"]
+ "keywords": [
+ "index",
+ "organization"
+ ]
},
"card_index": {
"unicode": "1F4C7",
@@ -1706,7 +3632,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["business", "stationery"],
+ "keywords": [
+ "business",
+ "stationery"
+ ],
"moji": "📇"
},
"carousel_horse": {
@@ -1717,7 +3646,19 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["carnival", "horse", "photo", "carousel", "horse", "amusement", "park", "ride", "entertainment", "park", "fair"],
+ "keywords": [
+ "carnival",
+ "horse",
+ "photo",
+ "carousel",
+ "horse",
+ "amusement",
+ "park",
+ "ride",
+ "entertainment",
+ "park",
+ "fair"
+ ],
"moji": "🎠"
},
"cartridge": {
@@ -1726,9 +3667,21 @@
"name": "tape cartridge",
"shortname": ":cartridge:",
"category": "objects_symbols",
- "aliases": [":tape_cartridge:"],
- "aliases_ascii": [],
- "keywords": ["oldschool", "save", "technology", "disk", "storage", "information", "computer", "drive", "megabyte"]
+ "aliases": [
+ ":tape_cartridge:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "oldschool",
+ "save",
+ "technology",
+ "disk",
+ "storage",
+ "information",
+ "computer",
+ "drive",
+ "megabyte"
+ ]
},
"cat": {
"unicode": "1F431",
@@ -1738,7 +3691,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "meow"],
+ "keywords": [
+ "animal",
+ "meow"
+ ],
"moji": "🐱"
},
"cat2": {
@@ -1749,9 +3705,36 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "meow", "pet", "cat", "kitten", "meow"],
+ "keywords": [
+ "animal",
+ "meow",
+ "pet",
+ "cat",
+ "kitten",
+ "meow"
+ ],
"moji": "🐈"
},
+ "cd": {
+ "unicode": "1F4BF",
+ "unicode_alternates": "",
+ "name": "optical disc",
+ "shortname": ":cd:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "disc",
+ "disk",
+ "dvd",
+ "technology",
+ "blu-ray",
+ "cd",
+ "computer",
+ "object",
+ "office"
+ ]
+ },
"celtic_cross": {
"unicode": "1F548",
"unicode_alternates": [],
@@ -1760,7 +3743,35 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["religion", "symbol"]
+ "keywords": [
+ "religion",
+ "symbol"
+ ]
+ },
+ "chains": {
+ "unicode": "26D3",
+ "unicode_alternates": "",
+ "name": "chains",
+ "shortname": ":chains:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "chain",
+ "object"
+ ]
+ },
+ "champagne": {
+ "unicode": "1F37E",
+ "unicode_alternates": "",
+ "name": "bottle with popping cork",
+ "shortname": ":champagne:",
+ "category": "foods",
+ "aliases": [
+ ":bottle_with_popping_cork:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"chart": {
"unicode": "1F4B9",
@@ -1770,7 +3781,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["graph", "green-square"],
+ "keywords": [
+ "graph",
+ "green-square"
+ ],
"moji": "💹"
},
"chart_with_downwards_trend": {
@@ -1781,7 +3795,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["graph"],
+ "keywords": [
+ "graph"
+ ],
"moji": "📉"
},
"chart_with_upwards_trend": {
@@ -1792,7 +3808,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["graph"],
+ "keywords": [
+ "graph"
+ ],
"moji": "📈"
},
"checkered_flag": {
@@ -1803,9 +3821,33 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["contest", "finishline", "gokart", "rase", "checkered", "chequred", "race", "flag", "finish", "complete", "end"],
+ "keywords": [
+ "contest",
+ "finishline",
+ "gokart",
+ "rase",
+ "checkered",
+ "chequred",
+ "race",
+ "flag",
+ "finish",
+ "complete",
+ "end"
+ ],
"moji": "🏁"
},
+ "cheese": {
+ "unicode": "1F9C0",
+ "unicode_alternates": "",
+ "name": "cheese wedge",
+ "shortname": ":cheese:",
+ "category": "foods",
+ "aliases": [
+ ":cheese_wedge:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"cherries": {
"unicode": "1F352",
"unicode_alternates": [],
@@ -1814,7 +3856,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "cherry", "cherries", "tree", "fruit", "pit"],
+ "keywords": [
+ "food",
+ "fruit",
+ "cherry",
+ "cherries",
+ "tree",
+ "fruit",
+ "pit"
+ ],
"moji": "🍒"
},
"cherry_blossom": {
@@ -1825,7 +3875,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flower", "nature", "plant", "cherry", "blossom", "tree", "flower"],
+ "keywords": [
+ "flower",
+ "nature",
+ "plant",
+ "cherry",
+ "blossom",
+ "tree",
+ "flower"
+ ],
"moji": "🌸"
},
"chestnut": {
@@ -1836,7 +3894,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "squirrel", "chestnut", "roasted", "food", "tree"],
+ "keywords": [
+ "food",
+ "squirrel",
+ "chestnut",
+ "roasted",
+ "food",
+ "tree"
+ ],
"moji": "🌰"
},
"chicken": {
@@ -1847,7 +3912,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cluck", "chicken", "hen", "poultry", "livestock"],
+ "keywords": [
+ "animal",
+ "cluck",
+ "chicken",
+ "hen",
+ "poultry",
+ "livestock"
+ ],
"moji": "🐔"
},
"children_crossing": {
@@ -1858,7 +3930,16 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["school", "children", "kids", "caution", "crossing", "street", "crosswalk", "slow"],
+ "keywords": [
+ "school",
+ "children",
+ "kids",
+ "caution",
+ "crossing",
+ "street",
+ "crosswalk",
+ "slow"
+ ],
"moji": "🚸"
},
"chipmunk": {
@@ -1869,7 +3950,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"]
+ "keywords": [
+ "animal",
+ "nature"
+ ]
},
"chocolate_bar": {
"unicode": "1F36B",
@@ -1879,7 +3963,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "food", "snack", "chocolate", "bar", "candy", "coca", "hershey&#039;s"],
+ "keywords": [
+ "desert",
+ "food",
+ "snack",
+ "chocolate",
+ "bar",
+ "candy",
+ "coca",
+ "hershey&#039;s"
+ ],
"moji": "🍫"
},
"christmas_tree": {
@@ -1890,18 +3983,42 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["celebration", "december", "festival", "vacation", "xmas", "christmas", "xmas", "santa", "holiday", "winter", "december", "santa", "evergreen", "ornaments", "jesus", "gifts", "presents"],
+ "keywords": [
+ "celebration",
+ "december",
+ "festival",
+ "vacation",
+ "xmas",
+ "christmas",
+ "xmas",
+ "santa",
+ "holiday",
+ "winter",
+ "december",
+ "santa",
+ "evergreen",
+ "ornaments",
+ "jesus",
+ "gifts",
+ "presents"
+ ],
"moji": "🎄"
},
"church": {
"unicode": "26EA",
- "unicode_alternates": ["26EA-FE0F"],
+ "unicode_alternates": [
+ "26EA-FE0F"
+ ],
"name": "church",
"shortname": ":church:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "christ", "religion"],
+ "keywords": [
+ "building",
+ "christ",
+ "religion"
+ ],
"moji": "⛪"
},
"cinema": {
@@ -1912,7 +4029,17 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "film", "movie", "record", "cinema", "movie", "theater", "motion", "picture"],
+ "keywords": [
+ "blue-square",
+ "film",
+ "movie",
+ "record",
+ "cinema",
+ "movie",
+ "theater",
+ "motion",
+ "picture"
+ ],
"moji": "🎦"
},
"circus_tent": {
@@ -1923,7 +4050,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["carnival", "festival", "party", "circus", "tent", "event", "carnival", "big", "top", "canvas"],
+ "keywords": [
+ "carnival",
+ "festival",
+ "party",
+ "circus",
+ "tent",
+ "event",
+ "carnival",
+ "big",
+ "top",
+ "canvas"
+ ],
"moji": "🎪"
},
"city_dusk": {
@@ -1934,7 +4072,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo", "city", "scape", "sunset", "dusk", "lights", "evening", "metropolitan", "night", "dark"],
+ "keywords": [
+ "photo",
+ "city",
+ "scape",
+ "sunset",
+ "dusk",
+ "lights",
+ "evening",
+ "metropolitan",
+ "night",
+ "dark"
+ ],
"moji": "🌆"
},
"city_sunset": {
@@ -1943,9 +4092,22 @@
"name": "sunset over buildings",
"shortname": ":city_sunset:",
"category": "places",
- "aliases": [":city_sunrise:"],
- "aliases_ascii": [],
- "keywords": ["photo", "city", "scape", "sunrise", "dawn", "light", "morning", "metropolitan", "rise", "sun"],
+ "aliases": [
+ ":city_sunrise:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "photo",
+ "city",
+ "scape",
+ "sunrise",
+ "dawn",
+ "light",
+ "morning",
+ "metropolitan",
+ "rise",
+ "sun"
+ ],
"moji": "🌇"
},
"cityscape": {
@@ -1956,7 +4118,32 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["skyscraper", "city", "view", "lights", "buiildings", "metropolis"]
+ "keywords": [
+ "skyscraper",
+ "city",
+ "view",
+ "lights",
+ "buiildings",
+ "metropolis"
+ ]
+ },
+ "cl": {
+ "unicode": "1F191",
+ "unicode_alternates": "",
+ "name": "squared cl",
+ "shortname": ":cl:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "alphabet",
+ "red-square",
+ "words",
+ "cl",
+ "clear",
+ "symbol",
+ "word"
+ ]
},
"clap": {
"unicode": "1F44F",
@@ -1966,9 +4153,120 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["applause", "congrats", "hands", "praise", "clapping", "appreciation", "approval", "sound", "encouragement", "enthusiasm"],
+ "keywords": [
+ "applause",
+ "congrats",
+ "hands",
+ "praise",
+ "clapping",
+ "appreciation",
+ "approval",
+ "sound",
+ "encouragement",
+ "enthusiasm"
+ ],
"moji": "👏"
},
+ "clap_tone1": {
+ "unicode": "1F44F-1F3FB",
+ "unicode_alternates": "",
+ "name": "clapping hands sign tone 1",
+ "shortname": ":clap_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "applause",
+ "congrats",
+ "praise",
+ "clap",
+ "appreciation",
+ "approval",
+ "sound",
+ "encouragement",
+ "enthusiasm"
+ ]
+ },
+ "clap_tone2": {
+ "unicode": "1F44F-1F3FC",
+ "unicode_alternates": "",
+ "name": "clapping hands sign tone 2",
+ "shortname": ":clap_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "applause",
+ "congrats",
+ "praise",
+ "clap",
+ "appreciation",
+ "approval",
+ "sound",
+ "encouragement",
+ "enthusiasm"
+ ]
+ },
+ "clap_tone3": {
+ "unicode": "1F44F-1F3FD",
+ "unicode_alternates": "",
+ "name": "clapping hands sign tone 3",
+ "shortname": ":clap_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "applause",
+ "congrats",
+ "praise",
+ "clap",
+ "appreciation",
+ "approval",
+ "sound",
+ "encouragement",
+ "enthusiasm"
+ ]
+ },
+ "clap_tone4": {
+ "unicode": "1F44F-1F3FE",
+ "unicode_alternates": "",
+ "name": "clapping hands sign tone 4",
+ "shortname": ":clap_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "applause",
+ "congrats",
+ "praise",
+ "clap",
+ "appreciation",
+ "approval",
+ "sound",
+ "encouragement",
+ "enthusiasm"
+ ]
+ },
+ "clap_tone5": {
+ "unicode": "1F44F-1F3FF",
+ "unicode_alternates": "",
+ "name": "clapping hands sign tone 5",
+ "shortname": ":clap_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "applause",
+ "congrats",
+ "praise",
+ "clap",
+ "appreciation",
+ "approval",
+ "sound",
+ "encouragement",
+ "enthusiasm"
+ ]
+ },
"clapper": {
"unicode": "1F3AC",
"unicode_alternates": [],
@@ -1977,7 +4275,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["film", "movie", "record", "clapper", "board", "clapboard", "movie", "film", "take"],
+ "keywords": [
+ "film",
+ "movie",
+ "record",
+ "clapper",
+ "board",
+ "clapboard",
+ "movie",
+ "film",
+ "take"
+ ],
"moji": "🎬"
},
"classical_building": {
@@ -1988,7 +4296,13 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["government", "architecture", "history", "iconic", "genre"]
+ "keywords": [
+ "government",
+ "architecture",
+ "history",
+ "iconic",
+ "genre"
+ ]
},
"clipboard": {
"unicode": "1F4CB",
@@ -1998,7 +4312,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents", "stationery"],
+ "keywords": [
+ "documents",
+ "stationery"
+ ],
"moji": "📋"
},
"clock": {
@@ -2007,9 +4324,13 @@
"name": "mantlepiece clock",
"shortname": ":clock:",
"category": "objects_symbols",
- "aliases": [":mantlepiece_clock:"],
+ "aliases": [
+ ":mantlepiece_clock:"
+ ],
"aliases_ascii": [],
- "keywords": ["time"]
+ "keywords": [
+ "time"
+ ]
},
"clock1": {
"unicode": "1F550",
@@ -2019,7 +4340,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕐"
},
"clock10": {
@@ -2030,7 +4354,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕙"
},
"clock1030": {
@@ -2041,7 +4368,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕥"
},
"clock11": {
@@ -2052,7 +4382,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕚"
},
"clock1130": {
@@ -2063,7 +4396,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕦"
},
"clock12": {
@@ -2074,7 +4410,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕛"
},
"clock1230": {
@@ -2085,7 +4424,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"]
+ "keywords": [
+ "clock",
+ "time"
+ ]
},
"clock130": {
"unicode": "1F55C",
@@ -2095,7 +4437,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕜"
},
"clock2": {
@@ -2106,7 +4451,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕑"
},
"clock230": {
@@ -2117,7 +4465,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕝"
},
"clock3": {
@@ -2128,7 +4479,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕒"
},
"clock330": {
@@ -2139,7 +4493,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕞"
},
"clock4": {
@@ -2150,7 +4507,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕓"
},
"clock430": {
@@ -2161,7 +4521,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕟"
},
"clock5": {
@@ -2172,7 +4535,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕔"
},
"clock530": {
@@ -2183,7 +4549,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕠"
},
"clock6": {
@@ -2194,7 +4563,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕕"
},
"clock630": {
@@ -2205,7 +4577,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕡"
},
"clock7": {
@@ -2216,7 +4591,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕖"
},
"clock730": {
@@ -2227,7 +4605,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕢"
},
"clock8": {
@@ -2238,7 +4619,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕗"
},
"clock830": {
@@ -2249,7 +4633,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕣"
},
"clock9": {
@@ -2260,7 +4647,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕘"
},
"clock930": {
@@ -2271,7 +4661,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "time"],
+ "keywords": [
+ "clock",
+ "time"
+ ],
"moji": "🕤"
},
"clockwise_arrows": {
@@ -2280,9 +4673,13 @@
"name": "clockwise right and left semicircle arrows",
"shortname": ":clockwise_arrows:",
"category": "objects_symbols",
- "aliases": [":clockwise_right_and_left_semicircle_arrows:"],
+ "aliases": [
+ ":clockwise_right_and_left_semicircle_arrows:"
+ ],
"aliases_ascii": [],
- "keywords": ["sync"]
+ "keywords": [
+ "sync"
+ ]
},
"closed_book": {
"unicode": "1F4D5",
@@ -2292,7 +4689,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["knowledge", "library", "read"],
+ "keywords": [
+ "knowledge",
+ "library",
+ "read"
+ ],
"moji": "📕"
},
"closed_lock_with_key": {
@@ -2303,7 +4704,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["privacy", "security"],
+ "keywords": [
+ "privacy",
+ "security"
+ ],
"moji": "🔐"
},
"closed_umbrella": {
@@ -2314,18 +4718,35 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["drizzle", "rain", "weather", "umbrella", "closed", "rain", "moisture", "protection", "sun", "ultraviolet", "uv"],
+ "keywords": [
+ "drizzle",
+ "rain",
+ "weather",
+ "umbrella",
+ "closed",
+ "rain",
+ "moisture",
+ "protection",
+ "sun",
+ "ultraviolet",
+ "uv"
+ ],
"moji": "🌂"
},
"cloud": {
"unicode": "2601",
- "unicode_alternates": ["2601-FE0F"],
+ "unicode_alternates": [
+ "2601-FE0F"
+ ],
"name": "cloud",
"shortname": ":cloud:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sky", "weather"],
+ "keywords": [
+ "sky",
+ "weather"
+ ],
"moji": "☁"
},
"cloud_lightning": {
@@ -2334,9 +4755,14 @@
"name": "cloud with lightning",
"shortname": ":cloud_lightning:",
"category": "nature",
- "aliases": [":cloud_with_lightning:"],
+ "aliases": [
+ ":cloud_with_lightning:"
+ ],
"aliases_ascii": [],
- "keywords": ["weather", "thunder"]
+ "keywords": [
+ "weather",
+ "thunder"
+ ]
},
"cloud_rain": {
"unicode": "1F327",
@@ -2344,9 +4770,14 @@
"name": "cloud with rain",
"shortname": ":cloud_rain:",
"category": "nature",
- "aliases": [":cloud_with_rain:"],
+ "aliases": [
+ ":cloud_with_rain:"
+ ],
"aliases_ascii": [],
- "keywords": ["weather", "wet"]
+ "keywords": [
+ "weather",
+ "wet"
+ ]
},
"cloud_snow": {
"unicode": "1F328",
@@ -2354,9 +4785,14 @@
"name": "cloud with snow",
"shortname": ":cloud_snow:",
"category": "nature",
- "aliases": [":cloud_with_snow:"],
+ "aliases": [
+ ":cloud_with_snow:"
+ ],
"aliases_ascii": [],
- "keywords": ["weather", "cold"]
+ "keywords": [
+ "weather",
+ "cold"
+ ]
},
"cloud_tornado": {
"unicode": "1F32A",
@@ -2364,19 +4800,30 @@
"name": "cloud with tornado",
"shortname": ":cloud_tornado:",
"category": "nature",
- "aliases": [":cloud_with_tornado:"],
+ "aliases": [
+ ":cloud_with_tornado:"
+ ],
"aliases_ascii": [],
- "keywords": ["weather", "destruction", "funnel"]
+ "keywords": [
+ "weather",
+ "destruction",
+ "funnel"
+ ]
},
"clubs": {
"unicode": "2663",
- "unicode_alternates": ["2663-FE0F"],
+ "unicode_alternates": [
+ "2663-FE0F"
+ ],
"name": "black club suit",
"shortname": ":clubs:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cards", "poker"],
+ "keywords": [
+ "cards",
+ "poker"
+ ],
"moji": "♣"
},
"cocktail": {
@@ -2387,20 +4834,52 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alcohol", "beverage", "drink", "drunk", "cocktail", "mixed", "drink", "alcohol", "glass", "martini", "bar"],
+ "keywords": [
+ "alcohol",
+ "beverage",
+ "drink",
+ "drunk",
+ "cocktail",
+ "mixed",
+ "drink",
+ "alcohol",
+ "glass",
+ "martini",
+ "bar"
+ ],
"moji": "🍸"
},
"coffee": {
"unicode": "2615",
- "unicode_alternates": ["2615-FE0F"],
+ "unicode_alternates": [
+ "2615-FE0F"
+ ],
"name": "hot beverage",
"shortname": ":coffee:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beverage", "cafe", "drink", "espresso"],
+ "keywords": [
+ "beverage",
+ "cafe",
+ "drink",
+ "espresso"
+ ],
"moji": "☕"
},
+ "coffin": {
+ "unicode": "26B0",
+ "unicode_alternates": "",
+ "name": "coffin",
+ "shortname": ":coffin:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "death",
+ "object"
+ ]
+ },
"cold_sweat": {
"unicode": "1F630",
"unicode_alternates": [],
@@ -2409,9 +4888,28 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "nervous", "sweat", "exasperated", "frustrated"],
+ "keywords": [
+ "face",
+ "nervous",
+ "sweat",
+ "exasperated",
+ "frustrated"
+ ],
"moji": "😰"
},
+ "comet": {
+ "unicode": "2604",
+ "unicode_alternates": "",
+ "name": "comet",
+ "shortname": ":comet:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "object",
+ "space"
+ ]
+ },
"compression": {
"unicode": "1F5DC",
"unicode_alternates": [],
@@ -2420,7 +4918,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["reduce"]
+ "keywords": [
+ "reduce"
+ ]
},
"computer": {
"unicode": "1F4BB",
@@ -2430,7 +4930,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["laptop", "tech"],
+ "keywords": [
+ "laptop",
+ "tech"
+ ],
"moji": "💻"
},
"computer_old": {
@@ -2439,9 +4942,14 @@
"name": "old personal computer",
"shortname": ":computer_old:",
"category": "objects_symbols",
- "aliases": [":old_personal_computer:"],
+ "aliases": [
+ ":old_personal_computer:"
+ ],
"aliases_ascii": [],
- "keywords": ["cpu", "terminal"]
+ "keywords": [
+ "cpu",
+ "terminal"
+ ]
},
"confetti_ball": {
"unicode": "1F38A",
@@ -2451,7 +4959,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["festival", "party", "party", "congratulations", "confetti", "ball", "celebrate", "win", "birthday", "new years", "wedding"],
+ "keywords": [
+ "festival",
+ "party",
+ "party",
+ "congratulations",
+ "confetti",
+ "ball",
+ "celebrate",
+ "win",
+ "birthday",
+ "new years",
+ "wedding"
+ ],
"moji": "🎊"
},
"confounded": {
@@ -2462,7 +4982,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["confused", "face", "sick", "unwell", "confound", "amaze", "perplex", "puzzle", "mystify"],
+ "keywords": [
+ "confused",
+ "face",
+ "sick",
+ "unwell",
+ "confound",
+ "amaze",
+ "perplex",
+ "puzzle",
+ "mystify"
+ ],
"moji": "😖"
},
"confused": {
@@ -2472,19 +5002,47 @@
"shortname": ":confused:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [">:\\", ">:/", ":-/", ":-.", ":/", ":\\", "=/", "=\\", ":L", "=L"],
- "keywords": ["confused", "confuse", "daze", "perplex", "puzzle", "indifference", "skeptical", "undecided", "uneasy", "hesitant"],
+ "aliases_ascii": [
+ ">:\\",
+ ">:/",
+ ":-/",
+ ":-.",
+ ":/",
+ ":\\",
+ "=/",
+ "=\\",
+ ":L",
+ "=L"
+ ],
+ "keywords": [
+ "confused",
+ "confuse",
+ "daze",
+ "perplex",
+ "puzzle",
+ "indifference",
+ "skeptical",
+ "undecided",
+ "uneasy",
+ "hesitant"
+ ],
"moji": "😕"
},
"congratulations": {
"unicode": "3297",
- "unicode_alternates": ["3297-FE0F"],
+ "unicode_alternates": [
+ "3297-FE0F"
+ ],
"name": "circled ideograph congratulation",
"shortname": ":congratulations:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "japanese", "kanji"],
+ "keywords": [
+ "chinese",
+ "japanese",
+ "kanji"
+ ],
"moji": "㊗"
},
"construction": {
@@ -2495,9 +5053,29 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["caution", "progress", "wip"],
+ "keywords": [
+ "caution",
+ "progress",
+ "wip"
+ ],
"moji": "🚧"
},
+ "construction_site": {
+ "unicode": "1F3D7",
+ "unicode_alternates": "",
+ "name": "building construction",
+ "shortname": ":construction_site:",
+ "category": "travel",
+ "aliases": [
+ ":building_construction:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "site",
+ "work",
+ "place"
+ ]
+ },
"construction_worker": {
"unicode": "1F477",
"unicode_alternates": [],
@@ -2506,9 +5084,89 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["human", "male", "man", "wip"],
+ "keywords": [
+ "human",
+ "male",
+ "man",
+ "wip"
+ ],
"moji": "👷"
},
+ "construction_worker_tone1": {
+ "unicode": "1F477-1F3FB",
+ "unicode_alternates": "",
+ "name": "construction worker tone 1",
+ "shortname": ":construction_worker_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "human",
+ "male",
+ "man",
+ "wip"
+ ]
+ },
+ "construction_worker_tone2": {
+ "unicode": "1F477-1F3FC",
+ "unicode_alternates": "",
+ "name": "construction worker tone 2",
+ "shortname": ":construction_worker_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "human",
+ "male",
+ "man",
+ "wip"
+ ]
+ },
+ "construction_worker_tone3": {
+ "unicode": "1F477-1F3FD",
+ "unicode_alternates": "",
+ "name": "construction worker tone 3",
+ "shortname": ":construction_worker_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "human",
+ "male",
+ "man",
+ "wip"
+ ]
+ },
+ "construction_worker_tone4": {
+ "unicode": "1F477-1F3FE",
+ "unicode_alternates": "",
+ "name": "construction worker tone 4",
+ "shortname": ":construction_worker_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "human",
+ "male",
+ "man",
+ "wip"
+ ]
+ },
+ "construction_worker_tone5": {
+ "unicode": "1F477-1F3FF",
+ "unicode_alternates": "",
+ "name": "construction worker tone 5",
+ "shortname": ":construction_worker_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "human",
+ "male",
+ "man",
+ "wip"
+ ]
+ },
"control_knobs": {
"unicode": "1F39B",
"unicode_alternates": [],
@@ -2517,7 +5175,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dial"]
+ "keywords": [
+ "dial"
+ ]
},
"contruction_site": {
"unicode": "1F3D7",
@@ -2525,9 +5185,14 @@
"name": "building construction",
"shortname": ":contruction_site:",
"category": "travel_places",
- "aliases": [":building_construction:"],
+ "aliases": [
+ ":building_construction:"
+ ],
"aliases_ascii": [],
- "keywords": ["site", "work"]
+ "keywords": [
+ "site",
+ "work"
+ ]
},
"convenience_store": {
"unicode": "1F3EA",
@@ -2537,7 +5202,9 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building"],
+ "keywords": [
+ "building"
+ ],
"moji": "🏪"
},
"cookie": {
@@ -2548,7 +5215,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chocolate", "food", "oreo", "snack", "cookie", "dessert", "biscuit", "sweet", "chocolate"],
+ "keywords": [
+ "chocolate",
+ "food",
+ "oreo",
+ "snack",
+ "cookie",
+ "dessert",
+ "biscuit",
+ "sweet",
+ "chocolate"
+ ],
"moji": "🍪"
},
"cool": {
@@ -2559,7 +5236,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "words"],
+ "keywords": [
+ "blue-square",
+ "words"
+ ],
"moji": "🆒"
},
"cop": {
@@ -2570,9 +5250,95 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrest", "enforcement", "law", "man", "police"],
+ "keywords": [
+ "arrest",
+ "enforcement",
+ "law",
+ "man",
+ "police"
+ ],
"moji": "👮"
},
+ "cop_tone1": {
+ "unicode": "1F46E-1F3FB",
+ "unicode_alternates": "",
+ "name": "police officer tone 1",
+ "shortname": ":cop_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrest",
+ "enforcement",
+ "law",
+ "man",
+ "cop"
+ ]
+ },
+ "cop_tone2": {
+ "unicode": "1F46E-1F3FC",
+ "unicode_alternates": "",
+ "name": "police officer tone 2",
+ "shortname": ":cop_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrest",
+ "enforcement",
+ "law",
+ "man",
+ "cop"
+ ]
+ },
+ "cop_tone3": {
+ "unicode": "1F46E-1F3FD",
+ "unicode_alternates": "",
+ "name": "police officer tone 3",
+ "shortname": ":cop_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrest",
+ "enforcement",
+ "law",
+ "man",
+ "cop"
+ ]
+ },
+ "cop_tone4": {
+ "unicode": "1F46E-1F3FE",
+ "unicode_alternates": "",
+ "name": "police officer tone 4",
+ "shortname": ":cop_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrest",
+ "enforcement",
+ "law",
+ "man",
+ "cop"
+ ]
+ },
+ "cop_tone5": {
+ "unicode": "1F46E-1F3FF",
+ "unicode_alternates": "",
+ "name": "police officer tone 5",
+ "shortname": ":cop_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrest",
+ "enforcement",
+ "law",
+ "man",
+ "cop"
+ ]
+ },
"copyright": {
"moji": "©",
"unicode": "00A9",
@@ -2582,7 +5348,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ip", "license"]
+ "keywords": [
+ "ip",
+ "license"
+ ]
},
"corn": {
"unicode": "1F33D",
@@ -2592,7 +5361,22 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "plant", "vegetable", "corn", "maize", "food", "iowa", "kernel", "popcorn", "husk", "yellow", "stalk", "cob", "ear"],
+ "keywords": [
+ "food",
+ "plant",
+ "vegetable",
+ "corn",
+ "maize",
+ "food",
+ "iowa",
+ "kernel",
+ "popcorn",
+ "husk",
+ "yellow",
+ "stalk",
+ "cob",
+ "ear"
+ ],
"moji": "🌽"
},
"couch": {
@@ -2601,9 +5385,20 @@
"name": "couch and lamp",
"shortname": ":couch:",
"category": "travel_places",
- "aliases": [":couch_and_lamp:"],
- "aliases_ascii": [],
- "keywords": ["lounge", "sectional", "sofa", "loveseat", "leather", "microfiber", "sit", "relax"]
+ "aliases": [
+ ":couch_and_lamp:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "lounge",
+ "sectional",
+ "sofa",
+ "loveseat",
+ "leather",
+ "microfiber",
+ "sit",
+ "relax"
+ ]
},
"couple": {
"unicode": "1F46B",
@@ -2613,18 +5408,40 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "date", "dating", "human", "like", "love", "marriage", "people", "valentines"],
+ "keywords": [
+ "affection",
+ "date",
+ "dating",
+ "human",
+ "like",
+ "love",
+ "marriage",
+ "people",
+ "valentines"
+ ],
"moji": "👫"
},
"couple_mm": {
"unicode": "1F468-2764-1F468",
- "unicode_alternates": ["1F468-200D-2764-FE0F-200D-1F468"],
+ "unicode_alternates": [
+ "1F468-200D-2764-FE0F-200D-1F468"
+ ],
"name": "couple (man,man)",
"shortname": ":couple_mm:",
"category": "people",
- "aliases": [":couple_with_heart_mm:"],
- "aliases_ascii": [],
- "keywords": ["affection", "dating", "human", "like", "love", "marriage", "valentines"]
+ "aliases": [
+ ":couple_with_heart_mm:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "affection",
+ "dating",
+ "human",
+ "like",
+ "love",
+ "marriage",
+ "valentines"
+ ]
},
"couple_with_heart": {
"unicode": "1F491",
@@ -2634,18 +5451,38 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "dating", "human", "like", "love", "marriage", "valentines"],
+ "keywords": [
+ "affection",
+ "dating",
+ "human",
+ "like",
+ "love",
+ "marriage",
+ "valentines"
+ ],
"moji": "💑"
},
"couple_ww": {
"unicode": "1F469-2764-1F469",
- "unicode_alternates": ["1F469-200D-2764-FE0F-200D-1F469"],
+ "unicode_alternates": [
+ "1F469-200D-2764-FE0F-200D-1F469"
+ ],
"name": "couple (woman,woman)",
"shortname": ":couple_ww:",
"category": "people",
- "aliases": [":couple_with_heart_ww:"],
- "aliases_ascii": [],
- "keywords": ["affection", "dating", "human", "like", "love", "marriage", "valentines"]
+ "aliases": [
+ ":couple_with_heart_ww:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "affection",
+ "dating",
+ "human",
+ "like",
+ "love",
+ "marriage",
+ "valentines"
+ ]
},
"couplekiss": {
"unicode": "1F48F",
@@ -2655,7 +5492,13 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dating", "like", "love", "marriage", "valentines"],
+ "keywords": [
+ "dating",
+ "like",
+ "love",
+ "marriage",
+ "valentines"
+ ],
"moji": "💏"
},
"cow": {
@@ -2666,7 +5509,11 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "beef", "ox"],
+ "keywords": [
+ "animal",
+ "beef",
+ "ox"
+ ],
"moji": "🐮"
},
"cow2": {
@@ -2677,18 +5524,46 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "beef", "nature", "ox", "cow", "milk", "dairy", "beef", "bessie", "moo"],
+ "keywords": [
+ "animal",
+ "beef",
+ "nature",
+ "ox",
+ "cow",
+ "milk",
+ "dairy",
+ "beef",
+ "bessie",
+ "moo"
+ ],
"moji": "🐄"
},
+ "crab": {
+ "unicode": "1F980",
+ "unicode_alternates": "",
+ "name": "crab",
+ "shortname": ":crab:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"crayon": {
"unicode": "1F58D",
"unicode_alternates": [],
"name": "lower left crayon",
"shortname": ":crayon:",
"category": "objects_symbols",
- "aliases": [":lower_left_crayon:"],
+ "aliases": [
+ ":lower_left_crayon:"
+ ],
"aliases_ascii": [],
- "keywords": ["write", "draw", "color", "wax"]
+ "keywords": [
+ "write",
+ "draw",
+ "color",
+ "wax"
+ ]
},
"credit_card": {
"unicode": "1F4B3",
@@ -2698,7 +5573,23 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bill", "dollar", "money", "pay", "payment", "credit", "card", "loan", "purchase", "shopping", "mastercard", "visa", "american express", "wallet", "signature"],
+ "keywords": [
+ "bill",
+ "dollar",
+ "money",
+ "pay",
+ "payment",
+ "credit",
+ "card",
+ "loan",
+ "purchase",
+ "shopping",
+ "mastercard",
+ "visa",
+ "american express",
+ "wallet",
+ "signature"
+ ],
"moji": "💳"
},
"crescent_moon": {
@@ -2709,9 +5600,30 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "moon", "crescent", "waxing", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "night",
+ "moon",
+ "crescent",
+ "waxing",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌙"
},
+ "cricket": {
+ "unicode": "1F3CF",
+ "unicode_alternates": "",
+ "name": "cricket bat and ball",
+ "shortname": ":cricket:",
+ "category": "activity",
+ "aliases": [
+ ":cricket_bat_ball:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"crocodile": {
"unicode": "1F40A",
"unicode_alternates": [],
@@ -2720,18 +5632,47 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "crocodile", "croc", "alligator", "gator", "cranky"],
+ "keywords": [
+ "animal",
+ "nature",
+ "crocodile",
+ "croc",
+ "alligator",
+ "gator",
+ "cranky"
+ ],
"moji": "🐊"
},
+ "cross": {
+ "unicode": "271D",
+ "unicode_alternates": "",
+ "name": "latin cross",
+ "shortname": ":cross:",
+ "category": "symbols",
+ "aliases": [
+ ":latin_cross:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "religion",
+ "symbol",
+ "christian"
+ ]
+ },
"cross_heavy": {
"unicode": "1F547",
"unicode_alternates": [],
"name": "heavy latin cross",
"shortname": ":cross_heavy:",
"category": "objects_symbols",
- "aliases": [":heavy_latin_cross:"],
+ "aliases": [
+ ":heavy_latin_cross:"
+ ],
"aliases_ascii": [],
- "keywords": ["religion", "symbol"]
+ "keywords": [
+ "religion",
+ "symbol"
+ ]
},
"cross_white": {
"unicode": "1F546",
@@ -2739,9 +5680,14 @@
"name": "white latin cross",
"shortname": ":cross_white:",
"category": "objects_symbols",
- "aliases": [":white_latin_cross:"],
+ "aliases": [
+ ":white_latin_cross:"
+ ],
"aliases_ascii": [],
- "keywords": ["religion", "symbol"]
+ "keywords": [
+ "religion",
+ "symbol"
+ ]
},
"crossbones": {
"unicode": "1F571",
@@ -2749,9 +5695,15 @@
"name": "black skull and crossbones",
"shortname": ":crossbones:",
"category": "objects_symbols",
- "aliases": [":black_skull_and_crossbones:"],
+ "aliases": [
+ ":black_skull_and_crossbones:"
+ ],
"aliases_ascii": [],
- "keywords": ["poison", "danger", "death"]
+ "keywords": [
+ "poison",
+ "danger",
+ "death"
+ ]
},
"crossed_flags": {
"unicode": "1F38C",
@@ -2761,9 +5713,24 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["japan"],
+ "keywords": [
+ "japan"
+ ],
"moji": "🎌"
},
+ "crossed_swords": {
+ "unicode": "2694",
+ "unicode_alternates": "",
+ "name": "crossed swords",
+ "shortname": ":crossed_swords:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "object",
+ "weapon"
+ ]
+ },
"crown": {
"unicode": "1F451",
"unicode_alternates": [],
@@ -2772,7 +5739,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["king", "kod", "leader", "royalty"],
+ "keywords": [
+ "king",
+ "kod",
+ "leader",
+ "royalty"
+ ],
"moji": "👑"
},
"cruise_ship": {
@@ -2781,9 +5753,15 @@
"name": "passenger ship",
"shortname": ":cruise_ship:",
"category": "travel_places",
- "aliases": [":passenger_ship:"],
+ "aliases": [
+ ":passenger_ship:"
+ ],
"aliases_ascii": [],
- "keywords": ["titanic", "transportation", "boat"]
+ "keywords": [
+ "titanic",
+ "transportation",
+ "boat"
+ ]
},
"cry": {
"unicode": "1F622",
@@ -2792,8 +5770,21 @@
"shortname": ":cry:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":'(", ":'-(", ";(", ";-("],
- "keywords": ["face", "sad", "sad", "cry", "tear", "weep", "tears"],
+ "aliases_ascii": [
+ ":'(",
+ ":'-(",
+ ";(",
+ ";-("
+ ],
+ "keywords": [
+ "face",
+ "sad",
+ "sad",
+ "cry",
+ "tear",
+ "weep",
+ "tears"
+ ],
"moji": "😢"
},
"crying_cat_face": {
@@ -2804,7 +5795,22 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "sad", "tears", "weep", "cry", "cat", "sob", "tears", "sad", "melancholy", "morn", "somber", "hurt"],
+ "keywords": [
+ "animal",
+ "cats",
+ "sad",
+ "tears",
+ "weep",
+ "cry",
+ "cat",
+ "sob",
+ "tears",
+ "sad",
+ "melancholy",
+ "morn",
+ "somber",
+ "hurt"
+ ],
"moji": "😿"
},
"crystal_ball": {
@@ -2815,7 +5821,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["disco", "party"],
+ "keywords": [
+ "disco",
+ "party"
+ ],
"moji": "🔮"
},
"cupid": {
@@ -2826,7 +5835,13 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "heart", "like", "love", "valentines"],
+ "keywords": [
+ "affection",
+ "heart",
+ "like",
+ "love",
+ "valentines"
+ ],
"moji": "💘"
},
"curly_loop": {
@@ -2837,7 +5852,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["scribble"],
+ "keywords": [
+ "scribble"
+ ],
"moji": "➰"
},
"currency_exchange": {
@@ -2848,7 +5865,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dollar", "money", "travel"],
+ "keywords": [
+ "dollar",
+ "money",
+ "travel"
+ ],
"moji": "💱"
},
"curry": {
@@ -2859,7 +5880,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "hot", "indian", "spicy", "curry", "spice", "flavor", "food", "meal"],
+ "keywords": [
+ "food",
+ "hot",
+ "indian",
+ "spicy",
+ "curry",
+ "spice",
+ "flavor",
+ "food",
+ "meal"
+ ],
"moji": "🍛"
},
"custard": {
@@ -2870,7 +5901,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "food", "custard", "cream", "rich", "butter", "dessert", "crème", "brûlée", "french"],
+ "keywords": [
+ "desert",
+ "food",
+ "custard",
+ "cream",
+ "rich",
+ "butter",
+ "dessert",
+ "crème",
+ "brûlée",
+ "french"
+ ],
"moji": "🍮"
},
"customs": {
@@ -2881,7 +5923,17 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["border", "passport", "customs", "travel", "foreign", "goods", "check", "authority", "government"],
+ "keywords": [
+ "border",
+ "passport",
+ "customs",
+ "travel",
+ "foreign",
+ "goods",
+ "check",
+ "authority",
+ "government"
+ ],
"moji": "🛃"
},
"cyclone": {
@@ -2893,7 +5945,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue", "cloud", "swirl", "weather", "cyclone", "hurricane", "typhoon", "storm", "ocean"]
+ "keywords": [
+ "blue",
+ "cloud",
+ "swirl",
+ "weather",
+ "cyclone",
+ "hurricane",
+ "typhoon",
+ "storm",
+ "ocean"
+ ]
},
"dagger": {
"unicode": "1F5E1",
@@ -2901,9 +5963,14 @@
"name": "dagger knife",
"shortname": ":dagger:",
"category": "objects_symbols",
- "aliases": [":dagger_knife:"],
+ "aliases": [
+ ":dagger_knife:"
+ ],
"aliases_ascii": [],
- "keywords": ["blade", "knife"]
+ "keywords": [
+ "blade",
+ "knife"
+ ]
},
"dancer": {
"unicode": "1F483",
@@ -2913,9 +5980,145 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "fun", "girl", "woman", "dance", "dancer", "dress", "fancy", "boogy", "party", "celebrate", "ballet", "tango", "cha cha", "music"],
+ "keywords": [
+ "female",
+ "fun",
+ "girl",
+ "woman",
+ "dance",
+ "dancer",
+ "dress",
+ "fancy",
+ "boogy",
+ "party",
+ "celebrate",
+ "ballet",
+ "tango",
+ "cha cha",
+ "music"
+ ],
"moji": "💃"
},
+ "dancer_tone1": {
+ "unicode": "1F483-1F3FB",
+ "unicode_alternates": "",
+ "name": "dancer tone 1",
+ "shortname": ":dancer_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "fun",
+ "girl",
+ "woman",
+ "dress",
+ "fancy",
+ "boogy",
+ "party",
+ "celebrate",
+ "ballet",
+ "tango",
+ "cha cha",
+ "music"
+ ]
+ },
+ "dancer_tone2": {
+ "unicode": "1F483-1F3FC",
+ "unicode_alternates": "",
+ "name": "dancer tone 2",
+ "shortname": ":dancer_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "fun",
+ "girl",
+ "woman",
+ "dress",
+ "fancy",
+ "boogy",
+ "party",
+ "celebrate",
+ "ballet",
+ "tango",
+ "cha cha",
+ "music"
+ ]
+ },
+ "dancer_tone3": {
+ "unicode": "1F483-1F3FD",
+ "unicode_alternates": "",
+ "name": "dancer tone 3",
+ "shortname": ":dancer_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "fun",
+ "girl",
+ "woman",
+ "dress",
+ "fancy",
+ "boogy",
+ "party",
+ "celebrate",
+ "ballet",
+ "tango",
+ "cha cha",
+ "music"
+ ]
+ },
+ "dancer_tone4": {
+ "unicode": "1F483-1F3FE",
+ "unicode_alternates": "",
+ "name": "dancer tone 4",
+ "shortname": ":dancer_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "fun",
+ "girl",
+ "woman",
+ "dress",
+ "fancy",
+ "boogy",
+ "party",
+ "celebrate",
+ "ballet",
+ "tango",
+ "cha cha",
+ "music"
+ ]
+ },
+ "dancer_tone5": {
+ "unicode": "1F483-1F3FF",
+ "unicode_alternates": "",
+ "name": "dancer tone 5",
+ "shortname": ":dancer_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "fun",
+ "girl",
+ "woman",
+ "dress",
+ "fancy",
+ "boogy",
+ "party",
+ "celebrate",
+ "ballet",
+ "tango",
+ "cha cha",
+ "music"
+ ]
+ },
"dancers": {
"unicode": "1F46F",
"unicode_alternates": [],
@@ -2924,7 +6127,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bunny", "female", "girls", "women", "dancing", "dancers", "showgirl", "playboy", "costume", "bunny", "cancan"],
+ "keywords": [
+ "bunny",
+ "female",
+ "girls",
+ "women",
+ "dancing",
+ "dancers",
+ "showgirl",
+ "playboy",
+ "costume",
+ "bunny",
+ "cancan"
+ ],
"moji": "👯"
},
"dango": {
@@ -2935,7 +6150,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "dango", "japanese", "dumpling", "mochi", "balls", "skewer"],
+ "keywords": [
+ "food",
+ "dango",
+ "japanese",
+ "dumpling",
+ "mochi",
+ "balls",
+ "skewer"
+ ],
"moji": "🍡"
},
"dark_sunglasses": {
@@ -2946,7 +6169,10 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shades", "eyes"]
+ "keywords": [
+ "shades",
+ "eyes"
+ ]
},
"dart": {
"unicode": "1F3AF",
@@ -2956,7 +6182,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bar", "game", "direct", "hit", "bullseye", "dart", "archery", "game", "fletching", "arrow", "sport"],
+ "keywords": [
+ "bar",
+ "game",
+ "direct",
+ "hit",
+ "bullseye",
+ "dart",
+ "archery",
+ "game",
+ "fletching",
+ "arrow",
+ "sport"
+ ],
"moji": "🎯"
},
"dash": {
@@ -2967,7 +6205,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["air", "fast", "shoo", "wind"],
+ "keywords": [
+ "air",
+ "fast",
+ "shoo",
+ "wind"
+ ],
"moji": "💨"
},
"date": {
@@ -2978,7 +6221,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["calendar", "schedule"],
+ "keywords": [
+ "calendar",
+ "schedule"
+ ],
"moji": "📅"
},
"deciduous_tree": {
@@ -2989,7 +6235,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "deciduous", "tree", "leaves", "fall", "color"],
+ "keywords": [
+ "nature",
+ "plant",
+ "deciduous",
+ "tree",
+ "leaves",
+ "fall",
+ "color"
+ ],
"moji": "🌳"
},
"department_store": {
@@ -3000,7 +6254,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "mall", "shopping", "department", "store", "retail", "sale", "merchandise"],
+ "keywords": [
+ "building",
+ "mall",
+ "shopping",
+ "department",
+ "store",
+ "retail",
+ "sale",
+ "merchandise"
+ ],
"moji": "🏬"
},
"descending_notes": {
@@ -3011,7 +6274,12 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["score", "music", "sound", "tone"]
+ "keywords": [
+ "score",
+ "music",
+ "sound",
+ "tone"
+ ]
},
"desert": {
"unicode": "1F3DC",
@@ -3021,7 +6289,14 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["hot", "dry", "sandy", "cactus", "sunny", "barren"]
+ "keywords": [
+ "hot",
+ "dry",
+ "sandy",
+ "cactus",
+ "sunny",
+ "barren"
+ ]
},
"desktop": {
"unicode": "1F5A5",
@@ -3029,9 +6304,13 @@
"name": "desktop computer",
"shortname": ":desktop:",
"category": "objects_symbols",
- "aliases": [":desktop_computer:"],
+ "aliases": [
+ ":desktop_computer:"
+ ],
"aliases_ascii": [],
- "keywords": ["cpu"]
+ "keywords": [
+ "cpu"
+ ]
},
"desktop_window": {
"unicode": "1F5D4",
@@ -3041,7 +6320,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["computer"]
+ "keywords": [
+ "computer"
+ ]
},
"diamond_shape_with_a_dot_inside": {
"unicode": "1F4A0",
@@ -3051,18 +6332,31 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["diamond", "cute", "cuteness", "kawaii", "japanese", "glyph", "adorable"],
+ "keywords": [
+ "diamond",
+ "cute",
+ "cuteness",
+ "kawaii",
+ "japanese",
+ "glyph",
+ "adorable"
+ ],
"moji": "💠"
},
"diamonds": {
"unicode": "2666",
- "unicode_alternates": ["2666-FE0F"],
+ "unicode_alternates": [
+ "2666-FE0F"
+ ],
"name": "black diamond suit",
"shortname": ":diamonds:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cards", "poker"],
+ "keywords": [
+ "cards",
+ "poker"
+ ],
"moji": "♦"
},
"disappointed": {
@@ -3072,8 +6366,24 @@
"shortname": ":disappointed:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [">:[", ":-(", ":(", ":-[", ":[", "=("],
- "keywords": ["disappointed", "disappoint", "frown", "depressed", "discouraged", "face", "sad", "upset"],
+ "aliases_ascii": [
+ ">:[",
+ ":-(",
+ ":(",
+ ":-[",
+ ":[",
+ "=("
+ ],
+ "keywords": [
+ "disappointed",
+ "disappoint",
+ "frown",
+ "depressed",
+ "discouraged",
+ "face",
+ "sad",
+ "upset"
+ ],
"moji": "😞"
},
"disappointed_relieved": {
@@ -3084,7 +6394,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "nervous", "phew", "sweat", "disappoint", "relief"],
+ "keywords": [
+ "face",
+ "nervous",
+ "phew",
+ "sweat",
+ "disappoint",
+ "relief"
+ ],
"moji": "😥"
},
"dividers": {
@@ -3093,9 +6410,14 @@
"name": "card index dividers",
"shortname": ":dividers:",
"category": "objects_symbols",
- "aliases": [":card_index_dividers:"],
+ "aliases": [
+ ":card_index_dividers:"
+ ],
"aliases_ascii": [],
- "keywords": ["stationery", "rolodex"]
+ "keywords": [
+ "stationery",
+ "rolodex"
+ ]
},
"dizzy": {
"unicode": "1F4AB",
@@ -3105,7 +6427,18 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shoot", "sparkle", "star", "dizzy", "drunk", "sick", "intoxicated", "squeans", "starburst", "star"],
+ "keywords": [
+ "shoot",
+ "sparkle",
+ "star",
+ "dizzy",
+ "drunk",
+ "sick",
+ "intoxicated",
+ "squeans",
+ "starburst",
+ "star"
+ ],
"moji": "💫"
},
"dizzy_face": {
@@ -3115,8 +6448,23 @@
"shortname": ":dizzy_face:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["#-)", "#)", "%-)", "%)", "X)", "X-)"],
- "keywords": ["dizzy", "drunk", "inebriated", "face", "spent", "unconscious", "xox"],
+ "aliases_ascii": [
+ "#-)",
+ "#)",
+ "%-)",
+ "%)",
+ "X)",
+ "X-)"
+ ],
+ "keywords": [
+ "dizzy",
+ "drunk",
+ "inebriated",
+ "face",
+ "spent",
+ "unconscious",
+ "xox"
+ ],
"moji": "😵"
},
"do_not_litter": {
@@ -3127,7 +6475,17 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bin", "garbage", "trash", "litter", "garbage", "waste", "no", "can", "trash"],
+ "keywords": [
+ "bin",
+ "garbage",
+ "trash",
+ "litter",
+ "garbage",
+ "waste",
+ "no",
+ "can",
+ "trash"
+ ],
"moji": "🚯"
},
"document": {
@@ -3138,7 +6496,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["page"]
+ "keywords": [
+ "page"
+ ]
},
"document_text": {
"unicode": "1F5B9",
@@ -3146,9 +6506,13 @@
"name": "document with text",
"shortname": ":document_text:",
"category": "objects_symbols",
- "aliases": [":document_with_text:"],
+ "aliases": [
+ ":document_with_text:"
+ ],
"aliases_ascii": [],
- "keywords": ["page"]
+ "keywords": [
+ "page"
+ ]
},
"dog": {
"unicode": "1F436",
@@ -3158,7 +6522,12 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "friend", "nature", "woof"],
+ "keywords": [
+ "animal",
+ "friend",
+ "nature",
+ "woof"
+ ],
"moji": "🐶"
},
"dog2": {
@@ -3169,7 +6538,20 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "doge", "friend", "nature", "pet", "dog", "puppy", "pet", "friend", "woof", "bark", "fido"],
+ "keywords": [
+ "animal",
+ "doge",
+ "friend",
+ "nature",
+ "pet",
+ "dog",
+ "puppy",
+ "pet",
+ "friend",
+ "woof",
+ "bark",
+ "fido"
+ ],
"moji": "🐕"
},
"dollar": {
@@ -3180,7 +6562,21 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bill", "currency", "money", "dollar", "united states", "canada", "australia", "banknote", "money", "currency", "paper", "cash", "bills"],
+ "keywords": [
+ "bill",
+ "currency",
+ "money",
+ "dollar",
+ "united states",
+ "canada",
+ "australia",
+ "banknote",
+ "money",
+ "currency",
+ "paper",
+ "cash",
+ "bills"
+ ],
"moji": "💵"
},
"dolls": {
@@ -3191,7 +6587,23 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["japanese", "kimono", "toy", "dolls", "japan", "japanese", "day", "girls", "emperor", "empress", "pray", "blessing", "imperial", "family", "royal"],
+ "keywords": [
+ "japanese",
+ "kimono",
+ "toy",
+ "dolls",
+ "japan",
+ "japanese",
+ "day",
+ "girls",
+ "emperor",
+ "empress",
+ "pray",
+ "blessing",
+ "imperial",
+ "family",
+ "royal"
+ ],
"moji": "🎎"
},
"dolphin": {
@@ -3202,7 +6614,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "fins", "fish", "flipper", "nature", "ocean", "sea"],
+ "keywords": [
+ "animal",
+ "fins",
+ "fish",
+ "flipper",
+ "nature",
+ "ocean",
+ "sea"
+ ],
"moji": "🐬"
},
"door": {
@@ -3213,7 +6633,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["entry", "exit", "house", "door", "doorway", "entrance", "enter", "exit", "entry"],
+ "keywords": [
+ "entry",
+ "exit",
+ "house",
+ "door",
+ "doorway",
+ "entrance",
+ "enter",
+ "exit",
+ "entry"
+ ],
"moji": "🚪"
},
"doughnut": {
@@ -3224,7 +6654,21 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "food", "snack", "sweet", "doughnut", "donut", "pastry", "fried", "dessert", "breakfast", "police", "homer", "sweet"],
+ "keywords": [
+ "desert",
+ "food",
+ "snack",
+ "sweet",
+ "doughnut",
+ "donut",
+ "pastry",
+ "fried",
+ "dessert",
+ "breakfast",
+ "police",
+ "homer",
+ "sweet"
+ ],
"moji": "🍩"
},
"dove": {
@@ -3233,9 +6677,14 @@
"name": "dove of peace",
"shortname": ":dove:",
"category": "objects_symbols",
- "aliases": [":dove_of_peace:"],
+ "aliases": [
+ ":dove_of_peace:"
+ ],
"aliases_ascii": [],
- "keywords": ["symbol", "bird"]
+ "keywords": [
+ "symbol",
+ "bird"
+ ]
},
"dragon": {
"unicode": "1F409",
@@ -3245,7 +6694,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "chinese", "green", "myth", "nature", "dragon", "fire", "legendary", "myth"],
+ "keywords": [
+ "animal",
+ "chinese",
+ "green",
+ "myth",
+ "nature",
+ "dragon",
+ "fire",
+ "legendary",
+ "myth"
+ ],
"moji": "🐉"
},
"dragon_face": {
@@ -3256,7 +6715,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "chinese", "green", "myth", "nature", "dragon", "head", "fire", "legendary", "myth"],
+ "keywords": [
+ "animal",
+ "chinese",
+ "green",
+ "myth",
+ "nature",
+ "dragon",
+ "head",
+ "fire",
+ "legendary",
+ "myth"
+ ],
"moji": "🐲"
},
"dress": {
@@ -3267,7 +6737,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clothes", "fashion"],
+ "keywords": [
+ "clothes",
+ "fashion"
+ ],
"moji": "👗"
},
"dromedary_camel": {
@@ -3278,7 +6751,22 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "desert", "hot", "dromedary", "camel", "hump", "desert", "middle east", "heat", "hot", "water", "hump day", "wednesday", "sex"],
+ "keywords": [
+ "animal",
+ "desert",
+ "hot",
+ "dromedary",
+ "camel",
+ "hump",
+ "desert",
+ "middle east",
+ "heat",
+ "hot",
+ "water",
+ "hump day",
+ "wednesday",
+ "sex"
+ ],
"moji": "🐪"
},
"droplet": {
@@ -3289,7 +6777,23 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["drip", "faucet", "water", "drop", "droplet", "h20", "water", "aqua", "tear", "sweat", "rain", "moisture", "wet", "moist", "spit"],
+ "keywords": [
+ "drip",
+ "faucet",
+ "water",
+ "drop",
+ "droplet",
+ "h20",
+ "water",
+ "aqua",
+ "tear",
+ "sweat",
+ "rain",
+ "moisture",
+ "wet",
+ "moist",
+ "spit"
+ ],
"moji": "💧"
},
"dvd": {
@@ -3300,7 +6804,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cd", "disc", "disk"],
+ "keywords": [
+ "cd",
+ "disc",
+ "disk"
+ ],
"moji": "📀"
},
"e-mail": {
@@ -3309,9 +6817,14 @@
"name": "e-mail symbol",
"shortname": ":e-mail:",
"category": "objects",
- "aliases": [":email:"],
- "aliases_ascii": [],
- "keywords": ["communication", "inbox"],
+ "aliases": [
+ ":email:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "communication",
+ "inbox"
+ ],
"moji": "📧"
},
"ear": {
@@ -3322,7 +6835,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "hear", "listen", "sound"],
+ "keywords": [
+ "face",
+ "hear",
+ "listen",
+ "sound"
+ ],
"moji": "👂"
},
"ear_of_rice": {
@@ -3333,9 +6851,87 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "ear", "rice", "food", "plant", "seed"],
+ "keywords": [
+ "nature",
+ "plant",
+ "ear",
+ "rice",
+ "food",
+ "plant",
+ "seed"
+ ],
"moji": "🌾"
},
+ "ear_tone1": {
+ "unicode": "1F442-1F3FB",
+ "unicode_alternates": "",
+ "name": "ear tone 1",
+ "shortname": ":ear_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hear",
+ "listen",
+ "sound"
+ ]
+ },
+ "ear_tone2": {
+ "unicode": "1F442-1F3FC",
+ "unicode_alternates": "",
+ "name": "ear tone 2",
+ "shortname": ":ear_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hear",
+ "listen",
+ "sound"
+ ]
+ },
+ "ear_tone3": {
+ "unicode": "1F442-1F3FD",
+ "unicode_alternates": "",
+ "name": "ear tone 3",
+ "shortname": ":ear_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hear",
+ "listen",
+ "sound"
+ ]
+ },
+ "ear_tone4": {
+ "unicode": "1F442-1F3FE",
+ "unicode_alternates": "",
+ "name": "ear tone 4",
+ "shortname": ":ear_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hear",
+ "listen",
+ "sound"
+ ]
+ },
+ "ear_tone5": {
+ "unicode": "1F442-1F3FF",
+ "unicode_alternates": "",
+ "name": "ear tone 5",
+ "shortname": ":ear_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hear",
+ "listen",
+ "sound"
+ ]
+ },
"earth_africa": {
"unicode": "1F30D",
"unicode_alternates": [],
@@ -3344,7 +6940,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["globe", "international", "world", "earth", "globe", "space", "planet", "africa", "europe", "home"],
+ "keywords": [
+ "globe",
+ "international",
+ "world",
+ "earth",
+ "globe",
+ "space",
+ "planet",
+ "africa",
+ "europe",
+ "home"
+ ],
"moji": "🌍"
},
"earth_americas": {
@@ -3355,7 +6962,21 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["USA", "globe", "international", "world", "earth", "globe", "space", "planet", "north", "south", "america", "americas", "home"],
+ "keywords": [
+ "USA",
+ "globe",
+ "international",
+ "world",
+ "earth",
+ "globe",
+ "space",
+ "planet",
+ "north",
+ "south",
+ "america",
+ "americas",
+ "home"
+ ],
"moji": "🌎"
},
"earth_asia": {
@@ -3366,7 +6987,19 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["east", "globe", "international", "world", "earth", "globe", "space", "planet", "asia", "australia", "home"],
+ "keywords": [
+ "east",
+ "globe",
+ "international",
+ "world",
+ "earth",
+ "globe",
+ "space",
+ "planet",
+ "asia",
+ "australia",
+ "home"
+ ],
"moji": "🌏"
},
"egg": {
@@ -3377,7 +7010,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["breakfast", "food", "egg", "fry", "pan", "flat", "cook", "frying", "cooking", "utensil"],
+ "keywords": [
+ "breakfast",
+ "food",
+ "egg",
+ "fry",
+ "pan",
+ "flat",
+ "cook",
+ "frying",
+ "cooking",
+ "utensil"
+ ],
"moji": "🍳"
},
"eggplant": {
@@ -3388,23 +7032,41 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["aubergine", "food", "nature", "vegetable", "eggplant", "aubergine", "fruit", "purple", "penis"],
+ "keywords": [
+ "aubergine",
+ "food",
+ "nature",
+ "vegetable",
+ "eggplant",
+ "aubergine",
+ "fruit",
+ "purple",
+ "penis"
+ ],
"moji": "🍆"
},
"eight": {
"moji": "8️⃣",
"unicode": "0038-20E3",
- "unicode_alternates": ["0038-FE0F-20E3"],
+ "unicode_alternates": [
+ "0038-FE0F-20E3"
+ ],
"name": "digit eight",
"shortname": ":eight:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["8", "blue-square", "numbers"]
+ "keywords": [
+ "8",
+ "blue-square",
+ "numbers"
+ ]
},
"eight_pointed_black_star": {
"unicode": "2734",
- "unicode_alternates": ["2734-FE0F"],
+ "unicode_alternates": [
+ "2734-FE0F"
+ ],
"name": "eight pointed black star",
"shortname": ":eight_pointed_black_star:",
"category": "other",
@@ -3415,13 +7077,19 @@
},
"eight_spoked_asterisk": {
"unicode": "2733",
- "unicode_alternates": ["2733-FE0F"],
+ "unicode_alternates": [
+ "2733-FE0F"
+ ],
"name": "eight spoked asterisk",
"shortname": ":eight_spoked_asterisk:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["green-square", "sparkle", "star"],
+ "keywords": [
+ "green-square",
+ "sparkle",
+ "star"
+ ],
"moji": "✳"
},
"electric_plug": {
@@ -3432,7 +7100,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["charger", "power"],
+ "keywords": [
+ "charger",
+ "power"
+ ],
"moji": "🔌"
},
"elephant": {
@@ -3443,7 +7114,12 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "nose", "thailand"],
+ "keywords": [
+ "animal",
+ "nature",
+ "nose",
+ "thailand"
+ ],
"moji": "🐘"
},
"end": {
@@ -3454,18 +7130,28 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "words"],
+ "keywords": [
+ "arrow",
+ "words"
+ ],
"moji": "🔚"
},
"envelope": {
"unicode": "2709",
- "unicode_alternates": ["2709-FE0F"],
+ "unicode_alternates": [
+ "2709-FE0F"
+ ],
"name": "envelope",
"shortname": ":envelope:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "letter", "mail", "postal"],
+ "keywords": [
+ "communication",
+ "letter",
+ "mail",
+ "postal"
+ ],
"moji": "✉"
},
"envelope_back": {
@@ -3474,9 +7160,16 @@
"name": "back of envelope",
"shortname": ":envelope_back:",
"category": "objects_symbols",
- "aliases": [":back_of_envelope:"],
+ "aliases": [
+ ":back_of_envelope:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "letter", "mail", "postal"]
+ "keywords": [
+ "communication",
+ "letter",
+ "mail",
+ "postal"
+ ]
},
"envelope_flying": {
"unicode": "1F585",
@@ -3484,9 +7177,16 @@
"name": "flying envelope",
"shortname": ":envelope_flying:",
"category": "objects_symbols",
- "aliases": [":flying_envelope:"],
+ "aliases": [
+ ":flying_envelope:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "letter", "mail", "postal"]
+ "keywords": [
+ "communication",
+ "letter",
+ "mail",
+ "postal"
+ ]
},
"envelope_stamped": {
"unicode": "1F583",
@@ -3494,9 +7194,16 @@
"name": "stamped envelope",
"shortname": ":envelope_stamped:",
"category": "objects_symbols",
- "aliases": [":stamped_envelope:"],
+ "aliases": [
+ ":stamped_envelope:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "letter", "mail", "postal"]
+ "keywords": [
+ "communication",
+ "letter",
+ "mail",
+ "postal"
+ ]
},
"envelope_stamped_pen": {
"unicode": "1F586",
@@ -3504,9 +7211,16 @@
"name": "pen over stamped envelope",
"shortname": ":envelope_stamped_pen:",
"category": "objects_symbols",
- "aliases": [":pen_over_stamped_envelope:"],
+ "aliases": [
+ ":pen_over_stamped_envelope:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "letter", "mail", "postal"]
+ "keywords": [
+ "communication",
+ "letter",
+ "mail",
+ "postal"
+ ]
},
"envelope_with_arrow": {
"unicode": "1F4E9",
@@ -3516,7 +7230,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["email"],
+ "keywords": [
+ "email"
+ ],
"moji": "📩"
},
"euro": {
@@ -3527,7 +7243,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["currency", "dollar", "money", "euro", "europe", "banknote", "money", "currency", "paper", "cash", "bills"],
+ "keywords": [
+ "currency",
+ "dollar",
+ "money",
+ "euro",
+ "europe",
+ "banknote",
+ "money",
+ "currency",
+ "paper",
+ "cash",
+ "bills"
+ ],
"moji": "💶"
},
"european_castle": {
@@ -3538,7 +7266,29 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "history", "royalty", "castle", "european", "residence", "royalty", "disneyland", "disney", "fort", "fortified", "moat", "tower", "princess", "prince", "lord", "king", "queen", "fortress", "nobel", "stronghold"],
+ "keywords": [
+ "building",
+ "history",
+ "royalty",
+ "castle",
+ "european",
+ "residence",
+ "royalty",
+ "disneyland",
+ "disney",
+ "fort",
+ "fortified",
+ "moat",
+ "tower",
+ "princess",
+ "prince",
+ "lord",
+ "king",
+ "queen",
+ "fortress",
+ "nobel",
+ "stronghold"
+ ],
"moji": "🏰"
},
"european_post_office": {
@@ -3549,7 +7299,9 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building"],
+ "keywords": [
+ "building"
+ ],
"moji": "🏤"
},
"evergreen_tree": {
@@ -3560,18 +7312,29 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "evergreen", "tree", "needles", "christmas"],
+ "keywords": [
+ "nature",
+ "plant",
+ "evergreen",
+ "tree",
+ "needles",
+ "christmas"
+ ],
"moji": "🌲"
},
"exclamation": {
"unicode": "2757",
- "unicode_alternates": ["2757-FE0F"],
+ "unicode_alternates": [
+ "2757-FE0F"
+ ],
"name": "heavy exclamation mark symbol",
"shortname": ":exclamation:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["surprise"],
+ "keywords": [
+ "surprise"
+ ],
"moji": "❗"
},
"expressionless": {
@@ -3581,8 +7344,20 @@
"shortname": ":expressionless:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["-_-", "-__-", "-___-"],
- "keywords": ["expressionless", "blank", "void", "vapid", "without expression", "face", "indifferent"],
+ "aliases_ascii": [
+ "-_-",
+ "-__-",
+ "-___-"
+ ],
+ "keywords": [
+ "expressionless",
+ "blank",
+ "void",
+ "vapid",
+ "without expression",
+ "face",
+ "indifferent"
+ ],
"moji": "😑"
},
"eye": {
@@ -3593,7 +7368,21 @@
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["look", "peek", "watch"]
+ "keywords": [
+ "look",
+ "peek",
+ "watch"
+ ]
+ },
+ "eye_in_speech_bubble": {
+ "unicode": "1F441-1F5E8",
+ "unicode_alternates": "1f441-200d-1f5e8",
+ "name": "eye in speech bubble",
+ "shortname": ":eye_in_speech_bubble:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
},
"eyeglasses": {
"unicode": "1F453",
@@ -3603,7 +7392,24 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accessories", "eyesight", "fashion", "eyeglasses", "spectacles", "eye", "sight", "nearsightedness", "myopia", "farsightedness", "hyperopia", "frames", "vision", "see", "blurry", "contacts"],
+ "keywords": [
+ "accessories",
+ "eyesight",
+ "fashion",
+ "eyeglasses",
+ "spectacles",
+ "eye",
+ "sight",
+ "nearsightedness",
+ "myopia",
+ "farsightedness",
+ "hyperopia",
+ "frames",
+ "vision",
+ "see",
+ "blurry",
+ "contacts"
+ ],
"moji": "👓"
},
"eyes": {
@@ -3614,7 +7420,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["look", "peek", "stalk", "watch"],
+ "keywords": [
+ "look",
+ "peek",
+ "stalk",
+ "watch"
+ ],
"moji": "👀"
},
"factory": {
@@ -3625,7 +7436,9 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building"],
+ "keywords": [
+ "building"
+ ],
"moji": "🏭"
},
"fallen_leaf": {
@@ -3636,7 +7449,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["leaves", "nature", "plant", "vegetable", "leaf", "fall", "color", "deciduous", "autumn"],
+ "keywords": [
+ "leaves",
+ "nature",
+ "plant",
+ "vegetable",
+ "leaf",
+ "fall",
+ "color",
+ "deciduous",
+ "autumn"
+ ],
"moji": "🍂"
},
"family": {
@@ -3647,148 +7470,359 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["child", "dad", "father", "home", "mom", "mother", "parents", "family", "mother", "father", "child", "girl", "boy", "group", "unit"],
+ "keywords": [
+ "child",
+ "dad",
+ "father",
+ "home",
+ "mom",
+ "mother",
+ "parents",
+ "family",
+ "mother",
+ "father",
+ "child",
+ "girl",
+ "boy",
+ "group",
+ "unit"
+ ],
"moji": "👪"
},
"family_mmb": {
"unicode": "1F468-1F468-1F466",
- "unicode_alternates": ["1F468-200D-1F468-200D-1F466"],
+ "unicode_alternates": [
+ "1F468-200D-1F468-200D-1F466"
+ ],
"name": "family (man,man,boy)",
"shortname": ":family_mmb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["child", "dad", "father", "parents", "group", "unit", "gay", "homosexual", "man", "boy"]
+ "keywords": [
+ "child",
+ "dad",
+ "father",
+ "parents",
+ "group",
+ "unit",
+ "gay",
+ "homosexual",
+ "man",
+ "boy"
+ ]
},
"family_mmbb": {
"unicode": "1F468-1F468-1F466-1F466",
- "unicode_alternates": ["1F468-200D-1F468-200D-1F466-200D-1F466"],
+ "unicode_alternates": [
+ "1F468-200D-1F468-200D-1F466-200D-1F466"
+ ],
"name": "family (man,man,boy,boy)",
"shortname": ":family_mmbb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["children", "dad", "father", "parents", "group", "unit", "gay", "homosexual", "man", "boy"]
+ "keywords": [
+ "children",
+ "dad",
+ "father",
+ "parents",
+ "group",
+ "unit",
+ "gay",
+ "homosexual",
+ "man",
+ "boy"
+ ]
},
"family_mmg": {
"unicode": "1F468-1F468-1F467",
- "unicode_alternates": ["1F468-200D-1F468-200D-1F467"],
+ "unicode_alternates": [
+ "1F468-200D-1F468-200D-1F467"
+ ],
"name": "family (man,man,girl)",
"shortname": ":family_mmg:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["child", "dad", "father", "parents", "group", "unit", "gay", "homosexual", "man", "girl"]
+ "keywords": [
+ "child",
+ "dad",
+ "father",
+ "parents",
+ "group",
+ "unit",
+ "gay",
+ "homosexual",
+ "man",
+ "girl"
+ ]
},
"family_mmgb": {
"unicode": "1F468-1F468-1F467-1F466",
- "unicode_alternates": ["1F468-200D-1F468-200D-1F467-200D-1F466"],
+ "unicode_alternates": [
+ "1F468-200D-1F468-200D-1F467-200D-1F466"
+ ],
"name": "family (man,man,girl,boy)",
"shortname": ":family_mmgb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["children", "dad", "father", "parents", "group", "unit", "gay", "homosexual", "man", "girl", "boy"]
+ "keywords": [
+ "children",
+ "dad",
+ "father",
+ "parents",
+ "group",
+ "unit",
+ "gay",
+ "homosexual",
+ "man",
+ "girl",
+ "boy"
+ ]
},
"family_mmgg": {
"unicode": "1F468-1F468-1F467-1F467",
- "unicode_alternates": ["1F468-200D-1F468-200D-1F467-200D-1F467"],
+ "unicode_alternates": [
+ "1F468-200D-1F468-200D-1F467-200D-1F467"
+ ],
"name": "family (man,man,girl,girl)",
"shortname": ":family_mmgg:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["children", "dad", "father", "parents", "group", "unit", "gay", "homosexual", "man", "girl"]
+ "keywords": [
+ "children",
+ "dad",
+ "father",
+ "parents",
+ "group",
+ "unit",
+ "gay",
+ "homosexual",
+ "man",
+ "girl"
+ ]
},
"family_mwbb": {
"unicode": "1F468-1F469-1F466-1F466",
- "unicode_alternates": ["1F468-200D-1F469-200D-1F466-200D-1F466"],
+ "unicode_alternates": [
+ "1F468-200D-1F469-200D-1F466-200D-1F466"
+ ],
"name": "family (man,woman,boy,boy)",
"shortname": ":family_mwbb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dad", "father", "mom", "mother", "parents", "children", "boy", "group", "unit", "man", "woman"]
+ "keywords": [
+ "dad",
+ "father",
+ "mom",
+ "mother",
+ "parents",
+ "children",
+ "boy",
+ "group",
+ "unit",
+ "man",
+ "woman"
+ ]
},
"family_mwg": {
"unicode": "1F468-1F469-1F467",
- "unicode_alternates": ["1F468-200D-1F469-200D-1F467"],
+ "unicode_alternates": [
+ "1F468-200D-1F469-200D-1F467"
+ ],
"name": "family (man,woman,girl)",
"shortname": ":family_mwg:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["child", "dad", "father", "mom", "mother", "parents", "girl", "boy", "group", "unit", "man", "woman"]
+ "keywords": [
+ "child",
+ "dad",
+ "father",
+ "mom",
+ "mother",
+ "parents",
+ "girl",
+ "boy",
+ "group",
+ "unit",
+ "man",
+ "woman"
+ ]
},
"family_mwgb": {
"unicode": "1F468-1F469-1F467-1F466",
- "unicode_alternates": ["1F468-200D-1F469-200D-1F467-200D-1F466"],
+ "unicode_alternates": [
+ "1F468-200D-1F469-200D-1F467-200D-1F466"
+ ],
"name": "family (man,woman,girl,boy)",
"shortname": ":family_mwgb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dad", "father", "mom", "mother", "parents", "children", "girl", "boy", "group", "unit", "man", "woman"]
+ "keywords": [
+ "dad",
+ "father",
+ "mom",
+ "mother",
+ "parents",
+ "children",
+ "girl",
+ "boy",
+ "group",
+ "unit",
+ "man",
+ "woman"
+ ]
},
"family_mwgg": {
"unicode": "1F468-1F469-1F467-1F467",
- "unicode_alternates": ["1F468-200D-1F469-200D-1F467-200D-1F467"],
+ "unicode_alternates": [
+ "1F468-200D-1F469-200D-1F467-200D-1F467"
+ ],
"name": "family (man,woman,girl,girl)",
"shortname": ":family_mwgg:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dad", "father", "mom", "mother", "parents", "children", "girl", "group", "unit", "man", "woman"]
+ "keywords": [
+ "dad",
+ "father",
+ "mom",
+ "mother",
+ "parents",
+ "children",
+ "girl",
+ "group",
+ "unit",
+ "man",
+ "woman"
+ ]
},
"family_wwb": {
"unicode": "1F469-1F469-1F466",
- "unicode_alternates": ["1F469-200D-1F469-200D-1F466"],
+ "unicode_alternates": [
+ "1F469-200D-1F469-200D-1F466"
+ ],
"name": "family (woman,woman,boy)",
"shortname": ":family_wwb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mom", "mother", "parents", "child", "boy", "group", "unit", "gay", "lesbian", "homosexual", "woman"]
+ "keywords": [
+ "mom",
+ "mother",
+ "parents",
+ "child",
+ "boy",
+ "group",
+ "unit",
+ "gay",
+ "lesbian",
+ "homosexual",
+ "woman"
+ ]
},
"family_wwbb": {
"unicode": "1F469-1F469-1F466-1F466",
- "unicode_alternates": ["1F469-200D-1F469-200D-1F466-200D-1F466"],
+ "unicode_alternates": [
+ "1F469-200D-1F469-200D-1F466-200D-1F466"
+ ],
"name": "family (woman,woman,boy,boy)",
"shortname": ":family_wwbb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mom", "mother", "parents", "children", "group", "unit", "gay", "lesbian", "homosexual", "woman", "boy"]
+ "keywords": [
+ "mom",
+ "mother",
+ "parents",
+ "children",
+ "group",
+ "unit",
+ "gay",
+ "lesbian",
+ "homosexual",
+ "woman",
+ "boy"
+ ]
},
"family_wwg": {
"unicode": "1F469-1F469-1F467",
- "unicode_alternates": ["1F469-200D-1F469-200D-1F467"],
+ "unicode_alternates": [
+ "1F469-200D-1F469-200D-1F467"
+ ],
"name": "family (woman,woman,girl)",
"shortname": ":family_wwg:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mom", "mother", "parents", "child", "woman", "girl", "group", "unit", "gay", "lesbian", "homosexual"]
+ "keywords": [
+ "mom",
+ "mother",
+ "parents",
+ "child",
+ "woman",
+ "girl",
+ "group",
+ "unit",
+ "gay",
+ "lesbian",
+ "homosexual"
+ ]
},
"family_wwgb": {
"unicode": "1F469-1F469-1F467-1F466",
- "unicode_alternates": ["1F469-200D-1F469-200D-1F467-200D-1F466"],
+ "unicode_alternates": [
+ "1F469-200D-1F469-200D-1F467-200D-1F466"
+ ],
"name": "family (woman,woman,girl,boy)",
"shortname": ":family_wwgb:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mom", "mother", "parents", "children", "group", "unit", "gay", "lesbian", "homosexual", "woman", "girl", "boy"]
+ "keywords": [
+ "mom",
+ "mother",
+ "parents",
+ "children",
+ "group",
+ "unit",
+ "gay",
+ "lesbian",
+ "homosexual",
+ "woman",
+ "girl",
+ "boy"
+ ]
},
"family_wwgg": {
"unicode": "1F469-1F469-1F467-1F467",
- "unicode_alternates": ["1F469-200D-1F469-200D-1F467-200D-1F467"],
+ "unicode_alternates": [
+ "1F469-200D-1F469-200D-1F467-200D-1F467"
+ ],
"name": "family (woman,woman,girl,girl)",
"shortname": ":family_wwgg:",
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mom", "mother", "parents", "children", "group", "unit", "gay", "lesbian", "homosexual", "woman", "girl"]
+ "keywords": [
+ "mom",
+ "mother",
+ "parents",
+ "children",
+ "group",
+ "unit",
+ "gay",
+ "lesbian",
+ "homosexual",
+ "woman",
+ "girl"
+ ]
},
"fast_forward": {
"unicode": "23E9",
@@ -3798,7 +7832,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "⏩"
},
"fax": {
@@ -3809,7 +7845,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "technology"],
+ "keywords": [
+ "communication",
+ "technology"
+ ],
"moji": "📠"
},
"fearful": {
@@ -3820,7 +7859,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "nervous", "oops", "scared", "terrified", "fear", "fearful", "scared", "frightened"],
+ "keywords": [
+ "face",
+ "nervous",
+ "oops",
+ "scared",
+ "terrified",
+ "fear",
+ "fearful",
+ "scared",
+ "frightened"
+ ],
"moji": "😨"
},
"feet": {
@@ -3831,7 +7880,29 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cat", "dog", "footprints", "paw", "pet", "tracking", "paw", "prints", "mark", "imprints", "footsteps", "animal", "lion", "bear", "dog", "cat", "raccoon", "critter", "feet", "pawsteps"],
+ "keywords": [
+ "animal",
+ "cat",
+ "dog",
+ "footprints",
+ "paw",
+ "pet",
+ "tracking",
+ "paw",
+ "prints",
+ "mark",
+ "imprints",
+ "footsteps",
+ "animal",
+ "lion",
+ "bear",
+ "dog",
+ "cat",
+ "raccoon",
+ "critter",
+ "feet",
+ "pawsteps"
+ ],
"moji": "🐾"
},
"ferris_wheel": {
@@ -3842,9 +7913,44 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["carnival", "londoneye", "photo", "farris", "wheel", "amusement", "park", "fair", "ride", "entertainment"],
+ "keywords": [
+ "carnival",
+ "londoneye",
+ "photo",
+ "farris",
+ "wheel",
+ "amusement",
+ "park",
+ "fair",
+ "ride",
+ "entertainment"
+ ],
"moji": "🎡"
},
+ "ferry": {
+ "unicode": "26F4",
+ "unicode_alternates": "",
+ "name": "ferry",
+ "shortname": ":ferry:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boat",
+ "place",
+ "travel"
+ ]
+ },
+ "field_hockey": {
+ "unicode": "1F3D1",
+ "unicode_alternates": "",
+ "name": "field hockey stick and ball",
+ "shortname": ":field_hockey:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"file_cabinet": {
"unicode": "1F5C4",
"unicode_alternates": [],
@@ -3853,7 +7959,12 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["folders", "office", "documents", "storage"]
+ "keywords": [
+ "folders",
+ "office",
+ "documents",
+ "storage"
+ ]
},
"file_folder": {
"unicode": "1F4C1",
@@ -3863,7 +7974,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents"],
+ "keywords": [
+ "documents"
+ ],
"moji": "📁"
},
"film_frames": {
@@ -3874,7 +7987,14 @@
"category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["movie", "record", "8mm", "16mm", "reel", "celluloid"]
+ "keywords": [
+ "movie",
+ "record",
+ "8mm",
+ "16mm",
+ "reel",
+ "celluloid"
+ ]
},
"finger_pointing_down": {
"unicode": "1F597",
@@ -3882,9 +8002,15 @@
"name": "white down pointing left hand index",
"shortname": ":finger_pointing_down:",
"category": "people",
- "aliases": [":white_down_pointing_left_hand_index:"],
+ "aliases": [
+ ":white_down_pointing_left_hand_index:"
+ ],
"aliases_ascii": [],
- "keywords": ["direction", "finger", "hand"]
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
},
"finger_pointing_down2": {
"unicode": "1F59F",
@@ -3892,9 +8018,15 @@
"name": "sideways white down pointing index",
"shortname": ":finger_pointing_down2:",
"category": "people",
- "aliases": [":sideways_white_down_pointing_index:"],
+ "aliases": [
+ ":sideways_white_down_pointing_index:"
+ ],
"aliases_ascii": [],
- "keywords": ["direction", "finger", "hand"]
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
},
"finger_pointing_left": {
"unicode": "1F598",
@@ -3902,9 +8034,15 @@
"name": "sideways white left pointing index",
"shortname": ":finger_pointing_left:",
"category": "people",
- "aliases": [":sideways_white_left_pointing_index:"],
+ "aliases": [
+ ":sideways_white_left_pointing_index:"
+ ],
"aliases_ascii": [],
- "keywords": ["direction", "finger", "hand"]
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
},
"finger_pointing_right": {
"unicode": "1F599",
@@ -3912,9 +8050,15 @@
"name": "sideways white right pointing index",
"shortname": ":finger_pointing_right:",
"category": "people",
- "aliases": [":sideways_white_right_pointing_index:"],
+ "aliases": [
+ ":sideways_white_right_pointing_index:"
+ ],
"aliases_ascii": [],
- "keywords": ["direction", "finger", "hand"]
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
},
"finger_pointing_up": {
"unicode": "1F59E",
@@ -3922,9 +8066,15 @@
"name": "sideways white up pointing index",
"shortname": ":finger_pointing_up:",
"category": "people",
- "aliases": [":sideways_white_up_pointing_index:"],
+ "aliases": [
+ ":sideways_white_up_pointing_index:"
+ ],
"aliases_ascii": [],
- "keywords": ["direction", "finger", "hand"]
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
},
"fire": {
"unicode": "1F525",
@@ -3932,9 +8082,15 @@
"name": "fire",
"shortname": ":fire:",
"category": "emoticons",
- "aliases": [":flame:"],
- "aliases_ascii": [],
- "keywords": ["cook", "hot", "flame"],
+ "aliases": [
+ ":flame:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cook",
+ "hot",
+ "flame"
+ ],
"moji": "🔥"
},
"fire_engine": {
@@ -3945,7 +8101,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cars", "transportation", "vehicle", "fire", "fighter", "engine", "truck", "emergency", "medical"],
+ "keywords": [
+ "cars",
+ "transportation",
+ "vehicle",
+ "fire",
+ "fighter",
+ "engine",
+ "truck",
+ "emergency",
+ "medical"
+ ],
"moji": "🚒"
},
"fire_engine_oncoming": {
@@ -3954,9 +8120,17 @@
"name": "oncoming fire engine",
"shortname": ":fire_engine_oncoming:",
"category": "travel_places",
- "aliases": [":oncoming_fire_engine:"],
- "aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "fighter", "truck", "emergency"]
+ "aliases": [
+ ":oncoming_fire_engine:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "fighter",
+ "truck",
+ "emergency"
+ ]
},
"fireworks": {
"unicode": "1F386",
@@ -3966,7 +8140,22 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["carnival", "congratulations", "festival", "photo", "fireworks", "independence", "celebration", "explosion", "july", "4th", "rocket", "sky", "idea", "excitement"],
+ "keywords": [
+ "carnival",
+ "congratulations",
+ "festival",
+ "photo",
+ "fireworks",
+ "independence",
+ "celebration",
+ "explosion",
+ "july",
+ "4th",
+ "rocket",
+ "sky",
+ "idea",
+ "excitement"
+ ],
"moji": "🎆"
},
"first_quarter_moon": {
@@ -3977,7 +8166,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "quarter", "first", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "quarter",
+ "first",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌓"
},
"first_quarter_moon_with_face": {
@@ -3988,7 +8186,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "first", "quarter", "anthropomorphic", "face", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "first",
+ "quarter",
+ "anthropomorphic",
+ "face",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌛"
},
"fish": {
@@ -3999,7 +8208,11 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "food", "nature"],
+ "keywords": [
+ "animal",
+ "food",
+ "nature"
+ ],
"moji": "🐟"
},
"fish_cake": {
@@ -4010,7 +8223,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fish", "cake", "kamboko", "swirl", "ramen", "noodles", "naruto"],
+ "keywords": [
+ "food",
+ "fish",
+ "cake",
+ "kamboko",
+ "swirl",
+ "ramen",
+ "noodles",
+ "naruto"
+ ],
"moji": "🍥"
},
"fishing_pole_and_fish": {
@@ -4021,7 +8243,13 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "hobby", "fish", "fishing", "pole"],
+ "keywords": [
+ "food",
+ "hobby",
+ "fish",
+ "fishing",
+ "pole"
+ ],
"moji": "🎣"
},
"fist": {
@@ -4032,19 +8260,99 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fingers", "grasp", "hand"],
+ "keywords": [
+ "fingers",
+ "grasp",
+ "hand"
+ ],
"moji": "✊"
},
+ "fist_tone1": {
+ "unicode": "270A-1F3FB",
+ "unicode_alternates": "",
+ "name": "raised fist tone 1",
+ "shortname": ":fist_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "grasp",
+ "hand"
+ ]
+ },
+ "fist_tone2": {
+ "unicode": "270A-1F3FC",
+ "unicode_alternates": "",
+ "name": "raised fist tone 2",
+ "shortname": ":fist_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "grasp",
+ "hand"
+ ]
+ },
+ "fist_tone3": {
+ "unicode": "270A-1F3FD",
+ "unicode_alternates": "",
+ "name": "raised fist tone 3",
+ "shortname": ":fist_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "grasp",
+ "hand"
+ ]
+ },
+ "fist_tone4": {
+ "unicode": "270A-1F3FE",
+ "unicode_alternates": "",
+ "name": "raised fist tone 4",
+ "shortname": ":fist_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "grasp",
+ "hand"
+ ]
+ },
+ "fist_tone5": {
+ "unicode": "270A-1F3FF",
+ "unicode_alternates": "",
+ "name": "raised fist tone 5",
+ "shortname": ":fist_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "grasp",
+ "hand"
+ ]
+ },
"five": {
"moji": "5️⃣",
"unicode": "0035-20E3",
- "unicode_alternates": ["0035-FE0F-20E3"],
+ "unicode_alternates": [
+ "0035-FE0F-20E3"
+ ],
"name": "digit five",
"shortname": ":five:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "numbers", "prime"]
+ "keywords": [
+ "blue-square",
+ "numbers",
+ "prime"
+ ]
},
"flag_ac": {
"unicode": "1F1E6-1F1E8",
@@ -4052,9 +8360,15 @@
"name": "ascension",
"shortname": ":flag_ac:",
"category": "flags",
- "aliases": [":ac:"],
+ "aliases": [
+ ":ac:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ac"]
+ "keywords": [
+ "country",
+ "nation",
+ "ac"
+ ]
},
"flag_ad": {
"unicode": "1F1E6-1F1E9",
@@ -4062,9 +8376,15 @@
"name": "andorra",
"shortname": ":flag_ad:",
"category": "flags",
- "aliases": [":ad:"],
+ "aliases": [
+ ":ad:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ad"]
+ "keywords": [
+ "country",
+ "nation",
+ "ad"
+ ]
},
"flag_ae": {
"unicode": "1F1E6-1F1EA",
@@ -4072,9 +8392,15 @@
"name": "the united arab emirates",
"shortname": ":flag_ae:",
"category": "flags",
- "aliases": [":ae:"],
+ "aliases": [
+ ":ae:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ae"]
+ "keywords": [
+ "country",
+ "nation",
+ "ae"
+ ]
},
"flag_af": {
"unicode": "1F1E6-1F1EB",
@@ -4082,9 +8408,16 @@
"name": "afghanistan",
"shortname": ":flag_af:",
"category": "flags",
- "aliases": [":af:"],
+ "aliases": [
+ ":af:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "afghanestan", "af"]
+ "keywords": [
+ "country",
+ "nation",
+ "afghanestan",
+ "af"
+ ]
},
"flag_ag": {
"unicode": "1F1E6-1F1EC",
@@ -4092,9 +8425,15 @@
"name": "antigua and barbuda",
"shortname": ":flag_ag:",
"category": "flags",
- "aliases": [":ag:"],
+ "aliases": [
+ ":ag:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ag"]
+ "keywords": [
+ "country",
+ "nation",
+ "ag"
+ ]
},
"flag_ai": {
"unicode": "1F1E6-1F1EE",
@@ -4102,9 +8441,15 @@
"name": "anguilla",
"shortname": ":flag_ai:",
"category": "flags",
- "aliases": [":ai:"],
+ "aliases": [
+ ":ai:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ai"]
+ "keywords": [
+ "country",
+ "nation",
+ "ai"
+ ]
},
"flag_al": {
"unicode": "1F1E6-1F1F1",
@@ -4112,9 +8457,16 @@
"name": "albania",
"shortname": ":flag_al:",
"category": "flags",
- "aliases": [":al:"],
+ "aliases": [
+ ":al:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "shqiperia", "al"]
+ "keywords": [
+ "country",
+ "nation",
+ "shqiperia",
+ "al"
+ ]
},
"flag_am": {
"unicode": "1F1E6-1F1F2",
@@ -4122,9 +8474,16 @@
"name": "armenia",
"shortname": ":flag_am:",
"category": "flags",
- "aliases": [":am:"],
+ "aliases": [
+ ":am:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "hayastan", "am"]
+ "keywords": [
+ "country",
+ "nation",
+ "hayastan",
+ "am"
+ ]
},
"flag_ao": {
"unicode": "1F1E6-1F1F4",
@@ -4132,9 +8491,27 @@
"name": "angola",
"shortname": ":flag_ao:",
"category": "flags",
- "aliases": [":ao:"],
+ "aliases": [
+ ":ao:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ao"
+ ]
+ },
+ "flag_aq": {
+ "unicode": "1F1E6-1F1F6",
+ "unicode_alternates": "",
+ "name": "antarctica",
+ "shortname": ":flag_aq:",
+ "category": "flags",
+ "aliases": [
+ ":aq:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ao"]
+ "keywords": []
},
"flag_ar": {
"unicode": "1F1E6-1F1F7",
@@ -4142,9 +8519,27 @@
"name": "argentina",
"shortname": ":flag_ar:",
"category": "flags",
- "aliases": [":ar:"],
+ "aliases": [
+ ":ar:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ar"
+ ]
+ },
+ "flag_as": {
+ "unicode": "1F1E6-1F1F8",
+ "unicode_alternates": "",
+ "name": "american samoa",
+ "shortname": ":flag_as:",
+ "category": "flags",
+ "aliases": [
+ ":as:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ar"]
+ "keywords": []
},
"flag_at": {
"unicode": "1F1E6-1F1F9",
@@ -4152,9 +8547,17 @@
"name": "austria",
"shortname": ":flag_at:",
"category": "flags",
- "aliases": [":at:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "&ouml;sterreich", "osterreich", "at"]
+ "aliases": [
+ ":at:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "&ouml;sterreich",
+ "osterreich",
+ "at"
+ ]
},
"flag_au": {
"unicode": "1F1E6-1F1FA",
@@ -4162,9 +8565,15 @@
"name": "australia",
"shortname": ":flag_au:",
"category": "flags",
- "aliases": [":au:"],
+ "aliases": [
+ ":au:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "au"]
+ "keywords": [
+ "country",
+ "nation",
+ "au"
+ ]
},
"flag_aw": {
"unicode": "1F1E6-1F1FC",
@@ -4172,9 +8581,27 @@
"name": "aruba",
"shortname": ":flag_aw:",
"category": "flags",
- "aliases": [":aw:"],
+ "aliases": [
+ ":aw:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "aw"
+ ]
+ },
+ "flag_ax": {
+ "unicode": "1F1E6-1F1FD",
+ "unicode_alternates": "",
+ "name": "åland islands",
+ "shortname": ":flag_ax:",
+ "category": "flags",
+ "aliases": [
+ ":ax:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "aw"]
+ "keywords": []
},
"flag_az": {
"unicode": "1F1E6-1F1FF",
@@ -4182,9 +8609,16 @@
"name": "azerbaijan",
"shortname": ":flag_az:",
"category": "flags",
- "aliases": [":az:"],
+ "aliases": [
+ ":az:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "azarbaycan", "az"]
+ "keywords": [
+ "country",
+ "nation",
+ "azarbaycan",
+ "az"
+ ]
},
"flag_ba": {
"unicode": "1F1E7-1F1E6",
@@ -4192,9 +8626,16 @@
"name": "bosnia and herzegovina",
"shortname": ":flag_ba:",
"category": "flags",
- "aliases": [":ba:"],
+ "aliases": [
+ ":ba:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bosna i hercegovina", "ba"]
+ "keywords": [
+ "country",
+ "nation",
+ "bosna i hercegovina",
+ "ba"
+ ]
},
"flag_bb": {
"unicode": "1F1E7-1F1E7",
@@ -4202,9 +8643,15 @@
"name": "barbados",
"shortname": ":flag_bb:",
"category": "flags",
- "aliases": [":bb:"],
+ "aliases": [
+ ":bb:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bb"]
+ "keywords": [
+ "country",
+ "nation",
+ "bb"
+ ]
},
"flag_bd": {
"unicode": "1F1E7-1F1E9",
@@ -4212,9 +8659,15 @@
"name": "bangladesh",
"shortname": ":flag_bd:",
"category": "flags",
- "aliases": [":bd:"],
+ "aliases": [
+ ":bd:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bd"]
+ "keywords": [
+ "country",
+ "nation",
+ "bd"
+ ]
},
"flag_be": {
"unicode": "1F1E7-1F1EA",
@@ -4222,9 +8675,17 @@
"name": "belgium",
"shortname": ":flag_be:",
"category": "flags",
- "aliases": [":be:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "belgique", "belgie", "be"]
+ "aliases": [
+ ":be:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "belgique",
+ "belgie",
+ "be"
+ ]
},
"flag_bf": {
"unicode": "1F1E7-1F1EB",
@@ -4232,9 +8693,15 @@
"name": "burkina faso",
"shortname": ":flag_bf:",
"category": "flags",
- "aliases": [":bf:"],
+ "aliases": [
+ ":bf:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bf"]
+ "keywords": [
+ "country",
+ "nation",
+ "bf"
+ ]
},
"flag_bg": {
"unicode": "1F1E7-1F1EC",
@@ -4242,9 +8709,15 @@
"name": "bulgaria",
"shortname": ":flag_bg:",
"category": "flags",
- "aliases": [":bg:"],
+ "aliases": [
+ ":bg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bg"]
+ "keywords": [
+ "country",
+ "nation",
+ "bg"
+ ]
},
"flag_bh": {
"unicode": "1F1E7-1F1ED",
@@ -4252,9 +8725,16 @@
"name": "bahrain",
"shortname": ":flag_bh:",
"category": "flags",
- "aliases": [":bh:"],
+ "aliases": [
+ ":bh:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "al bahrayn", "bh"]
+ "keywords": [
+ "country",
+ "nation",
+ "al bahrayn",
+ "bh"
+ ]
},
"flag_bi": {
"unicode": "1F1E7-1F1EE",
@@ -4262,9 +8742,15 @@
"name": "burundi",
"shortname": ":flag_bi:",
"category": "flags",
- "aliases": [":bi:"],
+ "aliases": [
+ ":bi:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bi"]
+ "keywords": [
+ "country",
+ "nation",
+ "bi"
+ ]
},
"flag_bj": {
"unicode": "1F1E7-1F1EF",
@@ -4272,9 +8758,27 @@
"name": "benin",
"shortname": ":flag_bj:",
"category": "flags",
- "aliases": [":bj:"],
+ "aliases": [
+ ":bj:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "bj"
+ ]
+ },
+ "flag_bl": {
+ "unicode": "1F1E7-1F1F1",
+ "unicode_alternates": "",
+ "name": "saint barthélemy",
+ "shortname": ":flag_bl:",
+ "category": "flags",
+ "aliases": [
+ ":bl:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bj"]
+ "keywords": []
},
"flag_black": {
"unicode": "1F3F4",
@@ -4282,9 +8786,14 @@
"name": "waving black flag",
"shortname": ":flag_black:",
"category": "objects_symbols",
- "aliases": [":waving_black_flag:"],
+ "aliases": [
+ ":waving_black_flag:"
+ ],
"aliases_ascii": [],
- "keywords": ["symbol", "signal"]
+ "keywords": [
+ "symbol",
+ "signal"
+ ]
},
"flag_bm": {
"unicode": "1F1E7-1F1F2",
@@ -4292,9 +8801,15 @@
"name": "bermuda",
"shortname": ":flag_bm:",
"category": "flags",
- "aliases": [":bm:"],
+ "aliases": [
+ ":bm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bm"]
+ "keywords": [
+ "country",
+ "nation",
+ "bm"
+ ]
},
"flag_bn": {
"unicode": "1F1E7-1F1F3",
@@ -4302,9 +8817,15 @@
"name": "brunei",
"shortname": ":flag_bn:",
"category": "flags",
- "aliases": [":bn:"],
+ "aliases": [
+ ":bn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bn"]
+ "keywords": [
+ "country",
+ "nation",
+ "bn"
+ ]
},
"flag_bo": {
"unicode": "1F1E7-1F1F4",
@@ -4312,9 +8833,27 @@
"name": "bolivia",
"shortname": ":flag_bo:",
"category": "flags",
- "aliases": [":bo:"],
+ "aliases": [
+ ":bo:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "bo"
+ ]
+ },
+ "flag_bq": {
+ "unicode": "1F1E7-1F1F6",
+ "unicode_alternates": "",
+ "name": "caribbean netherlands",
+ "shortname": ":flag_bq:",
+ "category": "flags",
+ "aliases": [
+ ":bq:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bo"]
+ "keywords": []
},
"flag_br": {
"unicode": "1F1E7-1F1F7",
@@ -4322,9 +8861,16 @@
"name": "brazil",
"shortname": ":flag_br:",
"category": "flags",
- "aliases": [":br:"],
+ "aliases": [
+ ":br:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "brasil", "br"]
+ "keywords": [
+ "country",
+ "nation",
+ "brasil",
+ "br"
+ ]
},
"flag_bs": {
"unicode": "1F1E7-1F1F8",
@@ -4332,9 +8878,15 @@
"name": "the bahamas",
"shortname": ":flag_bs:",
"category": "flags",
- "aliases": [":bs:"],
+ "aliases": [
+ ":bs:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bs"]
+ "keywords": [
+ "country",
+ "nation",
+ "bs"
+ ]
},
"flag_bt": {
"unicode": "1F1E7-1F1F9",
@@ -4342,9 +8894,27 @@
"name": "bhutan",
"shortname": ":flag_bt:",
"category": "flags",
- "aliases": [":bt:"],
+ "aliases": [
+ ":bt:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "bt"
+ ]
+ },
+ "flag_bv": {
+ "unicode": "1F1E7-1F1FB",
+ "unicode_alternates": "",
+ "name": "bouvet island",
+ "shortname": ":flag_bv:",
+ "category": "flags",
+ "aliases": [
+ ":bv:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bt"]
+ "keywords": []
},
"flag_bw": {
"unicode": "1F1E7-1F1FC",
@@ -4352,9 +8922,15 @@
"name": "botswana",
"shortname": ":flag_bw:",
"category": "flags",
- "aliases": [":bw:"],
+ "aliases": [
+ ":bw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bw"]
+ "keywords": [
+ "country",
+ "nation",
+ "bw"
+ ]
},
"flag_by": {
"unicode": "1F1E7-1F1FE",
@@ -4362,9 +8938,16 @@
"name": "belarus",
"shortname": ":flag_by:",
"category": "flags",
- "aliases": [":by:"],
+ "aliases": [
+ ":by:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "byelarus", "by"]
+ "keywords": [
+ "country",
+ "nation",
+ "byelarus",
+ "by"
+ ]
},
"flag_bz": {
"unicode": "1F1E7-1F1FF",
@@ -4372,9 +8955,15 @@
"name": "belize",
"shortname": ":flag_bz:",
"category": "flags",
- "aliases": [":bz:"],
+ "aliases": [
+ ":bz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bz"]
+ "keywords": [
+ "country",
+ "nation",
+ "bz"
+ ]
},
"flag_ca": {
"unicode": "1F1E8-1F1E6",
@@ -4382,9 +8971,27 @@
"name": "canada",
"shortname": ":flag_ca:",
"category": "flags",
- "aliases": [":ca:"],
+ "aliases": [
+ ":ca:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ca"
+ ]
+ },
+ "flag_cc": {
+ "unicode": "1F1E8-1F1E8",
+ "unicode_alternates": "",
+ "name": "cocos (keeling) islands",
+ "shortname": ":flag_cc:",
+ "category": "flags",
+ "aliases": [
+ ":cc:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ca"]
+ "keywords": []
},
"flag_cd": {
"unicode": "1F1E8-1F1E9",
@@ -4392,9 +8999,17 @@
"name": "the democratic republic of the congo",
"shortname": ":flag_cd:",
"category": "flags",
- "aliases": [":congo:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "r&eacute;publique d&eacute;mocratique du congo", "republique democratique du congo", "cd"]
+ "aliases": [
+ ":congo:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "r&eacute;publique d&eacute;mocratique du congo",
+ "republique democratique du congo",
+ "cd"
+ ]
},
"flag_cf": {
"unicode": "1F1E8-1F1EB",
@@ -4402,9 +9017,15 @@
"name": "central african republic",
"shortname": ":flag_cf:",
"category": "flags",
- "aliases": [":cf:"],
+ "aliases": [
+ ":cf:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cf"]
+ "keywords": [
+ "country",
+ "nation",
+ "cf"
+ ]
},
"flag_cg": {
"unicode": "1F1E8-1F1EC",
@@ -4412,9 +9033,15 @@
"name": "the republic of the congo",
"shortname": ":flag_cg:",
"category": "flags",
- "aliases": [":cg:"],
+ "aliases": [
+ ":cg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cg"]
+ "keywords": [
+ "country",
+ "nation",
+ "cg"
+ ]
},
"flag_ch": {
"unicode": "1F1E8-1F1ED",
@@ -4422,9 +9049,15 @@
"name": "switzerland",
"shortname": ":flag_ch:",
"category": "flags",
- "aliases": [":ch:"],
+ "aliases": [
+ ":ch:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "swiss"]
+ "keywords": [
+ "country",
+ "nation",
+ "swiss"
+ ]
},
"flag_ci": {
"unicode": "1F1E8-1F1EE",
@@ -4432,9 +9065,27 @@
"name": "cote d'ivoire",
"shortname": ":flag_ci:",
"category": "flags",
- "aliases": [":ci:"],
+ "aliases": [
+ ":ci:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ci"
+ ]
+ },
+ "flag_ck": {
+ "unicode": "1F1E8-1F1F0",
+ "unicode_alternates": "",
+ "name": "cook islands",
+ "shortname": ":flag_ck:",
+ "category": "flags",
+ "aliases": [
+ ":ck:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ci"]
+ "keywords": []
},
"flag_cl": {
"unicode": "1F1E8-1F1F1",
@@ -4442,9 +9093,15 @@
"name": "chile",
"shortname": ":flag_cl:",
"category": "flags",
- "aliases": [":chile:"],
+ "aliases": [
+ ":chile:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cl"]
+ "keywords": [
+ "country",
+ "nation",
+ "cl"
+ ]
},
"flag_cm": {
"unicode": "1F1E8-1F1F2",
@@ -4452,9 +9109,15 @@
"name": "cameroon",
"shortname": ":flag_cm:",
"category": "flags",
- "aliases": [":cm:"],
+ "aliases": [
+ ":cm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cm"]
+ "keywords": [
+ "country",
+ "nation",
+ "cm"
+ ]
},
"flag_cn": {
"unicode": "1F1E8-1F1F3",
@@ -4462,9 +9125,18 @@
"name": "china",
"shortname": ":flag_cn:",
"category": "flags",
- "aliases": [":cn:"],
- "aliases_ascii": [],
- "keywords": ["chinese", "prc", "zhong guo", "country", "nation", "cn"]
+ "aliases": [
+ ":cn:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "chinese",
+ "prc",
+ "zhong guo",
+ "country",
+ "nation",
+ "cn"
+ ]
},
"flag_co": {
"unicode": "1F1E8-1F1F4",
@@ -4472,9 +9144,27 @@
"name": "colombia",
"shortname": ":flag_co:",
"category": "flags",
- "aliases": [":co:"],
+ "aliases": [
+ ":co:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "co"
+ ]
+ },
+ "flag_cp": {
+ "unicode": "1F1E8-1F1F5",
+ "unicode_alternates": "",
+ "name": "clipperton island",
+ "shortname": ":flag_cp:",
+ "category": "flags",
+ "aliases": [
+ ":cp:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "co"]
+ "keywords": []
},
"flag_cr": {
"unicode": "1F1E8-1F1F7",
@@ -4482,9 +9172,15 @@
"name": "costa rica",
"shortname": ":flag_cr:",
"category": "flags",
- "aliases": [":cr:"],
+ "aliases": [
+ ":cr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cr"]
+ "keywords": [
+ "country",
+ "nation",
+ "cr"
+ ]
},
"flag_cu": {
"unicode": "1F1E8-1F1FA",
@@ -4492,9 +9188,15 @@
"name": "cuba",
"shortname": ":flag_cu:",
"category": "flags",
- "aliases": [":cu:"],
+ "aliases": [
+ ":cu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cu"]
+ "keywords": [
+ "country",
+ "nation",
+ "cu"
+ ]
},
"flag_cv": {
"unicode": "1F1E8-1F1FB",
@@ -4502,9 +9204,40 @@
"name": "cape verde",
"shortname": ":flag_cv:",
"category": "flags",
- "aliases": [":cv:"],
+ "aliases": [
+ ":cv:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "cabo verde",
+ "cv"
+ ]
+ },
+ "flag_cw": {
+ "unicode": "1F1E8-1F1FC",
+ "unicode_alternates": "",
+ "name": "curaçao",
+ "shortname": ":flag_cw:",
+ "category": "flags",
+ "aliases": [
+ ":cw:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "flag_cx": {
+ "unicode": "1F1E8-1F1FD",
+ "unicode_alternates": "",
+ "name": "christmas island",
+ "shortname": ":flag_cx:",
+ "category": "flags",
+ "aliases": [
+ ":cx:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "cabo verde", "cv"]
+ "keywords": []
},
"flag_cy": {
"unicode": "1F1E8-1F1FE",
@@ -4512,9 +9245,17 @@
"name": "cyprus",
"shortname": ":flag_cy:",
"category": "flags",
- "aliases": [":cy:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "kibris", "kypros", "cy"]
+ "aliases": [
+ ":cy:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "kibris",
+ "kypros",
+ "cy"
+ ]
},
"flag_cz": {
"unicode": "1F1E8-1F1FF",
@@ -4522,9 +9263,16 @@
"name": "the czech republic",
"shortname": ":flag_cz:",
"category": "flags",
- "aliases": [":cz:"],
+ "aliases": [
+ ":cz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ceska republika", "cz"]
+ "keywords": [
+ "country",
+ "nation",
+ "ceska republika",
+ "cz"
+ ]
},
"flag_de": {
"unicode": "1F1E9-1F1EA",
@@ -4532,9 +9280,29 @@
"name": "germany",
"shortname": ":flag_de:",
"category": "flags",
- "aliases": [":de:"],
+ "aliases": [
+ ":de:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "german",
+ "nation",
+ "deutschland",
+ "country",
+ "de"
+ ]
+ },
+ "flag_dg": {
+ "unicode": "1F1E9-1F1EC",
+ "unicode_alternates": "",
+ "name": "diego garcia",
+ "shortname": ":flag_dg:",
+ "category": "flags",
+ "aliases": [
+ ":dg:"
+ ],
"aliases_ascii": [],
- "keywords": ["german", "nation", "deutschland", "country", "de"]
+ "keywords": []
},
"flag_dj": {
"unicode": "1F1E9-1F1EF",
@@ -4542,9 +9310,15 @@
"name": "djibouti",
"shortname": ":flag_dj:",
"category": "flags",
- "aliases": [":dj:"],
+ "aliases": [
+ ":dj:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "dj"]
+ "keywords": [
+ "country",
+ "nation",
+ "dj"
+ ]
},
"flag_dk": {
"unicode": "1F1E9-1F1F0",
@@ -4552,9 +9326,16 @@
"name": "denmark",
"shortname": ":flag_dk:",
"category": "flags",
- "aliases": [":dk:"],
+ "aliases": [
+ ":dk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "danmark", "dk"]
+ "keywords": [
+ "country",
+ "nation",
+ "danmark",
+ "dk"
+ ]
},
"flag_dm": {
"unicode": "1F1E9-1F1F2",
@@ -4562,9 +9343,15 @@
"name": "dominica",
"shortname": ":flag_dm:",
"category": "flags",
- "aliases": [":dm:"],
+ "aliases": [
+ ":dm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "dm"]
+ "keywords": [
+ "country",
+ "nation",
+ "dm"
+ ]
},
"flag_do": {
"unicode": "1F1E9-1F1F4",
@@ -4572,9 +9359,15 @@
"name": "the dominican republic",
"shortname": ":flag_do:",
"category": "flags",
- "aliases": [":do:"],
+ "aliases": [
+ ":do:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "do"]
+ "keywords": [
+ "country",
+ "nation",
+ "do"
+ ]
},
"flag_dz": {
"unicode": "1F1E9-1F1FF",
@@ -4582,9 +9375,29 @@
"name": "algeria",
"shortname": ":flag_dz:",
"category": "flags",
- "aliases": [":dz:"],
+ "aliases": [
+ ":dz:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "al jaza'ir",
+ "al jazair",
+ "dz"
+ ]
+ },
+ "flag_ea": {
+ "unicode": "1F1EA-1F1E6",
+ "unicode_alternates": "",
+ "name": "ceuta, melilla",
+ "shortname": ":flag_ea:",
+ "category": "flags",
+ "aliases": [
+ ":ea:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "al jaza'ir", "al jazair", "dz"]
+ "keywords": []
},
"flag_ec": {
"unicode": "1F1EA-1F1E8",
@@ -4592,9 +9405,15 @@
"name": "ecuador",
"shortname": ":flag_ec:",
"category": "flags",
- "aliases": [":ec:"],
+ "aliases": [
+ ":ec:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ec"]
+ "keywords": [
+ "country",
+ "nation",
+ "ec"
+ ]
},
"flag_ee": {
"unicode": "1F1EA-1F1EA",
@@ -4602,9 +9421,16 @@
"name": "estonia",
"shortname": ":flag_ee:",
"category": "flags",
- "aliases": [":ee:"],
+ "aliases": [
+ ":ee:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "eesti vabariik", "ee"]
+ "keywords": [
+ "country",
+ "nation",
+ "eesti vabariik",
+ "ee"
+ ]
},
"flag_eg": {
"unicode": "1F1EA-1F1EC",
@@ -4612,9 +9438,16 @@
"name": "egypt",
"shortname": ":flag_eg:",
"category": "flags",
- "aliases": [":eg:"],
+ "aliases": [
+ ":eg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "misr", "eg"]
+ "keywords": [
+ "country",
+ "nation",
+ "misr",
+ "eg"
+ ]
},
"flag_eh": {
"unicode": "1F1EA-1F1ED",
@@ -4622,9 +9455,18 @@
"name": "western sahara",
"shortname": ":flag_eh:",
"category": "flags",
- "aliases": [":eh:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "aṣ-Ṣaḥrā’ al-gharbīyah", "sahra", "gharbiyah", "eh"]
+ "aliases": [
+ ":eh:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "aṣ-Ṣaḥrā’ al-gharbīyah",
+ "sahra",
+ "gharbiyah",
+ "eh"
+ ]
},
"flag_er": {
"unicode": "1F1EA-1F1F7",
@@ -4632,9 +9474,16 @@
"name": "eritrea",
"shortname": ":flag_er:",
"category": "flags",
- "aliases": [":er:"],
+ "aliases": [
+ ":er:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "hagere ertra", "er"]
+ "keywords": [
+ "country",
+ "nation",
+ "hagere ertra",
+ "er"
+ ]
},
"flag_es": {
"unicode": "1F1EA-1F1F8",
@@ -4642,9 +9491,17 @@
"name": "spain",
"shortname": ":flag_es:",
"category": "flags",
- "aliases": [":es:"],
- "aliases_ascii": [],
- "keywords": ["nation", "espa&ntilde;a", "country", "espana", "es"]
+ "aliases": [
+ ":es:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "nation",
+ "espa&ntilde;a",
+ "country",
+ "espana",
+ "es"
+ ]
},
"flag_et": {
"unicode": "1F1EA-1F1F9",
@@ -4652,9 +9509,29 @@
"name": "ethiopia",
"shortname": ":flag_et:",
"category": "flags",
- "aliases": [":et:"],
+ "aliases": [
+ ":et:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ityop'iya",
+ "ityopiya",
+ "et"
+ ]
+ },
+ "flag_eu": {
+ "unicode": "1F1EA-1F1FA",
+ "unicode_alternates": "",
+ "name": "european union",
+ "shortname": ":flag_eu:",
+ "category": "flags",
+ "aliases": [
+ ":eu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ityop'iya", "ityopiya", "et"]
+ "keywords": []
},
"flag_fi": {
"unicode": "1F1EB-1F1EE",
@@ -4662,9 +9539,16 @@
"name": "finland",
"shortname": ":flag_fi:",
"category": "flags",
- "aliases": [":fi:"],
+ "aliases": [
+ ":fi:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "suomen tasavalta", "fi"]
+ "keywords": [
+ "country",
+ "nation",
+ "suomen tasavalta",
+ "fi"
+ ]
},
"flag_fj": {
"unicode": "1F1EB-1F1EF",
@@ -4672,9 +9556,15 @@
"name": "fiji",
"shortname": ":flag_fj:",
"category": "flags",
- "aliases": [":fj:"],
+ "aliases": [
+ ":fj:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "fj"]
+ "keywords": [
+ "country",
+ "nation",
+ "fj"
+ ]
},
"flag_fk": {
"unicode": "1F1EB-1F1F0",
@@ -4682,9 +9572,16 @@
"name": "falkland islands",
"shortname": ":flag_fk:",
"category": "flags",
- "aliases": [":fk:"],
+ "aliases": [
+ ":fk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "islas malvinas", "fk"]
+ "keywords": [
+ "country",
+ "nation",
+ "islas malvinas",
+ "fk"
+ ]
},
"flag_fm": {
"unicode": "1F1EB-1F1F2",
@@ -4692,9 +9589,15 @@
"name": "micronesia",
"shortname": ":flag_fm:",
"category": "flags",
- "aliases": [":fm:"],
+ "aliases": [
+ ":fm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "fm"]
+ "keywords": [
+ "country",
+ "nation",
+ "fm"
+ ]
},
"flag_fo": {
"unicode": "1F1EB-1F1F4",
@@ -4702,9 +9605,16 @@
"name": "faroe islands",
"shortname": ":flag_fo:",
"category": "flags",
- "aliases": [":fo:"],
+ "aliases": [
+ ":fo:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "foroyar", "fo"]
+ "keywords": [
+ "country",
+ "nation",
+ "foroyar",
+ "fo"
+ ]
},
"flag_fr": {
"unicode": "1F1EB-1F1F7",
@@ -4712,9 +9622,16 @@
"name": "france",
"shortname": ":flag_fr:",
"category": "flags",
- "aliases": [":fr:"],
+ "aliases": [
+ ":fr:"
+ ],
"aliases_ascii": [],
- "keywords": ["french", "nation", "country", "fr"]
+ "keywords": [
+ "french",
+ "nation",
+ "country",
+ "fr"
+ ]
},
"flag_ga": {
"unicode": "1F1EC-1F1E6",
@@ -4722,9 +9639,15 @@
"name": "gabon",
"shortname": ":flag_ga:",
"category": "flags",
- "aliases": [":ga:"],
+ "aliases": [
+ ":ga:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ga"]
+ "keywords": [
+ "country",
+ "nation",
+ "ga"
+ ]
},
"flag_gb": {
"unicode": "1F1EC-1F1E7",
@@ -4732,9 +9655,19 @@
"name": "great britain",
"shortname": ":flag_gb:",
"category": "flags",
- "aliases": [":gb:"],
- "aliases_ascii": [],
- "keywords": ["UK", "gb", "britsh", "nation", "united kingdom", "england", "country"]
+ "aliases": [
+ ":gb:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "UK",
+ "gb",
+ "britsh",
+ "nation",
+ "united kingdom",
+ "england",
+ "country"
+ ]
},
"flag_gd": {
"unicode": "1F1EC-1F1E9",
@@ -4742,9 +9675,15 @@
"name": "grenada",
"shortname": ":flag_gd:",
"category": "flags",
- "aliases": [":gd:"],
+ "aliases": [
+ ":gd:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gd"]
+ "keywords": [
+ "country",
+ "nation",
+ "gd"
+ ]
},
"flag_ge": {
"unicode": "1F1EC-1F1EA",
@@ -4752,9 +9691,41 @@
"name": "georgia",
"shortname": ":flag_ge:",
"category": "flags",
- "aliases": [":ge:"],
+ "aliases": [
+ ":ge:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "sak'art'velo",
+ "sakartvelo",
+ "ge"
+ ]
+ },
+ "flag_gf": {
+ "unicode": "1F1EC-1F1EB",
+ "unicode_alternates": "",
+ "name": "french guiana",
+ "shortname": ":flag_gf:",
+ "category": "flags",
+ "aliases": [
+ ":gf:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "flag_gg": {
+ "unicode": "1F1EC-1F1EC",
+ "unicode_alternates": "",
+ "name": "guernsey",
+ "shortname": ":flag_gg:",
+ "category": "flags",
+ "aliases": [
+ ":gg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sak'art'velo", "sakartvelo", "ge"]
+ "keywords": []
},
"flag_gh": {
"unicode": "1F1EC-1F1ED",
@@ -4762,9 +9733,15 @@
"name": "ghana",
"shortname": ":flag_gh:",
"category": "flags",
- "aliases": [":gh:"],
+ "aliases": [
+ ":gh:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gh"]
+ "keywords": [
+ "country",
+ "nation",
+ "gh"
+ ]
},
"flag_gi": {
"unicode": "1F1EC-1F1EE",
@@ -4772,9 +9749,15 @@
"name": "gibraltar",
"shortname": ":flag_gi:",
"category": "flags",
- "aliases": [":gi:"],
+ "aliases": [
+ ":gi:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gi"]
+ "keywords": [
+ "country",
+ "nation",
+ "gi"
+ ]
},
"flag_gl": {
"unicode": "1F1EC-1F1F1",
@@ -4782,9 +9765,16 @@
"name": "greenland",
"shortname": ":flag_gl:",
"category": "flags",
- "aliases": [":gl:"],
+ "aliases": [
+ ":gl:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "kalaallit nunaat", "gl"]
+ "keywords": [
+ "country",
+ "nation",
+ "kalaallit nunaat",
+ "gl"
+ ]
},
"flag_gm": {
"unicode": "1F1EC-1F1F2",
@@ -4792,9 +9782,15 @@
"name": "the gambia",
"shortname": ":flag_gm:",
"category": "flags",
- "aliases": [":gm:"],
+ "aliases": [
+ ":gm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gm"]
+ "keywords": [
+ "country",
+ "nation",
+ "gm"
+ ]
},
"flag_gn": {
"unicode": "1F1EC-1F1F3",
@@ -4802,9 +9798,28 @@
"name": "guinea",
"shortname": ":flag_gn:",
"category": "flags",
- "aliases": [":gn:"],
+ "aliases": [
+ ":gn:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "guinee",
+ "gn"
+ ]
+ },
+ "flag_gp": {
+ "unicode": "1F1EC-1F1F5",
+ "unicode_alternates": "",
+ "name": "guadeloupe",
+ "shortname": ":flag_gp:",
+ "category": "flags",
+ "aliases": [
+ ":gp:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "guinee", "gn"]
+ "keywords": []
},
"flag_gq": {
"unicode": "1F1EC-1F1F6",
@@ -4812,9 +9827,16 @@
"name": "equatorial guinea",
"shortname": ":flag_gq:",
"category": "flags",
- "aliases": [":gq:"],
+ "aliases": [
+ ":gq:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "guinea ecuatorial", "gq"]
+ "keywords": [
+ "country",
+ "nation",
+ "guinea ecuatorial",
+ "gq"
+ ]
},
"flag_gr": {
"unicode": "1F1EC-1F1F7",
@@ -4822,9 +9844,29 @@
"name": "greece",
"shortname": ":flag_gr:",
"category": "flags",
- "aliases": [":gr:"],
+ "aliases": [
+ ":gr:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ellas",
+ "ellada",
+ "gr"
+ ]
+ },
+ "flag_gs": {
+ "unicode": "1F1EC-1F1F8",
+ "unicode_alternates": "",
+ "name": "south georgia",
+ "shortname": ":flag_gs:",
+ "category": "flags",
+ "aliases": [
+ ":gs:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ellas", "ellada", "gr"]
+ "keywords": []
},
"flag_gt": {
"unicode": "1F1EC-1F1F9",
@@ -4832,9 +9874,15 @@
"name": "guatemala",
"shortname": ":flag_gt:",
"category": "flags",
- "aliases": [":gt:"],
+ "aliases": [
+ ":gt:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gt"]
+ "keywords": [
+ "country",
+ "nation",
+ "gt"
+ ]
},
"flag_gu": {
"unicode": "1F1EC-1F1FA",
@@ -4842,9 +9890,15 @@
"name": "guam",
"shortname": ":flag_gu:",
"category": "flags",
- "aliases": [":gu:"],
+ "aliases": [
+ ":gu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gu"]
+ "keywords": [
+ "country",
+ "nation",
+ "gu"
+ ]
},
"flag_gw": {
"unicode": "1F1EC-1F1FC",
@@ -4852,9 +9906,17 @@
"name": "guinea-bissau",
"shortname": ":flag_gw:",
"category": "flags",
- "aliases": [":gw:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "guine-bissau", "guine bissau", "gw"]
+ "aliases": [
+ ":gw:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "guine-bissau",
+ "guine bissau",
+ "gw"
+ ]
},
"flag_gy": {
"unicode": "1F1EC-1F1FE",
@@ -4862,9 +9924,15 @@
"name": "guyana",
"shortname": ":flag_gy:",
"category": "flags",
- "aliases": [":gy:"],
+ "aliases": [
+ ":gy:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "gy"]
+ "keywords": [
+ "country",
+ "nation",
+ "gy"
+ ]
},
"flag_hk": {
"unicode": "1F1ED-1F1F0",
@@ -4872,9 +9940,28 @@
"name": "hong kong",
"shortname": ":flag_hk:",
"category": "flags",
- "aliases": [":hk:"],
+ "aliases": [
+ ":hk:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "xianggang",
+ "hk"
+ ]
+ },
+ "flag_hm": {
+ "unicode": "1F1ED-1F1F2",
+ "unicode_alternates": "",
+ "name": "heard island and mcdonald islands",
+ "shortname": ":flag_hm:",
+ "category": "flags",
+ "aliases": [
+ ":hm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "xianggang", "hk"]
+ "keywords": []
},
"flag_hn": {
"unicode": "1F1ED-1F1F3",
@@ -4882,9 +9969,15 @@
"name": "honduras",
"shortname": ":flag_hn:",
"category": "flags",
- "aliases": [":hn:"],
+ "aliases": [
+ ":hn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "hn"]
+ "keywords": [
+ "country",
+ "nation",
+ "hn"
+ ]
},
"flag_hr": {
"unicode": "1F1ED-1F1F7",
@@ -4892,9 +9985,16 @@
"name": "croatia",
"shortname": ":flag_hr:",
"category": "flags",
- "aliases": [":hr:"],
+ "aliases": [
+ ":hr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "hrvatska", "hr"]
+ "keywords": [
+ "country",
+ "nation",
+ "hrvatska",
+ "hr"
+ ]
},
"flag_ht": {
"unicode": "1F1ED-1F1F9",
@@ -4902,9 +10002,15 @@
"name": "haiti",
"shortname": ":flag_ht:",
"category": "flags",
- "aliases": [":ht:"],
+ "aliases": [
+ ":ht:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ht"]
+ "keywords": [
+ "country",
+ "nation",
+ "ht"
+ ]
},
"flag_hu": {
"unicode": "1F1ED-1F1FA",
@@ -4912,9 +10018,28 @@
"name": "hungary",
"shortname": ":flag_hu:",
"category": "flags",
- "aliases": [":hu:"],
+ "aliases": [
+ ":hu:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "magyarorszag",
+ "hu"
+ ]
+ },
+ "flag_ic": {
+ "unicode": "1F1EE-1F1E8",
+ "unicode_alternates": "",
+ "name": "canary islands",
+ "shortname": ":flag_ic:",
+ "category": "flags",
+ "aliases": [
+ ":ic:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "magyarorszag", "hu"]
+ "keywords": []
},
"flag_id": {
"unicode": "1F1EE-1F1E9",
@@ -4922,9 +10047,15 @@
"name": "indonesia",
"shortname": ":flag_id:",
"category": "flags",
- "aliases": [":indonesia:"],
+ "aliases": [
+ ":indonesia:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "id"]
+ "keywords": [
+ "country",
+ "nation",
+ "id"
+ ]
},
"flag_ie": {
"unicode": "1F1EE-1F1EA",
@@ -4932,9 +10063,17 @@
"name": "ireland",
"shortname": ":flag_ie:",
"category": "flags",
- "aliases": [":ie:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "&eacute;ire", "eire", "ie"]
+ "aliases": [
+ ":ie:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "&eacute;ire",
+ "eire",
+ "ie"
+ ]
},
"flag_il": {
"unicode": "1F1EE-1F1F1",
@@ -4942,9 +10081,29 @@
"name": "israel",
"shortname": ":flag_il:",
"category": "flags",
- "aliases": [":il:"],
+ "aliases": [
+ ":il:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "yisra'el",
+ "yisrael",
+ "il"
+ ]
+ },
+ "flag_im": {
+ "unicode": "1F1EE-1F1F2",
+ "unicode_alternates": "",
+ "name": "isle of man",
+ "shortname": ":flag_im:",
+ "category": "flags",
+ "aliases": [
+ ":im:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "yisra'el", "yisrael", "il"]
+ "keywords": []
},
"flag_in": {
"unicode": "1F1EE-1F1F3",
@@ -4952,9 +10111,28 @@
"name": "india",
"shortname": ":flag_in:",
"category": "flags",
- "aliases": [":in:"],
+ "aliases": [
+ ":in:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "bharat",
+ "in"
+ ]
+ },
+ "flag_io": {
+ "unicode": "1F1EE-1F1F4",
+ "unicode_alternates": "",
+ "name": "british indian ocean territory",
+ "shortname": ":flag_io:",
+ "category": "flags",
+ "aliases": [
+ ":io:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "bharat", "in"]
+ "keywords": []
},
"flag_iq": {
"unicode": "1F1EE-1F1F6",
@@ -4962,9 +10140,15 @@
"name": "iraq",
"shortname": ":flag_iq:",
"category": "flags",
- "aliases": [":iq:"],
+ "aliases": [
+ ":iq:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "iq"]
+ "keywords": [
+ "country",
+ "nation",
+ "iq"
+ ]
},
"flag_ir": {
"unicode": "1F1EE-1F1F7",
@@ -4972,9 +10156,15 @@
"name": "iran",
"shortname": ":flag_ir:",
"category": "flags",
- "aliases": [":ir:"],
+ "aliases": [
+ ":ir:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ir"]
+ "keywords": [
+ "country",
+ "nation",
+ "ir"
+ ]
},
"flag_is": {
"unicode": "1F1EE-1F1F8",
@@ -4982,9 +10172,16 @@
"name": "iceland",
"shortname": ":flag_is:",
"category": "flags",
- "aliases": [":is:"],
+ "aliases": [
+ ":is:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "lyoveldio island", "is"]
+ "keywords": [
+ "country",
+ "nation",
+ "lyoveldio island",
+ "is"
+ ]
},
"flag_it": {
"unicode": "1F1EE-1F1F9",
@@ -4992,9 +10189,16 @@
"name": "italy",
"shortname": ":flag_it:",
"category": "flags",
- "aliases": [":it:"],
+ "aliases": [
+ ":it:"
+ ],
"aliases_ascii": [],
- "keywords": ["italia", "country", "nation", "it"]
+ "keywords": [
+ "italia",
+ "country",
+ "nation",
+ "it"
+ ]
},
"flag_je": {
"unicode": "1F1EF-1F1EA",
@@ -5002,9 +10206,15 @@
"name": "jersey",
"shortname": ":flag_je:",
"category": "flags",
- "aliases": [":je:"],
+ "aliases": [
+ ":je:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "je"]
+ "keywords": [
+ "country",
+ "nation",
+ "je"
+ ]
},
"flag_jm": {
"unicode": "1F1EF-1F1F2",
@@ -5012,9 +10222,15 @@
"name": "jamaica",
"shortname": ":flag_jm:",
"category": "flags",
- "aliases": [":jm:"],
+ "aliases": [
+ ":jm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "jm"]
+ "keywords": [
+ "country",
+ "nation",
+ "jm"
+ ]
},
"flag_jo": {
"unicode": "1F1EF-1F1F4",
@@ -5022,9 +10238,16 @@
"name": "jordan",
"shortname": ":flag_jo:",
"category": "flags",
- "aliases": [":jo:"],
+ "aliases": [
+ ":jo:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "al urdun", "jo"]
+ "keywords": [
+ "country",
+ "nation",
+ "al urdun",
+ "jo"
+ ]
},
"flag_jp": {
"unicode": "1F1EF-1F1F5",
@@ -5032,9 +10255,16 @@
"name": "japan",
"shortname": ":flag_jp:",
"category": "flags",
- "aliases": [":jp:"],
+ "aliases": [
+ ":jp:"
+ ],
"aliases_ascii": [],
- "keywords": ["nation", "nippon", "country", "jp"]
+ "keywords": [
+ "nation",
+ "nippon",
+ "country",
+ "jp"
+ ]
},
"flag_ke": {
"unicode": "1F1F0-1F1EA",
@@ -5042,9 +10272,15 @@
"name": "kenya",
"shortname": ":flag_ke:",
"category": "flags",
- "aliases": [":ke:"],
+ "aliases": [
+ ":ke:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ke"]
+ "keywords": [
+ "country",
+ "nation",
+ "ke"
+ ]
},
"flag_kg": {
"unicode": "1F1F0-1F1EC",
@@ -5052,9 +10288,16 @@
"name": "kyrgyzstan",
"shortname": ":flag_kg:",
"category": "flags",
- "aliases": [":kg:"],
+ "aliases": [
+ ":kg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "kyrgyz respublikasy", "kg"]
+ "keywords": [
+ "country",
+ "nation",
+ "kyrgyz respublikasy",
+ "kg"
+ ]
},
"flag_kh": {
"unicode": "1F1F0-1F1ED",
@@ -5062,9 +10305,16 @@
"name": "cambodia",
"shortname": ":flag_kh:",
"category": "flags",
- "aliases": [":kh:"],
+ "aliases": [
+ ":kh:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "kampuchea", "kh"]
+ "keywords": [
+ "country",
+ "nation",
+ "kampuchea",
+ "kh"
+ ]
},
"flag_ki": {
"unicode": "1F1F0-1F1EE",
@@ -5072,9 +10322,17 @@
"name": "kiribati",
"shortname": ":flag_ki:",
"category": "flags",
- "aliases": [":ki:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "kiribati", "kiribas", "ki"]
+ "aliases": [
+ ":ki:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "kiribati",
+ "kiribas",
+ "ki"
+ ]
},
"flag_km": {
"unicode": "1F1F0-1F1F2",
@@ -5082,9 +10340,15 @@
"name": "the comoros",
"shortname": ":flag_km:",
"category": "flags",
- "aliases": [":km:"],
+ "aliases": [
+ ":km:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "km"]
+ "keywords": [
+ "country",
+ "nation",
+ "km"
+ ]
},
"flag_kn": {
"unicode": "1F1F0-1F1F3",
@@ -5092,9 +10356,15 @@
"name": "saint kitts and nevis",
"shortname": ":flag_kn:",
"category": "flags",
- "aliases": [":kn:"],
+ "aliases": [
+ ":kn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "kn"]
+ "keywords": [
+ "country",
+ "nation",
+ "kn"
+ ]
},
"flag_kp": {
"unicode": "1F1F0-1F1F5",
@@ -5102,9 +10372,15 @@
"name": "north korea",
"shortname": ":flag_kp:",
"category": "flags",
- "aliases": [":kp:"],
+ "aliases": [
+ ":kp:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "kp"]
+ "keywords": [
+ "country",
+ "nation",
+ "kp"
+ ]
},
"flag_kr": {
"unicode": "1F1F0-1F1F7",
@@ -5112,9 +10388,16 @@
"name": "korea",
"shortname": ":flag_kr:",
"category": "flags",
- "aliases": [":kr:"],
+ "aliases": [
+ ":kr:"
+ ],
"aliases_ascii": [],
- "keywords": ["nation", "country", "south korea", "kr"]
+ "keywords": [
+ "nation",
+ "country",
+ "south korea",
+ "kr"
+ ]
},
"flag_kw": {
"unicode": "1F1F0-1F1FC",
@@ -5122,9 +10405,16 @@
"name": "kuwait",
"shortname": ":flag_kw:",
"category": "flags",
- "aliases": [":kw:"],
+ "aliases": [
+ ":kw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "al kuwayt", "kw"]
+ "keywords": [
+ "country",
+ "nation",
+ "al kuwayt",
+ "kw"
+ ]
},
"flag_ky": {
"unicode": "1F1F0-1F1FE",
@@ -5132,9 +10422,15 @@
"name": "cayman islands",
"shortname": ":flag_ky:",
"category": "flags",
- "aliases": [":ky:"],
+ "aliases": [
+ ":ky:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ky"]
+ "keywords": [
+ "country",
+ "nation",
+ "ky"
+ ]
},
"flag_kz": {
"unicode": "1F1F0-1F1FF",
@@ -5142,9 +10438,16 @@
"name": "kazakhstan",
"shortname": ":flag_kz:",
"category": "flags",
- "aliases": [":kz:"],
+ "aliases": [
+ ":kz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "qazaqstan", "kz"]
+ "keywords": [
+ "country",
+ "nation",
+ "qazaqstan",
+ "kz"
+ ]
},
"flag_la": {
"unicode": "1F1F1-1F1E6",
@@ -5152,9 +10455,15 @@
"name": "laos",
"shortname": ":flag_la:",
"category": "flags",
- "aliases": [":la:"],
+ "aliases": [
+ ":la:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "la"]
+ "keywords": [
+ "country",
+ "nation",
+ "la"
+ ]
},
"flag_lb": {
"unicode": "1F1F1-1F1E7",
@@ -5162,9 +10471,16 @@
"name": "lebanon",
"shortname": ":flag_lb:",
"category": "flags",
- "aliases": [":lb:"],
+ "aliases": [
+ ":lb:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "lubnan", "lb"]
+ "keywords": [
+ "country",
+ "nation",
+ "lubnan",
+ "lb"
+ ]
},
"flag_lc": {
"unicode": "1F1F1-1F1E8",
@@ -5172,9 +10488,15 @@
"name": "saint lucia",
"shortname": ":flag_lc:",
"category": "flags",
- "aliases": [":lc:"],
+ "aliases": [
+ ":lc:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "lc"]
+ "keywords": [
+ "country",
+ "nation",
+ "lc"
+ ]
},
"flag_li": {
"unicode": "1F1F1-1F1EE",
@@ -5182,9 +10504,15 @@
"name": "liechtenstein",
"shortname": ":flag_li:",
"category": "flags",
- "aliases": [":li:"],
+ "aliases": [
+ ":li:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "li"]
+ "keywords": [
+ "country",
+ "nation",
+ "li"
+ ]
},
"flag_lk": {
"unicode": "1F1F1-1F1F0",
@@ -5192,9 +10520,15 @@
"name": "sri lanka",
"shortname": ":flag_lk:",
"category": "flags",
- "aliases": [":lk:"],
+ "aliases": [
+ ":lk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "lk"]
+ "keywords": [
+ "country",
+ "nation",
+ "lk"
+ ]
},
"flag_lr": {
"unicode": "1F1F1-1F1F7",
@@ -5202,9 +10536,15 @@
"name": "liberia",
"shortname": ":flag_lr:",
"category": "flags",
- "aliases": [":lr:"],
+ "aliases": [
+ ":lr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "lr"]
+ "keywords": [
+ "country",
+ "nation",
+ "lr"
+ ]
},
"flag_ls": {
"unicode": "1F1F1-1F1F8",
@@ -5212,9 +10552,15 @@
"name": "lesotho",
"shortname": ":flag_ls:",
"category": "flags",
- "aliases": [":ls:"],
+ "aliases": [
+ ":ls:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ls"]
+ "keywords": [
+ "country",
+ "nation",
+ "ls"
+ ]
},
"flag_lt": {
"unicode": "1F1F1-1F1F9",
@@ -5222,9 +10568,16 @@
"name": "lithuania",
"shortname": ":flag_lt:",
"category": "flags",
- "aliases": [":lt:"],
+ "aliases": [
+ ":lt:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "lietuva", "lt"]
+ "keywords": [
+ "country",
+ "nation",
+ "lietuva",
+ "lt"
+ ]
},
"flag_lu": {
"unicode": "1F1F1-1F1FA",
@@ -5232,9 +10585,17 @@
"name": "luxembourg",
"shortname": ":flag_lu:",
"category": "flags",
- "aliases": [":lu:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "luxembourg", "letzebuerg", "lu"]
+ "aliases": [
+ ":lu:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "luxembourg",
+ "letzebuerg",
+ "lu"
+ ]
},
"flag_lv": {
"unicode": "1F1F1-1F1FB",
@@ -5242,9 +10603,16 @@
"name": "latvia",
"shortname": ":flag_lv:",
"category": "flags",
- "aliases": [":lv:"],
+ "aliases": [
+ ":lv:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "latvija", "lv"]
+ "keywords": [
+ "country",
+ "nation",
+ "latvija",
+ "lv"
+ ]
},
"flag_ly": {
"unicode": "1F1F1-1F1FE",
@@ -5252,9 +10620,16 @@
"name": "libya",
"shortname": ":flag_ly:",
"category": "flags",
- "aliases": [":ly:"],
+ "aliases": [
+ ":ly:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "libiyah", "ly"]
+ "keywords": [
+ "country",
+ "nation",
+ "libiyah",
+ "ly"
+ ]
},
"flag_ma": {
"unicode": "1F1F2-1F1E6",
@@ -5262,9 +10637,16 @@
"name": "morocco",
"shortname": ":flag_ma:",
"category": "flags",
- "aliases": [":ma:"],
+ "aliases": [
+ ":ma:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "al maghrib", "ma"]
+ "keywords": [
+ "country",
+ "nation",
+ "al maghrib",
+ "ma"
+ ]
},
"flag_mc": {
"unicode": "1F1F2-1F1E8",
@@ -5272,9 +10654,15 @@
"name": "monaco",
"shortname": ":flag_mc:",
"category": "flags",
- "aliases": [":mc:"],
+ "aliases": [
+ ":mc:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mc"]
+ "keywords": [
+ "country",
+ "nation",
+ "mc"
+ ]
},
"flag_md": {
"unicode": "1F1F2-1F1E9",
@@ -5282,9 +10670,15 @@
"name": "moldova",
"shortname": ":flag_md:",
"category": "flags",
- "aliases": [":md:"],
+ "aliases": [
+ ":md:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "md"]
+ "keywords": [
+ "country",
+ "nation",
+ "md"
+ ]
},
"flag_me": {
"unicode": "1F1F2-1F1EA",
@@ -5292,9 +10686,28 @@
"name": "montenegro",
"shortname": ":flag_me:",
"category": "flags",
- "aliases": [":me:"],
+ "aliases": [
+ ":me:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "crna gora",
+ "me"
+ ]
+ },
+ "flag_mf": {
+ "unicode": "1F1F2-1F1EB",
+ "unicode_alternates": "",
+ "name": "saint martin",
+ "shortname": ":flag_mf:",
+ "category": "flags",
+ "aliases": [
+ ":mf:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "crna gora", "me"]
+ "keywords": []
},
"flag_mg": {
"unicode": "1F1F2-1F1EC",
@@ -5302,9 +10715,15 @@
"name": "madagascar",
"shortname": ":flag_mg:",
"category": "flags",
- "aliases": [":mg:"],
+ "aliases": [
+ ":mg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mg"]
+ "keywords": [
+ "country",
+ "nation",
+ "mg"
+ ]
},
"flag_mh": {
"unicode": "1F1F2-1F1ED",
@@ -5312,9 +10731,15 @@
"name": "the marshall islands",
"shortname": ":flag_mh:",
"category": "flags",
- "aliases": [":mh:"],
+ "aliases": [
+ ":mh:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mh"]
+ "keywords": [
+ "country",
+ "nation",
+ "mh"
+ ]
},
"flag_mk": {
"unicode": "1F1F2-1F1F0",
@@ -5322,9 +10747,15 @@
"name": "macedonia",
"shortname": ":flag_mk:",
"category": "flags",
- "aliases": [":mk:"],
+ "aliases": [
+ ":mk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mk"]
+ "keywords": [
+ "country",
+ "nation",
+ "mk"
+ ]
},
"flag_ml": {
"unicode": "1F1F2-1F1F1",
@@ -5332,9 +10763,15 @@
"name": "mali",
"shortname": ":flag_ml:",
"category": "flags",
- "aliases": [":ml:"],
+ "aliases": [
+ ":ml:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ml"]
+ "keywords": [
+ "country",
+ "nation",
+ "ml"
+ ]
},
"flag_mm": {
"unicode": "1F1F2-1F1F2",
@@ -5342,9 +10779,16 @@
"name": "myanmar",
"shortname": ":flag_mm:",
"category": "flags",
- "aliases": [":mm:"],
+ "aliases": [
+ ":mm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "myanma naingngandaw", "mm"]
+ "keywords": [
+ "country",
+ "nation",
+ "myanma naingngandaw",
+ "mm"
+ ]
},
"flag_mn": {
"unicode": "1F1F2-1F1F3",
@@ -5352,9 +10796,16 @@
"name": "mongolia",
"shortname": ":flag_mn:",
"category": "flags",
- "aliases": [":mn:"],
+ "aliases": [
+ ":mn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mongol uls", "mn"]
+ "keywords": [
+ "country",
+ "nation",
+ "mongol uls",
+ "mn"
+ ]
},
"flag_mo": {
"unicode": "1F1F2-1F1F4",
@@ -5362,9 +10813,40 @@
"name": "macau",
"shortname": ":flag_mo:",
"category": "flags",
- "aliases": [":mo:"],
+ "aliases": [
+ ":mo:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "aomen",
+ "mo"
+ ]
+ },
+ "flag_mp": {
+ "unicode": "1F1F2-1F1F5",
+ "unicode_alternates": "",
+ "name": "northern mariana islands",
+ "shortname": ":flag_mp:",
+ "category": "flags",
+ "aliases": [
+ ":mp:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "aomen", "mo"]
+ "keywords": []
+ },
+ "flag_mq": {
+ "unicode": "1F1F2-1F1F6",
+ "unicode_alternates": "",
+ "name": "martinique",
+ "shortname": ":flag_mq:",
+ "category": "flags",
+ "aliases": [
+ ":mq:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"flag_mr": {
"unicode": "1F1F2-1F1F7",
@@ -5372,9 +10854,16 @@
"name": "mauritania",
"shortname": ":flag_mr:",
"category": "flags",
- "aliases": [":mr:"],
+ "aliases": [
+ ":mr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "muritaniyah", "mr"]
+ "keywords": [
+ "country",
+ "nation",
+ "muritaniyah",
+ "mr"
+ ]
},
"flag_ms": {
"unicode": "1F1F2-1F1F8",
@@ -5382,9 +10871,15 @@
"name": "montserrat",
"shortname": ":flag_ms:",
"category": "flags",
- "aliases": [":ms:"],
+ "aliases": [
+ ":ms:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ms"]
+ "keywords": [
+ "country",
+ "nation",
+ "ms"
+ ]
},
"flag_mt": {
"unicode": "1F1F2-1F1F9",
@@ -5392,9 +10887,15 @@
"name": "malta",
"shortname": ":flag_mt:",
"category": "flags",
- "aliases": [":mt:"],
+ "aliases": [
+ ":mt:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mt"]
+ "keywords": [
+ "country",
+ "nation",
+ "mt"
+ ]
},
"flag_mu": {
"unicode": "1F1F2-1F1FA",
@@ -5402,9 +10903,15 @@
"name": "mauritius",
"shortname": ":flag_mu:",
"category": "flags",
- "aliases": [":mu:"],
+ "aliases": [
+ ":mu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mu"]
+ "keywords": [
+ "country",
+ "nation",
+ "mu"
+ ]
},
"flag_mv": {
"unicode": "1F1F2-1F1FB",
@@ -5412,9 +10919,16 @@
"name": "maldives",
"shortname": ":flag_mv:",
"category": "flags",
- "aliases": [":mv:"],
+ "aliases": [
+ ":mv:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "dhivehi raajje", "mv"]
+ "keywords": [
+ "country",
+ "nation",
+ "dhivehi raajje",
+ "mv"
+ ]
},
"flag_mw": {
"unicode": "1F1F2-1F1FC",
@@ -5422,9 +10936,15 @@
"name": "malawi",
"shortname": ":flag_mw:",
"category": "flags",
- "aliases": [":mw:"],
+ "aliases": [
+ ":mw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mw"]
+ "keywords": [
+ "country",
+ "nation",
+ "mw"
+ ]
},
"flag_mx": {
"unicode": "1F1F2-1F1FD",
@@ -5432,9 +10952,15 @@
"name": "mexico",
"shortname": ":flag_mx:",
"category": "flags",
- "aliases": [":mx:"],
+ "aliases": [
+ ":mx:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mx"]
+ "keywords": [
+ "country",
+ "nation",
+ "mx"
+ ]
},
"flag_my": {
"unicode": "1F1F2-1F1FE",
@@ -5442,9 +10968,15 @@
"name": "malaysia",
"shortname": ":flag_my:",
"category": "flags",
- "aliases": [":my:"],
+ "aliases": [
+ ":my:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "my"]
+ "keywords": [
+ "country",
+ "nation",
+ "my"
+ ]
},
"flag_mz": {
"unicode": "1F1F2-1F1FF",
@@ -5452,9 +10984,16 @@
"name": "mozambique",
"shortname": ":flag_mz:",
"category": "flags",
- "aliases": [":mz:"],
+ "aliases": [
+ ":mz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "mocambique", "mz"]
+ "keywords": [
+ "country",
+ "nation",
+ "mocambique",
+ "mz"
+ ]
},
"flag_na": {
"unicode": "1F1F3-1F1E6",
@@ -5462,9 +11001,15 @@
"name": "namibia",
"shortname": ":flag_na:",
"category": "flags",
- "aliases": [":na:"],
+ "aliases": [
+ ":na:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "na"]
+ "keywords": [
+ "country",
+ "nation",
+ "na"
+ ]
},
"flag_nc": {
"unicode": "1F1F3-1F1E8",
@@ -5472,9 +11017,18 @@
"name": "new caledonia",
"shortname": ":flag_nc:",
"category": "flags",
- "aliases": [":nc:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "nouvelle", "cal&eacute;donie", "caledonie", "nc"]
+ "aliases": [
+ ":nc:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "nouvelle",
+ "cal&eacute;donie",
+ "caledonie",
+ "nc"
+ ]
},
"flag_ne": {
"unicode": "1F1F3-1F1EA",
@@ -5482,9 +11036,27 @@
"name": "niger",
"shortname": ":flag_ne:",
"category": "flags",
- "aliases": [":ne:"],
+ "aliases": [
+ ":ne:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ne"
+ ]
+ },
+ "flag_nf": {
+ "unicode": "1F1F3-1F1EB",
+ "unicode_alternates": "",
+ "name": "norfolk island",
+ "shortname": ":flag_nf:",
+ "category": "flags",
+ "aliases": [
+ ":nf:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ne"]
+ "keywords": []
},
"flag_ng": {
"unicode": "1F1F3-1F1EC",
@@ -5492,9 +11064,15 @@
"name": "nigeria",
"shortname": ":flag_ng:",
"category": "flags",
- "aliases": [":nigeria:"],
+ "aliases": [
+ ":nigeria:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ng"]
+ "keywords": [
+ "country",
+ "nation",
+ "ng"
+ ]
},
"flag_ni": {
"unicode": "1F1F3-1F1EE",
@@ -5502,9 +11080,15 @@
"name": "nicaragua",
"shortname": ":flag_ni:",
"category": "flags",
- "aliases": [":ni:"],
+ "aliases": [
+ ":ni:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ni"]
+ "keywords": [
+ "country",
+ "nation",
+ "ni"
+ ]
},
"flag_nl": {
"unicode": "1F1F3-1F1F1",
@@ -5512,9 +11096,17 @@
"name": "the netherlands",
"shortname": ":flag_nl:",
"category": "flags",
- "aliases": [":nl:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "nederland", "holland", "nl"]
+ "aliases": [
+ ":nl:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "nederland",
+ "holland",
+ "nl"
+ ]
},
"flag_no": {
"unicode": "1F1F3-1F1F4",
@@ -5522,9 +11114,16 @@
"name": "norway",
"shortname": ":flag_no:",
"category": "flags",
- "aliases": [":no:"],
+ "aliases": [
+ ":no:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "norge", "no"]
+ "keywords": [
+ "country",
+ "nation",
+ "norge",
+ "no"
+ ]
},
"flag_np": {
"unicode": "1F1F3-1F1F5",
@@ -5532,9 +11131,15 @@
"name": "nepal",
"shortname": ":flag_np:",
"category": "flags",
- "aliases": [":np:"],
+ "aliases": [
+ ":np:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "np"]
+ "keywords": [
+ "country",
+ "nation",
+ "np"
+ ]
},
"flag_nr": {
"unicode": "1F1F3-1F1F7",
@@ -5542,9 +11147,15 @@
"name": "nauru",
"shortname": ":flag_nr:",
"category": "flags",
- "aliases": [":nr:"],
+ "aliases": [
+ ":nr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "nr"]
+ "keywords": [
+ "country",
+ "nation",
+ "nr"
+ ]
},
"flag_nu": {
"unicode": "1F1F3-1F1FA",
@@ -5552,9 +11163,15 @@
"name": "niue",
"shortname": ":flag_nu:",
"category": "flags",
- "aliases": [":nu:"],
+ "aliases": [
+ ":nu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "nu"]
+ "keywords": [
+ "country",
+ "nation",
+ "nu"
+ ]
},
"flag_nz": {
"unicode": "1F1F3-1F1FF",
@@ -5562,9 +11179,16 @@
"name": "new zealand",
"shortname": ":flag_nz:",
"category": "flags",
- "aliases": [":nz:"],
+ "aliases": [
+ ":nz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "aotearoa", "nz"]
+ "keywords": [
+ "country",
+ "nation",
+ "aotearoa",
+ "nz"
+ ]
},
"flag_om": {
"unicode": "1F1F4-1F1F2",
@@ -5572,9 +11196,16 @@
"name": "oman",
"shortname": ":flag_om:",
"category": "flags",
- "aliases": [":om:"],
+ "aliases": [
+ ":om:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "saltanat uman", "om"]
+ "keywords": [
+ "country",
+ "nation",
+ "saltanat uman",
+ "om"
+ ]
},
"flag_pa": {
"unicode": "1F1F5-1F1E6",
@@ -5582,9 +11213,15 @@
"name": "panama",
"shortname": ":flag_pa:",
"category": "flags",
- "aliases": [":pa:"],
+ "aliases": [
+ ":pa:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "pa"]
+ "keywords": [
+ "country",
+ "nation",
+ "pa"
+ ]
},
"flag_pe": {
"unicode": "1F1F5-1F1EA",
@@ -5592,9 +11229,15 @@
"name": "peru",
"shortname": ":flag_pe:",
"category": "flags",
- "aliases": [":pe:"],
+ "aliases": [
+ ":pe:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "pe"]
+ "keywords": [
+ "country",
+ "nation",
+ "pe"
+ ]
},
"flag_pf": {
"unicode": "1F1F5-1F1EB",
@@ -5602,9 +11245,17 @@
"name": "french polynesia",
"shortname": ":flag_pf:",
"category": "flags",
- "aliases": [":pf:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "polyn&eacute;sie fran&ccedil;aise", "polynesie francaise", "pf"]
+ "aliases": [
+ ":pf:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "polyn&eacute;sie fran&ccedil;aise",
+ "polynesie francaise",
+ "pf"
+ ]
},
"flag_pg": {
"unicode": "1F1F5-1F1EC",
@@ -5612,9 +11263,16 @@
"name": "papua new guinea",
"shortname": ":flag_pg:",
"category": "flags",
- "aliases": [":pg:"],
+ "aliases": [
+ ":pg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "papua niu gini", "pg"]
+ "keywords": [
+ "country",
+ "nation",
+ "papua niu gini",
+ "pg"
+ ]
},
"flag_ph": {
"unicode": "1F1F5-1F1ED",
@@ -5622,9 +11280,16 @@
"name": "the philippines",
"shortname": ":flag_ph:",
"category": "flags",
- "aliases": [":ph:"],
+ "aliases": [
+ ":ph:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "pilipinas", "ph"]
+ "keywords": [
+ "country",
+ "nation",
+ "pilipinas",
+ "ph"
+ ]
},
"flag_pk": {
"unicode": "1F1F5-1F1F0",
@@ -5632,9 +11297,15 @@
"name": "pakistan",
"shortname": ":flag_pk:",
"category": "flags",
- "aliases": [":pk:"],
+ "aliases": [
+ ":pk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "pk"]
+ "keywords": [
+ "country",
+ "nation",
+ "pk"
+ ]
},
"flag_pl": {
"unicode": "1F1F5-1F1F1",
@@ -5642,9 +11313,40 @@
"name": "poland",
"shortname": ":flag_pl:",
"category": "flags",
- "aliases": [":pl:"],
+ "aliases": [
+ ":pl:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "polska",
+ "pl"
+ ]
+ },
+ "flag_pm": {
+ "unicode": "1F1F5-1F1F2",
+ "unicode_alternates": "",
+ "name": "saint pierre and miquelon",
+ "shortname": ":flag_pm:",
+ "category": "flags",
+ "aliases": [
+ ":pm:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "flag_pn": {
+ "unicode": "1F1F5-1F1F3",
+ "unicode_alternates": "",
+ "name": "pitcairn",
+ "shortname": ":flag_pn:",
+ "category": "flags",
+ "aliases": [
+ ":pn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "polska", "pl"]
+ "keywords": []
},
"flag_pr": {
"unicode": "1F1F5-1F1F7",
@@ -5652,9 +11354,15 @@
"name": "puerto rico",
"shortname": ":flag_pr:",
"category": "flags",
- "aliases": [":pr:"],
+ "aliases": [
+ ":pr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "pr"]
+ "keywords": [
+ "country",
+ "nation",
+ "pr"
+ ]
},
"flag_ps": {
"unicode": "1F1F5-1F1F8",
@@ -5662,9 +11370,15 @@
"name": "palestinian authority",
"shortname": ":flag_ps:",
"category": "flags",
- "aliases": [":ps:"],
+ "aliases": [
+ ":ps:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ps"]
+ "keywords": [
+ "country",
+ "nation",
+ "ps"
+ ]
},
"flag_pt": {
"unicode": "1F1F5-1F1F9",
@@ -5672,9 +11386,15 @@
"name": "portugal",
"shortname": ":flag_pt:",
"category": "flags",
- "aliases": [":pt:"],
+ "aliases": [
+ ":pt:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "pt"]
+ "keywords": [
+ "country",
+ "nation",
+ "pt"
+ ]
},
"flag_pw": {
"unicode": "1F1F5-1F1FC",
@@ -5682,9 +11402,16 @@
"name": "palau",
"shortname": ":flag_pw:",
"category": "flags",
- "aliases": [":pw:"],
+ "aliases": [
+ ":pw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "belau", "pw"]
+ "keywords": [
+ "country",
+ "nation",
+ "belau",
+ "pw"
+ ]
},
"flag_py": {
"unicode": "1F1F5-1F1FE",
@@ -5692,9 +11419,15 @@
"name": "paraguay",
"shortname": ":flag_py:",
"category": "flags",
- "aliases": [":py:"],
+ "aliases": [
+ ":py:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "py"]
+ "keywords": [
+ "country",
+ "nation",
+ "py"
+ ]
},
"flag_qa": {
"unicode": "1F1F6-1F1E6",
@@ -5702,9 +11435,28 @@
"name": "qatar",
"shortname": ":flag_qa:",
"category": "flags",
- "aliases": [":qa:"],
+ "aliases": [
+ ":qa:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "dawlat qatar",
+ "qa"
+ ]
+ },
+ "flag_re": {
+ "unicode": "1F1F7-1F1EA",
+ "unicode_alternates": "",
+ "name": "réunion",
+ "shortname": ":flag_re:",
+ "category": "flags",
+ "aliases": [
+ ":re:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "dawlat qatar", "qa"]
+ "keywords": []
},
"flag_ro": {
"unicode": "1F1F7-1F1F4",
@@ -5712,9 +11464,15 @@
"name": "romania",
"shortname": ":flag_ro:",
"category": "flags",
- "aliases": [":ro:"],
+ "aliases": [
+ ":ro:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ro"]
+ "keywords": [
+ "country",
+ "nation",
+ "ro"
+ ]
},
"flag_rs": {
"unicode": "1F1F7-1F1F8",
@@ -5722,9 +11480,16 @@
"name": "serbia",
"shortname": ":flag_rs:",
"category": "flags",
- "aliases": [":rs:"],
+ "aliases": [
+ ":rs:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "srbija", "rs"]
+ "keywords": [
+ "country",
+ "nation",
+ "srbija",
+ "rs"
+ ]
},
"flag_ru": {
"unicode": "1F1F7-1F1FA",
@@ -5732,9 +11497,16 @@
"name": "russia",
"shortname": ":flag_ru:",
"category": "flags",
- "aliases": [":ru:"],
+ "aliases": [
+ ":ru:"
+ ],
"aliases_ascii": [],
- "keywords": ["nation", "russian", "country", "ru"]
+ "keywords": [
+ "nation",
+ "russian",
+ "country",
+ "ru"
+ ]
},
"flag_rw": {
"unicode": "1F1F7-1F1FC",
@@ -5742,9 +11514,15 @@
"name": "rwanda",
"shortname": ":flag_rw:",
"category": "flags",
- "aliases": [":rw:"],
+ "aliases": [
+ ":rw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "rw"]
+ "keywords": [
+ "country",
+ "nation",
+ "rw"
+ ]
},
"flag_sa": {
"unicode": "1F1F8-1F1E6",
@@ -5752,9 +11530,17 @@
"name": "saudi arabia",
"shortname": ":flag_sa:",
"category": "flags",
- "aliases": [":saudiarabia:", ":saudi:"],
- "aliases_ascii": [],
- "keywords": ["country", "nation", "al arabiyah as suudiyah", "sa"]
+ "aliases": [
+ ":saudiarabia:",
+ ":saudi:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "al arabiyah as suudiyah",
+ "sa"
+ ]
},
"flag_sb": {
"unicode": "1F1F8-1F1E7",
@@ -5762,9 +11548,15 @@
"name": "the solomon islands",
"shortname": ":flag_sb:",
"category": "flags",
- "aliases": [":sb:"],
+ "aliases": [
+ ":sb:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sb"]
+ "keywords": [
+ "country",
+ "nation",
+ "sb"
+ ]
},
"flag_sc": {
"unicode": "1F1F8-1F1E8",
@@ -5772,9 +11564,16 @@
"name": "the seychelles",
"shortname": ":flag_sc:",
"category": "flags",
- "aliases": [":sc:"],
+ "aliases": [
+ ":sc:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "seychelles", "sc"]
+ "keywords": [
+ "country",
+ "nation",
+ "seychelles",
+ "sc"
+ ]
},
"flag_sd": {
"unicode": "1F1F8-1F1E9",
@@ -5782,9 +11581,16 @@
"name": "sudan",
"shortname": ":flag_sd:",
"category": "flags",
- "aliases": [":sd:"],
+ "aliases": [
+ ":sd:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "as-sudan", "sd"]
+ "keywords": [
+ "country",
+ "nation",
+ "as-sudan",
+ "sd"
+ ]
},
"flag_se": {
"unicode": "1F1F8-1F1EA",
@@ -5792,9 +11598,16 @@
"name": "sweden",
"shortname": ":flag_se:",
"category": "flags",
- "aliases": [":se:"],
+ "aliases": [
+ ":se:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sverige", "se"]
+ "keywords": [
+ "country",
+ "nation",
+ "sverige",
+ "se"
+ ]
},
"flag_sg": {
"unicode": "1F1F8-1F1EC",
@@ -5802,9 +11615,15 @@
"name": "singapore",
"shortname": ":flag_sg:",
"category": "flags",
- "aliases": [":sg:"],
+ "aliases": [
+ ":sg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sg"]
+ "keywords": [
+ "country",
+ "nation",
+ "sg"
+ ]
},
"flag_sh": {
"unicode": "1F1F8-1F1ED",
@@ -5812,9 +11631,15 @@
"name": "saint helena",
"shortname": ":flag_sh:",
"category": "flags",
- "aliases": [":sh:"],
+ "aliases": [
+ ":sh:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sh"]
+ "keywords": [
+ "country",
+ "nation",
+ "sh"
+ ]
},
"flag_si": {
"unicode": "1F1F8-1F1EE",
@@ -5822,9 +11647,28 @@
"name": "slovenia",
"shortname": ":flag_si:",
"category": "flags",
- "aliases": [":si:"],
+ "aliases": [
+ ":si:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "slovenija",
+ "si"
+ ]
+ },
+ "flag_sj": {
+ "unicode": "1F1F8-1F1EF",
+ "unicode_alternates": "",
+ "name": "svalbard and jan mayen",
+ "shortname": ":flag_sj:",
+ "category": "flags",
+ "aliases": [
+ ":sj:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "slovenija", "si"]
+ "keywords": []
},
"flag_sk": {
"unicode": "1F1F8-1F1F0",
@@ -5832,9 +11676,15 @@
"name": "slovakia",
"shortname": ":flag_sk:",
"category": "flags",
- "aliases": [":sk:"],
+ "aliases": [
+ ":sk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sk"]
+ "keywords": [
+ "country",
+ "nation",
+ "sk"
+ ]
},
"flag_sl": {
"unicode": "1F1F8-1F1F1",
@@ -5842,9 +11692,15 @@
"name": "sierra leone",
"shortname": ":flag_sl:",
"category": "flags",
- "aliases": [":sl:"],
+ "aliases": [
+ ":sl:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sl"]
+ "keywords": [
+ "country",
+ "nation",
+ "sl"
+ ]
},
"flag_sm": {
"unicode": "1F1F8-1F1F2",
@@ -5852,9 +11708,15 @@
"name": "san marino",
"shortname": ":flag_sm:",
"category": "flags",
- "aliases": [":sm:"],
+ "aliases": [
+ ":sm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sm"]
+ "keywords": [
+ "country",
+ "nation",
+ "sm"
+ ]
},
"flag_sn": {
"unicode": "1F1F8-1F1F3",
@@ -5862,9 +11724,15 @@
"name": "senegal",
"shortname": ":flag_sn:",
"category": "flags",
- "aliases": [":sn:"],
+ "aliases": [
+ ":sn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sn"]
+ "keywords": [
+ "country",
+ "nation",
+ "sn"
+ ]
},
"flag_so": {
"unicode": "1F1F8-1F1F4",
@@ -5872,9 +11740,15 @@
"name": "somalia",
"shortname": ":flag_so:",
"category": "flags",
- "aliases": [":so:"],
+ "aliases": [
+ ":so:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "so"]
+ "keywords": [
+ "country",
+ "nation",
+ "so"
+ ]
},
"flag_sr": {
"unicode": "1F1F8-1F1F7",
@@ -5882,9 +11756,27 @@
"name": "suriname",
"shortname": ":flag_sr:",
"category": "flags",
- "aliases": [":sr:"],
+ "aliases": [
+ ":sr:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "sr"
+ ]
+ },
+ "flag_ss": {
+ "unicode": "1F1F8-1F1F8",
+ "unicode_alternates": "",
+ "name": "south sudan",
+ "shortname": ":flag_ss:",
+ "category": "flags",
+ "aliases": [
+ ":ss:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sr"]
+ "keywords": []
},
"flag_st": {
"unicode": "1F1F8-1F1F9",
@@ -5892,9 +11784,16 @@
"name": "sao tome and principe",
"shortname": ":flag_st:",
"category": "flags",
- "aliases": [":st:"],
+ "aliases": [
+ ":st:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sao tome e principe", "st"]
+ "keywords": [
+ "country",
+ "nation",
+ "sao tome e principe",
+ "st"
+ ]
},
"flag_sv": {
"unicode": "1F1F8-1F1FB",
@@ -5902,9 +11801,27 @@
"name": "el salvador",
"shortname": ":flag_sv:",
"category": "flags",
- "aliases": [":sv:"],
+ "aliases": [
+ ":sv:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "sv"
+ ]
+ },
+ "flag_sx": {
+ "unicode": "1F1F8-1F1FD",
+ "unicode_alternates": "",
+ "name": "sint maarten",
+ "shortname": ":flag_sx:",
+ "category": "flags",
+ "aliases": [
+ ":sx:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sv"]
+ "keywords": []
},
"flag_sy": {
"unicode": "1F1F8-1F1FE",
@@ -5912,9 +11829,15 @@
"name": "syria",
"shortname": ":flag_sy:",
"category": "flags",
- "aliases": [":sy:"],
+ "aliases": [
+ ":sy:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sy"]
+ "keywords": [
+ "country",
+ "nation",
+ "sy"
+ ]
},
"flag_sz": {
"unicode": "1F1F8-1F1FF",
@@ -5922,9 +11845,39 @@
"name": "swaziland",
"shortname": ":flag_sz:",
"category": "flags",
- "aliases": [":sz:"],
+ "aliases": [
+ ":sz:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "sz"
+ ]
+ },
+ "flag_ta": {
+ "unicode": "1F1F9-1F1E6",
+ "unicode_alternates": "",
+ "name": "tristan da cunha",
+ "shortname": ":flag_ta:",
+ "category": "flags",
+ "aliases": [
+ ":ta:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "sz"]
+ "keywords": []
+ },
+ "flag_tc": {
+ "unicode": "1F1F9-1F1E8",
+ "unicode_alternates": "",
+ "name": "turks and caicos islands",
+ "shortname": ":flag_tc:",
+ "category": "flags",
+ "aliases": [
+ ":tc:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"flag_td": {
"unicode": "1F1F9-1F1E9",
@@ -5932,9 +11885,28 @@
"name": "chad",
"shortname": ":flag_td:",
"category": "flags",
- "aliases": [":td:"],
+ "aliases": [
+ ":td:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "tchad",
+ "td"
+ ]
+ },
+ "flag_tf": {
+ "unicode": "1F1F9-1F1EB",
+ "unicode_alternates": "",
+ "name": "french southern territories",
+ "shortname": ":flag_tf:",
+ "category": "flags",
+ "aliases": [
+ ":tf:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tchad", "td"]
+ "keywords": []
},
"flag_tg": {
"unicode": "1F1F9-1F1EC",
@@ -5942,9 +11914,16 @@
"name": "togo",
"shortname": ":flag_tg:",
"category": "flags",
- "aliases": [":tg:"],
+ "aliases": [
+ ":tg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "republique togolaise", "tg"]
+ "keywords": [
+ "country",
+ "nation",
+ "republique togolaise",
+ "tg"
+ ]
},
"flag_th": {
"unicode": "1F1F9-1F1ED",
@@ -5952,9 +11931,16 @@
"name": "thailand",
"shortname": ":flag_th:",
"category": "flags",
- "aliases": [":th:"],
+ "aliases": [
+ ":th:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "prathet thai", "th"]
+ "keywords": [
+ "country",
+ "nation",
+ "prathet thai",
+ "th"
+ ]
},
"flag_tj": {
"unicode": "1F1F9-1F1EF",
@@ -5962,9 +11948,28 @@
"name": "tajikistan",
"shortname": ":flag_tj:",
"category": "flags",
- "aliases": [":tj:"],
+ "aliases": [
+ ":tj:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "jumhurii tojikiston",
+ "tj"
+ ]
+ },
+ "flag_tk": {
+ "unicode": "1F1F9-1F1F0",
+ "unicode_alternates": "",
+ "name": "tokelau",
+ "shortname": ":flag_tk:",
+ "category": "flags",
+ "aliases": [
+ ":tk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "jumhurii tojikiston", "tj"]
+ "keywords": []
},
"flag_tl": {
"unicode": "1F1F9-1F1F1",
@@ -5972,9 +11977,15 @@
"name": "east timor",
"shortname": ":flag_tl:",
"category": "flags",
- "aliases": [":tl:"],
+ "aliases": [
+ ":tl:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tl"]
+ "keywords": [
+ "country",
+ "nation",
+ "tl"
+ ]
},
"flag_tm": {
"unicode": "1F1F9-1F1F2",
@@ -5982,9 +11993,15 @@
"name": "turkmenistan",
"shortname": ":flag_tm:",
"category": "flags",
- "aliases": [":turkmenistan:"],
+ "aliases": [
+ ":turkmenistan:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tm"]
+ "keywords": [
+ "country",
+ "nation",
+ "tm"
+ ]
},
"flag_tn": {
"unicode": "1F1F9-1F1F3",
@@ -5992,9 +12009,16 @@
"name": "tunisia",
"shortname": ":flag_tn:",
"category": "flags",
- "aliases": [":tn:"],
+ "aliases": [
+ ":tn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tunis", "tn"]
+ "keywords": [
+ "country",
+ "nation",
+ "tunis",
+ "tn"
+ ]
},
"flag_to": {
"unicode": "1F1F9-1F1F4",
@@ -6002,9 +12026,15 @@
"name": "tonga",
"shortname": ":flag_to:",
"category": "flags",
- "aliases": [":to:"],
+ "aliases": [
+ ":to:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "to"]
+ "keywords": [
+ "country",
+ "nation",
+ "to"
+ ]
},
"flag_tr": {
"unicode": "1F1F9-1F1F7",
@@ -6012,9 +12042,15 @@
"name": "turkey",
"shortname": ":flag_tr:",
"category": "flags",
- "aliases": [":tr:"],
+ "aliases": [
+ ":tr:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "turkiye"]
+ "keywords": [
+ "country",
+ "nation",
+ "turkiye"
+ ]
},
"flag_tt": {
"unicode": "1F1F9-1F1F9",
@@ -6022,9 +12058,15 @@
"name": "trinidad and tobago",
"shortname": ":flag_tt:",
"category": "flags",
- "aliases": [":tt:"],
+ "aliases": [
+ ":tt:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tt"]
+ "keywords": [
+ "country",
+ "nation",
+ "tt"
+ ]
},
"flag_tv": {
"unicode": "1F1F9-1F1FB",
@@ -6032,9 +12074,15 @@
"name": "tuvalu",
"shortname": ":flag_tv:",
"category": "flags",
- "aliases": [":tuvalu:"],
+ "aliases": [
+ ":tuvalu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tv"]
+ "keywords": [
+ "country",
+ "nation",
+ "tv"
+ ]
},
"flag_tw": {
"unicode": "1F1F9-1F1FC",
@@ -6042,9 +12090,16 @@
"name": "the republic of china",
"shortname": ":flag_tw:",
"category": "flags",
- "aliases": [":tw:"],
+ "aliases": [
+ ":tw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "taiwan", "tw"]
+ "keywords": [
+ "country",
+ "nation",
+ "taiwan",
+ "tw"
+ ]
},
"flag_tz": {
"unicode": "1F1F9-1F1FF",
@@ -6052,9 +12107,15 @@
"name": "tanzania",
"shortname": ":flag_tz:",
"category": "flags",
- "aliases": [":tz:"],
+ "aliases": [
+ ":tz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "tz"]
+ "keywords": [
+ "country",
+ "nation",
+ "tz"
+ ]
},
"flag_ua": {
"unicode": "1F1FA-1F1E6",
@@ -6062,9 +12123,16 @@
"name": "ukraine",
"shortname": ":flag_ua:",
"category": "flags",
- "aliases": [":ua:"],
+ "aliases": [
+ ":ua:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ukrayina", "ua"]
+ "keywords": [
+ "country",
+ "nation",
+ "ukrayina",
+ "ua"
+ ]
},
"flag_ug": {
"unicode": "1F1FA-1F1EC",
@@ -6072,9 +12140,27 @@
"name": "uganda",
"shortname": ":flag_ug:",
"category": "flags",
- "aliases": [":ug:"],
+ "aliases": [
+ ":ug:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ug"
+ ]
+ },
+ "flag_um": {
+ "unicode": "1F1FA-1F1F2",
+ "unicode_alternates": "",
+ "name": "united states minor outlying islands",
+ "shortname": ":flag_um:",
+ "category": "flags",
+ "aliases": [
+ ":um:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ug"]
+ "keywords": []
},
"flag_us": {
"unicode": "1F1FA-1F1F8",
@@ -6082,9 +12168,20 @@
"name": "united states",
"shortname": ":flag_us:",
"category": "flags",
- "aliases": [":us:"],
- "aliases_ascii": [],
- "keywords": ["american", "country", "nation", "usa", "united states of america", "america", "old glory", "us"]
+ "aliases": [
+ ":us:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "american",
+ "country",
+ "nation",
+ "usa",
+ "united states of america",
+ "america",
+ "old glory",
+ "us"
+ ]
},
"flag_uy": {
"unicode": "1F1FA-1F1FE",
@@ -6092,9 +12189,15 @@
"name": "uruguay",
"shortname": ":flag_uy:",
"category": "flags",
- "aliases": [":uy:"],
+ "aliases": [
+ ":uy:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "uy"]
+ "keywords": [
+ "country",
+ "nation",
+ "uy"
+ ]
},
"flag_uz": {
"unicode": "1F1FA-1F1FF",
@@ -6102,9 +12205,16 @@
"name": "uzbekistan",
"shortname": ":flag_uz:",
"category": "flags",
- "aliases": [":uz:"],
+ "aliases": [
+ ":uz:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "uzbekiston respublikasi", "uz"]
+ "keywords": [
+ "country",
+ "nation",
+ "uzbekiston respublikasi",
+ "uz"
+ ]
},
"flag_va": {
"unicode": "1F1FB-1F1E6",
@@ -6112,9 +12222,15 @@
"name": "the vatican city",
"shortname": ":flag_va:",
"category": "flags",
- "aliases": [":va:"],
+ "aliases": [
+ ":va:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "va"]
+ "keywords": [
+ "country",
+ "nation",
+ "va"
+ ]
},
"flag_vc": {
"unicode": "1F1FB-1F1E8",
@@ -6122,9 +12238,15 @@
"name": "saint vincent and the grenadines",
"shortname": ":flag_vc:",
"category": "flags",
- "aliases": [":vc:"],
+ "aliases": [
+ ":vc:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "vc"]
+ "keywords": [
+ "country",
+ "nation",
+ "vc"
+ ]
},
"flag_ve": {
"unicode": "1F1FB-1F1EA",
@@ -6132,9 +12254,27 @@
"name": "venezuela",
"shortname": ":flag_ve:",
"category": "flags",
- "aliases": [":ve:"],
+ "aliases": [
+ ":ve:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "ve"
+ ]
+ },
+ "flag_vg": {
+ "unicode": "1F1FB-1F1EC",
+ "unicode_alternates": "",
+ "name": "british virgin islands",
+ "shortname": ":flag_vg:",
+ "category": "flags",
+ "aliases": [
+ ":vg:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "ve"]
+ "keywords": []
},
"flag_vi": {
"unicode": "1F1FB-1F1EE",
@@ -6142,9 +12282,15 @@
"name": "u.s. virgin islands",
"shortname": ":flag_vi:",
"category": "flags",
- "aliases": [":vi:"],
+ "aliases": [
+ ":vi:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "vi"]
+ "keywords": [
+ "country",
+ "nation",
+ "vi"
+ ]
},
"flag_vn": {
"unicode": "1F1FB-1F1F3",
@@ -6152,9 +12298,16 @@
"name": "vietnam",
"shortname": ":flag_vn:",
"category": "flags",
- "aliases": [":vn:"],
+ "aliases": [
+ ":vn:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "viet nam", "vn"]
+ "keywords": [
+ "country",
+ "nation",
+ "viet nam",
+ "vn"
+ ]
},
"flag_vu": {
"unicode": "1F1FB-1F1FA",
@@ -6162,9 +12315,15 @@
"name": "vanuatu",
"shortname": ":flag_vu:",
"category": "flags",
- "aliases": [":vu:"],
+ "aliases": [
+ ":vu:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "vu"]
+ "keywords": [
+ "country",
+ "nation",
+ "vu"
+ ]
},
"flag_wf": {
"unicode": "1F1FC-1F1EB",
@@ -6172,9 +12331,15 @@
"name": "wallis and futuna",
"shortname": ":flag_wf:",
"category": "flags",
- "aliases": [":wf:"],
+ "aliases": [
+ ":wf:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "wf"]
+ "keywords": [
+ "country",
+ "nation",
+ "wf"
+ ]
},
"flag_white": {
"unicode": "1F3F3",
@@ -6182,9 +12347,14 @@
"name": "waving white flag",
"shortname": ":flag_white:",
"category": "objects_symbols",
- "aliases": [":waving_white_flag:"],
+ "aliases": [
+ ":waving_white_flag:"
+ ],
"aliases_ascii": [],
- "keywords": ["symbol", "signal"]
+ "keywords": [
+ "symbol",
+ "signal"
+ ]
},
"flag_ws": {
"unicode": "1F1FC-1F1F8",
@@ -6192,9 +12362,16 @@
"name": "samoa",
"shortname": ":flag_ws:",
"category": "flags",
- "aliases": [":ws:"],
+ "aliases": [
+ ":ws:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "american samoa", "ws"]
+ "keywords": [
+ "country",
+ "nation",
+ "american samoa",
+ "ws"
+ ]
},
"flag_xk": {
"unicode": "1F1FD-1F1F0",
@@ -6202,9 +12379,15 @@
"name": "kosovo",
"shortname": ":flag_xk:",
"category": "flags",
- "aliases": [":xk:"],
+ "aliases": [
+ ":xk:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "xk"]
+ "keywords": [
+ "country",
+ "nation",
+ "xk"
+ ]
},
"flag_ye": {
"unicode": "1F1FE-1F1EA",
@@ -6212,9 +12395,28 @@
"name": "yemen",
"shortname": ":flag_ye:",
"category": "flags",
- "aliases": [":ye:"],
+ "aliases": [
+ ":ye:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "country",
+ "nation",
+ "al yaman",
+ "ye"
+ ]
+ },
+ "flag_yt": {
+ "unicode": "1F1FE-1F1F9",
+ "unicode_alternates": "",
+ "name": "mayotte",
+ "shortname": ":flag_yt:",
+ "category": "flags",
+ "aliases": [
+ ":yt:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "al yaman", "ye"]
+ "keywords": []
},
"flag_za": {
"unicode": "1F1FF-1F1E6",
@@ -6222,9 +12424,14 @@
"name": "south africa",
"shortname": ":flag_za:",
"category": "flags",
- "aliases": [":za:"],
+ "aliases": [
+ ":za:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation"]
+ "keywords": [
+ "country",
+ "nation"
+ ]
},
"flag_zm": {
"unicode": "1F1FF-1F1F2",
@@ -6232,9 +12439,15 @@
"name": "zambia",
"shortname": ":flag_zm:",
"category": "flags",
- "aliases": [":zm:"],
+ "aliases": [
+ ":zm:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "zm"]
+ "keywords": [
+ "country",
+ "nation",
+ "zm"
+ ]
},
"flag_zw": {
"unicode": "1F1FF-1F1FC",
@@ -6242,9 +12455,15 @@
"name": "zimbabwe",
"shortname": ":flag_zw:",
"category": "flags",
- "aliases": [":zw:"],
+ "aliases": [
+ ":zw:"
+ ],
"aliases_ascii": [],
- "keywords": ["country", "nation", "zw"]
+ "keywords": [
+ "country",
+ "nation",
+ "zw"
+ ]
},
"flags": {
"unicode": "1F38F",
@@ -6254,7 +12473,23 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["banner", "carp", "fish", "japanese", "koinobori", "children", "kids", "boys", "celebration", "happiness", "carp", "streamers", "japanese", "holiday", "flags"],
+ "keywords": [
+ "banner",
+ "carp",
+ "fish",
+ "japanese",
+ "koinobori",
+ "children",
+ "kids",
+ "boys",
+ "celebration",
+ "happiness",
+ "carp",
+ "streamers",
+ "japanese",
+ "holiday",
+ "flags"
+ ],
"moji": "🎏"
},
"flashlight": {
@@ -6265,18 +12500,36 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dark"],
+ "keywords": [
+ "dark"
+ ],
"moji": "🔦"
},
+ "fleur-de-lis": {
+ "unicode": "269C",
+ "unicode_alternates": "",
+ "name": "fleur-de-lis",
+ "shortname": ":fleur-de-lis:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "symbol"
+ ]
+ },
"flip_phone": {
"unicode": "1F581",
"unicode_alternates": [],
"name": "clamshell mobile phone",
"shortname": ":flip_phone:",
"category": "objects_symbols",
- "aliases": [":clamshell_mobile_phone:"],
+ "aliases": [
+ ":clamshell_mobile_phone:"
+ ],
"aliases_ascii": [],
- "keywords": ["cellphone"]
+ "keywords": [
+ "cellphone"
+ ]
},
"floppy_black": {
"unicode": "1F5AA",
@@ -6284,9 +12537,20 @@
"name": "black hard shell floppy disk",
"shortname": ":floppy_black:",
"category": "objects_symbols",
- "aliases": [":black_hard_shell_floppy_disk:"],
- "aliases_ascii": [],
- "keywords": ["oldschool", "save", "technology", "storage", "information", "computer", "drive", "megabyte"]
+ "aliases": [
+ ":black_hard_shell_floppy_disk:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "oldschool",
+ "save",
+ "technology",
+ "storage",
+ "information",
+ "computer",
+ "drive",
+ "megabyte"
+ ]
},
"floppy_disk": {
"unicode": "1F4BE",
@@ -6296,7 +12560,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["oldschool", "save", "technology", "floppy", "disk", "storage", "information", "computer", "drive", "megabyte"],
+ "keywords": [
+ "oldschool",
+ "save",
+ "technology",
+ "floppy",
+ "disk",
+ "storage",
+ "information",
+ "computer",
+ "drive",
+ "megabyte"
+ ],
"moji": "💾"
},
"floppy_white": {
@@ -6305,9 +12580,20 @@
"name": "white hard shell floppy disk",
"shortname": ":floppy_white:",
"category": "objects_symbols",
- "aliases": [":white_hard_shell_floppy_disk:"],
- "aliases_ascii": [],
- "keywords": ["oldschool", "save", "technology", "storage", "information", "computer", "drive", "megabyte"]
+ "aliases": [
+ ":white_hard_shell_floppy_disk:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "oldschool",
+ "save",
+ "technology",
+ "storage",
+ "information",
+ "computer",
+ "drive",
+ "megabyte"
+ ]
},
"flower_playing_cards": {
"unicode": "1F3B4",
@@ -6317,7 +12603,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["playing", "card", "flower", "game", "august", "moon", "special"],
+ "keywords": [
+ "playing",
+ "card",
+ "flower",
+ "game",
+ "august",
+ "moon",
+ "special"
+ ],
"moji": "🎴"
},
"flushed": {
@@ -6327,8 +12621,21 @@
"shortname": ":flushed:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":$", "=$"],
- "keywords": ["blush", "face", "flattered", "flush", "blush", "red", "pink", "cheeks", "shy"],
+ "aliases_ascii": [
+ ":$",
+ "=$"
+ ],
+ "keywords": [
+ "blush",
+ "face",
+ "flattered",
+ "flush",
+ "blush",
+ "red",
+ "pink",
+ "cheeks",
+ "shy"
+ ],
"moji": "😳"
},
"fog": {
@@ -6339,7 +12646,12 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["weather", "damp", "cloud", "hazy"]
+ "keywords": [
+ "weather",
+ "damp",
+ "cloud",
+ "hazy"
+ ]
},
"foggy": {
"unicode": "1F301",
@@ -6349,7 +12661,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mountain", "photo", "bridge", "weather", "fog", "foggy"],
+ "keywords": [
+ "mountain",
+ "photo",
+ "bridge",
+ "weather",
+ "fog",
+ "foggy"
+ ],
"moji": "🌁"
},
"folder": {
@@ -6360,7 +12679,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents"]
+ "keywords": [
+ "documents"
+ ]
},
"folder_open": {
"unicode": "1F5C1",
@@ -6368,9 +12689,14 @@
"name": "open folder",
"shortname": ":folder_open:",
"category": "objects_symbols",
- "aliases": [":open_folder:"],
+ "aliases": [
+ ":open_folder:"
+ ],
"aliases_ascii": [],
- "keywords": ["documents", "load"]
+ "keywords": [
+ "documents",
+ "load"
+ ]
},
"football": {
"unicode": "1F3C8",
@@ -6380,7 +12706,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["NFL", "balls", "sports", "football", "ball", "sport", "america", "american"],
+ "keywords": [
+ "NFL",
+ "balls",
+ "sports",
+ "football",
+ "ball",
+ "sport",
+ "america",
+ "american"
+ ],
"moji": "🏈"
},
"footprints": {
@@ -6391,7 +12726,9 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["feet"],
+ "keywords": [
+ "feet"
+ ],
"moji": "👣"
},
"fork_and_knife": {
@@ -6402,7 +12739,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cutlery", "kitchen", "fork", "knife", "restaurant", "meal", "food", "eat"],
+ "keywords": [
+ "cutlery",
+ "kitchen",
+ "fork",
+ "knife",
+ "restaurant",
+ "meal",
+ "food",
+ "eat"
+ ],
"moji": "🍴"
},
"fork_knife_plate": {
@@ -6411,31 +12757,51 @@
"name": "fork and knife with plate",
"shortname": ":fork_knife_plate:",
"category": "travel_places",
- "aliases": [":fork_and_knife_with_plate:"],
- "aliases_ascii": [],
- "keywords": ["meal", "food", "breakfast", "lunch", "dinner", "utensils", "setting"]
+ "aliases": [
+ ":fork_and_knife_with_plate:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "meal",
+ "food",
+ "breakfast",
+ "lunch",
+ "dinner",
+ "utensils",
+ "setting"
+ ]
},
"fountain": {
"unicode": "26F2",
- "unicode_alternates": ["26F2-FE0F"],
+ "unicode_alternates": [
+ "26F2-FE0F"
+ ],
"name": "fountain",
"shortname": ":fountain:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo"],
+ "keywords": [
+ "photo"
+ ],
"moji": "⛲"
},
"four": {
"moji": "4️⃣",
"unicode": "0034-20E3",
- "unicode_alternates": ["0034-FE0F-20E3"],
+ "unicode_alternates": [
+ "0034-FE0F-20E3"
+ ],
"name": "digit four",
"shortname": ":four:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["4", "blue-square", "numbers"]
+ "keywords": [
+ "4",
+ "blue-square",
+ "numbers"
+ ]
},
"four_leaf_clover": {
"unicode": "1F340",
@@ -6445,7 +12811,20 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["lucky", "nature", "plant", "vegetable", "clover", "four", "leaf", "luck", "irish", "saint", "patrick", "green"],
+ "keywords": [
+ "lucky",
+ "nature",
+ "plant",
+ "vegetable",
+ "clover",
+ "four",
+ "leaf",
+ "luck",
+ "irish",
+ "saint",
+ "patrick",
+ "green"
+ ],
"moji": "🍀"
},
"frame_photo": {
@@ -6454,9 +12833,13 @@
"name": "frame with picture",
"shortname": ":frame_photo:",
"category": "objects_symbols",
- "aliases": [":frame_with_picture:"],
+ "aliases": [
+ ":frame_with_picture:"
+ ],
"aliases_ascii": [],
- "keywords": ["photo"]
+ "keywords": [
+ "photo"
+ ]
},
"frame_tiles": {
"unicode": "1F5BD",
@@ -6464,9 +12847,14 @@
"name": "frame with tiles",
"shortname": ":frame_tiles:",
"category": "objects_symbols",
- "aliases": [":frame_with_tiles:"],
+ "aliases": [
+ ":frame_with_tiles:"
+ ],
"aliases_ascii": [],
- "keywords": ["photo", "painting"]
+ "keywords": [
+ "photo",
+ "painting"
+ ]
},
"frame_x": {
"unicode": "1F5BE",
@@ -6474,9 +12862,14 @@
"name": "frame with an x",
"shortname": ":frame_x:",
"category": "objects_symbols",
- "aliases": [":frame_with_an_x:"],
+ "aliases": [
+ ":frame_with_an_x:"
+ ],
"aliases_ascii": [],
- "keywords": ["photo", "painting"]
+ "keywords": [
+ "photo",
+ "painting"
+ ]
},
"free": {
"unicode": "1F193",
@@ -6486,7 +12879,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "words"],
+ "keywords": [
+ "blue-square",
+ "words"
+ ],
"moji": "🆓"
},
"fried_shrimp": {
@@ -6497,7 +12893,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "food", "shrimp", "fried", "seafood", "small", "fish"],
+ "keywords": [
+ "animal",
+ "food",
+ "shrimp",
+ "fried",
+ "seafood",
+ "small",
+ "fish"
+ ],
"moji": "🍤"
},
"fries": {
@@ -6508,7 +12912,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chips", "food", "fries", "french", "potato", "fry", "russet", "idaho"],
+ "keywords": [
+ "chips",
+ "food",
+ "fries",
+ "french",
+ "potato",
+ "fry",
+ "russet",
+ "idaho"
+ ],
"moji": "🍟"
},
"frog": {
@@ -6519,7 +12932,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐸"
},
"frowning": {
@@ -6528,20 +12944,50 @@
"name": "frowning face with open mouth",
"shortname": ":frowning:",
"category": "emoticons",
- "aliases": [":anguished:"],
- "aliases_ascii": [],
- "keywords": ["aw", "face", "frown", "sad", "pout", "sulk", "glower"],
+ "aliases": [
+ ":anguished:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "aw",
+ "face",
+ "frown",
+ "sad",
+ "pout",
+ "sulk",
+ "glower"
+ ],
"moji": "😦"
},
+ "frowning2": {
+ "unicode": "2639",
+ "unicode_alternates": "",
+ "name": "white frowning face",
+ "shortname": ":frowning2:",
+ "category": "people",
+ "aliases": [
+ ":white_frowning_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "frown",
+ "person"
+ ]
+ },
"fuelpump": {
"unicode": "26FD",
- "unicode_alternates": ["26FD-FE0F"],
+ "unicode_alternates": [
+ "26FD-FE0F"
+ ],
"name": "fuel pump",
"shortname": ":fuelpump:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["gas station", "petroleum"],
+ "keywords": [
+ "gas station",
+ "petroleum"
+ ],
"moji": "⛽"
},
"full_moon": {
@@ -6552,7 +12998,20 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "yellow", "moon", "full", "sky", "night", "cheese", "phase", "monster", "spooky", "werewolves", "twilight"],
+ "keywords": [
+ "nature",
+ "yellow",
+ "moon",
+ "full",
+ "sky",
+ "night",
+ "cheese",
+ "phase",
+ "monster",
+ "spooky",
+ "werewolves",
+ "twilight"
+ ],
"moji": "🌕"
},
"full_moon_with_face": {
@@ -6563,7 +13022,20 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "moon", "full", "anthropomorphic", "face", "sky", "night", "cheese", "phase", "spooky", "werewolves", "monsters"],
+ "keywords": [
+ "night",
+ "moon",
+ "full",
+ "anthropomorphic",
+ "face",
+ "sky",
+ "night",
+ "cheese",
+ "phase",
+ "spooky",
+ "werewolves",
+ "monsters"
+ ],
"moji": "🌝"
},
"game_die": {
@@ -6574,9 +13046,30 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dice", "game", "die", "dice", "craps", "gamble", "play"],
+ "keywords": [
+ "dice",
+ "game",
+ "die",
+ "dice",
+ "craps",
+ "gamble",
+ "play"
+ ],
"moji": "🎲"
},
+ "gear": {
+ "unicode": "2699",
+ "unicode_alternates": "",
+ "name": "gear",
+ "shortname": ":gear:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "object",
+ "tool"
+ ]
+ },
"gem": {
"unicode": "1F48E",
"unicode_alternates": [],
@@ -6585,18 +13078,35 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue", "ruby"],
+ "keywords": [
+ "blue",
+ "ruby"
+ ],
"moji": "💎"
},
"gemini": {
"unicode": "264A",
- "unicode_alternates": ["264A-FE0F"],
+ "unicode_alternates": [
+ "264A-FE0F"
+ ],
"name": "gemini",
"shortname": ":gemini:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["gemini", "twins", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "gemini",
+ "twins",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♊"
},
"ghost": {
@@ -6607,7 +13117,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["halloween"],
+ "keywords": [
+ "halloween"
+ ],
"moji": "👻"
},
"gift": {
@@ -6618,7 +13130,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["birthday", "christmas", "present", "xmas", "gift", "present", "wrap", "package", "birthday", "wedding"],
+ "keywords": [
+ "birthday",
+ "christmas",
+ "present",
+ "xmas",
+ "gift",
+ "present",
+ "wrap",
+ "package",
+ "birthday",
+ "wedding"
+ ],
"moji": "🎁"
},
"gift_heart": {
@@ -6629,7 +13152,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["love", "valentines"],
+ "keywords": [
+ "love",
+ "valentines"
+ ],
"moji": "💝"
},
"girl": {
@@ -6640,9 +13166,82 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "woman"],
+ "keywords": [
+ "female",
+ "woman"
+ ],
"moji": "👧"
},
+ "girl_tone1": {
+ "unicode": "1F467-1F3FB",
+ "unicode_alternates": "",
+ "name": "girl tone 1",
+ "shortname": ":girl_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "kid",
+ "child"
+ ]
+ },
+ "girl_tone2": {
+ "unicode": "1F467-1F3FC",
+ "unicode_alternates": "",
+ "name": "girl tone 2",
+ "shortname": ":girl_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "kid",
+ "child"
+ ]
+ },
+ "girl_tone3": {
+ "unicode": "1F467-1F3FD",
+ "unicode_alternates": "",
+ "name": "girl tone 3",
+ "shortname": ":girl_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "kid",
+ "child"
+ ]
+ },
+ "girl_tone4": {
+ "unicode": "1F467-1F3FE",
+ "unicode_alternates": "",
+ "name": "girl tone 4",
+ "shortname": ":girl_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "kid",
+ "child"
+ ]
+ },
+ "girl_tone5": {
+ "unicode": "1F467-1F3FF",
+ "unicode_alternates": "",
+ "name": "girl tone 5",
+ "shortname": ":girl_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "kid",
+ "child"
+ ]
+ },
"girls_symbol": {
"unicode": "1F6CA",
"unicode_alternates": [],
@@ -6651,7 +13250,10 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "child"]
+ "keywords": [
+ "female",
+ "child"
+ ]
},
"globe_with_meridians": {
"unicode": "1F310",
@@ -6661,7 +13263,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["earth", "international", "world", "earth", "meridian", "globe", "space", "planet", "home"],
+ "keywords": [
+ "earth",
+ "international",
+ "world",
+ "earth",
+ "meridian",
+ "globe",
+ "space",
+ "planet",
+ "home"
+ ],
"moji": "🌐"
},
"goat": {
@@ -6672,18 +13284,31 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "goat", "sheep", "kid", "billy", "livestock"],
+ "keywords": [
+ "animal",
+ "nature",
+ "goat",
+ "sheep",
+ "kid",
+ "billy",
+ "livestock"
+ ],
"moji": "🐐"
},
"golf": {
"unicode": "26F3",
- "unicode_alternates": ["26F3-FE0F"],
+ "unicode_alternates": [
+ "26F3-FE0F"
+ ],
"name": "flag in hole",
"shortname": ":golf:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["business", "sports"],
+ "keywords": [
+ "business",
+ "sports"
+ ],
"moji": "⛳"
},
"golfer": {
@@ -6694,7 +13319,13 @@
"category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sport", "par", "birdie", "eagle", "mulligan"]
+ "keywords": [
+ "sport",
+ "par",
+ "birdie",
+ "eagle",
+ "mulligan"
+ ]
},
"grapes": {
"unicode": "1F347",
@@ -6704,7 +13335,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "grapes", "wine", "vinegar", "fruit", "cluster", "vine"],
+ "keywords": [
+ "food",
+ "fruit",
+ "grapes",
+ "wine",
+ "vinegar",
+ "fruit",
+ "cluster",
+ "vine"
+ ],
"moji": "🍇"
},
"green_apple": {
@@ -6715,7 +13355,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fruit", "nature", "apple", "fruit", "green", "pie", "granny", "smith", "core"],
+ "keywords": [
+ "fruit",
+ "nature",
+ "apple",
+ "fruit",
+ "green",
+ "pie",
+ "granny",
+ "smith",
+ "core"
+ ],
"moji": "🍏"
},
"green_book": {
@@ -6726,7 +13376,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["knowledge", "library", "read"],
+ "keywords": [
+ "knowledge",
+ "library",
+ "read"
+ ],
"moji": "📗"
},
"green_heart": {
@@ -6737,7 +13391,22 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines", "green", "heart", "love", "nature", "rebirth", "reborn", "jealous", "clingy", "envious", "possessive"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines",
+ "green",
+ "heart",
+ "love",
+ "nature",
+ "rebirth",
+ "reborn",
+ "jealous",
+ "clingy",
+ "envious",
+ "possessive"
+ ],
"moji": "💚"
},
"grey_exclamation": {
@@ -6748,7 +13417,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["surprise"],
+ "keywords": [
+ "surprise"
+ ],
"moji": "❕"
},
"grey_question": {
@@ -6759,7 +13430,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["doubts"],
+ "keywords": [
+ "doubts"
+ ],
"moji": "❔"
},
"grimacing": {
@@ -6770,7 +13443,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "grimace", "teeth", "grimace", "disapprove", "pain"],
+ "keywords": [
+ "face",
+ "grimace",
+ "teeth",
+ "grimace",
+ "disapprove",
+ "pain"
+ ],
"moji": "😬"
},
"grin": {
@@ -6781,7 +13461,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "happy", "joy", "smile", "grin", "grinning", "smiling", "smile", "smiley"],
+ "keywords": [
+ "face",
+ "happy",
+ "joy",
+ "smile",
+ "grin",
+ "grinning",
+ "smiling",
+ "smile",
+ "smiley"
+ ],
"moji": "😁"
},
"grinning": {
@@ -6792,7 +13482,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "happy", "joy", "smile", "grin", "grinning", "smiling", "smile", "smiley"],
+ "keywords": [
+ "face",
+ "happy",
+ "joy",
+ "smile",
+ "grin",
+ "grinning",
+ "smiling",
+ "smile",
+ "smiley"
+ ],
"moji": "🕧"
},
"guardsman": {
@@ -6803,9 +13503,138 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["british", "gb", "male", "man", "uk", "guardsman", "guard", "bearskin", "hat", "british", "queen", "ceremonial", "military"],
+ "keywords": [
+ "british",
+ "gb",
+ "male",
+ "man",
+ "uk",
+ "guardsman",
+ "guard",
+ "bearskin",
+ "hat",
+ "british",
+ "queen",
+ "ceremonial",
+ "military"
+ ],
"moji": "💂"
},
+ "guardsman_tone1": {
+ "unicode": "1F482-1F3FB",
+ "unicode_alternates": "",
+ "name": "guardsman tone 1",
+ "shortname": ":guardsman_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "british",
+ "gb",
+ "male",
+ "man",
+ "uk",
+ "guard",
+ "bearskin",
+ "hat",
+ "british",
+ "queen",
+ "ceremonial",
+ "military"
+ ]
+ },
+ "guardsman_tone2": {
+ "unicode": "1F482-1F3FC",
+ "unicode_alternates": "",
+ "name": "guardsman tone 2",
+ "shortname": ":guardsman_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "british",
+ "gb",
+ "male",
+ "man",
+ "uk",
+ "guard",
+ "bearskin",
+ "hat",
+ "british",
+ "queen",
+ "ceremonial",
+ "military"
+ ]
+ },
+ "guardsman_tone3": {
+ "unicode": "1F482-1F3FD",
+ "unicode_alternates": "",
+ "name": "guardsman tone 3",
+ "shortname": ":guardsman_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "british",
+ "gb",
+ "male",
+ "man",
+ "uk",
+ "guard",
+ "bearskin",
+ "hat",
+ "british",
+ "queen",
+ "ceremonial",
+ "military"
+ ]
+ },
+ "guardsman_tone4": {
+ "unicode": "1F482-1F3FE",
+ "unicode_alternates": "",
+ "name": "guardsman tone 4",
+ "shortname": ":guardsman_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "british",
+ "gb",
+ "male",
+ "man",
+ "uk",
+ "guard",
+ "bearskin",
+ "hat",
+ "british",
+ "queen",
+ "ceremonial",
+ "military"
+ ]
+ },
+ "guardsman_tone5": {
+ "unicode": "1F482-1F3FF",
+ "unicode_alternates": "",
+ "name": "guardsman tone 5",
+ "shortname": ":guardsman_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "british",
+ "gb",
+ "male",
+ "man",
+ "uk",
+ "guard",
+ "bearskin",
+ "hat",
+ "british",
+ "queen",
+ "ceremonial",
+ "military"
+ ]
+ },
"guitar": {
"unicode": "1F3B8",
"unicode_alternates": [],
@@ -6814,7 +13643,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["instrument", "music", "guitar", "string", "music", "instrument", "jam", "rock", "acoustic", "electric"],
+ "keywords": [
+ "instrument",
+ "music",
+ "guitar",
+ "string",
+ "music",
+ "instrument",
+ "jam",
+ "rock",
+ "acoustic",
+ "electric"
+ ],
"moji": "🎸"
},
"gun": {
@@ -6825,7 +13665,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["violence", "weapon"],
+ "keywords": [
+ "violence",
+ "weapon"
+ ],
"moji": "🔫"
},
"haircut": {
@@ -6836,9 +13679,83 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ],
"moji": "💇"
},
+ "haircut_tone1": {
+ "unicode": "1F487-1F3FB",
+ "unicode_alternates": "",
+ "name": "haircut tone 1",
+ "shortname": ":haircut_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "haircut_tone2": {
+ "unicode": "1F487-1F3FC",
+ "unicode_alternates": "",
+ "name": "haircut tone 2",
+ "shortname": ":haircut_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "haircut_tone3": {
+ "unicode": "1F487-1F3FD",
+ "unicode_alternates": "",
+ "name": "haircut tone 3",
+ "shortname": ":haircut_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "haircut_tone4": {
+ "unicode": "1F487-1F3FE",
+ "unicode_alternates": "",
+ "name": "haircut tone 4",
+ "shortname": ":haircut_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "haircut_tone5": {
+ "unicode": "1F487-1F3FF",
+ "unicode_alternates": "",
+ "name": "haircut tone 5",
+ "shortname": ":haircut_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
"hamburger": {
"unicode": "1F354",
"unicode_alternates": [],
@@ -6847,7 +13764,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "meat", "hamburger", "burger", "meat", "cow", "beef"],
+ "keywords": [
+ "food",
+ "meat",
+ "hamburger",
+ "burger",
+ "meat",
+ "cow",
+ "beef"
+ ],
"moji": "🍔"
},
"hammer": {
@@ -6858,9 +13783,31 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["done", "judge", "law", "ruling", "tools", "verdict"],
+ "keywords": [
+ "done",
+ "judge",
+ "law",
+ "ruling",
+ "tools",
+ "verdict"
+ ],
"moji": "🔨"
},
+ "hammer_pick": {
+ "unicode": "2692",
+ "unicode_alternates": "",
+ "name": "hammer and pick",
+ "shortname": ":hammer_pick:",
+ "category": "objects",
+ "aliases": [
+ ":hammer_and_pick:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "object",
+ "tool"
+ ]
+ },
"hamster": {
"unicode": "1F439",
"unicode_alternates": [],
@@ -6869,7 +13816,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐹"
},
"hand_splayed": {
@@ -6878,9 +13828,16 @@
"name": "raised hand with fingers splayed",
"shortname": ":hand_splayed:",
"category": "people",
- "aliases": [":raised_hand_with_fingers_splayed:"],
+ "aliases": [
+ ":raised_hand_with_fingers_splayed:"
+ ],
"aliases_ascii": [],
- "keywords": ["hi", "five", "stop", "halt"]
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
},
"hand_splayed_reverse": {
"unicode": "1F591",
@@ -6888,9 +13845,101 @@
"name": "reversed raised hand with fingers splayed",
"shortname": ":hand_splayed_reverse:",
"category": "people",
- "aliases": [":reversed_raised_hand_with_fingers_splayed:"],
+ "aliases": [
+ ":reversed_raised_hand_with_fingers_splayed:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
+ },
+ "hand_splayed_tone1": {
+ "unicode": "1F590-1F3FB",
+ "unicode_alternates": "",
+ "name": "raised hand with fingers splayed tone 1",
+ "shortname": ":hand_splayed_tone1:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_fingers_splayed_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
+ },
+ "hand_splayed_tone2": {
+ "unicode": "1F590-1F3FC",
+ "unicode_alternates": "",
+ "name": "raised hand with fingers splayed tone 2",
+ "shortname": ":hand_splayed_tone2:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_fingers_splayed_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
+ },
+ "hand_splayed_tone3": {
+ "unicode": "1F590-1F3FD",
+ "unicode_alternates": "",
+ "name": "raised hand with fingers splayed tone 3",
+ "shortname": ":hand_splayed_tone3:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_fingers_splayed_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
+ },
+ "hand_splayed_tone4": {
+ "unicode": "1F590-1F3FE",
+ "unicode_alternates": "",
+ "name": "raised hand with fingers splayed tone 4",
+ "shortname": ":hand_splayed_tone4:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_fingers_splayed_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
+ },
+ "hand_splayed_tone5": {
+ "unicode": "1F590-1F3FF",
+ "unicode_alternates": "",
+ "name": "raised hand with fingers splayed tone 5",
+ "shortname": ":hand_splayed_tone5:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_fingers_splayed_tone5:"
+ ],
"aliases_ascii": [],
- "keywords": ["hi", "five", "stop", "halt"]
+ "keywords": [
+ "hi",
+ "five",
+ "stop",
+ "halt"
+ ]
},
"hand_victory": {
"unicode": "1F594",
@@ -6898,9 +13947,13 @@
"name": "reversed victory hand",
"shortname": ":hand_victory:",
"category": "people",
- "aliases": [":reversed_victory_hand:"],
+ "aliases": [
+ ":reversed_victory_hand:"
+ ],
"aliases_ascii": [],
- "keywords": ["fu"]
+ "keywords": [
+ "fu"
+ ]
},
"handbag": {
"unicode": "1F45C",
@@ -6910,7 +13963,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accessories", "accessory", "bag", "fashion"],
+ "keywords": [
+ "accessories",
+ "accessory",
+ "bag",
+ "fashion"
+ ],
"moji": "👜"
},
"hard_disk": {
@@ -6921,18 +13979,32 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["save", "technology", "storage", "information", "computer", "drive", "megabyte", "gigabyte", "hd"]
+ "keywords": [
+ "save",
+ "technology",
+ "storage",
+ "information",
+ "computer",
+ "drive",
+ "megabyte",
+ "gigabyte",
+ "hd"
+ ]
},
"hash": {
"moji": "#⃣",
"unicode": "0023-20E3",
- "unicode_alternates": ["0023-FE0F-20E3"],
+ "unicode_alternates": [
+ "0023-FE0F-20E3"
+ ],
"name": "number sign",
"shortname": ":hash:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["symbol"]
+ "keywords": [
+ "symbol"
+ ]
},
"hatched_chick": {
"unicode": "1F425",
@@ -6942,7 +14014,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["baby", "chicken", "chick", "baby", "bird", "chicken", "young", "woman", "cute"],
+ "keywords": [
+ "baby",
+ "chicken",
+ "chick",
+ "baby",
+ "bird",
+ "chicken",
+ "young",
+ "woman",
+ "cute"
+ ],
"moji": "🐥"
},
"hatching_chick": {
@@ -6953,9 +14035,33 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["born", "chicken", "egg", "chick", "egg", "baby", "bird", "chicken", "young", "woman", "cute"],
+ "keywords": [
+ "born",
+ "chicken",
+ "egg",
+ "chick",
+ "egg",
+ "baby",
+ "bird",
+ "chicken",
+ "young",
+ "woman",
+ "cute"
+ ],
"moji": "🐣"
},
+ "head_bandage": {
+ "unicode": "1F915",
+ "unicode_alternates": "",
+ "name": "face with head-bandage",
+ "shortname": ":head_bandage:",
+ "category": "people",
+ "aliases": [
+ ":face_with_head_bandage:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"headphones": {
"unicode": "1F3A7",
"unicode_alternates": [],
@@ -6964,7 +14070,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["gadgets", "music", "score", "headphone", "sound", "music", "ears", "beats", "buds", "audio", "listen"],
+ "keywords": [
+ "gadgets",
+ "music",
+ "score",
+ "headphone",
+ "sound",
+ "music",
+ "ears",
+ "beats",
+ "buds",
+ "audio",
+ "listen"
+ ],
"moji": "🎧"
},
"hear_no_evil": {
@@ -6975,19 +14093,47 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "monkey", "monkey", "ears", "hear", "sound", "kikazaru"],
+ "keywords": [
+ "animal",
+ "monkey",
+ "monkey",
+ "ears",
+ "hear",
+ "sound",
+ "kikazaru"
+ ],
"moji": "🙉"
},
"heart": {
"moji": "❤",
"unicode": "2764",
- "unicode_alternates": ["2764-FE0F"],
+ "unicode_alternates": [
+ "2764-FE0F"
+ ],
"name": "heavy black heart",
"shortname": ":heart:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["<3"],
- "keywords": ["like", "love", "red", "pink", "black", "heart", "love", "passion", "romance", "intense", "desire", "death", "evil", "cold", "valentines"]
+ "aliases_ascii": [
+ "<3"
+ ],
+ "keywords": [
+ "like",
+ "love",
+ "red",
+ "pink",
+ "black",
+ "heart",
+ "love",
+ "passion",
+ "romance",
+ "intense",
+ "desire",
+ "death",
+ "evil",
+ "cold",
+ "valentines"
+ ]
},
"heart_decoration": {
"unicode": "1F49F",
@@ -6997,9 +14143,29 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["like", "love", "purple-square"],
+ "keywords": [
+ "like",
+ "love",
+ "purple-square"
+ ],
"moji": "💟"
},
+ "heart_exclamation": {
+ "unicode": "2763",
+ "unicode_alternates": "",
+ "name": "heavy heart exclamation mark ornament",
+ "shortname": ":heart_exclamation:",
+ "category": "symbols",
+ "aliases": [
+ ":heavy_heart_exclamation_mark_ornament:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "emotion",
+ "punctuation",
+ "symbol"
+ ]
+ },
"heart_eyes": {
"unicode": "1F60D",
"unicode_alternates": [],
@@ -7008,7 +14174,22 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "crush", "face", "infatuation", "like", "love", "valentines", "smiling", "heart", "lovestruck", "love", "flirt", "smile", "heart-shaped"],
+ "keywords": [
+ "affection",
+ "crush",
+ "face",
+ "infatuation",
+ "like",
+ "love",
+ "valentines",
+ "smiling",
+ "heart",
+ "lovestruck",
+ "love",
+ "flirt",
+ "smile",
+ "heart-shaped"
+ ],
"moji": "😍"
},
"heart_eyes_cat": {
@@ -7019,7 +14200,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "animal", "cats", "like", "love", "valentines", "lovestruck", "love", "heart"],
+ "keywords": [
+ "affection",
+ "animal",
+ "cats",
+ "like",
+ "love",
+ "valentines",
+ "lovestruck",
+ "love",
+ "heart"
+ ],
"moji": "😻"
},
"heart_tip": {
@@ -7028,9 +14219,16 @@
"name": "heart with tip on the left",
"shortname": ":heart_tip:",
"category": "celebration",
- "aliases": [":heart_with_tip_on_the_left:"],
+ "aliases": [
+ ":heart_with_tip_on_the_left:"
+ ],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines"]
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines"
+ ]
},
"heartbeat": {
"unicode": "1F493",
@@ -7040,7 +14238,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines"
+ ],
"moji": "💓"
},
"heartpulse": {
@@ -7051,29 +14254,44 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines"
+ ],
"moji": "💗"
},
"hearts": {
"unicode": "2665",
- "unicode_alternates": ["2665-FE0F"],
+ "unicode_alternates": [
+ "2665-FE0F"
+ ],
"name": "black heart suit",
"shortname": ":hearts:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cards", "poker"],
+ "keywords": [
+ "cards",
+ "poker"
+ ],
"moji": "♥"
},
"heavy_check_mark": {
"unicode": "2714",
- "unicode_alternates": ["2714-FE0F"],
+ "unicode_alternates": [
+ "2714-FE0F"
+ ],
"name": "heavy check mark",
"shortname": ":heavy_check_mark:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nike", "ok"],
+ "keywords": [
+ "nike",
+ "ok"
+ ],
"moji": "✔"
},
"heavy_division_sign": {
@@ -7084,7 +14302,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["calculation", "divide", "math"],
+ "keywords": [
+ "calculation",
+ "divide",
+ "math"
+ ],
"moji": "➗"
},
"heavy_dollar_sign": {
@@ -7095,7 +14317,18 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["currency", "money", "payment", "dollar", "currency", "money", "cash", "sale", "purchase", "value"],
+ "keywords": [
+ "currency",
+ "money",
+ "payment",
+ "dollar",
+ "currency",
+ "money",
+ "cash",
+ "sale",
+ "purchase",
+ "value"
+ ],
"moji": "💲"
},
"heavy_minus_sign": {
@@ -7106,18 +14339,26 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["calculation", "math"],
+ "keywords": [
+ "calculation",
+ "math"
+ ],
"moji": "➖"
},
"heavy_multiplication_x": {
"unicode": "2716",
- "unicode_alternates": ["2716-FE0F"],
+ "unicode_alternates": [
+ "2716-FE0F"
+ ],
"name": "heavy multiplication x",
"shortname": ":heavy_multiplication_x:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["calculation", "math"],
+ "keywords": [
+ "calculation",
+ "math"
+ ],
"moji": "✖"
},
"heavy_plus_sign": {
@@ -7128,7 +14369,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["calculation", "math"],
+ "keywords": [
+ "calculation",
+ "math"
+ ],
"moji": "➕"
},
"helicopter": {
@@ -7139,9 +14383,33 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "helicopter", "helo", "gyro", "gyrocopter"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "helicopter",
+ "helo",
+ "gyro",
+ "gyrocopter"
+ ],
"moji": "🚁"
},
+ "helmet_with_cross": {
+ "unicode": "26D1",
+ "unicode_alternates": "",
+ "name": "helmet with white cross",
+ "shortname": ":helmet_with_cross:",
+ "category": "people",
+ "aliases": [
+ ":helmet_with_white_cross:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "aid",
+ "face",
+ "hat",
+ "person"
+ ]
+ },
"herb": {
"unicode": "1F33F",
"unicode_alternates": [],
@@ -7150,7 +14418,19 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["grass", "lawn", "medicine", "plant", "vegetable", "weed", "herb", "spice", "plant", "cook", "cooking"],
+ "keywords": [
+ "grass",
+ "lawn",
+ "medicine",
+ "plant",
+ "vegetable",
+ "weed",
+ "herb",
+ "spice",
+ "plant",
+ "cook",
+ "cooking"
+ ],
"moji": "🌿"
},
"hibiscus": {
@@ -7161,7 +14441,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flowers", "plant", "vegetable", "hibiscus", "flower", "warm"],
+ "keywords": [
+ "flowers",
+ "plant",
+ "vegetable",
+ "hibiscus",
+ "flower",
+ "warm"
+ ],
"moji": "🌺"
},
"high_brightness": {
@@ -7172,7 +14459,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["light", "summer", "sun"],
+ "keywords": [
+ "light",
+ "summer",
+ "sun"
+ ],
"moji": "🔆"
},
"high_heel": {
@@ -7183,9 +14474,23 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "female", "shoes"],
+ "keywords": [
+ "fashion",
+ "female",
+ "shoes"
+ ],
"moji": "👠"
},
+ "hockey": {
+ "unicode": "1F3D2",
+ "unicode_alternates": "",
+ "name": "ice hockey stick and puck",
+ "shortname": ":hockey:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"hole": {
"unicode": "1F573",
"unicode_alternates": [],
@@ -7194,7 +14499,10 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["pit", "well"]
+ "keywords": [
+ "pit",
+ "well"
+ ]
},
"homes": {
"unicode": "1F3D8",
@@ -7202,9 +14510,19 @@
"name": "house buildings",
"shortname": ":homes:",
"category": "travel_places",
- "aliases": [":house_buildings:"],
- "aliases_ascii": [],
- "keywords": ["home", "residence", "dwelling", "mansion", "bungalow", "ranch", "craftsman"]
+ "aliases": [
+ ":house_buildings:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "home",
+ "residence",
+ "dwelling",
+ "mansion",
+ "bungalow",
+ "ranch",
+ "craftsman"
+ ]
},
"honey_pot": {
"unicode": "1F36F",
@@ -7214,7 +14532,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bees", "sweet", "honey", "pot", "bees", "pooh", "bear"],
+ "keywords": [
+ "bees",
+ "sweet",
+ "honey",
+ "pot",
+ "bees",
+ "pooh",
+ "bear"
+ ],
"moji": "🍯"
},
"horse": {
@@ -7225,7 +14551,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "brown"],
+ "keywords": [
+ "animal",
+ "brown"
+ ],
"moji": "🐴"
},
"horse_racing": {
@@ -7236,9 +14565,103 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "betting", "competition", "horse", "race", "racing", "jockey", "triple crown"],
+ "keywords": [
+ "animal",
+ "betting",
+ "competition",
+ "horse",
+ "race",
+ "racing",
+ "jockey",
+ "triple crown"
+ ],
"moji": "🏇"
},
+ "horse_racing_tone1": {
+ "unicode": "1F3C7-1F3FB",
+ "unicode_alternates": "",
+ "name": "horse racing tone 1",
+ "shortname": ":horse_racing_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "animal",
+ "betting",
+ "competition",
+ "race",
+ "jockey",
+ "triple crown"
+ ]
+ },
+ "horse_racing_tone2": {
+ "unicode": "1F3C7-1F3FC",
+ "unicode_alternates": "",
+ "name": "horse racing tone 2",
+ "shortname": ":horse_racing_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "animal",
+ "betting",
+ "competition",
+ "race",
+ "jockey",
+ "triple crown"
+ ]
+ },
+ "horse_racing_tone3": {
+ "unicode": "1F3C7-1F3FD",
+ "unicode_alternates": "",
+ "name": "horse racing tone 3",
+ "shortname": ":horse_racing_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "animal",
+ "betting",
+ "competition",
+ "race",
+ "jockey",
+ "triple crown"
+ ]
+ },
+ "horse_racing_tone4": {
+ "unicode": "1F3C7-1F3FE",
+ "unicode_alternates": "",
+ "name": "horse racing tone 4",
+ "shortname": ":horse_racing_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "animal",
+ "betting",
+ "competition",
+ "race",
+ "jockey",
+ "triple crown"
+ ]
+ },
+ "horse_racing_tone5": {
+ "unicode": "1F3C7-1F3FF",
+ "unicode_alternates": "",
+ "name": "horse racing tone 5",
+ "shortname": ":horse_racing_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "animal",
+ "betting",
+ "competition",
+ "race",
+ "jockey",
+ "triple crown"
+ ]
+ },
"hospital": {
"unicode": "1F3E5",
"unicode_alternates": [],
@@ -7247,7 +14670,12 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "doctor", "health", "surgery"],
+ "keywords": [
+ "building",
+ "doctor",
+ "health",
+ "surgery"
+ ],
"moji": "🏥"
},
"hot_pepper": {
@@ -7258,7 +14686,27 @@
"category": "food_drink",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "nature", "spicy", "chili", "cayenne", "habanero", "jalapeno"]
+ "keywords": [
+ "food",
+ "nature",
+ "spicy",
+ "chili",
+ "cayenne",
+ "habanero",
+ "jalapeno"
+ ]
+ },
+ "hotdog": {
+ "unicode": "1F32D",
+ "unicode_alternates": "",
+ "name": "hot dog",
+ "shortname": ":hotdog:",
+ "category": "foods",
+ "aliases": [
+ ":hot_dog:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"hotel": {
"unicode": "1F3E8",
@@ -7268,29 +14716,50 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accomodation", "building", "checkin", "whotel", "hotel", "motel", "holiday inn", "hospital"],
+ "keywords": [
+ "accomodation",
+ "building",
+ "checkin",
+ "whotel",
+ "hotel",
+ "motel",
+ "holiday inn",
+ "hospital"
+ ],
"moji": "🏨"
},
"hotsprings": {
"unicode": "2668",
- "unicode_alternates": ["2668-FE0F"],
+ "unicode_alternates": [
+ "2668-FE0F"
+ ],
"name": "hot springs",
"shortname": ":hotsprings:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bath", "relax", "warm"],
+ "keywords": [
+ "bath",
+ "relax",
+ "warm"
+ ],
"moji": "♨"
},
"hourglass": {
"unicode": "231B",
- "unicode_alternates": ["231B-FE0F"],
+ "unicode_alternates": [
+ "231B-FE0F"
+ ],
"name": "hourglass",
"shortname": ":hourglass:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clock", "oldschool", "time"],
+ "keywords": [
+ "clock",
+ "oldschool",
+ "time"
+ ],
"moji": "⌛"
},
"hourglass_flowing_sand": {
@@ -7301,7 +14770,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["countdown", "oldschool", "time"],
+ "keywords": [
+ "countdown",
+ "oldschool",
+ "time"
+ ],
"moji": "⏳"
},
"house": {
@@ -7312,7 +14785,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "home", "house", "home", "residence", "dwelling", "mansion", "bungalow", "ranch", "craftsman"],
+ "keywords": [
+ "building",
+ "home",
+ "house",
+ "home",
+ "residence",
+ "dwelling",
+ "mansion",
+ "bungalow",
+ "ranch",
+ "craftsman"
+ ],
"moji": "🏠"
},
"house_abandoned": {
@@ -7321,9 +14805,24 @@
"name": "derelict house building",
"shortname": ":house_abandoned:",
"category": "travel_places",
- "aliases": [":derelict_house_building:"],
- "aliases_ascii": [],
- "keywords": ["home", "residence", "dwelling", "mansion", "bungalow", "ranch", "craftsman", "boarded", "abandoned", "vacant", "run down", "shoddy"]
+ "aliases": [
+ ":derelict_house_building:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "home",
+ "residence",
+ "dwelling",
+ "mansion",
+ "bungalow",
+ "ranch",
+ "craftsman",
+ "boarded",
+ "abandoned",
+ "vacant",
+ "run down",
+ "shoddy"
+ ]
},
"house_with_garden": {
"unicode": "1F3E1",
@@ -7333,9 +14832,25 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["home", "nature", "plant"],
+ "keywords": [
+ "home",
+ "nature",
+ "plant"
+ ],
"moji": "🏡"
},
+ "hugging": {
+ "unicode": "1F917",
+ "unicode_alternates": "",
+ "name": "hugging face",
+ "shortname": ":hugging:",
+ "category": "people",
+ "aliases": [
+ ":hugging_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"hushed": {
"unicode": "1F62F",
"unicode_alternates": [],
@@ -7344,7 +14859,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "woo", "quiet", "hush", "whisper", "silent"],
+ "keywords": [
+ "face",
+ "woo",
+ "quiet",
+ "hush",
+ "whisper",
+ "silent"
+ ],
"moji": "😯"
},
"ice_cream": {
@@ -7355,9 +14877,37 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "food", "hot", "icecream", "ice", "cream", "dairy", "dessert", "cold", "soft", "serve", "cone", "waffle"],
+ "keywords": [
+ "desert",
+ "food",
+ "hot",
+ "icecream",
+ "ice",
+ "cream",
+ "dairy",
+ "dessert",
+ "cold",
+ "soft",
+ "serve",
+ "cone",
+ "waffle"
+ ],
"moji": "🍨"
},
+ "ice_skate": {
+ "unicode": "26F8",
+ "unicode_alternates": "",
+ "name": "ice skate",
+ "shortname": ":ice_skate:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "place",
+ "sport",
+ "travel"
+ ]
+ },
"icecream": {
"unicode": "1F366",
"unicode_alternates": [],
@@ -7366,9 +14916,39 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "food", "hot", "icecream", "ice", "cream", "dairy", "dessert", "cold", "soft", "serve", "cone", "yogurt"],
+ "keywords": [
+ "desert",
+ "food",
+ "hot",
+ "icecream",
+ "ice",
+ "cream",
+ "dairy",
+ "dessert",
+ "cold",
+ "soft",
+ "serve",
+ "cone",
+ "yogurt"
+ ],
"moji": "🍦"
},
+ "id": {
+ "unicode": "1F194",
+ "unicode_alternates": "",
+ "name": "squared id",
+ "shortname": ":id:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "purple-square",
+ "identification",
+ "identity",
+ "symbol",
+ "word"
+ ]
+ },
"ideograph_advantage": {
"unicode": "1F250",
"unicode_alternates": [],
@@ -7377,7 +14957,12 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "get", "kanji", "obtain"],
+ "keywords": [
+ "chinese",
+ "get",
+ "kanji",
+ "obtain"
+ ],
"moji": "🉐"
},
"imp": {
@@ -7388,7 +14973,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["angry", "devil", "evil", "horns", "cute", "devil"],
+ "keywords": [
+ "angry",
+ "devil",
+ "evil",
+ "horns",
+ "cute",
+ "devil"
+ ],
"moji": "👿"
},
"inbox_tray": {
@@ -7399,7 +14991,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents", "email"],
+ "keywords": [
+ "documents",
+ "email"
+ ],
"moji": "📥"
},
"incoming_envelope": {
@@ -7410,7 +15005,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["email", "inbox"],
+ "keywords": [
+ "email",
+ "inbox"
+ ],
"moji": "📨"
},
"info": {
@@ -7419,9 +15017,13 @@
"name": "circled information source",
"shortname": ":info:",
"category": "objects_symbols",
- "aliases": [":circled_information_source:"],
+ "aliases": [
+ ":circled_information_source:"
+ ],
"aliases_ascii": [],
- "keywords": ["icon"]
+ "keywords": [
+ "icon"
+ ]
},
"information_desk_person": {
"unicode": "1F481",
@@ -7431,18 +15033,147 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "human", "woman", "information", "help", "question", "answer", "sassy", "unimpressed", "attitude", "snarky"],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "woman",
+ "information",
+ "help",
+ "question",
+ "answer",
+ "sassy",
+ "unimpressed",
+ "attitude",
+ "snarky"
+ ],
"moji": "💁"
},
+ "information_desk_person_tone1": {
+ "unicode": "1F481-1F3FB",
+ "unicode_alternates": "",
+ "name": "information desk person tone 1",
+ "shortname": ":information_desk_person_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "woman",
+ "help",
+ "question",
+ "answer",
+ "sassy",
+ "unimpressed",
+ "attitude",
+ "snarky"
+ ]
+ },
+ "information_desk_person_tone2": {
+ "unicode": "1F481-1F3FC",
+ "unicode_alternates": "",
+ "name": "information desk person tone 2",
+ "shortname": ":information_desk_person_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "woman",
+ "help",
+ "question",
+ "answer",
+ "sassy",
+ "unimpressed",
+ "attitude",
+ "snarky"
+ ]
+ },
+ "information_desk_person_tone3": {
+ "unicode": "1F481-1F3FD",
+ "unicode_alternates": "",
+ "name": "information desk person tone 3",
+ "shortname": ":information_desk_person_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "woman",
+ "help",
+ "question",
+ "answer",
+ "sassy",
+ "unimpressed",
+ "attitude",
+ "snarky"
+ ]
+ },
+ "information_desk_person_tone4": {
+ "unicode": "1F481-1F3FE",
+ "unicode_alternates": "",
+ "name": "information desk person tone 4",
+ "shortname": ":information_desk_person_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "woman",
+ "help",
+ "question",
+ "answer",
+ "sassy",
+ "unimpressed",
+ "attitude",
+ "snarky"
+ ]
+ },
+ "information_desk_person_tone5": {
+ "unicode": "1F481-1F3FF",
+ "unicode_alternates": "",
+ "name": "information desk person tone 5",
+ "shortname": ":information_desk_person_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "woman",
+ "help",
+ "question",
+ "answer",
+ "sassy",
+ "unimpressed",
+ "attitude",
+ "snarky"
+ ]
+ },
"information_source": {
"unicode": "2139",
- "unicode_alternates": ["2139-FE0F"],
+ "unicode_alternates": [
+ "2139-FE0F"
+ ],
"name": "information source",
"shortname": ":information_source:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "blue-square", "letter"],
+ "keywords": [
+ "alphabet",
+ "blue-square",
+ "letter"
+ ],
"moji": "ℹ"
},
"innocent": {
@@ -7452,19 +15183,49 @@
"shortname": ":innocent:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["O:-)", "0:-3", "0:3", "0:-)", "0:)", "0;^)", "O:-)", "O:)", "O;-)", "O=)", "0;-)", "O:-3", "O:3"],
- "keywords": ["angel", "face", "halo", "halo", "angel", "innocent", "ring", "circle", "heaven"],
+ "aliases_ascii": [
+ "O:-)",
+ "0:-3",
+ "0:3",
+ "0:-)",
+ "0:)",
+ "0;^)",
+ "O:-)",
+ "O:)",
+ "O;-)",
+ "O=)",
+ "0;-)",
+ "O:-3",
+ "O:3"
+ ],
+ "keywords": [
+ "angel",
+ "face",
+ "halo",
+ "halo",
+ "angel",
+ "innocent",
+ "ring",
+ "circle",
+ "heaven"
+ ],
"moji": "😇"
},
"interrobang": {
"unicode": "2049",
- "unicode_alternates": ["2049-FE0F"],
+ "unicode_alternates": [
+ "2049-FE0F"
+ ],
"name": "exclamation question mark",
"shortname": ":interrobang:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["punctuation", "surprise", "wat"],
+ "keywords": [
+ "punctuation",
+ "surprise",
+ "wat"
+ ],
"moji": "⁉"
},
"iphone": {
@@ -7475,7 +15236,12 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["apple", "dial", "gadgets", "technology"],
+ "keywords": [
+ "apple",
+ "dial",
+ "gadgets",
+ "technology"
+ ],
"moji": "📱"
},
"island": {
@@ -7484,9 +15250,15 @@
"name": "desert island",
"shortname": ":island:",
"category": "travel_places",
- "aliases": [":desert_island:"],
+ "aliases": [
+ ":desert_island:"
+ ],
"aliases_ascii": [],
- "keywords": ["land", "solitude", "alone"]
+ "keywords": [
+ "land",
+ "solitude",
+ "alone"
+ ]
},
"izakaya_lantern": {
"unicode": "1F3EE",
@@ -7496,7 +15268,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["light", "izakaya", "lantern", "stay", "drink", "alcohol", "bar", "sake", "restaurant"],
+ "keywords": [
+ "light",
+ "izakaya",
+ "lantern",
+ "stay",
+ "drink",
+ "alcohol",
+ "bar",
+ "sake",
+ "restaurant"
+ ],
"moji": "🏮"
},
"jack_o_lantern": {
@@ -7507,7 +15289,24 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["halloween", "jack-o-lantern", "pumpkin", "halloween", "holiday", "carve", "autumn", "fall", "october", "saints", "costume", "spooky", "horror", "scary", "scared", "dead"],
+ "keywords": [
+ "halloween",
+ "jack-o-lantern",
+ "pumpkin",
+ "halloween",
+ "holiday",
+ "carve",
+ "autumn",
+ "fall",
+ "october",
+ "saints",
+ "costume",
+ "spooky",
+ "horror",
+ "scary",
+ "scared",
+ "dead"
+ ],
"moji": "🎃"
},
"japan": {
@@ -7518,7 +15317,9 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nation"],
+ "keywords": [
+ "nation"
+ ],
"moji": "🗾"
},
"japanese_castle": {
@@ -7529,7 +15330,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "photo", "castle", "japanese", "residence", "royalty", "fort", "fortified", "fortress"],
+ "keywords": [
+ "building",
+ "photo",
+ "castle",
+ "japanese",
+ "residence",
+ "royalty",
+ "fort",
+ "fortified",
+ "fortress"
+ ],
"moji": "🏯"
},
"japanese_goblin": {
@@ -7540,7 +15351,24 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["evil", "mask", "red", "japanese", "tengu", "supernatural", "avian", "demon", "goblin", "mask", "theater", "nose", "frown", "mustache", "anger", "frustration"],
+ "keywords": [
+ "evil",
+ "mask",
+ "red",
+ "japanese",
+ "tengu",
+ "supernatural",
+ "avian",
+ "demon",
+ "goblin",
+ "mask",
+ "theater",
+ "nose",
+ "frown",
+ "mustache",
+ "anger",
+ "frustration"
+ ],
"moji": "👺"
},
"japanese_ogre": {
@@ -7551,7 +15379,21 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["monster", "japanese", "oni", "demon", "troll", "ogre", "folklore", "monster", "devil", "mask", "theater", "horns", "teeth"],
+ "keywords": [
+ "monster",
+ "japanese",
+ "oni",
+ "demon",
+ "troll",
+ "ogre",
+ "folklore",
+ "monster",
+ "devil",
+ "mask",
+ "theater",
+ "horns",
+ "teeth"
+ ],
"moji": "👹"
},
"jeans": {
@@ -7562,7 +15404,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "shopping", "jeans", "pants", "blue", "denim", "levi&#039;s", "levi", "designer", "work", "skinny"],
+ "keywords": [
+ "fashion",
+ "shopping",
+ "jeans",
+ "pants",
+ "blue",
+ "denim",
+ "levi&#039;s",
+ "levi",
+ "designer",
+ "work",
+ "skinny"
+ ],
"moji": "👖"
},
"jet_up": {
@@ -7571,9 +15425,13 @@
"name": "up-pointing military airplane",
"shortname": ":jet_up:",
"category": "travel_places",
- "aliases": [":up_pointing_military_airplane:"],
+ "aliases": [
+ ":up_pointing_military_airplane:"
+ ],
"aliases_ascii": [],
- "keywords": ["jet"]
+ "keywords": [
+ "jet"
+ ]
},
"joy": {
"unicode": "1F602",
@@ -7582,8 +15440,22 @@
"shortname": ":joy:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":')", ":'-)"],
- "keywords": ["cry", "face", "haha", "happy", "tears", "tears", "cry", "joy", "happy", "weep"],
+ "aliases_ascii": [
+ ":')",
+ ":'-)"
+ ],
+ "keywords": [
+ "cry",
+ "face",
+ "haha",
+ "happy",
+ "tears",
+ "tears",
+ "cry",
+ "joy",
+ "happy",
+ "weep"
+ ],
"moji": "😂"
},
"joy_cat": {
@@ -7594,7 +15466,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "haha", "happy", "tears", "happy", "tears", "cry", "joy"],
+ "keywords": [
+ "animal",
+ "cats",
+ "haha",
+ "happy",
+ "tears",
+ "happy",
+ "tears",
+ "cry",
+ "joy"
+ ],
"moji": "😹"
},
"joystick": {
@@ -7605,7 +15487,21 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["games", "atari", "controller"]
+ "keywords": [
+ "games",
+ "atari",
+ "controller"
+ ]
+ },
+ "kaaba": {
+ "unicode": "1F54B",
+ "unicode_alternates": "",
+ "name": "kaaba",
+ "shortname": ":kaaba:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
},
"key": {
"unicode": "1F511",
@@ -7615,7 +15511,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["door", "lock", "password"],
+ "keywords": [
+ "door",
+ "lock",
+ "password"
+ ],
"moji": "🔑"
},
"key2": {
@@ -7624,9 +15524,16 @@
"name": "old key",
"shortname": ":key2:",
"category": "objects_symbols",
- "aliases": [":old_key:"],
+ "aliases": [
+ ":old_key:"
+ ],
"aliases_ascii": [],
- "keywords": ["door", "lock", "password", "skeleton"]
+ "keywords": [
+ "door",
+ "lock",
+ "password",
+ "skeleton"
+ ]
},
"keyboard": {
"unicode": "1F5AE",
@@ -7634,9 +15541,16 @@
"name": "wired keyboard",
"shortname": ":keyboard:",
"category": "objects_symbols",
- "aliases": [":wired_keyboard:"],
+ "aliases": [
+ ":wired_keyboard:"
+ ],
"aliases_ascii": [],
- "keywords": ["typing", "keys", "input", "device"]
+ "keywords": [
+ "typing",
+ "keys",
+ "input",
+ "device"
+ ]
},
"keyboard_mouse": {
"unicode": "1F5A6",
@@ -7644,9 +15558,15 @@
"name": "keyboard and mouse",
"shortname": ":keyboard_mouse:",
"category": "objects_symbols",
- "aliases": [":keyboard_and_mouse:"],
+ "aliases": [
+ ":keyboard_and_mouse:"
+ ],
"aliases_ascii": [],
- "keywords": ["computer", "input", "desktop"]
+ "keywords": [
+ "computer",
+ "input",
+ "desktop"
+ ]
},
"keyboard_with_jacks": {
"unicode": "1F398",
@@ -7654,9 +15574,15 @@
"name": "musical keyboard with jacks",
"shortname": ":keyboard_with_jacks:",
"category": "objects_symbols",
- "aliases": [":musical_keyboard_with_jacks:"],
+ "aliases": [
+ ":musical_keyboard_with_jacks:"
+ ],
"aliases_ascii": [],
- "keywords": ["music", "instrument", "midi"]
+ "keywords": [
+ "music",
+ "instrument",
+ "midi"
+ ]
},
"keycap_ten": {
"unicode": "1F51F",
@@ -7666,7 +15592,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["10", "blue-square", "numbers"],
+ "keywords": [
+ "10",
+ "blue-square",
+ "numbers"
+ ],
"moji": "🔟"
},
"kimono": {
@@ -7677,7 +15607,13 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["dress", "fashion", "female", "japanese", "women"],
+ "keywords": [
+ "dress",
+ "fashion",
+ "female",
+ "japanese",
+ "women"
+ ],
"moji": "👘"
},
"kiss": {
@@ -7688,28 +15624,57 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "face", "like", "lips", "love", "valentines"],
+ "keywords": [
+ "affection",
+ "face",
+ "like",
+ "lips",
+ "love",
+ "valentines"
+ ],
"moji": "💋"
},
"kiss_mm": {
"unicode": "1F468-2764-1F48B-1F468",
- "unicode_alternates": ["1F468-200D-2764-FE0F-200D-1F48B-200D-1F468"],
+ "unicode_alternates": [
+ "1F468-200D-2764-FE0F-200D-1F48B-200D-1F468"
+ ],
"name": "kiss (man,man)",
"shortname": ":kiss_mm:",
"category": "people",
- "aliases": [":couplekiss_mm:"],
- "aliases_ascii": [],
- "keywords": ["dating", "like", "love", "marriage", "valentines", "couple"]
+ "aliases": [
+ ":couplekiss_mm:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "dating",
+ "like",
+ "love",
+ "marriage",
+ "valentines",
+ "couple"
+ ]
},
"kiss_ww": {
"unicode": "1F469-2764-1F48B-1F469",
- "unicode_alternates": ["1F469-200D-2764-FE0F-200D-1F48B-200D-1F469"],
+ "unicode_alternates": [
+ "1F469-200D-2764-FE0F-200D-1F48B-200D-1F469"
+ ],
"name": "kiss (woman,woman)",
"shortname": ":kiss_ww:",
"category": "people",
- "aliases": [":couplekiss_ww:"],
- "aliases_ascii": [],
- "keywords": ["dating", "like", "love", "marriage", "valentines", "couple"]
+ "aliases": [
+ ":couplekiss_ww:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "dating",
+ "like",
+ "love",
+ "marriage",
+ "valentines",
+ "couple"
+ ]
},
"kissing": {
"unicode": "1F617",
@@ -7719,7 +15684,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["3", "face", "infatuation", "like", "love", "valentines", "kissing", "kiss", "pucker", "lips", "smooch"],
+ "keywords": [
+ "3",
+ "face",
+ "infatuation",
+ "like",
+ "love",
+ "valentines",
+ "kissing",
+ "kiss",
+ "pucker",
+ "lips",
+ "smooch"
+ ],
"moji": "😗"
},
"kissing_cat": {
@@ -7730,7 +15707,15 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "passion", "kiss", "puckered", "heart", "love"],
+ "keywords": [
+ "animal",
+ "cats",
+ "passion",
+ "kiss",
+ "puckered",
+ "heart",
+ "love"
+ ],
"moji": "😽"
},
"kissing_closed_eyes": {
@@ -7741,7 +15726,21 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "face", "infatuation", "like", "love", "valentines", "kissing", "kiss", "passion", "puckered", "heart", "love", "smooch"],
+ "keywords": [
+ "affection",
+ "face",
+ "infatuation",
+ "like",
+ "love",
+ "valentines",
+ "kissing",
+ "kiss",
+ "passion",
+ "puckered",
+ "heart",
+ "love",
+ "smooch"
+ ],
"moji": "😚"
},
"kissing_heart": {
@@ -7751,8 +15750,25 @@
"shortname": ":kissing_heart:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":*", ":-*", "=*", ":^*"],
- "keywords": ["affection", "face", "infatuation", "kiss", "blowing kiss", "heart", "love", "lips", "like", "love", "valentines"],
+ "aliases_ascii": [
+ ":*",
+ ":-*",
+ "=*",
+ ":^*"
+ ],
+ "keywords": [
+ "affection",
+ "face",
+ "infatuation",
+ "kiss",
+ "blowing kiss",
+ "heart",
+ "love",
+ "lips",
+ "like",
+ "love",
+ "valentines"
+ ],
"moji": "😘"
},
"kissing_smiling_eyes": {
@@ -7763,7 +15779,18 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "face", "infatuation", "valentines", "kissing", "kiss", "smile", "pucker", "lips", "smooch"],
+ "keywords": [
+ "affection",
+ "face",
+ "infatuation",
+ "valentines",
+ "kissing",
+ "kiss",
+ "smile",
+ "pucker",
+ "lips",
+ "smooch"
+ ],
"moji": "😙"
},
"knife": {
@@ -7785,7 +15812,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐨"
},
"koko": {
@@ -7796,7 +15826,13 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "destination", "here", "japanese", "katakana"],
+ "keywords": [
+ "blue-square",
+ "destination",
+ "here",
+ "japanese",
+ "katakana"
+ ],
"moji": "🈁"
},
"label": {
@@ -7807,7 +15843,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["tag"]
+ "keywords": [
+ "tag"
+ ]
},
"large_blue_circle": {
"unicode": "1F535",
@@ -7828,7 +15866,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔷"
},
"large_orange_diamond": {
@@ -7839,7 +15879,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔶"
},
"last_quarter_moon": {
@@ -7850,7 +15892,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "last", "quarter", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "last",
+ "quarter",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌗"
},
"last_quarter_moon_with_face": {
@@ -7861,7 +15912,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "last", "quarter", "anthropomorphic", "face", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "last",
+ "quarter",
+ "anthropomorphic",
+ "face",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌜"
},
"laughing": {
@@ -7870,9 +15932,23 @@
"name": "smiling face with open mouth and tightly-closed ey",
"shortname": ":laughing:",
"category": "emoticons",
- "aliases": [":satisfied:"],
- "aliases_ascii": [">:)", ">;)", ">:-)", ">=)"],
- "keywords": ["happy", "joy", "lol", "smiling", "laughing", "laugh"],
+ "aliases": [
+ ":satisfied:"
+ ],
+ "aliases_ascii": [
+ ">:)",
+ ">;)",
+ ">:-)",
+ ">=)"
+ ],
+ "keywords": [
+ "happy",
+ "joy",
+ "lol",
+ "smiling",
+ "laughing",
+ "laugh"
+ ],
"moji": "😆"
},
"leaves": {
@@ -7883,7 +15959,19 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["grass", "lawn", "nature", "plant", "tree", "vegetable", "leaves", "leaf", "wind", "float", "fluttering"],
+ "keywords": [
+ "grass",
+ "lawn",
+ "nature",
+ "plant",
+ "tree",
+ "vegetable",
+ "leaves",
+ "leaf",
+ "wind",
+ "float",
+ "fluttering"
+ ],
"moji": "🍃"
},
"ledger": {
@@ -7894,7 +15982,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["notes", "paper"],
+ "keywords": [
+ "notes",
+ "paper"
+ ],
"moji": "📒"
},
"left_luggage": {
@@ -7905,7 +15996,14 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "travel", "bag", "baggage", "luggage", "travel"],
+ "keywords": [
+ "blue-square",
+ "travel",
+ "bag",
+ "baggage",
+ "luggage",
+ "travel"
+ ],
"moji": "🛅"
},
"left_receiver": {
@@ -7914,24 +16012,36 @@
"name": "left hand telephone receiver",
"shortname": ":left_receiver:",
"category": "objects_symbols",
- "aliases": [":left_hand_telephone_receiver:"],
+ "aliases": [
+ ":left_hand_telephone_receiver:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "dial", "technology"]
+ "keywords": [
+ "communication",
+ "dial",
+ "technology"
+ ]
},
"left_right_arrow": {
"unicode": "2194",
- "unicode_alternates": ["2194-FE0F"],
+ "unicode_alternates": [
+ "2194-FE0F"
+ ],
"name": "left right arrow",
"shortname": ":left_right_arrow:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "↔"
},
"leftwards_arrow_with_hook": {
"unicode": "21A9",
- "unicode_alternates": ["21A9-FE0F"],
+ "unicode_alternates": [
+ "21A9-FE0F"
+ ],
"name": "leftwards arrow with hook",
"shortname": ":leftwards_arrow_with_hook:",
"category": "other",
@@ -7948,18 +16058,39 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fruit", "nature", "lemon", "yellow", "citrus"],
+ "keywords": [
+ "fruit",
+ "nature",
+ "lemon",
+ "yellow",
+ "citrus"
+ ],
"moji": "🍋"
},
"leo": {
"unicode": "264C",
- "unicode_alternates": ["264C-FE0F"],
+ "unicode_alternates": [
+ "264C-FE0F"
+ ],
"name": "leo",
"shortname": ":leo:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["leo", "lion", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "purple-square", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "leo",
+ "lion",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "purple-square",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♌"
},
"leopard": {
@@ -7970,7 +16101,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "leopard", "cat", "spot", "spotted", "sexy"],
+ "keywords": [
+ "animal",
+ "nature",
+ "leopard",
+ "cat",
+ "spot",
+ "spotted",
+ "sexy"
+ ],
"moji": "🐆"
},
"level_slider": {
@@ -7981,7 +16120,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["controls"]
+ "keywords": [
+ "controls"
+ ]
},
"levitate": {
"unicode": "1F574",
@@ -7989,19 +16130,39 @@
"name": "man in business suit levitating",
"shortname": ":levitate:",
"category": "people",
- "aliases": [":man_in_business_suit_levitating:"],
+ "aliases": [
+ ":man_in_business_suit_levitating:"
+ ],
"aliases_ascii": [],
- "keywords": ["hover", "exclamation"]
+ "keywords": [
+ "hover",
+ "exclamation"
+ ]
},
"libra": {
"unicode": "264E",
- "unicode_alternates": ["264E-FE0F"],
+ "unicode_alternates": [
+ "264E-FE0F"
+ ],
"name": "libra",
"shortname": ":libra:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["libra", "scales", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "purple-square", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "libra",
+ "scales",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "purple-square",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♎"
},
"lifter": {
@@ -8010,9 +16171,101 @@
"name": "weight lifter",
"shortname": ":lifter:",
"category": "activity",
- "aliases": [":weight_lifter:"],
+ "aliases": [
+ ":weight_lifter:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "bench",
+ "press",
+ "squats",
+ "deadlift"
+ ]
+ },
+ "lifter_tone1": {
+ "unicode": "1F3CB-1F3FB",
+ "unicode_alternates": "",
+ "name": "weight lifter tone 1",
+ "shortname": ":lifter_tone1:",
+ "category": "activity",
+ "aliases": [
+ ":weight_lifter_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "bench",
+ "press",
+ "squats",
+ "deadlift"
+ ]
+ },
+ "lifter_tone2": {
+ "unicode": "1F3CB-1F3FC",
+ "unicode_alternates": "",
+ "name": "weight lifter tone 2",
+ "shortname": ":lifter_tone2:",
+ "category": "activity",
+ "aliases": [
+ ":weight_lifter_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "bench",
+ "press",
+ "squats",
+ "deadlift"
+ ]
+ },
+ "lifter_tone3": {
+ "unicode": "1F3CB-1F3FD",
+ "unicode_alternates": "",
+ "name": "weight lifter tone 3",
+ "shortname": ":lifter_tone3:",
+ "category": "activity",
+ "aliases": [
+ ":weight_lifter_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "bench",
+ "press",
+ "squats",
+ "deadlift"
+ ]
+ },
+ "lifter_tone4": {
+ "unicode": "1F3CB-1F3FE",
+ "unicode_alternates": "",
+ "name": "weight lifter tone 4",
+ "shortname": ":lifter_tone4:",
+ "category": "activity",
+ "aliases": [
+ ":weight_lifter_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "bench",
+ "press",
+ "squats",
+ "deadlift"
+ ]
+ },
+ "lifter_tone5": {
+ "unicode": "1F3CB-1F3FF",
+ "unicode_alternates": "",
+ "name": "weight lifter tone 5",
+ "shortname": ":lifter_tone5:",
+ "category": "activity",
+ "aliases": [
+ ":weight_lifter_tone5:"
+ ],
"aliases_ascii": [],
- "keywords": ["bench", "press", "squats", "deadlift"]
+ "keywords": [
+ "bench",
+ "press",
+ "squats",
+ "deadlift"
+ ]
},
"light_check_mark": {
"unicode": "1F5F8",
@@ -8020,9 +16273,13 @@
"name": "light check mark",
"shortname": ":light_check_mark:",
"category": "objects_symbols",
- "aliases": [":light_mark:"],
+ "aliases": [
+ ":light_mark:"
+ ],
"aliases_ascii": [],
- "keywords": ["vote"]
+ "keywords": [
+ "vote"
+ ]
},
"light_rail": {
"unicode": "1F688",
@@ -8032,7 +16289,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "train", "rail", "light"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "train",
+ "rail",
+ "light"
+ ],
"moji": "🚈"
},
"link": {
@@ -8043,9 +16306,24 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["rings", "url"],
+ "keywords": [
+ "rings",
+ "url"
+ ],
"moji": "🔗"
},
+ "lion_face": {
+ "unicode": "1F981",
+ "unicode_alternates": "",
+ "name": "lion face",
+ "shortname": ":lion_face:",
+ "category": "nature",
+ "aliases": [
+ ":lion:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"lips": {
"unicode": "1F444",
"unicode_alternates": [],
@@ -8054,7 +16332,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["kiss", "mouth"],
+ "keywords": [
+ "kiss",
+ "mouth"
+ ],
"moji": "👄"
},
"lips2": {
@@ -8065,7 +16346,10 @@
"category": "people",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["kiss", "mouth"]
+ "keywords": [
+ "kiss",
+ "mouth"
+ ]
},
"lipstick": {
"unicode": "1F484",
@@ -8075,7 +16359,11 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "female", "girl"],
+ "keywords": [
+ "fashion",
+ "female",
+ "girl"
+ ],
"moji": "💄"
},
"lock": {
@@ -8086,7 +16374,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["password", "security"],
+ "keywords": [
+ "password",
+ "security"
+ ],
"moji": "🔒"
},
"lock_with_ink_pen": {
@@ -8097,7 +16388,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["secret", "security"],
+ "keywords": [
+ "secret",
+ "security"
+ ],
"moji": "🔏"
},
"lollipop": {
@@ -8108,7 +16402,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["candy", "food", "snack", "sweet", "lollipop", "stick", "lick", "sweet", "sugar", "candy"],
+ "keywords": [
+ "candy",
+ "food",
+ "snack",
+ "sweet",
+ "lollipop",
+ "stick",
+ "lick",
+ "sweet",
+ "sugar",
+ "candy"
+ ],
"moji": "🍭"
},
"loop": {
@@ -8119,7 +16424,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["curly"],
+ "keywords": [
+ "curly"
+ ],
"moji": "➿"
},
"loud_sound": {
@@ -8141,7 +16448,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sound", "volume"],
+ "keywords": [
+ "sound",
+ "volume"
+ ],
"moji": "📢"
},
"love_hotel": {
@@ -8152,7 +16462,22 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "dating", "like", "love", "hotel", "love", "sex", "romance", "leisure", "adultery", "prostitution", "hospital", "birth", "happy"],
+ "keywords": [
+ "affection",
+ "dating",
+ "like",
+ "love",
+ "hotel",
+ "love",
+ "sex",
+ "romance",
+ "leisure",
+ "adultery",
+ "prostitution",
+ "hospital",
+ "birth",
+ "happy"
+ ],
"moji": "🏩"
},
"love_letter": {
@@ -8163,7 +16488,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "email", "envelope", "like", "valentines", "love", "letter", "kiss", "heart"],
+ "keywords": [
+ "affection",
+ "email",
+ "envelope",
+ "like",
+ "valentines",
+ "love",
+ "letter",
+ "kiss",
+ "heart"
+ ],
"moji": "💌"
},
"low_brightness": {
@@ -8174,18 +16509,27 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["summer", "sun"],
+ "keywords": [
+ "summer",
+ "sun"
+ ],
"moji": "🔅"
},
"m": {
"unicode": "24C2",
- "unicode_alternates": ["24C2-FE0F"],
+ "unicode_alternates": [
+ "24C2-FE0F"
+ ],
"name": "circled latin capital letter m",
"shortname": ":m:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "blue-circle", "letter"],
+ "keywords": [
+ "alphabet",
+ "blue-circle",
+ "letter"
+ ],
"moji": "Ⓜ"
},
"mag": {
@@ -8196,7 +16540,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["search", "zoom", "detective", "investigator", "detail", "details"],
+ "keywords": [
+ "search",
+ "zoom",
+ "detective",
+ "investigator",
+ "detail",
+ "details"
+ ],
"moji": "🔍"
},
"mag_right": {
@@ -8207,18 +16558,31 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["search", "zoom", "detective", "investigator", "detail", "details"],
+ "keywords": [
+ "search",
+ "zoom",
+ "detective",
+ "investigator",
+ "detail",
+ "details"
+ ],
"moji": "🔎"
},
"mahjong": {
"unicode": "1F004",
- "unicode_alternates": ["1F004-FE0F"],
+ "unicode_alternates": [
+ "1F004-FE0F"
+ ],
"name": "mahjong tile red dragon",
"shortname": ":mahjong:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "game", "kanji"],
+ "keywords": [
+ "chinese",
+ "game",
+ "kanji"
+ ],
"moji": "🀄"
},
"mailbox": {
@@ -8229,7 +16593,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "email", "inbox"],
+ "keywords": [
+ "communication",
+ "email",
+ "inbox"
+ ],
"moji": "📫"
},
"mailbox_closed": {
@@ -8240,7 +16608,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "email", "inbox"],
+ "keywords": [
+ "communication",
+ "email",
+ "inbox"
+ ],
"moji": "📪"
},
"mailbox_with_mail": {
@@ -8251,7 +16623,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "email", "inbox"],
+ "keywords": [
+ "communication",
+ "email",
+ "inbox"
+ ],
"moji": "📬"
},
"mailbox_with_no_mail": {
@@ -8262,7 +16638,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["email", "inbox"],
+ "keywords": [
+ "email",
+ "inbox"
+ ],
"moji": "📭"
},
"man": {
@@ -8273,9 +16652,95 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["classy", "dad", "father", "guy", "mustashe"],
+ "keywords": [
+ "classy",
+ "dad",
+ "father",
+ "guy",
+ "mustashe"
+ ],
"moji": "👨"
},
+ "man_tone1": {
+ "unicode": "1F468-1F3FB",
+ "unicode_alternates": "",
+ "name": "man tone 1",
+ "shortname": ":man_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "classy",
+ "dad",
+ "father",
+ "guy",
+ "mustache"
+ ]
+ },
+ "man_tone2": {
+ "unicode": "1F468-1F3FC",
+ "unicode_alternates": "",
+ "name": "man tone 2",
+ "shortname": ":man_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "classy",
+ "dad",
+ "father",
+ "guy",
+ "mustache"
+ ]
+ },
+ "man_tone3": {
+ "unicode": "1F468-1F3FD",
+ "unicode_alternates": "",
+ "name": "man tone 3",
+ "shortname": ":man_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "classy",
+ "dad",
+ "father",
+ "guy",
+ "mustache"
+ ]
+ },
+ "man_tone4": {
+ "unicode": "1F468-1F3FE",
+ "unicode_alternates": "",
+ "name": "man tone 4",
+ "shortname": ":man_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "classy",
+ "dad",
+ "father",
+ "guy",
+ "mustache"
+ ]
+ },
+ "man_tone5": {
+ "unicode": "1F468-1F3FF",
+ "unicode_alternates": "",
+ "name": "man tone 5",
+ "shortname": ":man_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "classy",
+ "dad",
+ "father",
+ "guy",
+ "mustache"
+ ]
+ },
"man_with_gua_pi_mao": {
"unicode": "1F472",
"unicode_alternates": [],
@@ -8284,9 +16749,101 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["boy", "male", "skullcap", "chinese", "asian", "qing"],
+ "keywords": [
+ "boy",
+ "male",
+ "skullcap",
+ "chinese",
+ "asian",
+ "qing"
+ ],
"moji": "👲"
},
+ "man_with_gua_pi_mao_tone1": {
+ "unicode": "1F472-1F3FB",
+ "unicode_alternates": "",
+ "name": "man with gua pi mao tone 1",
+ "shortname": ":man_with_gua_pi_mao_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "skullcap",
+ "chinese",
+ "asian",
+ "qing"
+ ]
+ },
+ "man_with_gua_pi_mao_tone2": {
+ "unicode": "1F472-1F3FC",
+ "unicode_alternates": "",
+ "name": "man with gua pi mao tone 2",
+ "shortname": ":man_with_gua_pi_mao_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "skullcap",
+ "chinese",
+ "asian",
+ "qing"
+ ]
+ },
+ "man_with_gua_pi_mao_tone3": {
+ "unicode": "1F472-1F3FD",
+ "unicode_alternates": "",
+ "name": "man with gua pi mao tone 3",
+ "shortname": ":man_with_gua_pi_mao_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "skullcap",
+ "chinese",
+ "asian",
+ "qing"
+ ]
+ },
+ "man_with_gua_pi_mao_tone4": {
+ "unicode": "1F472-1F3FE",
+ "unicode_alternates": "",
+ "name": "man with gua pi mao tone 4",
+ "shortname": ":man_with_gua_pi_mao_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "skullcap",
+ "chinese",
+ "asian",
+ "qing"
+ ]
+ },
+ "man_with_gua_pi_mao_tone5": {
+ "unicode": "1F472-1F3FF",
+ "unicode_alternates": "",
+ "name": "man with gua pi mao tone 5",
+ "shortname": ":man_with_gua_pi_mao_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "boy",
+ "male",
+ "skullcap",
+ "chinese",
+ "asian",
+ "qing"
+ ]
+ },
"man_with_turban": {
"unicode": "1F473",
"unicode_alternates": [],
@@ -8295,9 +16852,120 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["male", "turban", "headdress", "headwear", "pagri", "india", "indian", "mummy", "wisdom", "peace"],
+ "keywords": [
+ "male",
+ "turban",
+ "headdress",
+ "headwear",
+ "pagri",
+ "india",
+ "indian",
+ "mummy",
+ "wisdom",
+ "peace"
+ ],
"moji": "👳"
},
+ "man_with_turban_tone1": {
+ "unicode": "1F473-1F3FB",
+ "unicode_alternates": "",
+ "name": "man with turban tone 1",
+ "shortname": ":man_with_turban_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "headdress",
+ "headwear",
+ "pagri",
+ "india",
+ "indian",
+ "mummy",
+ "wisdom",
+ "peace"
+ ]
+ },
+ "man_with_turban_tone2": {
+ "unicode": "1F473-1F3FC",
+ "unicode_alternates": "",
+ "name": "man with turban tone 2",
+ "shortname": ":man_with_turban_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "headdress",
+ "headwear",
+ "pagri",
+ "india",
+ "indian",
+ "mummy",
+ "wisdom",
+ "peace"
+ ]
+ },
+ "man_with_turban_tone3": {
+ "unicode": "1F473-1F3FD",
+ "unicode_alternates": "",
+ "name": "man with turban tone 3",
+ "shortname": ":man_with_turban_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "headdress",
+ "headwear",
+ "pagri",
+ "india",
+ "indian",
+ "mummy",
+ "wisdom",
+ "peace"
+ ]
+ },
+ "man_with_turban_tone4": {
+ "unicode": "1F473-1F3FE",
+ "unicode_alternates": "",
+ "name": "man with turban tone 4",
+ "shortname": ":man_with_turban_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "headdress",
+ "headwear",
+ "pagri",
+ "india",
+ "indian",
+ "mummy",
+ "wisdom",
+ "peace"
+ ]
+ },
+ "man_with_turban_tone5": {
+ "unicode": "1F473-1F3FF",
+ "unicode_alternates": "",
+ "name": "man with turban tone 5",
+ "shortname": ":man_with_turban_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "headdress",
+ "headwear",
+ "pagri",
+ "india",
+ "indian",
+ "mummy",
+ "wisdom",
+ "peace"
+ ]
+ },
"mans_shoe": {
"unicode": "1F45E",
"unicode_alternates": [],
@@ -8306,7 +16974,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "male"],
+ "keywords": [
+ "fashion",
+ "male"
+ ],
"moji": "👞"
},
"map": {
@@ -8315,9 +16986,15 @@
"name": "world map",
"shortname": ":map:",
"category": "travel_places",
- "aliases": [":world_map:"],
+ "aliases": [
+ ":world_map:"
+ ],
"aliases_ascii": [],
- "keywords": ["atlas", "earth", "cartography"]
+ "keywords": [
+ "atlas",
+ "earth",
+ "cartography"
+ ]
},
"maple_leaf": {
"unicode": "1F341",
@@ -8327,7 +17004,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["canada", "nature", "plant", "vegetable", "maple", "leaf", "syrup", "canada", "tree"],
+ "keywords": [
+ "canada",
+ "nature",
+ "plant",
+ "vegetable",
+ "maple",
+ "leaf",
+ "syrup",
+ "canada",
+ "tree"
+ ],
"moji": "🍁"
},
"mask": {
@@ -8338,7 +17025,16 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "ill", "sick", "sick", "virus", "flu", "medical", "mask"],
+ "keywords": [
+ "face",
+ "ill",
+ "sick",
+ "sick",
+ "virus",
+ "flu",
+ "medical",
+ "mask"
+ ],
"moji": "😷"
},
"massage": {
@@ -8349,9 +17045,83 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ],
"moji": "💆"
},
+ "massage_tone1": {
+ "unicode": "1F486-1F3FB",
+ "unicode_alternates": "",
+ "name": "face massage tone 1",
+ "shortname": ":massage_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "massage_tone2": {
+ "unicode": "1F486-1F3FC",
+ "unicode_alternates": "",
+ "name": "face massage tone 2",
+ "shortname": ":massage_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "massage_tone3": {
+ "unicode": "1F486-1F3FD",
+ "unicode_alternates": "",
+ "name": "face massage tone 3",
+ "shortname": ":massage_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "massage_tone4": {
+ "unicode": "1F486-1F3FE",
+ "unicode_alternates": "",
+ "name": "face massage tone 4",
+ "shortname": ":massage_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "massage_tone5": {
+ "unicode": "1F486-1F3FF",
+ "unicode_alternates": "",
+ "name": "face massage tone 5",
+ "shortname": ":massage_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
"meat_on_bone": {
"unicode": "1F356",
"unicode_alternates": [],
@@ -8360,7 +17130,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "good", "meat", "bone", "animal", "cooked"],
+ "keywords": [
+ "food",
+ "good",
+ "meat",
+ "bone",
+ "animal",
+ "cooked"
+ ],
"moji": "🍖"
},
"medal": {
@@ -8369,9 +17146,22 @@
"name": "sports medal",
"shortname": ":medal:",
"category": "activity",
- "aliases": [":sports_medal:"],
- "aliases_ascii": [],
- "keywords": ["award", "ceremony", "contest", "ftw", "place", "win", "first", "show", "reward", "achievement"]
+ "aliases": [
+ ":sports_medal:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "award",
+ "ceremony",
+ "contest",
+ "ftw",
+ "place",
+ "win",
+ "first",
+ "show",
+ "reward",
+ "achievement"
+ ]
},
"mega": {
"unicode": "1F4E3",
@@ -8381,7 +17171,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sound", "speaker", "volume"],
+ "keywords": [
+ "sound",
+ "speaker",
+ "volume"
+ ],
"moji": "📣"
},
"melon": {
@@ -8392,9 +17186,26 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "nature", "melon", "cantaloupe", "honeydew"],
+ "keywords": [
+ "food",
+ "fruit",
+ "nature",
+ "melon",
+ "cantaloupe",
+ "honeydew"
+ ],
"moji": "🍈"
},
+ "menorah": {
+ "unicode": "1F54E",
+ "unicode_alternates": "",
+ "name": "menorah with nine branches",
+ "shortname": ":menorah:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"mens": {
"unicode": "1F6B9",
"unicode_alternates": [],
@@ -8403,9 +17214,122 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["restroom", "toilet", "wc", "men", "bathroom", "restroom", "sign", "boy", "male", "avatar"],
+ "keywords": [
+ "restroom",
+ "toilet",
+ "wc",
+ "men",
+ "bathroom",
+ "restroom",
+ "sign",
+ "boy",
+ "male",
+ "avatar"
+ ],
"moji": "🚹"
},
+ "metal": {
+ "unicode": "1F918",
+ "unicode_alternates": "",
+ "name": "sign of the horns",
+ "shortname": ":metal:",
+ "category": "people",
+ "aliases": [
+ ":sign_of_the_horns:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "band",
+ "concert",
+ "fingers",
+ "rocknroll"
+ ]
+ },
+ "metal_tone1": {
+ "unicode": "1F918-1F3FB",
+ "unicode_alternates": "",
+ "name": "sign of the horns tone 1",
+ "shortname": ":metal_tone1:",
+ "category": "people",
+ "aliases": [
+ ":sign_of_the_horns_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "band",
+ "concert",
+ "fingers",
+ "rocknroll"
+ ]
+ },
+ "metal_tone2": {
+ "unicode": "1F918-1F3FC",
+ "unicode_alternates": "",
+ "name": "sign of the horns tone 2",
+ "shortname": ":metal_tone2:",
+ "category": "people",
+ "aliases": [
+ ":sign_of_the_horns_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "band",
+ "concert",
+ "fingers",
+ "rocknroll"
+ ]
+ },
+ "metal_tone3": {
+ "unicode": "1F918-1F3FD",
+ "unicode_alternates": "",
+ "name": "sign of the horns tone 3",
+ "shortname": ":metal_tone3:",
+ "category": "people",
+ "aliases": [
+ ":sign_of_the_horns_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "band",
+ "concert",
+ "fingers",
+ "rocknroll"
+ ]
+ },
+ "metal_tone4": {
+ "unicode": "1F918-1F3FE",
+ "unicode_alternates": "",
+ "name": "sign of the horns tone 4",
+ "shortname": ":metal_tone4:",
+ "category": "people",
+ "aliases": [
+ ":sign_of_the_horns_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "band",
+ "concert",
+ "fingers",
+ "rocknroll"
+ ]
+ },
+ "metal_tone5": {
+ "unicode": "1F918-1F3FF",
+ "unicode_alternates": "",
+ "name": "sign of the horns tone 5",
+ "shortname": ":metal_tone5:",
+ "category": "people",
+ "aliases": [
+ ":sign_of_the_horns_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "band",
+ "concert",
+ "fingers",
+ "rocknroll"
+ ]
+ },
"metro": {
"unicode": "1F687",
"unicode_alternates": [],
@@ -8414,7 +17338,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "mrt", "transportation", "tube", "underground", "metro", "subway", "underground", "train"],
+ "keywords": [
+ "blue-square",
+ "mrt",
+ "transportation",
+ "tube",
+ "underground",
+ "metro",
+ "subway",
+ "underground",
+ "train"
+ ],
"moji": "🚇"
},
"microphone": {
@@ -8425,7 +17359,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["PA", "music", "sound", "microphone", "mic", "audio", "sound", "voice", "karaoke"],
+ "keywords": [
+ "PA",
+ "music",
+ "sound",
+ "microphone",
+ "mic",
+ "audio",
+ "sound",
+ "voice",
+ "karaoke"
+ ],
"moji": "🎤"
},
"microphone2": {
@@ -8434,9 +17378,15 @@
"name": "studio microphone",
"shortname": ":microphone2:",
"category": "objects_symbols",
- "aliases": [":studio_microphone:"],
+ "aliases": [
+ ":studio_microphone:"
+ ],
"aliases_ascii": [],
- "keywords": ["mic", "audio", "recording"]
+ "keywords": [
+ "mic",
+ "audio",
+ "recording"
+ ]
},
"microscope": {
"unicode": "1F52C",
@@ -8446,7 +17396,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["experiment", "laboratory", "zoomin"],
+ "keywords": [
+ "experiment",
+ "laboratory",
+ "zoomin"
+ ],
"moji": "🔬"
},
"middle_finger": {
@@ -8455,9 +17409,83 @@
"name": "reversed hand with middle finger extended",
"shortname": ":middle_finger:",
"category": "people",
- "aliases": [":reversed_hand_with_middle_finger_extended:"],
+ "aliases": [
+ ":reversed_hand_with_middle_finger_extended:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "fu"
+ ]
+ },
+ "middle_finger_tone1": {
+ "unicode": "1F595-1F3FB",
+ "unicode_alternates": "",
+ "name": "reversed hand with middle finger extended tone 1",
+ "shortname": ":middle_finger_tone1:",
+ "category": "people",
+ "aliases": [
+ ":reversed_hand_with_middle_finger_extended_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "fu"
+ ]
+ },
+ "middle_finger_tone2": {
+ "unicode": "1F595-1F3FC",
+ "unicode_alternates": "",
+ "name": "reversed hand with middle finger extended tone 2",
+ "shortname": ":middle_finger_tone2:",
+ "category": "people",
+ "aliases": [
+ ":reversed_hand_with_middle_finger_extended_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "fu"
+ ]
+ },
+ "middle_finger_tone3": {
+ "unicode": "1F595-1F3FD",
+ "unicode_alternates": "",
+ "name": "reversed hand with middle finger extended tone 3",
+ "shortname": ":middle_finger_tone3:",
+ "category": "people",
+ "aliases": [
+ ":reversed_hand_with_middle_finger_extended_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "fu"
+ ]
+ },
+ "middle_finger_tone4": {
+ "unicode": "1F595-1F3FE",
+ "unicode_alternates": "",
+ "name": "reversed hand with middle finger extended tone 4",
+ "shortname": ":middle_finger_tone4:",
+ "category": "people",
+ "aliases": [
+ ":reversed_hand_with_middle_finger_extended_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "fu"
+ ]
+ },
+ "middle_finger_tone5": {
+ "unicode": "1F595-1F3FF",
+ "unicode_alternates": "",
+ "name": "reversed hand with middle finger extended tone 5",
+ "shortname": ":middle_finger_tone5:",
+ "category": "people",
+ "aliases": [
+ ":reversed_hand_with_middle_finger_extended_tone5:"
+ ],
"aliases_ascii": [],
- "keywords": ["fu"]
+ "keywords": [
+ "fu"
+ ]
},
"military_medal": {
"unicode": "1F396",
@@ -8467,7 +17495,13 @@
"category": "celebration",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["honor", "acknowledgment", "purple heart", "heroism", "veteran"]
+ "keywords": [
+ "honor",
+ "acknowledgment",
+ "purple heart",
+ "heroism",
+ "veteran"
+ ]
},
"milky_way": {
"unicode": "1F30C",
@@ -8477,7 +17511,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo", "space", "milky", "galaxy", "star", "stars", "planets", "space", "sky"],
+ "keywords": [
+ "photo",
+ "space",
+ "milky",
+ "galaxy",
+ "star",
+ "stars",
+ "planets",
+ "space",
+ "sky"
+ ],
"moji": "🌌"
},
"minibus": {
@@ -8488,7 +17532,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["car", "transportation", "vehicle", "bus", "city", "transport", "transportation"],
+ "keywords": [
+ "car",
+ "transportation",
+ "vehicle",
+ "bus",
+ "city",
+ "transport",
+ "transportation"
+ ],
"moji": "🚐"
},
"minidisc": {
@@ -8499,7 +17551,13 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["data", "disc", "disk", "record", "technology"],
+ "keywords": [
+ "data",
+ "disc",
+ "disk",
+ "record",
+ "technology"
+ ],
"moji": "💽"
},
"mobile_phone_off": {
@@ -8510,9 +17568,23 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mute"],
+ "keywords": [
+ "mute"
+ ],
"moji": "📴"
},
+ "money_mouth": {
+ "unicode": "1F911",
+ "unicode_alternates": "",
+ "name": "money-mouth face",
+ "shortname": ":money_mouth:",
+ "category": "people",
+ "aliases": [
+ ":money_mouth_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"money_with_wings": {
"unicode": "1F4B8",
"unicode_alternates": [],
@@ -8521,7 +17593,22 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bills", "dollar", "payment", "money", "wings", "easy", "spend", "work", "lost", "blown", "burned", "gift", "cash", "dollar"],
+ "keywords": [
+ "bills",
+ "dollar",
+ "payment",
+ "money",
+ "wings",
+ "easy",
+ "spend",
+ "work",
+ "lost",
+ "blown",
+ "burned",
+ "gift",
+ "cash",
+ "dollar"
+ ],
"moji": "💸"
},
"moneybag": {
@@ -8532,7 +17619,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["coins", "dollar", "payment"],
+ "keywords": [
+ "coins",
+ "dollar",
+ "payment"
+ ],
"moji": "💰"
},
"monkey": {
@@ -8543,7 +17634,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "monkey", "primate", "banana", "silly"],
+ "keywords": [
+ "animal",
+ "nature",
+ "monkey",
+ "primate",
+ "banana",
+ "silly"
+ ],
"moji": "🐒"
},
"monkey_face": {
@@ -8554,7 +17652,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐵"
},
"monorail": {
@@ -8565,7 +17666,14 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "train", "mono", "rail", "transport"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "train",
+ "mono",
+ "rail",
+ "transport"
+ ],
"moji": "🚝"
},
"mood_bubble": {
@@ -8576,7 +17684,13 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["balloon", "conversation", "communication", "comic", "feeling"]
+ "keywords": [
+ "balloon",
+ "conversation",
+ "communication",
+ "comic",
+ "feeling"
+ ]
},
"mood_bubble_lightning": {
"unicode": "1F5F1",
@@ -8584,9 +17698,17 @@
"name": "lightning mood bubble",
"shortname": ":mood_bubble_lightning:",
"category": "objects_symbols",
- "aliases": [":lightning_mood_bubble:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "conversation", "communication", "comic", "feeling"]
+ "aliases": [
+ ":lightning_mood_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "conversation",
+ "communication",
+ "comic",
+ "feeling"
+ ]
},
"mood_lightning": {
"unicode": "1F5F2",
@@ -8594,9 +17716,15 @@
"name": "lightning mood",
"shortname": ":mood_lightning:",
"category": "objects_symbols",
- "aliases": [":lightning_mood:"],
+ "aliases": [
+ ":lightning_mood:"
+ ],
"aliases_ascii": [],
- "keywords": ["zap", "electric", "current"]
+ "keywords": [
+ "zap",
+ "electric",
+ "current"
+ ]
},
"mortar_board": {
"unicode": "1F393",
@@ -8606,9 +17734,35 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cap", "college", "degree", "graduation", "hat", "school", "university", "graduation", "cap", "mortarboard", "academic", "education", "ceremony", "square", "tassel"],
+ "keywords": [
+ "cap",
+ "college",
+ "degree",
+ "graduation",
+ "hat",
+ "school",
+ "university",
+ "graduation",
+ "cap",
+ "mortarboard",
+ "academic",
+ "education",
+ "ceremony",
+ "square",
+ "tassel"
+ ],
"moji": "🎓"
},
+ "mosque": {
+ "unicode": "1F54C",
+ "unicode_alternates": "",
+ "name": "mosque",
+ "shortname": ":mosque:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"motorboat": {
"unicode": "1F6E5",
"unicode_alternates": [],
@@ -8617,7 +17771,13 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "boat", "speedboat", "powerboat"]
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "boat",
+ "speedboat",
+ "powerboat"
+ ]
},
"motorcycle": {
"unicode": "1F3CD",
@@ -8625,9 +17785,14 @@
"name": "racing motorcycle",
"shortname": ":motorcycle:",
"category": "activity",
- "aliases": [":racing_motorcycle:"],
+ "aliases": [
+ ":racing_motorcycle:"
+ ],
"aliases_ascii": [],
- "keywords": ["bike", "speed"]
+ "keywords": [
+ "bike",
+ "speed"
+ ]
},
"motorway": {
"unicode": "1F6E3",
@@ -8637,7 +17802,13 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["road", "highway", "freeway", "traffic", "travel"]
+ "keywords": [
+ "road",
+ "highway",
+ "freeway",
+ "traffic",
+ "travel"
+ ]
},
"mount_fuji": {
"unicode": "1F5FB",
@@ -8647,9 +17818,26 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["japan", "mountain", "nature", "photo"],
+ "keywords": [
+ "japan",
+ "mountain",
+ "nature",
+ "photo"
+ ],
"moji": "🗻"
},
+ "mountain": {
+ "unicode": "26F0",
+ "unicode_alternates": "",
+ "name": "mountain",
+ "shortname": ":mountain:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "place"
+ ]
+ },
"mountain_bicyclist": {
"unicode": "1F6B5",
"unicode_alternates": [],
@@ -8658,9 +17846,104 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["human", "sports", "transportation", "bicyclist", "mountain", "bike", "pedal", "bicycle", "transportation"],
+ "keywords": [
+ "human",
+ "sports",
+ "transportation",
+ "bicyclist",
+ "mountain",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ],
"moji": "🚵"
},
+ "mountain_bicyclist_tone1": {
+ "unicode": "1F6B5-1F3FB",
+ "unicode_alternates": "",
+ "name": "mountain bicyclist tone 1",
+ "shortname": ":mountain_bicyclist_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "transportation",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "mountain_bicyclist_tone2": {
+ "unicode": "1F6B5-1F3FC",
+ "unicode_alternates": "",
+ "name": "mountain bicyclist tone 2",
+ "shortname": ":mountain_bicyclist_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "transportation",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "mountain_bicyclist_tone3": {
+ "unicode": "1F6B5-1F3FD",
+ "unicode_alternates": "",
+ "name": "mountain bicyclist tone 3",
+ "shortname": ":mountain_bicyclist_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "transportation",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "mountain_bicyclist_tone4": {
+ "unicode": "1F6B5-1F3FE",
+ "unicode_alternates": "",
+ "name": "mountain bicyclist tone 4",
+ "shortname": ":mountain_bicyclist_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "transportation",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
+ "mountain_bicyclist_tone5": {
+ "unicode": "1F6B5-1F3FF",
+ "unicode_alternates": "",
+ "name": "mountain bicyclist tone 5",
+ "shortname": ":mountain_bicyclist_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "transportation",
+ "bike",
+ "pedal",
+ "bicycle",
+ "transportation"
+ ]
+ },
"mountain_cableway": {
"unicode": "1F6A0",
"unicode_alternates": [],
@@ -8669,7 +17952,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "mountain", "cable", "rail", "train", "railway"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "mountain",
+ "cable",
+ "rail",
+ "train",
+ "railway"
+ ],
"moji": "🚠"
},
"mountain_railway": {
@@ -8680,7 +17971,14 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "mountain", "railway", "rail", "train", "transport"],
+ "keywords": [
+ "transportation",
+ "mountain",
+ "railway",
+ "rail",
+ "train",
+ "transport"
+ ],
"moji": "🚞"
},
"mountain_snow": {
@@ -8689,9 +17987,16 @@
"name": "snow capped mountain",
"shortname": ":mountain_snow:",
"category": "travel_places",
- "aliases": [":snow_capped_mountain:"],
+ "aliases": [
+ ":snow_capped_mountain:"
+ ],
"aliases_ascii": [],
- "keywords": ["cold", "elevation", "hiking", "peak"]
+ "keywords": [
+ "cold",
+ "elevation",
+ "hiking",
+ "peak"
+ ]
},
"mouse": {
"unicode": "1F42D",
@@ -8701,7 +18006,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐭"
},
"mouse2": {
@@ -8712,7 +18020,13 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "mouse", "mice", "rodent"],
+ "keywords": [
+ "animal",
+ "nature",
+ "mouse",
+ "mice",
+ "rodent"
+ ],
"moji": "🐁"
},
"mouse_one": {
@@ -8721,9 +18035,32 @@
"name": "one button mouse",
"shortname": ":mouse_one:",
"category": "objects_symbols",
- "aliases": [":one_button_mouse:"],
+ "aliases": [
+ ":one_button_mouse:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "computer",
+ "input",
+ "device"
+ ]
+ },
+ "mouse_three_button": {
+ "unicode": "1F5B1",
+ "unicode_alternates": "",
+ "name": "three button mouse",
+ "shortname": ":mouse_three_button:",
+ "category": "objects",
+ "aliases": [
+ ":three_button_mouse:"
+ ],
"aliases_ascii": [],
- "keywords": ["computer", "input", "device"]
+ "keywords": [
+ "3",
+ "computer",
+ "object",
+ "office"
+ ]
},
"movie_camera": {
"unicode": "1F3A5",
@@ -8733,7 +18070,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["film", "record", "movie", "camera", "camcorder", "video", "motion", "picture"],
+ "keywords": [
+ "film",
+ "record",
+ "movie",
+ "camera",
+ "camcorder",
+ "video",
+ "motion",
+ "picture"
+ ],
"moji": "🎥"
},
"moyai": {
@@ -8744,7 +18090,10 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["island", "stone"],
+ "keywords": [
+ "island",
+ "stone"
+ ],
"moji": "🗿"
},
"muscle": {
@@ -8755,9 +18104,101 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arm", "flex", "hand", "strong", "muscle", "bicep"],
+ "keywords": [
+ "arm",
+ "flex",
+ "hand",
+ "strong",
+ "muscle",
+ "bicep"
+ ],
"moji": "💪"
},
+ "muscle_tone1": {
+ "unicode": "1F4AA-1F3FB",
+ "unicode_alternates": "",
+ "name": "flexed biceps tone 1",
+ "shortname": ":muscle_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arm",
+ "flex",
+ "hand",
+ "strong",
+ "muscle",
+ "bicep"
+ ]
+ },
+ "muscle_tone2": {
+ "unicode": "1F4AA-1F3FC",
+ "unicode_alternates": "",
+ "name": "flexed biceps tone 2",
+ "shortname": ":muscle_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arm",
+ "flex",
+ "hand",
+ "strong",
+ "muscle",
+ "bicep"
+ ]
+ },
+ "muscle_tone3": {
+ "unicode": "1F4AA-1F3FD",
+ "unicode_alternates": "",
+ "name": "flexed biceps tone 3",
+ "shortname": ":muscle_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arm",
+ "flex",
+ "hand",
+ "strong",
+ "muscle",
+ "bicep"
+ ]
+ },
+ "muscle_tone4": {
+ "unicode": "1F4AA-1F3FE",
+ "unicode_alternates": "",
+ "name": "flexed biceps tone 4",
+ "shortname": ":muscle_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arm",
+ "flex",
+ "hand",
+ "strong",
+ "muscle",
+ "bicep"
+ ]
+ },
+ "muscle_tone5": {
+ "unicode": "1F4AA-1F3FF",
+ "unicode_alternates": "",
+ "name": "flexed biceps tone 5",
+ "shortname": ":muscle_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arm",
+ "flex",
+ "hand",
+ "strong",
+ "muscle",
+ "bicep"
+ ]
+ },
"mushroom": {
"unicode": "1F344",
"unicode_alternates": [],
@@ -8766,7 +18207,14 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["plant", "vegetable", "mushroom", "fungi", "food", "fungus"],
+ "keywords": [
+ "plant",
+ "vegetable",
+ "mushroom",
+ "fungi",
+ "food",
+ "fungus"
+ ],
"moji": "🍄"
},
"musical_keyboard": {
@@ -8777,7 +18225,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["instrument", "piano", "music", "keyboard", "piano", "organ", "instrument", "electric"],
+ "keywords": [
+ "instrument",
+ "piano",
+ "music",
+ "keyboard",
+ "piano",
+ "organ",
+ "instrument",
+ "electric"
+ ],
"moji": "🎹"
},
"musical_note": {
@@ -8788,7 +18245,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["score", "musical", "music", "note", "music", "sound"],
+ "keywords": [
+ "score",
+ "musical",
+ "music",
+ "note",
+ "music",
+ "sound"
+ ],
"moji": "🎵"
},
"musical_score": {
@@ -8799,7 +18263,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["clef", "treble", "music", "musical", "score", "clef", "g-clef", "stave", "staff"],
+ "keywords": [
+ "clef",
+ "treble",
+ "music",
+ "musical",
+ "score",
+ "clef",
+ "g-clef",
+ "stave",
+ "staff"
+ ],
"moji": "🎼"
},
"mute": {
@@ -8810,7 +18284,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sound", "volume"],
+ "keywords": [
+ "sound",
+ "volume"
+ ],
"moji": "🔇"
},
"nail_care": {
@@ -8821,9 +18298,77 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beauty", "manicure"],
+ "keywords": [
+ "beauty",
+ "manicure"
+ ],
"moji": "💅"
},
+ "nail_care_tone1": {
+ "unicode": "1F485-1F3FB",
+ "unicode_alternates": "",
+ "name": "nail polish tone 1",
+ "shortname": ":nail_care_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "beauty",
+ "manicure"
+ ]
+ },
+ "nail_care_tone2": {
+ "unicode": "1F485-1F3FC",
+ "unicode_alternates": "",
+ "name": "nail polish tone 2",
+ "shortname": ":nail_care_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "beauty",
+ "manicure"
+ ]
+ },
+ "nail_care_tone3": {
+ "unicode": "1F485-1F3FD",
+ "unicode_alternates": "",
+ "name": "nail polish tone 3",
+ "shortname": ":nail_care_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "beauty",
+ "manicure"
+ ]
+ },
+ "nail_care_tone4": {
+ "unicode": "1F485-1F3FE",
+ "unicode_alternates": "",
+ "name": "nail polish tone 4",
+ "shortname": ":nail_care_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "beauty",
+ "manicure"
+ ]
+ },
+ "nail_care_tone5": {
+ "unicode": "1F485-1F3FF",
+ "unicode_alternates": "",
+ "name": "nail polish tone 5",
+ "shortname": ":nail_care_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "beauty",
+ "manicure"
+ ]
+ },
"name_badge": {
"unicode": "1F4DB",
"unicode_alternates": [],
@@ -8832,7 +18377,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fire", "forbid"],
+ "keywords": [
+ "fire",
+ "forbid"
+ ],
"moji": "📛"
},
"necktie": {
@@ -8843,7 +18391,13 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cloth", "fashion", "formal", "shirt", "suitup"],
+ "keywords": [
+ "cloth",
+ "fashion",
+ "formal",
+ "shirt",
+ "suitup"
+ ],
"moji": "👔"
},
"negative_squared_cross_mark": {
@@ -8854,18 +18408,42 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["deny", "green-square", "no", "x"],
+ "keywords": [
+ "deny",
+ "green-square",
+ "no",
+ "x"
+ ],
"moji": "❎"
},
+ "nerd": {
+ "unicode": "1F913",
+ "unicode_alternates": "",
+ "name": "nerd face",
+ "shortname": ":nerd:",
+ "category": "people",
+ "aliases": [
+ ":nerd_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"network": {
"unicode": "1F5A7",
"unicode_alternates": [],
"name": "three networked computers",
"shortname": ":network:",
"category": "objects_symbols",
- "aliases": [":three_networked_computers:"],
+ "aliases": [
+ ":three_networked_computers:"
+ ],
"aliases_ascii": [],
- "keywords": ["lan", "wan", "network", "technology"]
+ "keywords": [
+ "lan",
+ "wan",
+ "network",
+ "technology"
+ ]
},
"neutral_face": {
"unicode": "1F610",
@@ -8875,7 +18453,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "indifference", "neutral", "objective", "impartial", "blank"],
+ "keywords": [
+ "face",
+ "indifference",
+ "neutral",
+ "objective",
+ "impartial",
+ "blank"
+ ],
"moji": "😐"
},
"new": {
@@ -8886,7 +18471,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "🆕"
},
"new_moon": {
@@ -8897,7 +18484,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "new", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "new",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌑"
},
"new_moon_with_face": {
@@ -8908,7 +18503,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "new", "anthropomorphic", "face", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "new",
+ "anthropomorphic",
+ "face",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌚"
},
"newspaper": {
@@ -8919,7 +18524,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["headline", "press"],
+ "keywords": [
+ "headline",
+ "press"
+ ],
"moji": "📰"
},
"newspaper2": {
@@ -8928,9 +18536,29 @@
"name": "rolled-up newspaper",
"shortname": ":newspaper2:",
"category": "objects_symbols",
- "aliases": [":rolled_up_newspaper:"],
- "aliases_ascii": [],
- "keywords": ["headline", "press"]
+ "aliases": [
+ ":rolled_up_newspaper:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "headline",
+ "press"
+ ]
+ },
+ "ng": {
+ "unicode": "1F196",
+ "unicode_alternates": "",
+ "name": "squared ng",
+ "shortname": ":ng:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blue-square",
+ "no good",
+ "symbol",
+ "word"
+ ]
},
"night_with_stars": {
"unicode": "1F303",
@@ -8940,19 +18568,33 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "star", "cloudless", "evening", "planets", "space", "sky"],
+ "keywords": [
+ "night",
+ "star",
+ "cloudless",
+ "evening",
+ "planets",
+ "space",
+ "sky"
+ ],
"moji": "🌃"
},
"nine": {
"moji": "9️⃣",
"unicode": "0039-20E3",
- "unicode_alternates": ["0039-FE0F-20E3"],
+ "unicode_alternates": [
+ "0039-FE0F-20E3"
+ ],
"name": "digit nine",
"shortname": ":nine:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["9", "blue-square", "numbers"]
+ "keywords": [
+ "9",
+ "blue-square",
+ "numbers"
+ ]
},
"no_bell": {
"unicode": "1F515",
@@ -8962,7 +18604,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mute", "sound", "volume"],
+ "keywords": [
+ "mute",
+ "sound",
+ "volume"
+ ],
"moji": "🔕"
},
"no_bicycles": {
@@ -8973,18 +18619,33 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cyclist", "prohibited", "bicycle", "bike pedal", "no"],
+ "keywords": [
+ "cyclist",
+ "prohibited",
+ "bicycle",
+ "bike pedal",
+ "no"
+ ],
"moji": "🚳"
},
"no_entry": {
"unicode": "26D4",
- "unicode_alternates": ["26D4-FE0F"],
+ "unicode_alternates": [
+ "26D4-FE0F"
+ ],
"name": "no entry",
"shortname": ":no_entry:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bad", "denied", "limit", "privacy", "security", "stop"],
+ "keywords": [
+ "bad",
+ "denied",
+ "limit",
+ "privacy",
+ "security",
+ "stop"
+ ],
"moji": "⛔"
},
"no_entry_sign": {
@@ -8995,7 +18656,16 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["denied", "disallow", "forbid", "limit", "stop", "no", "stop", "entry"],
+ "keywords": [
+ "denied",
+ "disallow",
+ "forbid",
+ "limit",
+ "stop",
+ "no",
+ "stop",
+ "entry"
+ ],
"moji": "🚫"
},
"no_good": {
@@ -9006,9 +18676,128 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman", "no", "stop", "nope", "don&#039;t", "not"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "no",
+ "stop",
+ "nope",
+ "don&#039;t",
+ "not"
+ ],
"moji": "🙅"
},
+ "no_good_tone1": {
+ "unicode": "1F645-1F3FB",
+ "unicode_alternates": "",
+ "name": "face with no good gesture tone 1",
+ "shortname": ":no_good_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "stop",
+ "nope",
+ "don't",
+ "not",
+ "forbidden",
+ "hand",
+ "person",
+ "prohibited"
+ ]
+ },
+ "no_good_tone2": {
+ "unicode": "1F645-1F3FC",
+ "unicode_alternates": "",
+ "name": "face with no good gesture tone 2",
+ "shortname": ":no_good_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "stop",
+ "nope",
+ "don't",
+ "not",
+ "forbidden",
+ "hand",
+ "person",
+ "prohibited"
+ ]
+ },
+ "no_good_tone3": {
+ "unicode": "1F645-1F3FD",
+ "unicode_alternates": "",
+ "name": "face with no good gesture tone 3",
+ "shortname": ":no_good_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "stop",
+ "nope",
+ "don't",
+ "not",
+ "forbidden",
+ "hand",
+ "person",
+ "prohibited"
+ ]
+ },
+ "no_good_tone4": {
+ "unicode": "1F645-1F3FE",
+ "unicode_alternates": "",
+ "name": "face with no good gesture tone 4",
+ "shortname": ":no_good_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "stop",
+ "nope",
+ "don't",
+ "not",
+ "forbidden",
+ "hand",
+ "person",
+ "prohibited"
+ ]
+ },
+ "no_good_tone5": {
+ "unicode": "1F645-1F3FF",
+ "unicode_alternates": "",
+ "name": "face with no good gesture tone 5",
+ "shortname": ":no_good_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "stop",
+ "nope",
+ "don't",
+ "not",
+ "forbidden",
+ "hand",
+ "person",
+ "prohibited"
+ ]
+ },
"no_mobile_phones": {
"unicode": "1F4F5",
"unicode_alternates": [],
@@ -9017,7 +18806,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["iphone", "mute"],
+ "keywords": [
+ "iphone",
+ "mute"
+ ],
"moji": "📵"
},
"no_mouth": {
@@ -9027,8 +18819,24 @@
"shortname": ":no_mouth:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":-X", ":X", ":-#", ":#", "=X", "=x", ":x", ":-x", "=#"],
- "keywords": ["face", "hellokitty", "mouth", "silent", "vapid"],
+ "aliases_ascii": [
+ ":-X",
+ ":X",
+ ":-#",
+ ":#",
+ "=X",
+ "=x",
+ ":x",
+ ":-x",
+ "=#"
+ ],
+ "keywords": [
+ "face",
+ "hellokitty",
+ "mouth",
+ "silent",
+ "vapid"
+ ],
"moji": "😶"
},
"no_pedestrians": {
@@ -9039,7 +18847,18 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["crossing", "rules", "walking", "no", "walk", "pedestrian", "stroll", "stride", "foot", "feet"],
+ "keywords": [
+ "crossing",
+ "rules",
+ "walking",
+ "no",
+ "walk",
+ "pedestrian",
+ "stroll",
+ "stride",
+ "foot",
+ "feet"
+ ],
"moji": "🚷"
},
"no_smoking": {
@@ -9050,7 +18869,18 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cigarette", "no", "smoking", "cigarette", "smoke", "cancer", "lungs", "inhale", "tar", "nicotine"],
+ "keywords": [
+ "cigarette",
+ "no",
+ "smoking",
+ "cigarette",
+ "smoke",
+ "cancer",
+ "lungs",
+ "inhale",
+ "tar",
+ "nicotine"
+ ],
"moji": "🚭"
},
"non-potable_water": {
@@ -9061,7 +18891,18 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["drink", "faucet", "tap", "non-potable", "water", "not drinkable", "dirty", "gross", "aqua", "h20"],
+ "keywords": [
+ "drink",
+ "faucet",
+ "tap",
+ "non-potable",
+ "water",
+ "not drinkable",
+ "dirty",
+ "gross",
+ "aqua",
+ "h20"
+ ],
"moji": "🚱"
},
"nose": {
@@ -9072,18 +18913,91 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["smell", "sniff"],
+ "keywords": [
+ "smell",
+ "sniff"
+ ],
"moji": "👃"
},
+ "nose_tone1": {
+ "unicode": "1F443-1F3FB",
+ "unicode_alternates": "",
+ "name": "nose tone 1",
+ "shortname": ":nose_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "smell",
+ "sniff"
+ ]
+ },
+ "nose_tone2": {
+ "unicode": "1F443-1F3FC",
+ "unicode_alternates": "",
+ "name": "nose tone 2",
+ "shortname": ":nose_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "smell",
+ "sniff"
+ ]
+ },
+ "nose_tone3": {
+ "unicode": "1F443-1F3FD",
+ "unicode_alternates": "",
+ "name": "nose tone 3",
+ "shortname": ":nose_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "smell",
+ "sniff"
+ ]
+ },
+ "nose_tone4": {
+ "unicode": "1F443-1F3FE",
+ "unicode_alternates": "",
+ "name": "nose tone 4",
+ "shortname": ":nose_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "smell",
+ "sniff"
+ ]
+ },
+ "nose_tone5": {
+ "unicode": "1F443-1F3FF",
+ "unicode_alternates": "",
+ "name": "nose tone 5",
+ "shortname": ":nose_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "smell",
+ "sniff"
+ ]
+ },
"note": {
"unicode": "1F5C9",
"unicode_alternates": [],
"name": "note page",
"shortname": ":note:",
"category": "objects_symbols",
- "aliases": [":note_page:"],
+ "aliases": [
+ ":note_page:"
+ ],
"aliases_ascii": [],
- "keywords": ["stationery", "post-it"]
+ "keywords": [
+ "stationery",
+ "post-it"
+ ]
},
"note_empty": {
"unicode": "1F5C6",
@@ -9091,9 +19005,14 @@
"name": "empty note page",
"shortname": ":note_empty:",
"category": "objects_symbols",
- "aliases": [":empty_note_page:"],
+ "aliases": [
+ ":empty_note_page:"
+ ],
"aliases_ascii": [],
- "keywords": ["stationery", "post-it"]
+ "keywords": [
+ "stationery",
+ "post-it"
+ ]
},
"notebook": {
"unicode": "1F4D3",
@@ -9103,7 +19022,12 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["notes", "paper", "record", "stationery"],
+ "keywords": [
+ "notes",
+ "paper",
+ "record",
+ "stationery"
+ ],
"moji": "📓"
},
"notebook_with_decorative_cover": {
@@ -9114,7 +19038,12 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["classroom", "notes", "paper", "record"],
+ "keywords": [
+ "classroom",
+ "notes",
+ "paper",
+ "record"
+ ],
"moji": "📔"
},
"notepad": {
@@ -9123,9 +19052,14 @@
"name": "note pad",
"shortname": ":notepad:",
"category": "objects_symbols",
- "aliases": [":note_pad:"],
+ "aliases": [
+ ":note_pad:"
+ ],
"aliases_ascii": [],
- "keywords": ["stationery", "post-it"]
+ "keywords": [
+ "stationery",
+ "post-it"
+ ]
},
"notepad_empty": {
"unicode": "1F5C7",
@@ -9133,9 +19067,14 @@
"name": "empty note pad",
"shortname": ":notepad_empty:",
"category": "objects_symbols",
- "aliases": [":empty_note_pad:"],
+ "aliases": [
+ ":empty_note_pad:"
+ ],
"aliases_ascii": [],
- "keywords": ["stationery", "post-it"]
+ "keywords": [
+ "stationery",
+ "post-it"
+ ]
},
"notepad_spiral": {
"unicode": "1F5D2",
@@ -9143,9 +19082,13 @@
"name": "spiral note pad",
"shortname": ":notepad_spiral:",
"category": "objects_symbols",
- "aliases": [":spiral_note_pad:"],
+ "aliases": [
+ ":spiral_note_pad:"
+ ],
"aliases_ascii": [],
- "keywords": ["stationery"]
+ "keywords": [
+ "stationery"
+ ]
},
"notes": {
"unicode": "1F3B6",
@@ -9155,7 +19098,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["music", "score", "musical", "music", "notes", "music", "sound", "melody"],
+ "keywords": [
+ "music",
+ "score",
+ "musical",
+ "music",
+ "notes",
+ "music",
+ "sound",
+ "melody"
+ ],
"moji": "🎶"
},
"nut_and_bolt": {
@@ -9166,18 +19118,26 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["handy", "tools"],
+ "keywords": [
+ "handy",
+ "tools"
+ ],
"moji": "🔩"
},
"o": {
"unicode": "2B55",
- "unicode_alternates": ["2B55-FE0F"],
+ "unicode_alternates": [
+ "2B55-FE0F"
+ ],
"name": "heavy large circle",
"shortname": ":o:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["circle", "round"],
+ "keywords": [
+ "circle",
+ "round"
+ ],
"moji": "⭕"
},
"o2": {
@@ -9188,7 +19148,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "letter", "red-square"],
+ "keywords": [
+ "alphabet",
+ "letter",
+ "red-square"
+ ],
"moji": "🅾"
},
"ocean": {
@@ -9199,7 +19163,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sea", "water", "wave", "ocean", "wave", "surf", "beach", "tide"],
+ "keywords": [
+ "sea",
+ "water",
+ "wave",
+ "ocean",
+ "wave",
+ "surf",
+ "beach",
+ "tide"
+ ],
"moji": "🌊"
},
"octopus": {
@@ -9210,7 +19183,12 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "creature", "ocean", "sea"],
+ "keywords": [
+ "animal",
+ "creature",
+ "ocean",
+ "sea"
+ ],
"moji": "🐙"
},
"oden": {
@@ -9221,7 +19199,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "japanese", "oden", "seafood", "casserole", "stew"],
+ "keywords": [
+ "food",
+ "japanese",
+ "oden",
+ "seafood",
+ "casserole",
+ "stew"
+ ],
"moji": "🍢"
},
"office": {
@@ -9232,7 +19217,11 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "bureau", "work"],
+ "keywords": [
+ "building",
+ "bureau",
+ "work"
+ ],
"moji": "🏢"
},
"oil": {
@@ -9241,9 +19230,13 @@
"name": "oil drum",
"shortname": ":oil:",
"category": "objects_symbols",
- "aliases": [":oil_drum:"],
+ "aliases": [
+ ":oil_drum:"
+ ],
"aliases_ascii": [],
- "keywords": ["petroleum"]
+ "keywords": [
+ "petroleum"
+ ]
},
"ok": {
"unicode": "1F197",
@@ -9253,7 +19246,12 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["agree", "blue-square", "good", "yes"],
+ "keywords": [
+ "agree",
+ "blue-square",
+ "good",
+ "yes"
+ ],
"moji": "🆗"
},
"ok_hand": {
@@ -9264,9 +19262,126 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fingers", "limbs", "perfect", "okay", "ok", "smoke", "smoking", "marijuana", "joint", "pot", "420"],
+ "keywords": [
+ "fingers",
+ "limbs",
+ "perfect",
+ "okay",
+ "ok",
+ "smoke",
+ "smoking",
+ "marijuana",
+ "joint",
+ "pot",
+ "420"
+ ],
"moji": "👌"
},
+ "ok_hand_tone1": {
+ "unicode": "1F44C-1F3FB",
+ "unicode_alternates": "",
+ "name": "ok hand sign tone 1",
+ "shortname": ":ok_hand_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "limbs",
+ "perfect",
+ "okay",
+ "smoke",
+ "smoking",
+ "marijuana",
+ "joint",
+ "pot",
+ "420"
+ ]
+ },
+ "ok_hand_tone2": {
+ "unicode": "1F44C-1F3FC",
+ "unicode_alternates": "",
+ "name": "ok hand sign tone 2",
+ "shortname": ":ok_hand_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "limbs",
+ "perfect",
+ "okay",
+ "smoke",
+ "smoking",
+ "marijuana",
+ "joint",
+ "pot",
+ "420"
+ ]
+ },
+ "ok_hand_tone3": {
+ "unicode": "1F44C-1F3FD",
+ "unicode_alternates": "",
+ "name": "ok hand sign tone 3",
+ "shortname": ":ok_hand_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "limbs",
+ "perfect",
+ "okay",
+ "smoke",
+ "smoking",
+ "marijuana",
+ "joint",
+ "pot",
+ "420"
+ ]
+ },
+ "ok_hand_tone4": {
+ "unicode": "1F44C-1F3FE",
+ "unicode_alternates": "",
+ "name": "ok hand sign tone 4",
+ "shortname": ":ok_hand_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "limbs",
+ "perfect",
+ "okay",
+ "smoke",
+ "smoking",
+ "marijuana",
+ "joint",
+ "pot",
+ "420"
+ ]
+ },
+ "ok_hand_tone5": {
+ "unicode": "1F44C-1F3FF",
+ "unicode_alternates": "",
+ "name": "ok hand sign tone 5",
+ "shortname": ":ok_hand_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "limbs",
+ "perfect",
+ "okay",
+ "smoke",
+ "smoking",
+ "marijuana",
+ "joint",
+ "pot",
+ "420"
+ ]
+ },
"ok_woman": {
"unicode": "1F646",
"unicode_alternates": [],
@@ -9274,10 +19389,120 @@
"shortname": ":ok_woman:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["*\\0/*", "\\0/", "*\\O/*", "\\O/"],
- "keywords": ["female", "girl", "human", "pink", "women", "yes", "ok", "okay", "accept"],
+ "aliases_ascii": [
+ "*\\0/*",
+ "\\0/",
+ "*\\O/*",
+ "\\O/"
+ ],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "pink",
+ "women",
+ "yes",
+ "ok",
+ "okay",
+ "accept"
+ ],
"moji": "🙆"
},
+ "ok_woman_tone1": {
+ "unicode": "1F646-1F3FB",
+ "unicode_alternates": "",
+ "name": "face with ok gesture tone1",
+ "shortname": ":ok_woman_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "pink",
+ "women",
+ "yes",
+ "okay",
+ "accept"
+ ]
+ },
+ "ok_woman_tone2": {
+ "unicode": "1F646-1F3FC",
+ "unicode_alternates": "",
+ "name": "face with ok gesture tone2",
+ "shortname": ":ok_woman_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "pink",
+ "women",
+ "yes",
+ "okay",
+ "accept"
+ ]
+ },
+ "ok_woman_tone3": {
+ "unicode": "1F646-1F3FD",
+ "unicode_alternates": "",
+ "name": "face with ok gesture tone3",
+ "shortname": ":ok_woman_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "pink",
+ "women",
+ "yes",
+ "okay",
+ "accept"
+ ]
+ },
+ "ok_woman_tone4": {
+ "unicode": "1F646-1F3FE",
+ "unicode_alternates": "",
+ "name": "face with ok gesture tone4",
+ "shortname": ":ok_woman_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "pink",
+ "women",
+ "yes",
+ "okay",
+ "accept"
+ ]
+ },
+ "ok_woman_tone5": {
+ "unicode": "1F646-1F3FF",
+ "unicode_alternates": "",
+ "name": "face with ok gesture tone5",
+ "shortname": ":ok_woman_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "human",
+ "pink",
+ "women",
+ "yes",
+ "okay",
+ "accept"
+ ]
+ },
"older_man": {
"unicode": "1F474",
"unicode_alternates": [],
@@ -9286,20 +19511,197 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["human", "male", "men"],
+ "keywords": [
+ "human",
+ "male",
+ "men"
+ ],
"moji": "👴"
},
+ "older_man_tone1": {
+ "unicode": "1F474-1F3FB",
+ "unicode_alternates": "",
+ "name": "older man tone 1",
+ "shortname": ":older_man_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "men",
+ "grandpa",
+ "grandfather"
+ ]
+ },
+ "older_man_tone2": {
+ "unicode": "1F474-1F3FC",
+ "unicode_alternates": "",
+ "name": "older man tone 2",
+ "shortname": ":older_man_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "men",
+ "grandpa",
+ "grandfather"
+ ]
+ },
+ "older_man_tone3": {
+ "unicode": "1F474-1F3FD",
+ "unicode_alternates": "",
+ "name": "older man tone 3",
+ "shortname": ":older_man_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "men",
+ "grandpa",
+ "grandfather"
+ ]
+ },
+ "older_man_tone4": {
+ "unicode": "1F474-1F3FE",
+ "unicode_alternates": "",
+ "name": "older man tone 4",
+ "shortname": ":older_man_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "men",
+ "grandpa",
+ "grandfather"
+ ]
+ },
+ "older_man_tone5": {
+ "unicode": "1F474-1F3FF",
+ "unicode_alternates": "",
+ "name": "older man tone 5",
+ "shortname": ":older_man_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "men",
+ "grandpa",
+ "grandfather"
+ ]
+ },
"older_woman": {
"unicode": "1F475",
"unicode_alternates": [],
"name": "older woman",
"shortname": ":older_woman:",
"category": "emoticons",
- "aliases": [":grandma:"],
- "aliases_ascii": [],
- "keywords": ["female", "girl", "women", "grandma", "grandmother"],
+ "aliases": [
+ ":grandma:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "women",
+ "grandma",
+ "grandmother"
+ ],
"moji": "👵"
},
+ "older_woman_tone1": {
+ "unicode": "1F475-1F3FB",
+ "unicode_alternates": "",
+ "name": "older woman tone 1",
+ "shortname": ":older_woman_tone1:",
+ "category": "people",
+ "aliases": [
+ ":grandma_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "women",
+ "lady",
+ "grandma",
+ "grandmother"
+ ]
+ },
+ "older_woman_tone2": {
+ "unicode": "1F475-1F3FC",
+ "unicode_alternates": "",
+ "name": "older woman tone 2",
+ "shortname": ":older_woman_tone2:",
+ "category": "people",
+ "aliases": [
+ ":grandma_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "women",
+ "lady",
+ "grandma",
+ "grandmother"
+ ]
+ },
+ "older_woman_tone3": {
+ "unicode": "1F475-1F3FD",
+ "unicode_alternates": "",
+ "name": "older woman tone 3",
+ "shortname": ":older_woman_tone3:",
+ "category": "people",
+ "aliases": [
+ ":grandma_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "women",
+ "lady",
+ "grandma",
+ "grandmother"
+ ]
+ },
+ "older_woman_tone4": {
+ "unicode": "1F475-1F3FE",
+ "unicode_alternates": "",
+ "name": "older woman tone 4",
+ "shortname": ":older_woman_tone4:",
+ "category": "people",
+ "aliases": [
+ ":grandma_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "women",
+ "lady",
+ "grandma",
+ "grandmother"
+ ]
+ },
+ "older_woman_tone5": {
+ "unicode": "1F475-1F3FF",
+ "unicode_alternates": "",
+ "name": "older woman tone 5",
+ "shortname": ":older_woman_tone5:",
+ "category": "people",
+ "aliases": [
+ ":grandma_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "women",
+ "lady",
+ "grandma",
+ "grandmother"
+ ]
+ },
"om_symbol": {
"unicode": "1F549",
"unicode_alternates": [],
@@ -9308,7 +19710,16 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["hinduism", "sound", "spiritual", "icon", "dharmic", "buddhism", "jainism", "meditate"]
+ "keywords": [
+ "hinduism",
+ "sound",
+ "spiritual",
+ "icon",
+ "dharmic",
+ "buddhism",
+ "jainism",
+ "meditate"
+ ]
},
"on": {
"unicode": "1F51B",
@@ -9318,7 +19729,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "words"],
+ "keywords": [
+ "arrow",
+ "words"
+ ],
"moji": "🔛"
},
"oncoming_automobile": {
@@ -9329,7 +19743,14 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["car", "transportation", "vehicle", "sedan", "car", "automobile"],
+ "keywords": [
+ "car",
+ "transportation",
+ "vehicle",
+ "sedan",
+ "car",
+ "automobile"
+ ],
"moji": "🚘"
},
"oncoming_bus": {
@@ -9340,7 +19761,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "bus", "school", "city", "transportation", "public"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "bus",
+ "school",
+ "city",
+ "transportation",
+ "public"
+ ],
"moji": "🚍"
},
"oncoming_police_car": {
@@ -9351,7 +19780,19 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["enforcement", "law", "vehicle", "police", "car", "emergency", "ticket", "citation", "crime", "help", "officer"],
+ "keywords": [
+ "enforcement",
+ "law",
+ "vehicle",
+ "police",
+ "car",
+ "emergency",
+ "ticket",
+ "citation",
+ "crime",
+ "help",
+ "officer"
+ ],
"moji": "🚔"
},
"oncoming_taxi": {
@@ -9362,19 +19803,35 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cars", "uber", "vehicle", "taxi", "car", "automobile", "city", "transport", "service"],
+ "keywords": [
+ "cars",
+ "uber",
+ "vehicle",
+ "taxi",
+ "car",
+ "automobile",
+ "city",
+ "transport",
+ "service"
+ ],
"moji": "🚖"
},
"one": {
"moji": "1️⃣",
"unicode": "0031-20E3",
- "unicode_alternates": ["0031-FE0F-20E3"],
+ "unicode_alternates": [
+ "0031-FE0F-20E3"
+ ],
"name": "digit one",
"shortname": ":one:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["1", "blue-square", "numbers"]
+ "keywords": [
+ "1",
+ "blue-square",
+ "numbers"
+ ]
},
"open_file_folder": {
"unicode": "1F4C2",
@@ -9384,7 +19841,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents", "load"],
+ "keywords": [
+ "documents",
+ "load"
+ ],
"moji": "📂"
},
"open_hands": {
@@ -9395,9 +19855,77 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["butterfly", "fingers"],
+ "keywords": [
+ "butterfly",
+ "fingers"
+ ],
"moji": "👐"
},
+ "open_hands_tone1": {
+ "unicode": "1F450-1F3FB",
+ "unicode_alternates": "",
+ "name": "open hands sign tone 1",
+ "shortname": ":open_hands_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "butterfly",
+ "fingers"
+ ]
+ },
+ "open_hands_tone2": {
+ "unicode": "1F450-1F3FC",
+ "unicode_alternates": "",
+ "name": "open hands sign tone 2",
+ "shortname": ":open_hands_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "butterfly",
+ "fingers"
+ ]
+ },
+ "open_hands_tone3": {
+ "unicode": "1F450-1F3FD",
+ "unicode_alternates": "",
+ "name": "open hands sign tone 3",
+ "shortname": ":open_hands_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "butterfly",
+ "fingers"
+ ]
+ },
+ "open_hands_tone4": {
+ "unicode": "1F450-1F3FE",
+ "unicode_alternates": "",
+ "name": "open hands sign tone 4",
+ "shortname": ":open_hands_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "butterfly",
+ "fingers"
+ ]
+ },
+ "open_hands_tone5": {
+ "unicode": "1F450-1F3FF",
+ "unicode_alternates": "",
+ "name": "open hands sign tone 5",
+ "shortname": ":open_hands_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "butterfly",
+ "fingers"
+ ]
+ },
"open_mouth": {
"unicode": "1F62E",
"unicode_alternates": [],
@@ -9405,8 +19933,24 @@
"shortname": ":open_mouth:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":-O", ":O", ":-o", ":o", "O_O", ">:O"],
- "keywords": ["face", "impressed", "mouth", "open", "jaw", "gapping", "surprise", "wow"],
+ "aliases_ascii": [
+ ":-O",
+ ":O",
+ ":-o",
+ ":o",
+ "O_O",
+ ">:O"
+ ],
+ "keywords": [
+ "face",
+ "impressed",
+ "mouth",
+ "open",
+ "jaw",
+ "gapping",
+ "surprise",
+ "wow"
+ ],
"moji": "😮"
},
"ophiuchus": {
@@ -9417,7 +19961,19 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ophiuchus", "serpent", "snake", "astrology", "greek", "constellation", "stars", "zodiac", "purple-square", "sign", "horoscope"],
+ "keywords": [
+ "ophiuchus",
+ "serpent",
+ "snake",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "purple-square",
+ "sign",
+ "horoscope"
+ ],
"moji": "⛎"
},
"optical_disk": {
@@ -9426,9 +19982,17 @@
"name": "optical disc icon",
"shortname": ":optical_disk:",
"category": "objects_symbols",
- "aliases": [":optical_disc_icon:"],
- "aliases_ascii": [],
- "keywords": ["cd", "dvd", "disc", "disk", "technology"]
+ "aliases": [
+ ":optical_disc_icon:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cd",
+ "dvd",
+ "disc",
+ "disk",
+ "technology"
+ ]
},
"orange_book": {
"unicode": "1F4D9",
@@ -9438,9 +20002,27 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["knowledge", "library", "read"],
+ "keywords": [
+ "knowledge",
+ "library",
+ "read"
+ ],
"moji": "📙"
},
+ "orthodox_cross": {
+ "unicode": "2626",
+ "unicode_alternates": "",
+ "name": "orthodox cross",
+ "shortname": ":orthodox_cross:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "christian",
+ "religion",
+ "symbol"
+ ]
+ },
"outbox_tray": {
"unicode": "1F4E4",
"unicode_alternates": [],
@@ -9449,7 +20031,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["email", "inbox"],
+ "keywords": [
+ "email",
+ "inbox"
+ ],
"moji": "📤"
},
"ox": {
@@ -9460,7 +20045,11 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "beef", "cow"],
+ "keywords": [
+ "animal",
+ "beef",
+ "cow"
+ ],
"moji": "🐂"
},
"package": {
@@ -9471,7 +20060,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["gift", "mail"],
+ "keywords": [
+ "gift",
+ "mail"
+ ],
"moji": "📦"
},
"page": {
@@ -9482,7 +20074,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["document"]
+ "keywords": [
+ "document"
+ ]
},
"page_facing_up": {
"unicode": "1F4C4",
@@ -9492,7 +20086,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents"],
+ "keywords": [
+ "documents"
+ ],
"moji": "📄"
},
"page_with_curl": {
@@ -9503,7 +20099,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents"],
+ "keywords": [
+ "documents"
+ ],
"moji": "📃"
},
"pager": {
@@ -9514,7 +20112,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bbcall", "oldschool"],
+ "keywords": [
+ "bbcall",
+ "oldschool"
+ ],
"moji": "📟"
},
"pages": {
@@ -9525,7 +20126,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents"]
+ "keywords": [
+ "documents"
+ ]
},
"paintbrush": {
"unicode": "1F58C",
@@ -9533,9 +20136,15 @@
"name": "lower left paintbrush",
"shortname": ":paintbrush:",
"category": "objects_symbols",
- "aliases": [":lower_left_paintbrush:"],
+ "aliases": [
+ ":lower_left_paintbrush:"
+ ],
"aliases_ascii": [],
- "keywords": ["brush", "art", "painting"]
+ "keywords": [
+ "brush",
+ "art",
+ "painting"
+ ]
},
"palm_tree": {
"unicode": "1F334",
@@ -9545,7 +20154,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "vegetable", "palm", "tree", "coconuts", "fronds", "warm", "tropical"],
+ "keywords": [
+ "nature",
+ "plant",
+ "vegetable",
+ "palm",
+ "tree",
+ "coconuts",
+ "fronds",
+ "warm",
+ "tropical"
+ ],
"moji": "🌴"
},
"panda_face": {
@@ -9556,7 +20175,22 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "panda", "bear", "face", "cub", "cute", "endearment", "friendship", "love", "bamboo", "china", "black", "white"],
+ "keywords": [
+ "animal",
+ "nature",
+ "panda",
+ "bear",
+ "face",
+ "cub",
+ "cute",
+ "endearment",
+ "friendship",
+ "love",
+ "bamboo",
+ "china",
+ "black",
+ "white"
+ ],
"moji": "🐼"
},
"paperclip": {
@@ -9567,7 +20201,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents", "stationery"],
+ "keywords": [
+ "documents",
+ "stationery"
+ ],
"moji": "📎"
},
"paperclips": {
@@ -9576,9 +20213,14 @@
"name": "linked paperclips",
"shortname": ":paperclips:",
"category": "objects_symbols",
- "aliases": [":linked_paperclips:"],
+ "aliases": [
+ ":linked_paperclips:"
+ ],
"aliases_ascii": [],
- "keywords": ["documents", "stationery"]
+ "keywords": [
+ "documents",
+ "stationery"
+ ]
},
"park": {
"unicode": "1F3DE",
@@ -9586,41 +20228,77 @@
"name": "national park",
"shortname": ":park:",
"category": "travel_places",
- "aliases": [":national_park:"],
- "aliases_ascii": [],
- "keywords": ["woods", "nature", "wildlife", "forest", "wilderness", "national"]
+ "aliases": [
+ ":national_park:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "woods",
+ "nature",
+ "wildlife",
+ "forest",
+ "wilderness",
+ "national"
+ ]
},
"parking": {
"unicode": "1F17F",
- "unicode_alternates": ["1F17F-FE0F"],
+ "unicode_alternates": [
+ "1F17F-FE0F"
+ ],
"name": "negative squared latin capital letter p",
"shortname": ":parking:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "blue-square", "cars", "letter"],
+ "keywords": [
+ "alphabet",
+ "blue-square",
+ "cars",
+ "letter"
+ ],
"moji": "🅿"
},
"part_alternation_mark": {
"unicode": "303D",
- "unicode_alternates": ["303D-FE0F"],
+ "unicode_alternates": [
+ "303D-FE0F"
+ ],
"name": "part alternation mark",
"shortname": ":part_alternation_mark:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["graph", "sing", "song", "vocal", "music", "karaoke", "cue", "letter", "m", "japanese"],
+ "keywords": [
+ "graph",
+ "sing",
+ "song",
+ "vocal",
+ "music",
+ "karaoke",
+ "cue",
+ "letter",
+ "m",
+ "japanese"
+ ],
"moji": "〽"
},
"partly_sunny": {
"unicode": "26C5",
- "unicode_alternates": ["26C5-FE0F"],
+ "unicode_alternates": [
+ "26C5-FE0F"
+ ],
"name": "sun behind cloud",
"shortname": ":partly_sunny:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cloud", "morning", "nature", "weather"],
+ "keywords": [
+ "cloud",
+ "morning",
+ "nature",
+ "weather"
+ ],
"moji": "⛅"
},
"passport_control": {
@@ -9631,9 +20309,48 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "custom", "passport", "official", "travel", "control", "foreign", "identification"],
+ "keywords": [
+ "blue-square",
+ "custom",
+ "passport",
+ "official",
+ "travel",
+ "control",
+ "foreign",
+ "identification"
+ ],
"moji": "🛂"
},
+ "pause_button": {
+ "unicode": "23F8",
+ "unicode_alternates": "",
+ "name": "double vertical bar",
+ "shortname": ":pause_button:",
+ "category": "symbols",
+ "aliases": [
+ ":double_vertical_bar:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pause",
+ "sound",
+ "symbol"
+ ]
+ },
+ "peace": {
+ "unicode": "262E",
+ "unicode_alternates": "",
+ "name": "peace symbol",
+ "shortname": ":peace:",
+ "category": "symbols",
+ "aliases": [
+ ":peace_symbol:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "sign"
+ ]
+ },
"peach": {
"unicode": "1F351",
"unicode_alternates": [],
@@ -9642,7 +20359,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "nature", "peach", "fruit", "juicy", "pit"],
+ "keywords": [
+ "food",
+ "fruit",
+ "nature",
+ "peach",
+ "fruit",
+ "juicy",
+ "pit"
+ ],
"moji": "🍑"
},
"pear": {
@@ -9653,7 +20378,13 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fruit", "nature", "pear", "fruit", "shape"],
+ "keywords": [
+ "fruit",
+ "nature",
+ "pear",
+ "fruit",
+ "shape"
+ ],
"moji": "🍐"
},
"pen_ballpoint": {
@@ -9662,9 +20393,15 @@
"name": "lower left ballpoint pen",
"shortname": ":pen_ballpoint:",
"category": "objects_symbols",
- "aliases": [":lower_left_ballpoint_pen:"],
+ "aliases": [
+ ":lower_left_ballpoint_pen:"
+ ],
"aliases_ascii": [],
- "keywords": ["write", "bic", "ink"]
+ "keywords": [
+ "write",
+ "bic",
+ "ink"
+ ]
},
"pen_fountain": {
"unicode": "1F58B",
@@ -9672,9 +20409,15 @@
"name": "lower left fountain pen",
"shortname": ":pen_fountain:",
"category": "objects_symbols",
- "aliases": [":lower_left_fountain_pen:"],
+ "aliases": [
+ ":lower_left_fountain_pen:"
+ ],
"aliases_ascii": [],
- "keywords": ["write", "calligraphy", "ink"]
+ "keywords": [
+ "write",
+ "calligraphy",
+ "ink"
+ ]
},
"pencil": {
"unicode": "1F4DD",
@@ -9682,20 +20425,33 @@
"name": "memo",
"shortname": ":pencil:",
"category": "objects",
- "aliases": [":memo:"],
- "aliases_ascii": [],
- "keywords": ["documents", "paper", "station", "write"],
+ "aliases": [
+ ":memo:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "documents",
+ "paper",
+ "station",
+ "write"
+ ],
"moji": "📝"
},
"pencil2": {
"unicode": "270F",
- "unicode_alternates": ["270F-FE0F"],
+ "unicode_alternates": [
+ "270F-FE0F"
+ ],
"name": "pencil",
"shortname": ":pencil2:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["paper", "stationery", "write"],
+ "keywords": [
+ "paper",
+ "stationery",
+ "write"
+ ],
"moji": "✏"
},
"pencil3": {
@@ -9704,9 +20460,15 @@
"name": "lower left pencil",
"shortname": ":pencil3:",
"category": "objects_symbols",
- "aliases": [":lower_left_pencil:"],
+ "aliases": [
+ ":lower_left_pencil:"
+ ],
"aliases_ascii": [],
- "keywords": ["paper", "stationery", "write"]
+ "keywords": [
+ "paper",
+ "stationery",
+ "write"
+ ]
},
"penguin": {
"unicode": "1F427",
@@ -9716,7 +20478,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐧"
},
"pennant_black": {
@@ -9725,9 +20490,14 @@
"name": "black pennant",
"shortname": ":pennant_black:",
"category": "objects_symbols",
- "aliases": [":black_pennant:"],
+ "aliases": [
+ ":black_pennant:"
+ ],
"aliases_ascii": [],
- "keywords": ["flag", "athletics"]
+ "keywords": [
+ "flag",
+ "athletics"
+ ]
},
"pennant_white": {
"unicode": "1F3F1",
@@ -9735,9 +20505,14 @@
"name": "white pennant",
"shortname": ":pennant_white:",
"category": "objects_symbols",
- "aliases": [":white_pennant:"],
+ "aliases": [
+ ":white_pennant:"
+ ],
"aliases_ascii": [],
- "keywords": ["flag", "athletics"]
+ "keywords": [
+ "flag",
+ "athletics"
+ ]
},
"pensive": {
"unicode": "1F614",
@@ -9747,7 +20522,18 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "okay", "sad", "pensive", "thoughtful", "think", "reflective", "wistful", "meditate", "serious"],
+ "keywords": [
+ "face",
+ "okay",
+ "sad",
+ "pensive",
+ "thoughtful",
+ "think",
+ "reflective",
+ "wistful",
+ "meditate",
+ "serious"
+ ],
"moji": "😔"
},
"performing_arts": {
@@ -9758,7 +20544,19 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["acting", "drama", "theater", "performing", "arts", "performance", "entertainment", "acting", "story", "mask", "masks"],
+ "keywords": [
+ "acting",
+ "drama",
+ "theater",
+ "performing",
+ "arts",
+ "performance",
+ "entertainment",
+ "acting",
+ "story",
+ "mask",
+ "masks"
+ ],
"moji": "🎭"
},
"persevere": {
@@ -9768,8 +20566,17 @@
"shortname": ":persevere:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [">.<"],
- "keywords": ["endure", "persevere", "face", "no", "sick", "upset"],
+ "aliases_ascii": [
+ ">.<"
+ ],
+ "keywords": [
+ "endure",
+ "persevere",
+ "face",
+ "no",
+ "sick",
+ "upset"
+ ],
"moji": "😣"
},
"person_frowning": {
@@ -9780,9 +20587,107 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman", "dejected", "rejected", "sad", "frown"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "dejected",
+ "rejected",
+ "sad",
+ "frown"
+ ],
"moji": "🙍"
},
+ "person_frowning_tone1": {
+ "unicode": "1F64D-1F3FB",
+ "unicode_alternates": "",
+ "name": "person frowning tone 1",
+ "shortname": ":person_frowning_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "dejected",
+ "rejected",
+ "sad",
+ "frown"
+ ]
+ },
+ "person_frowning_tone2": {
+ "unicode": "1F64D-1F3FC",
+ "unicode_alternates": "",
+ "name": "person frowning tone 2",
+ "shortname": ":person_frowning_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "dejected",
+ "rejected",
+ "sad",
+ "frown"
+ ]
+ },
+ "person_frowning_tone3": {
+ "unicode": "1F64D-1F3FD",
+ "unicode_alternates": "",
+ "name": "person frowning tone 3",
+ "shortname": ":person_frowning_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "dejected",
+ "rejected",
+ "sad",
+ "frown"
+ ]
+ },
+ "person_frowning_tone4": {
+ "unicode": "1F64D-1F3FE",
+ "unicode_alternates": "",
+ "name": "person frowning tone 4",
+ "shortname": ":person_frowning_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "dejected",
+ "rejected",
+ "sad",
+ "frown"
+ ]
+ },
+ "person_frowning_tone5": {
+ "unicode": "1F64D-1F3FF",
+ "unicode_alternates": "",
+ "name": "person frowning tone 5",
+ "shortname": ":person_frowning_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "dejected",
+ "rejected",
+ "sad",
+ "frown"
+ ]
+ },
"person_with_blond_hair": {
"unicode": "1F471",
"unicode_alternates": [],
@@ -9791,9 +20696,107 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["male", "man", "blonde", "young", "western", "westerner", "occidental"],
+ "keywords": [
+ "male",
+ "man",
+ "blonde",
+ "young",
+ "western",
+ "westerner",
+ "occidental"
+ ],
"moji": "👱"
},
+ "person_with_blond_hair_tone1": {
+ "unicode": "1F471-1F3FB",
+ "unicode_alternates": "",
+ "name": "person with blond hair tone 1",
+ "shortname": ":person_with_blond_hair_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "man",
+ "blonde",
+ "young",
+ "western",
+ "westerner",
+ "occidental"
+ ]
+ },
+ "person_with_blond_hair_tone2": {
+ "unicode": "1F471-1F3FC",
+ "unicode_alternates": "",
+ "name": "person with blond hair tone 2",
+ "shortname": ":person_with_blond_hair_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "man",
+ "blonde",
+ "young",
+ "western",
+ "westerner",
+ "occidental"
+ ]
+ },
+ "person_with_blond_hair_tone3": {
+ "unicode": "1F471-1F3FD",
+ "unicode_alternates": "",
+ "name": "person with blond hair tone 3",
+ "shortname": ":person_with_blond_hair_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "man",
+ "blonde",
+ "young",
+ "western",
+ "westerner",
+ "occidental"
+ ]
+ },
+ "person_with_blond_hair_tone4": {
+ "unicode": "1F471-1F3FE",
+ "unicode_alternates": "",
+ "name": "person with blond hair tone 4",
+ "shortname": ":person_with_blond_hair_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "man",
+ "blonde",
+ "young",
+ "western",
+ "westerner",
+ "occidental"
+ ]
+ },
+ "person_with_blond_hair_tone5": {
+ "unicode": "1F471-1F3FF",
+ "unicode_alternates": "",
+ "name": "person with blond hair tone 5",
+ "shortname": ":person_with_blond_hair_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "male",
+ "man",
+ "blonde",
+ "young",
+ "western",
+ "westerner",
+ "occidental"
+ ]
+ },
"person_with_pouting_face": {
"unicode": "1F64E",
"unicode_alternates": [],
@@ -9802,9 +20805,121 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman", "pout", "sexy", "cute", "annoyed"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "pout",
+ "sexy",
+ "cute",
+ "annoyed"
+ ],
"moji": "🙎"
},
+ "person_with_pouting_face_tone1": {
+ "unicode": "1F64E-1F3FB",
+ "unicode_alternates": "",
+ "name": "person with pouting face tone1",
+ "shortname": ":person_with_pouting_face_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "pout",
+ "sexy",
+ "cute",
+ "annoyed"
+ ]
+ },
+ "person_with_pouting_face_tone2": {
+ "unicode": "1F64E-1F3FC",
+ "unicode_alternates": "",
+ "name": "person with pouting face tone2",
+ "shortname": ":person_with_pouting_face_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "pout",
+ "sexy",
+ "cute",
+ "annoyed"
+ ]
+ },
+ "person_with_pouting_face_tone3": {
+ "unicode": "1F64E-1F3FD",
+ "unicode_alternates": "",
+ "name": "person with pouting face tone3",
+ "shortname": ":person_with_pouting_face_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "pout",
+ "sexy",
+ "cute",
+ "annoyed"
+ ]
+ },
+ "person_with_pouting_face_tone4": {
+ "unicode": "1F64E-1F3FE",
+ "unicode_alternates": "",
+ "name": "person with pouting face tone4",
+ "shortname": ":person_with_pouting_face_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "pout",
+ "sexy",
+ "cute",
+ "annoyed"
+ ]
+ },
+ "person_with_pouting_face_tone5": {
+ "unicode": "1F64E-1F3FF",
+ "unicode_alternates": "",
+ "name": "person with pouting face tone5",
+ "shortname": ":person_with_pouting_face_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "pout",
+ "sexy",
+ "cute",
+ "annoyed"
+ ]
+ },
+ "pick": {
+ "unicode": "26CF",
+ "unicode_alternates": "",
+ "name": "pick",
+ "shortname": ":pick:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "mining",
+ "object",
+ "tool"
+ ]
+ },
"pig": {
"unicode": "1F437",
"unicode_alternates": [],
@@ -9813,7 +20928,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "oink"],
+ "keywords": [
+ "animal",
+ "oink"
+ ],
"moji": "🐷"
},
"pig2": {
@@ -9824,7 +20942,21 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "pig", "piggy", "pork", "ham", "hog", "bacon", "oink", "slop", "livestock", "greed", "greedy"],
+ "keywords": [
+ "animal",
+ "nature",
+ "pig",
+ "piggy",
+ "pork",
+ "ham",
+ "hog",
+ "bacon",
+ "oink",
+ "slop",
+ "livestock",
+ "greed",
+ "greedy"
+ ],
"moji": "🐖"
},
"pig_nose": {
@@ -9835,7 +20967,20 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "oink", "pig", "nose", "snout", "food", "eat", "cute", "oink", "pink", "smell", "truffle"],
+ "keywords": [
+ "animal",
+ "oink",
+ "pig",
+ "nose",
+ "snout",
+ "food",
+ "eat",
+ "cute",
+ "oink",
+ "pink",
+ "smell",
+ "truffle"
+ ],
"moji": "🐽"
},
"pill": {
@@ -9846,7 +20991,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["health", "medicine"],
+ "keywords": [
+ "health",
+ "medicine"
+ ],
"moji": "💊"
},
"pineapple": {
@@ -9857,28 +21005,68 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "nature", "pineapple", "pina", "tropical", "flower"],
+ "keywords": [
+ "food",
+ "fruit",
+ "nature",
+ "pineapple",
+ "pina",
+ "tropical",
+ "flower"
+ ],
"moji": "🍍"
},
+ "ping_pong": {
+ "unicode": "1F3D3",
+ "unicode_alternates": "",
+ "name": "table tennis paddle and ball",
+ "shortname": ":ping_pong:",
+ "category": "activity",
+ "aliases": [
+ ":table_tennis:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"piracy": {
"unicode": "1F572",
"unicode_alternates": [],
"name": "no piracy",
"shortname": ":piracy:",
"category": "objects_symbols",
- "aliases": [":no_piracy:"],
+ "aliases": [
+ ":no_piracy:"
+ ],
"aliases_ascii": [],
- "keywords": ["theft", "rule"]
+ "keywords": [
+ "theft",
+ "rule"
+ ]
},
"pisces": {
"unicode": "2653",
- "unicode_alternates": ["2653-FE0F"],
+ "unicode_alternates": [
+ "2653-FE0F"
+ ],
"name": "pisces",
"shortname": ":pisces:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["pisces", "fish", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "purple-square", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "pisces",
+ "fish",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "purple-square",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♓"
},
"pizza": {
@@ -9889,9 +21077,48 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "party", "pizza", "pie", "new york", "italian", "italy", "slice", "peperoni"],
+ "keywords": [
+ "food",
+ "party",
+ "pizza",
+ "pie",
+ "new york",
+ "italian",
+ "italy",
+ "slice",
+ "peperoni"
+ ],
"moji": "🍕"
},
+ "place_of_worship": {
+ "unicode": "1F6D0",
+ "unicode_alternates": "",
+ "name": "place of worship",
+ "shortname": ":place_of_worship:",
+ "category": "symbols",
+ "aliases": [
+ ":worship_symbol:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "play_pause": {
+ "unicode": "23EF",
+ "unicode_alternates": "",
+ "name": "black right-pointing double triangle with double vertical bar",
+ "shortname": ":play_pause:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrow",
+ "pause",
+ "play",
+ "right",
+ "sound",
+ "symbol"
+ ]
+ },
"point_down": {
"unicode": "1F447",
"unicode_alternates": [],
@@ -9900,9 +21127,83 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["direction", "fingers", "hand"],
+ "keywords": [
+ "direction",
+ "fingers",
+ "hand"
+ ],
"moji": "👇"
},
+ "point_down_tone1": {
+ "unicode": "1F447-1F3FB",
+ "unicode_alternates": "",
+ "name": "white down pointing backhand index tone 1",
+ "shortname": ":point_down_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_down_tone2": {
+ "unicode": "1F447-1F3FC",
+ "unicode_alternates": "",
+ "name": "white down pointing backhand index tone 2",
+ "shortname": ":point_down_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_down_tone3": {
+ "unicode": "1F447-1F3FD",
+ "unicode_alternates": "",
+ "name": "white down pointing backhand index tone 3",
+ "shortname": ":point_down_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_down_tone4": {
+ "unicode": "1F447-1F3FE",
+ "unicode_alternates": "",
+ "name": "white down pointing backhand index tone 4",
+ "shortname": ":point_down_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_down_tone5": {
+ "unicode": "1F447-1F3FF",
+ "unicode_alternates": "",
+ "name": "white down pointing backhand index tone 5",
+ "shortname": ":point_down_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
"point_left": {
"unicode": "1F448",
"unicode_alternates": [],
@@ -9911,9 +21212,83 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["direction", "fingers", "hand"],
+ "keywords": [
+ "direction",
+ "fingers",
+ "hand"
+ ],
"moji": "👈"
},
+ "point_left_tone1": {
+ "unicode": "1F448-1F3FB",
+ "unicode_alternates": "",
+ "name": "white left pointing backhand index tone 1",
+ "shortname": ":point_left_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_left_tone2": {
+ "unicode": "1F448-1F3FC",
+ "unicode_alternates": "",
+ "name": "white left pointing backhand index tone 2",
+ "shortname": ":point_left_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_left_tone3": {
+ "unicode": "1F448-1F3FD",
+ "unicode_alternates": "",
+ "name": "white left pointing backhand index tone 3",
+ "shortname": ":point_left_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_left_tone4": {
+ "unicode": "1F448-1F3FE",
+ "unicode_alternates": "",
+ "name": "white left pointing backhand index tone 4",
+ "shortname": ":point_left_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_left_tone5": {
+ "unicode": "1F448-1F3FF",
+ "unicode_alternates": "",
+ "name": "white left pointing backhand index tone 5",
+ "shortname": ":point_left_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
"point_right": {
"unicode": "1F449",
"unicode_alternates": [],
@@ -9922,18 +21297,98 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["direction", "fingers", "hand"],
+ "keywords": [
+ "direction",
+ "fingers",
+ "hand"
+ ],
"moji": "👉"
},
+ "point_right_tone1": {
+ "unicode": "1F449-1F3FB",
+ "unicode_alternates": "",
+ "name": "white right pointing backhand index tone 1",
+ "shortname": ":point_right_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_right_tone2": {
+ "unicode": "1F449-1F3FC",
+ "unicode_alternates": "",
+ "name": "white right pointing backhand index tone 2",
+ "shortname": ":point_right_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_right_tone3": {
+ "unicode": "1F449-1F3FD",
+ "unicode_alternates": "",
+ "name": "white right pointing backhand index tone 3",
+ "shortname": ":point_right_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_right_tone4": {
+ "unicode": "1F449-1F3FE",
+ "unicode_alternates": "",
+ "name": "white right pointing backhand index tone 4",
+ "shortname": ":point_right_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
+ "point_right_tone5": {
+ "unicode": "1F449-1F3FF",
+ "unicode_alternates": "",
+ "name": "white right pointing backhand index tone 5",
+ "shortname": ":point_right_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand"
+ ]
+ },
"point_up": {
"unicode": "261D",
- "unicode_alternates": ["261D-FE0F"],
+ "unicode_alternates": [
+ "261D-FE0F"
+ ],
"name": "white up pointing index",
"shortname": ":point_up:",
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["direction", "fingers", "hand"],
+ "keywords": [
+ "direction",
+ "fingers",
+ "hand"
+ ],
"moji": "☝"
},
"point_up_2": {
@@ -9944,9 +21399,163 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["direction", "fingers", "hand"],
+ "keywords": [
+ "direction",
+ "fingers",
+ "hand"
+ ],
"moji": "👆"
},
+ "point_up_2_tone1": {
+ "unicode": "1F446-1F3FB",
+ "unicode_alternates": "",
+ "name": "white up pointing backhand index tone 1",
+ "shortname": ":point_up_2_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_2_tone2": {
+ "unicode": "1F446-1F3FC",
+ "unicode_alternates": "",
+ "name": "white up pointing backhand index tone 2",
+ "shortname": ":point_up_2_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_2_tone3": {
+ "unicode": "1F446-1F3FD",
+ "unicode_alternates": "",
+ "name": "white up pointing backhand index tone 3",
+ "shortname": ":point_up_2_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_2_tone4": {
+ "unicode": "1F446-1F3FE",
+ "unicode_alternates": "",
+ "name": "white up pointing backhand index tone 4",
+ "shortname": ":point_up_2_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_2_tone5": {
+ "unicode": "1F446-1F3FF",
+ "unicode_alternates": "",
+ "name": "white up pointing backhand index tone 5",
+ "shortname": ":point_up_2_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_tone1": {
+ "unicode": "261D-1F3FB",
+ "unicode_alternates": "",
+ "name": "white up pointing index tone 1",
+ "shortname": ":point_up_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_tone2": {
+ "unicode": "261D-1F3FC",
+ "unicode_alternates": "",
+ "name": "white up pointing index tone 2",
+ "shortname": ":point_up_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_tone3": {
+ "unicode": "261D-1F3FD",
+ "unicode_alternates": "",
+ "name": "white up pointing index tone 3",
+ "shortname": ":point_up_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_tone4": {
+ "unicode": "261D-1F3FE",
+ "unicode_alternates": "",
+ "name": "white up pointing index tone 4",
+ "shortname": ":point_up_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
+ "point_up_tone5": {
+ "unicode": "261D-1F3FF",
+ "unicode_alternates": "",
+ "name": "white up pointing index tone 5",
+ "shortname": ":point_up_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "direction",
+ "finger",
+ "hand",
+ "one"
+ ]
+ },
"police_car": {
"unicode": "1F693",
"unicode_alternates": [],
@@ -9955,7 +21564,21 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cars", "enforcement", "law", "transportation", "vehicle", "police", "car", "emergency", "ticket", "citation", "crime", "help", "officer"],
+ "keywords": [
+ "cars",
+ "enforcement",
+ "law",
+ "transportation",
+ "vehicle",
+ "police",
+ "car",
+ "emergency",
+ "ticket",
+ "citation",
+ "crime",
+ "help",
+ "officer"
+ ],
"moji": "🚓"
},
"poodle": {
@@ -9966,7 +21589,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["101", "animal", "dog", "nature", "poodle", "dog", "clip", "showy", "sophisticated", "vain"],
+ "keywords": [
+ "101",
+ "animal",
+ "dog",
+ "nature",
+ "poodle",
+ "dog",
+ "clip",
+ "showy",
+ "sophisticated",
+ "vain"
+ ],
"moji": "🐩"
},
"poop": {
@@ -9975,11 +21609,31 @@
"name": "pile of poo",
"shortname": ":poop:",
"category": "emoticons",
- "aliases": [":shit:", ":hankey:", ":poo:"],
- "aliases_ascii": [],
- "keywords": ["poop", "shit", "shitface", "turd", "poo"],
+ "aliases": [
+ ":shit:",
+ ":hankey:",
+ ":poo:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "poop",
+ "shit",
+ "shitface",
+ "turd",
+ "poo"
+ ],
"moji": "💩"
},
+ "popcorn": {
+ "unicode": "1F37F",
+ "unicode_alternates": "",
+ "name": "popcorn",
+ "shortname": ":popcorn:",
+ "category": "foods",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"post_office": {
"unicode": "1F3E3",
"unicode_alternates": [],
@@ -9988,7 +21642,11 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "communication", "email"],
+ "keywords": [
+ "building",
+ "communication",
+ "email"
+ ],
"moji": "🏣"
},
"postal_horn": {
@@ -9999,7 +21657,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["instrument", "music"],
+ "keywords": [
+ "instrument",
+ "music"
+ ],
"moji": "📯"
},
"postbox": {
@@ -10010,7 +21671,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["email", "envelope", "letter"],
+ "keywords": [
+ "email",
+ "envelope",
+ "letter"
+ ],
"moji": "📮"
},
"potable_water": {
@@ -10021,7 +21686,21 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "cleaning", "faucet", "liquid", "restroom", "potable", "water", "drinkable", "pure", "clear", "clean", "aqua", "h20"],
+ "keywords": [
+ "blue-square",
+ "cleaning",
+ "faucet",
+ "liquid",
+ "restroom",
+ "potable",
+ "water",
+ "drinkable",
+ "pure",
+ "clear",
+ "clean",
+ "aqua",
+ "h20"
+ ],
"moji": "🚰"
},
"pouch": {
@@ -10032,7 +21711,16 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accessories", "bag", "pouch", "bag", "cosmetic", "packing", "grandma", "makeup"],
+ "keywords": [
+ "accessories",
+ "bag",
+ "pouch",
+ "bag",
+ "cosmetic",
+ "packing",
+ "grandma",
+ "makeup"
+ ],
"moji": "👝"
},
"poultry_leg": {
@@ -10043,7 +21731,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "meat", "poultry", "leg", "chicken", "fried"],
+ "keywords": [
+ "food",
+ "meat",
+ "poultry",
+ "leg",
+ "chicken",
+ "fried"
+ ],
"moji": "🍗"
},
"pound": {
@@ -10054,7 +21749,24 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bills", "british", "currency", "england", "money", "sterling", "uk", "pound", "britain", "british", "banknote", "money", "currency", "paper", "cash", "bills"],
+ "keywords": [
+ "bills",
+ "british",
+ "currency",
+ "england",
+ "money",
+ "sterling",
+ "uk",
+ "pound",
+ "britain",
+ "british",
+ "banknote",
+ "money",
+ "currency",
+ "paper",
+ "cash",
+ "bills"
+ ],
"moji": "💷"
},
"pouting_cat": {
@@ -10065,7 +21777,15 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "pout", "annoyed", "miffed", "glower", "frown"],
+ "keywords": [
+ "animal",
+ "cats",
+ "pout",
+ "annoyed",
+ "miffed",
+ "glower",
+ "frown"
+ ],
"moji": "😾"
},
"pray": {
@@ -10076,9 +21796,136 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["highfive", "hope", "namaste", "please", "wish", "pray", "high five", "hands", "sorrow", "regret", "sorry"],
+ "keywords": [
+ "highfive",
+ "hope",
+ "namaste",
+ "please",
+ "wish",
+ "pray",
+ "high five",
+ "hands",
+ "sorrow",
+ "regret",
+ "sorry"
+ ],
"moji": "🙏"
},
+ "pray_tone1": {
+ "unicode": "1F64F-1F3FB",
+ "unicode_alternates": "",
+ "name": "person with folded hands tone 1",
+ "shortname": ":pray_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "highfive",
+ "hope",
+ "namaste",
+ "please",
+ "wish",
+ "pray",
+ "high five",
+ "sorrow",
+ "regret",
+ "sorry"
+ ]
+ },
+ "pray_tone2": {
+ "unicode": "1F64F-1F3FC",
+ "unicode_alternates": "",
+ "name": "person with folded hands tone 2",
+ "shortname": ":pray_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "highfive",
+ "hope",
+ "namaste",
+ "please",
+ "wish",
+ "pray",
+ "high five",
+ "sorrow",
+ "regret",
+ "sorry"
+ ]
+ },
+ "pray_tone3": {
+ "unicode": "1F64F-1F3FD",
+ "unicode_alternates": "",
+ "name": "person with folded hands tone 3",
+ "shortname": ":pray_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "highfive",
+ "hope",
+ "namaste",
+ "please",
+ "wish",
+ "pray",
+ "high five",
+ "sorrow",
+ "regret",
+ "sorry"
+ ]
+ },
+ "pray_tone4": {
+ "unicode": "1F64F-1F3FE",
+ "unicode_alternates": "",
+ "name": "person with folded hands tone 4",
+ "shortname": ":pray_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "highfive",
+ "hope",
+ "namaste",
+ "please",
+ "wish",
+ "pray",
+ "high five",
+ "sorrow",
+ "regret",
+ "sorry"
+ ]
+ },
+ "pray_tone5": {
+ "unicode": "1F64F-1F3FF",
+ "unicode_alternates": "",
+ "name": "person with folded hands tone 5",
+ "shortname": ":pray_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "highfive",
+ "hope",
+ "namaste",
+ "please",
+ "wish",
+ "pray",
+ "high five",
+ "sorrow",
+ "regret",
+ "sorry"
+ ]
+ },
+ "prayer_beads": {
+ "unicode": "1F4FF",
+ "unicode_alternates": "",
+ "name": "prayer beads",
+ "shortname": ":prayer_beads:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"princess": {
"unicode": "1F478",
"unicode_alternates": [],
@@ -10087,9 +21934,138 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blond", "crown", "female", "girl", "woman", "princess", "royal", "royalty", "king", "queen", "daughter", "disney", "high-maintenance"],
+ "keywords": [
+ "blond",
+ "crown",
+ "female",
+ "girl",
+ "woman",
+ "princess",
+ "royal",
+ "royalty",
+ "king",
+ "queen",
+ "daughter",
+ "disney",
+ "high-maintenance"
+ ],
"moji": "👸"
},
+ "princess_tone1": {
+ "unicode": "1F478-1F3FB",
+ "unicode_alternates": "",
+ "name": "princess tone 1",
+ "shortname": ":princess_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blond",
+ "crown",
+ "female",
+ "girl",
+ "woman",
+ "royal",
+ "royalty",
+ "king",
+ "queen",
+ "daughter",
+ "disney",
+ "high-maintenance"
+ ]
+ },
+ "princess_tone2": {
+ "unicode": "1F478-1F3FC",
+ "unicode_alternates": "",
+ "name": "princess tone 2",
+ "shortname": ":princess_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blond",
+ "crown",
+ "female",
+ "girl",
+ "woman",
+ "royal",
+ "royalty",
+ "king",
+ "queen",
+ "daughter",
+ "disney",
+ "high-maintenance"
+ ]
+ },
+ "princess_tone3": {
+ "unicode": "1F478-1F3FD",
+ "unicode_alternates": "",
+ "name": "princess tone 3",
+ "shortname": ":princess_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blond",
+ "crown",
+ "female",
+ "girl",
+ "woman",
+ "royal",
+ "royalty",
+ "king",
+ "queen",
+ "daughter",
+ "disney",
+ "high-maintenance"
+ ]
+ },
+ "princess_tone4": {
+ "unicode": "1F478-1F3FE",
+ "unicode_alternates": "",
+ "name": "princess tone 4",
+ "shortname": ":princess_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blond",
+ "crown",
+ "female",
+ "girl",
+ "woman",
+ "royal",
+ "royalty",
+ "king",
+ "queen",
+ "daughter",
+ "disney",
+ "high-maintenance"
+ ]
+ },
+ "princess_tone5": {
+ "unicode": "1F478-1F3FF",
+ "unicode_alternates": "",
+ "name": "princess tone 5",
+ "shortname": ":princess_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blond",
+ "crown",
+ "female",
+ "girl",
+ "woman",
+ "royal",
+ "royalty",
+ "king",
+ "queen",
+ "daughter",
+ "disney",
+ "high-maintenance"
+ ]
+ },
"printer": {
"unicode": "1F5A8",
"unicode_alternates": [],
@@ -10098,7 +22074,12 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["hardcopy", "paper", "inkjet", "laser"]
+ "keywords": [
+ "hardcopy",
+ "paper",
+ "inkjet",
+ "laser"
+ ]
},
"prohibited": {
"unicode": "1F6C7",
@@ -10106,9 +22087,19 @@
"name": "prohibited sign",
"shortname": ":prohibited:",
"category": "objects_symbols",
- "aliases": [":prohibited_sign:"],
- "aliases_ascii": [],
- "keywords": ["no", "not", "denied", "disallow", "forbid", "limit", "stop"]
+ "aliases": [
+ ":prohibited_sign:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "no",
+ "not",
+ "denied",
+ "disallow",
+ "forbid",
+ "limit",
+ "stop"
+ ]
},
"projector": {
"unicode": "1F4FD",
@@ -10116,9 +22107,18 @@
"name": "film projector",
"shortname": ":projector:",
"category": "objects_symbols",
- "aliases": [":film_projector:"],
- "aliases_ascii": [],
- "keywords": ["movie", "video", "motion", "picture", "8mm", "16mm"]
+ "aliases": [
+ ":film_projector:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "movie",
+ "video",
+ "motion",
+ "picture",
+ "8mm",
+ "16mm"
+ ]
},
"punch": {
"unicode": "1F44A",
@@ -10128,9 +22128,77 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fist", "hand"],
+ "keywords": [
+ "fist",
+ "hand"
+ ],
"moji": "👊"
},
+ "punch_tone1": {
+ "unicode": "1F44A-1F3FB",
+ "unicode_alternates": "",
+ "name": "fisted hand sign tone 1",
+ "shortname": ":punch_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fist",
+ "punch"
+ ]
+ },
+ "punch_tone2": {
+ "unicode": "1F44A-1F3FC",
+ "unicode_alternates": "",
+ "name": "fisted hand sign tone 2",
+ "shortname": ":punch_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fist",
+ "punch"
+ ]
+ },
+ "punch_tone3": {
+ "unicode": "1F44A-1F3FD",
+ "unicode_alternates": "",
+ "name": "fisted hand sign tone 3",
+ "shortname": ":punch_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fist",
+ "punch"
+ ]
+ },
+ "punch_tone4": {
+ "unicode": "1F44A-1F3FE",
+ "unicode_alternates": "",
+ "name": "fisted hand sign tone 4",
+ "shortname": ":punch_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fist",
+ "punch"
+ ]
+ },
+ "punch_tone5": {
+ "unicode": "1F44A-1F3FF",
+ "unicode_alternates": "",
+ "name": "fisted hand sign tone 5",
+ "shortname": ":punch_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fist",
+ "punch"
+ ]
+ },
"purple_heart": {
"unicode": "1F49C",
"unicode_alternates": [],
@@ -10139,7 +22207,25 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines", "purple", "violet", "heart", "love", "sensitive", "understanding", "compassionate", "compassion", "duty", "honor", "royalty", "veteran", "sacrifice"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines",
+ "purple",
+ "violet",
+ "heart",
+ "love",
+ "sensitive",
+ "understanding",
+ "compassionate",
+ "compassion",
+ "duty",
+ "honor",
+ "royalty",
+ "veteran",
+ "sacrifice"
+ ],
"moji": "💜"
},
"purse": {
@@ -10150,7 +22236,20 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accessories", "fashion", "money", "purse", "clutch", "bag", "handbag", "coin bag", "accessory", "money", "ladies", "shopping"],
+ "keywords": [
+ "accessories",
+ "fashion",
+ "money",
+ "purse",
+ "clutch",
+ "bag",
+ "handbag",
+ "coin bag",
+ "accessory",
+ "money",
+ "ladies",
+ "shopping"
+ ],
"moji": "👛"
},
"pushpin": {
@@ -10161,7 +22260,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["stationery"],
+ "keywords": [
+ "stationery"
+ ],
"moji": "📌"
},
"pushpin_black": {
@@ -10172,7 +22273,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["stationery"]
+ "keywords": [
+ "stationery"
+ ]
},
"put_litter_in_its_place": {
"unicode": "1F6AE",
@@ -10182,7 +22285,15 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "litter", "waste", "trash", "garbage", "receptacle", "can"],
+ "keywords": [
+ "blue-square",
+ "litter",
+ "waste",
+ "trash",
+ "garbage",
+ "receptacle",
+ "can"
+ ],
"moji": "🚮"
},
"question": {
@@ -10193,7 +22304,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["confused", "doubt"],
+ "keywords": [
+ "confused",
+ "doubt"
+ ],
"moji": "❓"
},
"rabbit": {
@@ -10204,7 +22318,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐰"
},
"rabbit2": {
@@ -10215,7 +22332,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "rabbit", "bunny", "easter", "reproduction", "prolific"],
+ "keywords": [
+ "animal",
+ "nature",
+ "rabbit",
+ "bunny",
+ "easter",
+ "reproduction",
+ "prolific"
+ ],
"moji": "🐇"
},
"race_car": {
@@ -10224,9 +22349,18 @@
"name": "racing car",
"shortname": ":race_car:",
"category": "activity",
- "aliases": [":racing_car:"],
- "aliases_ascii": [],
- "keywords": ["formula 1", "race", "stock", "nascar", "speed", "drive"]
+ "aliases": [
+ ":racing_car:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "formula 1",
+ "race",
+ "stock",
+ "nascar",
+ "speed",
+ "drive"
+ ]
},
"racehorse": {
"unicode": "1F40E",
@@ -10236,7 +22370,29 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "gamble", "horse", "powerful", "draft", "calvary", "cowboy", "cowgirl", "mounted", "race", "ride", "gallop", "trot", "colt", "filly", "mare", "stallion", "gelding", "yearling", "thoroughbred", "pony"],
+ "keywords": [
+ "animal",
+ "gamble",
+ "horse",
+ "powerful",
+ "draft",
+ "calvary",
+ "cowboy",
+ "cowgirl",
+ "mounted",
+ "race",
+ "ride",
+ "gallop",
+ "trot",
+ "colt",
+ "filly",
+ "mare",
+ "stallion",
+ "gelding",
+ "yearling",
+ "thoroughbred",
+ "pony"
+ ],
"moji": "🐎"
},
"radio": {
@@ -10247,7 +22403,12 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "music", "podcast", "program"],
+ "keywords": [
+ "communication",
+ "music",
+ "podcast",
+ "program"
+ ],
"moji": "📻"
},
"radio_button": {
@@ -10258,9 +22419,25 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["input"],
+ "keywords": [
+ "input"
+ ],
"moji": "🔘"
},
+ "radioactive": {
+ "unicode": "2622",
+ "unicode_alternates": "",
+ "name": "radioactive sign",
+ "shortname": ":radioactive:",
+ "category": "symbols",
+ "aliases": [
+ ":radioactive_sign:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "symbol"
+ ]
+ },
"rage": {
"unicode": "1F621",
"unicode_alternates": [],
@@ -10269,7 +22446,16 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["angry", "despise", "hate", "mad", "pout", "anger", "rage", "irate"],
+ "keywords": [
+ "angry",
+ "despise",
+ "hate",
+ "mad",
+ "pout",
+ "anger",
+ "rage",
+ "irate"
+ ],
"moji": "😡"
},
"railway_car": {
@@ -10280,7 +22466,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "railway", "rail", "car", "coach", "train"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "railway",
+ "rail",
+ "car",
+ "coach",
+ "train"
+ ],
"moji": "🚃"
},
"railway_track": {
@@ -10289,9 +22483,17 @@
"name": "railway track",
"shortname": ":railway_track:",
"category": "travel_places",
- "aliases": [":railroad_track:"],
- "aliases_ascii": [],
- "keywords": ["train", "trolley", "subway", "locomotive", "transit"]
+ "aliases": [
+ ":railroad_track:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "train",
+ "trolley",
+ "subway",
+ "locomotive",
+ "transit"
+ ]
},
"rainbow": {
"unicode": "1F308",
@@ -10301,7 +22503,21 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["happy", "nature", "photo", "sky", "unicorn", "rainbow", "color", "pride", "diversity", "spectrum", "refract", "leprechaun", "gold"],
+ "keywords": [
+ "happy",
+ "nature",
+ "photo",
+ "sky",
+ "unicorn",
+ "rainbow",
+ "color",
+ "pride",
+ "diversity",
+ "spectrum",
+ "refract",
+ "leprechaun",
+ "gold"
+ ],
"moji": "🌈"
},
"raised_hand": {
@@ -10312,9 +22528,83 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ],
"moji": "✋"
},
+ "raised_hand_tone1": {
+ "unicode": "270B-1F3FB",
+ "unicode_alternates": "",
+ "name": "raised hand tone 1",
+ "shortname": ":raised_hand_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "raised_hand_tone2": {
+ "unicode": "270B-1F3FC",
+ "unicode_alternates": "",
+ "name": "raised hand tone 2",
+ "shortname": ":raised_hand_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "raised_hand_tone3": {
+ "unicode": "270B-1F3FD",
+ "unicode_alternates": "",
+ "name": "raised hand tone 3",
+ "shortname": ":raised_hand_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "raised_hand_tone4": {
+ "unicode": "270B-1F3FE",
+ "unicode_alternates": "",
+ "name": "raised hand tone 4",
+ "shortname": ":raised_hand_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
+ "raised_hand_tone5": {
+ "unicode": "270B-1F3FF",
+ "unicode_alternates": "",
+ "name": "raised hand tone 5",
+ "shortname": ":raised_hand_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman"
+ ]
+ },
"raised_hands": {
"unicode": "1F64C",
"unicode_alternates": [],
@@ -10323,9 +22613,106 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["gesture", "hooray", "winning", "woot", "yay", "banzai"],
+ "keywords": [
+ "gesture",
+ "hooray",
+ "winning",
+ "woot",
+ "yay",
+ "banzai"
+ ],
"moji": "🙌"
},
+ "raised_hands_tone1": {
+ "unicode": "1F64C-1F3FB",
+ "unicode_alternates": "",
+ "name": "person raising both hands in celebration tone 1",
+ "shortname": ":raised_hands_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "gesture",
+ "hooray",
+ "winning",
+ "woot",
+ "yay",
+ "banzai",
+ "raised"
+ ]
+ },
+ "raised_hands_tone2": {
+ "unicode": "1F64C-1F3FC",
+ "unicode_alternates": "",
+ "name": "person raising both hands in celebration tone 2",
+ "shortname": ":raised_hands_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "gesture",
+ "hooray",
+ "winning",
+ "woot",
+ "yay",
+ "banzai",
+ "raised"
+ ]
+ },
+ "raised_hands_tone3": {
+ "unicode": "1F64C-1F3FD",
+ "unicode_alternates": "",
+ "name": "person raising both hands in celebration tone 3",
+ "shortname": ":raised_hands_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "gesture",
+ "hooray",
+ "winning",
+ "woot",
+ "yay",
+ "banzai",
+ "raised"
+ ]
+ },
+ "raised_hands_tone4": {
+ "unicode": "1F64C-1F3FE",
+ "unicode_alternates": "",
+ "name": "person raising both hands in celebration tone 4",
+ "shortname": ":raised_hands_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "gesture",
+ "hooray",
+ "winning",
+ "woot",
+ "yay",
+ "banzai",
+ "raised"
+ ]
+ },
+ "raised_hands_tone5": {
+ "unicode": "1F64C-1F3FF",
+ "unicode_alternates": "",
+ "name": "person raising both hands in celebration tone 5",
+ "shortname": ":raised_hands_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "gesture",
+ "hooray",
+ "winning",
+ "woot",
+ "yay",
+ "banzai",
+ "raised"
+ ]
+ },
"raising_hand": {
"unicode": "1F64B",
"unicode_alternates": [],
@@ -10334,9 +22721,108 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girl", "woman", "hand", "raise", "notice", "attention", "answer"],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "hand",
+ "raise",
+ "notice",
+ "attention",
+ "answer"
+ ],
"moji": "🙋"
},
+ "raising_hand_tone1": {
+ "unicode": "1F64B-1F3FB",
+ "unicode_alternates": "",
+ "name": "happy person raising one hand tone1",
+ "shortname": ":raising_hand_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "raise",
+ "notice",
+ "attention",
+ "answer"
+ ]
+ },
+ "raising_hand_tone2": {
+ "unicode": "1F64B-1F3FC",
+ "unicode_alternates": "",
+ "name": "happy person raising one hand tone2",
+ "shortname": ":raising_hand_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "raise",
+ "notice",
+ "attention",
+ "answer"
+ ]
+ },
+ "raising_hand_tone3": {
+ "unicode": "1F64B-1F3FD",
+ "unicode_alternates": "",
+ "name": "happy person raising one hand tone3",
+ "shortname": ":raising_hand_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "raise",
+ "notice",
+ "attention",
+ "answer"
+ ]
+ },
+ "raising_hand_tone4": {
+ "unicode": "1F64B-1F3FE",
+ "unicode_alternates": "",
+ "name": "happy person raising one hand tone4",
+ "shortname": ":raising_hand_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "raise",
+ "notice",
+ "attention",
+ "answer"
+ ]
+ },
+ "raising_hand_tone5": {
+ "unicode": "1F64B-1F3FF",
+ "unicode_alternates": "",
+ "name": "happy person raising one hand tone5",
+ "shortname": ":raising_hand_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "woman",
+ "raise",
+ "notice",
+ "attention",
+ "answer"
+ ]
+ },
"ram": {
"unicode": "1F40F",
"unicode_alternates": [],
@@ -10345,7 +22831,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "sheep", "ram", "sheep", "male", "horn", "horns"],
+ "keywords": [
+ "animal",
+ "nature",
+ "sheep",
+ "ram",
+ "sheep",
+ "male",
+ "horn",
+ "horns"
+ ],
"moji": "🐏"
},
"ramen": {
@@ -10356,7 +22851,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chipsticks", "food", "japanese", "noodle", "ramen", "noodles", "bowl", "steaming", "soup"],
+ "keywords": [
+ "chipsticks",
+ "food",
+ "japanese",
+ "noodle",
+ "ramen",
+ "noodles",
+ "bowl",
+ "steaming",
+ "soup"
+ ],
"moji": "🍜"
},
"rat": {
@@ -10367,18 +22872,45 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "mouse", "rat", "rodent", "crooked", "snitch"],
+ "keywords": [
+ "animal",
+ "mouse",
+ "rat",
+ "rodent",
+ "crooked",
+ "snitch"
+ ],
"moji": "🐀"
},
+ "record_button": {
+ "unicode": "23FA",
+ "unicode_alternates": "",
+ "name": "black circle for record",
+ "shortname": ":record_button:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sound",
+ "symbol"
+ ]
+ },
"recycle": {
"unicode": "267B",
- "unicode_alternates": ["267B-FE0F"],
+ "unicode_alternates": [
+ "267B-FE0F"
+ ],
"name": "black universal recycling symbol",
"shortname": ":recycle:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "environment", "garbage", "trash"],
+ "keywords": [
+ "arrow",
+ "environment",
+ "garbage",
+ "trash"
+ ],
"moji": "♻"
},
"red_car": {
@@ -10389,7 +22921,10 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle"],
+ "keywords": [
+ "transportation",
+ "vehicle"
+ ],
"moji": "🚗"
},
"red_circle": {
@@ -10400,7 +22935,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔴"
},
"registered": {
@@ -10412,17 +22949,28 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alphabet", "circle"]
+ "keywords": [
+ "alphabet",
+ "circle"
+ ]
},
"relaxed": {
"unicode": "263A",
- "unicode_alternates": ["263A-FE0F"],
+ "unicode_alternates": [
+ "263A-FE0F"
+ ],
"name": "white smiling face",
"shortname": ":relaxed:",
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blush", "face", "happiness", "massage", "smile"],
+ "keywords": [
+ "blush",
+ "face",
+ "happiness",
+ "massage",
+ "smile"
+ ],
"moji": "☺"
},
"relieved": {
@@ -10433,7 +22981,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "happiness", "massage", "phew", "relaxed", "relieved", "satisfied", "phew", "relief"],
+ "keywords": [
+ "face",
+ "happiness",
+ "massage",
+ "phew",
+ "relaxed",
+ "relieved",
+ "satisfied",
+ "phew",
+ "relief"
+ ],
"moji": "😌"
},
"reminder_ribbon": {
@@ -10444,7 +23002,9 @@
"category": "celebration",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["awareness"]
+ "keywords": [
+ "awareness"
+ ]
},
"repeat": {
"unicode": "1F501",
@@ -10454,7 +23014,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["loop", "record"],
+ "keywords": [
+ "loop",
+ "record"
+ ],
"moji": "🔁"
},
"repeat_one": {
@@ -10465,7 +23028,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "loop"],
+ "keywords": [
+ "blue-square",
+ "loop"
+ ],
"moji": "🔂"
},
"restroom": {
@@ -10476,7 +23042,17 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "woman", "man", "unisex", "bathroom", "restroom", "sign", "shared", "toilet"],
+ "keywords": [
+ "blue-square",
+ "woman",
+ "man",
+ "unisex",
+ "bathroom",
+ "restroom",
+ "sign",
+ "shared",
+ "toilet"
+ ],
"moji": "🚻"
},
"revolving_hearts": {
@@ -10487,7 +23063,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines", "heart", "hearts", "revolving", "moving", "circle", "multiple", "lovers"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines",
+ "heart",
+ "hearts",
+ "revolving",
+ "moving",
+ "circle",
+ "multiple",
+ "lovers"
+ ],
"moji": "💞"
},
"rewind": {
@@ -10498,7 +23086,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "play"],
+ "keywords": [
+ "blue-square",
+ "play"
+ ],
"moji": "⏪"
},
"ribbon": {
@@ -10509,7 +23100,16 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bowtie", "decoration", "girl", "pink", "ribbon", "lace", "wrap", "decorate"],
+ "keywords": [
+ "bowtie",
+ "decoration",
+ "girl",
+ "pink",
+ "ribbon",
+ "lace",
+ "wrap",
+ "decorate"
+ ],
"moji": "🎀"
},
"rice": {
@@ -10520,7 +23120,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "rice", "white", "grain", "food", "bowl"],
+ "keywords": [
+ "food",
+ "rice",
+ "white",
+ "grain",
+ "food",
+ "bowl"
+ ],
"moji": "🍚"
},
"rice_ball": {
@@ -10531,7 +23138,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "japanese", "rice", "ball", "white", "nori", "seaweed", "japanese"],
+ "keywords": [
+ "food",
+ "japanese",
+ "rice",
+ "ball",
+ "white",
+ "nori",
+ "seaweed",
+ "japanese"
+ ],
"moji": "🍙"
},
"rice_cracker": {
@@ -10542,7 +23158,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "japanese", "rice", "cracker", "seaweed", "food", "japanese"],
+ "keywords": [
+ "food",
+ "japanese",
+ "rice",
+ "cracker",
+ "seaweed",
+ "food",
+ "japanese"
+ ],
"moji": "🍘"
},
"rice_scene": {
@@ -10553,7 +23177,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo", "moon", "viewing", "observing", "otsukimi", "tsukimi", "rice", "scene", "festival", "autumn"],
+ "keywords": [
+ "photo",
+ "moon",
+ "viewing",
+ "observing",
+ "otsukimi",
+ "tsukimi",
+ "rice",
+ "scene",
+ "festival",
+ "autumn"
+ ],
"moji": "🎑"
},
"right_speaker": {
@@ -10564,7 +23199,13 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sound", "listen", "hear", "noise", "volume"]
+ "keywords": [
+ "sound",
+ "listen",
+ "hear",
+ "noise",
+ "volume"
+ ]
},
"right_speaker_one": {
"unicode": "1F569",
@@ -10572,9 +23213,14 @@
"name": "right speaker with one sound wave",
"shortname": ":right_speaker_one:",
"category": "objects_symbols",
- "aliases": [":right_speaker_with_one_sound_wave:"],
+ "aliases": [
+ ":right_speaker_with_one_sound_wave:"
+ ],
"aliases_ascii": [],
- "keywords": ["low", "volume"]
+ "keywords": [
+ "low",
+ "volume"
+ ]
},
"right_speaker_three": {
"unicode": "1F56A",
@@ -10582,9 +23228,15 @@
"name": "right speaker with three sound waves",
"shortname": ":right_speaker_three:",
"category": "objects_symbols",
- "aliases": [":right_speaker_with_three_sound_waves:"],
+ "aliases": [
+ ":right_speaker_with_three_sound_waves:"
+ ],
"aliases_ascii": [],
- "keywords": ["loud", "high", "volume"]
+ "keywords": [
+ "loud",
+ "high",
+ "volume"
+ ]
},
"ring": {
"unicode": "1F48D",
@@ -10594,7 +23246,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["marriage", "propose", "valentines", "wedding"],
+ "keywords": [
+ "marriage",
+ "propose",
+ "valentines",
+ "wedding"
+ ],
"moji": "💍"
},
"ringing_bell": {
@@ -10605,7 +23262,25 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alert", "ding", "volume", "sound", "chime"]
+ "keywords": [
+ "alert",
+ "ding",
+ "volume",
+ "sound",
+ "chime"
+ ]
+ },
+ "robot": {
+ "unicode": "1F916",
+ "unicode_alternates": "",
+ "name": "robot face",
+ "shortname": ":robot:",
+ "category": "people",
+ "aliases": [
+ ":robot_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"rocket": {
"unicode": "1F680",
@@ -10615,7 +23290,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["launch", "ship", "staffmode", "rocket", "space", "spacecraft", "astronaut", "cosmonaut"],
+ "keywords": [
+ "launch",
+ "ship",
+ "staffmode",
+ "rocket",
+ "space",
+ "spacecraft",
+ "astronaut",
+ "cosmonaut"
+ ],
"moji": "🚀"
},
"roller_coaster": {
@@ -10626,9 +23310,34 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["carnival", "fun", "photo", "play", "playground", "roller", "coaster", "amusement", "park", "fair", "ride", "entertainment"],
+ "keywords": [
+ "carnival",
+ "fun",
+ "photo",
+ "play",
+ "playground",
+ "roller",
+ "coaster",
+ "amusement",
+ "park",
+ "fair",
+ "ride",
+ "entertainment"
+ ],
"moji": "🎢"
},
+ "rolling_eyes": {
+ "unicode": "1F644",
+ "unicode_alternates": "",
+ "name": "face with rolling eyes",
+ "shortname": ":rolling_eyes:",
+ "category": "people",
+ "aliases": [
+ ":face_with_rolling_eyes:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"rooster": {
"unicode": "1F413",
"unicode_alternates": [],
@@ -10637,7 +23346,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "chicken", "nature", "rooster", "cockerel", "cock", "male", "cock-a-doodle-doo", "crowing"],
+ "keywords": [
+ "animal",
+ "chicken",
+ "nature",
+ "rooster",
+ "cockerel",
+ "cock",
+ "male",
+ "cock-a-doodle-doo",
+ "crowing"
+ ],
"moji": "🐓"
},
"rose": {
@@ -10648,7 +23367,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flowers", "love", "valentines", "rose", "fragrant", "flower", "thorns", "love", "petals", "romance"],
+ "keywords": [
+ "flowers",
+ "love",
+ "valentines",
+ "rose",
+ "fragrant",
+ "flower",
+ "thorns",
+ "love",
+ "petals",
+ "romance"
+ ],
"moji": "🌹"
},
"rosette": {
@@ -10659,7 +23389,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flower"]
+ "keywords": [
+ "flower"
+ ]
},
"rosette_black": {
"unicode": "1F3F6",
@@ -10669,7 +23401,9 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flower"]
+ "keywords": [
+ "flower"
+ ]
},
"rotating_light": {
"unicode": "1F6A8",
@@ -10679,7 +23413,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["911", "ambulance", "emergency", "police", "light", "police", "emergency"],
+ "keywords": [
+ "911",
+ "ambulance",
+ "emergency",
+ "police",
+ "light",
+ "police",
+ "emergency"
+ ],
"moji": "🚨"
},
"round_pushpin": {
@@ -10690,7 +23432,9 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["stationery"],
+ "keywords": [
+ "stationery"
+ ],
"moji": "📍"
},
"rowboat": {
@@ -10701,9 +23445,108 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["hobby", "ship", "sports", "water", "boat", "row", "oar", "paddle"],
+ "keywords": [
+ "hobby",
+ "ship",
+ "sports",
+ "water",
+ "boat",
+ "row",
+ "oar",
+ "paddle"
+ ],
"moji": "🚣"
},
+ "rowboat_tone1": {
+ "unicode": "1F6A3-1F3FB",
+ "unicode_alternates": "",
+ "name": "rowboat tone 1",
+ "shortname": ":rowboat_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hobby",
+ "ship",
+ "water",
+ "boat",
+ "row",
+ "oar",
+ "paddle"
+ ]
+ },
+ "rowboat_tone2": {
+ "unicode": "1F6A3-1F3FC",
+ "unicode_alternates": "",
+ "name": "rowboat tone 2",
+ "shortname": ":rowboat_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hobby",
+ "ship",
+ "water",
+ "boat",
+ "row",
+ "oar",
+ "paddle"
+ ]
+ },
+ "rowboat_tone3": {
+ "unicode": "1F6A3-1F3FD",
+ "unicode_alternates": "",
+ "name": "rowboat tone 3",
+ "shortname": ":rowboat_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hobby",
+ "ship",
+ "water",
+ "boat",
+ "row",
+ "oar",
+ "paddle"
+ ]
+ },
+ "rowboat_tone4": {
+ "unicode": "1F6A3-1F3FE",
+ "unicode_alternates": "",
+ "name": "rowboat tone 4",
+ "shortname": ":rowboat_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hobby",
+ "ship",
+ "water",
+ "boat",
+ "row",
+ "oar",
+ "paddle"
+ ]
+ },
+ "rowboat_tone5": {
+ "unicode": "1F6A3-1F3FF",
+ "unicode_alternates": "",
+ "name": "rowboat tone 5",
+ "shortname": ":rowboat_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "hobby",
+ "ship",
+ "water",
+ "boat",
+ "row",
+ "oar",
+ "paddle"
+ ]
+ },
"rugby_football": {
"unicode": "1F3C9",
"unicode_alternates": [],
@@ -10712,7 +23555,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sports", "rugby", "football", "ball", "sport", "team", "england"],
+ "keywords": [
+ "sports",
+ "rugby",
+ "football",
+ "ball",
+ "sport",
+ "team",
+ "england"
+ ],
"moji": "🏉"
},
"runner": {
@@ -10723,9 +23574,115 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["exercise", "man", "walking", "run", "runner", "jog", "exercise", "sprint", "race", "dash"],
+ "keywords": [
+ "exercise",
+ "man",
+ "walking",
+ "run",
+ "runner",
+ "jog",
+ "exercise",
+ "sprint",
+ "race",
+ "dash"
+ ],
"moji": "🏃"
},
+ "runner_tone1": {
+ "unicode": "1F3C3-1F3FB",
+ "unicode_alternates": "",
+ "name": "runner tone 1",
+ "shortname": ":runner_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "exercise",
+ "man",
+ "run",
+ "jog",
+ "sprint",
+ "race",
+ "dash",
+ "marathon"
+ ]
+ },
+ "runner_tone2": {
+ "unicode": "1F3C3-1F3FC",
+ "unicode_alternates": "",
+ "name": "runner tone 2",
+ "shortname": ":runner_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "exercise",
+ "man",
+ "run",
+ "jog",
+ "sprint",
+ "race",
+ "dash",
+ "marathon"
+ ]
+ },
+ "runner_tone3": {
+ "unicode": "1F3C3-1F3FD",
+ "unicode_alternates": "",
+ "name": "runner tone 3",
+ "shortname": ":runner_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "exercise",
+ "man",
+ "run",
+ "jog",
+ "sprint",
+ "race",
+ "dash",
+ "marathon"
+ ]
+ },
+ "runner_tone4": {
+ "unicode": "1F3C3-1F3FE",
+ "unicode_alternates": "",
+ "name": "runner tone 4",
+ "shortname": ":runner_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "exercise",
+ "man",
+ "run",
+ "jog",
+ "sprint",
+ "race",
+ "dash",
+ "marathon"
+ ]
+ },
+ "runner_tone5": {
+ "unicode": "1F3C3-1F3FF",
+ "unicode_alternates": "",
+ "name": "runner tone 5",
+ "shortname": ":runner_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "exercise",
+ "man",
+ "run",
+ "jog",
+ "sprint",
+ "race",
+ "dash",
+ "marathon"
+ ]
+ },
"running_shirt_with_sash": {
"unicode": "1F3BD",
"unicode_alternates": [],
@@ -10734,29 +23691,73 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["pageant", "play", "running", "run", "shirt", "cloths", "compete", "sports"],
+ "keywords": [
+ "pageant",
+ "play",
+ "running",
+ "run",
+ "shirt",
+ "cloths",
+ "compete",
+ "sports"
+ ],
"moji": "🎽"
},
+ "sa": {
+ "unicode": "1F202",
+ "unicode_alternates": "",
+ "name": "squared katakana sa",
+ "shortname": ":sa:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "blue-square",
+ "japanese",
+ "symbol",
+ "word"
+ ]
+ },
"sagittarius": {
"unicode": "2650",
- "unicode_alternates": ["2650-FE0F"],
+ "unicode_alternates": [
+ "2650-FE0F"
+ ],
"name": "sagittarius",
"shortname": ":sagittarius:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sagittarius", "centaur", "archer", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "sagittarius",
+ "centaur",
+ "archer",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♐"
},
"sailboat": {
"unicode": "26F5",
- "unicode_alternates": ["26F5-FE0F"],
+ "unicode_alternates": [
+ "26F5-FE0F"
+ ],
"name": "sailboat",
"shortname": ":sailboat:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ship", "transportation"],
+ "keywords": [
+ "ship",
+ "transportation"
+ ],
"moji": "⛵"
},
"sake": {
@@ -10767,7 +23768,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beverage", "drink", "drunk", "wine", "sake", "wine", "rice", "ferment", "alcohol", "japanese", "drink"],
+ "keywords": [
+ "beverage",
+ "drink",
+ "drunk",
+ "wine",
+ "sake",
+ "wine",
+ "rice",
+ "ferment",
+ "alcohol",
+ "japanese",
+ "drink"
+ ],
"moji": "🍶"
},
"sandal": {
@@ -10778,7 +23791,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "shoes"],
+ "keywords": [
+ "fashion",
+ "shoes"
+ ],
"moji": "👡"
},
"santa": {
@@ -10789,9 +23805,159 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["christmas", "father christmas", "festival", "male", "man", "xmas", "santa", "saint nick", "jolly", "ho ho ho", "north pole", "presents", "gifts", "naughty", "nice", "sleigh", "father", "christmas", "holiday"],
+ "keywords": [
+ "christmas",
+ "father christmas",
+ "festival",
+ "male",
+ "man",
+ "xmas",
+ "santa",
+ "saint nick",
+ "jolly",
+ "ho ho ho",
+ "north pole",
+ "presents",
+ "gifts",
+ "naughty",
+ "nice",
+ "sleigh",
+ "father",
+ "christmas",
+ "holiday"
+ ],
"moji": "🎅"
},
+ "santa_tone1": {
+ "unicode": "1F385-1F3FB",
+ "unicode_alternates": "",
+ "name": "father christmas tone 1",
+ "shortname": ":santa_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "festival",
+ "male",
+ "man",
+ "xmas",
+ "santa",
+ "saint nick",
+ "jolly",
+ "ho ho ho",
+ "north pole",
+ "presents",
+ "gifts",
+ "naughty",
+ "nice",
+ "sleigh",
+ "holiday"
+ ]
+ },
+ "santa_tone2": {
+ "unicode": "1F385-1F3FC",
+ "unicode_alternates": "",
+ "name": "father christmas tone 2",
+ "shortname": ":santa_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "festival",
+ "male",
+ "man",
+ "xmas",
+ "santa",
+ "saint nick",
+ "jolly",
+ "ho ho ho",
+ "north pole",
+ "presents",
+ "gifts",
+ "naughty",
+ "nice",
+ "sleigh",
+ "holiday"
+ ]
+ },
+ "santa_tone3": {
+ "unicode": "1F385-1F3FD",
+ "unicode_alternates": "",
+ "name": "father christmas tone 3",
+ "shortname": ":santa_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "festival",
+ "male",
+ "man",
+ "xmas",
+ "santa",
+ "saint nick",
+ "jolly",
+ "ho ho ho",
+ "north pole",
+ "presents",
+ "gifts",
+ "naughty",
+ "nice",
+ "sleigh",
+ "holiday"
+ ]
+ },
+ "santa_tone4": {
+ "unicode": "1F385-1F3FE",
+ "unicode_alternates": "",
+ "name": "father christmas tone 4",
+ "shortname": ":santa_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "festival",
+ "male",
+ "man",
+ "xmas",
+ "santa",
+ "saint nick",
+ "jolly",
+ "ho ho ho",
+ "north pole",
+ "presents",
+ "gifts",
+ "naughty",
+ "nice",
+ "sleigh",
+ "holiday"
+ ]
+ },
+ "santa_tone5": {
+ "unicode": "1F385-1F3FF",
+ "unicode_alternates": "",
+ "name": "father christmas tone 5",
+ "shortname": ":santa_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "festival",
+ "male",
+ "man",
+ "xmas",
+ "santa",
+ "saint nick",
+ "jolly",
+ "ho ho ho",
+ "north pole",
+ "presents",
+ "gifts",
+ "naughty",
+ "nice",
+ "sleigh",
+ "holiday"
+ ]
+ },
"satellite": {
"unicode": "1F4E1",
"unicode_alternates": [],
@@ -10800,7 +23966,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication"],
+ "keywords": [
+ "communication"
+ ],
"moji": "📡"
},
"satellite_orbital": {
@@ -10811,7 +23979,11 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "orbital", "space"]
+ "keywords": [
+ "communication",
+ "orbital",
+ "space"
+ ]
},
"saxophone": {
"unicode": "1F3B7",
@@ -10821,9 +23993,35 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["instrument", "music", "saxophone", "sax", "music", "instrument", "woodwind"],
+ "keywords": [
+ "instrument",
+ "music",
+ "saxophone",
+ "sax",
+ "music",
+ "instrument",
+ "woodwind"
+ ],
"moji": "🎷"
},
+ "scales": {
+ "unicode": "2696",
+ "unicode_alternates": "",
+ "name": "scales",
+ "shortname": ":scales:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "balance",
+ "justice",
+ "libra",
+ "object",
+ "tool",
+ "weight",
+ "zodiac"
+ ]
+ },
"school": {
"unicode": "1F3EB",
"unicode_alternates": [],
@@ -10832,7 +24030,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["building", "school", "university", "elementary", "middle", "high", "college", "teach", "education"],
+ "keywords": [
+ "building",
+ "school",
+ "university",
+ "elementary",
+ "middle",
+ "high",
+ "college",
+ "teach",
+ "education"
+ ],
"moji": "🏫"
},
"school_satchel": {
@@ -10843,29 +24051,74 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bag", "education", "student", "school", "satchel", "backpack", "bag", "packing", "pack", "hike", "education", "adventure", "travel", "sightsee"],
+ "keywords": [
+ "bag",
+ "education",
+ "student",
+ "school",
+ "satchel",
+ "backpack",
+ "bag",
+ "packing",
+ "pack",
+ "hike",
+ "education",
+ "adventure",
+ "travel",
+ "sightsee"
+ ],
"moji": "🎒"
},
"scissors": {
"unicode": "2702",
- "unicode_alternates": ["2702-FE0F"],
+ "unicode_alternates": [
+ "2702-FE0F"
+ ],
"name": "black scissors",
"shortname": ":scissors:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cut", "stationery"],
+ "keywords": [
+ "cut",
+ "stationery"
+ ],
"moji": "✂"
},
+ "scorpion": {
+ "unicode": "1F982",
+ "unicode_alternates": "",
+ "name": "scorpion",
+ "shortname": ":scorpion:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"scorpius": {
"unicode": "264F",
- "unicode_alternates": ["264F-FE0F"],
+ "unicode_alternates": [
+ "264F-FE0F"
+ ],
"name": "scorpius",
"shortname": ":scorpius:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["scorpius", "scorpion", "scorpio", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "scorpius",
+ "scorpion",
+ "scorpio",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♏"
},
"scream": {
@@ -10876,7 +24129,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "munch", "scream", "painting", "artist", "alien"],
+ "keywords": [
+ "face",
+ "munch",
+ "scream",
+ "painting",
+ "artist",
+ "alien"
+ ],
"moji": "😱"
},
"scream_cat": {
@@ -10887,7 +24147,22 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "munch", "weary", "sleepy", "tired", "tiredness", "study", "finals", "school", "exhausted", "scream", "painting", "artist"],
+ "keywords": [
+ "animal",
+ "cats",
+ "munch",
+ "weary",
+ "sleepy",
+ "tired",
+ "tiredness",
+ "study",
+ "finals",
+ "school",
+ "exhausted",
+ "scream",
+ "painting",
+ "artist"
+ ],
"moji": "🙀"
},
"scroll": {
@@ -10898,7 +24173,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["documents"],
+ "keywords": [
+ "documents"
+ ],
"moji": "📜"
},
"seat": {
@@ -10909,18 +24186,24 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sit"],
+ "keywords": [
+ "sit"
+ ],
"moji": "💺"
},
"secret": {
"unicode": "3299",
- "unicode_alternates": ["3299-FE0F"],
+ "unicode_alternates": [
+ "3299-FE0F"
+ ],
"name": "circled ideograph secret",
"shortname": ":secret:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["privacy"],
+ "keywords": [
+ "privacy"
+ ],
"moji": "㊙"
},
"see_no_evil": {
@@ -10931,7 +24214,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "monkey", "nature", "monkey", "see", "eyes", "vision", "sight", "mizaru"],
+ "keywords": [
+ "animal",
+ "monkey",
+ "nature",
+ "monkey",
+ "see",
+ "eyes",
+ "vision",
+ "sight",
+ "mizaru"
+ ],
"moji": "🙈"
},
"seedling": {
@@ -10942,19 +24235,49 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["grass", "lawn", "nature", "plant", "seedling", "plant", "new", "start", "grow"],
+ "keywords": [
+ "grass",
+ "lawn",
+ "nature",
+ "plant",
+ "seedling",
+ "plant",
+ "new",
+ "start",
+ "grow"
+ ],
"moji": "🌱"
},
"seven": {
"moji": "7️⃣",
"unicode": "0037-20E3",
- "unicode_alternates": ["0037-FE0F-20E3"],
+ "unicode_alternates": [
+ "0037-FE0F-20E3"
+ ],
"name": "digit seven",
"shortname": ":seven:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["7", "blue-square", "numbers", "prime"]
+ "keywords": [
+ "7",
+ "blue-square",
+ "numbers",
+ "prime"
+ ]
+ },
+ "shamrock": {
+ "unicode": "2618",
+ "unicode_alternates": "",
+ "name": "shamrock",
+ "shortname": ":shamrock:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "nature",
+ "plant"
+ ]
},
"shaved_ice": {
"unicode": "1F367",
@@ -10964,7 +24287,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["desert", "hot", "shaved", "ice", "dessert", "treat", "syrup", "flavoring"],
+ "keywords": [
+ "desert",
+ "hot",
+ "shaved",
+ "ice",
+ "dessert",
+ "treat",
+ "syrup",
+ "flavoring"
+ ],
"moji": "🍧"
},
"sheep": {
@@ -10975,7 +24307,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "sheep", "wool", "flock", "follower", "ewe", "female", "lamb"],
+ "keywords": [
+ "animal",
+ "nature",
+ "sheep",
+ "wool",
+ "flock",
+ "follower",
+ "ewe",
+ "female",
+ "lamb"
+ ],
"moji": "🐑"
},
"shell": {
@@ -10986,7 +24328,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beach", "nature", "sea", "shell", "spiral", "beach", "sand", "crab", "nautilus"],
+ "keywords": [
+ "beach",
+ "nature",
+ "sea",
+ "shell",
+ "spiral",
+ "beach",
+ "sand",
+ "crab",
+ "nautilus"
+ ],
"moji": "🐚"
},
"shield": {
@@ -10997,7 +24349,26 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["interstate", "route", "sign", "highway", "interstate"]
+ "keywords": [
+ "interstate",
+ "route",
+ "sign",
+ "highway",
+ "interstate"
+ ]
+ },
+ "shinto_shrine": {
+ "unicode": "26E9",
+ "unicode_alternates": "",
+ "name": "shinto shrine",
+ "shortname": ":shinto_shrine:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "religion",
+ "symbol"
+ ]
},
"ship": {
"unicode": "1F6A2",
@@ -11007,7 +24378,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["titanic", "transportation", "ferry", "ship", "boat"],
+ "keywords": [
+ "titanic",
+ "transportation",
+ "ferry",
+ "ship",
+ "boat"
+ ],
"moji": "🚢"
},
"shirt": {
@@ -11018,7 +24395,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cloth", "fashion"],
+ "keywords": [
+ "cloth",
+ "fashion"
+ ],
"moji": "👕"
},
"shopping_bags": {
@@ -11029,7 +24409,13 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["purchase", "mall", "buy", "store", "shop"]
+ "keywords": [
+ "purchase",
+ "mall",
+ "buy",
+ "store",
+ "shop"
+ ]
},
"shower": {
"unicode": "1F6BF",
@@ -11039,7 +24425,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bath", "clean", "wash", "bathroom", "shower", "soap", "water", "clean", "shampoo", "lather"],
+ "keywords": [
+ "bath",
+ "clean",
+ "wash",
+ "bathroom",
+ "shower",
+ "soap",
+ "water",
+ "clean",
+ "shampoo",
+ "lather"
+ ],
"moji": "🚿"
},
"signal_strength": {
@@ -11050,19 +24447,27 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "📶"
},
"six": {
"moji": "6️⃣",
"unicode": "0036-20E3",
- "unicode_alternates": ["0036-FE0F-20E3"],
+ "unicode_alternates": [
+ "0036-FE0F-20E3"
+ ],
"name": "digit six",
"shortname": ":six:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["6", "blue-square", "numbers"]
+ "keywords": [
+ "6",
+ "blue-square",
+ "numbers"
+ ]
},
"six_pointed_star": {
"unicode": "1F52F",
@@ -11072,7 +24477,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["purple-square"],
+ "keywords": [
+ "purple-square"
+ ],
"moji": "🔯"
},
"ski": {
@@ -11083,20 +24490,75 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cold", "sports", "winter", "ski", "downhill", "cross-country", "poles", "snow", "winter", "mountain", "alpine", "powder", "slalom", "freestyle"],
+ "keywords": [
+ "cold",
+ "sports",
+ "winter",
+ "ski",
+ "downhill",
+ "cross-country",
+ "poles",
+ "snow",
+ "winter",
+ "mountain",
+ "alpine",
+ "powder",
+ "slalom",
+ "freestyle"
+ ],
"moji": "🎿"
},
+ "skier": {
+ "unicode": "26F7",
+ "unicode_alternates": "",
+ "name": "skier",
+ "shortname": ":skier:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "person",
+ "ski",
+ "snow",
+ "sport",
+ "travel"
+ ]
+ },
"skull": {
"unicode": "1F480",
"unicode_alternates": [],
"name": "skull",
"shortname": ":skull:",
"category": "emoticons",
- "aliases": [":skeleton:"],
- "aliases_ascii": [],
- "keywords": ["dead", "skeleton", "dying"],
+ "aliases": [
+ ":skeleton:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "dead",
+ "skeleton",
+ "dying"
+ ],
"moji": "💀"
},
+ "skull_crossbones": {
+ "unicode": "2620",
+ "unicode_alternates": "",
+ "name": "skull and crossbones",
+ "shortname": ":skull_crossbones:",
+ "category": "objects",
+ "aliases": [
+ ":skull_and_crossbones:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "body",
+ "death",
+ "face",
+ "monster",
+ "person"
+ ]
+ },
"sleeping": {
"unicode": "1F634",
"unicode_alternates": [],
@@ -11105,7 +24567,15 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "sleepy", "tired", "sleep", "sleepy", "sleeping", "snore"],
+ "keywords": [
+ "face",
+ "sleepy",
+ "tired",
+ "sleep",
+ "sleepy",
+ "sleeping",
+ "snore"
+ ],
"moji": "😴"
},
"sleeping_accommodation": {
@@ -11116,7 +24586,11 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["hotel", "motel", "rest"]
+ "keywords": [
+ "hotel",
+ "motel",
+ "rest"
+ ]
},
"sleepy": {
"unicode": "1F62A",
@@ -11126,7 +24600,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "rest", "tired", "sleepy", "tired", "exhausted"],
+ "keywords": [
+ "face",
+ "rest",
+ "tired",
+ "sleepy",
+ "tired",
+ "exhausted"
+ ],
"moji": "😪"
},
"slight_frown": {
@@ -11135,9 +24616,16 @@
"name": "slightly frowning face",
"shortname": ":slight_frown:",
"category": "people",
- "aliases": [":slightly_frowning_face:"],
+ "aliases": [
+ ":slightly_frowning_face:"
+ ],
"aliases_ascii": [],
- "keywords": ["slight", "frown", "unhappy", "disappointed"]
+ "keywords": [
+ "slight",
+ "frown",
+ "unhappy",
+ "disappointed"
+ ]
},
"slight_smile": {
"unicode": "1F642",
@@ -11145,9 +24633,15 @@
"name": "slightly smiling face",
"shortname": ":slight_smile:",
"category": "people",
- "aliases": [":slightly_smiling_face:"],
+ "aliases": [
+ ":slightly_smiling_face:"
+ ],
"aliases_ascii": [],
- "keywords": ["slight", "smile", "happy"]
+ "keywords": [
+ "slight",
+ "smile",
+ "happy"
+ ]
},
"slot_machine": {
"unicode": "1F3B0",
@@ -11157,7 +24651,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bet", "gamble", "vegas", "slot", "machine", "gamble", "one-armed bandit", "slots", "luck"],
+ "keywords": [
+ "bet",
+ "gamble",
+ "vegas",
+ "slot",
+ "machine",
+ "gamble",
+ "one-armed bandit",
+ "slots",
+ "luck"
+ ],
"moji": "🎰"
},
"small_blue_diamond": {
@@ -11168,7 +24672,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔹"
},
"small_orange_diamond": {
@@ -11179,7 +24685,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔸"
},
"small_red_triangle": {
@@ -11190,7 +24698,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔺"
},
"small_red_triangle_down": {
@@ -11201,7 +24711,9 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔻"
},
"smile": {
@@ -11211,8 +24723,24 @@
"shortname": ":smile:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":)", ":-)", "=]", "=)", ":]"],
- "keywords": ["face", "funny", "haha", "happy", "joy", "laugh", "smile", "smiley", "smiling"],
+ "aliases_ascii": [
+ ":)",
+ ":-)",
+ "=]",
+ "=)",
+ ":]"
+ ],
+ "keywords": [
+ "face",
+ "funny",
+ "haha",
+ "happy",
+ "joy",
+ "laugh",
+ "smile",
+ "smiley",
+ "smiling"
+ ],
"moji": "😄"
},
"smile_cat": {
@@ -11223,7 +24751,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "cat", "smile", "grin", "grinning"],
+ "keywords": [
+ "animal",
+ "cats",
+ "cat",
+ "smile",
+ "grin",
+ "grinning"
+ ],
"moji": "😸"
},
"smiley": {
@@ -11233,8 +24768,20 @@
"shortname": ":smiley:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":D", ":-D", "=D"],
- "keywords": ["face", "haha", "happy", "joy", "smiling", "smile", "smiley"],
+ "aliases_ascii": [
+ ":D",
+ ":-D",
+ "=D"
+ ],
+ "keywords": [
+ "face",
+ "haha",
+ "happy",
+ "joy",
+ "smiling",
+ "smile",
+ "smiley"
+ ],
"moji": "😃"
},
"smiley_cat": {
@@ -11245,7 +24792,15 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "happy", "smile", "smiley", "cat", "happy"],
+ "keywords": [
+ "animal",
+ "cats",
+ "happy",
+ "smile",
+ "smiley",
+ "cat",
+ "happy"
+ ],
"moji": "😺"
},
"smiling_imp": {
@@ -11256,7 +24811,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["devil", "horns", "horns", "devil", "impish", "trouble"],
+ "keywords": [
+ "devil",
+ "horns",
+ "horns",
+ "devil",
+ "impish",
+ "trouble"
+ ],
"moji": "😈"
},
"smirk": {
@@ -11267,7 +24829,18 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mean", "prank", "smile", "smug", "smirking", "smirk", "smug", "smile", "half-smile", "conceited"],
+ "keywords": [
+ "mean",
+ "prank",
+ "smile",
+ "smug",
+ "smirking",
+ "smirk",
+ "smug",
+ "smile",
+ "half-smile",
+ "conceited"
+ ],
"moji": "😏"
},
"smirk_cat": {
@@ -11278,7 +24851,15 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cats", "smirk", "smirking", "wry", "confident", "confidence"],
+ "keywords": [
+ "animal",
+ "cats",
+ "smirk",
+ "smirking",
+ "wry",
+ "confident",
+ "confidence"
+ ],
"moji": "😼"
},
"smoking": {
@@ -11289,7 +24870,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cigarette", "kills", "tobacco", "smoking", "cigarette", "smoke", "cancer", "lungs", "inhale", "tar", "nicotine"],
+ "keywords": [
+ "cigarette",
+ "kills",
+ "tobacco",
+ "smoking",
+ "cigarette",
+ "smoke",
+ "cancer",
+ "lungs",
+ "inhale",
+ "tar",
+ "nicotine"
+ ],
"moji": "🚬"
},
"snail": {
@@ -11300,7 +24893,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "shell", "slow", "snail", "slow", "escargot", "french", "appetizer"],
+ "keywords": [
+ "animal",
+ "shell",
+ "slow",
+ "snail",
+ "slow",
+ "escargot",
+ "french",
+ "appetizer"
+ ],
"moji": "🐌"
},
"snake": {
@@ -11311,7 +24913,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "evil"],
+ "keywords": [
+ "animal",
+ "evil"
+ ],
"moji": "🐍"
},
"snowboarder": {
@@ -11322,31 +24927,89 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sports", "winter", "snow", "boarding", "sports", "freestyle", "halfpipe", "board", "mountain", "alpine", "winter"],
+ "keywords": [
+ "sports",
+ "winter",
+ "snow",
+ "boarding",
+ "sports",
+ "freestyle",
+ "halfpipe",
+ "board",
+ "mountain",
+ "alpine",
+ "winter"
+ ],
"moji": "🏂"
},
"snowflake": {
"unicode": "2744",
- "unicode_alternates": ["2744-FE0F"],
+ "unicode_alternates": [
+ "2744-FE0F"
+ ],
"name": "snowflake",
"shortname": ":snowflake:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["christmas", "cold", "season", "weather", "winter", "xmas", "snowflake", "snow", "frozen", "droplet", "ice", "crystal", "cold", "chilly", "winter", "unique", "special", "below zero", "elsa"],
+ "keywords": [
+ "christmas",
+ "cold",
+ "season",
+ "weather",
+ "winter",
+ "xmas",
+ "snowflake",
+ "snow",
+ "frozen",
+ "droplet",
+ "ice",
+ "crystal",
+ "cold",
+ "chilly",
+ "winter",
+ "unique",
+ "special",
+ "below zero",
+ "elsa"
+ ],
"moji": "❄"
},
"snowman": {
"unicode": "26C4",
- "unicode_alternates": ["26C4-FE0F"],
+ "unicode_alternates": [
+ "26C4-FE0F"
+ ],
"name": "snowman without snow",
"shortname": ":snowman:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["christmas", "cold", "season", "weather", "winter", "xmas"],
+ "keywords": [
+ "christmas",
+ "cold",
+ "season",
+ "weather",
+ "winter",
+ "xmas"
+ ],
"moji": "⛄"
},
+ "snowman2": {
+ "unicode": "2603",
+ "unicode_alternates": "",
+ "name": "snowman",
+ "shortname": ":snowman2:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "cold",
+ "nature",
+ "snow",
+ "weather"
+ ]
+ },
"sob": {
"unicode": "1F62D",
"unicode_alternates": [],
@@ -11355,18 +25018,41 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cry", "face", "sad", "tears", "upset", "cry", "sob", "tears", "sad", "melancholy", "morn", "somber", "hurt"],
+ "keywords": [
+ "cry",
+ "face",
+ "sad",
+ "tears",
+ "upset",
+ "cry",
+ "sob",
+ "tears",
+ "sad",
+ "melancholy",
+ "morn",
+ "somber",
+ "hurt"
+ ],
"moji": "😭"
},
"soccer": {
"unicode": "26BD",
- "unicode_alternates": ["26BD-FE0F"],
+ "unicode_alternates": [
+ "26BD-FE0F"
+ ],
"name": "soccer ball",
"shortname": ":soccer:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["balls", "fifa", "football", "sports", "european", "football"],
+ "keywords": [
+ "balls",
+ "fifa",
+ "football",
+ "sports",
+ "european",
+ "football"
+ ],
"moji": "⚽"
},
"soon": {
@@ -11377,7 +25063,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arrow", "words"],
+ "keywords": [
+ "arrow",
+ "words"
+ ],
"moji": "🔜"
},
"sos": {
@@ -11388,7 +25077,12 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["emergency", "help", "red-square", "words"],
+ "keywords": [
+ "emergency",
+ "help",
+ "red-square",
+ "words"
+ ],
"moji": "🆘"
},
"sound": {
@@ -11399,7 +25093,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["speaker", "volume"],
+ "keywords": [
+ "speaker",
+ "volume"
+ ],
"moji": "🔉"
},
"space_invader": {
@@ -11410,18 +25107,26 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arcade", "game"],
+ "keywords": [
+ "arcade",
+ "game"
+ ],
"moji": "👾"
},
"spades": {
"unicode": "2660",
- "unicode_alternates": ["2660-FE0F"],
+ "unicode_alternates": [
+ "2660-FE0F"
+ ],
"name": "black spade suit",
"shortname": ":spades:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cards", "poker"],
+ "keywords": [
+ "cards",
+ "poker"
+ ],
"moji": "♠"
},
"spaghetti": {
@@ -11432,18 +25137,32 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "italian", "noodle", "spaghetti", "noodles", "tomato", "sauce", "italian"],
+ "keywords": [
+ "food",
+ "italian",
+ "noodle",
+ "spaghetti",
+ "noodles",
+ "tomato",
+ "sauce",
+ "italian"
+ ],
"moji": "🍝"
},
"sparkle": {
"unicode": "2747",
- "unicode_alternates": ["2747-FE0F"],
+ "unicode_alternates": [
+ "2747-FE0F"
+ ],
"name": "sparkle",
"shortname": ":sparkle:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["green-square", "stars"],
+ "keywords": [
+ "green-square",
+ "stars"
+ ],
"moji": "❇"
},
"sparkler": {
@@ -11454,7 +25173,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "shine", "stars"],
+ "keywords": [
+ "night",
+ "shine",
+ "stars"
+ ],
"moji": "🎇"
},
"sparkles": {
@@ -11465,7 +25188,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cool", "shine", "shiny", "stars"],
+ "keywords": [
+ "cool",
+ "shine",
+ "shiny",
+ "stars"
+ ],
"moji": "✨"
},
"sparkling_heart": {
@@ -11476,7 +25204,12 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines"
+ ],
"moji": "💖"
},
"speak_no_evil": {
@@ -11487,7 +25220,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "monkey", "monkey", "mouth", "talk", "say", "words", "verbal", "verbalize", "oral", "iwazaru"],
+ "keywords": [
+ "animal",
+ "monkey",
+ "monkey",
+ "mouth",
+ "talk",
+ "say",
+ "words",
+ "verbal",
+ "verbalize",
+ "oral",
+ "iwazaru"
+ ],
"moji": "🙊"
},
"speaker": {
@@ -11498,7 +25243,12 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sound", "listen", "hear", "noise"]
+ "keywords": [
+ "sound",
+ "listen",
+ "hear",
+ "noise"
+ ]
},
"speaking_head": {
"unicode": "1F5E3",
@@ -11506,9 +25256,13 @@
"name": "speaking head in silhouette",
"shortname": ":speaking_head:",
"category": "objects_symbols",
- "aliases": [":speaking_head_in_silhouette:"],
+ "aliases": [
+ ":speaking_head_in_silhouette:"
+ ],
"aliases_ascii": [],
- "keywords": ["talk"]
+ "keywords": [
+ "talk"
+ ]
},
"speech_balloon": {
"unicode": "1F4AC",
@@ -11518,7 +25272,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bubble", "words", "speech", "balloon", "talk", "conversation", "communication", "comic", "dialogue"],
+ "keywords": [
+ "bubble",
+ "words",
+ "speech",
+ "balloon",
+ "talk",
+ "conversation",
+ "communication",
+ "comic",
+ "dialogue"
+ ],
"moji": "💬"
},
"speech_left": {
@@ -11527,9 +25291,19 @@
"name": "left speech bubble",
"shortname": ":speech_left:",
"category": "objects_symbols",
- "aliases": [":left_speech_bubble:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "words", "talk", "conversation", "communication", "comic", "dialogue"]
+ "aliases": [
+ ":left_speech_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "words",
+ "talk",
+ "conversation",
+ "communication",
+ "comic",
+ "dialogue"
+ ]
},
"speech_right": {
"unicode": "1F5E9",
@@ -11537,9 +25311,19 @@
"name": "right speech bubble",
"shortname": ":speech_right:",
"category": "objects_symbols",
- "aliases": [":right_speech_bubble:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "words", "talk", "conversation", "communication", "comic", "dialogue"]
+ "aliases": [
+ ":right_speech_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "words",
+ "talk",
+ "conversation",
+ "communication",
+ "comic",
+ "dialogue"
+ ]
},
"speech_three": {
"unicode": "1F5EB",
@@ -11547,9 +25331,19 @@
"name": "three speech bubbles",
"shortname": ":speech_three:",
"category": "objects_symbols",
- "aliases": [":three_speech_bubbles:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "words", "talk", "conversation", "communication", "comic", "dialogue"]
+ "aliases": [
+ ":three_speech_bubbles:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "words",
+ "talk",
+ "conversation",
+ "communication",
+ "comic",
+ "dialogue"
+ ]
},
"speech_two": {
"unicode": "1F5EA",
@@ -11557,9 +25351,19 @@
"name": "two speech bubbles",
"shortname": ":speech_two:",
"category": "objects_symbols",
- "aliases": [":two_speech_bubbles:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "words", "talk", "conversation", "communication", "comic", "dialogue"]
+ "aliases": [
+ ":two_speech_bubbles:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "words",
+ "talk",
+ "conversation",
+ "communication",
+ "comic",
+ "dialogue"
+ ]
},
"speedboat": {
"unicode": "1F6A4",
@@ -11569,7 +25373,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ship", "transportation", "vehicle", "motor", "speed", "ski", "power", "boat"],
+ "keywords": [
+ "ship",
+ "transportation",
+ "vehicle",
+ "motor",
+ "speed",
+ "ski",
+ "power",
+ "boat"
+ ],
"moji": "🚤"
},
"spider": {
@@ -11580,7 +25393,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["arachnid", "eight-legged"]
+ "keywords": [
+ "arachnid",
+ "eight-legged"
+ ]
},
"spider_web": {
"unicode": "1F578",
@@ -11590,7 +25406,9 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cobweb"]
+ "keywords": [
+ "cobweb"
+ ]
},
"spy": {
"unicode": "1F575",
@@ -11598,9 +25416,100 @@
"name": "sleuth or spy",
"shortname": ":spy:",
"category": "people",
- "aliases": [":sleuth_or_spy:"],
+ "aliases": [
+ ":sleuth_or_spy:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pi",
+ "undercover",
+ "investigator"
+ ]
+ },
+ "spy_tone1": {
+ "unicode": "1F575-1F3FB",
+ "unicode_alternates": "",
+ "name": "sleuth or spy tone 1",
+ "shortname": ":spy_tone1:",
+ "category": "people",
+ "aliases": [
+ ":sleuth_or_spy_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pi",
+ "undercover",
+ "investigator",
+ "person"
+ ]
+ },
+ "spy_tone2": {
+ "unicode": "1F575-1F3FC",
+ "unicode_alternates": "",
+ "name": "sleuth or spy tone 2",
+ "shortname": ":spy_tone2:",
+ "category": "people",
+ "aliases": [
+ ":sleuth_or_spy_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pi",
+ "undercover",
+ "investigator",
+ "person"
+ ]
+ },
+ "spy_tone3": {
+ "unicode": "1F575-1F3FD",
+ "unicode_alternates": "",
+ "name": "sleuth or spy tone 3",
+ "shortname": ":spy_tone3:",
+ "category": "people",
+ "aliases": [
+ ":sleuth_or_spy_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pi",
+ "undercover",
+ "investigator",
+ "person"
+ ]
+ },
+ "spy_tone4": {
+ "unicode": "1F575-1F3FE",
+ "unicode_alternates": "",
+ "name": "sleuth or spy tone 4",
+ "shortname": ":spy_tone4:",
+ "category": "people",
+ "aliases": [
+ ":sleuth_or_spy_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pi",
+ "undercover",
+ "investigator",
+ "person"
+ ]
+ },
+ "spy_tone5": {
+ "unicode": "1F575-1F3FF",
+ "unicode_alternates": "",
+ "name": "sleuth or spy tone 5",
+ "shortname": ":spy_tone5:",
+ "category": "people",
+ "aliases": [
+ ":sleuth_or_spy_tone5:"
+ ],
"aliases_ascii": [],
- "keywords": ["pi", "undercover", "investigator"]
+ "keywords": [
+ "pi",
+ "undercover",
+ "investigator",
+ "person"
+ ]
},
"stadium": {
"unicode": "1F3DF",
@@ -11610,17 +25519,28 @@
"category": "travel_places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sport", "event", "concert", "convention", "game"]
+ "keywords": [
+ "sport",
+ "event",
+ "concert",
+ "convention",
+ "game"
+ ]
},
"star": {
"unicode": "2B50",
- "unicode_alternates": ["2B50-FE0F"],
+ "unicode_alternates": [
+ "2B50-FE0F"
+ ],
"name": "white medium star",
"shortname": ":star:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "yellow"],
+ "keywords": [
+ "night",
+ "yellow"
+ ],
"moji": "⭐"
},
"star2": {
@@ -11631,9 +25551,48 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "sparkle", "glow", "glowing", "star", "five", "points", "classic"],
+ "keywords": [
+ "night",
+ "sparkle",
+ "glow",
+ "glowing",
+ "star",
+ "five",
+ "points",
+ "classic"
+ ],
"moji": "🌟"
},
+ "star_and_crescent": {
+ "unicode": "262A",
+ "unicode_alternates": "",
+ "name": "star and crescent",
+ "shortname": ":star_and_crescent:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "islam",
+ "muslim",
+ "religion",
+ "symbol"
+ ]
+ },
+ "star_of_david": {
+ "unicode": "2721",
+ "unicode_alternates": "",
+ "name": "star of david",
+ "shortname": ":star_of_david:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "jew",
+ "jewish",
+ "religion",
+ "symbol"
+ ]
+ },
"stars": {
"unicode": "1F320",
"unicode_alternates": [],
@@ -11642,7 +25601,17 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["night", "photo", "shooting", "shoot", "star", "sky", "night", "comet", "meteoroid"],
+ "keywords": [
+ "night",
+ "photo",
+ "shooting",
+ "shoot",
+ "star",
+ "sky",
+ "night",
+ "comet",
+ "meteoroid"
+ ],
"moji": "🌠"
},
"station": {
@@ -11653,7 +25622,14 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["public", "transportation", "vehicle", "station", "train", "subway"],
+ "keywords": [
+ "public",
+ "transportation",
+ "vehicle",
+ "station",
+ "train",
+ "subway"
+ ],
"moji": "🚉"
},
"statue_of_liberty": {
@@ -11664,7 +25640,10 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["american", "newyork"],
+ "keywords": [
+ "american",
+ "newyork"
+ ],
"moji": "🗽"
},
"steam_locomotive": {
@@ -11675,7 +25654,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["train", "transportation", "vehicle", "locomotive", "steam", "train", "engine"],
+ "keywords": [
+ "train",
+ "transportation",
+ "vehicle",
+ "locomotive",
+ "steam",
+ "train",
+ "engine"
+ ],
"moji": "🚂"
},
"stereo": {
@@ -11684,9 +25671,17 @@
"name": "portable stereo",
"shortname": ":stereo:",
"category": "objects_symbols",
- "aliases": [":portable_stereo:"],
- "aliases_ascii": [],
- "keywords": ["communication", "music", "program", "boom", "box"]
+ "aliases": [
+ ":portable_stereo:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "communication",
+ "music",
+ "program",
+ "boom",
+ "box"
+ ]
},
"stew": {
"unicode": "1F372",
@@ -11696,7 +25691,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "meat", "stew", "hearty", "soup", "thick", "hot", "pot"],
+ "keywords": [
+ "food",
+ "meat",
+ "stew",
+ "hearty",
+ "soup",
+ "thick",
+ "hot",
+ "pot"
+ ],
"moji": "🍲"
},
"stock_chart": {
@@ -11707,7 +25711,39 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["graph", "presentation", "stats", "business"]
+ "keywords": [
+ "graph",
+ "presentation",
+ "stats",
+ "business"
+ ]
+ },
+ "stop_button": {
+ "unicode": "23F9",
+ "unicode_alternates": "",
+ "name": "black square for stop",
+ "shortname": ":stop_button:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sound",
+ "symbol"
+ ]
+ },
+ "stopwatch": {
+ "unicode": "23F1",
+ "unicode_alternates": "",
+ "name": "stopwatch",
+ "shortname": ":stopwatch:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "clock",
+ "object",
+ "time"
+ ]
},
"straight_ruler": {
"unicode": "1F4CF",
@@ -11717,7 +25753,9 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["stationery"],
+ "keywords": [
+ "stationery"
+ ],
"moji": "📏"
},
"strawberry": {
@@ -11728,7 +25766,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "nature", "strawberry", "short", "cake", "berry"],
+ "keywords": [
+ "food",
+ "fruit",
+ "nature",
+ "strawberry",
+ "short",
+ "cake",
+ "berry"
+ ],
"moji": "🍓"
},
"stuck_out_tongue": {
@@ -11738,8 +25784,32 @@
"shortname": ":stuck_out_tongue:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [":P", ":-P", "=P", ":-p", ":p", "=p", ":-Þ", ":Þ", ":þ", ":-þ", ":-b", ":b", "d:"],
- "keywords": ["childish", "face", "mischievous", "playful", "prank", "tongue", "silly", "playful", "cheeky"],
+ "aliases_ascii": [
+ ":P",
+ ":-P",
+ "=P",
+ ":-p",
+ ":p",
+ "=p",
+ ":-Þ",
+ ":Þ",
+ ":þ",
+ ":-þ",
+ ":-b",
+ ":b",
+ "d:"
+ ],
+ "keywords": [
+ "childish",
+ "face",
+ "mischievous",
+ "playful",
+ "prank",
+ "tongue",
+ "silly",
+ "playful",
+ "cheeky"
+ ],
"moji": "😛"
},
"stuck_out_tongue_closed_eyes": {
@@ -11750,7 +25820,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "mischievous", "playful", "prank", "tongue", "kidding", "silly", "playful", "ecstatic"],
+ "keywords": [
+ "face",
+ "mischievous",
+ "playful",
+ "prank",
+ "tongue",
+ "kidding",
+ "silly",
+ "playful",
+ "ecstatic"
+ ],
"moji": "😝"
},
"stuck_out_tongue_winking_eye": {
@@ -11760,8 +25840,25 @@
"shortname": ":stuck_out_tongue_winking_eye:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [">:P", "X-P", "x-p"],
- "keywords": ["childish", "face", "mischievous", "playful", "prank", "tongue", "wink", "winking", "kidding", "silly", "playful", "crazy"],
+ "aliases_ascii": [
+ ">:P",
+ "X-P",
+ "x-p"
+ ],
+ "keywords": [
+ "childish",
+ "face",
+ "mischievous",
+ "playful",
+ "prank",
+ "tongue",
+ "wink",
+ "winking",
+ "kidding",
+ "silly",
+ "playful",
+ "crazy"
+ ],
"moji": "😜"
},
"sun_with_face": {
@@ -11772,7 +25869,13 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["morning", "sun", "anthropomorphic", "face", "sky"],
+ "keywords": [
+ "morning",
+ "sun",
+ "anthropomorphic",
+ "face",
+ "sky"
+ ],
"moji": "🌞"
},
"sunflower": {
@@ -11783,7 +25886,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "sunflower", "sun", "flower", "seeds", "yellow"],
+ "keywords": [
+ "nature",
+ "plant",
+ "sunflower",
+ "sun",
+ "flower",
+ "seeds",
+ "yellow"
+ ],
"moji": "🌻"
},
"sunglasses": {
@@ -11793,19 +25904,41 @@
"shortname": ":sunglasses:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["B-)", "B)", "8)", "8-)", "B-D", "8-D"],
- "keywords": ["cool", "face", "smiling", "sunglasses", "sun", "glasses", "sunny", "cool", "smooth"],
+ "aliases_ascii": [
+ "B-)",
+ "B)",
+ "8)",
+ "8-)",
+ "B-D",
+ "8-D"
+ ],
+ "keywords": [
+ "cool",
+ "face",
+ "smiling",
+ "sunglasses",
+ "sun",
+ "glasses",
+ "sunny",
+ "cool",
+ "smooth"
+ ],
"moji": "😎"
},
"sunny": {
"unicode": "2600",
- "unicode_alternates": ["2600-FE0F"],
+ "unicode_alternates": [
+ "2600-FE0F"
+ ],
"name": "black sun with rays",
"shortname": ":sunny:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["brightness", "weather"]
+ "keywords": [
+ "brightness",
+ "weather"
+ ]
},
"sunrise": {
"unicode": "1F305",
@@ -11815,7 +25948,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["morning", "photo", "vacation", "view", "sunrise", "sun", "morning", "color", "sky"],
+ "keywords": [
+ "morning",
+ "photo",
+ "vacation",
+ "view",
+ "sunrise",
+ "sun",
+ "morning",
+ "color",
+ "sky"
+ ],
"moji": "🌅"
},
"sunrise_over_mountains": {
@@ -11826,7 +25969,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["photo", "vacation", "view", "sunrise", "sun", "morning", "mountain", "rural", "color", "sky"],
+ "keywords": [
+ "photo",
+ "vacation",
+ "view",
+ "sunrise",
+ "sun",
+ "morning",
+ "mountain",
+ "rural",
+ "color",
+ "sky"
+ ],
"moji": "🌄"
},
"surfer": {
@@ -11837,9 +25991,114 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ocean", "sea", "sports", "surfer", "surf", "wave", "ocean", "ride", "swell"],
+ "keywords": [
+ "ocean",
+ "sea",
+ "sports",
+ "surfer",
+ "surf",
+ "wave",
+ "ocean",
+ "ride",
+ "swell"
+ ],
"moji": "🏄"
},
+ "surfer_tone1": {
+ "unicode": "1F3C4-1F3FB",
+ "unicode_alternates": "",
+ "name": "surfer tone 1",
+ "shortname": ":surfer_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "ocean",
+ "sea",
+ "sport",
+ "surf",
+ "wave",
+ "ocean",
+ "ride",
+ "swell"
+ ]
+ },
+ "surfer_tone2": {
+ "unicode": "1F3C4-1F3FC",
+ "unicode_alternates": "",
+ "name": "surfer tone 2",
+ "shortname": ":surfer_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "ocean",
+ "sea",
+ "sport",
+ "surf",
+ "wave",
+ "ocean",
+ "ride",
+ "swell"
+ ]
+ },
+ "surfer_tone3": {
+ "unicode": "1F3C4-1F3FD",
+ "unicode_alternates": "",
+ "name": "surfer tone 3",
+ "shortname": ":surfer_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "ocean",
+ "sea",
+ "sport",
+ "surf",
+ "wave",
+ "ocean",
+ "ride",
+ "swell"
+ ]
+ },
+ "surfer_tone4": {
+ "unicode": "1F3C4-1F3FE",
+ "unicode_alternates": "",
+ "name": "surfer tone 4",
+ "shortname": ":surfer_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "ocean",
+ "sea",
+ "sport",
+ "surf",
+ "wave",
+ "ocean",
+ "ride",
+ "swell"
+ ]
+ },
+ "surfer_tone5": {
+ "unicode": "1F3C4-1F3FF",
+ "unicode_alternates": "",
+ "name": "surfer tone 5",
+ "shortname": ":surfer_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "ocean",
+ "sea",
+ "sport",
+ "surf",
+ "wave",
+ "ocean",
+ "ride",
+ "swell"
+ ]
+ },
"sushi": {
"unicode": "1F363",
"unicode_alternates": [],
@@ -11848,7 +26107,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "japanese", "sushi", "fish", "raw", "nigiri", "japanese"],
+ "keywords": [
+ "food",
+ "japanese",
+ "sushi",
+ "fish",
+ "raw",
+ "nigiri",
+ "japanese"
+ ],
"moji": "🍣"
},
"suspension_railway": {
@@ -11859,7 +26126,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "suspension", "railway", "rail", "train", "transportation"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "suspension",
+ "railway",
+ "rail",
+ "train",
+ "transportation"
+ ],
"moji": "🚟"
},
"sweat": {
@@ -11869,8 +26144,22 @@
"shortname": ":sweat:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["':(", "':-(", "'=("],
- "keywords": ["cold", "sweat", "sick", "anxious", "worried", "clammy", "diaphoresis", "face", "hot"],
+ "aliases_ascii": [
+ "':(",
+ "':-(",
+ "'=("
+ ],
+ "keywords": [
+ "cold",
+ "sweat",
+ "sick",
+ "anxious",
+ "worried",
+ "clammy",
+ "diaphoresis",
+ "face",
+ "hot"
+ ],
"moji": "😓"
},
"sweat_drops": {
@@ -11881,7 +26170,9 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["water"],
+ "keywords": [
+ "water"
+ ],
"moji": "💦"
},
"sweat_smile": {
@@ -11891,8 +26182,23 @@
"shortname": ":sweat_smile:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": ["':)", "':-)", "'=)", "':D", "':-D", "'=D"],
- "keywords": ["face", "happy", "hot", "smiling", "cold", "sweat", "perspiration"],
+ "aliases_ascii": [
+ "':)",
+ "':-)",
+ "'=)",
+ "':D",
+ "':-D",
+ "'=D"
+ ],
+ "keywords": [
+ "face",
+ "happy",
+ "hot",
+ "smiling",
+ "cold",
+ "sweat",
+ "perspiration"
+ ],
"moji": "😅"
},
"sweet_potato": {
@@ -11903,7 +26209,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "nature", "sweet", "potato", "potassium", "roasted", "roast"],
+ "keywords": [
+ "food",
+ "nature",
+ "sweet",
+ "potato",
+ "potassium",
+ "roasted",
+ "roast"
+ ],
"moji": "🍠"
},
"swimmer": {
@@ -11914,9 +26228,120 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sports", "swimmer", "swim", "water", "pool", "laps", "freestyle", "butterfly", "breaststroke", "backstroke"],
+ "keywords": [
+ "sports",
+ "swimmer",
+ "swim",
+ "water",
+ "pool",
+ "laps",
+ "freestyle",
+ "butterfly",
+ "breaststroke",
+ "backstroke"
+ ],
"moji": "🏊"
},
+ "swimmer_tone1": {
+ "unicode": "1F3CA-1F3FB",
+ "unicode_alternates": "",
+ "name": "swimmer tone 1",
+ "shortname": ":swimmer_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "swim",
+ "water",
+ "pool",
+ "laps",
+ "freestyle",
+ "butterfly",
+ "breaststroke",
+ "backstroke"
+ ]
+ },
+ "swimmer_tone2": {
+ "unicode": "1F3CA-1F3FC",
+ "unicode_alternates": "",
+ "name": "swimmer tone 2",
+ "shortname": ":swimmer_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "swim",
+ "water",
+ "pool",
+ "laps",
+ "freestyle",
+ "butterfly",
+ "breaststroke",
+ "backstroke"
+ ]
+ },
+ "swimmer_tone3": {
+ "unicode": "1F3CA-1F3FD",
+ "unicode_alternates": "",
+ "name": "swimmer tone 3",
+ "shortname": ":swimmer_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "swim",
+ "water",
+ "pool",
+ "laps",
+ "freestyle",
+ "butterfly",
+ "breaststroke",
+ "backstroke"
+ ]
+ },
+ "swimmer_tone4": {
+ "unicode": "1F3CA-1F3FE",
+ "unicode_alternates": "",
+ "name": "swimmer tone 4",
+ "shortname": ":swimmer_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "swim",
+ "water",
+ "pool",
+ "laps",
+ "freestyle",
+ "butterfly",
+ "breaststroke",
+ "backstroke"
+ ]
+ },
+ "swimmer_tone5": {
+ "unicode": "1F3CA-1F3FF",
+ "unicode_alternates": "",
+ "name": "swimmer tone 5",
+ "shortname": ":swimmer_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "sport",
+ "swim",
+ "water",
+ "pool",
+ "laps",
+ "freestyle",
+ "butterfly",
+ "breaststroke",
+ "backstroke"
+ ]
+ },
"symbols": {
"unicode": "1F523",
"unicode_alternates": [],
@@ -11925,9 +26350,21 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "🔣"
},
+ "synagogue": {
+ "unicode": "1F54D",
+ "unicode_alternates": "",
+ "name": "synagogue",
+ "shortname": ":synagogue:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"syringe": {
"unicode": "1F489",
"unicode_alternates": [],
@@ -11936,9 +26373,26 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blood", "drugs", "health", "hospital", "medicine", "needle"],
+ "keywords": [
+ "blood",
+ "drugs",
+ "health",
+ "hospital",
+ "medicine",
+ "needle"
+ ],
"moji": "💉"
},
+ "taco": {
+ "unicode": "1F32E",
+ "unicode_alternates": "",
+ "name": "taco",
+ "shortname": ":taco:",
+ "category": "foods",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"tada": {
"unicode": "1F389",
"unicode_alternates": [],
@@ -11947,7 +26401,18 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["contulations", "party", "party", "popper", "tada", "celebration", "victory", "announcement", "climax", "congratulations"],
+ "keywords": [
+ "contulations",
+ "party",
+ "party",
+ "popper",
+ "tada",
+ "celebration",
+ "victory",
+ "announcement",
+ "climax",
+ "congratulations"
+ ],
"moji": "🎉"
},
"tanabata_tree": {
@@ -11958,7 +26423,16 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "plant", "tanabata", "tree", "festival", "star", "wish", "holiday"],
+ "keywords": [
+ "nature",
+ "plant",
+ "tanabata",
+ "tree",
+ "festival",
+ "star",
+ "wish",
+ "holiday"
+ ],
"moji": "🎋"
},
"tangerine": {
@@ -11969,18 +26443,40 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "nature", "tangerine", "citrus", "orange"],
+ "keywords": [
+ "food",
+ "fruit",
+ "nature",
+ "tangerine",
+ "citrus",
+ "orange"
+ ],
"moji": "🍊"
},
"taurus": {
"unicode": "2649",
- "unicode_alternates": ["2649-FE0F"],
+ "unicode_alternates": [
+ "2649-FE0F"
+ ],
"name": "taurus",
"shortname": ":taurus:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["purple-square", "sign", "taurus", "bull", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "purple-square",
+ "sign",
+ "taurus",
+ "bull",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♉"
},
"taxi": {
@@ -11991,7 +26487,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cars", "transportation", "uber", "vehicle", "taxi", "car", "automobile", "city", "transport", "service"],
+ "keywords": [
+ "cars",
+ "transportation",
+ "uber",
+ "vehicle",
+ "taxi",
+ "car",
+ "automobile",
+ "city",
+ "transport",
+ "service"
+ ],
"moji": "🚕"
},
"tea": {
@@ -12002,18 +26509,36 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bowl", "breakfast", "british", "drink", "green", "tea", "leaf", "drink", "teacup", "hot", "beverage"],
+ "keywords": [
+ "bowl",
+ "breakfast",
+ "british",
+ "drink",
+ "green",
+ "tea",
+ "leaf",
+ "drink",
+ "teacup",
+ "hot",
+ "beverage"
+ ],
"moji": "🍵"
},
"telephone": {
"unicode": "260E",
- "unicode_alternates": ["260E-FE0F"],
+ "unicode_alternates": [
+ "260E-FE0F"
+ ],
"name": "black telephone",
"shortname": ":telephone:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "dial", "technology"],
+ "keywords": [
+ "communication",
+ "dial",
+ "technology"
+ ],
"moji": "☎"
},
"telephone_black": {
@@ -12022,9 +26547,15 @@
"name": "black touchtone telephone",
"shortname": ":telephone_black:",
"category": "objects_symbols",
- "aliases": [":black_touchtone_telephone:"],
+ "aliases": [
+ ":black_touchtone_telephone:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "dial", "technology"]
+ "keywords": [
+ "communication",
+ "dial",
+ "technology"
+ ]
},
"telephone_receiver": {
"unicode": "1F4DE",
@@ -12034,7 +26565,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["communication", "dial", "technology"],
+ "keywords": [
+ "communication",
+ "dial",
+ "technology"
+ ],
"moji": "📞"
},
"telephone_white": {
@@ -12043,9 +26578,15 @@
"name": "white touchtone telephone",
"shortname": ":telephone_white:",
"category": "objects_symbols",
- "aliases": [":white_touchtone_telephone:"],
+ "aliases": [
+ ":white_touchtone_telephone:"
+ ],
"aliases_ascii": [],
- "keywords": ["communication", "dial", "technology"]
+ "keywords": [
+ "communication",
+ "dial",
+ "technology"
+ ]
},
"telescope": {
"unicode": "1F52D",
@@ -12055,9 +26596,28 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["space", "stars"],
+ "keywords": [
+ "space",
+ "stars"
+ ],
"moji": "🔭"
},
+ "ten": {
+ "unicode": "1F51F",
+ "unicode_alternates": "",
+ "name": "keycap ten",
+ "shortname": ":ten:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "10",
+ "blue-square",
+ "numbers",
+ "symbol",
+ "word"
+ ]
+ },
"tennis": {
"unicode": "1F3BE",
"unicode_alternates": [],
@@ -12066,18 +26626,36 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["balls", "green", "sports", "tennis", "racket", "racquet", "ball", "game", "net", "court", "love"],
+ "keywords": [
+ "balls",
+ "green",
+ "sports",
+ "tennis",
+ "racket",
+ "racquet",
+ "ball",
+ "game",
+ "net",
+ "court",
+ "love"
+ ],
"moji": "🎾"
},
"tent": {
"unicode": "26FA",
- "unicode_alternates": ["26FA-FE0F"],
+ "unicode_alternates": [
+ "26FA-FE0F"
+ ],
"name": "tent",
"shortname": ":tent:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["camp", "outdoors", "photo"],
+ "keywords": [
+ "camp",
+ "outdoors",
+ "photo"
+ ],
"moji": "⛺"
},
"thermometer": {
@@ -12088,7 +26666,33 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["temperature"]
+ "keywords": [
+ "temperature"
+ ]
+ },
+ "thermometer_face": {
+ "unicode": "1F912",
+ "unicode_alternates": "",
+ "name": "face with thermometer",
+ "shortname": ":thermometer_face:",
+ "category": "people",
+ "aliases": [
+ ":face_with_thermometer:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "thinking": {
+ "unicode": "1F914",
+ "unicode_alternates": "",
+ "name": "thinking face",
+ "shortname": ":thinking:",
+ "category": "people",
+ "aliases": [
+ ":thinking_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"thought_balloon": {
"unicode": "1F4AD",
@@ -12098,7 +26702,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bubble", "cloud", "speech", "thought", "balloon", "comic", "think", "day dream", "wonder"],
+ "keywords": [
+ "bubble",
+ "cloud",
+ "speech",
+ "thought",
+ "balloon",
+ "comic",
+ "think",
+ "day dream",
+ "wonder"
+ ],
"moji": "💭"
},
"thought_left": {
@@ -12107,9 +26721,18 @@
"name": "left thought bubble",
"shortname": ":thought_left:",
"category": "objects_symbols",
- "aliases": [":left_thought_bubble:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "cloud", "comic", "think", "day dream", "wonder"]
+ "aliases": [
+ ":left_thought_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "cloud",
+ "comic",
+ "think",
+ "day dream",
+ "wonder"
+ ]
},
"thought_right": {
"unicode": "1F5ED",
@@ -12117,20 +26740,36 @@
"name": "right thought bubble",
"shortname": ":thought_right:",
"category": "objects_symbols",
- "aliases": [":right_thought_bubble:"],
- "aliases_ascii": [],
- "keywords": ["balloon", "cloud", "comic", "think", "day dream", "wonder"]
+ "aliases": [
+ ":right_thought_bubble:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "balloon",
+ "cloud",
+ "comic",
+ "think",
+ "day dream",
+ "wonder"
+ ]
},
"three": {
"moji": "3️⃣",
"unicode": "0033-20E3",
- "unicode_alternates": ["0033-FE0F-20E3"],
+ "unicode_alternates": [
+ "0033-FE0F-20E3"
+ ],
"name": "digit three",
"shortname": ":three:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["3", "blue-square", "numbers", "prime"]
+ "keywords": [
+ "3",
+ "blue-square",
+ "numbers",
+ "prime"
+ ]
},
"thumbs_down_reverse": {
"unicode": "1F593",
@@ -12138,9 +26777,15 @@
"name": "reversed thumbs down sign",
"shortname": ":thumbs_down_reverse:",
"category": "people",
- "aliases": [":reversed_thumbs_down_sign:"],
+ "aliases": [
+ ":reversed_thumbs_down_sign:"
+ ],
"aliases_ascii": [],
- "keywords": ["hand", "no", "-1"]
+ "keywords": [
+ "hand",
+ "no",
+ "-1"
+ ]
},
"thumbs_up_reverse": {
"unicode": "1F592",
@@ -12148,9 +26793,17 @@
"name": "reversed thumbs up sign",
"shortname": ":thumbs_up_reverse:",
"category": "people",
- "aliases": [":reversed_thumbs_up_sign:"],
- "aliases_ascii": [],
- "keywords": ["cool", "hand", "like", "yes", "+1"]
+ "aliases": [
+ ":reversed_thumbs_up_sign:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes",
+ "+1"
+ ]
},
"thumbsdown": {
"unicode": "1F44E",
@@ -12158,22 +26811,219 @@
"name": "thumbs down sign",
"shortname": ":thumbsdown:",
"category": "emoticons",
- "aliases": [":-1:"],
- "aliases_ascii": [],
- "keywords": ["hand", "no"],
+ "aliases": [
+ ":-1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hand",
+ "no"
+ ],
"moji": "👎"
},
+ "thumbsdown_tone1": {
+ "unicode": "1F44E-1F3FB",
+ "unicode_alternates": "",
+ "name": "thumbs down sign tone 1",
+ "shortname": ":thumbsdown_tone1:",
+ "category": "people",
+ "aliases": [
+ ":-1_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hand",
+ "no",
+ "-1"
+ ]
+ },
+ "thumbsdown_tone2": {
+ "unicode": "1F44E-1F3FC",
+ "unicode_alternates": "",
+ "name": "thumbs down sign tone 2",
+ "shortname": ":thumbsdown_tone2:",
+ "category": "people",
+ "aliases": [
+ ":-1_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hand",
+ "no",
+ "-1"
+ ]
+ },
+ "thumbsdown_tone3": {
+ "unicode": "1F44E-1F3FD",
+ "unicode_alternates": "",
+ "name": "thumbs down sign tone 3",
+ "shortname": ":thumbsdown_tone3:",
+ "category": "people",
+ "aliases": [
+ ":-1_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hand",
+ "no",
+ "-1"
+ ]
+ },
+ "thumbsdown_tone4": {
+ "unicode": "1F44E-1F3FE",
+ "unicode_alternates": "",
+ "name": "thumbs down sign tone 4",
+ "shortname": ":thumbsdown_tone4:",
+ "category": "people",
+ "aliases": [
+ ":-1_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hand",
+ "no",
+ "-1"
+ ]
+ },
+ "thumbsdown_tone5": {
+ "unicode": "1F44E-1F3FF",
+ "unicode_alternates": "",
+ "name": "thumbs down sign tone 5",
+ "shortname": ":thumbsdown_tone5:",
+ "category": "people",
+ "aliases": [
+ ":-1_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "hand",
+ "no",
+ "-1"
+ ]
+ },
"thumbsup": {
"unicode": "1F44D",
"unicode_alternates": [],
"name": "thumbs up sign",
"shortname": ":thumbsup:",
"category": "emoticons",
- "aliases": [":+1:"],
- "aliases_ascii": [],
- "keywords": ["cool", "hand", "like", "yes"],
+ "aliases": [
+ ":+1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes"
+ ],
"moji": "👍"
},
+ "thumbsup_tone1": {
+ "unicode": "1F44D-1F3FB",
+ "unicode_alternates": "",
+ "name": "thumbs up sign tone 1",
+ "shortname": ":thumbsup_tone1:",
+ "category": "people",
+ "aliases": [
+ ":+1_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes",
+ "+1"
+ ]
+ },
+ "thumbsup_tone2": {
+ "unicode": "1F44D-1F3FC",
+ "unicode_alternates": "",
+ "name": "thumbs up sign tone 2",
+ "shortname": ":thumbsup_tone2:",
+ "category": "people",
+ "aliases": [
+ ":+1_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes",
+ "+1"
+ ]
+ },
+ "thumbsup_tone3": {
+ "unicode": "1F44D-1F3FD",
+ "unicode_alternates": "",
+ "name": "thumbs up sign tone 3",
+ "shortname": ":thumbsup_tone3:",
+ "category": "people",
+ "aliases": [
+ ":+1_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes",
+ "+1"
+ ]
+ },
+ "thumbsup_tone4": {
+ "unicode": "1F44D-1F3FE",
+ "unicode_alternates": "",
+ "name": "thumbs up sign tone 4",
+ "shortname": ":thumbsup_tone4:",
+ "category": "people",
+ "aliases": [
+ ":+1_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes",
+ "+1"
+ ]
+ },
+ "thumbsup_tone5": {
+ "unicode": "1F44D-1F3FF",
+ "unicode_alternates": "",
+ "name": "thumbs up sign tone 5",
+ "shortname": ":thumbsup_tone5:",
+ "category": "people",
+ "aliases": [
+ ":+1_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "cool",
+ "hand",
+ "like",
+ "yes",
+ "+1"
+ ]
+ },
+ "thunder_cloud_rain": {
+ "unicode": "26C8",
+ "unicode_alternates": "",
+ "name": "thunder cloud and rain",
+ "shortname": ":thunder_cloud_rain:",
+ "category": "nature",
+ "aliases": [
+ ":thunder_cloud_and_rain:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "nature",
+ "weather"
+ ]
+ },
"ticket": {
"unicode": "1F3AB",
"unicode_alternates": [],
@@ -12182,7 +27032,18 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["concert", "event", "pass", "ticket", "show", "entertainment", "stub", "admission", "proof", "purchase"],
+ "keywords": [
+ "concert",
+ "event",
+ "pass",
+ "ticket",
+ "show",
+ "entertainment",
+ "stub",
+ "admission",
+ "proof",
+ "purchase"
+ ],
"moji": "🎫"
},
"tickets": {
@@ -12191,9 +27052,20 @@
"name": "admission tickets",
"shortname": ":tickets:",
"category": "activity",
- "aliases": [":admission_tickets:"],
- "aliases_ascii": [],
- "keywords": ["concert", "event", "pass", "show", "entertainment", "stub", "proof", "purchase"]
+ "aliases": [
+ ":admission_tickets:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "concert",
+ "event",
+ "pass",
+ "show",
+ "entertainment",
+ "stub",
+ "proof",
+ "purchase"
+ ]
},
"tiger": {
"unicode": "1F42F",
@@ -12203,7 +27075,9 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal"],
+ "keywords": [
+ "animal"
+ ],
"moji": "🐯"
},
"tiger2": {
@@ -12214,9 +27088,33 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "tiger", "cat", "striped", "tony", "tigger", "hobs"],
+ "keywords": [
+ "animal",
+ "nature",
+ "tiger",
+ "cat",
+ "striped",
+ "tony",
+ "tigger",
+ "hobs"
+ ],
"moji": "🐅"
},
+ "timer": {
+ "unicode": "23F2",
+ "unicode_alternates": "",
+ "name": "timer clock",
+ "shortname": ":timer:",
+ "category": "objects",
+ "aliases": [
+ ":timer_clock:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "object",
+ "time"
+ ]
+ },
"tired_face": {
"unicode": "1F62B",
"unicode_alternates": [],
@@ -12225,9 +27123,34 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "frustrated", "sick", "upset", "whine", "exhausted", "sleepy", "tired"],
+ "keywords": [
+ "face",
+ "frustrated",
+ "sick",
+ "upset",
+ "whine",
+ "exhausted",
+ "sleepy",
+ "tired"
+ ],
"moji": "😫"
},
+ "tm": {
+ "unicode": "2122",
+ "unicode_alternates": "2122-fe0f",
+ "name": "trade mark sign",
+ "shortname": ":tm:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "brand",
+ "trademark",
+ "symbol",
+ "tm",
+ "word"
+ ]
+ },
"toilet": {
"unicode": "1F6BD",
"unicode_alternates": [],
@@ -12236,7 +27159,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["restroom", "wc", "toilet", "bathroom", "throne", "porcelain", "waste", "flush", "plumbing"],
+ "keywords": [
+ "restroom",
+ "wc",
+ "toilet",
+ "bathroom",
+ "throne",
+ "porcelain",
+ "waste",
+ "flush",
+ "plumbing"
+ ],
"moji": "🚽"
},
"tokyo_tower": {
@@ -12247,7 +27180,10 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["japan", "photo"],
+ "keywords": [
+ "japan",
+ "photo"
+ ],
"moji": "🗼"
},
"tomato": {
@@ -12258,9 +27194,68 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "nature", "vegetable", "tomato", "fruit", "sauce", "italian"],
+ "keywords": [
+ "food",
+ "fruit",
+ "nature",
+ "vegetable",
+ "tomato",
+ "fruit",
+ "sauce",
+ "italian"
+ ],
"moji": "🍅"
},
+ "tone1": {
+ "unicode": "1F3FB",
+ "unicode_alternates": "",
+ "name": "emoji modifier Fitzpatrick type-1-2",
+ "shortname": ":tone1:",
+ "category": "modifier",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "tone2": {
+ "unicode": "1F3FC",
+ "unicode_alternates": "",
+ "name": "emoji modifier Fitzpatrick type-3",
+ "shortname": ":tone2:",
+ "category": "modifier",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "tone3": {
+ "unicode": "1F3FD",
+ "unicode_alternates": "",
+ "name": "emoji modifier Fitzpatrick type-4",
+ "shortname": ":tone3:",
+ "category": "modifier",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "tone4": {
+ "unicode": "1F3FE",
+ "unicode_alternates": "",
+ "name": "emoji modifier Fitzpatrick type-5",
+ "shortname": ":tone4:",
+ "category": "modifier",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "tone5": {
+ "unicode": "1F3FF",
+ "unicode_alternates": "",
+ "name": "emoji modifier Fitzpatrick type-6",
+ "shortname": ":tone5:",
+ "category": "modifier",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"tongue": {
"unicode": "1F445",
"unicode_alternates": [],
@@ -12269,7 +27264,25 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mouth", "playful", "tongue", "mouth", "taste", "buds", "food", "silly", "playful", "tease", "kiss", "french kiss", "lick", "tasty", "playfulness", "silliness", "intimacy"],
+ "keywords": [
+ "mouth",
+ "playful",
+ "tongue",
+ "mouth",
+ "taste",
+ "buds",
+ "food",
+ "silly",
+ "playful",
+ "tease",
+ "kiss",
+ "french kiss",
+ "lick",
+ "tasty",
+ "playfulness",
+ "silliness",
+ "intimacy"
+ ],
"moji": "👅"
},
"tools": {
@@ -12278,9 +27291,13 @@
"name": "hammer and wrench",
"shortname": ":tools:",
"category": "objects_symbols",
- "aliases": [":hammer_and_wrench:"],
+ "aliases": [
+ ":hammer_and_wrench:"
+ ],
"aliases_ascii": [],
- "keywords": ["tools"]
+ "keywords": [
+ "tools"
+ ]
},
"top": {
"unicode": "1F51D",
@@ -12290,7 +27307,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "words"],
+ "keywords": [
+ "blue-square",
+ "words"
+ ],
"moji": "🔝"
},
"tophat": {
@@ -12301,9 +27321,63 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["classy", "gentleman", "magic", "top", "hat", "cap", "beaver", "high", "tall", "stove", "pipe", "chimney", "topper", "london", "period piece", "magic", "magician"],
+ "keywords": [
+ "classy",
+ "gentleman",
+ "magic",
+ "top",
+ "hat",
+ "cap",
+ "beaver",
+ "high",
+ "tall",
+ "stove",
+ "pipe",
+ "chimney",
+ "topper",
+ "london",
+ "period piece",
+ "magic",
+ "magician"
+ ],
"moji": "🎩"
},
+ "track_next": {
+ "unicode": "23ED",
+ "unicode_alternates": "",
+ "name": "black right-pointing double triangle with vertical bar",
+ "shortname": ":track_next:",
+ "category": "symbols",
+ "aliases": [
+ ":next_track:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrow",
+ "next scene",
+ "next track",
+ "sound",
+ "symbol"
+ ]
+ },
+ "track_previous": {
+ "unicode": "23EE",
+ "unicode_alternates": "",
+ "name": "black left-pointing double triangle with vertical bar",
+ "shortname": ":track_previous:",
+ "category": "symbols",
+ "aliases": [
+ ":previous_track:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "arrow",
+ "previous scene",
+ "previous track",
+ "sound",
+ "symbol"
+ ]
+ },
"trackball": {
"unicode": "1F5B2",
"unicode_alternates": [],
@@ -12312,7 +27386,11 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["input", "device", "gadget"]
+ "keywords": [
+ "input",
+ "device",
+ "gadget"
+ ]
},
"tractor": {
"unicode": "1F69C",
@@ -12322,7 +27400,17 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["agriculture", "car", "farming", "vehicle", "tractor", "farm", "construction", "machine", "digger"],
+ "keywords": [
+ "agriculture",
+ "car",
+ "farming",
+ "vehicle",
+ "tractor",
+ "farm",
+ "construction",
+ "machine",
+ "digger"
+ ],
"moji": "🚜"
},
"traffic_light": {
@@ -12333,7 +27421,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["traffic", "transportation", "traffic", "light", "stop", "go", "yield", "horizontal"],
+ "keywords": [
+ "traffic",
+ "transportation",
+ "traffic",
+ "light",
+ "stop",
+ "go",
+ "yield",
+ "horizontal"
+ ],
"moji": "🚥"
},
"train": {
@@ -12344,7 +27441,10 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["tram", "rail"]
+ "keywords": [
+ "tram",
+ "rail"
+ ]
},
"train2": {
"unicode": "1F686",
@@ -12354,7 +27454,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "train", "locomotive", "rail"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "train",
+ "locomotive",
+ "rail"
+ ],
"moji": "🚆"
},
"train_diesel": {
@@ -12363,9 +27469,16 @@
"name": "diesel locomotive",
"shortname": ":train_diesel:",
"category": "travel_places",
- "aliases": [":diesel_locomotive:"],
+ "aliases": [
+ ":diesel_locomotive:"
+ ],
"aliases_ascii": [],
- "keywords": ["train", "transportation", "engine", "rail"]
+ "keywords": [
+ "train",
+ "transportation",
+ "engine",
+ "rail"
+ ]
},
"tram": {
"unicode": "1F68A",
@@ -12375,7 +27488,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "vehicle", "tram", "transportation", "transport"],
+ "keywords": [
+ "transportation",
+ "vehicle",
+ "tram",
+ "transportation",
+ "transport"
+ ],
"moji": "🚊"
},
"triangle_round": {
@@ -12384,9 +27503,15 @@
"name": "triangle with rounded corners",
"shortname": ":triangle_round:",
"category": "objects_symbols",
- "aliases": [":triangle_with_rounded_corners:"],
+ "aliases": [
+ ":triangle_with_rounded_corners:"
+ ],
"aliases_ascii": [],
- "keywords": ["caution", "warning", "alert"]
+ "keywords": [
+ "caution",
+ "warning",
+ "alert"
+ ]
},
"triangular_flag_on_post": {
"unicode": "1F6A9",
@@ -12396,7 +27521,14 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["triangle", "triangular", "flag", "golf", "post", "flagpole"],
+ "keywords": [
+ "triangle",
+ "triangular",
+ "flag",
+ "golf",
+ "post",
+ "flagpole"
+ ],
"moji": "🚩"
},
"triangular_ruler": {
@@ -12407,7 +27539,12 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["architect", "math", "sketch", "stationery"],
+ "keywords": [
+ "architect",
+ "math",
+ "sketch",
+ "stationery"
+ ],
"moji": "📐"
},
"trident": {
@@ -12418,7 +27555,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["spear", "weapon"],
+ "keywords": [
+ "spear",
+ "weapon"
+ ],
"moji": "🔱"
},
"triumph": {
@@ -12429,7 +27569,14 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "gas", "phew", "triumph", "steam", "breath"],
+ "keywords": [
+ "face",
+ "gas",
+ "phew",
+ "triumph",
+ "steam",
+ "breath"
+ ],
"moji": "😤"
},
"trolleybus": {
@@ -12440,7 +27587,16 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bart", "transportation", "vehicle", "trolley", "bus", "city", "transport", "transportation"],
+ "keywords": [
+ "bart",
+ "transportation",
+ "vehicle",
+ "trolley",
+ "bus",
+ "city",
+ "transport",
+ "transportation"
+ ],
"moji": "🚎"
},
"trophy": {
@@ -12451,7 +27607,22 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["award", "ceremony", "contest", "ftw", "place", "win", "trophy", "first", "show", "place", "win", "reward", "achievement", "medal"],
+ "keywords": [
+ "award",
+ "ceremony",
+ "contest",
+ "ftw",
+ "place",
+ "win",
+ "trophy",
+ "first",
+ "show",
+ "place",
+ "win",
+ "reward",
+ "achievement",
+ "medal"
+ ],
"moji": "🏆"
},
"tropical_drink": {
@@ -12462,7 +27633,17 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["beverage", "tropical", "drink", "mixed", "pineapple", "coconut", "pina", "fruit", "umbrella"],
+ "keywords": [
+ "beverage",
+ "tropical",
+ "drink",
+ "mixed",
+ "pineapple",
+ "coconut",
+ "pina",
+ "fruit",
+ "umbrella"
+ ],
"moji": "🍹"
},
"tropical_fish": {
@@ -12473,7 +27654,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "swim"],
+ "keywords": [
+ "animal",
+ "swim"
+ ],
"moji": "🐠"
},
"truck": {
@@ -12484,7 +27668,13 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["cars", "transportation", "truck", "delivery", "package"],
+ "keywords": [
+ "cars",
+ "transportation",
+ "truck",
+ "delivery",
+ "package"
+ ],
"moji": "🚚"
},
"trumpet": {
@@ -12495,7 +27685,14 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["brass", "music", "trumpet", "brass", "music", "instrument"],
+ "keywords": [
+ "brass",
+ "music",
+ "trumpet",
+ "brass",
+ "music",
+ "instrument"
+ ],
"moji": "🎺"
},
"tulip": {
@@ -12506,18 +27703,42 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["flowers", "nature", "plant", "tulip", "flower", "bulb", "spring", "easter"],
+ "keywords": [
+ "flowers",
+ "nature",
+ "plant",
+ "tulip",
+ "flower",
+ "bulb",
+ "spring",
+ "easter"
+ ],
"moji": "🌷"
},
+ "turkey": {
+ "unicode": "1F983",
+ "unicode_alternates": "",
+ "name": "turkey",
+ "shortname": ":turkey:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"turned_ok_hand": {
"unicode": "1F58F",
"unicode_alternates": [],
"name": "turned ok hand sign",
"shortname": ":turned_ok_hand:",
"category": "people",
- "aliases": [":turned_ok_hand_sign:"],
+ "aliases": [
+ ":turned_ok_hand_sign:"
+ ],
"aliases_ascii": [],
- "keywords": ["perfect", "okay"]
+ "keywords": [
+ "perfect",
+ "okay"
+ ]
},
"turtle": {
"unicode": "1F422",
@@ -12527,9 +27748,39 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "slow", "turtle", "shell", "tortoise", "chelonian", "reptile", "slow", "snap", "steady"],
+ "keywords": [
+ "animal",
+ "slow",
+ "turtle",
+ "shell",
+ "tortoise",
+ "chelonian",
+ "reptile",
+ "slow",
+ "snap",
+ "steady"
+ ],
"moji": "🐢"
},
+ "tv": {
+ "unicode": "1F4FA",
+ "unicode_alternates": "",
+ "name": "television",
+ "shortname": ":tv:",
+ "category": "objects",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "oldschool",
+ "program",
+ "show",
+ "technology",
+ "tv",
+ "entertainment",
+ "object",
+ "video"
+ ]
+ },
"twisted_rightwards_arrows": {
"unicode": "1F500",
"unicode_alternates": [],
@@ -12538,19 +27789,28 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "🔀"
},
"two": {
"moji": "2️⃣",
"unicode": "0032-20E3",
- "unicode_alternates": ["0032-FE0F-20E3"],
+ "unicode_alternates": [
+ "0032-FE0F-20E3"
+ ],
"name": "digit two",
"shortname": ":two:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["2", "blue-square", "numbers", "prime"]
+ "keywords": [
+ "2",
+ "blue-square",
+ "numbers",
+ "prime"
+ ]
},
"two_hearts": {
"unicode": "1F495",
@@ -12560,7 +27820,17 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines", "heart", "hearts", "two", "love", "emotion"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines",
+ "heart",
+ "hearts",
+ "two",
+ "love",
+ "emotion"
+ ],
"moji": "💕"
},
"two_men_holding_hands": {
@@ -12571,7 +27841,21 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bromance", "couple", "friends", "like", "love", "men", "gay", "homosexual", "friends", "hands", "holding", "team", "unity"],
+ "keywords": [
+ "bromance",
+ "couple",
+ "friends",
+ "like",
+ "love",
+ "men",
+ "gay",
+ "homosexual",
+ "friends",
+ "hands",
+ "holding",
+ "team",
+ "unity"
+ ],
"moji": "👬"
},
"two_women_holding_hands": {
@@ -12582,7 +27866,24 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["couple", "female", "friends", "like", "love", "women", "hands", "girlfriends", "friends", "sisters", "mother", "daughter", "gay", "homosexual", "couple", "unity"],
+ "keywords": [
+ "couple",
+ "female",
+ "friends",
+ "like",
+ "love",
+ "women",
+ "hands",
+ "girlfriends",
+ "friends",
+ "sisters",
+ "mother",
+ "daughter",
+ "gay",
+ "homosexual",
+ "couple",
+ "unity"
+ ],
"moji": "👭"
},
"u5272": {
@@ -12593,7 +27894,13 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "cut", "divide", "kanji", "pink"],
+ "keywords": [
+ "chinese",
+ "cut",
+ "divide",
+ "kanji",
+ "pink"
+ ],
"moji": "🈹"
},
"u5408": {
@@ -12604,7 +27911,12 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "japanese", "join", "kanji"],
+ "keywords": [
+ "chinese",
+ "japanese",
+ "join",
+ "kanji"
+ ],
"moji": "🈴"
},
"u55b6": {
@@ -12615,18 +27927,28 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["japanese", "opening hours"],
+ "keywords": [
+ "japanese",
+ "opening hours"
+ ],
"moji": "🈺"
},
"u6307": {
"unicode": "1F22F",
- "unicode_alternates": ["1F22F-FE0F"],
+ "unicode_alternates": [
+ "1F22F-FE0F"
+ ],
"name": "squared cjk unified ideograph-6307",
"shortname": ":u6307:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "green-square", "kanji", "point"],
+ "keywords": [
+ "chinese",
+ "green-square",
+ "kanji",
+ "point"
+ ],
"moji": "🈯"
},
"u6708": {
@@ -12637,7 +27959,13 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "japanese", "kanji", "moon", "orange-square"],
+ "keywords": [
+ "chinese",
+ "japanese",
+ "kanji",
+ "moon",
+ "orange-square"
+ ],
"moji": "🈷"
},
"u6709": {
@@ -12648,7 +27976,12 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "have", "kanji", "orange-square"],
+ "keywords": [
+ "chinese",
+ "have",
+ "kanji",
+ "orange-square"
+ ],
"moji": "🈶"
},
"u6e80": {
@@ -12659,18 +27992,33 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "full", "japanese", "kanji", "red-square"],
+ "keywords": [
+ "chinese",
+ "full",
+ "japanese",
+ "kanji",
+ "red-square"
+ ],
"moji": "🈵"
},
"u7121": {
"unicode": "1F21A",
- "unicode_alternates": ["1F21A-FE0F"],
+ "unicode_alternates": [
+ "1F21A-FE0F"
+ ],
"name": "squared cjk unified ideograph-7121",
"shortname": ":u7121:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "japanese", "kanji", "no", "nothing", "orange-square"],
+ "keywords": [
+ "chinese",
+ "japanese",
+ "kanji",
+ "no",
+ "nothing",
+ "orange-square"
+ ],
"moji": "🈚"
},
"u7533": {
@@ -12681,7 +28029,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "japanese", "kanji"],
+ "keywords": [
+ "chinese",
+ "japanese",
+ "kanji"
+ ],
"moji": "🈸"
},
"u7981": {
@@ -12692,7 +28044,14 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "forbidden", "japanese", "kanji", "limit", "restricted"],
+ "keywords": [
+ "chinese",
+ "forbidden",
+ "japanese",
+ "kanji",
+ "limit",
+ "restricted"
+ ],
"moji": "🈲"
},
"u7a7a": {
@@ -12703,20 +28062,45 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["chinese", "empty", "japanese", "kanji"],
+ "keywords": [
+ "chinese",
+ "empty",
+ "japanese",
+ "kanji"
+ ],
"moji": "🈳"
},
"umbrella": {
"unicode": "2614",
- "unicode_alternates": ["2614-FE0F"],
+ "unicode_alternates": [
+ "2614-FE0F"
+ ],
"name": "umbrella with rain drops",
"shortname": ":umbrella:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["rain", "weather"],
+ "keywords": [
+ "rain",
+ "weather"
+ ],
"moji": "☔"
},
+ "umbrella2": {
+ "unicode": "2602",
+ "unicode_alternates": "",
+ "name": "umbrella",
+ "shortname": ":umbrella2:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "clothing",
+ "nature",
+ "rain",
+ "weather"
+ ]
+ },
"unamused": {
"unicode": "1F612",
"unicode_alternates": [],
@@ -12725,7 +28109,19 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["bored", "face", "indifference", "serious", "straight face", "unamused", "not amused", "depressed", "unhappy", "disapprove", "lame"],
+ "keywords": [
+ "bored",
+ "face",
+ "indifference",
+ "serious",
+ "straight face",
+ "unamused",
+ "not amused",
+ "depressed",
+ "unhappy",
+ "disapprove",
+ "lame"
+ ],
"moji": "😒"
},
"underage": {
@@ -12736,9 +28132,26 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["18", "drink", "night", "pub"],
+ "keywords": [
+ "18",
+ "drink",
+ "night",
+ "pub"
+ ],
"moji": "🔞"
},
+ "unicorn": {
+ "unicode": "1F984",
+ "unicode_alternates": "",
+ "name": "unicorn face",
+ "shortname": ":unicorn:",
+ "category": "nature",
+ "aliases": [
+ ":unicorn_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"unlock": {
"unicode": "1F513",
"unicode_alternates": [],
@@ -12747,7 +28160,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["privacy", "security"],
+ "keywords": [
+ "privacy",
+ "security"
+ ],
"moji": "🔓"
},
"up": {
@@ -12758,20 +28174,138 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square"],
+ "keywords": [
+ "blue-square"
+ ],
"moji": "🆙"
},
+ "upside_down": {
+ "unicode": "1F643",
+ "unicode_alternates": "",
+ "name": "upside-down face",
+ "shortname": ":upside_down:",
+ "category": "people",
+ "aliases": [
+ ":upside_down_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
+ },
+ "urn": {
+ "unicode": "26B1",
+ "unicode_alternates": "",
+ "name": "funeral urn",
+ "shortname": ":urn:",
+ "category": "objects",
+ "aliases": [
+ ":funeral_urn:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "death",
+ "object"
+ ]
+ },
"v": {
"unicode": "270C",
- "unicode_alternates": ["270C-FE0F"],
+ "unicode_alternates": [
+ "270C-FE0F"
+ ],
"name": "victory hand",
"shortname": ":v:",
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fingers", "hand", "ohyeah", "peace", "two", "victory"],
+ "keywords": [
+ "fingers",
+ "hand",
+ "ohyeah",
+ "peace",
+ "two",
+ "victory"
+ ],
"moji": "✌"
},
+ "v_tone1": {
+ "unicode": "270C-1F3FB",
+ "unicode_alternates": "",
+ "name": "victory hand tone 1",
+ "shortname": ":v_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "ohyeah",
+ "peace",
+ "two",
+ "v"
+ ]
+ },
+ "v_tone2": {
+ "unicode": "270C-1F3FC",
+ "unicode_alternates": "",
+ "name": "victory hand tone 2",
+ "shortname": ":v_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "ohyeah",
+ "peace",
+ "two",
+ "v"
+ ]
+ },
+ "v_tone3": {
+ "unicode": "270C-1F3FD",
+ "unicode_alternates": "",
+ "name": "victory hand tone 3",
+ "shortname": ":v_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "ohyeah",
+ "peace",
+ "two",
+ "v"
+ ]
+ },
+ "v_tone4": {
+ "unicode": "270C-1F3FE",
+ "unicode_alternates": "",
+ "name": "victory hand tone 4",
+ "shortname": ":v_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "ohyeah",
+ "peace",
+ "two",
+ "v"
+ ]
+ },
+ "v_tone5": {
+ "unicode": "270C-1F3FF",
+ "unicode_alternates": "",
+ "name": "victory hand tone 5",
+ "shortname": ":v_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "fingers",
+ "ohyeah",
+ "peace",
+ "two",
+ "v"
+ ]
+ },
"vertical_traffic_light": {
"unicode": "1F6A6",
"unicode_alternates": [],
@@ -12780,7 +28314,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["transportation", "traffic", "light", "stop", "go", "yield", "vertical"],
+ "keywords": [
+ "transportation",
+ "traffic",
+ "light",
+ "stop",
+ "go",
+ "yield",
+ "vertical"
+ ],
"moji": "🚦"
},
"vhs": {
@@ -12791,7 +28333,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["oldschool", "record", "video"],
+ "keywords": [
+ "oldschool",
+ "record",
+ "video"
+ ],
"moji": "📼"
},
"vibration_mode": {
@@ -12802,7 +28348,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["orange-square", "phone"],
+ "keywords": [
+ "orange-square",
+ "phone"
+ ],
"moji": "📳"
},
"video_camera": {
@@ -12813,7 +28362,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["film", "record"],
+ "keywords": [
+ "film",
+ "record"
+ ],
"moji": "📹"
},
"video_game": {
@@ -12824,7 +28376,19 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["PS4", "console", "controller", "play", "video", "game", "console", "controller", "nintendo", "xbox", "playstation"],
+ "keywords": [
+ "PS4",
+ "console",
+ "controller",
+ "play",
+ "video",
+ "game",
+ "console",
+ "controller",
+ "nintendo",
+ "xbox",
+ "playstation"
+ ],
"moji": "🎮"
},
"violin": {
@@ -12835,18 +28399,39 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["instrument", "music", "violin", "fiddle", "music", "instrument"],
+ "keywords": [
+ "instrument",
+ "music",
+ "violin",
+ "fiddle",
+ "music",
+ "instrument"
+ ],
"moji": "🎻"
},
"virgo": {
"unicode": "264D",
- "unicode_alternates": ["264D-FE0F"],
+ "unicode_alternates": [
+ "264D-FE0F"
+ ],
"name": "virgo",
"shortname": ":virgo:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sign", "virgo", "maiden", "astrology", "greek", "constellation", "stars", "zodiac", "sign", "zodiac", "horoscope"],
+ "keywords": [
+ "sign",
+ "virgo",
+ "maiden",
+ "astrology",
+ "greek",
+ "constellation",
+ "stars",
+ "zodiac",
+ "sign",
+ "zodiac",
+ "horoscope"
+ ],
"moji": "♍"
},
"volcano": {
@@ -12857,9 +28442,27 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "photo", "volcano", "lava", "magma", "hot", "explode"],
+ "keywords": [
+ "nature",
+ "photo",
+ "volcano",
+ "lava",
+ "magma",
+ "hot",
+ "explode"
+ ],
"moji": "🌋"
},
+ "volleyball": {
+ "unicode": "1F3D0",
+ "unicode_alternates": "",
+ "name": "volleyball",
+ "shortname": ":volleyball:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": []
+ },
"vs": {
"unicode": "1F19A",
"unicode_alternates": [],
@@ -12868,7 +28471,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["orange-square", "words"],
+ "keywords": [
+ "orange-square",
+ "words"
+ ],
"moji": "🆚"
},
"vulcan": {
@@ -12877,9 +28483,113 @@
"name": "raised hand with part between middle and ring fingers",
"shortname": ":vulcan:",
"category": "people",
- "aliases": [":raised_hand_with_part_between_middle_and_ring_fingers:"],
- "aliases_ascii": [],
- "keywords": ["vulcan", "spock", "leonard", "nimoy", "star trek", "live long"]
+ "aliases": [
+ ":raised_hand_with_part_between_middle_and_ring_fingers:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "vulcan",
+ "spock",
+ "leonard",
+ "nimoy",
+ "star trek",
+ "live long"
+ ]
+ },
+ "vulcan_tone1": {
+ "unicode": "1F596-1F3FB",
+ "unicode_alternates": "",
+ "name": "raised hand with part between middle and ring fingers tone 1",
+ "shortname": ":vulcan_tone1:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_part_between_middle_and_ring_fingers_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "vulcan",
+ "spock",
+ "leonard",
+ "nimoy",
+ "star trek",
+ "live long"
+ ]
+ },
+ "vulcan_tone2": {
+ "unicode": "1F596-1F3FC",
+ "unicode_alternates": "",
+ "name": "raised hand with part between middle and ring fingers tone 2",
+ "shortname": ":vulcan_tone2:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_part_between_middle_and_ring_fingers_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "vulcan",
+ "spock",
+ "leonard",
+ "nimoy",
+ "star trek",
+ "live long"
+ ]
+ },
+ "vulcan_tone3": {
+ "unicode": "1F596-1F3FD",
+ "unicode_alternates": "",
+ "name": "raised hand with part between middle and ring fingers tone 3",
+ "shortname": ":vulcan_tone3:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_part_between_middle_and_ring_fingers_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "vulcan",
+ "spock",
+ "leonard",
+ "nimoy",
+ "star trek",
+ "live long"
+ ]
+ },
+ "vulcan_tone4": {
+ "unicode": "1F596-1F3FE",
+ "unicode_alternates": "",
+ "name": "raised hand with part between middle and ring fingers tone 4",
+ "shortname": ":vulcan_tone4:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_part_between_middle_and_ring_fingers_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "vulcan",
+ "spock",
+ "leonard",
+ "nimoy",
+ "star trek",
+ "live long"
+ ]
+ },
+ "vulcan_tone5": {
+ "unicode": "1F596-1F3FF",
+ "unicode_alternates": "",
+ "name": "raised hand with part between middle and ring fingers tone 5",
+ "shortname": ":vulcan_tone5:",
+ "category": "people",
+ "aliases": [
+ ":raised_hand_with_part_between_middle_and_ring_fingers_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "vulcan",
+ "spock",
+ "leonard",
+ "nimoy",
+ "star trek",
+ "live long"
+ ]
},
"walking": {
"unicode": "1F6B6",
@@ -12889,9 +28599,103 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["human", "man", "walk", "pedestrian", "stroll", "stride", "foot", "feet"],
+ "keywords": [
+ "human",
+ "man",
+ "walk",
+ "pedestrian",
+ "stroll",
+ "stride",
+ "foot",
+ "feet"
+ ],
"moji": "🚶"
},
+ "walking_tone1": {
+ "unicode": "1F6B6-1F3FB",
+ "unicode_alternates": "",
+ "name": "pedestrian tone 1",
+ "shortname": ":walking_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "man",
+ "walk",
+ "stroll",
+ "stride",
+ "hiking",
+ "hike"
+ ]
+ },
+ "walking_tone2": {
+ "unicode": "1F6B6-1F3FC",
+ "unicode_alternates": "",
+ "name": "pedestrian tone 2",
+ "shortname": ":walking_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "man",
+ "walk",
+ "stroll",
+ "stride",
+ "hiking",
+ "hike"
+ ]
+ },
+ "walking_tone3": {
+ "unicode": "1F6B6-1F3FD",
+ "unicode_alternates": "",
+ "name": "pedestrian tone 3",
+ "shortname": ":walking_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "man",
+ "walk",
+ "stroll",
+ "stride",
+ "hiking",
+ "hike"
+ ]
+ },
+ "walking_tone4": {
+ "unicode": "1F6B6-1F3FE",
+ "unicode_alternates": "",
+ "name": "pedestrian tone 4",
+ "shortname": ":walking_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "man",
+ "walk",
+ "stroll",
+ "stride",
+ "hiking",
+ "hike"
+ ]
+ },
+ "walking_tone5": {
+ "unicode": "1F6B6-1F3FF",
+ "unicode_alternates": "",
+ "name": "pedestrian tone 5",
+ "shortname": ":walking_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "man",
+ "walk",
+ "stroll",
+ "stride",
+ "hiking",
+ "hike"
+ ]
+ },
"waning_crescent_moon": {
"unicode": "1F318",
"unicode_alternates": [],
@@ -12900,7 +28704,16 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "crescent", "waning", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "crescent",
+ "waning",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌘"
},
"waning_gibbous_moon": {
@@ -12911,18 +28724,32 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "waning", "gibbous", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "waning",
+ "gibbous",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌖"
},
"warning": {
"unicode": "26A0",
- "unicode_alternates": ["26A0-FE0F"],
+ "unicode_alternates": [
+ "26A0-FE0F"
+ ],
"name": "warning sign",
"shortname": ":warning:",
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["exclamation", "wip"],
+ "keywords": [
+ "exclamation",
+ "wip"
+ ],
"moji": "⚠"
},
"wastebasket": {
@@ -12933,17 +28760,26 @@
"category": "objects_symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["trash", "garbage", "dispose"]
+ "keywords": [
+ "trash",
+ "garbage",
+ "dispose"
+ ]
},
"watch": {
"unicode": "231A",
- "unicode_alternates": ["231A-FE0F"],
+ "unicode_alternates": [
+ "231A-FE0F"
+ ],
"name": "watch",
"shortname": ":watch:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accessories", "time"],
+ "keywords": [
+ "accessories",
+ "time"
+ ],
"moji": "⌚"
},
"water_buffalo": {
@@ -12954,7 +28790,18 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "cow", "nature", "ox", "water", "buffalo", "asia", "bovine", "milk", "dairy"],
+ "keywords": [
+ "animal",
+ "cow",
+ "nature",
+ "ox",
+ "water",
+ "buffalo",
+ "asia",
+ "bovine",
+ "milk",
+ "dairy"
+ ],
"moji": "🐃"
},
"watermelon": {
@@ -12965,7 +28812,15 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["food", "fruit", "melon", "watermelon", "summer", "fruit", "large"],
+ "keywords": [
+ "food",
+ "fruit",
+ "melon",
+ "watermelon",
+ "summer",
+ "fruit",
+ "large"
+ ],
"moji": "🍉"
},
"wave": {
@@ -12976,9 +28831,100 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["farewell", "gesture", "goodbye", "hands", "solong"],
+ "keywords": [
+ "farewell",
+ "gesture",
+ "goodbye",
+ "hands",
+ "solong"
+ ],
"moji": "👋"
},
+ "wave_tone1": {
+ "unicode": "1F44B-1F3FB",
+ "unicode_alternates": "",
+ "name": "waving hand sign tone 1",
+ "shortname": ":wave_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "farewell",
+ "gesture",
+ "goodbye",
+ "solong",
+ "hi",
+ "wave"
+ ]
+ },
+ "wave_tone2": {
+ "unicode": "1F44B-1F3FC",
+ "unicode_alternates": "",
+ "name": "waving hand sign tone 2",
+ "shortname": ":wave_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "farewell",
+ "gesture",
+ "goodbye",
+ "solong",
+ "hi",
+ "wave"
+ ]
+ },
+ "wave_tone3": {
+ "unicode": "1F44B-1F3FD",
+ "unicode_alternates": "",
+ "name": "waving hand sign tone 3",
+ "shortname": ":wave_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "farewell",
+ "gesture",
+ "goodbye",
+ "solong",
+ "hi",
+ "wave"
+ ]
+ },
+ "wave_tone4": {
+ "unicode": "1F44B-1F3FE",
+ "unicode_alternates": "",
+ "name": "waving hand sign tone 4",
+ "shortname": ":wave_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "farewell",
+ "gesture",
+ "goodbye",
+ "solong",
+ "hi",
+ "wave"
+ ]
+ },
+ "wave_tone5": {
+ "unicode": "1F44B-1F3FF",
+ "unicode_alternates": "",
+ "name": "waving hand sign tone 5",
+ "shortname": ":wave_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "farewell",
+ "gesture",
+ "goodbye",
+ "solong",
+ "hi",
+ "wave"
+ ]
+ },
"wavy_dash": {
"unicode": "3030",
"unicode_alternates": [],
@@ -12987,7 +28933,10 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["draw", "line"],
+ "keywords": [
+ "draw",
+ "line"
+ ],
"moji": "〰"
},
"waxing_crescent_moon": {
@@ -12998,7 +28947,15 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature", "moon", "waxing", "sky", "night", "cheese", "phase"],
+ "keywords": [
+ "nature",
+ "moon",
+ "waxing",
+ "sky",
+ "night",
+ "cheese",
+ "phase"
+ ],
"moji": "🌒"
},
"waxing_gibbous_moon": {
@@ -13009,7 +28966,9 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["nature"],
+ "keywords": [
+ "nature"
+ ],
"moji": "🌔"
},
"wc": {
@@ -13020,7 +28979,20 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "restroom", "toilet", "water", "closet", "toilet", "bathroom", "throne", "porcelain", "waste", "flush", "plumbing"],
+ "keywords": [
+ "blue-square",
+ "restroom",
+ "toilet",
+ "water",
+ "closet",
+ "toilet",
+ "bathroom",
+ "throne",
+ "porcelain",
+ "waste",
+ "flush",
+ "plumbing"
+ ],
"moji": "🚾"
},
"weary": {
@@ -13031,7 +29003,21 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "frustrated", "sad", "sleepy", "tired", "weary", "sleepy", "tired", "tiredness", "study", "finals", "school", "exhausted"],
+ "keywords": [
+ "face",
+ "frustrated",
+ "sad",
+ "sleepy",
+ "tired",
+ "weary",
+ "sleepy",
+ "tired",
+ "tiredness",
+ "study",
+ "finals",
+ "school",
+ "exhausted"
+ ],
"moji": "😩"
},
"wedding": {
@@ -13042,7 +29028,15 @@
"category": "places",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "bride", "couple", "groom", "like", "love", "marriage"],
+ "keywords": [
+ "affection",
+ "bride",
+ "couple",
+ "groom",
+ "like",
+ "love",
+ "marriage"
+ ],
"moji": "💒"
},
"whale": {
@@ -13053,7 +29047,12 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "ocean", "sea"],
+ "keywords": [
+ "animal",
+ "nature",
+ "ocean",
+ "sea"
+ ],
"moji": "🐳"
},
"whale2": {
@@ -13064,18 +29063,48 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature", "ocean", "sea", "whale", "blubber", "bloated", "fat", "large", "massive"],
+ "keywords": [
+ "animal",
+ "nature",
+ "ocean",
+ "sea",
+ "whale",
+ "blubber",
+ "bloated",
+ "fat",
+ "large",
+ "massive"
+ ],
"moji": "🐋"
},
+ "wheel_of_dharma": {
+ "unicode": "2638",
+ "unicode_alternates": "",
+ "name": "wheel of dharma",
+ "shortname": ":wheel_of_dharma:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "buddhist",
+ "religion",
+ "symbol"
+ ]
+ },
"wheelchair": {
"unicode": "267F",
- "unicode_alternates": ["267F-FE0F"],
+ "unicode_alternates": [
+ "267F-FE0F"
+ ],
"name": "wheelchair symbol",
"shortname": ":wheelchair:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "disabled"],
+ "keywords": [
+ "blue-square",
+ "disabled"
+ ],
"moji": "♿"
},
"white_check_mark": {
@@ -13086,18 +29115,26 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["agree", "green-square", "ok"],
+ "keywords": [
+ "agree",
+ "green-square",
+ "ok"
+ ],
"moji": "✅"
},
"white_circle": {
"unicode": "26AA",
- "unicode_alternates": ["26AA-FE0F"],
+ "unicode_alternates": [
+ "26AA-FE0F"
+ ],
"name": "medium white circle",
"shortname": ":white_circle:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "⚪"
},
"white_flower": {
@@ -13108,51 +29145,81 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["japanese", "white", "flower", "teacher", "school", "grade", "score", "brilliance", "intelligence", "homework", "student", "assignment", "praise"],
+ "keywords": [
+ "japanese",
+ "white",
+ "flower",
+ "teacher",
+ "school",
+ "grade",
+ "score",
+ "brilliance",
+ "intelligence",
+ "homework",
+ "student",
+ "assignment",
+ "praise"
+ ],
"moji": "💮"
},
"white_large_square": {
"unicode": "2B1C",
- "unicode_alternates": ["2B1C-FE0F"],
+ "unicode_alternates": [
+ "2B1C-FE0F"
+ ],
"name": "white large square",
"shortname": ":white_large_square:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "⬜"
},
"white_medium_small_square": {
"unicode": "25FD",
- "unicode_alternates": ["25FD-FE0F"],
+ "unicode_alternates": [
+ "25FD-FE0F"
+ ],
"name": "white medium small square",
"shortname": ":white_medium_small_square:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "◽"
},
"white_medium_square": {
"unicode": "25FB",
- "unicode_alternates": ["25FB-FE0F"],
+ "unicode_alternates": [
+ "25FB-FE0F"
+ ],
"name": "white medium square",
"shortname": ":white_medium_square:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "◻"
},
"white_small_square": {
"unicode": "25AB",
- "unicode_alternates": ["25AB-FE0F"],
+ "unicode_alternates": [
+ "25AB-FE0F"
+ ],
"name": "white small square",
"shortname": ":white_small_square:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "▫"
},
"white_square_button": {
@@ -13163,9 +29230,56 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["shape"],
+ "keywords": [
+ "shape"
+ ],
"moji": "🔳"
},
+ "white_sun_cloud": {
+ "unicode": "1F325",
+ "unicode_alternates": "",
+ "name": "white sun behind cloud",
+ "shortname": ":white_sun_cloud:",
+ "category": "nature",
+ "aliases": [
+ ":white_sun_behind_cloud:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "nature",
+ "weather"
+ ]
+ },
+ "white_sun_rain_cloud": {
+ "unicode": "1F326",
+ "unicode_alternates": "",
+ "name": "white sun behind cloud with rain",
+ "shortname": ":white_sun_rain_cloud:",
+ "category": "nature",
+ "aliases": [
+ ":white_sun_behind_cloud_with_rain:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "nature",
+ "weather"
+ ]
+ },
+ "white_sun_small_cloud": {
+ "unicode": "1F324",
+ "unicode_alternates": "",
+ "name": "white sun with small cloud",
+ "shortname": ":white_sun_small_cloud:",
+ "category": "nature",
+ "aliases": [
+ ":white_sun_with_small_cloud:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "nature",
+ "weather"
+ ]
+ },
"wind_blowing_face": {
"unicode": "1F32C",
"unicode_alternates": [],
@@ -13174,7 +29288,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["mother", "nature"]
+ "keywords": [
+ "mother",
+ "nature"
+ ]
},
"wind_chime": {
"unicode": "1F390",
@@ -13184,7 +29301,21 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["ding", "nature", "wind", "chime", "bell", "fūrin", "instrument", "music", "spirits", "soothing", "protective", "spiritual", "sound"],
+ "keywords": [
+ "ding",
+ "nature",
+ "wind",
+ "chime",
+ "bell",
+ "fūrin",
+ "instrument",
+ "music",
+ "spirits",
+ "soothing",
+ "protective",
+ "spiritual",
+ "sound"
+ ],
"moji": "🎐"
},
"wine_glass": {
@@ -13195,7 +29326,20 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["alcohol", "beverage", "booze", "bottle", "drink", "drunk", "fermented", "glass", "grapes", "tasting", "wine", "winery"],
+ "keywords": [
+ "alcohol",
+ "beverage",
+ "booze",
+ "bottle",
+ "drink",
+ "drunk",
+ "fermented",
+ "glass",
+ "grapes",
+ "tasting",
+ "wine",
+ "winery"
+ ],
"moji": "🍷"
},
"wink": {
@@ -13205,8 +29349,26 @@
"shortname": ":wink:",
"category": "emoticons",
"aliases": [],
- "aliases_ascii": [";)", ";-)", "*-)", "*)", ";-]", ";]", ";D", ";^)"],
- "keywords": ["face", "happy", "mischievous", "secret", "wink", "winking", "friendly", "joke"],
+ "aliases_ascii": [
+ ";)",
+ ";-)",
+ "*-)",
+ "*)",
+ ";-]",
+ ";]",
+ ";D",
+ ";^)"
+ ],
+ "keywords": [
+ "face",
+ "happy",
+ "mischievous",
+ "secret",
+ "wink",
+ "winking",
+ "friendly",
+ "joke"
+ ],
"moji": "😉"
},
"wolf": {
@@ -13217,7 +29379,10 @@
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["animal", "nature"],
+ "keywords": [
+ "animal",
+ "nature"
+ ],
"moji": "🐺"
},
"woman": {
@@ -13228,9 +29393,82 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["female", "girls"],
+ "keywords": [
+ "female",
+ "girls"
+ ],
"moji": "👩"
},
+ "woman_tone1": {
+ "unicode": "1F469-1F3FB",
+ "unicode_alternates": "",
+ "name": "woman tone 1",
+ "shortname": ":woman_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "lady"
+ ]
+ },
+ "woman_tone2": {
+ "unicode": "1F469-1F3FC",
+ "unicode_alternates": "",
+ "name": "woman tone 2",
+ "shortname": ":woman_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "lady"
+ ]
+ },
+ "woman_tone3": {
+ "unicode": "1F469-1F3FD",
+ "unicode_alternates": "",
+ "name": "woman tone 3",
+ "shortname": ":woman_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "lady"
+ ]
+ },
+ "woman_tone4": {
+ "unicode": "1F469-1F3FE",
+ "unicode_alternates": "",
+ "name": "woman tone 4",
+ "shortname": ":woman_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "lady"
+ ]
+ },
+ "woman_tone5": {
+ "unicode": "1F469-1F3FF",
+ "unicode_alternates": "",
+ "name": "woman tone 5",
+ "shortname": ":woman_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "female",
+ "girl",
+ "lady"
+ ]
+ },
"womans_clothes": {
"unicode": "1F45A",
"unicode_alternates": [],
@@ -13239,7 +29477,21 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["fashion", "woman", "clothing", "clothes", "blouse", "shirt", "wardrobe", "breasts", "cleavage", "shopping", "shop", "dressing", "dressed"],
+ "keywords": [
+ "fashion",
+ "woman",
+ "clothing",
+ "clothes",
+ "blouse",
+ "shirt",
+ "wardrobe",
+ "breasts",
+ "cleavage",
+ "shopping",
+ "shop",
+ "dressing",
+ "dressed"
+ ],
"moji": "👚"
},
"womans_hat": {
@@ -13250,7 +29502,11 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["accessories", "fashion", "female"],
+ "keywords": [
+ "accessories",
+ "fashion",
+ "female"
+ ],
"moji": "👒"
},
"womens": {
@@ -13261,7 +29517,16 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["purple-square", "woman", "bathroom", "restroom", "sign", "girl", "female", "avatar"],
+ "keywords": [
+ "purple-square",
+ "woman",
+ "bathroom",
+ "restroom",
+ "sign",
+ "girl",
+ "female",
+ "avatar"
+ ],
"moji": "🚺"
},
"worried": {
@@ -13272,7 +29537,16 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["concern", "face", "nervous", "worried", "anxious", "distressed", "nervous", "tense"],
+ "keywords": [
+ "concern",
+ "face",
+ "nervous",
+ "worried",
+ "anxious",
+ "distressed",
+ "nervous",
+ "tense"
+ ],
"moji": "😟"
},
"wrench": {
@@ -13283,7 +29557,11 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["diy", "ikea", "tools"],
+ "keywords": [
+ "diy",
+ "ikea",
+ "tools"
+ ],
"moji": "🔧"
},
"writing_hand": {
@@ -13292,9 +29570,91 @@
"name": "left writing hand",
"shortname": ":writing_hand:",
"category": "people",
- "aliases": [":left_writing_hand:"],
+ "aliases": [
+ ":left_writing_hand:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "write",
+ "sign",
+ "signature",
+ "draw"
+ ]
+ },
+ "writing_hand_tone1": {
+ "unicode": "270D-1F3FB",
+ "unicode_alternates": "",
+ "name": "writing hand tone 1",
+ "shortname": ":writing_hand_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "write",
+ "sign",
+ "signature",
+ "draw"
+ ]
+ },
+ "writing_hand_tone2": {
+ "unicode": "270D-1F3FC",
+ "unicode_alternates": "",
+ "name": "writing hand tone 2",
+ "shortname": ":writing_hand_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "write",
+ "sign",
+ "signature",
+ "draw"
+ ]
+ },
+ "writing_hand_tone3": {
+ "unicode": "270D-1F3FD",
+ "unicode_alternates": "",
+ "name": "writing hand tone 3",
+ "shortname": ":writing_hand_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "write",
+ "sign",
+ "signature",
+ "draw"
+ ]
+ },
+ "writing_hand_tone4": {
+ "unicode": "270D-1F3FE",
+ "unicode_alternates": "",
+ "name": "writing hand tone 4",
+ "shortname": ":writing_hand_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "write",
+ "sign",
+ "signature",
+ "draw"
+ ]
+ },
+ "writing_hand_tone5": {
+ "unicode": "270D-1F3FF",
+ "unicode_alternates": "",
+ "name": "writing hand tone 5",
+ "shortname": ":writing_hand_tone5:",
+ "category": "people",
+ "aliases": [],
"aliases_ascii": [],
- "keywords": ["write", "sign", "signature", "draw"]
+ "keywords": [
+ "write",
+ "sign",
+ "signature",
+ "draw"
+ ]
},
"x": {
"unicode": "274C",
@@ -13304,7 +29664,11 @@
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["delete", "no", "remove"],
+ "keywords": [
+ "delete",
+ "no",
+ "remove"
+ ],
"moji": "❌"
},
"yellow_heart": {
@@ -13315,7 +29679,25 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["affection", "like", "love", "valentines", "yellow", "gold", "heart", "love", "friendship", "happy", "happiness", "trust", "compassionate", "respectful", "honest", "caring", "selfless"],
+ "keywords": [
+ "affection",
+ "like",
+ "love",
+ "valentines",
+ "yellow",
+ "gold",
+ "heart",
+ "love",
+ "friendship",
+ "happy",
+ "happiness",
+ "trust",
+ "compassionate",
+ "respectful",
+ "honest",
+ "caring",
+ "selfless"
+ ],
"moji": "💛"
},
"yen": {
@@ -13326,9 +29708,39 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["currency", "dollar", "japanese", "money", "yen", "japan", "japanese", "banknote", "money", "currency", "paper", "cash", "bill"],
+ "keywords": [
+ "currency",
+ "dollar",
+ "japanese",
+ "money",
+ "yen",
+ "japan",
+ "japanese",
+ "banknote",
+ "money",
+ "currency",
+ "paper",
+ "cash",
+ "bill"
+ ],
"moji": "💴"
},
+ "yin_yang": {
+ "unicode": "262F",
+ "unicode_alternates": "",
+ "name": "yin yang",
+ "shortname": ":yin_yang:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "religion",
+ "sign",
+ "symbol",
+ "tao",
+ "taoist"
+ ]
+ },
"yum": {
"unicode": "1F60B",
"unicode_alternates": [],
@@ -13337,30 +29749,68 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["face", "happy", "joy", "smile", "tongue", "delicious", "savoring", "food", "eat", "yummy", "yum", "tasty", "savory"],
+ "keywords": [
+ "face",
+ "happy",
+ "joy",
+ "smile",
+ "tongue",
+ "delicious",
+ "savoring",
+ "food",
+ "eat",
+ "yummy",
+ "yum",
+ "tasty",
+ "savory"
+ ],
"moji": "😋"
},
"zap": {
"unicode": "26A1",
- "unicode_alternates": ["26A1-FE0F"],
+ "unicode_alternates": [
+ "26A1-FE0F"
+ ],
"name": "high voltage sign",
"shortname": ":zap:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["lightning bolt", "thunder", "weather"],
+ "keywords": [
+ "lightning bolt",
+ "thunder",
+ "weather"
+ ],
"moji": "⚡"
},
"zero": {
"moji": "0️⃣",
"unicode": "0030-20E3",
- "unicode_alternates": ["0030-FE0F-20E3"],
+ "unicode_alternates": [
+ "0030-FE0F-20E3"
+ ],
"name": "digit zero",
"shortname": ":zero:",
"category": "other",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["blue-square", "null", "numbers"]
+ "keywords": [
+ "blue-square",
+ "null",
+ "numbers"
+ ]
+ },
+ "zipper_mouth": {
+ "unicode": "1F910",
+ "unicode_alternates": "",
+ "name": "zipper-mouth face",
+ "shortname": ":zipper_mouth:",
+ "category": "people",
+ "aliases": [
+ ":zipper_mouth_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": []
},
"zzz": {
"unicode": "1F4A4",
@@ -13370,7 +29820,10 @@
"category": "emoticons",
"aliases": [],
"aliases_ascii": [],
- "keywords": ["sleepy", "tired"],
+ "keywords": [
+ "sleepy",
+ "tired"
+ ],
"moji": "💤"
}
}
diff --git a/lib/api/api.rb b/lib/api/api.rb
index 7efe0a0262f..7d65145176b 100644
--- a/lib/api/api.rb
+++ b/lib/api/api.rb
@@ -56,5 +56,6 @@ module API
mount Triggers
mount Builds
mount Variables
+ mount Runners
end
end
diff --git a/lib/api/builds.rb b/lib/api/builds.rb
index a8bd3842ce4..2b104f90aa7 100644
--- a/lib/api/builds.rb
+++ b/lib/api/builds.rb
@@ -60,6 +60,30 @@ module API
user_can_download_artifacts: can?(current_user, :read_build, user_project)
end
+ # Download the artifacts file from build
+ #
+ # Parameters:
+ # id (required) - The ID of a build
+ # token (required) - The build authorization token
+ # Example Request:
+ # GET /projects/:id/builds/:build_id/artifacts
+ get ':id/builds/:build_id/artifacts' do
+ authorize_read_builds!
+
+ build = get_build(params[:build_id])
+ return not_found!(build) unless build
+
+ artifacts_file = build.artifacts_file
+
+ unless artifacts_file.file_storage?
+ return redirect_to build.artifacts_file.url
+ end
+
+ return not_found! unless artifacts_file.exists?
+
+ present_file!(artifacts_file.path, artifacts_file.filename)
+ end
+
# Get a trace of a specific build of a project
#
# Parameters:
@@ -115,13 +139,33 @@ module API
authorize_update_builds!
build = get_build(params[:build_id])
- return forbidden!('Build is not retryable') unless build && build.retryable?
+ return not_found!(build) unless build
+ return forbidden!('Build is not retryable') unless build.retryable?
build = Ci::Build.retry(build)
present build, with: Entities::Build,
user_can_download_artifacts: can?(current_user, :read_build, user_project)
end
+
+ # Erase build (remove artifacts and build trace)
+ #
+ # Parameters:
+ # id (required) - the id of a project
+ # build_id (required) - the id of a build
+ # example Request:
+ # post /projects/:id/build/:build_id/erase
+ post ':id/builds/:build_id/erase' do
+ authorize_update_builds!
+
+ build = get_build(params[:build_id])
+ return not_found!(build) unless build
+ return forbidden!('Build is not erasable!') unless build.erasable?
+
+ build.erase(erased_by: current_user)
+ present build, with: Entities::Build,
+ user_can_download_artifacts: can?(current_user, :download_build_artifacts, user_project)
+ end
end
helpers do
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index a9c09ffdb31..a3b5f1eb8d3 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -49,7 +49,7 @@ module API
expose :enable_ssl_verification
end
- class ForkedFromProject < Grape::Entity
+ class BasicProjectDetails < Grape::Entity
expose :id
expose :name, :name_with_namespace
expose :path, :path_with_namespace
@@ -67,7 +67,7 @@ module API
expose :shared_runners_enabled
expose :creator_id
expose :namespace
- expose :forked_from_project, using: Entities::ForkedFromProject, if: lambda{ |project, options| project.forked? }
+ expose :forked_from_project, using: Entities::BasicProjectDetails, if: lambda{ |project, options| project.forked? }
expose :avatar_url
expose :star_count, :forks_count
expose :open_issues_count, if: lambda { |project, options| project.issues_enabled? && project.default_issues_tracker? }
@@ -377,6 +377,24 @@ module API
expose :name
end
+ class RunnerDetails < Runner
+ expose :tag_list
+ expose :version, :revision, :platform, :architecture
+ expose :contacted_at
+ expose :token, if: lambda { |runner, options| options[:current_user].is_admin? || !runner.is_shared? }
+ expose :projects, with: Entities::BasicProjectDetails do |runner, options|
+ if options[:current_user].is_admin?
+ runner.projects
+ else
+ options[:current_user].authorized_projects.where(id: runner.projects)
+ end
+ end
+ end
+
+ class BuildArtifactFile < Grape::Entity
+ expose :filename, :size
+ end
+
class Build < Grape::Entity
expose :id, :status, :stage, :name, :ref, :tag, :coverage
expose :created_at, :started_at, :finished_at
@@ -388,6 +406,7 @@ module API
repo_obj.artifacts_download_url
end
end
+ expose :artifacts_file, using: BuildArtifactFile, if: -> (build, opts) { build.artifacts? }
expose :commit, with: RepoCommit do |repo_obj, _options|
if repo_obj.respond_to?(:commit)
repo_obj.commit.commit_data
diff --git a/lib/api/runners.rb b/lib/api/runners.rb
new file mode 100644
index 00000000000..8ec91485b26
--- /dev/null
+++ b/lib/api/runners.rb
@@ -0,0 +1,175 @@
+module API
+ # Runners API
+ class Runners < Grape::API
+ before { authenticate! }
+
+ resource :runners do
+ # Get runners available for user
+ #
+ # Example Request:
+ # GET /runners
+ get do
+ runners = filter_runners(current_user.ci_authorized_runners, params[:scope], without: ['specific', 'shared'])
+ present paginate(runners), with: Entities::Runner
+ end
+
+ # Get all runners - shared and specific
+ #
+ # Example Request:
+ # GET /runners/all
+ get 'all' do
+ authenticated_as_admin!
+ runners = filter_runners(Ci::Runner.all, params[:scope])
+ present paginate(runners), with: Entities::Runner
+ end
+
+ # Get runner's details
+ #
+ # Parameters:
+ # id (required) - The ID of ther runner
+ # Example Request:
+ # GET /runners/:id
+ get ':id' do
+ runner = get_runner(params[:id])
+ authenticate_show_runner!(runner)
+
+ present runner, with: Entities::RunnerDetails, current_user: current_user
+ end
+
+ # Update runner's details
+ #
+ # Parameters:
+ # id (required) - The ID of ther runner
+ # description (optional) - Runner's description
+ # active (optional) - Runner's status
+ # tag_list (optional) - Array of tags for runner
+ # Example Request:
+ # PUT /runners/:id
+ put ':id' do
+ runner = get_runner(params[:id])
+ authenticate_update_runner!(runner)
+
+ attrs = attributes_for_keys [:description, :active, :tag_list]
+ if runner.update(attrs)
+ present runner, with: Entities::RunnerDetails, current_user: current_user
+ else
+ render_validation_error!(runner)
+ end
+ end
+
+ # Remove runner
+ #
+ # Parameters:
+ # id (required) - The ID of ther runner
+ # Example Request:
+ # DELETE /runners/:id
+ delete ':id' do
+ runner = get_runner(params[:id])
+ authenticate_delete_runner!(runner)
+ runner.destroy!
+
+ present runner, with: Entities::Runner
+ end
+ end
+
+ resource :projects do
+ before { authorize_admin_project }
+
+ # Get runners available for project
+ #
+ # Example Request:
+ # GET /projects/:id/runners
+ get ':id/runners' do
+ runners = filter_runners(Ci::Runner.owned_or_shared(user_project.id), params[:scope])
+ present paginate(runners), with: Entities::Runner
+ end
+
+ # Enable runner for project
+ #
+ # Parameters:
+ # id (required) - The ID of the project
+ # runner_id (required) - The ID of the runner
+ # Example Request:
+ # POST /projects/:id/runners/:runner_id
+ post ':id/runners' do
+ required_attributes! [:runner_id]
+
+ runner = get_runner(params[:runner_id])
+ authenticate_enable_runner!(runner)
+ Ci::RunnerProject.create(runner: runner, project: user_project)
+
+ present runner, with: Entities::Runner
+ end
+
+ # Disable project's runner
+ #
+ # Parameters:
+ # id (required) - The ID of the project
+ # runner_id (required) - The ID of the runner
+ # Example Request:
+ # DELETE /projects/:id/runners/:runner_id
+ delete ':id/runners/:runner_id' do
+ runner_project = user_project.runner_projects.find_by(runner_id: params[:runner_id])
+ not_found!('Runner') unless runner_project
+
+ runner = runner_project.runner
+ forbidden!("Only one project associated with the runner. Please remove the runner instead") if runner.projects.count == 1
+
+ runner_project.destroy
+
+ present runner, with: Entities::Runner
+ end
+ end
+
+ helpers do
+ def filter_runners(runners, scope, options = {})
+ return runners unless scope.present?
+
+ available_scopes = ::Ci::Runner::AVAILABLE_SCOPES
+ if options[:without]
+ available_scopes = available_scopes - options[:without]
+ end
+
+ if (available_scopes & [scope]).empty?
+ render_api_error!('Scope contains invalid value', 400)
+ end
+
+ runners.send(scope)
+ end
+
+ def get_runner(id)
+ runner = Ci::Runner.find(id)
+ not_found!('Runner') unless runner
+ runner
+ end
+
+ def authenticate_show_runner!(runner)
+ return if runner.is_shared || current_user.is_admin?
+ forbidden!("No access granted") unless user_can_access_runner?(runner)
+ end
+
+ def authenticate_update_runner!(runner)
+ return if current_user.is_admin?
+ forbidden!("Runner is shared") if runner.is_shared?
+ forbidden!("No access granted") unless user_can_access_runner?(runner)
+ end
+
+ def authenticate_delete_runner!(runner)
+ return if current_user.is_admin?
+ forbidden!("Runner is shared") if runner.is_shared?
+ forbidden!("Runner associated with more than one project") if runner.projects.count > 1
+ forbidden!("No access granted") unless user_can_access_runner?(runner)
+ end
+
+ def authenticate_enable_runner!(runner)
+ forbidden!("Runner is shared") if runner.is_shared?
+ return if current_user.is_admin?
+ forbidden!("No access granted") unless user_can_access_runner?(runner)
+ end
+
+ def user_can_access_runner?(runner)
+ current_user.ci_authorized_runners.exists?(runner.id)
+ end
+ end
+ end
+end
diff --git a/lib/banzai/filter/emoji_filter.rb b/lib/banzai/filter/emoji_filter.rb
index 5952a031626..207437ba7cf 100644
--- a/lib/banzai/filter/emoji_filter.rb
+++ b/lib/banzai/filter/emoji_filter.rb
@@ -45,7 +45,8 @@ module Banzai
private
def emoji_url(name)
- emoji_path = "emoji/#{emoji_filename(name)}"
+ emoji_path = emoji_filename(name)
+
if context[:asset_host]
# Asset host is specified.
url_to_image(emoji_path)
diff --git a/lib/ci/api/builds.rb b/lib/ci/api/builds.rb
index 416b0b5f0b4..2e9a5d311f9 100644
--- a/lib/ci/api/builds.rb
+++ b/lib/ci/api/builds.rb
@@ -38,6 +38,8 @@ module Ci
authenticate_runner!
update_runner_last_contact
build = Ci::Build.where(runner_id: current_runner.id).running.find(params[:id])
+ forbidden!('Build has been erased!') if build.erased?
+
build.update_attributes(trace: params[:trace]) if params[:trace]
case params[:state].to_s
@@ -99,6 +101,7 @@ module Ci
not_found! unless build
authenticate_build_token!(build)
forbidden!('Build is not running!') unless build.running?
+ forbidden!('Build has been erased!') if build.erased?
artifacts_upload_path = ArtifactUploader.artifacts_upload_path
artifacts = uploaded_file(:file, artifacts_upload_path)
@@ -143,7 +146,7 @@ module Ci
present_file!(artifacts_file.path, artifacts_file.filename)
end
- # Remove the artifacts file from build
+ # Remove the artifacts file from build - Runners only
#
# Parameters:
# id (required) - The ID of a build
@@ -156,6 +159,7 @@ module Ci
build = Ci::Build.find_by_id(params[:id])
not_found! unless build
authenticate_build_token!(build)
+
build.remove_artifacts_file!
build.remove_artifacts_metadata!
end
diff --git a/lib/ci/status.rb b/lib/ci/status.rb
index c02b3b8f3e4..3fb1fe29494 100644
--- a/lib/ci/status.rb
+++ b/lib/ci/status.rb
@@ -1,11 +1,9 @@
module Ci
class Status
def self.get_status(statuses)
- statuses.reject! { |status| status.try(&:allow_failure?) }
-
if statuses.none?
'skipped'
- elsif statuses.all?(&:success?)
+ elsif statuses.all? { |status| status.success? || status.ignored? }
'success'
elsif statuses.all?(&:pending?)
'pending'
diff --git a/lib/gitlab/ldap/user.rb b/lib/gitlab/ldap/user.rb
index e044f0ecc6d..b84c81f1a6c 100644
--- a/lib/gitlab/ldap/user.rb
+++ b/lib/gitlab/ldap/user.rb
@@ -24,6 +24,10 @@ module Gitlab
update_user_attributes
end
+ def save
+ super('LDAP')
+ end
+
# instance methods
def gl_user
@gl_user ||= find_by_uid_and_provider || find_by_email || build_new_user
diff --git a/lib/gitlab/o_auth/user.rb b/lib/gitlab/o_auth/user.rb
index d87a72f7ba3..832fb08a526 100644
--- a/lib/gitlab/o_auth/user.rb
+++ b/lib/gitlab/o_auth/user.rb
@@ -26,7 +26,7 @@ module Gitlab
gl_user.try(:valid?)
end
- def save
+ def save(provider = 'OAuth')
unauthorized_to_create unless gl_user
if needs_blocking?
@@ -36,10 +36,10 @@ module Gitlab
gl_user.save!
end
- log.info "(OAuth) saving user #{auth_hash.email} from login with extern_uid => #{auth_hash.uid}"
+ log.info "(#{provider}) saving user #{auth_hash.email} from login with extern_uid => #{auth_hash.uid}"
gl_user
rescue ActiveRecord::RecordInvalid => e
- log.info "(OAuth) Error saving user: #{gl_user.errors.full_messages}"
+ log.info "(#{provider}) Error saving user: #{gl_user.errors.full_messages}"
return self, e.record.errors
end
@@ -105,7 +105,12 @@ module Gitlab
end
def signup_enabled?
- Gitlab.config.omniauth.allow_single_sign_on
+ providers = Gitlab.config.omniauth.allow_single_sign_on
+ if providers.is_a?(Array)
+ providers.include?(auth_hash.provider)
+ else
+ providers
+ end
end
def block_after_signup?
diff --git a/lib/gitlab/saml/user.rb b/lib/gitlab/saml/user.rb
new file mode 100644
index 00000000000..b1e30110ef5
--- /dev/null
+++ b/lib/gitlab/saml/user.rb
@@ -0,0 +1,47 @@
+# SAML extension for User model
+#
+# * Find GitLab user based on SAML uid and provider
+# * Create new user from SAML data
+#
+module Gitlab
+ module Saml
+ class User < Gitlab::OAuth::User
+
+ def save
+ super('SAML')
+ end
+
+ def gl_user
+ @user ||= find_by_uid_and_provider
+
+ if auto_link_ldap_user?
+ @user ||= find_or_create_ldap_user
+ end
+
+ if auto_link_saml_enabled?
+ @user ||= find_by_email
+ end
+
+ if signup_enabled?
+ @user ||= build_new_user
+ end
+
+ @user
+ end
+
+ def find_by_email
+ if auth_hash.has_email?
+ user = ::User.find_by(email: auth_hash.email.downcase)
+ user.identities.new(extern_uid: auth_hash.uid, provider: auth_hash.provider) if user
+ user
+ end
+ end
+
+ protected
+
+ def auto_link_saml_enabled?
+ Gitlab.config.omniauth.auto_link_saml_user
+ end
+ end
+ end
+end
diff --git a/lib/tasks/cache.rake b/lib/tasks/cache.rake
index 1728dda72cf..9e2fb429d57 100644
--- a/lib/tasks/cache.rake
+++ b/lib/tasks/cache.rake
@@ -1,11 +1,21 @@
namespace :cache do
+ CLEAR_BATCH_SIZE = 1000 # The more the faster, but having too many can crash Ruby
+ REDIS_SCAN_START_STOP = '0' # Magic value, see http://redis.io/commands/scan
+
desc "GitLab | Clear redis cache"
task :clear => :environment do
- # Hack into Rails.cache until https://github.com/redis-store/redis-store/pull/225
- # is accepted (I hope) and we can update the redis-store gem.
redis_store = Rails.cache.instance_variable_get(:@data)
- redis_store.keys.each_slice(1000) do |key_slice|
- redis_store.del(*key_slice)
+ cursor = REDIS_SCAN_START_STOP
+ loop do
+ cursor, keys = redis_store.scan(
+ cursor,
+ match: "#{Gitlab::REDIS_CACHE_NAMESPACE}*",
+ count: CLEAR_BATCH_SIZE
+ )
+
+ redis_store.del(*keys) if keys.any?
+
+ break if cursor == REDIS_SCAN_START_STOP
end
end
end
diff --git a/spec/controllers/commit_controller_spec.rb b/spec/controllers/commit_controller_spec.rb
index 7793bf1e421..bbe400dad88 100644
--- a/spec/controllers/commit_controller_spec.rb
+++ b/spec/controllers/commit_controller_spec.rb
@@ -143,4 +143,53 @@ describe Projects::CommitController do
expect(assigns(:tags)).to include("v1.1.0")
end
end
+
+ describe '#revert' do
+ context 'when target branch is not provided' do
+ it 'should render the 404 page' do
+ post(:revert,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ id: commit.id)
+
+ expect(response).not_to be_success
+ expect(response.status).to eq(404)
+ end
+ end
+
+ context 'when the revert was successful' do
+ it 'should redirect to the commits page' do
+ post(:revert,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ target_branch: 'master',
+ id: commit.id)
+
+ expect(response).to redirect_to namespace_project_commits_path(project.namespace, project, 'master')
+ expect(flash[:notice]).to eq('The commit has been successfully reverted.')
+ end
+ end
+
+ context 'when the revert failed' do
+ before do
+ post(:revert,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ target_branch: 'master',
+ id: commit.id)
+ end
+
+ it 'should redirect to the commit page' do
+ # Reverting a commit that has been already reverted.
+ post(:revert,
+ namespace_id: project.namespace.to_param,
+ project_id: project.to_param,
+ target_branch: 'master',
+ id: commit.id)
+
+ expect(response).to redirect_to namespace_project_commit_path(project.namespace, project, commit.id)
+ expect(flash[:alert]).to match('Sorry, we cannot revert this commit automatically.')
+ end
+ end
+ end
end
diff --git a/spec/controllers/profile_keys_controller_spec.rb b/spec/controllers/profiles/keys_controller_spec.rb
index b6573f105dc..b6573f105dc 100644
--- a/spec/controllers/profile_keys_controller_spec.rb
+++ b/spec/controllers/profiles/keys_controller_spec.rb
diff --git a/spec/controllers/blame_controller_spec.rb b/spec/controllers/projects/blame_controller_spec.rb
index 25f06299a29..25f06299a29 100644
--- a/spec/controllers/blame_controller_spec.rb
+++ b/spec/controllers/projects/blame_controller_spec.rb
diff --git a/spec/controllers/branches_controller_spec.rb b/spec/controllers/projects/branches_controller_spec.rb
index 8e06d4bdc77..8e06d4bdc77 100644
--- a/spec/controllers/branches_controller_spec.rb
+++ b/spec/controllers/projects/branches_controller_spec.rb
diff --git a/spec/controllers/commits_controller_spec.rb b/spec/controllers/projects/commits_controller_spec.rb
index 7d8089c4bc6..7d8089c4bc6 100644
--- a/spec/controllers/commits_controller_spec.rb
+++ b/spec/controllers/projects/commits_controller_spec.rb
diff --git a/spec/controllers/sent_notification_controller_spec.rb b/spec/controllers/sent_notifications_controller_spec.rb
index 9ced397bd4a..9ced397bd4a 100644
--- a/spec/controllers/sent_notification_controller_spec.rb
+++ b/spec/controllers/sent_notifications_controller_spec.rb
diff --git a/spec/factories/ci/builds.rb b/spec/factories/ci/builds.rb
index c1b6ecd329a..a46466798d6 100644
--- a/spec/factories/ci/builds.rb
+++ b/spec/factories/ci/builds.rb
@@ -16,10 +16,30 @@ FactoryGirl.define do
commit factory: :ci_commit
+ trait :success do
+ status 'success'
+ end
+
+ trait :failed do
+ status 'failed'
+ end
+
trait :canceled do
status 'canceled'
end
+ trait :running do
+ status 'running'
+ end
+
+ trait :pending do
+ status 'pending'
+ end
+
+ trait :allowed_to_fail do
+ allow_failure true
+ end
+
after(:build) do |build, evaluator|
build.project = build.commit.project
end
@@ -33,8 +53,8 @@ FactoryGirl.define do
tag true
end
- factory :ci_build_with_trace do
- after(:create) do |build, evaluator|
+ trait :trace do
+ after(:create) do |build, evaluator|
build.trace = 'BUILD TRACE'
end
end
@@ -42,14 +62,13 @@ FactoryGirl.define do
trait :artifacts do
after(:create) do |build, _|
build.artifacts_file =
- fixture_file_upload(Rails.root +
- 'spec/fixtures/ci_build_artifacts.zip',
- 'application/zip')
+ fixture_file_upload(Rails.root.join('spec/fixtures/ci_build_artifacts.zip'),
+ 'application/zip')
build.artifacts_metadata =
- fixture_file_upload(Rails.root +
- 'spec/fixtures/ci_build_artifacts_metadata.gz',
- 'application/x-gzip')
+ fixture_file_upload(Rails.root.join('spec/fixtures/ci_build_artifacts_metadata.gz'),
+ 'application/x-gzip')
+
build.save!
end
end
diff --git a/spec/factories/ci/runners.rb b/spec/factories/ci/runners.rb
index db759eca9ac..265663e8453 100644
--- a/spec/factories/ci/runners.rb
+++ b/spec/factories/ci/runners.rb
@@ -25,14 +25,12 @@ FactoryGirl.define do
"My runner#{n}"
end
- platform "darwin"
+ platform "darwin"
+ is_shared false
+ active true
- factory :ci_shared_runner do
+ trait :shared do
is_shared true
end
-
- factory :ci_specific_runner do
- is_shared false
- end
end
end
diff --git a/spec/factories/merge_requests.rb b/spec/factories/merge_requests.rb
index 0c6a881f868..00de7bb5294 100644
--- a/spec/factories/merge_requests.rb
+++ b/spec/factories/merge_requests.rb
@@ -24,6 +24,7 @@
# merge_params :text
# merge_when_build_succeeds :boolean default(FALSE), not null
# merge_user_id :integer
+# merge_commit_sha :string
#
FactoryGirl.define do
diff --git a/spec/factories/todos.rb b/spec/factories/todos.rb
new file mode 100644
index 00000000000..bd85b1d798a
--- /dev/null
+++ b/spec/factories/todos.rb
@@ -0,0 +1,34 @@
+# == Schema Information
+#
+# Table name: todos
+#
+# id :integer not null, primary key
+# user_id :integer not null
+# project_id :integer not null
+# target_id :integer not null
+# target_type :string not null
+# author_id :integer
+# note_id :integer
+# action :integer not null
+# state :string not null
+# created_at :datetime
+# updated_at :datetime
+#
+
+FactoryGirl.define do
+ factory :todo do
+ project
+ author
+ user
+ target factory: :issue
+ action { Todo::ASSIGNED }
+
+ trait :assigned do
+ action { Todo::ASSIGNED }
+ end
+
+ trait :mentioned do
+ action { Todo::MENTIONED }
+ end
+ end
+end
diff --git a/spec/features/runners_spec.rb b/spec/features/runners_spec.rb
index d97831aae14..e8886e7edf9 100644
--- a/spec/features/runners_spec.rb
+++ b/spec/features/runners_spec.rb
@@ -17,10 +17,10 @@ describe "Runners" do
@project3 = FactoryGirl.create :empty_project
@project3.team << [user, :developer]
- @shared_runner = FactoryGirl.create :ci_shared_runner
- @specific_runner = FactoryGirl.create :ci_specific_runner
- @specific_runner2 = FactoryGirl.create :ci_specific_runner
- @specific_runner3 = FactoryGirl.create :ci_specific_runner
+ @shared_runner = FactoryGirl.create :ci_runner, :shared
+ @specific_runner = FactoryGirl.create :ci_runner
+ @specific_runner2 = FactoryGirl.create :ci_runner
+ @specific_runner3 = FactoryGirl.create :ci_runner
@project.runners << @specific_runner
@project2.runners << @specific_runner2
@project3.runners << @specific_runner3
@@ -84,7 +84,7 @@ describe "Runners" do
before do
@project = FactoryGirl.create :empty_project
@project.team << [user, :master]
- @specific_runner = FactoryGirl.create :ci_specific_runner
+ @specific_runner = FactoryGirl.create :ci_runner
@project.runners << @specific_runner
end
diff --git a/spec/helpers/gitlab_markdown_helper_spec.rb b/spec/helpers/gitlab_markdown_helper_spec.rb
index 9a05b21335c..9adcd916ced 100644
--- a/spec/helpers/gitlab_markdown_helper_spec.rb
+++ b/spec/helpers/gitlab_markdown_helper_spec.rb
@@ -113,7 +113,7 @@ describe GitlabMarkdownHelper do
it 'should replace commit message with emoji to link' do
actual = link_to_gfm(':book:Book', '/foo')
expect(actual).
- to eq %Q(<img class="emoji" title=":book:" alt=":book:" src="http://localhost/assets/emoji/1F4D6.png" height="20" width="20" align="absmiddle"><a href="/foo">Book</a>)
+ to eq %Q(<img class="emoji" title=":book:" alt=":book:" src="http://localhost/assets/1F4D6.png" height="20" width="20" align="absmiddle"><a href="/foo">Book</a>)
end
end
diff --git a/spec/lib/banzai/filter/emoji_filter_spec.rb b/spec/lib/banzai/filter/emoji_filter_spec.rb
index cf314058158..b5b38cf0c8c 100644
--- a/spec/lib/banzai/filter/emoji_filter_spec.rb
+++ b/spec/lib/banzai/filter/emoji_filter_spec.rb
@@ -14,7 +14,7 @@ describe Banzai::Filter::EmojiFilter, lib: true do
it 'replaces supported emoji' do
doc = filter('<p>:heart:</p>')
- expect(doc.css('img').first.attr('src')).to eq 'https://foo.com/assets/emoji/2764.png'
+ expect(doc.css('img').first.attr('src')).to eq 'https://foo.com/assets/2764.png'
end
it 'ignores unsupported emoji' do
@@ -25,7 +25,7 @@ describe Banzai::Filter::EmojiFilter, lib: true do
it 'correctly encodes the URL' do
doc = filter('<p>:+1:</p>')
- expect(doc.css('img').first.attr('src')).to eq 'https://foo.com/assets/emoji/1F44D.png'
+ expect(doc.css('img').first.attr('src')).to eq 'https://foo.com/assets/1F44D.png'
end
it 'matches at the start of a string' do
diff --git a/spec/lib/ci/status_spec.rb b/spec/lib/ci/status_spec.rb
new file mode 100644
index 00000000000..a2eb14f3a97
--- /dev/null
+++ b/spec/lib/ci/status_spec.rb
@@ -0,0 +1,41 @@
+require 'spec_helper'
+
+describe Ci::Status do
+ describe '.get_status' do
+ subject { described_class.get_status(statuses) }
+
+ [:ci_build, :generic_commit_status].each do |type|
+ context "for #{type}" do
+ context 'all successful' do
+ let(:statuses) { Array.new(2) { create(type, status: :success) } }
+ it { is_expected.to eq 'success' }
+ end
+
+ context 'at least one failed' do
+ let(:statuses) { [create(type, status: :success), create(type, status: :failed)] }
+ it { is_expected.to eq 'failed' }
+ end
+
+ context 'at least one running' do
+ let(:statuses) { [create(type, status: :success), create(type, status: :running)] }
+ it { is_expected.to eq 'running' }
+ end
+
+ context 'at least one pending' do
+ let(:statuses) { [create(type, status: :success), create(type, status: :pending)] }
+ it { is_expected.to eq 'running' }
+ end
+
+ context 'success and failed but allowed to fail' do
+ let(:statuses) { [create(type, status: :success), create(type, status: :failed, allow_failure: true)] }
+ it { is_expected.to eq 'success' }
+ end
+
+ context 'one failed but allowed to fail' do
+ let(:statuses) { [create(type, status: :failed, allow_failure: true)] }
+ it { is_expected.to eq 'success' }
+ end
+ end
+ end
+ end
+end
diff --git a/spec/lib/gitlab/o_auth/user_spec.rb b/spec/lib/gitlab/o_auth/user_spec.rb
index 925bc442a90..3a769acfdc0 100644
--- a/spec/lib/gitlab/o_auth/user_spec.rb
+++ b/spec/lib/gitlab/o_auth/user_spec.rb
@@ -41,7 +41,20 @@ describe Gitlab::OAuth::User, lib: true do
describe 'signup' do
shared_examples "to verify compliance with allow_single_sign_on" do
- context "with allow_single_sign_on enabled" do
+ context "with new allow_single_sign_on enabled syntax" do
+ before { stub_omniauth_config(allow_single_sign_on: ['twitter']) }
+
+ it "creates a user from Omniauth" do
+ oauth_user.save
+
+ expect(gl_user).to be_valid
+ identity = gl_user.identities.first
+ expect(identity.extern_uid).to eql uid
+ expect(identity.provider).to eql 'twitter'
+ end
+ end
+
+ context "with old allow_single_sign_on enabled syntax" do
before { stub_omniauth_config(allow_single_sign_on: true) }
it "creates a user from Omniauth" do
@@ -54,7 +67,14 @@ describe Gitlab::OAuth::User, lib: true do
end
end
- context "with allow_single_sign_on disabled (Default)" do
+ context "with new allow_single_sign_on disabled syntax" do
+ before { stub_omniauth_config(allow_single_sign_on: []) }
+ it "throws an error" do
+ expect{ oauth_user.save }.to raise_error StandardError
+ end
+ end
+
+ context "with old allow_single_sign_on disabled (Default)" do
before { stub_omniauth_config(allow_single_sign_on: false) }
it "throws an error" do
expect{ oauth_user.save }.to raise_error StandardError
@@ -135,7 +155,7 @@ describe Gitlab::OAuth::User, lib: true do
describe 'blocking' do
let(:provider) { 'twitter' }
- before { stub_omniauth_config(allow_single_sign_on: true) }
+ before { stub_omniauth_config(allow_single_sign_on: ['twitter']) }
context 'signup with omniauth only' do
context 'dont block on create' do
diff --git a/spec/lib/gitlab/saml/user_spec.rb b/spec/lib/gitlab/saml/user_spec.rb
new file mode 100644
index 00000000000..de7cd99d49d
--- /dev/null
+++ b/spec/lib/gitlab/saml/user_spec.rb
@@ -0,0 +1,271 @@
+require 'spec_helper'
+
+describe Gitlab::Saml::User, lib: true do
+ let(:saml_user) { described_class.new(auth_hash) }
+ let(:gl_user) { saml_user.gl_user }
+ let(:uid) { 'my-uid' }
+ let(:provider) { 'saml' }
+ let(:auth_hash) { OmniAuth::AuthHash.new(uid: uid, provider: provider, info: info_hash) }
+ let(:info_hash) do
+ {
+ name: 'John',
+ email: 'john@mail.com'
+ }
+ end
+ let(:ldap_user) { Gitlab::LDAP::Person.new(Net::LDAP::Entry.new, 'ldapmain') }
+
+ describe '#save' do
+ def stub_omniauth_config(messages)
+ allow(Gitlab.config.omniauth).to receive_messages(messages)
+ end
+
+ def stub_ldap_config(messages)
+ allow(Gitlab::LDAP::Config).to receive_messages(messages)
+ end
+
+ describe 'account exists on server' do
+ before { stub_omniauth_config({ allow_single_sign_on: ['saml'], auto_link_saml_user: true }) }
+ context 'and should bind with SAML' do
+ let!(:existing_user) { create(:user, email: 'john@mail.com', username: 'john') }
+ it 'adds the SAML identity to the existing user' do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).to eq existing_user
+ identity = gl_user.identities.first
+ expect(identity.extern_uid).to eql uid
+ expect(identity.provider).to eql 'saml'
+ end
+ end
+ end
+
+ describe 'no account exists on server' do
+ shared_examples 'to verify compliance with allow_single_sign_on' do
+ context 'with allow_single_sign_on enabled' do
+ before { stub_omniauth_config(allow_single_sign_on: ['saml']) }
+
+ it 'creates a user from SAML' do
+ saml_user.save
+
+ expect(gl_user).to be_valid
+ identity = gl_user.identities.first
+ expect(identity.extern_uid).to eql uid
+ expect(identity.provider).to eql 'saml'
+ end
+ end
+
+ context 'with allow_single_sign_on default (["saml"])' do
+ before { stub_omniauth_config(allow_single_sign_on: ['saml']) }
+ it 'should not throw an error' do
+ expect{ saml_user.save }.not_to raise_error
+ end
+ end
+
+ context 'with allow_single_sign_on disabled' do
+ before { stub_omniauth_config(allow_single_sign_on: false) }
+ it 'should throw an error' do
+ expect{ saml_user.save }.to raise_error StandardError
+ end
+ end
+ end
+
+ context 'with auto_link_ldap_user disabled (default)' do
+ before { stub_omniauth_config({ auto_link_ldap_user: false, auto_link_saml_user: false, allow_single_sign_on: ['saml'] }) }
+ include_examples 'to verify compliance with allow_single_sign_on'
+ end
+
+ context 'with auto_link_ldap_user enabled' do
+ before { stub_omniauth_config({ auto_link_ldap_user: true, auto_link_saml_user: false }) }
+
+ context 'and no LDAP provider defined' do
+ before { stub_ldap_config(providers: []) }
+
+ include_examples 'to verify compliance with allow_single_sign_on'
+ end
+
+ context 'and at least one LDAP provider is defined' do
+ before { stub_ldap_config(providers: %w(ldapmain)) }
+
+ context 'and a corresponding LDAP person' do
+ before do
+ allow(ldap_user).to receive(:uid) { uid }
+ allow(ldap_user).to receive(:username) { uid }
+ allow(ldap_user).to receive(:email) { ['johndoe@example.com','john2@example.com'] }
+ allow(ldap_user).to receive(:dn) { 'uid=user1,ou=People,dc=example' }
+ allow(Gitlab::LDAP::Person).to receive(:find_by_uid).and_return(ldap_user)
+ end
+
+ context 'and no account for the LDAP user' do
+
+ it 'creates a user with dual LDAP and SAML identities' do
+ saml_user.save
+
+ expect(gl_user).to be_valid
+ expect(gl_user.username).to eql uid
+ expect(gl_user.email).to eql 'johndoe@example.com'
+ expect(gl_user.identities.length).to eql 2
+ identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
+ expect(identities_as_hash).to match_array([ { provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ { provider: 'saml', extern_uid: uid }
+ ])
+ end
+ end
+
+ context 'and LDAP user has an account already' do
+ let!(:existing_user) { create(:omniauth_user, email: 'john@example.com', extern_uid: 'uid=user1,ou=People,dc=example', provider: 'ldapmain', username: 'john') }
+ it "adds the omniauth identity to the LDAP account" do
+ saml_user.save
+
+ expect(gl_user).to be_valid
+ expect(gl_user.username).to eql 'john'
+ expect(gl_user.email).to eql 'john@example.com'
+ expect(gl_user.identities.length).to eql 2
+ identities_as_hash = gl_user.identities.map { |id| { provider: id.provider, extern_uid: id.extern_uid } }
+ expect(identities_as_hash).to match_array([ { provider: 'ldapmain', extern_uid: 'uid=user1,ou=People,dc=example' },
+ { provider: 'saml', extern_uid: uid }
+ ])
+ end
+ end
+ end
+
+ context 'and no corresponding LDAP person' do
+ before { allow(Gitlab::LDAP::Person).to receive(:find_by_uid).and_return(nil) }
+
+ include_examples 'to verify compliance with allow_single_sign_on'
+ end
+ end
+ end
+
+ end
+
+ describe 'blocking' do
+ before { stub_omniauth_config({ allow_saml_sign_up: true, auto_link_saml_user: true }) }
+
+ context 'signup with SAML only' do
+ context 'dont block on create' do
+ before { stub_omniauth_config(block_auto_created_users: false) }
+
+ it 'should not block the user' do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+
+ context 'block on create' do
+ before { stub_omniauth_config(block_auto_created_users: true) }
+
+ it 'should block user' do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).to be_blocked
+ end
+ end
+ end
+
+ context 'signup with linked omniauth and LDAP account' do
+ before do
+ stub_omniauth_config(auto_link_ldap_user: true)
+ allow(ldap_user).to receive(:uid) { uid }
+ allow(ldap_user).to receive(:username) { uid }
+ allow(ldap_user).to receive(:email) { ['johndoe@example.com','john2@example.com'] }
+ allow(ldap_user).to receive(:dn) { 'uid=user1,ou=People,dc=example' }
+ allow(saml_user).to receive(:ldap_person).and_return(ldap_user)
+ end
+
+ context "and no account for the LDAP user" do
+ context 'dont block on create (LDAP)' do
+ before { allow_any_instance_of(Gitlab::LDAP::Config).to receive_messages(block_auto_created_users: false) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+
+ context 'block on create (LDAP)' do
+ before { allow_any_instance_of(Gitlab::LDAP::Config).to receive_messages(block_auto_created_users: true) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).to be_blocked
+ end
+ end
+ end
+
+ context 'and LDAP user has an account already' do
+ let!(:existing_user) { create(:omniauth_user, email: 'john@example.com', extern_uid: 'uid=user1,ou=People,dc=example', provider: 'ldapmain', username: 'john') }
+
+ context 'dont block on create (LDAP)' do
+ before { allow_any_instance_of(Gitlab::LDAP::Config).to receive_messages(block_auto_created_users: false) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+
+ context 'block on create (LDAP)' do
+ before { allow_any_instance_of(Gitlab::LDAP::Config).to receive_messages(block_auto_created_users: true) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+ end
+ end
+
+
+ context 'sign-in' do
+ before do
+ saml_user.save
+ saml_user.gl_user.activate
+ end
+
+ context 'dont block on create' do
+ before { stub_omniauth_config(block_auto_created_users: false) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+
+ context 'block on create' do
+ before { stub_omniauth_config(block_auto_created_users: true) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+
+ context 'dont block on create (LDAP)' do
+ before { allow_any_instance_of(Gitlab::LDAP::Config).to receive_messages(block_auto_created_users: false) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+
+ context 'block on create (LDAP)' do
+ before { allow_any_instance_of(Gitlab::LDAP::Config).to receive_messages(block_auto_created_users: true) }
+
+ it do
+ saml_user.save
+ expect(gl_user).to be_valid
+ expect(gl_user).not_to be_blocked
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/spec/models/blob_spec.rb b/spec/models/blob_spec.rb
new file mode 100644
index 00000000000..78e95c8fac5
--- /dev/null
+++ b/spec/models/blob_spec.rb
@@ -0,0 +1,81 @@
+require 'rails_helper'
+
+describe Blob do
+ describe '.decorate' do
+ it 'returns NilClass when given nil' do
+ expect(described_class.decorate(nil)).to be_nil
+ end
+ end
+
+ describe '#svg?' do
+ it 'is falsey when not text' do
+ git_blob = double(text?: false)
+
+ expect(described_class.decorate(git_blob)).not_to be_svg
+ end
+
+ it 'is falsey when no language is detected' do
+ git_blob = double(text?: true, language: nil)
+
+ expect(described_class.decorate(git_blob)).not_to be_svg
+ end
+
+ it' is falsey when language is not SVG' do
+ git_blob = double(text?: true, language: double(name: 'XML'))
+
+ expect(described_class.decorate(git_blob)).not_to be_svg
+ end
+
+ it 'is truthy when language is SVG' do
+ git_blob = double(text?: true, language: double(name: 'SVG'))
+
+ expect(described_class.decorate(git_blob)).to be_svg
+ end
+ end
+
+ describe '#to_partial_path' do
+ def stubbed_blob(overrides = {})
+ overrides.reverse_merge!(
+ image?: false,
+ language: nil,
+ lfs_pointer?: false,
+ svg?: false,
+ text?: false
+ )
+
+ described_class.decorate(double).tap do |blob|
+ allow(blob).to receive_messages(overrides)
+ end
+ end
+
+ it 'handles LFS pointers' do
+ blob = stubbed_blob(lfs_pointer?: true)
+
+ expect(blob.to_partial_path).to eq 'download'
+ end
+
+ it 'handles SVGs' do
+ blob = stubbed_blob(text?: true, svg?: true)
+
+ expect(blob.to_partial_path).to eq 'image'
+ end
+
+ it 'handles images' do
+ blob = stubbed_blob(image?: true)
+
+ expect(blob.to_partial_path).to eq 'image'
+ end
+
+ it 'handles text' do
+ blob = stubbed_blob(text?: true)
+
+ expect(blob.to_partial_path).to eq 'text'
+ end
+
+ it 'defaults to download' do
+ blob = stubbed_blob
+
+ expect(blob.to_partial_path).to eq 'download'
+ end
+ end
+end
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index 606340d87e4..e3d3d453653 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -243,7 +243,7 @@ describe Ci::Build, models: true do
end
describe :can_be_served? do
- let(:runner) { FactoryGirl.create :ci_specific_runner }
+ let(:runner) { FactoryGirl.create :ci_runner }
before { build.project.runners << runner }
@@ -285,7 +285,7 @@ describe Ci::Build, models: true do
end
context 'if there are runner' do
- let(:runner) { FactoryGirl.create :ci_specific_runner }
+ let(:runner) { FactoryGirl.create :ci_runner }
before do
build.project.runners << runner
@@ -322,7 +322,7 @@ describe Ci::Build, models: true do
it { is_expected.to be_truthy }
context "and there are specific runner" do
- let(:runner) { FactoryGirl.create :ci_specific_runner, contacted_at: 1.second.ago }
+ let(:runner) { FactoryGirl.create :ci_runner, contacted_at: 1.second.ago }
before do
build.project.runners << runner
@@ -346,15 +346,14 @@ describe Ci::Build, models: true do
describe :artifacts_download_url do
subject { build.artifacts_download_url }
- it "should be nil if artifact doesn't exist" do
- build.update_attributes(artifacts_file: nil)
- is_expected.to be_nil
+ context 'artifacts file does not exist' do
+ before { build.update_attributes(artifacts_file: nil) }
+ it { is_expected.to be_nil }
end
- it 'should not be nil if artifact exist' do
- gif = fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif')
- build.update_attributes(artifacts_file: gif)
- is_expected.to_not be_nil
+ context 'artifacts file exists' do
+ let(:build) { create(:ci_build, :artifacts) }
+ it { is_expected.to_not be_nil }
end
end
@@ -381,11 +380,7 @@ describe Ci::Build, models: true do
end
context 'artifacts archive exists' do
- before do
- gif = fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif')
- build.update_attributes(artifacts_file: gif)
- end
-
+ let(:build) { create(:ci_build, :artifacts) }
it { is_expected.to be_truthy }
end
end
@@ -398,16 +393,7 @@ describe Ci::Build, models: true do
end
context 'artifacts archive is a zip file and metadata exists' do
- before do
- fixture_dir = Rails.root + 'spec/fixtures/'
- archive = fixture_file_upload(fixture_dir + 'ci_build_artifacts.zip',
- 'application/zip')
- metadata = fixture_file_upload(fixture_dir + 'ci_build_artifacts_metadata.gz',
- 'application/x-gzip')
- build.update_attributes(artifacts_file: archive)
- build.update_attributes(artifacts_metadata: metadata)
- end
-
+ let(:build) { create(:ci_build, :artifacts) }
it { is_expected.to be_truthy }
end
end
@@ -511,6 +497,103 @@ describe Ci::Build, models: true do
expect(@build2.merge_request.id).to eq(@merge_request.id)
end
end
+ end
+
+ describe 'build erasable' do
+ shared_examples 'erasable' do
+ it 'should remove artifact file' do
+ expect(build.artifacts_file.exists?).to be_falsy
+ end
+
+ it 'should remove artifact metadata file' do
+ expect(build.artifacts_metadata.exists?).to be_falsy
+ end
+
+ it 'should erase build trace in trace file' do
+ expect(build.trace).to be_empty
+ end
+
+ it 'should set erased to true' do
+ expect(build.erased?).to be true
+ end
+
+ it 'should set erase date' do
+ expect(build.erased_at).to_not be_falsy
+ end
+ end
+
+ context 'build is not erasable' do
+ let!(:build) { create(:ci_build) }
+
+ describe '#erase' do
+ subject { build.erase }
+
+ it { is_expected.to be false }
+ end
+
+ describe '#erasable?' do
+ subject { build.erasable? }
+ it { is_expected.to eq false }
+ end
+ end
+
+ context 'build is erasable' do
+ let!(:build) { create(:ci_build, :trace, :success, :artifacts) }
+
+ describe '#erase' do
+ before { build.erase(erased_by: user) }
+
+ context 'erased by user' do
+ let!(:user) { create(:user, username: 'eraser') }
+
+ include_examples 'erasable'
+
+ it 'should record user who erased a build' do
+ expect(build.erased_by).to eq user
+ end
+ end
+
+ context 'erased by system' do
+ let(:user) { nil }
+
+ include_examples 'erasable'
+
+ it 'should not set user who erased a build' do
+ expect(build.erased_by).to be_nil
+ end
+ end
+ end
+ describe '#erasable?' do
+ subject { build.erasable? }
+ it { is_expected.to eq true }
+ end
+
+ describe '#erased?' do
+ let!(:build) { create(:ci_build, :trace, :success, :artifacts) }
+ subject { build.erased? }
+
+ context 'build has not been erased' do
+ it { is_expected.to be false }
+ end
+
+ context 'build has been erased' do
+ before { build.erase }
+
+ it { is_expected.to be true }
+ end
+ end
+
+ context 'metadata and build trace are not available' do
+ let!(:build) { create(:ci_build, :success, :artifacts) }
+ before { build.remove_artifacts_metadata! }
+
+ describe '#erase' do
+ it 'should not raise error' do
+ expect { build.erase }.to_not raise_error
+ end
+ end
+ end
+ end
end
end
diff --git a/spec/models/ci/commit_spec.rb b/spec/models/ci/commit_spec.rb
index dfc0cc3be1c..4dc309a4255 100644
--- a/spec/models/ci/commit_spec.rb
+++ b/spec/models/ci/commit_spec.rb
@@ -247,6 +247,35 @@ describe Ci::Commit, models: true do
end
end
+
+ context 'custom stage with first job allowed to fail' do
+ let(:yaml) do
+ {
+ stages: ['clean', 'test'],
+ clean_job: {
+ stage: 'clean',
+ allow_failure: true,
+ script: 'BUILD',
+ },
+ test_job: {
+ stage: 'test',
+ script: 'TEST',
+ },
+ }
+ end
+
+ before do
+ stub_ci_commit_yaml_file(YAML.dump(yaml))
+ create_builds
+ end
+
+ it 'properly schedules builds' do
+ expect(commit.builds.pluck(:status)).to contain_exactly('pending')
+ commit.builds.running_or_pending.each(&:drop)
+ expect(commit.builds.pluck(:status)).to contain_exactly('pending', 'failed')
+ end
+ end
+
context 'properly creates builds when "when" is defined' do
let(:yaml) do
{
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index 232760dfeba..e891838672e 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -39,7 +39,7 @@ describe Ci::Runner, models: true do
describe :assign_to do
let!(:project) { FactoryGirl.create :empty_project }
- let!(:shared_runner) { FactoryGirl.create(:ci_shared_runner) }
+ let!(:shared_runner) { FactoryGirl.create(:ci_runner, :shared) }
before { shared_runner.assign_to(project) }
@@ -52,15 +52,15 @@ describe Ci::Runner, models: true do
subject { Ci::Runner.online }
before do
- @runner1 = FactoryGirl.create(:ci_shared_runner, contacted_at: 1.year.ago)
- @runner2 = FactoryGirl.create(:ci_shared_runner, contacted_at: 1.second.ago)
+ @runner1 = FactoryGirl.create(:ci_runner, :shared, contacted_at: 1.year.ago)
+ @runner2 = FactoryGirl.create(:ci_runner, :shared, contacted_at: 1.second.ago)
end
it { is_expected.to eq([@runner2])}
end
describe :online? do
- let(:runner) { FactoryGirl.create(:ci_shared_runner) }
+ let(:runner) { FactoryGirl.create(:ci_runner, :shared) }
subject { runner.online? }
@@ -84,7 +84,7 @@ describe Ci::Runner, models: true do
end
describe :status do
- let(:runner) { FactoryGirl.create(:ci_shared_runner, contacted_at: 1.second.ago) }
+ let(:runner) { FactoryGirl.create(:ci_runner, :shared, contacted_at: 1.second.ago) }
subject { runner.status }
@@ -115,7 +115,7 @@ describe Ci::Runner, models: true do
describe "belongs_to_one_project?" do
it "returns false if there are two projects runner assigned to" do
- runner = FactoryGirl.create(:ci_specific_runner)
+ runner = FactoryGirl.create(:ci_runner)
project = FactoryGirl.create(:empty_project)
project1 = FactoryGirl.create(:empty_project)
project.runners << runner
@@ -125,7 +125,7 @@ describe Ci::Runner, models: true do
end
it "returns true" do
- runner = FactoryGirl.create(:ci_specific_runner)
+ runner = FactoryGirl.create(:ci_runner)
project = FactoryGirl.create(:empty_project)
project.runners << runner
diff --git a/spec/models/merge_request_spec.rb b/spec/models/merge_request_spec.rb
index f35b48601ad..c51f34034d7 100644
--- a/spec/models/merge_request_spec.rb
+++ b/spec/models/merge_request_spec.rb
@@ -24,6 +24,7 @@
# merge_params :text
# merge_when_build_succeeds :boolean default(FALSE), not null
# merge_user_id :integer
+# merge_commit_sha :string
#
require 'spec_helper'
diff --git a/spec/models/note_spec.rb b/spec/models/note_spec.rb
index 9182b42661d..583937ca748 100644
--- a/spec/models/note_spec.rb
+++ b/spec/models/note_spec.rb
@@ -26,6 +26,8 @@ describe Note, models: true do
it { is_expected.to belong_to(:project) }
it { is_expected.to belong_to(:noteable) }
it { is_expected.to belong_to(:author).class_name('User') }
+
+ it { is_expected.to have_many(:todos).dependent(:destroy) }
end
describe 'validation' do
@@ -203,11 +205,19 @@ describe Note, models: true do
end
describe "set_award!" do
- let(:issue) { create :issue }
+ let(:merge_request) { create :merge_request }
it "converts aliases to actual name" do
- note = create :note, note: ":+1:", noteable: issue
+ note = create(:note, note: ":+1:", noteable: merge_request)
expect(note.reload.note).to eq("thumbsup")
end
+
+ it "is not an award emoji when comment is on a diff" do
+ note = create(:note, note: ":blowfish:", noteable: merge_request, line_code: "11d5d2e667e9da4f7f610f81d86c974b146b13bd_0_2")
+ note = note.reload
+
+ expect(note.note).to eq(":blowfish:")
+ expect(note.is_award?).to be_falsy
+ end
end
end
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index a3de23369e1..3ccb627a259 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -519,8 +519,8 @@ describe Project, models: true do
describe :any_runners do
let(:project) { create(:empty_project, shared_runners_enabled: shared_runners_enabled) }
- let(:specific_runner) { create(:ci_specific_runner) }
- let(:shared_runner) { create(:ci_shared_runner) }
+ let(:specific_runner) { create(:ci_runner) }
+ let(:shared_runner) { create(:ci_runner, :shared) }
context 'for shared runners disabled' do
let(:shared_runners_enabled) { false }
diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb
index 5cd5ae327bf..7b63da005f0 100644
--- a/spec/models/project_team_spec.rb
+++ b/spec/models/project_team_spec.rb
@@ -68,14 +68,24 @@ describe ProjectTeam, models: true do
end
describe "#human_max_access" do
- it "return master role" do
- user = create :user
- group = create :group
- group.add_users([user.id], GroupMember::MASTER)
- project = create(:project, namespace: group)
- project.team << [user, :guest]
-
- expect(project.team.human_max_access(user.id)).to eq("Master")
+ it 'returns Master role' do
+ user = create(:user)
+ group = create(:group)
+ group.add_master(user)
+
+ project = build_stubbed(:empty_project, namespace: group)
+
+ expect(project.team.human_max_access(user.id)).to eq 'Master'
+ end
+
+ it 'returns Owner role' do
+ user = create(:user)
+ group = create(:group)
+ group.add_owner(user)
+
+ project = build_stubbed(:empty_project, namespace: group)
+
+ expect(project.team.human_max_access(user.id)).to eq 'Owner'
end
end
end
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index 2cd0606a61d..b596782f4e1 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -5,6 +5,15 @@ describe Repository, models: true do
let(:repository) { create(:project).repository }
let(:user) { create(:user) }
+ let(:commit_options) do
+ author = repository.user_to_committer(user)
+ { message: 'Test message', committer: author, author: author }
+ end
+ let(:merge_commit) do
+ source_sha = repository.find_branch('feature').target
+ merge_commit_id = repository.merge(user, source_sha, 'master', commit_options)
+ repository.commit(merge_commit_id)
+ end
describe :branch_names_contains do
subject { repository.branch_names_contains(sample_commit.id) }
@@ -200,13 +209,22 @@ describe Repository, models: true do
describe :commit_with_hooks do
context 'when pre hooks were successful' do
- it 'should run without errors' do
- expect_any_instance_of(GitHooksService).to receive(:execute).and_return(true)
+ before do
+ expect_any_instance_of(GitHooksService).to receive(:execute).
+ and_return(true)
+ end
+ it 'should run without errors' do
expect do
repository.commit_with_hooks(user, 'feature') { sample_commit.id }
end.not_to raise_error
end
+
+ it 'should ensure the autocrlf Git option is set to :input' do
+ expect(repository).to receive(:update_autocrlf_option)
+
+ repository.commit_with_hooks(user, 'feature') { sample_commit.id }
+ end
end
context 'when pre hooks failed' do
@@ -220,6 +238,25 @@ describe Repository, models: true do
end
end
+ describe '#exists?' do
+ it 'returns true when a repository exists' do
+ expect(repository.exists?).to eq(true)
+ end
+
+ it 'returns false when a repository does not exist' do
+ expect(repository.raw_repository).to receive(:rugged).
+ and_raise(Gitlab::Git::Repository::NoRepository)
+
+ expect(repository.exists?).to eq(false)
+ end
+
+ it 'returns false when there is no namespace' do
+ allow(repository).to receive(:path_with_namespace).and_return(nil)
+
+ expect(repository.exists?).to eq(false)
+ end
+ end
+
describe '#has_visible_content?' do
subject { repository.has_visible_content? }
@@ -249,6 +286,33 @@ describe Repository, models: true do
end
end
+ describe '#update_autocrlf_option' do
+ describe 'when autocrlf is not already set to :input' do
+ before do
+ repository.raw_repository.autocrlf = true
+ end
+
+ it 'sets autocrlf to :input' do
+ repository.update_autocrlf_option
+
+ expect(repository.raw_repository.autocrlf).to eq(:input)
+ end
+ end
+
+ describe 'when autocrlf is already set to :input' do
+ before do
+ repository.raw_repository.autocrlf = :input
+ end
+
+ it 'does nothing' do
+ expect(repository.raw_repository).to_not receive(:autocrlf=).
+ with(:input)
+
+ repository.update_autocrlf_option
+ end
+ end
+ end
+
describe '#empty?' do
let(:empty_repository) { create(:project_empty_repo).repository }
@@ -297,6 +361,20 @@ describe Repository, models: true do
repository.expire_cache('master')
end
+
+ it 'expires the emptiness cache for an empty repository' do
+ expect(repository).to receive(:empty?).and_return(true)
+ expect(repository).to receive(:expire_emptiness_caches)
+
+ repository.expire_cache
+ end
+
+ it 'does not expire the emptiness cache for a non-empty repository' do
+ expect(repository).to receive(:empty?).and_return(false)
+ expect(repository).to_not receive(:expire_emptiness_caches)
+
+ repository.expire_cache
+ end
end
describe '#expire_root_ref_cache' do
@@ -371,4 +449,19 @@ describe Repository, models: true do
it { is_expected.not_to include('e56497bb5f03a90a51293fc6d516788730953899') }
end
+
+ describe '#merge' do
+ it 'should merge the code and return the commit id' do
+ expect(merge_commit).to be_present
+ expect(repository.blob_at(merge_commit.id, 'files/ruby/feature.rb')).to be_present
+ end
+ end
+
+ describe '#revert_merge' do
+ it 'should revert the changes' do
+ repository.revert(user, merge_commit, 'master')
+
+ expect(repository.blob_at_branch('master', 'files/ruby/feature.rb')).not_to be_present
+ end
+ end
end
diff --git a/spec/models/todo_spec.rb.rb b/spec/models/todo_spec.rb.rb
new file mode 100644
index 00000000000..ac481bf9fbd
--- /dev/null
+++ b/spec/models/todo_spec.rb.rb
@@ -0,0 +1,89 @@
+# == Schema Information
+#
+# Table name: todos
+#
+# id :integer not null, primary key
+# user_id :integer not null
+# project_id :integer not null
+# target_id :integer not null
+# target_type :string not null
+# author_id :integer
+# note_id :integer
+# action :integer not null
+# state :string not null
+# created_at :datetime
+# updated_at :datetime
+#
+
+require 'spec_helper'
+
+describe Todo, models: true do
+ describe 'relationships' do
+ it { is_expected.to belong_to(:author).class_name("User") }
+ it { is_expected.to belong_to(:note) }
+ it { is_expected.to belong_to(:project) }
+ it { is_expected.to belong_to(:target).touch(true) }
+ it { is_expected.to belong_to(:user) }
+ end
+
+ describe 'respond to' do
+ it { is_expected.to respond_to(:author_name) }
+ it { is_expected.to respond_to(:author_email) }
+ end
+
+ describe 'validations' do
+ it { is_expected.to validate_presence_of(:action) }
+ it { is_expected.to validate_presence_of(:target) }
+ it { is_expected.to validate_presence_of(:user) }
+ end
+
+ describe '#action_name' do
+ it 'returns proper message when action is an assigment' do
+ subject.action = Todo::ASSIGNED
+
+ expect(subject.action_name).to eq 'assigned'
+ end
+
+ it 'returns proper message when action is a mention' do
+ subject.action = Todo::MENTIONED
+
+ expect(subject.action_name).to eq 'mentioned you on'
+ end
+ end
+
+ describe '#body' do
+ before do
+ subject.target = build(:issue, title: 'Bugfix')
+ end
+
+ it 'returns target title when note is blank' do
+ subject.note = nil
+
+ expect(subject.body).to eq 'Bugfix'
+ end
+
+ it 'returns note when note is present' do
+ subject.note = build(:note, note: 'quick fix')
+
+ expect(subject.body).to eq 'quick fix'
+ end
+ end
+
+ describe '#target_iid' do
+ let(:issue) { build(:issue, id: 1, iid: 5) }
+
+ before do
+ subject.target = issue
+ end
+
+ it 'returns target.iid when target respond to iid' do
+ expect(subject.target_iid).to eq 5
+ end
+
+ it 'returns target_id when target does not respond to iid' do
+ allow(issue).to receive(:respond_to?).with(:iid).and_return(false)
+
+ expect(subject.target_iid).to eq 1
+ end
+ end
+end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index 47ce409fe4b..32d4f39b04a 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -92,6 +92,7 @@ describe User, models: true do
it { is_expected.to have_many(:identities).dependent(:destroy) }
it { is_expected.to have_one(:abuse_report) }
it { is_expected.to have_many(:spam_logs).dependent(:destroy) }
+ it { is_expected.to have_many(:todos).dependent(:destroy) }
end
describe 'validations' do
diff --git a/spec/requests/api/builds_spec.rb b/spec/requests/api/builds_spec.rb
index 6c07802db8b..175ee861a71 100644
--- a/spec/requests/api/builds_spec.rb
+++ b/spec/requests/api/builds_spec.rb
@@ -4,148 +4,190 @@ describe API::API, api: true do
include ApiHelpers
let(:user) { create(:user) }
+ let(:api_user) { user }
let(:user2) { create(:user) }
let!(:project) { create(:project, creator_id: user.id) }
let!(:developer) { create(:project_member, user: user, project: project, access_level: ProjectMember::DEVELOPER) }
let!(:reporter) { create(:project_member, user: user2, project: project, access_level: ProjectMember::REPORTER) }
let(:commit) { create(:ci_commit, project: project)}
let(:build) { create(:ci_build, commit: commit) }
- let(:build_with_trace) { create(:ci_build_with_trace, commit: commit) }
- let(:build_canceled) { create(:ci_build, :canceled, commit: commit) }
describe 'GET /projects/:id/builds ' do
+ let(:query) { '' }
+
+ before { get api("/projects/#{project.id}/builds?#{query}", api_user) }
+
context 'authorized user' do
it 'should return project builds' do
- get api("/projects/#{project.id}/builds", user)
-
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
- it 'should filter project with one scope element' do
- get api("/projects/#{project.id}/builds?scope=pending", user)
+ context 'filter project with one scope element' do
+ let(:query) { 'scope=pending' }
- expect(response.status).to eq(200)
- expect(json_response).to be_an Array
+ it do
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ end
end
- it 'should filter project with array of scope elements' do
- get api("/projects/#{project.id}/builds?scope[0]=pending&scope[1]=running", user)
+ context 'filter project with array of scope elements' do
+ let(:query) { 'scope[0]=pending&scope[1]=running' }
- expect(response.status).to eq(200)
- expect(json_response).to be_an Array
+ it do
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ end
end
- it 'should respond 400 when scope contains invalid state' do
- get api("/projects/#{project.id}/builds?scope[0]=pending&scope[1]=unknown_status", user)
+ context 'respond 400 when scope contains invalid state' do
+ let(:query) { 'scope[0]=pending&scope[1]=unknown_status' }
- expect(response.status).to eq(400)
+ it { expect(response.status).to eq(400) }
end
end
context 'unauthorized user' do
- it 'should not return project builds' do
- get api("/projects/#{project.id}/builds")
+ let(:api_user) { nil }
+ it 'should not return project builds' do
expect(response.status).to eq(401)
end
end
end
describe 'GET /projects/:id/repository/commits/:sha/builds' do
+ before do
+ project.ensure_ci_commit(commit.sha)
+ get api("/projects/#{project.id}/repository/commits/#{commit.sha}/builds", api_user)
+ end
+
context 'authorized user' do
it 'should return project builds for specific commit' do
- project.ensure_ci_commit(commit.sha)
- get api("/projects/#{project.id}/repository/commits/#{commit.sha}/builds", user)
-
expect(response.status).to eq(200)
expect(json_response).to be_an Array
end
end
context 'unauthorized user' do
- it 'should not return project builds' do
- project.ensure_ci_commit(commit.sha)
- get api("/projects/#{project.id}/repository/commits/#{commit.sha}/builds")
+ let(:api_user) { nil }
+ it 'should not return project builds' do
expect(response.status).to eq(401)
end
end
end
describe 'GET /projects/:id/builds/:build_id' do
+ before { get api("/projects/#{project.id}/builds/#{build.id}", api_user) }
+
context 'authorized user' do
it 'should return specific build data' do
- get api("/projects/#{project.id}/builds/#{build.id}", user)
-
expect(response.status).to eq(200)
expect(json_response['name']).to eq('test')
end
end
context 'unauthorized user' do
- it 'should not return specific build data' do
- get api("/projects/#{project.id}/builds/#{build.id}")
+ let(:api_user) { nil }
+ it 'should not return specific build data' do
expect(response.status).to eq(401)
end
end
end
+ describe 'GET /projects/:id/builds/:build_id/artifacts' do
+ before { get api("/projects/#{project.id}/builds/#{build.id}/artifacts", api_user) }
+
+ context 'build with artifacts' do
+ let(:build) { create(:ci_build, :artifacts, commit: commit) }
+
+ context 'authorized user' do
+ let(:download_headers) do
+ { 'Content-Transfer-Encoding'=>'binary',
+ 'Content-Disposition'=>'attachment; filename=ci_build_artifacts.zip' }
+ end
+
+ it 'should return specific build artifacts' do
+ expect(response.status).to eq(200)
+ expect(response.headers).to include(download_headers)
+ end
+ end
+
+ context 'unauthorized user' do
+ let(:api_user) { nil }
+
+ it 'should not return specific build artifacts' do
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ it 'should not return build artifacts if not uploaded' do
+ expect(response.status).to eq(404)
+ end
+ end
+
describe 'GET /projects/:id/builds/:build_id/trace' do
+ let(:build) { create(:ci_build, :trace, commit: commit) }
+
+ before { get api("/projects/#{project.id}/builds/#{build.id}/trace", api_user) }
+
context 'authorized user' do
it 'should return specific build trace' do
- get api("/projects/#{project.id}/builds/#{build_with_trace.id}/trace", user)
-
expect(response.status).to eq(200)
- expect(response.body).to eq(build_with_trace.trace)
+ expect(response.body).to eq(build.trace)
end
end
context 'unauthorized user' do
- it 'should not return specific build trace' do
- get api("/projects/#{project.id}/builds/#{build_with_trace.id}/trace")
+ let(:api_user) { nil }
+ it 'should not return specific build trace' do
expect(response.status).to eq(401)
end
end
end
describe 'POST /projects/:id/builds/:build_id/cancel' do
+ before { post api("/projects/#{project.id}/builds/#{build.id}/cancel", api_user) }
+
context 'authorized user' do
context 'user with :update_build persmission' do
it 'should cancel running or pending build' do
- post api("/projects/#{project.id}/builds/#{build.id}/cancel", user)
-
expect(response.status).to eq(201)
expect(project.builds.first.status).to eq('canceled')
end
end
context 'user without :update_build permission' do
- it 'should not cancel build' do
- post api("/projects/#{project.id}/builds/#{build.id}/cancel", user2)
+ let(:api_user) { user2 }
+ it 'should not cancel build' do
expect(response.status).to eq(403)
end
end
end
context 'unauthorized user' do
- it 'should not cancel build' do
- post api("/projects/#{project.id}/builds/#{build.id}/cancel")
+ let(:api_user) { nil }
+ it 'should not cancel build' do
expect(response.status).to eq(401)
end
end
end
describe 'POST /projects/:id/builds/:build_id/retry' do
+ let(:build) { create(:ci_build, :canceled, commit: commit) }
+
+ before { post api("/projects/#{project.id}/builds/#{build.id}/retry", api_user) }
+
context 'authorized user' do
- context 'user with :update_build persmission' do
+ context 'user with :update_build permission' do
it 'should retry non-running build' do
- post api("/projects/#{project.id}/builds/#{build_canceled.id}/retry", user)
-
expect(response.status).to eq(201)
expect(project.builds.first.status).to eq('canceled')
expect(json_response['status']).to eq('pending')
@@ -153,20 +195,50 @@ describe API::API, api: true do
end
context 'user without :update_build permission' do
- it 'should not retry build' do
- post api("/projects/#{project.id}/builds/#{build_canceled.id}/retry", user2)
+ let(:api_user) { user2 }
+ it 'should not retry build' do
expect(response.status).to eq(403)
end
end
end
context 'unauthorized user' do
- it 'should not retry build' do
- post api("/projects/#{project.id}/builds/#{build_canceled.id}/retry")
+ let(:api_user) { nil }
+ it 'should not retry build' do
expect(response.status).to eq(401)
end
end
end
+
+ describe 'POST /projects/:id/builds/:build_id/erase' do
+ before do
+ post api("/projects/#{project.id}/builds/#{build.id}/erase", user)
+ end
+
+ context 'build is erasable' do
+ let(:build) { create(:ci_build, :trace, :artifacts, :success, project: project, commit: commit) }
+
+ it 'should erase build content' do
+ expect(response.status).to eq 201
+ expect(build.trace).to be_empty
+ expect(build.artifacts_file.exists?).to be_falsy
+ expect(build.artifacts_metadata.exists?).to be_falsy
+ end
+
+ it 'should update build' do
+ expect(build.reload.erased_at).to be_truthy
+ expect(build.reload.erased_by).to eq user
+ end
+ end
+
+ context 'build is not erasable' do
+ let(:build) { create(:ci_build, :trace, project: project, commit: commit) }
+
+ it 'should respond with forbidden' do
+ expect(response.status).to eq 403
+ end
+ end
+ end
end
diff --git a/spec/requests/api/runners_spec.rb b/spec/requests/api/runners_spec.rb
new file mode 100644
index 00000000000..78484747d6a
--- /dev/null
+++ b/spec/requests/api/runners_spec.rb
@@ -0,0 +1,464 @@
+require 'spec_helper'
+
+describe API::Runners, api: true do
+ include ApiHelpers
+
+ let(:admin) { create(:user, :admin) }
+ let(:user) { create(:user) }
+ let(:user2) { create(:user) }
+
+ let(:project) { create(:project, creator_id: user.id) }
+ let(:project2) { create(:project, creator_id: user.id) }
+
+ let!(:shared_runner) { create(:ci_runner, :shared) }
+ let!(:unused_specific_runner) { create(:ci_runner) }
+
+ let!(:specific_runner) do
+ create(:ci_runner).tap do |runner|
+ create(:ci_runner_project, runner: runner, project: project)
+ end
+ end
+
+ let!(:two_projects_runner) do
+ create(:ci_runner).tap do |runner|
+ create(:ci_runner_project, runner: runner, project: project)
+ create(:ci_runner_project, runner: runner, project: project2)
+ end
+ end
+
+ before do
+ # Set project access for users
+ create(:project_member, user: user, project: project, access_level: ProjectMember::MASTER)
+ create(:project_member, user: user, project: project2, access_level: ProjectMember::MASTER)
+ create(:project_member, user: user2, project: project, access_level: ProjectMember::REPORTER)
+ end
+
+ describe 'GET /runners' do
+ context 'authorized user' do
+ it 'should return user available runners' do
+ get api('/runners', user)
+ shared = json_response.any?{ |r| r['is_shared'] }
+
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ expect(shared).to be_falsey
+ end
+
+ it 'should filter runners by scope' do
+ get api('/runners?scope=active', user)
+ shared = json_response.any?{ |r| r['is_shared'] }
+
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ expect(shared).to be_falsey
+ end
+
+ it 'should avoid filtering if scope is invalid' do
+ get api('/runners?scope=unknown', user)
+ expect(response.status).to eq(400)
+ end
+ end
+
+ context 'unauthorized user' do
+ it 'should not return runners' do
+ get api('/runners')
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'GET /runners/all' do
+ context 'authorized user' do
+ context 'with admin privileges' do
+ it 'should return all runners' do
+ get api('/runners/all', admin)
+ shared = json_response.any?{ |r| r['is_shared'] }
+
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ expect(shared).to be_truthy
+ end
+ end
+
+ context 'without admin privileges' do
+ it 'should not return runners list' do
+ get api('/runners/all', user)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ it 'should filter runners by scope' do
+ get api('/runners/all?scope=specific', admin)
+ shared = json_response.any?{ |r| r['is_shared'] }
+
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ expect(shared).to be_falsey
+ end
+
+ it 'should avoid filtering if scope is invalid' do
+ get api('/runners?scope=unknown', admin)
+ expect(response.status).to eq(400)
+ end
+ end
+
+ context 'unauthorized user' do
+ it 'should not return runners' do
+ get api('/runners')
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'GET /runners/:id' do
+ context 'admin user' do
+ context 'when runner is shared' do
+ it "should return runner's details" do
+ get api("/runners/#{shared_runner.id}", admin)
+
+ expect(response.status).to eq(200)
+ expect(json_response['description']).to eq(shared_runner.description)
+ end
+ end
+
+ context 'when runner is not shared' do
+ it "should return runner's details" do
+ get api("/runners/#{specific_runner.id}", admin)
+
+ expect(response.status).to eq(200)
+ expect(json_response['description']).to eq(specific_runner.description)
+ end
+ end
+
+ it 'should return 404 if runner does not exists' do
+ get api('/runners/9999', admin)
+
+ expect(response.status).to eq(404)
+ end
+ end
+
+ context "runner project's administrative user" do
+ context 'when runner is not shared' do
+ it "should return runner's details" do
+ get api("/runners/#{specific_runner.id}", user)
+
+ expect(response.status).to eq(200)
+ expect(json_response['description']).to eq(specific_runner.description)
+ end
+ end
+
+ context 'when runner is shared' do
+ it "should return runner's details" do
+ get api("/runners/#{shared_runner.id}", user)
+
+ expect(response.status).to eq(200)
+ expect(json_response['description']).to eq(shared_runner.description)
+ end
+ end
+ end
+
+ context 'other authorized user' do
+ it "should not return runner's details" do
+ get api("/runners/#{specific_runner.id}", user2)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'unauthorized user' do
+ it "should not return runner's details" do
+ get api("/runners/#{specific_runner.id}")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'PUT /runners/:id' do
+ context 'admin user' do
+ context 'when runner is shared' do
+ it 'should update runner' do
+ description = shared_runner.description
+ active = shared_runner.active
+
+ put api("/runners/#{shared_runner.id}", admin), description: "#{description}_updated", active: !active,
+ tag_list: ['ruby2.1', 'pgsql', 'mysql']
+ shared_runner.reload
+
+ expect(response.status).to eq(200)
+ expect(shared_runner.description).to eq("#{description}_updated")
+ expect(shared_runner.active).to eq(!active)
+ expect(shared_runner.tag_list).to include('ruby2.1', 'pgsql', 'mysql')
+ end
+ end
+
+ context 'when runner is not shared' do
+ it 'should update runner' do
+ description = specific_runner.description
+ put api("/runners/#{specific_runner.id}", admin), description: 'test'
+ specific_runner.reload
+
+ expect(response.status).to eq(200)
+ expect(specific_runner.description).to eq('test')
+ expect(specific_runner.description).not_to eq(description)
+ end
+ end
+
+ it 'should return 404 if runner does not exists' do
+ put api('/runners/9999', admin), description: 'test'
+
+ expect(response.status).to eq(404)
+ end
+ end
+
+ context 'authorized user' do
+ context 'when runner is shared' do
+ it 'should not update runner' do
+ put api("/runners/#{shared_runner.id}", user)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'when runner is not shared' do
+ it 'should not update runner without access to it' do
+ put api("/runners/#{specific_runner.id}", user2)
+
+ expect(response.status).to eq(403)
+ end
+
+ it 'should update runner with access to it' do
+ description = specific_runner.description
+ put api("/runners/#{specific_runner.id}", admin), description: 'test'
+ specific_runner.reload
+
+ expect(response.status).to eq(200)
+ expect(specific_runner.description).to eq('test')
+ expect(specific_runner.description).not_to eq(description)
+ end
+ end
+ end
+
+ context 'unauthorized user' do
+ it 'should not delete runner' do
+ put api("/runners/#{specific_runner.id}")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'DELETE /runners/:id' do
+ context 'admin user' do
+ context 'when runner is shared' do
+ it 'should delete runner' do
+ expect do
+ delete api("/runners/#{shared_runner.id}", admin)
+ end.to change{ Ci::Runner.shared.count }.by(-1)
+ expect(response.status).to eq(200)
+ end
+ end
+
+ context 'when runner is not shared' do
+ it 'should delete unused runner' do
+ expect do
+ delete api("/runners/#{unused_specific_runner.id}", admin)
+ end.to change{ Ci::Runner.specific.count }.by(-1)
+ expect(response.status).to eq(200)
+ end
+
+ it 'should delete used runner' do
+ expect do
+ delete api("/runners/#{specific_runner.id}", admin)
+ end.to change{ Ci::Runner.specific.count }.by(-1)
+ expect(response.status).to eq(200)
+ end
+ end
+
+ it 'should return 404 if runner does not exists' do
+ delete api('/runners/9999', admin)
+
+ expect(response.status).to eq(404)
+ end
+ end
+
+ context 'authorized user' do
+ context 'when runner is shared' do
+ it 'should not delete runner' do
+ delete api("/runners/#{shared_runner.id}", user)
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'when runner is not shared' do
+ it 'should not delete runner without access to it' do
+ delete api("/runners/#{specific_runner.id}", user2)
+ expect(response.status).to eq(403)
+ end
+
+ it 'should not delete runner with more than one associated project' do
+ delete api("/runners/#{two_projects_runner.id}", user)
+ expect(response.status).to eq(403)
+ end
+
+ it 'should delete runner for one owned project' do
+ expect do
+ delete api("/runners/#{specific_runner.id}", user)
+ end.to change{ Ci::Runner.specific.count }.by(-1)
+ expect(response.status).to eq(200)
+ end
+ end
+ end
+
+ context 'unauthorized user' do
+ it 'should not delete runner' do
+ delete api("/runners/#{specific_runner.id}")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'GET /projects/:id/runners' do
+ context 'authorized user with master privileges' do
+ it "should return project's runners" do
+ get api("/projects/#{project.id}/runners", user)
+ shared = json_response.any?{ |r| r['is_shared'] }
+
+ expect(response.status).to eq(200)
+ expect(json_response).to be_an Array
+ expect(shared).to be_truthy
+ end
+ end
+
+ context 'authorized user without master privileges' do
+ it "should not return project's runners" do
+ get api("/projects/#{project.id}/runners", user2)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'unauthorized user' do
+ it "should not return project's runners" do
+ get api("/projects/#{project.id}/runners")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'POST /projects/:id/runners' do
+ context 'authorized user' do
+ it 'should enable specific runner' do
+ specific_runner2 = create(:ci_runner).tap do |runner|
+ create(:ci_runner_project, runner: runner, project: project2)
+ end
+
+ expect do
+ post api("/projects/#{project.id}/runners", user), runner_id: specific_runner2.id
+ end.to change{ project.runners.count }.by(+1)
+ expect(response.status).to eq(201)
+ end
+
+ it 'should avoid changes when enabling already enabled runner' do
+ expect do
+ post api("/projects/#{project.id}/runners", user), runner_id: specific_runner.id
+ end.to change{ project.runners.count }.by(0)
+ expect(response.status).to eq(201)
+ end
+
+ it 'should not enable shared runner' do
+ post api("/projects/#{project.id}/runners", user), runner_id: shared_runner.id
+
+ expect(response.status).to eq(403)
+ end
+
+ context 'user is admin' do
+ it 'should enable any specific runner' do
+ expect do
+ post api("/projects/#{project.id}/runners", admin), runner_id: unused_specific_runner.id
+ end.to change{ project.runners.count }.by(+1)
+ expect(response.status).to eq(201)
+ end
+ end
+
+ context 'user is not admin' do
+ it 'should not enable runner without access to' do
+ post api("/projects/#{project.id}/runners", user), runner_id: unused_specific_runner.id
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ it 'should raise an error when no runner_id param is provided' do
+ post api("/projects/#{project.id}/runners", admin)
+
+ expect(response.status).to eq(400)
+ end
+ end
+
+ context 'authorized user without permissions' do
+ it 'should not enable runner' do
+ post api("/projects/#{project.id}/runners", user2)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'unauthorized user' do
+ it 'should not enable runner' do
+ post api("/projects/#{project.id}/runners")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+
+ describe 'DELETE /projects/:id/runners/:runner_id' do
+ context 'authorized user' do
+ context 'when runner have more than one associated projects' do
+ it "should disable project's runner" do
+ expect do
+ delete api("/projects/#{project.id}/runners/#{two_projects_runner.id}", user)
+ end.to change{ project.runners.count }.by(-1)
+ expect(response.status).to eq(200)
+ end
+ end
+
+ context 'when runner have one associated projects' do
+ it "should not disable project's runner" do
+ expect do
+ delete api("/projects/#{project.id}/runners/#{specific_runner.id}", user)
+ end.to change{ project.runners.count }.by(0)
+ expect(response.status).to eq(403)
+ end
+ end
+
+ it 'should return 404 is runner is not found' do
+ delete api("/projects/#{project.id}/runners/9999", user)
+
+ expect(response.status).to eq(404)
+ end
+ end
+
+ context 'authorized user without permissions' do
+ it "should not disable project's runner" do
+ delete api("/projects/#{project.id}/runners/#{specific_runner.id}", user2)
+
+ expect(response.status).to eq(403)
+ end
+ end
+
+ context 'unauthorized user' do
+ it "should not disable project's runner" do
+ delete api("/projects/#{project.id}/runners/#{specific_runner.id}")
+
+ expect(response.status).to eq(401)
+ end
+ end
+ end
+end
diff --git a/spec/requests/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb
index 01b369720ca..57d7eb927fd 100644
--- a/spec/requests/ci/api/builds_spec.rb
+++ b/spec/requests/ci/api/builds_spec.rb
@@ -131,20 +131,28 @@ describe Ci::API::API do
end
describe "PUT /builds/:id" do
- let(:commit) { FactoryGirl.create(:ci_commit, project: project)}
- let(:build) { FactoryGirl.create(:ci_build, commit: commit, runner_id: runner.id) }
+ let(:commit) {create(:ci_commit, project: project)}
+ let(:build) { create(:ci_build, :trace, commit: commit, runner_id: runner.id) }
- it "should update a running build" do
+ before do
build.run!
put ci_api("/builds/#{build.id}"), token: runner.token
+ end
+
+ it "should update a running build" do
expect(response.status).to eq(200)
end
- it 'Should not override trace information when no trace is given' do
- build.run!
- build.update!(trace: 'hello_world')
- put ci_api("/builds/#{build.id}"), token: runner.token
- expect(build.reload.trace).to eq 'hello_world'
+ it 'should not override trace information when no trace is given' do
+ expect(build.reload.trace).to eq 'BUILD TRACE'
+ end
+
+ context 'build has been erased' do
+ let(:build) { create(:ci_build, runner_id: runner.id, erased_at: Time.now) }
+
+ it 'should respond with forbidden' do
+ expect(response.status).to eq 403
+ end
end
end
@@ -191,9 +199,10 @@ describe Ci::API::API do
end
end
- context 'token is invalid' do
- it 'should respond with forbidden'do
- post authorize_url, { token: 'invalid', filesize: 100 }
+ context 'authorization token is invalid' do
+ before { post authorize_url, { token: 'invalid', filesize: 100 } }
+
+ it 'should respond with forbidden' do
expect(response.status).to eq(403)
end
end
@@ -206,6 +215,15 @@ describe Ci::API::API do
allow(ArtifactUploader).to receive(:artifacts_upload_path).and_return('/')
end
+ context 'build has been erased' do
+ let(:build) { create(:ci_build, erased_at: Time.now) }
+ before { upload_artifacts(file_upload, headers_with_token) }
+
+ it 'should respond with forbidden' do
+ expect(response.status).to eq 403
+ end
+ end
+
context "should post artifact to running build" do
it "uses regual file post" do
upload_artifacts(file_upload, headers_with_token, false)
@@ -234,7 +252,9 @@ describe Ci::API::API do
let(:stored_artifacts_file) { build.reload.artifacts_file.file }
let(:stored_metadata_file) { build.reload.artifacts_metadata.file }
- before { post(post_url, post_data, headers_with_token) }
+ before do
+ post(post_url, post_data, headers_with_token)
+ end
context 'post data accelerated by workhorse is correct' do
let(:post_data) do
diff --git a/spec/services/ci/create_builds_service_spec.rb b/spec/services/ci/create_builds_service_spec.rb
new file mode 100644
index 00000000000..1fca3628686
--- /dev/null
+++ b/spec/services/ci/create_builds_service_spec.rb
@@ -0,0 +1,28 @@
+require 'spec_helper'
+
+describe Ci::CreateBuildsService, services: true do
+ let(:commit) { create(:ci_commit) }
+ let(:user) { create(:user) }
+
+ describe '#execute' do
+ # Using stubbed .gitlab-ci.yml created in commit factory
+ #
+
+ subject do
+ described_class.new.execute(commit, 'test', 'master', nil, user, nil, status)
+ end
+
+ context 'next builds available' do
+ let(:status) { 'success' }
+
+ it { is_expected.to be_an_instance_of Array }
+ it { is_expected.to all(be_an_instance_of Ci::Build) }
+ end
+
+ context 'builds skipped' do
+ let(:status) { 'skipped' }
+
+ it { is_expected.to be_empty }
+ end
+ end
+end
diff --git a/spec/services/issues/close_service_spec.rb b/spec/services/issues/close_service_spec.rb
index 3a8daf28f5e..62b25709a5d 100644
--- a/spec/services/issues/close_service_spec.rb
+++ b/spec/services/issues/close_service_spec.rb
@@ -5,6 +5,7 @@ describe Issues::CloseService, services: true do
let(:user2) { create(:user) }
let(:issue) { create(:issue, assignee: user2) }
let(:project) { issue.project }
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
before do
project.team << [user, :master]
@@ -32,6 +33,10 @@ describe Issues::CloseService, services: true do
note = @issue.notes.last
expect(note.note).to include "Status changed to closed"
end
+
+ it 'marks todos as done' do
+ expect(todo.reload).to be_done
+ end
end
context "external issue tracker" do
@@ -42,6 +47,7 @@ describe Issues::CloseService, services: true do
it { expect(@issue).to be_valid }
it { expect(@issue).to be_opened }
+ it { expect(todo.reload).to be_pending }
end
end
end
diff --git a/spec/services/issues/create_service_spec.rb b/spec/services/issues/create_service_spec.rb
index 2148d091a57..5e7915db7e1 100644
--- a/spec/services/issues/create_service_spec.rb
+++ b/spec/services/issues/create_service_spec.rb
@@ -3,14 +3,18 @@ require 'spec_helper'
describe Issues::CreateService, services: true do
let(:project) { create(:empty_project) }
let(:user) { create(:user) }
+ let(:assignee) { create(:user) }
describe :execute do
- context "valid params" do
+ context 'valid params' do
before do
project.team << [user, :master]
+ project.team << [assignee, :master]
+
opts = {
title: 'Awesome issue',
- description: 'please fix'
+ description: 'please fix',
+ assignee: assignee
}
@issue = Issues::CreateService.new(project, user, opts).execute
@@ -18,6 +22,21 @@ describe Issues::CreateService, services: true do
it { expect(@issue).to be_valid }
it { expect(@issue.title).to eq('Awesome issue') }
+ it { expect(@issue.assignee).to eq assignee }
+
+ it 'creates a pending todo for new assignee' do
+ attributes = {
+ project: project,
+ author: user,
+ user: assignee,
+ target_id: @issue.id,
+ target_type: @issue.class.name,
+ action: Todo::ASSIGNED,
+ state: :pending
+ }
+
+ expect(Todo.where(attributes).count).to eq 1
+ end
end
end
end
diff --git a/spec/services/issues/update_service_spec.rb b/spec/services/issues/update_service_spec.rb
index 87da0e9618b..e579e49dfa7 100644
--- a/spec/services/issues/update_service_spec.rb
+++ b/spec/services/issues/update_service_spec.rb
@@ -80,6 +80,74 @@ describe Issues::UpdateService, services: true do
end
end
+ context 'todos' do
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
+
+ context 'when the title change' do
+ before do
+ update_issue({ title: 'New title' })
+ end
+
+ it 'marks pending todos as done' do
+ expect(todo.reload.done?).to eq true
+ end
+ end
+
+ context 'when the description change' do
+ before do
+ update_issue({ description: 'Also please fix' })
+ end
+
+ it 'marks todos as done' do
+ expect(todo.reload.done?).to eq true
+ end
+ end
+
+ context 'when is reassigned' do
+ before do
+ update_issue({ assignee: user2 })
+ end
+
+ it 'marks previous assignee todos as done' do
+ expect(todo.reload.done?).to eq true
+ end
+
+ it 'creates a todo for new assignee' do
+ attributes = {
+ project: project,
+ author: user,
+ user: user2,
+ target_id: issue.id,
+ target_type: issue.class.name,
+ action: Todo::ASSIGNED,
+ state: :pending
+ }
+
+ expect(Todo.where(attributes).count).to eq 1
+ end
+ end
+
+ context 'when the milestone change' do
+ before do
+ update_issue({ milestone: create(:milestone) })
+ end
+
+ it 'marks todos as done' do
+ expect(todo.reload.done?).to eq true
+ end
+ end
+
+ context 'when the labels change' do
+ before do
+ update_issue({ label_ids: [label.id] })
+ end
+
+ it 'marks todos as done' do
+ expect(todo.reload.done?).to eq true
+ end
+ end
+ end
+
context 'when Issue has tasks' do
before { update_issue({ description: "- [ ] Task 1\n- [ ] Task 2" }) }
@@ -144,6 +212,5 @@ describe Issues::UpdateService, services: true do
end
end
end
-
end
end
diff --git a/spec/services/merge_requests/close_service_spec.rb b/spec/services/merge_requests/close_service_spec.rb
index 50d0c288790..8443a00e70c 100644
--- a/spec/services/merge_requests/close_service_spec.rb
+++ b/spec/services/merge_requests/close_service_spec.rb
@@ -5,6 +5,7 @@ describe MergeRequests::CloseService, services: true do
let(:user2) { create(:user) }
let(:merge_request) { create(:merge_request, assignee: user2) }
let(:project) { merge_request.project }
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: merge_request, author: user2) }
before do
project.team << [user, :master]
@@ -41,6 +42,10 @@ describe MergeRequests::CloseService, services: true do
note = @merge_request.notes.last
expect(note.note).to include 'Status changed to closed'
end
+
+ it 'marks todos as done' do
+ expect(todo.reload).to be_done
+ end
end
end
end
diff --git a/spec/services/merge_requests/create_service_spec.rb b/spec/services/merge_requests/create_service_spec.rb
index be8f1676eeb..120f4d6a669 100644
--- a/spec/services/merge_requests/create_service_spec.rb
+++ b/spec/services/merge_requests/create_service_spec.rb
@@ -3,6 +3,7 @@ require 'spec_helper'
describe MergeRequests::CreateService, services: true do
let(:project) { create(:project) }
let(:user) { create(:user) }
+ let(:assignee) { create(:user) }
describe :execute do
context 'valid params' do
@@ -14,10 +15,12 @@ describe MergeRequests::CreateService, services: true do
target_branch: 'master'
}
end
+
let(:service) { MergeRequests::CreateService.new(project, user, opts) }
before do
project.team << [user, :master]
+ project.team << [assignee, :developer]
allow(service).to receive(:execute_hooks)
@merge_request = service.execute
@@ -25,10 +28,49 @@ describe MergeRequests::CreateService, services: true do
it { expect(@merge_request).to be_valid }
it { expect(@merge_request.title).to eq('Awesome merge_request') }
+ it { expect(@merge_request.assignee).to be_nil }
it 'should execute hooks with default action' do
expect(service).to have_received(:execute_hooks).with(@merge_request)
end
+
+ it 'does not creates todos' do
+ attributes = {
+ project: project,
+ target_id: @merge_request.id,
+ target_type: @merge_request.class.name
+ }
+
+ expect(Todo.where(attributes).count).to be_zero
+ end
+
+ context 'when merge request is assigned to someone' do
+ let(:opts) do
+ {
+ title: 'Awesome merge_request',
+ description: 'please fix',
+ source_branch: 'feature',
+ target_branch: 'master',
+ assignee: assignee
+ }
+ end
+
+ it { expect(@merge_request.assignee).to eq assignee }
+
+ it 'creates a todo for new assignee' do
+ attributes = {
+ project: project,
+ author: user,
+ user: assignee,
+ target_id: @merge_request.id,
+ target_type: @merge_request.class.name,
+ action: Todo::ASSIGNED,
+ state: :pending
+ }
+
+ expect(Todo.where(attributes).count).to eq 1
+ end
+ end
end
end
end
diff --git a/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb b/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb
index de9fed2b7dd..f285517cdac 100644
--- a/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb
+++ b/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb
@@ -54,14 +54,68 @@ describe MergeRequests::MergeWhenBuildSucceedsService do
end
describe "#trigger" do
- let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch, status: "success") }
+ context 'build with ref' do
+ let(:build) { create(:ci_build, ref: mr_merge_if_green_enabled.source_branch, status: "success") }
- it "merges all merge requests with merge when build succeeds enabled" do
- allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
- allow(ci_commit).to receive(:success?).and_return(true)
+ it "merges all merge requests with merge when build succeeds enabled" do
+ allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
+ allow(ci_commit).to receive(:success?).and_return(true)
+
+ expect(MergeWorker).to receive(:perform_async)
+ service.trigger(build)
+ end
+ end
+
+ context 'commit status without ref' do
+ let(:commit_status) { create(:generic_commit_status, status: 'success') }
+
+ it "doesn't merge a requests for status on other branch" do
+ allow(project.repository).to receive(:branch_names_contains).with(commit_status.sha).and_return([])
+
+ expect(MergeWorker).to_not receive(:perform_async)
+ service.trigger(commit_status)
+ end
+
+ it 'discovers branches and merges all merge requests when status is success' do
+ allow(project.repository).to receive(:branch_names_contains).
+ with(commit_status.sha).and_return([mr_merge_if_green_enabled.source_branch])
+ allow(ci_commit).to receive(:success?).and_return(true)
+ allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_return(ci_commit)
+ allow(ci_commit).to receive(:success?).and_return(true)
- expect(MergeWorker).to receive(:perform_async)
- service.trigger(build)
+ expect(MergeWorker).to receive(:perform_async)
+ service.trigger(commit_status)
+ end
+ end
+
+ context 'properly handles multiple stages' do
+ let(:ref) { mr_merge_if_green_enabled.source_branch }
+ let(:build) { create(:ci_build, commit: ci_commit, ref: ref, name: 'build', stage: 'build') }
+ let(:test) { create(:ci_build, commit: ci_commit, ref: ref, name: 'test', stage: 'test') }
+
+ before do
+ # This behavior of MergeRequest: we instantiate a new object
+ allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_wrap_original do
+ Ci::Commit.find(ci_commit.id)
+ end
+
+ # We create test after the build
+ allow(ci_commit).to receive(:create_next_builds).and_wrap_original do
+ test
+ end
+ end
+
+ it "doesn't merge if some stages failed" do
+ expect(MergeWorker).to_not receive(:perform_async)
+ build.success
+ test.drop
+ end
+
+ it 'merge when all stages succeeded' do
+ expect(MergeWorker).to receive(:perform_async)
+ build.success
+ test.success
+ end
end
end
diff --git a/spec/services/merge_requests/update_service_spec.rb b/spec/services/merge_requests/update_service_spec.rb
index 2e9e6e0870d..99703c7a8ec 100644
--- a/spec/services/merge_requests/update_service_spec.rb
+++ b/spec/services/merge_requests/update_service_spec.rb
@@ -98,6 +98,84 @@ describe MergeRequests::UpdateService, services: true do
end
end
+ context 'todos' do
+ let!(:pending_todo) { create(:todo, :assigned, user: user, project: project, target: merge_request, author: user2) }
+
+ context 'when the title change' do
+ before do
+ update_merge_request({ title: 'New title' })
+ end
+
+ it 'marks pending todos as done' do
+ expect(pending_todo.reload).to be_done
+ end
+ end
+
+ context 'when the description change' do
+ before do
+ update_merge_request({ description: 'Also please fix' })
+ end
+
+ it 'marks pending todos as done' do
+ expect(pending_todo.reload).to be_done
+ end
+ end
+
+ context 'when is reassigned' do
+ before do
+ update_merge_request({ assignee: user2 })
+ end
+
+ it 'marks previous assignee pending todos as done' do
+ expect(pending_todo.reload).to be_done
+ end
+
+ it 'creates a pending todo for new assignee' do
+ attributes = {
+ project: project,
+ author: user,
+ user: user2,
+ target_id: merge_request.id,
+ target_type: merge_request.class.name,
+ action: Todo::ASSIGNED,
+ state: :pending
+ }
+
+ expect(Todo.where(attributes).count).to eq 1
+ end
+ end
+
+ context 'when the milestone change' do
+ before do
+ update_merge_request({ milestone: create(:milestone) })
+ end
+
+ it 'marks pending todos as done' do
+ expect(pending_todo.reload).to be_done
+ end
+ end
+
+ context 'when the labels change' do
+ before do
+ update_merge_request({ label_ids: [label.id] })
+ end
+
+ it 'marks pending todos as done' do
+ expect(pending_todo.reload).to be_done
+ end
+ end
+
+ context 'when the target branch change' do
+ before do
+ update_merge_request({ target_branch: 'target' })
+ end
+
+ it 'marks pending todos as done' do
+ expect(pending_todo.reload).to be_done
+ end
+ end
+ end
+
context 'when MergeRequest has tasks' do
before { update_merge_request({ description: "- [ ] Task 1\n- [ ] Task 2" }) }
@@ -130,6 +208,5 @@ describe MergeRequests::UpdateService, services: true do
end
end
end
-
end
end
diff --git a/spec/services/notes/post_process_service_spec.rb b/spec/services/notes/post_process_service_spec.rb
index 1a3f339bd64..d4c50f824c1 100644
--- a/spec/services/notes/post_process_service_spec.rb
+++ b/spec/services/notes/post_process_service_spec.rb
@@ -20,6 +20,7 @@ describe Notes::PostProcessService, services: true do
it do
expect(project).to receive(:execute_hooks)
expect(project).to receive(:execute_services)
+
Notes::PostProcessService.new(@note).execute
end
end
diff --git a/spec/services/notes/update_service_spec.rb b/spec/services/notes/update_service_spec.rb
new file mode 100644
index 00000000000..dde4bde7dc2
--- /dev/null
+++ b/spec/services/notes/update_service_spec.rb
@@ -0,0 +1,45 @@
+require 'spec_helper'
+
+describe Notes::UpdateService, services: true do
+ let(:project) { create(:empty_project) }
+ let(:user) { create(:user) }
+ let(:user2) { create(:user) }
+ let(:issue) { create(:issue, project: project) }
+ let(:note) { create(:note, project: project, noteable: issue, author: user, note: 'Old note') }
+
+ before do
+ project.team << [user, :master]
+ project.team << [user2, :developer]
+ end
+
+ describe '#execute' do
+ def update_note(opts)
+ @note = Notes::UpdateService.new(project, user, opts).execute(note)
+ @note.reload
+ end
+
+ context 'todos' do
+ let!(:todo) { create(:todo, :assigned, user: user, project: project, target: issue, author: user2) }
+
+ context 'when the note change' do
+ before do
+ update_note({ note: 'New note' })
+ end
+
+ it 'marks todos as done' do
+ expect(todo.reload).to be_done
+ end
+ end
+
+ context 'when the note does not change' do
+ before do
+ update_note({ note: 'Old note' })
+ end
+
+ it 'keep todos' do
+ expect(todo.reload).to be_pending
+ end
+ end
+ end
+ end
+end
diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb
new file mode 100644
index 00000000000..df3aa955f24
--- /dev/null
+++ b/spec/services/todo_service_spec.rb
@@ -0,0 +1,264 @@
+require 'spec_helper'
+
+describe TodoService, services: true do
+ let(:author) { create(:user) }
+ let(:john_doe) { create(:user, username: 'john_doe') }
+ let(:michael) { create(:user, username: 'michael') }
+ let(:stranger) { create(:user, username: 'stranger') }
+ let(:project) { create(:project) }
+ let(:mentions) { [author.to_reference, john_doe.to_reference, michael.to_reference, stranger.to_reference].join(' ') }
+ let(:service) { described_class.new }
+
+ before do
+ project.team << [author, :developer]
+ project.team << [john_doe, :developer]
+ project.team << [michael, :developer]
+ end
+
+ describe 'Issues' do
+ let(:issue) { create(:issue, project: project, assignee: john_doe, author: author, description: mentions) }
+ let(:unassigned_issue) { create(:issue, project: project, assignee: nil) }
+
+ describe '#new_issue' do
+ it 'creates a todo if assigned' do
+ service.new_issue(issue, author)
+
+ should_create_todo(user: john_doe, target: issue, action: Todo::ASSIGNED)
+ end
+
+ it 'does not create a todo if unassigned' do
+ should_not_create_any_todo { service.new_issue(unassigned_issue, author) }
+ end
+
+ it 'does not create a todo if assignee is the current user' do
+ should_not_create_any_todo { service.new_issue(unassigned_issue, john_doe) }
+ end
+
+ it 'creates a todo for each valid mentioned user' do
+ service.new_issue(issue, author)
+
+ should_create_todo(user: michael, target: issue, action: Todo::MENTIONED)
+ should_not_create_todo(user: author, target: issue, action: Todo::MENTIONED)
+ should_not_create_todo(user: john_doe, target: issue, action: Todo::MENTIONED)
+ should_not_create_todo(user: stranger, target: issue, action: Todo::MENTIONED)
+ end
+ end
+
+ describe '#update_issue' do
+ it 'creates a todo for each valid mentioned user' do
+ service.update_issue(issue, author)
+
+ should_create_todo(user: michael, target: issue, action: Todo::MENTIONED)
+ should_create_todo(user: john_doe, target: issue, action: Todo::MENTIONED)
+ should_not_create_todo(user: author, target: issue, action: Todo::MENTIONED)
+ should_not_create_todo(user: stranger, target: issue, action: Todo::MENTIONED)
+ end
+
+ it 'does not create a todo if user was already mentioned' do
+ create(:todo, :mentioned, user: michael, project: project, target: issue, author: author)
+
+ expect { service.update_issue(issue, author) }.not_to change(michael.todos, :count)
+ end
+ end
+
+ describe '#close_issue' do
+ it 'marks related pending todos to the target for the user as done' do
+ first_todo = create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author)
+ second_todo = create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author)
+
+ service.close_issue(issue, john_doe)
+
+ expect(first_todo.reload).to be_done
+ expect(second_todo.reload).to be_done
+ end
+ end
+
+ describe '#reassigned_issue' do
+ it 'creates a pending todo for new assignee' do
+ unassigned_issue.update_attribute(:assignee, john_doe)
+ service.reassigned_issue(unassigned_issue, author)
+
+ should_create_todo(user: john_doe, target: unassigned_issue, action: Todo::ASSIGNED)
+ end
+
+ it 'does not create a todo if unassigned' do
+ issue.update_attribute(:assignee, nil)
+
+ should_not_create_any_todo { service.reassigned_issue(issue, author) }
+ end
+
+ it 'does not create a todo if new assignee is the current user' do
+ unassigned_issue.update_attribute(:assignee, john_doe)
+
+ should_not_create_any_todo { service.reassigned_issue(unassigned_issue, john_doe) }
+ end
+ end
+
+ describe '#mark_pending_todos_as_done' do
+ it 'marks related pending todos to the target for the user as done' do
+ first_todo = create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author)
+ second_todo = create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author)
+
+ service.mark_pending_todos_as_done(issue, john_doe)
+
+ expect(first_todo.reload).to be_done
+ expect(second_todo.reload).to be_done
+ end
+ end
+
+ describe '#new_note' do
+ let!(:first_todo) { create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author) }
+ let!(:second_todo) { create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author) }
+ let(:note) { create(:note, project: project, noteable: issue, author: john_doe, note: mentions) }
+ let(:award_note) { create(:note, :award, project: project, noteable: issue, author: john_doe, note: 'thumbsup') }
+ let(:system_note) { create(:system_note, project: project, noteable: issue) }
+
+ it 'mark related pending todos to the noteable for the note author as done' do
+ first_todo = create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author)
+ second_todo = create(:todo, :assigned, user: john_doe, project: project, target: issue, author: author)
+
+ service.new_note(note, john_doe)
+
+ expect(first_todo.reload).to be_done
+ expect(second_todo.reload).to be_done
+ end
+
+ it 'mark related pending todos to the noteable for the award note author as done' do
+ service.new_note(award_note, john_doe)
+
+ expect(first_todo.reload).to be_done
+ expect(second_todo.reload).to be_done
+ end
+
+ it 'does not mark related pending todos it is a system note' do
+ service.new_note(system_note, john_doe)
+
+ expect(first_todo.reload).to be_pending
+ expect(second_todo.reload).to be_pending
+ end
+
+ it 'creates a todo for each valid mentioned user' do
+ service.new_note(note, john_doe)
+
+ should_create_todo(user: michael, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
+ should_create_todo(user: author, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
+ should_not_create_todo(user: john_doe, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
+ should_not_create_todo(user: stranger, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
+ end
+ end
+ end
+
+ describe 'Merge Requests' do
+ let(:mr_assigned) { create(:merge_request, source_project: project, author: author, assignee: john_doe, description: mentions) }
+ let(:mr_unassigned) { create(:merge_request, source_project: project, author: author, assignee: nil) }
+
+ describe '#new_merge_request' do
+ it 'creates a pending todo if assigned' do
+ service.new_merge_request(mr_assigned, author)
+
+ should_create_todo(user: john_doe, target: mr_assigned, action: Todo::ASSIGNED)
+ end
+
+ it 'does not create a todo if unassigned' do
+ should_not_create_any_todo { service.new_merge_request(mr_unassigned, author) }
+ end
+
+ it 'does not create a todo if assignee is the current user' do
+ should_not_create_any_todo { service.new_merge_request(mr_unassigned, john_doe) }
+ end
+
+ it 'creates a todo for each valid mentioned user' do
+ service.new_merge_request(mr_assigned, author)
+
+ should_create_todo(user: michael, target: mr_assigned, action: Todo::MENTIONED)
+ should_not_create_todo(user: author, target: mr_assigned, action: Todo::MENTIONED)
+ should_not_create_todo(user: john_doe, target: mr_assigned, action: Todo::MENTIONED)
+ should_not_create_todo(user: stranger, target: mr_assigned, action: Todo::MENTIONED)
+ end
+ end
+
+ describe '#update_merge_request' do
+ it 'creates a todo for each valid mentioned user' do
+ service.update_merge_request(mr_assigned, author)
+
+ should_create_todo(user: michael, target: mr_assigned, action: Todo::MENTIONED)
+ should_create_todo(user: john_doe, target: mr_assigned, action: Todo::MENTIONED)
+ should_not_create_todo(user: author, target: mr_assigned, action: Todo::MENTIONED)
+ should_not_create_todo(user: stranger, target: mr_assigned, action: Todo::MENTIONED)
+ end
+
+ it 'does not create a todo if user was already mentioned' do
+ create(:todo, :mentioned, user: michael, project: project, target: mr_assigned, author: author)
+
+ expect { service.update_merge_request(mr_assigned, author) }.not_to change(michael.todos, :count)
+ end
+ end
+
+ describe '#close_merge_request' do
+ it 'marks related pending todos to the target for the user as done' do
+ first_todo = create(:todo, :assigned, user: john_doe, project: project, target: mr_assigned, author: author)
+ second_todo = create(:todo, :assigned, user: john_doe, project: project, target: mr_assigned, author: author)
+ service.close_merge_request(mr_assigned, john_doe)
+
+ expect(first_todo.reload).to be_done
+ expect(second_todo.reload).to be_done
+ end
+ end
+
+ describe '#reassigned_merge_request' do
+ it 'creates a pending todo for new assignee' do
+ mr_unassigned.update_attribute(:assignee, john_doe)
+ service.reassigned_merge_request(mr_unassigned, author)
+
+ should_create_todo(user: john_doe, target: mr_unassigned, action: Todo::ASSIGNED)
+ end
+
+ it 'does not create a todo if unassigned' do
+ mr_assigned.update_attribute(:assignee, nil)
+
+ should_not_create_any_todo { service.reassigned_merge_request(mr_assigned, author) }
+ end
+
+ it 'does not create a todo if new assignee is the current user' do
+ mr_assigned.update_attribute(:assignee, john_doe)
+
+ should_not_create_any_todo { service.reassigned_merge_request(mr_assigned, john_doe) }
+ end
+ end
+
+ describe '#merge_merge_request' do
+ it 'marks related pending todos to the target for the user as done' do
+ first_todo = create(:todo, :assigned, user: john_doe, project: project, target: mr_assigned, author: author)
+ second_todo = create(:todo, :assigned, user: john_doe, project: project, target: mr_assigned, author: author)
+ service.merge_merge_request(mr_assigned, john_doe)
+
+ expect(first_todo.reload).to be_done
+ expect(second_todo.reload).to be_done
+ end
+ end
+ end
+
+ def should_create_todo(attributes = {})
+ attributes.reverse_merge!(
+ project: project,
+ author: author,
+ state: :pending
+ )
+
+ expect(Todo.where(attributes).count).to eq 1
+ end
+
+ def should_not_create_todo(attributes = {})
+ attributes.reverse_merge!(
+ project: project,
+ author: author,
+ state: :pending
+ )
+
+ expect(Todo.where(attributes).count).to eq 0
+ end
+
+ def should_not_create_any_todo
+ expect { yield }.not_to change(Todo, :count)
+ end
+end