summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.rubocop.yml361
-rw-r--r--.rubocop_todo.yml462
-rw-r--r--CHANGELOG50
-rw-r--r--CONTRIBUTING.md3
-rw-r--r--Gemfile15
-rw-r--r--Gemfile.lock42
-rw-r--r--MAINTENANCE.md36
-rw-r--r--app/assets/images/emoji.pngbin1025831 -> 1087659 bytes
-rw-r--r--app/assets/images/emoji@2x.pngbin2492919 -> 2652225 bytes
-rw-r--r--app/assets/javascripts/application.js.coffee1
-rw-r--r--app/assets/javascripts/compare_autocomplete.js.coffee41
-rw-r--r--app/assets/javascripts/dispatcher.js.coffee2
-rw-r--r--app/assets/javascripts/gl_dropdown.js.coffee25
-rw-r--r--app/assets/javascripts/issuable.js.coffee4
-rw-r--r--app/assets/javascripts/issues-bulk-assignment.js.coffee13
-rw-r--r--app/assets/javascripts/lib/utils/datetime_utility.js.coffee2
-rw-r--r--app/assets/javascripts/projects_list.js.coffee11
-rw-r--r--app/assets/javascripts/protected_branches.js.coffee8
-rw-r--r--app/assets/javascripts/shortcuts.js.coffee13
-rw-r--r--app/assets/javascripts/subscription_select.js.coffee18
-rw-r--r--app/assets/javascripts/u2f/authenticate.js.coffee18
-rw-r--r--app/assets/javascripts/u2f/util.js.coffee3
-rw-r--r--app/assets/javascripts/u2f/util.js.coffee.erb15
-rw-r--r--app/assets/javascripts/users_select.js.coffee6
-rw-r--r--app/assets/stylesheets/framework/blank.scss11
-rw-r--r--app/assets/stylesheets/framework/blocks.scss6
-rw-r--r--app/assets/stylesheets/framework/common.scss15
-rw-r--r--app/assets/stylesheets/framework/files.scss2
-rw-r--r--app/assets/stylesheets/framework/sidebar.scss8
-rw-r--r--app/assets/stylesheets/framework/typography.scss32
-rw-r--r--app/assets/stylesheets/framework/variables.scss3
-rw-r--r--app/assets/stylesheets/pages/admin.scss8
-rw-r--r--app/assets/stylesheets/pages/emojis.scss2607
-rw-r--r--app/assets/stylesheets/pages/groups.scss27
-rw-r--r--app/assets/stylesheets/pages/issues.scss2
-rw-r--r--app/assets/stylesheets/pages/merge_requests.scss2
-rw-r--r--app/assets/stylesheets/pages/pipelines.scss20
-rw-r--r--app/assets/stylesheets/pages/projects.scss10
-rw-r--r--app/assets/stylesheets/pages/search.scss2
-rw-r--r--app/assets/stylesheets/pages/tree.scss5
-rw-r--r--app/controllers/admin/builds_controller.rb4
-rw-r--r--app/controllers/application_controller.rb4
-rw-r--r--app/controllers/concerns/authenticates_with_two_factor.rb10
-rw-r--r--app/controllers/concerns/diff_for_path.rb1
-rw-r--r--app/controllers/profiles/two_factor_auths_controller.rb3
-rw-r--r--app/controllers/projects/builds_controller.rb4
-rw-r--r--app/controllers/projects/issues_controller.rb7
-rw-r--r--app/controllers/projects/merge_requests_controller.rb5
-rw-r--r--app/controllers/projects/protected_branches_controller.rb2
-rw-r--r--app/controllers/projects/services_controller.rb3
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/helpers/blob_helper.rb9
-rw-r--r--app/helpers/branches_helper.rb2
-rw-r--r--app/helpers/diff_helper.rb9
-rw-r--r--app/helpers/issuables_helper.rb2
-rw-r--r--app/helpers/projects_helper.rb7
-rw-r--r--app/helpers/search_helper.rb2
-rw-r--r--app/helpers/u2f_helper.rb5
-rw-r--r--app/mailers/emails/builds.rb1
-rw-r--r--app/models/ability.rb3
-rw-r--r--app/models/ci/build.rb35
-rw-r--r--app/models/ci/pipeline.rb8
-rw-r--r--app/models/concerns/awardable.rb9
-rw-r--r--app/models/concerns/issuable.rb6
-rw-r--r--app/models/concerns/mentionable.rb8
-rw-r--r--app/models/concerns/participable.rb7
-rw-r--r--app/models/legacy_diff_note.rb4
-rw-r--r--app/models/merge_request.rb8
-rw-r--r--app/models/merge_request_diff.rb9
-rw-r--r--app/models/note.rb3
-rw-r--r--app/models/project.rb16
-rw-r--r--app/models/project_services/builds_email_service.rb27
-rw-r--r--app/models/repository.rb82
-rw-r--r--app/models/service.rb9
-rw-r--r--app/models/user.rb1
-rw-r--r--app/services/ci/create_builds_service.rb4
-rw-r--r--app/services/ci/create_pipeline_service.rb1
-rw-r--r--app/services/commits/change_service.rb4
-rw-r--r--app/services/create_branch_service.rb28
-rw-r--r--app/services/create_commit_builds_service.rb8
-rw-r--r--app/services/files/base_service.rb2
-rw-r--r--app/services/git_push_service.rb3
-rw-r--r--app/services/issuable_base_service.rb10
-rw-r--r--app/services/issues/bulk_update_service.rb2
-rw-r--r--app/services/merge_requests/merge_service.rb4
-rw-r--r--app/services/merge_requests/refresh_service.rb2
-rw-r--r--app/services/notes/create_service.rb1
-rw-r--r--app/services/projects/import_export/export_service.rb2
-rw-r--r--app/services/projects/import_service.rb2
-rw-r--r--app/services/todo_service.rb3
-rw-r--r--app/views/admin/builds/index.html.haml9
-rw-r--r--app/views/admin/groups/_group.html.haml40
-rw-r--r--app/views/admin/groups/show.html.haml2
-rw-r--r--app/views/admin/projects/index.html.haml2
-rw-r--r--app/views/admin/users/_user.html.haml2
-rw-r--r--app/views/dashboard/projects/_zero_authorized_projects.html.haml87
-rw-r--r--app/views/dashboard/projects/index.html.haml3
-rw-r--r--app/views/devise/sessions/two_factor.html.haml4
-rw-r--r--app/views/emojis/index.html.haml2
-rw-r--r--app/views/errors/access_denied.html.haml2
-rw-r--r--app/views/groups/group_members/_new_group_member.html.haml2
-rw-r--r--app/views/help/_shortcuts.html.haml4
-rw-r--r--app/views/layouts/_page.html.haml2
-rw-r--r--app/views/layouts/_search.html.haml2
-rw-r--r--app/views/layouts/header/_default.html.haml18
-rw-r--r--app/views/notify/note_merge_request_email.html.haml2
-rw-r--r--app/views/profiles/two_factor_auths/show.html.haml4
-rw-r--r--app/views/projects/builds/_sidebar.html.haml4
-rw-r--r--app/views/projects/builds/index.html.haml11
-rw-r--r--app/views/projects/ci/pipelines/_pipeline.html.haml26
-rw-r--r--app/views/projects/compare/_form.html.haml18
-rw-r--r--app/views/projects/compare/_ref_dropdown.html.haml4
-rw-r--r--app/views/projects/diffs/_content.html.haml10
-rw-r--r--app/views/projects/diffs/_diffs.html.haml2
-rw-r--r--app/views/projects/merge_requests/widget/open/_conflicts.html.haml2
-rw-r--r--app/views/projects/new.html.haml7
-rw-r--r--app/views/projects/project_members/_new_project_member.html.haml2
-rw-r--r--app/views/projects/protected_branches/_branches_list.html.haml2
-rw-r--r--app/views/projects/protected_branches/_protected_branch.html.haml2
-rw-r--r--app/views/projects/protected_branches/index.html.haml12
-rw-r--r--app/views/projects/services/_form.html.haml2
-rw-r--r--app/views/shared/_import_form.html.haml2
-rw-r--r--app/views/shared/icons/_group.svg.erb (renamed from app/views/shared/icons/_group.svg)9
-rw-r--r--app/views/shared/icons/_project.svg10
-rw-r--r--app/views/shared/icons/_project.svg.erb3
-rw-r--r--app/views/shared/issuable/_filter.html.haml9
-rw-r--r--app/views/shared/issuable/_form.html.haml9
-rw-r--r--app/views/shared/issuable/_sidebar.html.haml2
-rw-r--r--app/workers/git_garbage_collect_worker.rb4
-rw-r--r--app/workers/project_export_worker.rb2
-rw-r--r--config/application.rb3
-rw-r--r--config/initializers/secure_headers.rb109
-rw-r--r--config/initializers/sidekiq.rb9
-rw-r--r--db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb9
-rw-r--r--db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb8
-rw-r--r--db/migrate/20160707104333_add_lock_to_issuables.rb17
-rw-r--r--db/migrate/20160715132507_add_user_id_to_pipeline.rb7
-rw-r--r--db/migrate/20160715134306_add_index_for_pipeline_user_id.rb9
-rw-r--r--db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb8
-rw-r--r--db/schema.rb37
-rw-r--r--doc/api/branches.md20
-rw-r--r--doc/api/issues.md29
-rw-r--r--doc/api/todos.md152
-rw-r--r--doc/ci/yaml/README.md7
-rw-r--r--doc/development/doc_styleguide.md2
-rw-r--r--doc/development/rake_tasks.md5
-rw-r--r--doc/development/ui_guide.md48
-rw-r--r--doc/integration/oauth_provider.md3
-rw-r--r--doc/raketasks/maintenance.md19
-rw-r--r--features/project/merge_requests.feature2
-rw-r--r--fixtures/emojis/aliases.json191
-rw-r--r--fixtures/emojis/digests.json2166
-rw-r--r--fixtures/emojis/index.json13379
-rw-r--r--lib/api/award_emoji.rb4
-rw-r--r--lib/api/branches.rb17
-rw-r--r--lib/api/commit_statuses.rb2
-rw-r--r--lib/api/entities.rb17
-rw-r--r--lib/api/helpers.rb9
-rw-r--r--lib/api/internal.rb7
-rw-r--r--lib/api/issues.rb10
-rw-r--r--lib/api/todos.rb2
-rw-r--r--lib/banzai/filter/autolink_filter.rb2
-rw-r--r--lib/banzai/filter/syntax_highlight_filter.rb15
-rw-r--r--lib/banzai/filter/user_reference_filter.rb10
-rw-r--r--lib/ci/gitlab_ci_yaml_processor.rb53
-rw-r--r--lib/container_registry/client.rb69
-rw-r--r--lib/container_registry/tag.rb2
-rw-r--r--lib/gitlab/access.rb8
-rw-r--r--lib/gitlab/award_emoji.rb24
-rw-r--r--lib/gitlab/backend/grack_auth.rb2
-rw-r--r--lib/gitlab/checks/change_access.rb96
-rw-r--r--lib/gitlab/checks/force_push.rb17
-rw-r--r--lib/gitlab/checks/matching_merge_request.rb18
-rw-r--r--lib/gitlab/database/migration_helpers.rb10
-rw-r--r--lib/gitlab/diff/file.rb6
-rw-r--r--lib/gitlab/force_push_check.rb15
-rw-r--r--lib/gitlab/git_access.rb143
-rw-r--r--lib/gitlab/git_access_wiki.rb2
-rw-r--r--lib/gitlab/gitlab_import/importer.rb53
-rw-r--r--lib/gitlab/highlight.rb43
-rw-r--r--lib/gitlab/import_export.rb9
-rw-r--r--lib/gitlab/import_export/import_export.yml6
-rw-r--r--lib/gitlab/import_export/importer.rb3
-rw-r--r--lib/gitlab/import_export/project_tree_restorer.rb5
-rw-r--r--lib/gitlab/import_export/relation_factory.rb13
-rw-r--r--lib/gitlab/import_export/repo_restorer.rb9
-rw-r--r--lib/gitlab/import_export/repo_saver.rb2
-rw-r--r--lib/gitlab/import_export/saver.rb5
-rw-r--r--lib/gitlab/import_export/wiki_repo_saver.rb1
-rw-r--r--lib/gitlab/lfs/response.rb2
-rw-r--r--lib/gitlab/lfs/router.rb2
-rw-r--r--lib/gitlab/user_access.rb48
-rw-r--r--lib/rouge/formatters/html_gitlab.rb168
-rw-r--r--lib/tasks/gemojione.rake17
-rw-r--r--lib/tasks/gitlab/track_deployment.rake9
-rw-r--r--spec/controllers/projects_controller_spec.rb20
-rw-r--r--spec/factories/ci/builds.rb5
-rw-r--r--spec/features/admin/admin_builds_spec.rb36
-rw-r--r--spec/features/builds_spec.rb46
-rw-r--r--spec/features/compare_spec.rb42
-rw-r--r--spec/features/expand_collapse_diffs_spec.rb43
-rw-r--r--spec/features/groups_spec.rb20
-rw-r--r--spec/features/issues_spec.rb11
-rw-r--r--spec/features/merge_requests/edit_mr_spec.rb11
-rw-r--r--spec/features/security/project/internal_access_spec.rb19
-rw-r--r--spec/features/security/project/private_access_spec.rb19
-rw-r--r--spec/features/security/project/public_access_spec.rb19
-rw-r--r--spec/features/u2f_spec.rb55
-rw-r--r--spec/fixtures/parallel_diff_result.yml12
-rw-r--r--spec/helpers/blob_helper_spec.rb32
-rw-r--r--spec/helpers/diff_helper_spec.rb23
-rw-r--r--spec/helpers/events_helper_spec.rb2
-rw-r--r--spec/javascripts/u2f/authenticate_spec.coffee3
-rw-r--r--spec/javascripts/u2f/register_spec.js.coffee1
-rw-r--r--spec/lib/banzai/filter/autolink_filter_spec.rb20
-rw-r--r--spec/lib/banzai/filter/syntax_highlight_filter_spec.rb34
-rw-r--r--spec/lib/ci/gitlab_ci_yaml_processor_spec.rb149
-rw-r--r--spec/lib/container_registry/blob_spec.rb52
-rw-r--r--spec/lib/container_registry/tag_spec.rb49
-rw-r--r--spec/lib/gitlab/bitbucket_import/client_spec.rb2
-rw-r--r--spec/lib/gitlab/database/migration_helpers_spec.rb4
-rw-r--r--spec/lib/gitlab/diff/file_spec.rb14
-rw-r--r--spec/lib/gitlab/diff/highlight_spec.rb4
-rw-r--r--spec/lib/gitlab/diff/position_tracer_spec.rb3
-rw-r--r--spec/lib/gitlab/git_access_spec.rb247
-rw-r--r--spec/lib/gitlab/import_export/import_export_spec.rb21
-rw-r--r--spec/lib/gitlab/import_export/project.json19
-rw-r--r--spec/lib/gitlab/import_export/project_tree_restorer_spec.rb15
-rw-r--r--spec/lib/gitlab/import_export/project_tree_saver_spec.rb9
-rw-r--r--spec/lib/gitlab/lfs/lfs_router_spec.rb730
-rw-r--r--spec/lib/gitlab/user_access_spec.rb88
-rw-r--r--spec/models/build_spec.rb18
-rw-r--r--spec/models/ci/pipeline_spec.rb3
-rw-r--r--spec/models/commit_status_spec.rb24
-rw-r--r--spec/models/legacy_diff_note_spec.rb8
-rw-r--r--spec/models/project_services/builds_email_service_spec.rb38
-rw-r--r--spec/models/project_spec.rb22
-rw-r--r--spec/models/repository_spec.rb9
-rw-r--r--spec/models/user_spec.rb2
-rw-r--r--spec/requests/api/api_helpers_spec.rb27
-rw-r--r--spec/requests/api/award_emoji_spec.rb32
-rw-r--r--spec/requests/api/branches_spec.rb87
-rw-r--r--spec/requests/api/internal_spec.rb14
-rw-r--r--spec/requests/api/issues_spec.rb25
-rw-r--r--spec/requests/api/todos_spec.rb3
-rw-r--r--spec/requests/lfs_http_spec.rb768
-rw-r--r--spec/services/auth/container_registry_authentication_service_spec.rb104
-rw-r--r--spec/services/create_commit_builds_service_spec.rb3
-rw-r--r--spec/services/create_deployment_service_spec.rb16
-rw-r--r--spec/services/git_push_service_spec.rb14
-rw-r--r--spec/services/issues/bulk_update_service_spec.rb38
-rw-r--r--spec/services/merge_requests/refresh_service_spec.rb3
-rw-r--r--spec/services/todo_service_spec.rb53
-rw-r--r--spec/support/fake_u2f_device.rb4
-rw-r--r--spec/support/test_env.rb4
-rw-r--r--spec/views/projects/builds/show.html.haml_spec.rb19
-rw-r--r--spec/workers/git_garbage_collect_worker_spec.rb5
257 files changed, 15369 insertions, 9690 deletions
diff --git a/.rubocop.yml b/.rubocop.yml
index 3aac8401848..db0bcfadcf4 100644
--- a/.rubocop.yml
+++ b/.rubocop.yml
@@ -2,6 +2,8 @@ require:
- rubocop-rspec
- ./rubocop/rubocop
+inherit_from: .rubocop_todo.yml
+
AllCops:
TargetRubyVersion: 2.1
# Cop names are not displayed in offense messages by default. Change behavior
@@ -52,14 +54,6 @@ Style/AlignArray:
Style/AlignHash:
Enabled: true
-# Align the parameters of a method call if they span more than one line.
-Style/AlignParameters:
- Enabled: false
-
-# Use &&/|| instead of and/or.
-Style/AndOr:
- Enabled: false
-
# Use `Array#join` instead of `Array#*`.
Style/ArrayJoin:
Enabled: true
@@ -80,10 +74,6 @@ Style/Attr:
Style/BeginBlock:
Enabled: true
-# Checks if usage of %() or %Q() matches configuration.
-Style/BarePercentLiterals:
- Enabled: false
-
# Do not use block comments.
Style/BlockComments:
Enabled: true
@@ -97,14 +87,6 @@ Style/BlockEndNewline:
Style/BlockDelimiters:
Enabled: true
-# Enforce braces style around hash parameters.
-Style/BracesAroundHashParameters:
- Enabled: false
-
-# Avoid explicit use of the case equality operator(===).
-Style/CaseEquality:
- Enabled: false
-
# Indentation of when in a case/when/[else/]end.
Style/CaseIndentation:
Enabled: true
@@ -133,24 +115,10 @@ Style/ClassMethods:
Style/ClassVars:
Enabled: true
-# Do not use :: for method call.
-Style/ColonMethodCall:
- Enabled: false
-
-# Checks formatting of special comments (TODO, FIXME, OPTIMIZE, HACK, REVIEW).
-Style/CommentAnnotation:
- Enabled: false
-
# Indentation of comments.
Style/CommentIndentation:
Enabled: true
-# Use the return value of `if` and `case` statements for assignment to a
-# variable and variable comparison instead of assigning that variable
-# inside of each branch.
-Style/ConditionalAssignment:
- Enabled: false
-
# Constants should use SCREAMING_SNAKE_CASE.
Style/ConstantName:
Enabled: true
@@ -159,34 +127,14 @@ Style/ConstantName:
Style/DefWithParentheses:
Enabled: true
-# Checks for use of deprecated Hash methods.
-Style/DeprecatedHashMethods:
- Enabled: false
-
# Document classes and non-namespace modules.
Style/Documentation:
Enabled: false
-# Checks the position of the dot in multi-line method calls.
-Style/DotPosition:
- Enabled: false
-
-# Checks for uses of double negation (!!).
-Style/DoubleNegation:
- Enabled: false
-
-# Prefer `each_with_object` over `inject` or `reduce`.
-Style/EachWithObject:
- Enabled: false
-
# Align elses and elsifs correctly.
Style/ElseAlignment:
Enabled: true
-# Avoid empty else-clauses.
-Style/EmptyElse:
- Enabled: false
-
# Use empty lines between defs.
Style/EmptyLineBetweenDefs:
Enabled: false
@@ -215,10 +163,6 @@ Style/EmptyLinesAroundModuleBody:
Style/EmptyLinesAroundMethodBody:
Enabled: false
-# Prefer literals to Array.new/Hash.new/String.new.
-Style/EmptyLiteral:
- Enabled: false
-
# Avoid the use of END blocks.
Style/EndBlock:
Enabled: true
@@ -231,10 +175,6 @@ Style/EndOfLine:
Style/EvenOdd:
Enabled: true
-# Do not use unnecessary spacing.
-Style/ExtraSpacing:
- Enabled: false
-
# Use snake_case for source file names.
Style/FileName:
Enabled: true
@@ -252,31 +192,15 @@ Style/FlipFlop:
Style/For:
Enabled: true
-# Enforce the use of Kernel#sprintf, Kernel#format or String#%.
-Style/FormatString:
- Enabled: false
-
# Do not introduce global variables.
Style/GlobalVars:
Enabled: true
-# Check for conditionals that can be replaced with guard clauses.
-Style/GuardClause:
- Enabled: false
-
# Prefer Ruby 1.9 hash syntax `{ a: 1, b: 2 }`
# over 1.8 syntax `{ :a => 1, :b => 2 }`.
Style/HashSyntax:
Enabled: true
-# Finds if nodes inside else, which can be converted to elsif.
-Style/IfInsideElse:
- Enabled: false
-
-# Favor modifier if/unless usage when you have a single-line body.
-Style/IfUnlessModifier:
- Enabled: false
-
# Do not use if x; .... Use the ternary operator instead.
Style/IfWithSemicolon:
Enabled: true
@@ -299,22 +223,10 @@ Style/IndentationConsistency:
Style/IndentationWidth:
Enabled: true
-# Checks the indentation of the first element in an array literal.
-Style/IndentArray:
- Enabled: false
-
-# Checks the indentation of the first key in a hash literal.
-Style/IndentHash:
- Enabled: false
-
# Use Kernel#loop for infinite loops.
Style/InfiniteLoop:
Enabled: true
-# Use the new lambda literal syntax for single-line blocks.
-Style/Lambda:
- Enabled: false
-
# Use lambda.call(...) instead of lambda.(...).
Style/LambdaCall:
Enabled: true
@@ -323,14 +235,6 @@ Style/LambdaCall:
Style/LeadingCommentSpace:
Enabled: true
-# Use \ instead of + or << to concatenate two string literals at line end.
-Style/LineEndConcatenation:
- Enabled: false
-
-# Do not use parentheses for method calls with no arguments.
-Style/MethodCallParentheses:
- Enabled: false
-
# Checks if the method definitions have or don't have parentheses.
Style/MethodDefParentheses:
Enabled: true
@@ -387,39 +291,18 @@ Style/MultilineMethodDefinitionBraceLayout:
Style/MultilineOperationIndentation:
Enabled: false
-# Avoid multi-line `? :` (the ternary operator), use if/unless instead.
-Style/MultilineTernaryOperator:
- Enabled: false
-
-# Do not assign mutable objects to constants.
-Style/MutableConstant:
- Enabled: false
-
# Favor unless over if for negative conditions (or control flow or).
Style/NegatedIf:
Enabled: true
-# Favor until over while for negative conditions.
-Style/NegatedWhile:
- Enabled: false
-
# Avoid using nested modifiers.
Style/NestedModifier:
Enabled: true
-# Parenthesize method calls which are nested inside the argument list of
-# another parenthesized method call.
-Style/NestedParenthesizedCalls:
- Enabled: false
-
# Use one expression per branch in a ternary operator.
Style/NestedTernaryOperator:
Enabled: true
-# Use `next` to skip iteration instead of a condition at the end.
-Style/Next:
- Enabled: false
-
# Prefer x.nil? to x == nil.
Style/NilComparison:
Enabled: true
@@ -444,51 +327,10 @@ Style/OneLineConditional:
Style/OpMethod:
Enabled: true
-# Check for simple usages of parallel assignment. It will only warn when
-# the number of variables matches on both sides of the assignment.
-Style/ParallelAssignment:
- Enabled: false
-
# Don't use parentheses around the condition of an if/unless/while.
Style/ParenthesesAroundCondition:
Enabled: true
-# Use `%`-literal delimiters consistently.
-Style/PercentLiteralDelimiters:
- Enabled: false
-
-# Checks if uses of %Q/%q match the configured preference.
-Style/PercentQLiterals:
- Enabled: false
-
-# Avoid Perl-style regex back references.
-Style/PerlBackrefs:
- Enabled: false
-
-# Check the names of predicate methods.
-Style/PredicateName:
- Enabled: false
-
-# Use proc instead of Proc.new.
-Style/Proc:
- Enabled: false
-
-# Checks the arguments passed to raise/fail.
-Style/RaiseArgs:
- Enabled: false
-
-# Don't use begin blocks when they are not needed.
-Style/RedundantBegin:
- Enabled: false
-
-# Checks for an obsolete RuntimeException argument in raise/fail.
-Style/RedundantException:
- Enabled: false
-
-# Checks usages of Object#freeze on immutable objects.
-Style/RedundantFreeze:
- Enabled: false
-
# Checks for parentheses that seem not to serve any purpose.
Style/RedundantParentheses:
Enabled: true
@@ -497,24 +339,6 @@ Style/RedundantParentheses:
Style/RedundantReturn:
Enabled: true
-# Don't use self where it's not needed.
-Style/RedundantSelf:
- Enabled: false
-
-# Use %r for regular expressions matching more than `MaxSlashes` '/'
-# characters. Use %r only for regular expressions matching more
-# than `MaxSlashes` '/' character.
-Style/RegexpLiteral:
- Enabled: false
-
-# Avoid using rescue in its modifier form.
-Style/RescueModifier:
- Enabled: false
-
-# Checks for places where self-assignment shorthand should have been used.
-Style/SelfAssignment:
- Enabled: false
-
# Don't use semicolons to terminate expressions.
Style/Semicolon:
Enabled: true
@@ -524,14 +348,6 @@ Style/SignalException:
EnforcedStyle: only_raise
Enabled: true
-# Enforces the names of some block params.
-Style/SingleLineBlockParams:
- Enabled: false
-
-# Avoid single-line methods.
-Style/SingleLineMethods:
- Enabled: false
-
# Use spaces after colons.
Style/SpaceAfterColon:
Enabled: true
@@ -553,11 +369,6 @@ Style/SpaceAfterNot:
Style/SpaceAfterSemicolon:
Enabled: true
-# Checks that the equals signs in parameter default assignments have or don't
-# have surrounding space depending on configuration.
-Style/SpaceAroundEqualsInParameterDefault:
- Enabled: false
-
# Use a space around keywords if appropriate.
Style/SpaceAroundKeyword:
Enabled: true
@@ -566,10 +377,6 @@ Style/SpaceAroundKeyword:
Style/SpaceAroundOperators:
Enabled: true
-# Checks that the left block brace has or doesn't have space before it.
-Style/SpaceBeforeBlockBraces:
- Enabled: false
-
# No spaces before commas.
Style/SpaceBeforeComma:
Enabled: true
@@ -578,33 +385,14 @@ Style/SpaceBeforeComma:
Style/SpaceBeforeComment:
Enabled: true
-# Checks that exactly one space is used between a method name and the first
-# argument for method calls without parentheses.
-Style/SpaceBeforeFirstArg:
- Enabled: false
-
# No spaces before semicolons.
Style/SpaceBeforeSemicolon:
Enabled: true
-# Checks that block braces have or don't have surrounding space.
-# For blocks taking parameters, checks that the left brace has or doesn't
-# have trailing space.
-Style/SpaceInsideBlockBraces:
- Enabled: false
-
-# No spaces after [ or before ].
-Style/SpaceInsideBrackets:
- Enabled: false
-
# Use spaces inside hash literal braces - or don't.
Style/SpaceInsideHashLiteralBraces:
Enabled: true
-# No spaces after ( or before ).
-Style/SpaceInsideParens:
- Enabled: false
-
# No spaces inside range literals.
Style/SpaceInsideRangeLiteral:
Enabled: true
@@ -614,10 +402,6 @@ Style/SpaceInsideStringInterpolation:
EnforcedStyle: no_space
Enabled: true
-# Avoid Perl-style global variables.
-Style/SpecialGlobalVars:
- Enabled: false
-
# Check for the usage of parentheses around stabby lambda arguments.
Style/StabbyLambdaParentheses:
EnforcedStyle: require_parentheses
@@ -627,25 +411,12 @@ Style/StabbyLambdaParentheses:
Style/StringLiterals:
Enabled: false
-# Checks if uses of quotes inside expressions in interpolated strings match the
-# configured preference.
-Style/StringLiteralsInInterpolation:
- Enabled: false
-
# Checks if configured preferred methods are used over non-preferred.
Style/StringMethods:
PreferredMethods:
intern: to_sym
Enabled: true
-# Use %i or %I for arrays of symbols.
-Style/SymbolArray:
- Enabled: false
-
-# Use symbols as procs instead of blocks when possible.
-Style/SymbolProc:
- Enabled: false
-
# No hard tabs.
Style/Tab:
Enabled: true
@@ -654,40 +425,10 @@ Style/Tab:
Style/TrailingBlankLines:
Enabled: true
-# Checks for trailing comma in array and hash literals.
-Style/TrailingCommaInLiteral:
- Enabled: false
-
-# Checks for trailing comma in argument lists.
-Style/TrailingCommaInArguments:
- Enabled: false
-
-# Avoid trailing whitespace.
-Style/TrailingWhitespace:
- Enabled: false
-
-# Checks for the usage of unneeded trailing underscores at the end of
-# parallel variable assignment.
-Style/TrailingUnderscoreVariable:
- Enabled: false
-
-# Prefer attr_* methods to trivial readers/writers.
-Style/TrivialAccessors:
- Enabled: false
-
-# Do not use unless with else. Rewrite these with the positive case first.
-Style/UnlessElse:
- Enabled: false
-
# Checks for %W when interpolation is not needed.
Style/UnneededCapitalW:
Enabled: true
-# TODO: Enable UnneededInterpolation Cop.
-# Checks for strings that are just an interpolated expression.
-Style/UnneededInterpolation:
- Enabled: false
-
# Checks for %q/%Q when single quotes or double quotes would do.
Style/UnneededPercentQ:
Enabled: false
@@ -717,12 +458,6 @@ Style/WhileUntilModifier:
Style/WordArray:
Enabled: false
-# TODO: Enable ZeroLengthPredicate Cop.
-# Use #empty? when testing for objects of length 0.
-Style/ZeroLengthPredicate:
- Enabled: false
-
-
#################### Metrics ################################
# A calculated magnitude based on number of assignments,
@@ -776,15 +511,6 @@ Metrics/PerceivedComplexity:
Lint/AmbiguousOperator:
Enabled: true
-# Checks for ambiguous regexp literals in the first argument of a method
-# invocation without parentheses.
-Lint/AmbiguousRegexpLiteral:
- Enabled: false
-
-# Don't use assignment in conditions.
-Lint/AssignmentInCondition:
- Enabled: false
-
# Align block ends correctly.
Lint/BlockAlignment:
Enabled: true
@@ -810,14 +536,6 @@ Lint/DefEndAlignment:
Lint/DeprecatedClassMethods:
Enabled: true
-# Check for duplicate method definitions.
-Lint/DuplicateMethods:
- Enabled: false
-
-# Check for duplicate keys in hash literals.
-Lint/DuplicatedKey:
- Enabled: false
-
# Check for immutable argument given to each_with_object.
Lint/EachWithObjectArgument:
Enabled: true
@@ -830,10 +548,6 @@ Lint/ElseLayout:
Lint/EmptyEnsure:
Enabled: true
-# Checks for empty string interpolation.
-Lint/EmptyInterpolation:
- Enabled: false
-
# Align ends correctly.
Lint/EndAlignment:
Enabled: true
@@ -858,21 +572,11 @@ Lint/FloatOutOfRange:
Lint/FormatParameterMismatch:
Enabled: true
-# Don't suppress exception.
-Lint/HandleExceptions:
- Enabled: false
-
# Checks for adjacent string literals on the same line, which could better be
# represented as a single string literal.
Lint/ImplicitStringConcatenation:
Enabled: true
-# TODO: Enable IneffectiveAccessModifier Cop.
-# Checks for attempts to use `private` or `protected` to set the visibility
-# of a class method, which does not work.
-Lint/IneffectiveAccessModifier:
- Enabled: false
-
# Checks for invalid character literals with a non-escaped whitespace
# character.
Lint/InvalidCharacterLiteral:
@@ -886,11 +590,6 @@ Lint/LiteralInCondition:
Lint/LiteralInInterpolation:
Enabled: true
-# Use Kernel#loop with break rather than begin/end/until or begin/end/while
-# for post-loop tests.
-Lint/Loop:
- Enabled: false
-
# Do not use nested method definitions.
Lint/NestedMethodDefinition:
Enabled: true
@@ -916,13 +615,8 @@ Lint/RequireParentheses:
Lint/RescueException:
Enabled: true
-# Do not use the same name as outer local variable for block arguments
-# or block local variables.
-Lint/ShadowingOuterLocalVariable:
- Enabled: false
-
-# 'Checks for Object#to_s usage in string interpolation.
-Lint/StringConversionInInterpolation:
+# Checks for the order which exceptions are rescued to avoid rescueing a less specific exception before a more specific exception.
+Lint/ShadowedException:
Enabled: false
# Do not use prefix `_` for a variable that is used.
@@ -935,22 +629,10 @@ Lint/UnderscorePrefixedVariableName:
Lint/UnneededDisable:
Enabled: false
-# Checks for unused block arguments.
-Lint/UnusedBlockArgument:
- Enabled: false
-
-# Checks for unused method arguments.
-Lint/UnusedMethodArgument:
- Enabled: false
-
# Unreachable code.
Lint/UnreachableCode:
Enabled: true
-# Checks for useless access modifiers.
-Lint/UselessAccessModifier:
- Enabled: false
-
# Checks for useless assignment to a local variable.
Lint/UselessAssignment:
Enabled: true
@@ -983,11 +665,6 @@ Performance/Casecmp:
Performance/DoubleStartEndWith:
Enabled: true
-# TODO: Enable EndWith Cop.
-# Use `end_with?` instead of a regex match anchored to the end of a string.
-Performance/EndWith:
- Enabled: false
-
# Use `strip` instead of `lstrip.rstrip`.
Performance/LstripRstrip:
Enabled: true
@@ -996,24 +673,6 @@ Performance/LstripRstrip:
Performance/RangeInclude:
Enabled: true
-# TODO: Enable RedundantBlockCall Cop.
-# Use `yield` instead of `block.call`.
-Performance/RedundantBlockCall:
- Enabled: false
-
-# TODO: Enable RedundantMatch Cop.
-# Use `=~` instead of `String#match` or `Regexp#match` in a context where the
-# returned `MatchData` is not needed.
-Performance/RedundantMatch:
- Enabled: false
-
-# TODO: Enable RedundantMerge Cop.
-# Use `Hash#[]=`, rather than `Hash#merge!` with a single key-value pair.
-Performance/RedundantMerge:
- # Max number of key-value pairs to consider an offense
- MaxKeyValuePairs: 2
- Enabled: false
-
# Use `sort` instead of `sort_by { |x| x }`.
Performance/RedundantSortBy:
Enabled: true
@@ -1082,18 +741,6 @@ Rails/ReadWriteAttribute:
Rails/ScopeArgs:
Enabled: true
-# Checks the correct usage of time zone aware methods.
-# http://danilenko.org/2012/7/6/rails_timezones
-Rails/TimeZone:
- Enabled: false
-
-# Use validates :attribute, hash of validations.
-Rails/Validation:
- Enabled: false
-
-Rails/UniqBeforePluck:
- Enabled: false
-
##################### RSpec ##################################
# Check that instances are not being stubbed globally.
diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml
new file mode 100644
index 00000000000..9310e711889
--- /dev/null
+++ b/.rubocop_todo.yml
@@ -0,0 +1,462 @@
+# This configuration was generated by
+# `rubocop --auto-gen-config --exclude-limit 0`
+# on 2016-07-13 12:36:08 -0600 using RuboCop version 0.41.2.
+# The point is for the user to remove these configuration records
+# one by one as the offenses are removed from the code base.
+# Note that changes in the inspected code, or installation of new
+# versions of RuboCop, may require this file to be generated again.
+
+# Offense count: 154
+Lint/AmbiguousRegexpLiteral:
+ Enabled: false
+
+# Offense count: 43
+# Configuration parameters: AllowSafeAssignment.
+Lint/AssignmentInCondition:
+ Enabled: false
+
+# Offense count: 14
+Lint/HandleExceptions:
+ Enabled: false
+
+# Offense count: 21
+Lint/IneffectiveAccessModifier:
+ Enabled: false
+
+# Offense count: 2
+Lint/Loop:
+ Enabled: false
+
+# Offense count: 15
+Lint/ShadowingOuterLocalVariable:
+ Enabled: false
+
+# Offense count: 3
+# Cop supports --auto-correct.
+Lint/StringConversionInInterpolation:
+ Enabled: false
+
+# Offense count: 44
+# Cop supports --auto-correct.
+# Configuration parameters: IgnoreEmptyBlocks, AllowUnusedKeywordArguments.
+Lint/UnusedBlockArgument:
+ Enabled: false
+
+# Offense count: 129
+# Cop supports --auto-correct.
+# Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
+Lint/UnusedMethodArgument:
+ Enabled: false
+
+# Offense count: 11
+Lint/UselessAccessModifier:
+ Enabled: false
+
+# Offense count: 12
+# Cop supports --auto-correct.
+Performance/PushSplat:
+ Enabled: false
+
+# Offense count: 2
+# Cop supports --auto-correct.
+Performance/RedundantBlockCall:
+ Enabled: false
+
+# Offense count: 4
+# Cop supports --auto-correct.
+Performance/RedundantMatch:
+ Enabled: false
+
+# Offense count: 24
+# Cop supports --auto-correct.
+# Configuration parameters: MaxKeyValuePairs.
+Performance/RedundantMerge:
+ Enabled: false
+
+# Offense count: 60
+Rails/OutputSafety:
+ Enabled: false
+
+# Offense count: 128
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: strict, flexible
+Rails/TimeZone:
+ Enabled: false
+
+# Offense count: 12
+# Cop supports --auto-correct.
+# Configuration parameters: Include.
+# Include: app/models/**/*.rb
+Rails/Validation:
+ Enabled: false
+
+# Offense count: 217
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
+# SupportedStyles: with_first_parameter, with_fixed_indentation
+Style/AlignParameters:
+ Enabled: false
+
+# Offense count: 32
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: always, conditionals
+Style/AndOr:
+ Enabled: false
+
+# Offense count: 47
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: percent_q, bare_percent
+Style/BarePercentLiterals:
+ Enabled: false
+
+# Offense count: 258
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: braces, no_braces, context_dependent
+Style/BracesAroundHashParameters:
+ Enabled: false
+
+# Offense count: 5
+Style/CaseEquality:
+ Enabled: false
+
+# Offense count: 19
+# Cop supports --auto-correct.
+Style/ColonMethodCall:
+ Enabled: false
+
+# Offense count: 3
+# Cop supports --auto-correct.
+# Configuration parameters: Keywords.
+# Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW
+Style/CommentAnnotation:
+ Enabled: false
+
+# Offense count: 34
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, SingleLineConditionsOnly.
+# SupportedStyles: assign_to_condition, assign_inside_condition
+Style/ConditionalAssignment:
+ Enabled: false
+
+# Offense count: 789
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: leading, trailing
+Style/DotPosition:
+ Enabled: false
+
+# Offense count: 13
+Style/DoubleNegation:
+ Enabled: false
+
+# Offense count: 3
+Style/EachWithObject:
+ Enabled: false
+
+# Offense count: 30
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: empty, nil, both
+Style/EmptyElse:
+ Enabled: false
+
+# Offense count: 3
+# Cop supports --auto-correct.
+Style/EmptyLiteral:
+ Enabled: false
+
+# Offense count: 123
+# Cop supports --auto-correct.
+# Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
+Style/ExtraSpacing:
+ Enabled: false
+
+# Offense count: 7
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: format, sprintf, percent
+Style/FormatString:
+ Enabled: false
+
+# Offense count: 48
+# Configuration parameters: MinBodyLength.
+Style/GuardClause:
+ Enabled: false
+
+# Offense count: 11
+Style/IfInsideElse:
+ Enabled: false
+
+# Offense count: 177
+# Cop supports --auto-correct.
+# Configuration parameters: MaxLineLength.
+Style/IfUnlessModifier:
+ Enabled: false
+
+# Offense count: 52
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
+# SupportedStyles: special_inside_parentheses, consistent, align_brackets
+Style/IndentArray:
+ Enabled: false
+
+# Offense count: 89
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
+# SupportedStyles: special_inside_parentheses, consistent, align_braces
+Style/IndentHash:
+ Enabled: false
+
+# Offense count: 12
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: line_count_dependent, lambda, literal
+Style/Lambda:
+ Enabled: false
+
+# Offense count: 6
+# Cop supports --auto-correct.
+Style/LineEndConcatenation:
+ Enabled: false
+
+# Offense count: 13
+# Cop supports --auto-correct.
+Style/MethodCallParentheses:
+ Enabled: false
+
+# Offense count: 3
+Style/MultilineTernaryOperator:
+ Enabled: false
+
+# Offense count: 62
+# Cop supports --auto-correct.
+Style/MutableConstant:
+ Enabled: false
+
+# Offense count: 10
+# Cop supports --auto-correct.
+Style/NestedParenthesizedCalls:
+ Enabled: false
+
+# Offense count: 12
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, MinBodyLength, SupportedStyles.
+# SupportedStyles: skip_modifier_ifs, always
+Style/Next:
+ Enabled: false
+
+# Offense count: 8
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedOctalStyle, SupportedOctalStyles.
+# SupportedOctalStyles: zero_with_o, zero_only
+Style/NumericLiteralPrefix:
+ Enabled: false
+
+# Offense count: 29
+# Cop supports --auto-correct.
+Style/ParallelAssignment:
+ Enabled: false
+
+# Offense count: 208
+# Cop supports --auto-correct.
+# Configuration parameters: PreferredDelimiters.
+Style/PercentLiteralDelimiters:
+ Enabled: false
+
+# Offense count: 11
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: lower_case_q, upper_case_q
+Style/PercentQLiterals:
+ Enabled: false
+
+# Offense count: 13
+# Cop supports --auto-correct.
+Style/PerlBackrefs:
+ Enabled: false
+
+# Offense count: 32
+# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
+# NamePrefix: is_, has_, have_
+# NamePrefixBlacklist: is_, has_, have_
+# NameWhitelist: is_a?
+Style/PredicateName:
+ Enabled: false
+
+# Offense count: 28
+# Cop supports --auto-correct.
+Style/PreferredHashMethods:
+ Enabled: false
+
+# Offense count: 6
+# Cop supports --auto-correct.
+Style/Proc:
+ Enabled: false
+
+# Offense count: 20
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: compact, exploded
+Style/RaiseArgs:
+ Enabled: false
+
+# Offense count: 3
+# Cop supports --auto-correct.
+Style/RedundantBegin:
+ Enabled: false
+
+# Offense count: 1
+# Cop supports --auto-correct.
+Style/RedundantException:
+ Enabled: false
+
+# Offense count: 23
+# Cop supports --auto-correct.
+Style/RedundantFreeze:
+ Enabled: false
+
+# Offense count: 377
+# Cop supports --auto-correct.
+Style/RedundantSelf:
+ Enabled: false
+
+# Offense count: 94
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, AllowInnerSlashes.
+# SupportedStyles: slashes, percent_r, mixed
+Style/RegexpLiteral:
+ Enabled: false
+
+# Offense count: 17
+# Cop supports --auto-correct.
+Style/RescueModifier:
+ Enabled: false
+
+# Offense count: 2
+# Cop supports --auto-correct.
+Style/SelfAssignment:
+ Enabled: false
+
+# Offense count: 2
+# Configuration parameters: Methods.
+# Methods: {"reduce"=>["a", "e"]}, {"inject"=>["a", "e"]}
+Style/SingleLineBlockParams:
+ Enabled: false
+
+# Offense count: 50
+# Cop supports --auto-correct.
+# Configuration parameters: AllowIfMethodIsEmpty.
+Style/SingleLineMethods:
+ Enabled: false
+
+# Offense count: 14
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: space, no_space
+Style/SpaceAroundEqualsInParameterDefault:
+ Enabled: false
+
+# Offense count: 119
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: space, no_space
+Style/SpaceBeforeBlockBraces:
+ Enabled: false
+
+# Offense count: 11
+# Cop supports --auto-correct.
+# Configuration parameters: AllowForAlignment.
+Style/SpaceBeforeFirstArg:
+ Enabled: false
+
+# Offense count: 130
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles, EnforcedStyleForEmptyBraces, SpaceBeforeBlockParameters.
+# SupportedStyles: space, no_space
+Style/SpaceInsideBlockBraces:
+ Enabled: false
+
+# Offense count: 98
+# Cop supports --auto-correct.
+Style/SpaceInsideBrackets:
+ Enabled: false
+
+# Offense count: 60
+# Cop supports --auto-correct.
+Style/SpaceInsideParens:
+ Enabled: false
+
+# Offense count: 5
+# Cop supports --auto-correct.
+Style/SpaceInsidePercentLiteralDelimiters:
+ Enabled: false
+
+# Offense count: 36
+# Cop supports --auto-correct.
+# Configuration parameters: SupportedStyles.
+# SupportedStyles: use_perl_names, use_english_names
+Style/SpecialGlobalVars:
+ EnforcedStyle: use_perl_names
+
+# Offense count: 30
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyle, SupportedStyles.
+# SupportedStyles: single_quotes, double_quotes
+Style/StringLiteralsInInterpolation:
+ Enabled: false
+
+# Offense count: 24
+# Cop supports --auto-correct.
+# Configuration parameters: IgnoredMethods.
+# IgnoredMethods: respond_to, define_method
+Style/SymbolProc:
+ Enabled: false
+
+# Offense count: 23
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
+# SupportedStyles: comma, consistent_comma, no_comma
+Style/TrailingCommaInArguments:
+ Enabled: false
+
+# Offense count: 113
+# Cop supports --auto-correct.
+# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
+# SupportedStyles: comma, consistent_comma, no_comma
+Style/TrailingCommaInLiteral:
+ Enabled: false
+
+# Offense count: 7
+# Cop supports --auto-correct.
+# Configuration parameters: AllowNamedUnderscoreVariables.
+Style/TrailingUnderscoreVariable:
+ Enabled: false
+
+# Offense count: 90
+# Cop supports --auto-correct.
+Style/TrailingWhitespace:
+ Enabled: false
+
+# Offense count: 2
+# Cop supports --auto-correct.
+# Configuration parameters: ExactNameMatch, AllowPredicates, AllowDSLWriters, IgnoreClassMethods, Whitelist.
+# Whitelist: to_ary, to_a, to_c, to_enum, to_h, to_hash, to_i, to_int, to_io, to_open, to_path, to_proc, to_r, to_regexp, to_str, to_s, to_sym
+Style/TrivialAccessors:
+ Enabled: false
+
+# Offense count: 3
+# Cop supports --auto-correct.
+Style/UnlessElse:
+ Enabled: false
+
+# Offense count: 13
+# Cop supports --auto-correct.
+Style/UnneededInterpolation:
+ Enabled: false
+
+# Offense count: 8
+# Cop supports --auto-correct.
+Style/ZeroLengthPredicate:
+ Enabled: false
diff --git a/CHANGELOG b/CHANGELOG
index 19286abd74f..bf252612232 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,11 +1,15 @@
Please view this file on the master branch, on stable branches it's out of date.
+v 8.11.0 (unreleased)
+ - Fix of 'Commits being passed to custom hooks are already reachable when using the UI'
v 8.10.0 (unreleased)
+ - Fix profile activity heatmap to show correct day name (eanplatter)
- Expose {should,force}_remove_source_branch (Ben Boeckel)
+ - Disable PostgreSQL statement timeout during migrations
- Fix projects dropdown loading performance with a simplified api cal. !5113 (tiagonbotelho)
- Fix commit builds API, return all builds for all pipelines for given commit. !4849
- Replace Haml with Hamlit to make view rendering faster. !3666
- - Expire the branch cache after `git gc` runs
+ - Refresh the branch cache after `git gc` runs
- Refactor repository paths handling to allow multiple git mount points
- Optimize system note visibility checking by memoizing the visible reference count !5070
- Add Application Setting to configure default Repository Path for new projects
@@ -14,6 +18,8 @@ v 8.10.0 (unreleased)
- Wrap code blocks on Activies and Todos page. !4783 (winniehell)
- Align flash messages with left side of page content !4959 (winniehell)
- Display tooltip for "Copy to Clipboard" button !5164 (winniehell)
+ - Use default cursor for table header of project files !5165 (winniehell)
+ - Store when and yaml variables in builds table
- Display last commit of deleted branch in push events !4699 (winniehell)
- Escape file extension when parsing search results !5141 (winniehell)
- Apply the trusted_proxies config to the rack request object for use with rack_attack
@@ -21,17 +27,26 @@ v 8.10.0 (unreleased)
- Add Sidekiq queue duration to transaction metrics.
- Add a new column `artifacts_size` to table `ci_builds` !4964
- Let Workhorse serve format-patch diffs
+ - Display tooltip for mentioned users and groups !5261 (winniehell)
+ - Allow build email service to be tested
- Added day name to contribution calendar tooltips
- Make images fit to the size of the viewport !4810
- Fix check for New Branch button on Issue page !4630 (winniehell)
- Fix MR-auto-close text added to description. !4836
+ - Support U2F devices in Firefox. !5177
- Fix issue, preventing users w/o push access to sort tags !5105 (redetection)
- Add Spring EmojiOne updates.
+ - Added Rake task for tracking deployments !5320
+ - Fix fetching LFS objects for private CI projects
+ - Add the new 2016 Emoji! Adds 72 new emoji including bacon, facepalm, and selfie. !5237
- Add syntax for multiline blockquote using `>>>` fence !3954
- Fix viewing notification settings when a project is pending deletion
+ - Updated compare dropdown menus to use GL dropdown
+ - Eager load award emoji on notes
- Fix pagination when sorting by columns with lots of ties (like priority)
- The Markdown reference parsers now re-use query results to prevent running the same queries multiple times !5020
- Updated project header design
+ - Issuable collapsed assignee tooltip is now the users name
- Exclude email check from the standard health check
- Updated layout for Projects, Groups, Users on Admin area !4424
- Fix changing issue state columns in milestone view
@@ -40,20 +55,28 @@ v 8.10.0 (unreleased)
- Render inline diffs for multiple changed lines following eachother
- Wildcards for protected branches. !4665
- Allow importing from Github using Personal Access Tokens. (Eric K Idema)
+ - API: Expose `due_date` for issues (Robert Schilling)
- API: Todos !3188 (Robert Schilling)
- API: Expose shared groups for projects and shared projects for groups !5050 (Robert Schilling)
+ - API: Expose `developers_can_push` and `developers_can_merge` for branches !5208 (Robert Schilling)
- Add "Enabled Git access protocols" to Application Settings
- Diffs will create button/diff form on demand no on server side
- Reduce size of HTML used by diff comment forms
+ - Protected branches have a "Developers can Merge" setting. !4892 (original implementation by Mathias Vestergaard)
- Fix user creation with stronger minimum password requirements !4054 (nathan-pmt)
- Only show New Snippet button to users that can create snippets.
- PipelinesFinder uses git cache data
+ - Track a user who created a pipeline
- Actually render old and new sections of parallel diff next to each other
- Throttle the update of `project.pushes_since_gc` to 1 minute.
- Allow expanding and collapsing files in diff view (!4990)
- Collapse large diffs by default (!4990)
+ - Fix mentioned users list on diff notes
+ - Fix creation of deployment on build that is retried, redeployed or rollback
+ - Don't parse Rinku returned value to DocFragment when it didn't change the original html string.
- Check for conflicts with existing Project's wiki path when creating a new project.
- Show last push widget in upstream after push to fork
+ - Fix stage status shown for pipelines
- Cache todos pending/done dashboard query counts.
- Don't instantiate a git tree on Projects show default view
- Bump Rinku to 2.0.0
@@ -74,16 +97,19 @@ v 8.10.0 (unreleased)
- Add basic system information like memory and disk usage to the admin panel
- Don't garbage collect commits that have related DB records like comments
- More descriptive message for git hooks and file locks
+ - Aliases of award emoji should be stored as original name. !5060 (dixpac)
- Handle custom Git hook result in GitLab UI
+ - Allow to access Container Registry for Public and Internal projects
- Allow '?', or '&' for label names
+ - Support redirected blobs for Container Registry integration
- Fix importer for GitHub Pull Requests when a branch was reused across Pull Requests
- Add date when user joined the team on the member page
- Fix 404 redirect after validation fails importing a GitLab project
- - Fix 404 redirect after validation fails importing a GitLab project
- Added setting to set new users by default as external !4545 (Dravere)
- Add min value for project limit field on user's form !3622 (jastkand)
- Reset project pushes_since_gc when we enqueue the git gc call
- Add reminder to not paste private SSH keys !4399 (Ingo Blechschmidt)
+ - Collapsed diffs lines/size don't acumulate to overflow diffs.
- Remove duplicate `description` field in `MergeRequest` entities (Ben Boeckel)
- Style of import project buttons were fixed in the new project page. !5183 (rdemirbay)
- Fix GitHub client requests when rate limit is disabled
@@ -91,6 +117,17 @@ v 8.10.0 (unreleased)
- Redesign Builds and Pipelines pages
- Change status color and icon for running builds
- Fix markdown rendering for: consecutive labels references, label references that begin with a digit or contains `.`
+ - Project export filename now includes the project and namespace path
+ - Fix last update timestamp on issues not preserved on gitlab.com and project imports
+ - Fix issues importing projects from EE to CE
+ - Fix creating group with space in group path
+ - Improve cron_jobs loading error messages !5318
+ - Create Todos for Issue author when assign or mention himself (Katarzyna Kobierska)
+ - Limit the number of retries on error to 3 for exporting projects
+ - Allow empty repositories on project import/export
+ - Render only commit message title in builds (Katarzyna Kobierska Ula Budziszewska)
+ - Allow bulk (un)subscription from issues in issue index
+ - Fix MR diff encoding issues exporting GitLab projects
v 8.9.6
- Fix importing of events under notes for GitLab projects. !5154
@@ -99,8 +136,12 @@ v 8.9.6
- Fix broken migration in MySQL. !5005
- Overwrite Host and X-Forwarded-Host headers in NGINX !5213
- Keeps issue number when importing from Gitlab.com
+ - Add Pending tab for Builds (Katarzyna Kobierska, Urszula Budziszewska)
+
+v 8.9.7 (unreleased)
+ - Fix import_data wrongly saved as a result of an invalid import_url
-v 8.9.6 (unreleased)
+v 8.9.6
- Fix importing of events under notes for GitLab projects
v 8.9.5
@@ -262,6 +303,7 @@ v 8.9.0
- Add rake task 'gitlab:db:configure' for conditionally seeding or migrating the database
- Changed the Slack build message to use the singular duration if necessary (Aran Koning)
- Fix race condition on merge when build succeeds
+ - Added shortcut to focus filter search fields and added documentation #18120
- Links from a wiki page to other wiki pages should be rewritten as expected
- Add option to project to only allow merge requests to be merged if the build succeeds (Rui Santos)
- Added navigation shortcuts to the project pipelines, milestones, builds and forks page. !4393
@@ -2223,8 +2265,6 @@ v 7.7.0
- Fixes for edit comments: drag-n-drop images, preview mode, selecting images, save & update
- Remove password strength indicator
-
-
v 7.6.0
- Fork repository to groups
- New rugged version
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f4472214778..14ff05c9aa3 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -145,7 +145,8 @@ might be edited to make them small and simple.
You are encouraged to use the template below for feature proposals.
```
-## Description including problem, use cases, benefits, and/or goals
+## Description
+Include problem, use cases, benefits, and/or goals
## Proposal
diff --git a/Gemfile b/Gemfile
index ee23f712f05..c5df68839d5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -52,7 +52,7 @@ gem 'browser', '~> 2.2'
# Extracting information from a git repository
# Provide access to Gitlab::Git library
-gem 'gitlab_git', '~> 10.2'
+gem 'gitlab_git', '~> 10.3.2'
# LDAP Auth
# GitLab fork with several improvements to original library. For full list of changes
@@ -61,7 +61,7 @@ gem 'gitlab_omniauth-ldap', '~> 1.2.1', require: 'omniauth-ldap'
# Git Wiki
# Required manually in config/initializers/gollum.rb to control load order
-gem 'gollum-lib', '~> 4.1.0', require: false
+gem 'gollum-lib', '~> 4.2', require: false
gem 'gollum-rugged_adapter', '~> 0.4.2', require: false
# Language detection
@@ -105,7 +105,7 @@ gem 'seed-fu', '~> 2.3.5'
# Markdown and HTML processing
gem 'html-pipeline', '~> 1.11.0'
gem 'task_list', '~> 1.0.2', require: 'task_list/railtie'
-gem 'github-markup', '~> 1.3.1'
+gem 'github-markup', '~> 1.4'
gem 'redcarpet', '~> 3.3.3'
gem 'RedCloth', '~> 4.3.2'
gem 'rdoc', '~>3.6'
@@ -113,7 +113,7 @@ gem 'org-ruby', '~> 0.9.12'
gem 'creole', '~> 0.5.0'
gem 'wikicloth', '0.8.1'
gem 'asciidoctor', '~> 1.5.2'
-gem 'rouge', '~> 1.11'
+gem 'rouge', '~> 2.0'
# See https://groups.google.com/forum/#!topic/ruby-security-ann/aSbgDiwb24s
# and https://groups.google.com/forum/#!topic/ruby-security-ann/Dy7YiKb_pMM
@@ -223,7 +223,7 @@ gem 'jquery-turbolinks', '~> 2.1.0'
gem 'addressable', '~> 2.3.8'
gem 'bootstrap-sass', '~> 3.3.0'
gem 'font-awesome-rails', '~> 4.6.1'
-gem 'gemojione', '~> 2.6'
+gem 'gemojione', '~> 3.0'
gem 'gon', '~> 6.0.1'
gem 'jquery-atwho-rails', '~> 1.3.2'
gem 'jquery-rails', '~> 4.1.0'
@@ -299,7 +299,7 @@ group :development, :test do
gem 'spring-commands-spinach', '~> 1.1.0'
gem 'spring-commands-teaspoon', '~> 0.0.2'
- gem 'rubocop', '~> 0.40.0', require: false
+ gem 'rubocop', '~> 0.41.2', require: false
gem 'rubocop-rspec', '~> 1.5.0', require: false
gem 'scss_lint', '~> 0.47.0', require: false
gem 'simplecov', '~> 0.11.0', require: false
@@ -349,3 +349,6 @@ gem 'health_check', '~> 2.1.0'
# System information
gem 'vmstat', '~> 2.1.0'
gem 'sys-filesystem', '~> 1.1.6'
+
+# Secure headers for Content Security Policy
+gem 'secure_headers', '~> 3.3'
diff --git a/Gemfile.lock b/Gemfile.lock
index 67c0645c3d9..4bb7a8d0604 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -58,7 +58,7 @@ GEM
faraday_middleware-multi_json (~> 0.0)
oauth2 (~> 1.0)
asciidoctor (1.5.3)
- ast (2.2.0)
+ ast (2.3.0)
attr_encrypted (3.0.1)
encryptor (~> 3.0.0)
attr_required (1.0.0)
@@ -255,7 +255,7 @@ GEM
ruby-progressbar (~> 1.4)
gemnasium-gitlab-service (0.2.6)
rugged (~> 0.21)
- gemojione (2.6.1)
+ gemojione (3.0.1)
json
get_process_mem (0.2.0)
gherkin-ruby (0.3.2)
@@ -264,7 +264,7 @@ GEM
escape_utils (~> 1.1.0)
mime-types (>= 1.19)
rugged (>= 0.23.0b)
- github-markup (1.3.3)
+ github-markup (1.4.0)
gitlab-flowdock-git-hook (1.0.1)
flowdock (~> 0.7)
gitlab-grit (>= 2.4.1)
@@ -274,7 +274,7 @@ GEM
diff-lcs (~> 1.1)
mime-types (>= 1.16, < 3)
posix-spawn (~> 0.3)
- gitlab_git (10.2.3)
+ gitlab_git (10.3.2)
activesupport (~> 4.0)
charlock_holmes (~> 0.7.3)
github-linguist (~> 4.7.0)
@@ -287,13 +287,13 @@ GEM
rubyntlm (~> 0.3)
globalid (0.3.6)
activesupport (>= 4.1.0)
- gollum-grit_adapter (1.0.0)
+ gollum-grit_adapter (1.0.1)
gitlab-grit (~> 2.7, >= 2.7.1)
- gollum-lib (4.1.0)
- github-markup (~> 1.3.3)
+ gollum-lib (4.2.1)
+ github-markup (~> 1.4.0)
gollum-grit_adapter (~> 1.0)
nokogiri (~> 1.6.4)
- rouge (~> 1.9)
+ rouge (~> 2.0)
sanitize (~> 2.1.0)
stringex (~> 2.5.1)
gollum-rugged_adapter (0.4.2)
@@ -473,7 +473,7 @@ GEM
orm_adapter (0.5.0)
paranoia (2.1.4)
activerecord (~> 4.0)
- parser (2.3.1.0)
+ parser (2.3.1.2)
ast (~> 2.2)
pg (0.18.4)
pkg-config (1.1.7)
@@ -578,7 +578,7 @@ GEM
railties (>= 4.2.0, < 5.1)
rinku (2.0.0)
rotp (2.1.2)
- rouge (1.11.0)
+ rouge (2.0.3)
rqrcode (0.7.0)
chunky_png
rqrcode-rails3 (0.1.7)
@@ -606,8 +606,8 @@ GEM
rspec-retry (0.4.5)
rspec-core
rspec-support (3.5.0)
- rubocop (0.40.0)
- parser (>= 2.3.1.0, < 3.0)
+ rubocop (0.41.2)
+ parser (>= 2.3.1.1, < 3.0)
powerpack (~> 0.1)
rainbow (>= 1.99.1, < 3.0)
ruby-progressbar (~> 1.7)
@@ -645,6 +645,8 @@ GEM
sdoc (0.3.20)
json (>= 1.1.3)
rdoc (~> 3.10)
+ secure_headers (3.3.2)
+ useragent
seed-fu (2.3.6)
activerecord (>= 3.1)
activesupport (>= 3.1)
@@ -758,7 +760,7 @@ GEM
unf (0.1.4)
unf_ext
unf_ext (0.0.7.2)
- unicode-display_width (1.0.5)
+ unicode-display_width (1.1.0)
unicorn (4.9.0)
kgio (~> 2.6)
rack
@@ -767,6 +769,7 @@ GEM
get_process_mem (~> 0)
unicorn (>= 4, < 6)
uniform_notifier (1.9.0)
+ useragent (0.16.7)
uuid (2.3.8)
macaddr (~> 1.0)
version_sorter (2.0.0)
@@ -857,14 +860,14 @@ DEPENDENCIES
foreman (~> 0.78.0)
fuubar (~> 2.0.0)
gemnasium-gitlab-service (~> 0.2)
- gemojione (~> 2.6)
+ gemojione (~> 3.0)
github-linguist (~> 4.7.0)
- github-markup (~> 1.3.1)
+ github-markup (~> 1.4)
gitlab-flowdock-git-hook (~> 1.0.1)
- gitlab_git (~> 10.2)
+ gitlab_git (~> 10.3.2)
gitlab_meta (= 7.0)
gitlab_omniauth-ldap (~> 1.2.1)
- gollum-lib (~> 4.1.0)
+ gollum-lib (~> 4.2)
gollum-rugged_adapter (~> 0.4.2)
gon (~> 6.0.1)
grape (~> 0.13.0)
@@ -933,17 +936,18 @@ DEPENDENCIES
request_store (~> 1.3.0)
rerun (~> 0.11.0)
responders (~> 2.0)
- rouge (~> 1.11)
+ rouge (~> 2.0)
rqrcode-rails3 (~> 0.1.7)
rspec-rails (~> 3.5.0)
rspec-retry (~> 0.4.5)
- rubocop (~> 0.40.0)
+ rubocop (~> 0.41.2)
rubocop-rspec (~> 1.5.0)
ruby-fogbugz (~> 0.2.1)
sanitize (~> 2.0)
sass-rails (~> 5.0.0)
scss_lint (~> 0.47.0)
sdoc (~> 0.3.20)
+ secure_headers (~> 3.3)
seed-fu (~> 2.3.5)
select2-rails (~> 3.5.9)
sentry-raven (~> 1.1.0)
diff --git a/MAINTENANCE.md b/MAINTENANCE.md
index d3d36670693..1efb2a35f6d 100644
--- a/MAINTENANCE.md
+++ b/MAINTENANCE.md
@@ -1,15 +1,35 @@
# GitLab Maintenance Policy
-GitLab is a fast moving and evolving project. We currently don't have the resources to support many releases concurrently. We support exactly one stable release at any given time.
+GitLab follows the [Semantic Versioning](http://semver.org/) for its releases:
+`(Major).(Minor).(Patch)` in a [pragmatic way].
-GitLab follows the [Semantic Versioning](http://semver.org/) for its releases: `(Major).(Minor).(Patch)` in a [pragmatic way](https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e).
+- **Major version**: Whenever there is something significant or any backwards
+ incompatible changes are introduced to the public API.
+- **Minor version**: When new, backwards compatible functionality is introduced
+ to the public API or a minor feature is introduced, or when a set of smaller
+ features is rolled out.
+- **Patch number**: When backwards compatible bug fixes are introduced that fix
+ incorrect behavior.
-- **Major version**: Whenever there is something significant or any backwards incompatible changes are introduced to the public API.
-- **Minor version**: When new, backwards compatible functionality is introduced to the public API or a minor feature is introduced, or when a set of smaller features is rolled out.
-- **Patch number**: When backwards compatible bug fixes are introduced that fix incorrect behavior.
+The current stable release will receive security patches and bug fixes
+(eg. `8.9.0` -> `8.9.1`). Feature releases will mark the next supported stable
+release where the minor version is increased numerically by increments of one
+(eg. `8.9 -> 8.10`).
-The current stable release will receive security patches and bug fixes (eg. `5.0` -> `5.0.1`). Feature releases will mark the next supported stable release where the minor version is increased numerically by increments of one (eg. `5.0 -> 5.1`).
+Our current policy is to support one stable release at any given time, but for
+medium-level security issues, we may consider [backporting to the previous two
+monthly releases][rel-sec].
-We encourage everyone to run the latest stable release to ensure that you can easily upgrade to the most secure and feature rich GitLab experience. In order to make sure you can easily run the most recent stable release, we are working hard to keep the update process simple and reliable.
+We encourage everyone to run the latest stable release to ensure that you can
+easily upgrade to the most secure and feature-rich GitLab experience. In order
+to make sure you can easily run the most recent stable release, we are working
+hard to keep the update process simple and reliable.
-More information about the release procedures can be found in the doc/release directory.
+More information about the release procedures can be found in our
+[release-tools documentation][rel]. You may also want to read our
+[Responsible Disclosure Policy][disclosure].
+
+[rel-sec]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/security.md#backporting
+[rel]: https://gitlab.com/gitlab-org/release-tools/blob/master/doc/
+[disclosure]: https://about.gitlab.com/disclosure/
+[pragmatic way]: https://gist.github.com/jashkenas/cbd2b088e20279ae2c8e
diff --git a/app/assets/images/emoji.png b/app/assets/images/emoji.png
index 6bacb0e92b6..6f1a34a5591 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
index 99588b56616..dc9cae1d44c 100644
--- a/app/assets/images/emoji@2x.png
+++ b/app/assets/images/emoji@2x.png
Binary files differ
diff --git a/app/assets/javascripts/application.js.coffee b/app/assets/javascripts/application.js.coffee
index c98763d6271..eceff6d91d5 100644
--- a/app/assets/javascripts/application.js.coffee
+++ b/app/assets/javascripts/application.js.coffee
@@ -53,7 +53,6 @@
#= require_directory ./u2f
#= require_directory .
#= require fuzzaldrin-plus
-#= require u2f
window.slugify = (text) ->
text.replace(/[^-a-zA-Z0-9]+/g, '_').toLowerCase()
diff --git a/app/assets/javascripts/compare_autocomplete.js.coffee b/app/assets/javascripts/compare_autocomplete.js.coffee
new file mode 100644
index 00000000000..7ad9fd97637
--- /dev/null
+++ b/app/assets/javascripts/compare_autocomplete.js.coffee
@@ -0,0 +1,41 @@
+class @CompareAutocomplete
+ constructor: ->
+ @initDropdown()
+
+ initDropdown: ->
+ $('.js-compare-dropdown').each ->
+ $dropdown = $(@)
+ selected = $dropdown.data('selected')
+
+ $dropdown.glDropdown(
+ data: (term, callback) ->
+ $.ajax(
+ url: $dropdown.data('refs-url')
+ data:
+ ref: $dropdown.data('ref')
+ ).done (refs) ->
+ callback(refs)
+ selectable: true
+ filterable: true
+ filterByText: true
+ fieldName: $dropdown.attr('name')
+ filterInput: 'input[type="text"]'
+ renderRow: (ref) ->
+ if ref.header?
+ $('<li />')
+ .addClass('dropdown-header')
+ .text(ref.header)
+ else
+ link = $('<a />')
+ .attr('href', '#')
+ .addClass(if ref is selected then 'is-active' else '')
+ .text(ref)
+ .attr('data-ref', escape(ref))
+
+ $('<li />')
+ .append(link)
+ id: (obj, $el) ->
+ $el.attr('data-ref')
+ toggleLabel: (obj, $el) ->
+ $el.text().trim()
+ )
diff --git a/app/assets/javascripts/dispatcher.js.coffee b/app/assets/javascripts/dispatcher.js.coffee
index 74fd77cf7ab..afaa6407b05 100644
--- a/app/assets/javascripts/dispatcher.js.coffee
+++ b/app/assets/javascripts/dispatcher.js.coffee
@@ -137,6 +137,8 @@ class Dispatcher
new Project()
new ProjectAvatar()
switch path[1]
+ when 'compare'
+ new CompareAutocomplete()
when 'edit'
shortcut_handler = new ShortcutsNavigation()
new ProjectNew()
diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee
index 1c65e833d47..951530e03a5 100644
--- a/app/assets/javascripts/gl_dropdown.js.coffee
+++ b/app/assets/javascripts/gl_dropdown.js.coffee
@@ -250,6 +250,8 @@ class GitLabDropdown
if self.options.clicked
self.options.clicked(selected, $el, e)
+ $el.trigger('blur')
+
# Finds an element inside wrapper element
getElement: (selector) ->
@dropdown.find selector
@@ -456,6 +458,8 @@ class GitLabDropdown
rowClicked: (el) ->
fieldName = @options.fieldName
+ isInput = $(@el).is('input')
+
if @renderedData
groupName = el.data('group')
if groupName
@@ -466,10 +470,19 @@ class GitLabDropdown
selectedObject = @renderedData[selectedIndex]
value = if @options.id then @options.id(selectedObject, el) else selectedObject.id
- field = @dropdown.parent().find("input[name='#{fieldName}'][value='#{value}']")
+
+ if isInput
+ field = $(@el)
+ else
+ field = @dropdown.parent().find("input[name='#{fieldName}'][value='#{value}']")
+
if el.hasClass(ACTIVE_CLASS)
el.removeClass(ACTIVE_CLASS)
- field.remove()
+
+ if isInput
+ field.val('')
+ else
+ field.remove()
# Toggle the dropdown label
if @options.toggleLabel
@@ -490,7 +503,9 @@ class GitLabDropdown
else
if not @options.multiSelect or el.hasClass('dropdown-clear-active')
@dropdown.find(".#{ACTIVE_CLASS}").removeClass ACTIVE_CLASS
- @dropdown.parent().find("input[name='#{fieldName}']").remove()
+
+ unless isInput
+ @dropdown.parent().find("input[name='#{fieldName}']").remove()
if !value?
field.remove()
@@ -505,7 +520,9 @@ class GitLabDropdown
if !field.length and fieldName
@addInput(fieldName, value)
else
- field.val value
+ field
+ .val value
+ .trigger 'change'
return selectedObject
diff --git a/app/assets/javascripts/issuable.js.coffee b/app/assets/javascripts/issuable.js.coffee
index c71d4ecf505..7f795f8096b 100644
--- a/app/assets/javascripts/issuable.js.coffee
+++ b/app/assets/javascripts/issuable.js.coffee
@@ -32,13 +32,11 @@ issuable_created = false
$search = $('#issue_search')
$form = $('.js-filter-form')
$input = $("input[name='#{$search.attr('name')}']", $form)
-
if $input.length is 0
$form.append "<input type='hidden' name='#{$search.attr('name')}' value='#{_.escape($search.val())}'/>"
else
$input.val $search.val()
-
- Issuable.filterResults $form
+ Issuable.filterResults $form if $search.val() isnt ''
, 500)
initLabelFilterRemove: ->
diff --git a/app/assets/javascripts/issues-bulk-assignment.js.coffee b/app/assets/javascripts/issues-bulk-assignment.js.coffee
index 6b0e69dbae7..3d09ea08e3b 100644
--- a/app/assets/javascripts/issues-bulk-assignment.js.coffee
+++ b/app/assets/javascripts/issues-bulk-assignment.js.coffee
@@ -85,12 +85,13 @@ class @IssuableBulkActions
getFormDataAsObject: ->
formData =
update:
- state_event : @form.find('input[name="update[state_event]"]').val()
- assignee_id : @form.find('input[name="update[assignee_id]"]').val()
- milestone_id : @form.find('input[name="update[milestone_id]"]').val()
- issues_ids : @form.find('input[name="update[issues_ids]"]').val()
- add_label_ids : []
- remove_label_ids : []
+ state_event : @form.find('input[name="update[state_event]"]').val()
+ assignee_id : @form.find('input[name="update[assignee_id]"]').val()
+ milestone_id : @form.find('input[name="update[milestone_id]"]').val()
+ issues_ids : @form.find('input[name="update[issues_ids]"]').val()
+ subscription_event : @form.find('input[name="update[subscription_event]"]').val()
+ add_label_ids : []
+ remove_label_ids : []
if @willUpdateLabels
@getLabelsToApply().map (id) ->
diff --git a/app/assets/javascripts/lib/utils/datetime_utility.js.coffee b/app/assets/javascripts/lib/utils/datetime_utility.js.coffee
index 178963fe0aa..2371e913844 100644
--- a/app/assets/javascripts/lib/utils/datetime_utility.js.coffee
+++ b/app/assets/javascripts/lib/utils/datetime_utility.js.coffee
@@ -2,7 +2,7 @@
w.gl ?= {}
w.gl.utils ?= {}
- w.gl.utils.days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
+ w.gl.utils.days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
w.gl.utils.formatDate = (datetime) ->
dateFormat(datetime, 'mmm d, yyyy h:MMtt Z')
diff --git a/app/assets/javascripts/projects_list.js.coffee b/app/assets/javascripts/projects_list.js.coffee
index e4c4bf3b273..a7d78d9e461 100644
--- a/app/assets/javascripts/projects_list.js.coffee
+++ b/app/assets/javascripts/projects_list.js.coffee
@@ -5,13 +5,12 @@
this.initPagination()
initSearch: ->
- @timer = null
- $(".projects-list-filter").on('keyup', ->
- clearTimeout(@timer)
- @timer = setTimeout(ProjectsList.filterResults, 500)
- )
+ projectsListFilter = $('.projects-list-filter')
+ debounceFilter = _.debounce ProjectsList.filterResults, 500
+ projectsListFilter.on 'keyup', (e) ->
+ debounceFilter() if projectsListFilter.val() isnt ''
- filterResults: =>
+ filterResults: ->
$('.projects-list-holder').fadeTo(250, 0.5)
form = null
diff --git a/app/assets/javascripts/protected_branches.js.coffee b/app/assets/javascripts/protected_branches.js.coffee
index 79c2306e4d2..14afef2e2ee 100644
--- a/app/assets/javascripts/protected_branches.js.coffee
+++ b/app/assets/javascripts/protected_branches.js.coffee
@@ -1,18 +1,18 @@
$ ->
$(".protected-branches-list :checkbox").change (e) ->
name = $(this).attr("name")
- if name == "developers_can_push"
+ if name == "developers_can_push" || name == "developers_can_merge"
id = $(this).val()
- checked = $(this).is(":checked")
+ can_push = $(this).is(":checked")
url = $(this).data("url")
$.ajax
- type: "PUT"
+ type: "PATCH"
url: url
dataType: "json"
data:
id: id
protected_branch:
- developers_can_push: checked
+ "#{name}": can_push
success: ->
row = $(e.target)
diff --git a/app/assets/javascripts/shortcuts.js.coffee b/app/assets/javascripts/shortcuts.js.coffee
index 3319a67a79d..8c8689bacee 100644
--- a/app/assets/javascripts/shortcuts.js.coffee
+++ b/app/assets/javascripts/shortcuts.js.coffee
@@ -2,9 +2,10 @@ class @Shortcuts
constructor: (skipResetBindings) ->
@enabledHelp = []
Mousetrap.reset() if not skipResetBindings
- Mousetrap.bind('?', @onToggleHelp)
- Mousetrap.bind('s', Shortcuts.focusSearch)
- Mousetrap.bind(['ctrl+shift+p', 'command+shift+p'], @toggleMarkdownPreview)
+ Mousetrap.bind '?', @onToggleHelp
+ Mousetrap.bind 's', Shortcuts.focusSearch
+ Mousetrap.bind 'f', (e) => @focusFilter e
+ Mousetrap.bind ['ctrl+shift+p', 'command+shift+p'], @toggleMarkdownPreview
Mousetrap.bind('t', -> Turbolinks.visit(findFileURL)) if findFileURL?
onToggleHelp: (e) =>
@@ -32,10 +33,16 @@ class @Shortcuts
$('.js-more-help-button').remove()
)
+ focusFilter: (e) ->
+ @filterInput ?= $('input[type=search]', '.nav-controls')
+ @filterInput.focus()
+ e.preventDefault()
+
@focusSearch: (e) ->
$('#search').focus()
e.preventDefault()
+
$(document).on 'click.more_help', '.js-more-help-button', (e) ->
$(@).remove()
$('.hidden-shortcut').show()
diff --git a/app/assets/javascripts/subscription_select.js.coffee b/app/assets/javascripts/subscription_select.js.coffee
new file mode 100644
index 00000000000..e5eb7a50d80
--- /dev/null
+++ b/app/assets/javascripts/subscription_select.js.coffee
@@ -0,0 +1,18 @@
+class @SubscriptionSelect
+ constructor: ->
+ $('.js-subscription-event').each (i, el) ->
+ fieldName = $(el).data("field-name")
+
+ $(el).glDropdown(
+ selectable: true
+ fieldName: fieldName
+ toggleLabel: (selected, el, instance) =>
+ label = 'Subscription'
+ $item = instance.dropdown.find('.is-active')
+ label = $item.text() if $item.length
+ label
+ clicked: (item, $el, e)->
+ e.preventDefault()
+ id: (obj, el) ->
+ $(el).data("id")
+ )
diff --git a/app/assets/javascripts/u2f/authenticate.js.coffee b/app/assets/javascripts/u2f/authenticate.js.coffee
index 6deb902c8de..918c0a560fd 100644
--- a/app/assets/javascripts/u2f/authenticate.js.coffee
+++ b/app/assets/javascripts/u2f/authenticate.js.coffee
@@ -6,8 +6,20 @@
class @U2FAuthenticate
constructor: (@container, u2fParams) ->
@appId = u2fParams.app_id
- @challenges = u2fParams.challenges
- @signRequests = u2fParams.sign_requests
+ @challenge = u2fParams.challenge
+
+ # The U2F Javascript API v1.1 requires a single challenge, with
+ # _no challenges per-request_. The U2F Javascript API v1.0 requires a
+ # challenge per-request, which is done by copying the single challenge
+ # into every request.
+ #
+ # In either case, we don't need the per-request challenges that the server
+ # has generated, so we can remove them.
+ #
+ # Note: The server library fixes this behaviour in (unreleased) version 1.0.0.
+ # This can be removed once we upgrade.
+ # https://github.com/castle/ruby-u2f/commit/103f428071a81cd3d5f80c2e77d522d5029946a4
+ @signRequests = u2fParams.sign_requests.map (request) -> _(request).omit('challenge')
start: () =>
if U2FUtil.isU2FSupported()
@@ -16,7 +28,7 @@ class @U2FAuthenticate
@renderNotSupported()
authenticate: () =>
- u2f.sign(@appId, @challenges, @signRequests, (response) =>
+ u2f.sign(@appId, @challenge, @signRequests, (response) =>
if response.errorCode
error = new U2FError(response.errorCode)
@renderError(error);
diff --git a/app/assets/javascripts/u2f/util.js.coffee b/app/assets/javascripts/u2f/util.js.coffee
new file mode 100644
index 00000000000..5ef324f609d
--- /dev/null
+++ b/app/assets/javascripts/u2f/util.js.coffee
@@ -0,0 +1,3 @@
+class @U2FUtil
+ @isU2FSupported: ->
+ window.u2f
diff --git a/app/assets/javascripts/u2f/util.js.coffee.erb b/app/assets/javascripts/u2f/util.js.coffee.erb
deleted file mode 100644
index d59341c38b9..00000000000
--- a/app/assets/javascripts/u2f/util.js.coffee.erb
+++ /dev/null
@@ -1,15 +0,0 @@
-# Helper class for U2F (universal 2nd factor) device registration and authentication.
-
-class @U2FUtil
- @isU2FSupported: ->
- if @testMode
- true
- else
- gon.u2f.browser_supports_u2f
-
- @enableTestMode: ->
- @testMode = true
-
-<% if Rails.env.test? %>
-U2FUtil.enableTestMode();
-<% end %>
diff --git a/app/assets/javascripts/users_select.js.coffee b/app/assets/javascripts/users_select.js.coffee
index 4e032ab1ff1..344be811e0d 100644
--- a/app/assets/javascripts/users_select.js.coffee
+++ b/app/assets/javascripts/users_select.js.coffee
@@ -56,6 +56,11 @@ class @UsersSelect
username: ''
avatar: ''
$value.html(assigneeTemplate(user))
+
+ $collapsedSidebar
+ .attr('title', user.name)
+ .tooltip('fixTitle')
+
$collapsedSidebar.html(collapsedAssigneeTemplate(user))
@@ -63,7 +68,6 @@ class @UsersSelect
'<% if( avatar ) { %>
<a class="author_link" href="/u/<%- username %>">
<img width="24" class="avatar avatar-inline s24" alt="" src="<%- avatar %>">
- <span class="author">Toni Boehm</span>
</a>
<% } else { %>
<i class="fa fa-user"></i>
diff --git a/app/assets/stylesheets/framework/blank.scss b/app/assets/stylesheets/framework/blank.scss
index d28cda6d62d..540718197e0 100644
--- a/app/assets/stylesheets/framework/blank.scss
+++ b/app/assets/stylesheets/framework/blank.scss
@@ -20,9 +20,12 @@
.blank-state-icon {
padding-bottom: 20px;
+ color: $gray-darkest;
+ font-size: 56px;
- path {
- fill: $gray-darkest;
+ path,
+ polygon {
+ fill: currentColor;
}
}
@@ -37,6 +40,10 @@
margin-top: 0;
margin-bottom: $gl-padding;
font-size: 15px;
+
+ > strong {
+ font-weight: 600;
+ }
}
.blank-state-welcome-title {
diff --git a/app/assets/stylesheets/framework/blocks.scss b/app/assets/stylesheets/framework/blocks.scss
index 24b1ebab4b0..ad94e457cfd 100644
--- a/app/assets/stylesheets/framework/blocks.scss
+++ b/app/assets/stylesheets/framework/blocks.scss
@@ -16,8 +16,14 @@
font-weight: normal;
font-size: 16px;
line-height: 36px;
+
&.diff-collapsed {
+ padding: 5px;
cursor: pointer;
+
+ &:hover {
+ background-color: $row-hover;
+ }
}
}
diff --git a/app/assets/stylesheets/framework/common.scss b/app/assets/stylesheets/framework/common.scss
index f8aecd0558d..c1e5305644b 100644
--- a/app/assets/stylesheets/framework/common.scss
+++ b/app/assets/stylesheets/framework/common.scss
@@ -270,21 +270,6 @@ table {
}
}
-.dashboard-intro-icon {
- float: left;
- text-align: center;
- font-size: 32px;
- color: #aaa;
- width: 60px;
-}
-
-.dashboard-intro-text {
- display: inline-block;
- margin-left: -60px;
- padding-left: 60px;
- width: 100%;
-}
-
.btn-sign-in {
text-shadow: none;
diff --git a/app/assets/stylesheets/framework/files.scss b/app/assets/stylesheets/framework/files.scss
index 71e4b50f2af..407f1873431 100644
--- a/app/assets/stylesheets/framework/files.scss
+++ b/app/assets/stylesheets/framework/files.scss
@@ -70,7 +70,7 @@
}
&.wiki {
- padding: $gl-padding;
+ padding: 30px $gl-padding;
.highlight {
margin-bottom: 9px;
diff --git a/app/assets/stylesheets/framework/sidebar.scss b/app/assets/stylesheets/framework/sidebar.scss
index cec52678495..d52e8f00172 100644
--- a/app/assets/stylesheets/framework/sidebar.scss
+++ b/app/assets/stylesheets/framework/sidebar.scss
@@ -55,10 +55,6 @@
overflow-y: auto;
overflow-x: hidden;
- @media (min-width: $sidebar-breakpoint) {
- bottom: 50px;
- }
-
&.navbar-collapse {
padding: 0 !important;
}
@@ -76,7 +72,7 @@
}
a {
- padding: 7px 16px;
+ padding: 7px $gl-sidebar-padding;
font-size: $gl-font-size;
line-height: 24px;
display: block;
@@ -143,7 +139,7 @@
}
.nav-header-btn {
- padding: 10px 16px;
+ padding: 10px $gl-sidebar-padding;
color: inherit;
transition-duration: .3s;
position: absolute;
diff --git a/app/assets/stylesheets/framework/typography.scss b/app/assets/stylesheets/framework/typography.scss
index 3575984b229..8659604cb8b 100644
--- a/app/assets/stylesheets/framework/typography.scss
+++ b/app/assets/stylesheets/framework/typography.scss
@@ -37,39 +37,41 @@
}
h1 {
- font-size: 1.3em;
+ font-size: 2em;
font-weight: 600;
- margin: 24px 0 12px;
- padding: 0 0 10px;
- border-bottom: 1px solid #e7e9ed;
+ margin: 1em 0 10px;
+ padding: 0 0 0.3em;
+ border-bottom: 1px solid $btn-default-border;
color: $gl-gray-dark;
}
h2 {
- font-size: 1.2em;
+ font-size: 1.6em;
font-weight: 600;
- margin: 24px 0 12px;
+ margin: 1em 0 10px;
+ padding-bottom: 0.3em;
+ border-bottom: 1px solid $btn-default-border;
color: $gl-gray-dark;
}
h3 {
- margin: 24px 0 12px;
- font-size: 1.1em;
+ margin: 1em 0 10px;
+ font-size: 1.4em;
}
h4 {
- margin: 24px 0 12px;
- font-size: 0.98em;
+ margin: 1em 0 10px;
+ font-size: 1.25em;
}
h5 {
- margin: 24px 0 12px;
- font-size: 0.95em;
+ margin: 1em 0 10px;
+ font-size: 1em;
}
h6 {
- margin: 24px 0 12px;
- font-size: 0.90em;
+ margin: 1em 0 10px;
+ font-size: 0.95em;
}
blockquote {
@@ -115,7 +117,7 @@
ul, ol {
padding: 0;
- margin: 6px 0 6px 28px !important;
+ margin: 3px 0 3px 28px !important;
}
li {
diff --git a/app/assets/stylesheets/framework/variables.scss b/app/assets/stylesheets/framework/variables.scss
index 09d3caa0e6a..1882d4e888d 100644
--- a/app/assets/stylesheets/framework/variables.scss
+++ b/app/assets/stylesheets/framework/variables.scss
@@ -16,7 +16,7 @@ $border-color: #e5e5e5;
$focus-border-color: #3aabf0;
$table-border-color: #f0f0f0;
$background-color: #fafafa;
-$dark-background-color: #f7f7f7;
+$dark-background-color: #f5f5f5;
$table-text-gray: #8f8f8f;
/*
@@ -64,6 +64,7 @@ $gl-btn-padding: 10px;
$gl-input-padding: 10px;
$gl-vert-padding: 6px;
$gl-padding-top: 10px;
+$gl-sidebar-padding: 22px;
/*
* Misc
diff --git a/app/assets/stylesheets/pages/admin.scss b/app/assets/stylesheets/pages/admin.scss
index 1d34a7f79ae..5607239d92d 100644
--- a/app/assets/stylesheets/pages/admin.scss
+++ b/app/assets/stylesheets/pages/admin.scss
@@ -88,13 +88,7 @@
.user-name {
display: inline-block;
- font-weight: bold;
- }
-
- .controls {
- > .btn, > .dropdown {
- margin-left: 5px;
- }
+ font-weight: 600;
}
.dropdown {
diff --git a/app/assets/stylesheets/pages/emojis.scss b/app/assets/stylesheets/pages/emojis.scss
index b731abc7450..f17797b2381 100644
--- a/app/assets/stylesheets/pages/emojis.scss
+++ b/app/assets/stylesheets/pages/emojis.scss
@@ -1,4 +1,4 @@
-.emoji-0023-20E3 { background-position: 0 0; }
+.emoji-0023-20E3 { background-position: 0 0px; }
.emoji-002A-20E3 { background-position: -20px 0; }
.emoji-0030-20E3 { background-position: 0 -20px; }
.emoji-0031-20E3 { background-position: -20px -20px; }
@@ -452,1271 +452,1344 @@
.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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: 0 -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 0; }
-.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-1F396 { background-position: -420px -260px; }
+.emoji-1F397 { background-position: -420px -280px; }
+.emoji-1F399 { background-position: -420px -300px; }
+.emoji-1F39A { background-position: -420px -320px; }
+.emoji-1F39B { background-position: -420px -340px; }
+.emoji-1F39E { background-position: -420px -360px; }
+.emoji-1F39F { background-position: -420px -380px; }
+.emoji-1F3A0 { background-position: -420px -400px; }
+.emoji-1F3A1 { background-position: 0 -420px; }
+.emoji-1F3A2 { background-position: -20px -420px; }
+.emoji-1F3A3 { background-position: -40px -420px; }
+.emoji-1F3A4 { background-position: -60px -420px; }
+.emoji-1F3A5 { background-position: -80px -420px; }
+.emoji-1F3A6 { background-position: -100px -420px; }
+.emoji-1F3A7 { background-position: -120px -420px; }
+.emoji-1F3A8 { background-position: -140px -420px; }
+.emoji-1F3A9 { background-position: -160px -420px; }
+.emoji-1F3AA { background-position: -180px -420px; }
+.emoji-1F3AB { background-position: -200px -420px; }
+.emoji-1F3AC { background-position: -220px -420px; }
+.emoji-1F3AD { background-position: -240px -420px; }
+.emoji-1F3AE { background-position: -260px -420px; }
+.emoji-1F3AF { background-position: -280px -420px; }
+.emoji-1F3B0 { background-position: -300px -420px; }
+.emoji-1F3B1 { background-position: -320px -420px; }
+.emoji-1F3B2 { background-position: -340px -420px; }
+.emoji-1F3B3 { background-position: -360px -420px; }
+.emoji-1F3B4 { background-position: -380px -420px; }
+.emoji-1F3B5 { background-position: -400px -420px; }
+.emoji-1F3B6 { background-position: -420px -420px; }
+.emoji-1F3B7 { background-position: -440px 0; }
+.emoji-1F3B8 { background-position: -440px -20px; }
+.emoji-1F3B9 { background-position: -440px -40px; }
+.emoji-1F3BA { background-position: -440px -60px; }
+.emoji-1F3BB { background-position: -440px -80px; }
+.emoji-1F3BC { background-position: -440px -100px; }
+.emoji-1F3BD { background-position: -440px -120px; }
+.emoji-1F3BE { background-position: -440px -140px; }
+.emoji-1F3BF { background-position: -440px -160px; }
+.emoji-1F3C0 { background-position: -440px -180px; }
+.emoji-1F3C1 { background-position: -440px -200px; }
+.emoji-1F3C2 { background-position: -440px -220px; }
+.emoji-1F3C3 { background-position: -440px -240px; }
+.emoji-1F3C3-1F3FB { background-position: -440px -260px; }
+.emoji-1F3C3-1F3FC { background-position: -440px -280px; }
+.emoji-1F3C3-1F3FD { background-position: -440px -300px; }
+.emoji-1F3C3-1F3FE { background-position: -440px -320px; }
+.emoji-1F3C3-1F3FF { background-position: -440px -340px; }
+.emoji-1F3C4 { background-position: -440px -360px; }
+.emoji-1F3C4-1F3FB { background-position: -440px -380px; }
+.emoji-1F3C4-1F3FC { background-position: -440px -400px; }
+.emoji-1F3C4-1F3FD { background-position: -440px -420px; }
+.emoji-1F3C4-1F3FE { background-position: 0 -440px; }
+.emoji-1F3C4-1F3FF { background-position: -20px -440px; }
+.emoji-1F3C5 { background-position: -40px -440px; }
+.emoji-1F3C6 { background-position: -60px -440px; }
+.emoji-1F3C7 { background-position: -80px -440px; }
+.emoji-1F3C7-1F3FB { background-position: -100px -440px; }
+.emoji-1F3C7-1F3FC { background-position: -120px -440px; }
+.emoji-1F3C7-1F3FD { background-position: -140px -440px; }
+.emoji-1F3C7-1F3FE { background-position: -160px -440px; }
+.emoji-1F3C7-1F3FF { background-position: -180px -440px; }
+.emoji-1F3C8 { background-position: -200px -440px; }
+.emoji-1F3C9 { background-position: -220px -440px; }
+.emoji-1F3CA { background-position: -240px -440px; }
+.emoji-1F3CA-1F3FB { background-position: -260px -440px; }
+.emoji-1F3CA-1F3FC { background-position: -280px -440px; }
+.emoji-1F3CA-1F3FD { background-position: -300px -440px; }
+.emoji-1F3CA-1F3FE { background-position: -320px -440px; }
+.emoji-1F3CA-1F3FF { background-position: -340px -440px; }
+.emoji-1F3CB { background-position: -360px -440px; }
+.emoji-1F3CB-1F3FB { background-position: -380px -440px; }
+.emoji-1F3CB-1F3FC { background-position: -400px -440px; }
+.emoji-1F3CB-1F3FD { background-position: -420px -440px; }
+.emoji-1F3CB-1F3FE { background-position: -440px -440px; }
+.emoji-1F3CB-1F3FF { background-position: -460px 0; }
+.emoji-1F3CC { background-position: -460px -20px; }
+.emoji-1F3CD { background-position: -460px -40px; }
+.emoji-1F3CE { background-position: -460px -60px; }
+.emoji-1F3CF { background-position: -460px -80px; }
+.emoji-1F3D0 { background-position: -460px -100px; }
+.emoji-1F3D1 { background-position: -460px -120px; }
+.emoji-1F3D2 { background-position: -460px -140px; }
+.emoji-1F3D3 { background-position: -460px -160px; }
+.emoji-1F3D4 { background-position: -460px -180px; }
+.emoji-1F3D5 { background-position: -460px -200px; }
+.emoji-1F3D6 { background-position: -460px -220px; }
+.emoji-1F3D7 { background-position: -460px -240px; }
+.emoji-1F3D8 { background-position: -460px -260px; }
+.emoji-1F3D9 { background-position: -460px -280px; }
+.emoji-1F3DA { background-position: -460px -300px; }
+.emoji-1F3DB { background-position: -460px -320px; }
+.emoji-1F3DC { background-position: -460px -340px; }
+.emoji-1F3DD { background-position: -460px -360px; }
+.emoji-1F3DE { background-position: -460px -380px; }
+.emoji-1F3DF { background-position: -460px -400px; }
+.emoji-1F3E0 { background-position: -460px -420px; }
+.emoji-1F3E1 { background-position: -460px -440px; }
+.emoji-1F3E2 { background-position: 0 -460px; }
+.emoji-1F3E3 { background-position: -20px -460px; }
+.emoji-1F3E4 { background-position: -40px -460px; }
+.emoji-1F3E5 { background-position: -60px -460px; }
+.emoji-1F3E6 { background-position: -80px -460px; }
+.emoji-1F3E7 { background-position: -100px -460px; }
+.emoji-1F3E8 { background-position: -120px -460px; }
+.emoji-1F3E9 { background-position: -140px -460px; }
+.emoji-1F3EA { background-position: -160px -460px; }
+.emoji-1F3EB { background-position: -180px -460px; }
+.emoji-1F3EC { background-position: -200px -460px; }
+.emoji-1F3ED { background-position: -220px -460px; }
+.emoji-1F3EE { background-position: -240px -460px; }
+.emoji-1F3EF { background-position: -260px -460px; }
+.emoji-1F3F0 { background-position: -280px -460px; }
+.emoji-1F3F3 { background-position: -300px -460px; }
+.emoji-1F3F4 { background-position: -320px -460px; }
+.emoji-1F3F5 { background-position: -340px -460px; }
+.emoji-1F3F7 { background-position: -360px -460px; }
+.emoji-1F3F8 { background-position: -380px -460px; }
+.emoji-1F3F9 { background-position: -400px -460px; }
+.emoji-1F3FA { background-position: -420px -460px; }
+.emoji-1F3FB { background-position: -440px -460px; }
+.emoji-1F3FC { background-position: -460px -460px; }
+.emoji-1F3FD { background-position: -480px 0; }
+.emoji-1F3FE { background-position: -480px -20px; }
+.emoji-1F3FF { background-position: -480px -40px; }
+.emoji-1F400 { background-position: -480px -60px; }
+.emoji-1F401 { background-position: -480px -80px; }
+.emoji-1F402 { background-position: -480px -100px; }
+.emoji-1F403 { background-position: -480px -120px; }
+.emoji-1F404 { background-position: -480px -140px; }
+.emoji-1F405 { background-position: -480px -160px; }
+.emoji-1F406 { background-position: -480px -180px; }
+.emoji-1F407 { background-position: -480px -200px; }
+.emoji-1F408 { background-position: -480px -220px; }
+.emoji-1F409 { background-position: -480px -240px; }
+.emoji-1F40A { background-position: -480px -260px; }
+.emoji-1F40B { background-position: -480px -280px; }
+.emoji-1F40C { background-position: -480px -300px; }
+.emoji-1F40D { background-position: -480px -320px; }
+.emoji-1F40E { background-position: -480px -340px; }
+.emoji-1F40F { background-position: -480px -360px; }
+.emoji-1F410 { background-position: -480px -380px; }
+.emoji-1F411 { background-position: -480px -400px; }
+.emoji-1F412 { background-position: -480px -420px; }
+.emoji-1F413 { background-position: -480px -440px; }
+.emoji-1F414 { background-position: -480px -460px; }
+.emoji-1F415 { background-position: 0 -480px; }
+.emoji-1F416 { background-position: -20px -480px; }
+.emoji-1F417 { background-position: -40px -480px; }
+.emoji-1F418 { background-position: -60px -480px; }
+.emoji-1F419 { background-position: -80px -480px; }
+.emoji-1F41A { background-position: -100px -480px; }
+.emoji-1F41B { background-position: -120px -480px; }
+.emoji-1F41C { background-position: -140px -480px; }
+.emoji-1F41D { background-position: -160px -480px; }
+.emoji-1F41E { background-position: -180px -480px; }
+.emoji-1F41F { background-position: -200px -480px; }
+.emoji-1F420 { background-position: -220px -480px; }
+.emoji-1F421 { background-position: -240px -480px; }
+.emoji-1F422 { background-position: -260px -480px; }
+.emoji-1F423 { background-position: -280px -480px; }
+.emoji-1F424 { background-position: -300px -480px; }
+.emoji-1F425 { background-position: -320px -480px; }
+.emoji-1F426 { background-position: -340px -480px; }
+.emoji-1F427 { background-position: -360px -480px; }
+.emoji-1F428 { background-position: -380px -480px; }
+.emoji-1F429 { background-position: -400px -480px; }
+.emoji-1F42A { background-position: -420px -480px; }
+.emoji-1F42B { background-position: -440px -480px; }
+.emoji-1F42C { background-position: -460px -480px; }
+.emoji-1F42D { background-position: -480px -480px; }
+.emoji-1F42E { background-position: -500px 0; }
+.emoji-1F42F { background-position: -500px -20px; }
+.emoji-1F430 { background-position: -500px -40px; }
+.emoji-1F431 { background-position: -500px -60px; }
+.emoji-1F432 { background-position: -500px -80px; }
+.emoji-1F433 { background-position: -500px -100px; }
+.emoji-1F434 { background-position: -500px -120px; }
+.emoji-1F435 { background-position: -500px -140px; }
+.emoji-1F436 { background-position: -500px -160px; }
+.emoji-1F437 { background-position: -500px -180px; }
+.emoji-1F438 { background-position: -500px -200px; }
+.emoji-1F439 { background-position: -500px -220px; }
+.emoji-1F43A { background-position: -500px -240px; }
+.emoji-1F43B { background-position: -500px -260px; }
+.emoji-1F43C { background-position: -500px -280px; }
+.emoji-1F43D { background-position: -500px -300px; }
+.emoji-1F43E { background-position: -500px -320px; }
+.emoji-1F43F { background-position: -500px -340px; }
+.emoji-1F440 { background-position: -500px -360px; }
+.emoji-1F441 { background-position: -500px -380px; }
+.emoji-1F441-1F5E8 { background-position: -500px -400px; }
+.emoji-1F442 { background-position: -500px -420px; }
+.emoji-1F442-1F3FB { background-position: -500px -440px; }
+.emoji-1F442-1F3FC { background-position: -500px -460px; }
+.emoji-1F442-1F3FD { background-position: -500px -480px; }
+.emoji-1F442-1F3FE { background-position: 0 -500px; }
+.emoji-1F442-1F3FF { background-position: -20px -500px; }
+.emoji-1F443 { background-position: -40px -500px; }
+.emoji-1F443-1F3FB { background-position: -60px -500px; }
+.emoji-1F443-1F3FC { background-position: -80px -500px; }
+.emoji-1F443-1F3FD { background-position: -100px -500px; }
+.emoji-1F443-1F3FE { background-position: -120px -500px; }
+.emoji-1F443-1F3FF { background-position: -140px -500px; }
+.emoji-1F444 { background-position: -160px -500px; }
+.emoji-1F445 { background-position: -180px -500px; }
+.emoji-1F446 { background-position: -200px -500px; }
+.emoji-1F446-1F3FB { background-position: -220px -500px; }
+.emoji-1F446-1F3FC { background-position: -240px -500px; }
+.emoji-1F446-1F3FD { background-position: -260px -500px; }
+.emoji-1F446-1F3FE { background-position: -280px -500px; }
+.emoji-1F446-1F3FF { background-position: -300px -500px; }
+.emoji-1F447 { background-position: -320px -500px; }
+.emoji-1F447-1F3FB { background-position: -340px -500px; }
+.emoji-1F447-1F3FC { background-position: -360px -500px; }
+.emoji-1F447-1F3FD { background-position: -380px -500px; }
+.emoji-1F447-1F3FE { background-position: -400px -500px; }
+.emoji-1F447-1F3FF { background-position: -420px -500px; }
+.emoji-1F448 { background-position: -440px -500px; }
+.emoji-1F448-1F3FB { background-position: -460px -500px; }
+.emoji-1F448-1F3FC { background-position: -480px -500px; }
+.emoji-1F448-1F3FD { background-position: -500px -500px; }
+.emoji-1F448-1F3FE { background-position: -520px 0; }
+.emoji-1F448-1F3FF { background-position: -520px -20px; }
+.emoji-1F449 { background-position: -520px -40px; }
+.emoji-1F449-1F3FB { background-position: -520px -60px; }
+.emoji-1F449-1F3FC { background-position: -520px -80px; }
+.emoji-1F449-1F3FD { background-position: -520px -100px; }
+.emoji-1F449-1F3FE { background-position: -520px -120px; }
+.emoji-1F449-1F3FF { background-position: -520px -140px; }
+.emoji-1F44A { background-position: -520px -160px; }
+.emoji-1F44A-1F3FB { background-position: -520px -180px; }
+.emoji-1F44A-1F3FC { background-position: -520px -200px; }
+.emoji-1F44A-1F3FD { background-position: -520px -220px; }
+.emoji-1F44A-1F3FE { background-position: -520px -240px; }
+.emoji-1F44A-1F3FF { background-position: -520px -260px; }
+.emoji-1F44B { background-position: -520px -280px; }
+.emoji-1F44B-1F3FB { background-position: -520px -300px; }
+.emoji-1F44B-1F3FC { background-position: -520px -320px; }
+.emoji-1F44B-1F3FD { background-position: -520px -340px; }
+.emoji-1F44B-1F3FE { background-position: -520px -360px; }
+.emoji-1F44B-1F3FF { background-position: -520px -380px; }
+.emoji-1F44C { background-position: -520px -400px; }
+.emoji-1F44C-1F3FB { background-position: -520px -420px; }
+.emoji-1F44C-1F3FC { background-position: -520px -440px; }
+.emoji-1F44C-1F3FD { background-position: -520px -460px; }
+.emoji-1F44C-1F3FE { background-position: -520px -480px; }
+.emoji-1F44C-1F3FF { background-position: -520px -500px; }
+.emoji-1F44D { background-position: 0 -520px; }
+.emoji-1F44D-1F3FB { background-position: -20px -520px; }
+.emoji-1F44D-1F3FC { background-position: -40px -520px; }
+.emoji-1F44D-1F3FD { background-position: -60px -520px; }
+.emoji-1F44D-1F3FE { background-position: -80px -520px; }
+.emoji-1F44D-1F3FF { background-position: -100px -520px; }
+.emoji-1F44E { background-position: -120px -520px; }
+.emoji-1F44E-1F3FB { background-position: -140px -520px; }
+.emoji-1F44E-1F3FC { background-position: -160px -520px; }
+.emoji-1F44E-1F3FD { background-position: -180px -520px; }
+.emoji-1F44E-1F3FE { background-position: -200px -520px; }
+.emoji-1F44E-1F3FF { background-position: -220px -520px; }
+.emoji-1F44F { background-position: -240px -520px; }
+.emoji-1F44F-1F3FB { background-position: -260px -520px; }
+.emoji-1F44F-1F3FC { background-position: -280px -520px; }
+.emoji-1F44F-1F3FD { background-position: -300px -520px; }
+.emoji-1F44F-1F3FE { background-position: -320px -520px; }
+.emoji-1F44F-1F3FF { background-position: -340px -520px; }
+.emoji-1F450 { background-position: -360px -520px; }
+.emoji-1F450-1F3FB { background-position: -380px -520px; }
+.emoji-1F450-1F3FC { background-position: -400px -520px; }
+.emoji-1F450-1F3FD { background-position: -420px -520px; }
+.emoji-1F450-1F3FE { background-position: -440px -520px; }
+.emoji-1F450-1F3FF { background-position: -460px -520px; }
+.emoji-1F451 { background-position: -480px -520px; }
+.emoji-1F452 { background-position: -500px -520px; }
+.emoji-1F453 { background-position: -520px -520px; }
+.emoji-1F454 { background-position: -540px 0; }
+.emoji-1F455 { background-position: -540px -20px; }
+.emoji-1F456 { background-position: -540px -40px; }
+.emoji-1F457 { background-position: -540px -60px; }
+.emoji-1F458 { background-position: -540px -80px; }
+.emoji-1F459 { background-position: -540px -100px; }
+.emoji-1F45A { background-position: -540px -120px; }
+.emoji-1F45B { background-position: -540px -140px; }
+.emoji-1F45C { background-position: -540px -160px; }
+.emoji-1F45D { background-position: -540px -180px; }
+.emoji-1F45E { background-position: -540px -200px; }
+.emoji-1F45F { background-position: -540px -220px; }
+.emoji-1F460 { background-position: -540px -240px; }
+.emoji-1F461 { background-position: -540px -260px; }
+.emoji-1F462 { background-position: -540px -280px; }
+.emoji-1F463 { background-position: -540px -300px; }
+.emoji-1F464 { background-position: -540px -320px; }
+.emoji-1F465 { background-position: -540px -340px; }
+.emoji-1F466 { background-position: -540px -360px; }
+.emoji-1F466-1F3FB { background-position: -540px -380px; }
+.emoji-1F466-1F3FC { background-position: -540px -400px; }
+.emoji-1F466-1F3FD { background-position: -540px -420px; }
+.emoji-1F466-1F3FE { background-position: -540px -440px; }
+.emoji-1F466-1F3FF { background-position: -540px -460px; }
+.emoji-1F467 { background-position: -540px -480px; }
+.emoji-1F467-1F3FB { background-position: -540px -500px; }
+.emoji-1F467-1F3FC { background-position: -540px -520px; }
+.emoji-1F467-1F3FD { background-position: 0 -540px; }
+.emoji-1F467-1F3FE { background-position: -20px -540px; }
+.emoji-1F467-1F3FF { background-position: -40px -540px; }
+.emoji-1F468 { background-position: -60px -540px; }
+.emoji-1F468-1F3FB { background-position: -80px -540px; }
+.emoji-1F468-1F3FC { background-position: -100px -540px; }
+.emoji-1F468-1F3FD { background-position: -120px -540px; }
+.emoji-1F468-1F3FE { background-position: -140px -540px; }
+.emoji-1F468-1F3FF { background-position: -160px -540px; }
+.emoji-1F468-1F468-1F466 { background-position: -180px -540px; }
+.emoji-1F468-1F468-1F466-1F466 { background-position: -200px -540px; }
+.emoji-1F468-1F468-1F467 { background-position: -220px -540px; }
+.emoji-1F468-1F468-1F467-1F466 { background-position: -240px -540px; }
+.emoji-1F468-1F468-1F467-1F467 { background-position: -260px -540px; }
+.emoji-1F468-1F469-1F466-1F466 { background-position: -280px -540px; }
+.emoji-1F468-1F469-1F467 { background-position: -300px -540px; }
+.emoji-1F468-1F469-1F467-1F466 { background-position: -320px -540px; }
+.emoji-1F468-1F469-1F467-1F467 { background-position: -340px -540px; }
+.emoji-1F468-2764-1F468 { background-position: -360px -540px; }
+.emoji-1F468-2764-1F48B-1F468 { background-position: -380px -540px; }
+.emoji-1F469 { background-position: -400px -540px; }
+.emoji-1F469-1F3FB { background-position: -420px -540px; }
+.emoji-1F469-1F3FC { background-position: -440px -540px; }
+.emoji-1F469-1F3FD { background-position: -460px -540px; }
+.emoji-1F469-1F3FE { background-position: -480px -540px; }
+.emoji-1F469-1F3FF { background-position: -500px -540px; }
+.emoji-1F469-1F469-1F466 { background-position: -520px -540px; }
+.emoji-1F469-1F469-1F466-1F466 { background-position: -540px -540px; }
+.emoji-1F469-1F469-1F467 { background-position: -560px 0; }
+.emoji-1F469-1F469-1F467-1F466 { background-position: -560px -20px; }
+.emoji-1F469-1F469-1F467-1F467 { background-position: -560px -40px; }
+.emoji-1F469-2764-1F469 { background-position: -560px -60px; }
+.emoji-1F469-2764-1F48B-1F469 { background-position: -560px -80px; }
+.emoji-1F46A { background-position: -560px -100px; }
+.emoji-1F46B { background-position: -560px -120px; }
+.emoji-1F46C { background-position: -560px -140px; }
+.emoji-1F46D { background-position: -560px -160px; }
+.emoji-1F46E { background-position: -560px -180px; }
+.emoji-1F46E-1F3FB { background-position: -560px -200px; }
+.emoji-1F46E-1F3FC { background-position: -560px -220px; }
+.emoji-1F46E-1F3FD { background-position: -560px -240px; }
+.emoji-1F46E-1F3FE { background-position: -560px -260px; }
+.emoji-1F46E-1F3FF { background-position: -560px -280px; }
+.emoji-1F46F { background-position: -560px -300px; }
+.emoji-1F470 { background-position: -560px -320px; }
+.emoji-1F470-1F3FB { background-position: -560px -340px; }
+.emoji-1F470-1F3FC { background-position: -560px -360px; }
+.emoji-1F470-1F3FD { background-position: -560px -380px; }
+.emoji-1F470-1F3FE { background-position: -560px -400px; }
+.emoji-1F470-1F3FF { background-position: -560px -420px; }
+.emoji-1F471 { background-position: -560px -440px; }
+.emoji-1F471-1F3FB { background-position: -560px -460px; }
+.emoji-1F471-1F3FC { background-position: -560px -480px; }
+.emoji-1F471-1F3FD { background-position: -560px -500px; }
+.emoji-1F471-1F3FE { background-position: -560px -520px; }
+.emoji-1F471-1F3FF { background-position: -560px -540px; }
+.emoji-1F472 { background-position: 0 -560px; }
+.emoji-1F472-1F3FB { background-position: -20px -560px; }
+.emoji-1F472-1F3FC { background-position: -40px -560px; }
+.emoji-1F472-1F3FD { background-position: -60px -560px; }
+.emoji-1F472-1F3FE { background-position: -80px -560px; }
+.emoji-1F472-1F3FF { background-position: -100px -560px; }
+.emoji-1F473 { background-position: -120px -560px; }
+.emoji-1F473-1F3FB { background-position: -140px -560px; }
+.emoji-1F473-1F3FC { background-position: -160px -560px; }
+.emoji-1F473-1F3FD { background-position: -180px -560px; }
+.emoji-1F473-1F3FE { background-position: -200px -560px; }
+.emoji-1F473-1F3FF { background-position: -220px -560px; }
+.emoji-1F474 { background-position: -240px -560px; }
+.emoji-1F474-1F3FB { background-position: -260px -560px; }
+.emoji-1F474-1F3FC { background-position: -280px -560px; }
+.emoji-1F474-1F3FD { background-position: -300px -560px; }
+.emoji-1F474-1F3FE { background-position: -320px -560px; }
+.emoji-1F474-1F3FF { background-position: -340px -560px; }
+.emoji-1F475 { background-position: -360px -560px; }
+.emoji-1F475-1F3FB { background-position: -380px -560px; }
+.emoji-1F475-1F3FC { background-position: -400px -560px; }
+.emoji-1F475-1F3FD { background-position: -420px -560px; }
+.emoji-1F475-1F3FE { background-position: -440px -560px; }
+.emoji-1F475-1F3FF { background-position: -460px -560px; }
+.emoji-1F476 { background-position: -480px -560px; }
+.emoji-1F476-1F3FB { background-position: -500px -560px; }
+.emoji-1F476-1F3FC { background-position: -520px -560px; }
+.emoji-1F476-1F3FD { background-position: -540px -560px; }
+.emoji-1F476-1F3FE { background-position: -560px -560px; }
+.emoji-1F476-1F3FF { background-position: -580px 0; }
+.emoji-1F477 { background-position: -580px -20px; }
+.emoji-1F477-1F3FB { background-position: -580px -40px; }
+.emoji-1F477-1F3FC { background-position: -580px -60px; }
+.emoji-1F477-1F3FD { background-position: -580px -80px; }
+.emoji-1F477-1F3FE { background-position: -580px -100px; }
+.emoji-1F477-1F3FF { background-position: -580px -120px; }
+.emoji-1F478 { background-position: -580px -140px; }
+.emoji-1F478-1F3FB { background-position: -580px -160px; }
+.emoji-1F478-1F3FC { background-position: -580px -180px; }
+.emoji-1F478-1F3FD { background-position: -580px -200px; }
+.emoji-1F478-1F3FE { background-position: -580px -220px; }
+.emoji-1F478-1F3FF { background-position: -580px -240px; }
+.emoji-1F479 { background-position: -580px -260px; }
+.emoji-1F47A { background-position: -580px -280px; }
+.emoji-1F47B { background-position: -580px -300px; }
+.emoji-1F47C { background-position: -580px -320px; }
+.emoji-1F47C-1F3FB { background-position: -580px -340px; }
+.emoji-1F47C-1F3FC { background-position: -580px -360px; }
+.emoji-1F47C-1F3FD { background-position: -580px -380px; }
+.emoji-1F47C-1F3FE { background-position: -580px -400px; }
+.emoji-1F47C-1F3FF { background-position: -580px -420px; }
+.emoji-1F47D { background-position: -580px -440px; }
+.emoji-1F47E { background-position: -580px -460px; }
+.emoji-1F47F { background-position: -580px -480px; }
+.emoji-1F480 { background-position: -580px -500px; }
+.emoji-1F481 { background-position: -580px -520px; }
+.emoji-1F481-1F3FB { background-position: -580px -540px; }
+.emoji-1F481-1F3FC { background-position: -580px -560px; }
+.emoji-1F481-1F3FD { background-position: 0 -580px; }
+.emoji-1F481-1F3FE { background-position: -20px -580px; }
+.emoji-1F481-1F3FF { background-position: -40px -580px; }
+.emoji-1F482 { background-position: -60px -580px; }
+.emoji-1F482-1F3FB { background-position: -80px -580px; }
+.emoji-1F482-1F3FC { background-position: -100px -580px; }
+.emoji-1F482-1F3FD { background-position: -120px -580px; }
+.emoji-1F482-1F3FE { background-position: -140px -580px; }
+.emoji-1F482-1F3FF { background-position: -160px -580px; }
+.emoji-1F483 { background-position: -180px -580px; }
+.emoji-1F483-1F3FB { background-position: -200px -580px; }
+.emoji-1F483-1F3FC { background-position: -220px -580px; }
+.emoji-1F483-1F3FD { background-position: -240px -580px; }
+.emoji-1F483-1F3FE { background-position: -260px -580px; }
+.emoji-1F483-1F3FF { background-position: -280px -580px; }
+.emoji-1F484 { background-position: -300px -580px; }
+.emoji-1F485 { background-position: -320px -580px; }
+.emoji-1F485-1F3FB { background-position: -340px -580px; }
+.emoji-1F485-1F3FC { background-position: -360px -580px; }
+.emoji-1F485-1F3FD { background-position: -380px -580px; }
+.emoji-1F485-1F3FE { background-position: -400px -580px; }
+.emoji-1F485-1F3FF { background-position: -420px -580px; }
+.emoji-1F486 { background-position: -440px -580px; }
+.emoji-1F486-1F3FB { background-position: -460px -580px; }
+.emoji-1F486-1F3FC { background-position: -480px -580px; }
+.emoji-1F486-1F3FD { background-position: -500px -580px; }
+.emoji-1F486-1F3FE { background-position: -520px -580px; }
+.emoji-1F486-1F3FF { background-position: -540px -580px; }
+.emoji-1F487 { background-position: -560px -580px; }
+.emoji-1F487-1F3FB { background-position: -580px -580px; }
+.emoji-1F487-1F3FC { background-position: -600px 0; }
+.emoji-1F487-1F3FD { background-position: -600px -20px; }
+.emoji-1F487-1F3FE { background-position: -600px -40px; }
+.emoji-1F487-1F3FF { background-position: -600px -60px; }
+.emoji-1F488 { background-position: -600px -80px; }
+.emoji-1F489 { background-position: -600px -100px; }
+.emoji-1F48A { background-position: -600px -120px; }
+.emoji-1F48B { background-position: -600px -140px; }
+.emoji-1F48C { background-position: -600px -160px; }
+.emoji-1F48D { background-position: -600px -180px; }
+.emoji-1F48E { background-position: -600px -200px; }
+.emoji-1F48F { background-position: -600px -220px; }
+.emoji-1F490 { background-position: -600px -240px; }
+.emoji-1F491 { background-position: -600px -260px; }
+.emoji-1F492 { background-position: -600px -280px; }
+.emoji-1F493 { background-position: -600px -300px; }
+.emoji-1F494 { background-position: -600px -320px; }
+.emoji-1F495 { background-position: -600px -340px; }
+.emoji-1F496 { background-position: -600px -360px; }
+.emoji-1F497 { background-position: -600px -380px; }
+.emoji-1F498 { background-position: -600px -400px; }
+.emoji-1F499 { background-position: -600px -420px; }
+.emoji-1F49A { background-position: -600px -440px; }
+.emoji-1F49B { background-position: -600px -460px; }
+.emoji-1F49C { background-position: -600px -480px; }
+.emoji-1F49D { background-position: -600px -500px; }
+.emoji-1F49E { background-position: -600px -520px; }
+.emoji-1F49F { background-position: -600px -540px; }
+.emoji-1F4A0 { background-position: -600px -560px; }
+.emoji-1F4A1 { background-position: -600px -580px; }
+.emoji-1F4A2 { background-position: 0 -600px; }
+.emoji-1F4A3 { background-position: -20px -600px; }
+.emoji-1F4A4 { background-position: -40px -600px; }
+.emoji-1F4A5 { background-position: -60px -600px; }
+.emoji-1F4A6 { background-position: -80px -600px; }
+.emoji-1F4A7 { background-position: -100px -600px; }
+.emoji-1F4A8 { background-position: -120px -600px; }
+.emoji-1F4A9 { background-position: -140px -600px; }
+.emoji-1F4AA { background-position: -160px -600px; }
+.emoji-1F4AA-1F3FB { background-position: -180px -600px; }
+.emoji-1F4AA-1F3FC { background-position: -200px -600px; }
+.emoji-1F4AA-1F3FD { background-position: -220px -600px; }
+.emoji-1F4AA-1F3FE { background-position: -240px -600px; }
+.emoji-1F4AA-1F3FF { background-position: -260px -600px; }
+.emoji-1F4AB { background-position: -280px -600px; }
+.emoji-1F4AC { background-position: -300px -600px; }
+.emoji-1F4AD { background-position: -320px -600px; }
+.emoji-1F4AE { background-position: -340px -600px; }
+.emoji-1F4AF { background-position: -360px -600px; }
+.emoji-1F4B0 { background-position: -380px -600px; }
+.emoji-1F4B1 { background-position: -400px -600px; }
+.emoji-1F4B2 { background-position: -420px -600px; }
+.emoji-1F4B3 { background-position: -440px -600px; }
+.emoji-1F4B4 { background-position: -460px -600px; }
+.emoji-1F4B5 { background-position: -480px -600px; }
+.emoji-1F4B6 { background-position: -500px -600px; }
+.emoji-1F4B7 { background-position: -520px -600px; }
+.emoji-1F4B8 { background-position: -540px -600px; }
+.emoji-1F4B9 { background-position: -560px -600px; }
+.emoji-1F4BA { background-position: -580px -600px; }
+.emoji-1F4BB { background-position: -600px -600px; }
+.emoji-1F4BC { background-position: -620px 0; }
+.emoji-1F4BD { background-position: -620px -20px; }
+.emoji-1F4BE { background-position: -620px -40px; }
+.emoji-1F4BF { background-position: -620px -60px; }
+.emoji-1F4C0 { background-position: -620px -80px; }
+.emoji-1F4C1 { background-position: -620px -100px; }
+.emoji-1F4C2 { background-position: -620px -120px; }
+.emoji-1F4C3 { background-position: -620px -140px; }
+.emoji-1F4C4 { background-position: -620px -160px; }
+.emoji-1F4C5 { background-position: -620px -180px; }
+.emoji-1F4C6 { background-position: -620px -200px; }
+.emoji-1F4C7 { background-position: -620px -220px; }
+.emoji-1F4C8 { background-position: -620px -240px; }
+.emoji-1F4C9 { background-position: -620px -260px; }
+.emoji-1F4CA { background-position: -620px -280px; }
+.emoji-1F4CB { background-position: -620px -300px; }
+.emoji-1F4CC { background-position: -620px -320px; }
+.emoji-1F4CD { background-position: -620px -340px; }
+.emoji-1F4CE { background-position: -620px -360px; }
+.emoji-1F4CF { background-position: -620px -380px; }
+.emoji-1F4D0 { background-position: -620px -400px; }
+.emoji-1F4D1 { background-position: -620px -420px; }
+.emoji-1F4D2 { background-position: -620px -440px; }
+.emoji-1F4D3 { background-position: -620px -460px; }
+.emoji-1F4D4 { background-position: -620px -480px; }
+.emoji-1F4D5 { background-position: -620px -500px; }
+.emoji-1F4D6 { background-position: -620px -520px; }
+.emoji-1F4D7 { background-position: -620px -540px; }
+.emoji-1F4D8 { background-position: -620px -560px; }
+.emoji-1F4D9 { background-position: -620px -580px; }
+.emoji-1F4DA { background-position: -620px -600px; }
+.emoji-1F4DB { background-position: 0 -620px; }
+.emoji-1F4DC { background-position: -20px -620px; }
+.emoji-1F4DD { background-position: -40px -620px; }
+.emoji-1F4DE { background-position: -60px -620px; }
+.emoji-1F4DF { background-position: -80px -620px; }
+.emoji-1F4E0 { background-position: -100px -620px; }
+.emoji-1F4E1 { background-position: -120px -620px; }
+.emoji-1F4E2 { background-position: -140px -620px; }
+.emoji-1F4E3 { background-position: -160px -620px; }
+.emoji-1F4E4 { background-position: -180px -620px; }
+.emoji-1F4E5 { background-position: -200px -620px; }
+.emoji-1F4E6 { background-position: -220px -620px; }
+.emoji-1F4E7 { background-position: -240px -620px; }
+.emoji-1F4E8 { background-position: -260px -620px; }
+.emoji-1F4E9 { background-position: -280px -620px; }
+.emoji-1F4EA { background-position: -300px -620px; }
+.emoji-1F4EB { background-position: -320px -620px; }
+.emoji-1F4EC { background-position: -340px -620px; }
+.emoji-1F4ED { background-position: -360px -620px; }
+.emoji-1F4EE { background-position: -380px -620px; }
+.emoji-1F4EF { background-position: -400px -620px; }
+.emoji-1F4F0 { background-position: -420px -620px; }
+.emoji-1F4F1 { background-position: -440px -620px; }
+.emoji-1F4F2 { background-position: -460px -620px; }
+.emoji-1F4F3 { background-position: -480px -620px; }
+.emoji-1F4F4 { background-position: -500px -620px; }
+.emoji-1F4F5 { background-position: -520px -620px; }
+.emoji-1F4F6 { background-position: -540px -620px; }
+.emoji-1F4F7 { background-position: -560px -620px; }
+.emoji-1F4F8 { background-position: -580px -620px; }
+.emoji-1F4F9 { background-position: -600px -620px; }
+.emoji-1F4FA { background-position: -620px -620px; }
+.emoji-1F4FB { background-position: -640px 0; }
+.emoji-1F4FC { background-position: -640px -20px; }
+.emoji-1F4FD { background-position: -640px -40px; }
+.emoji-1F4FF { background-position: -640px -60px; }
+.emoji-1F500 { background-position: -640px -80px; }
+.emoji-1F501 { background-position: -640px -100px; }
+.emoji-1F502 { background-position: -640px -120px; }
+.emoji-1F503 { background-position: -640px -140px; }
+.emoji-1F504 { background-position: -640px -160px; }
+.emoji-1F505 { background-position: -640px -180px; }
+.emoji-1F506 { background-position: -640px -200px; }
+.emoji-1F507 { background-position: -640px -220px; }
+.emoji-1F508 { background-position: -640px -240px; }
+.emoji-1F509 { background-position: -640px -260px; }
+.emoji-1F50A { background-position: -640px -280px; }
+.emoji-1F50B { background-position: -640px -300px; }
+.emoji-1F50C { background-position: -640px -320px; }
+.emoji-1F50D { background-position: -640px -340px; }
+.emoji-1F50E { background-position: -640px -360px; }
+.emoji-1F50F { background-position: -640px -380px; }
+.emoji-1F510 { background-position: -640px -400px; }
+.emoji-1F511 { background-position: -640px -420px; }
+.emoji-1F512 { background-position: -640px -440px; }
+.emoji-1F513 { background-position: -640px -460px; }
+.emoji-1F514 { background-position: -640px -480px; }
+.emoji-1F515 { background-position: -640px -500px; }
+.emoji-1F516 { background-position: -640px -520px; }
+.emoji-1F517 { background-position: -640px -540px; }
+.emoji-1F518 { background-position: -640px -560px; }
+.emoji-1F519 { background-position: -640px -580px; }
+.emoji-1F51A { background-position: -640px -600px; }
+.emoji-1F51B { background-position: -640px -620px; }
+.emoji-1F51C { background-position: 0 -640px; }
+.emoji-1F51D { background-position: -20px -640px; }
+.emoji-1F51E { background-position: -40px -640px; }
+.emoji-1F51F { background-position: -60px -640px; }
+.emoji-1F520 { background-position: -80px -640px; }
+.emoji-1F521 { background-position: -100px -640px; }
+.emoji-1F522 { background-position: -120px -640px; }
+.emoji-1F523 { background-position: -140px -640px; }
+.emoji-1F524 { background-position: -160px -640px; }
+.emoji-1F525 { background-position: -180px -640px; }
+.emoji-1F526 { background-position: -200px -640px; }
+.emoji-1F527 { background-position: -220px -640px; }
+.emoji-1F528 { background-position: -240px -640px; }
+.emoji-1F529 { background-position: -260px -640px; }
+.emoji-1F52A { background-position: -280px -640px; }
+.emoji-1F52B { background-position: -300px -640px; }
+.emoji-1F52C { background-position: -320px -640px; }
+.emoji-1F52D { background-position: -340px -640px; }
+.emoji-1F52E { background-position: -360px -640px; }
+.emoji-1F52F { background-position: -380px -640px; }
+.emoji-1F530 { background-position: -400px -640px; }
+.emoji-1F531 { background-position: -420px -640px; }
+.emoji-1F532 { background-position: -440px -640px; }
+.emoji-1F533 { background-position: -460px -640px; }
+.emoji-1F534 { background-position: -480px -640px; }
+.emoji-1F535 { background-position: -500px -640px; }
+.emoji-1F536 { background-position: -520px -640px; }
+.emoji-1F537 { background-position: -540px -640px; }
+.emoji-1F538 { background-position: -560px -640px; }
+.emoji-1F539 { background-position: -580px -640px; }
+.emoji-1F53A { background-position: -600px -640px; }
+.emoji-1F53B { background-position: -620px -640px; }
+.emoji-1F53C { background-position: -640px -640px; }
+.emoji-1F53D { background-position: -660px 0; }
+.emoji-1F549 { background-position: -660px -20px; }
+.emoji-1F54A { background-position: -660px -40px; }
+.emoji-1F54B { background-position: -660px -60px; }
+.emoji-1F54C { background-position: -660px -80px; }
+.emoji-1F54D { background-position: -660px -100px; }
+.emoji-1F54E { background-position: -660px -120px; }
+.emoji-1F550 { background-position: -660px -140px; }
+.emoji-1F551 { background-position: -660px -160px; }
+.emoji-1F552 { background-position: -660px -180px; }
+.emoji-1F553 { background-position: -660px -200px; }
+.emoji-1F554 { background-position: -660px -220px; }
+.emoji-1F555 { background-position: -660px -240px; }
+.emoji-1F556 { background-position: -660px -260px; }
+.emoji-1F557 { background-position: -660px -280px; }
+.emoji-1F558 { background-position: -660px -300px; }
+.emoji-1F559 { background-position: -660px -320px; }
+.emoji-1F55A { background-position: -660px -340px; }
+.emoji-1F55B { background-position: -660px -360px; }
+.emoji-1F55C { background-position: -660px -380px; }
+.emoji-1F55D { background-position: -660px -400px; }
+.emoji-1F55E { background-position: -660px -420px; }
+.emoji-1F55F { background-position: -660px -440px; }
+.emoji-1F560 { background-position: -660px -460px; }
+.emoji-1F561 { background-position: -660px -480px; }
+.emoji-1F562 { background-position: -660px -500px; }
+.emoji-1F563 { background-position: -660px -520px; }
+.emoji-1F564 { background-position: -660px -540px; }
+.emoji-1F565 { background-position: -660px -560px; }
+.emoji-1F566 { background-position: -660px -580px; }
+.emoji-1F567 { background-position: -660px -600px; }
+.emoji-1F56F { background-position: -660px -620px; }
+.emoji-1F570 { background-position: -660px -640px; }
+.emoji-1F573 { background-position: 0 -660px; }
+.emoji-1F574 { background-position: -20px -660px; }
+.emoji-1F575 { background-position: -40px -660px; }
+.emoji-1F575-1F3FB { background-position: -60px -660px; }
+.emoji-1F575-1F3FC { background-position: -80px -660px; }
+.emoji-1F575-1F3FD { background-position: -100px -660px; }
+.emoji-1F575-1F3FE { background-position: -120px -660px; }
+.emoji-1F575-1F3FF { background-position: -140px -660px; }
+.emoji-1F576 { background-position: -160px -660px; }
+.emoji-1F577 { background-position: -180px -660px; }
+.emoji-1F578 { background-position: -200px -660px; }
+.emoji-1F579 { background-position: -220px -660px; }
+.emoji-1F57A { background-position: -240px -660px; }
+.emoji-1F57A-1F3FB { background-position: -260px -660px; }
+.emoji-1F57A-1F3FC { background-position: -280px -660px; }
+.emoji-1F57A-1F3FD { background-position: -300px -660px; }
+.emoji-1F57A-1F3FE { background-position: -320px -660px; }
+.emoji-1F57A-1F3FF { background-position: -340px -660px; }
+.emoji-1F587 { background-position: -360px -660px; }
+.emoji-1F58A { background-position: -380px -660px; }
+.emoji-1F58B { background-position: -400px -660px; }
+.emoji-1F58C { background-position: -420px -660px; }
+.emoji-1F58D { background-position: -440px -660px; }
+.emoji-1F590 { background-position: -460px -660px; }
+.emoji-1F590-1F3FB { background-position: -480px -660px; }
+.emoji-1F590-1F3FC { background-position: -500px -660px; }
+.emoji-1F590-1F3FD { background-position: -520px -660px; }
+.emoji-1F590-1F3FE { background-position: -540px -660px; }
+.emoji-1F590-1F3FF { background-position: -560px -660px; }
+.emoji-1F595 { background-position: -580px -660px; }
+.emoji-1F595-1F3FB { background-position: -600px -660px; }
+.emoji-1F595-1F3FC { background-position: -620px -660px; }
+.emoji-1F595-1F3FD { background-position: -640px -660px; }
+.emoji-1F595-1F3FE { background-position: -660px -660px; }
+.emoji-1F595-1F3FF { background-position: -680px 0; }
+.emoji-1F596 { background-position: -680px -20px; }
+.emoji-1F596-1F3FB { background-position: -680px -40px; }
+.emoji-1F596-1F3FC { background-position: -680px -60px; }
+.emoji-1F596-1F3FD { background-position: -680px -80px; }
+.emoji-1F596-1F3FE { background-position: -680px -100px; }
+.emoji-1F596-1F3FF { background-position: -680px -120px; }
+.emoji-1F5A4 { background-position: -680px -140px; }
+.emoji-1F5A5 { background-position: -680px -160px; }
+.emoji-1F5A8 { background-position: -680px -180px; }
+.emoji-1F5B1 { background-position: -680px -200px; }
+.emoji-1F5B2 { background-position: -680px -220px; }
+.emoji-1F5BC { background-position: -680px -240px; }
+.emoji-1F5C2 { background-position: -680px -260px; }
+.emoji-1F5C3 { background-position: -680px -280px; }
+.emoji-1F5C4 { background-position: -680px -300px; }
+.emoji-1F5D1 { background-position: -680px -320px; }
+.emoji-1F5D2 { background-position: -680px -340px; }
+.emoji-1F5D3 { background-position: -680px -360px; }
+.emoji-1F5DC { background-position: -680px -380px; }
+.emoji-1F5DD { background-position: -680px -400px; }
+.emoji-1F5DE { background-position: -680px -420px; }
+.emoji-1F5E1 { background-position: -680px -440px; }
+.emoji-1F5E3 { background-position: -680px -460px; }
+.emoji-1F5EF { background-position: -680px -480px; }
+.emoji-1F5F3 { background-position: -680px -500px; }
+.emoji-1F5FA { background-position: -680px -520px; }
+.emoji-1F5FB { background-position: -680px -540px; }
+.emoji-1F5FC { background-position: -680px -560px; }
+.emoji-1F5FD { background-position: -680px -580px; }
+.emoji-1F5FE { background-position: -680px -600px; }
+.emoji-1F5FF { background-position: -680px -620px; }
+.emoji-1F600 { background-position: -680px -640px; }
+.emoji-1F601 { background-position: -680px -660px; }
+.emoji-1F602 { background-position: 0 -680px; }
+.emoji-1F603 { background-position: -20px -680px; }
+.emoji-1F604 { background-position: -40px -680px; }
+.emoji-1F605 { background-position: -60px -680px; }
+.emoji-1F606 { background-position: -80px -680px; }
+.emoji-1F607 { background-position: -100px -680px; }
+.emoji-1F608 { background-position: -120px -680px; }
+.emoji-1F609 { background-position: -140px -680px; }
+.emoji-1F60A { background-position: -160px -680px; }
+.emoji-1F60B { background-position: -180px -680px; }
+.emoji-1F60C { background-position: -200px -680px; }
+.emoji-1F60D { background-position: -220px -680px; }
+.emoji-1F60E { background-position: -240px -680px; }
+.emoji-1F60F { background-position: -260px -680px; }
+.emoji-1F610 { background-position: -280px -680px; }
+.emoji-1F611 { background-position: -300px -680px; }
+.emoji-1F612 { background-position: -320px -680px; }
+.emoji-1F613 { background-position: -340px -680px; }
+.emoji-1F614 { background-position: -360px -680px; }
+.emoji-1F615 { background-position: -380px -680px; }
+.emoji-1F616 { background-position: -400px -680px; }
+.emoji-1F617 { background-position: -420px -680px; }
+.emoji-1F618 { background-position: -440px -680px; }
+.emoji-1F619 { background-position: -460px -680px; }
+.emoji-1F61A { background-position: -480px -680px; }
+.emoji-1F61B { background-position: -500px -680px; }
+.emoji-1F61C { background-position: -520px -680px; }
+.emoji-1F61D { background-position: -540px -680px; }
+.emoji-1F61E { background-position: -560px -680px; }
+.emoji-1F61F { background-position: -580px -680px; }
+.emoji-1F620 { background-position: -600px -680px; }
+.emoji-1F621 { background-position: -620px -680px; }
+.emoji-1F622 { background-position: -640px -680px; }
+.emoji-1F623 { background-position: -660px -680px; }
+.emoji-1F624 { background-position: -680px -680px; }
+.emoji-1F625 { background-position: -700px 0; }
+.emoji-1F626 { background-position: -700px -20px; }
+.emoji-1F627 { background-position: -700px -40px; }
+.emoji-1F628 { background-position: -700px -60px; }
+.emoji-1F629 { background-position: -700px -80px; }
+.emoji-1F62A { background-position: -700px -100px; }
+.emoji-1F62B { background-position: -700px -120px; }
+.emoji-1F62C { background-position: -700px -140px; }
+.emoji-1F62D { background-position: -700px -160px; }
+.emoji-1F62E { background-position: -700px -180px; }
+.emoji-1F62F { background-position: -700px -200px; }
+.emoji-1F630 { background-position: -700px -220px; }
+.emoji-1F631 { background-position: -700px -240px; }
+.emoji-1F632 { background-position: -700px -260px; }
+.emoji-1F633 { background-position: -700px -280px; }
+.emoji-1F634 { background-position: -700px -300px; }
+.emoji-1F635 { background-position: -700px -320px; }
+.emoji-1F636 { background-position: -700px -340px; }
+.emoji-1F637 { background-position: -700px -360px; }
+.emoji-1F638 { background-position: -700px -380px; }
+.emoji-1F639 { background-position: -700px -400px; }
+.emoji-1F63A { background-position: -700px -420px; }
+.emoji-1F63B { background-position: -700px -440px; }
+.emoji-1F63C { background-position: -700px -460px; }
+.emoji-1F63D { background-position: -700px -480px; }
+.emoji-1F63E { background-position: -700px -500px; }
+.emoji-1F63F { background-position: -700px -520px; }
+.emoji-1F640 { background-position: -700px -540px; }
+.emoji-1F641 { background-position: -700px -560px; }
+.emoji-1F642 { background-position: -700px -580px; }
+.emoji-1F643 { background-position: -700px -600px; }
+.emoji-1F644 { background-position: -700px -620px; }
+.emoji-1F645 { background-position: -700px -640px; }
+.emoji-1F645-1F3FB { background-position: -700px -660px; }
+.emoji-1F645-1F3FC { background-position: -700px -680px; }
+.emoji-1F645-1F3FD { background-position: 0 -700px; }
+.emoji-1F645-1F3FE { background-position: -20px -700px; }
+.emoji-1F645-1F3FF { background-position: -40px -700px; }
+.emoji-1F646 { background-position: -60px -700px; }
+.emoji-1F646-1F3FB { background-position: -80px -700px; }
+.emoji-1F646-1F3FC { background-position: -100px -700px; }
+.emoji-1F646-1F3FD { background-position: -120px -700px; }
+.emoji-1F646-1F3FE { background-position: -140px -700px; }
+.emoji-1F646-1F3FF { background-position: -160px -700px; }
+.emoji-1F647 { background-position: -180px -700px; }
+.emoji-1F647-1F3FB { background-position: -200px -700px; }
+.emoji-1F647-1F3FC { background-position: -220px -700px; }
+.emoji-1F647-1F3FD { background-position: -240px -700px; }
+.emoji-1F647-1F3FE { background-position: -260px -700px; }
+.emoji-1F647-1F3FF { background-position: -280px -700px; }
+.emoji-1F648 { background-position: -300px -700px; }
+.emoji-1F649 { background-position: -320px -700px; }
+.emoji-1F64A { background-position: -340px -700px; }
+.emoji-1F64B { background-position: -360px -700px; }
+.emoji-1F64B-1F3FB { background-position: -380px -700px; }
+.emoji-1F64B-1F3FC { background-position: -400px -700px; }
+.emoji-1F64B-1F3FD { background-position: -420px -700px; }
+.emoji-1F64B-1F3FE { background-position: -440px -700px; }
+.emoji-1F64B-1F3FF { background-position: -460px -700px; }
+.emoji-1F64C { background-position: -480px -700px; }
+.emoji-1F64C-1F3FB { background-position: -500px -700px; }
+.emoji-1F64C-1F3FC { background-position: -520px -700px; }
+.emoji-1F64C-1F3FD { background-position: -540px -700px; }
+.emoji-1F64C-1F3FE { background-position: -560px -700px; }
+.emoji-1F64C-1F3FF { background-position: -580px -700px; }
+.emoji-1F64D { background-position: -600px -700px; }
+.emoji-1F64D-1F3FB { background-position: -620px -700px; }
+.emoji-1F64D-1F3FC { background-position: -640px -700px; }
+.emoji-1F64D-1F3FD { background-position: -660px -700px; }
+.emoji-1F64D-1F3FE { background-position: -680px -700px; }
+.emoji-1F64D-1F3FF { background-position: -700px -700px; }
+.emoji-1F64E { background-position: -720px 0; }
+.emoji-1F64E-1F3FB { background-position: -720px -20px; }
+.emoji-1F64E-1F3FC { background-position: -720px -40px; }
+.emoji-1F64E-1F3FD { background-position: -720px -60px; }
+.emoji-1F64E-1F3FE { background-position: -720px -80px; }
+.emoji-1F64E-1F3FF { background-position: -720px -100px; }
+.emoji-1F64F { background-position: -720px -120px; }
+.emoji-1F64F-1F3FB { background-position: -720px -140px; }
+.emoji-1F64F-1F3FC { background-position: -720px -160px; }
+.emoji-1F64F-1F3FD { background-position: -720px -180px; }
+.emoji-1F64F-1F3FE { background-position: -720px -200px; }
+.emoji-1F64F-1F3FF { background-position: -720px -220px; }
+.emoji-1F680 { background-position: -720px -240px; }
+.emoji-1F681 { background-position: -720px -260px; }
+.emoji-1F682 { background-position: -720px -280px; }
+.emoji-1F683 { background-position: -720px -300px; }
+.emoji-1F684 { background-position: -720px -320px; }
+.emoji-1F685 { background-position: -720px -340px; }
+.emoji-1F686 { background-position: -720px -360px; }
+.emoji-1F687 { background-position: -720px -380px; }
+.emoji-1F688 { background-position: -720px -400px; }
+.emoji-1F689 { background-position: -720px -420px; }
+.emoji-1F68A { background-position: -720px -440px; }
+.emoji-1F68B { background-position: -720px -460px; }
+.emoji-1F68C { background-position: -720px -480px; }
+.emoji-1F68D { background-position: -720px -500px; }
+.emoji-1F68E { background-position: -720px -520px; }
+.emoji-1F68F { background-position: -720px -540px; }
+.emoji-1F690 { background-position: -720px -560px; }
+.emoji-1F691 { background-position: -720px -580px; }
+.emoji-1F692 { background-position: -720px -600px; }
+.emoji-1F693 { background-position: -720px -620px; }
+.emoji-1F694 { background-position: -720px -640px; }
+.emoji-1F695 { background-position: -720px -660px; }
+.emoji-1F696 { background-position: -720px -680px; }
+.emoji-1F697 { background-position: -720px -700px; }
+.emoji-1F698 { background-position: 0 -720px; }
+.emoji-1F699 { background-position: -20px -720px; }
+.emoji-1F69A { background-position: -40px -720px; }
+.emoji-1F69B { background-position: -60px -720px; }
+.emoji-1F69C { background-position: -80px -720px; }
+.emoji-1F69D { background-position: -100px -720px; }
+.emoji-1F69E { background-position: -120px -720px; }
+.emoji-1F69F { background-position: -140px -720px; }
+.emoji-1F6A0 { background-position: -160px -720px; }
+.emoji-1F6A1 { background-position: -180px -720px; }
+.emoji-1F6A2 { background-position: -200px -720px; }
+.emoji-1F6A3 { background-position: -220px -720px; }
+.emoji-1F6A3-1F3FB { background-position: -240px -720px; }
+.emoji-1F6A3-1F3FC { background-position: -260px -720px; }
+.emoji-1F6A3-1F3FD { background-position: -280px -720px; }
+.emoji-1F6A3-1F3FE { background-position: -300px -720px; }
+.emoji-1F6A3-1F3FF { background-position: -320px -720px; }
+.emoji-1F6A4 { background-position: -340px -720px; }
+.emoji-1F6A5 { background-position: -360px -720px; }
+.emoji-1F6A6 { background-position: -380px -720px; }
+.emoji-1F6A7 { background-position: -400px -720px; }
+.emoji-1F6A8 { background-position: -420px -720px; }
+.emoji-1F6A9 { background-position: -440px -720px; }
+.emoji-1F6AA { background-position: -460px -720px; }
+.emoji-1F6AB { background-position: -480px -720px; }
+.emoji-1F6AC { background-position: -500px -720px; }
+.emoji-1F6AD { background-position: -520px -720px; }
+.emoji-1F6AE { background-position: -540px -720px; }
+.emoji-1F6AF { background-position: -560px -720px; }
+.emoji-1F6B0 { background-position: -580px -720px; }
+.emoji-1F6B1 { background-position: -600px -720px; }
+.emoji-1F6B2 { background-position: -620px -720px; }
+.emoji-1F6B3 { background-position: -640px -720px; }
+.emoji-1F6B4 { background-position: -660px -720px; }
+.emoji-1F6B4-1F3FB { background-position: -680px -720px; }
+.emoji-1F6B4-1F3FC { background-position: -700px -720px; }
+.emoji-1F6B4-1F3FD { background-position: -720px -720px; }
+.emoji-1F6B4-1F3FE { background-position: -740px 0; }
+.emoji-1F6B4-1F3FF { background-position: -740px -20px; }
+.emoji-1F6B5 { background-position: -740px -40px; }
+.emoji-1F6B5-1F3FB { background-position: -740px -60px; }
+.emoji-1F6B5-1F3FC { background-position: -740px -80px; }
+.emoji-1F6B5-1F3FD { background-position: -740px -100px; }
+.emoji-1F6B5-1F3FE { background-position: -740px -120px; }
+.emoji-1F6B5-1F3FF { background-position: -740px -140px; }
+.emoji-1F6B6 { background-position: -740px -160px; }
+.emoji-1F6B6-1F3FB { background-position: -740px -180px; }
+.emoji-1F6B6-1F3FC { background-position: -740px -200px; }
+.emoji-1F6B6-1F3FD { background-position: -740px -220px; }
+.emoji-1F6B6-1F3FE { background-position: -740px -240px; }
+.emoji-1F6B6-1F3FF { background-position: -740px -260px; }
+.emoji-1F6B7 { background-position: -740px -280px; }
+.emoji-1F6B8 { background-position: -740px -300px; }
+.emoji-1F6B9 { background-position: -740px -320px; }
+.emoji-1F6BA { background-position: -740px -340px; }
+.emoji-1F6BB { background-position: -740px -360px; }
+.emoji-1F6BC { background-position: -740px -380px; }
+.emoji-1F6BD { background-position: -740px -400px; }
+.emoji-1F6BE { background-position: -740px -420px; }
+.emoji-1F6BF { background-position: -740px -440px; }
+.emoji-1F6C0 { background-position: -740px -460px; }
+.emoji-1F6C0-1F3FB { background-position: -740px -480px; }
+.emoji-1F6C0-1F3FC { background-position: -740px -500px; }
+.emoji-1F6C0-1F3FD { background-position: -740px -520px; }
+.emoji-1F6C0-1F3FE { background-position: -740px -540px; }
+.emoji-1F6C0-1F3FF { background-position: -740px -560px; }
+.emoji-1F6C1 { background-position: -740px -580px; }
+.emoji-1F6C2 { background-position: -740px -600px; }
+.emoji-1F6C3 { background-position: -740px -620px; }
+.emoji-1F6C4 { background-position: -740px -640px; }
+.emoji-1F6C5 { background-position: -740px -660px; }
+.emoji-1F6CB { background-position: -740px -680px; }
+.emoji-1F6CC { background-position: -740px -700px; }
+.emoji-1F6CD { background-position: -740px -720px; }
+.emoji-1F6CE { background-position: 0 -740px; }
+.emoji-1F6CF { background-position: -20px -740px; }
+.emoji-1F6D0 { background-position: -40px -740px; }
+.emoji-1F6D1 { background-position: -60px -740px; }
+.emoji-1F6D2 { background-position: -80px -740px; }
+.emoji-1F6E0 { background-position: -100px -740px; }
+.emoji-1F6E1 { background-position: -120px -740px; }
+.emoji-1F6E2 { background-position: -140px -740px; }
+.emoji-1F6E3 { background-position: -160px -740px; }
+.emoji-1F6E4 { background-position: -180px -740px; }
+.emoji-1F6E5 { background-position: -200px -740px; }
+.emoji-1F6E9 { background-position: -220px -740px; }
+.emoji-1F6EB { background-position: -240px -740px; }
+.emoji-1F6EC { background-position: -260px -740px; }
+.emoji-1F6F0 { background-position: -280px -740px; }
+.emoji-1F6F3 { background-position: -300px -740px; }
+.emoji-1F6F4 { background-position: -320px -740px; }
+.emoji-1F6F5 { background-position: -340px -740px; }
+.emoji-1F6F6 { background-position: -360px -740px; }
+.emoji-1F910 { background-position: -380px -740px; }
+.emoji-1F911 { background-position: -400px -740px; }
+.emoji-1F912 { background-position: -420px -740px; }
+.emoji-1F913 { background-position: -440px -740px; }
+.emoji-1F914 { background-position: -460px -740px; }
+.emoji-1F915 { background-position: -480px -740px; }
+.emoji-1F916 { background-position: -500px -740px; }
+.emoji-1F917 { background-position: -520px -740px; }
+.emoji-1F918 { background-position: -540px -740px; }
+.emoji-1F918-1F3FB { background-position: -560px -740px; }
+.emoji-1F918-1F3FC { background-position: -580px -740px; }
+.emoji-1F918-1F3FD { background-position: -600px -740px; }
+.emoji-1F918-1F3FE { background-position: -620px -740px; }
+.emoji-1F918-1F3FF { background-position: -640px -740px; }
+.emoji-1F919 { background-position: -660px -740px; }
+.emoji-1F919-1F3FB { background-position: -680px -740px; }
+.emoji-1F919-1F3FC { background-position: -700px -740px; }
+.emoji-1F919-1F3FD { background-position: -720px -740px; }
+.emoji-1F919-1F3FE { background-position: -740px -740px; }
+.emoji-1F919-1F3FF { background-position: -760px 0; }
+.emoji-1F91A { background-position: -760px -20px; }
+.emoji-1F91A-1F3FB { background-position: -760px -40px; }
+.emoji-1F91A-1F3FC { background-position: -760px -60px; }
+.emoji-1F91A-1F3FD { background-position: -760px -80px; }
+.emoji-1F91A-1F3FE { background-position: -760px -100px; }
+.emoji-1F91A-1F3FF { background-position: -760px -120px; }
+.emoji-1F91B { background-position: -760px -140px; }
+.emoji-1F91B-1F3FB { background-position: -760px -160px; }
+.emoji-1F91B-1F3FC { background-position: -760px -180px; }
+.emoji-1F91B-1F3FD { background-position: -760px -200px; }
+.emoji-1F91B-1F3FE { background-position: -760px -220px; }
+.emoji-1F91B-1F3FF { background-position: -760px -240px; }
+.emoji-1F91C { background-position: -760px -260px; }
+.emoji-1F91C-1F3FB { background-position: -760px -280px; }
+.emoji-1F91C-1F3FC { background-position: -760px -300px; }
+.emoji-1F91C-1F3FD { background-position: -760px -320px; }
+.emoji-1F91C-1F3FE { background-position: -760px -340px; }
+.emoji-1F91C-1F3FF { background-position: -760px -360px; }
+.emoji-1F91D { background-position: -760px -380px; }
+.emoji-1F91D-1F3FB { background-position: -760px -400px; }
+.emoji-1F91D-1F3FC { background-position: -760px -420px; }
+.emoji-1F91D-1F3FD { background-position: -760px -440px; }
+.emoji-1F91D-1F3FE { background-position: -760px -460px; }
+.emoji-1F91D-1F3FF { background-position: -760px -480px; }
+.emoji-1F91E { background-position: -760px -500px; }
+.emoji-1F91E-1F3FB { background-position: -760px -520px; }
+.emoji-1F91E-1F3FC { background-position: -760px -540px; }
+.emoji-1F91E-1F3FD { background-position: -760px -560px; }
+.emoji-1F91E-1F3FE { background-position: -760px -580px; }
+.emoji-1F91E-1F3FF { background-position: -760px -600px; }
+.emoji-1F920 { background-position: -760px -620px; }
+.emoji-1F921 { background-position: -760px -640px; }
+.emoji-1F922 { background-position: -760px -660px; }
+.emoji-1F923 { background-position: -760px -680px; }
+.emoji-1F924 { background-position: -760px -700px; }
+.emoji-1F925 { background-position: -760px -720px; }
+.emoji-1F926 { background-position: -760px -740px; }
+.emoji-1F926-1F3FB { background-position: 0 -760px; }
+.emoji-1F926-1F3FC { background-position: -20px -760px; }
+.emoji-1F926-1F3FD { background-position: -40px -760px; }
+.emoji-1F926-1F3FE { background-position: -60px -760px; }
+.emoji-1F926-1F3FF { background-position: -80px -760px; }
+.emoji-1F927 { background-position: -100px -760px; }
+.emoji-1F930 { background-position: -120px -760px; }
+.emoji-1F930-1F3FB { background-position: -140px -760px; }
+.emoji-1F930-1F3FC { background-position: -160px -760px; }
+.emoji-1F930-1F3FD { background-position: -180px -760px; }
+.emoji-1F930-1F3FE { background-position: -200px -760px; }
+.emoji-1F930-1F3FF { background-position: -220px -760px; }
+.emoji-1F933 { background-position: -240px -760px; }
+.emoji-1F933-1F3FB { background-position: -260px -760px; }
+.emoji-1F933-1F3FC { background-position: -280px -760px; }
+.emoji-1F933-1F3FD { background-position: -300px -760px; }
+.emoji-1F933-1F3FE { background-position: -320px -760px; }
+.emoji-1F933-1F3FF { background-position: -340px -760px; }
+.emoji-1F934 { background-position: -360px -760px; }
+.emoji-1F934-1F3FB { background-position: -380px -760px; }
+.emoji-1F934-1F3FC { background-position: -400px -760px; }
+.emoji-1F934-1F3FD { background-position: -420px -760px; }
+.emoji-1F934-1F3FE { background-position: -440px -760px; }
+.emoji-1F934-1F3FF { background-position: -460px -760px; }
+.emoji-1F935 { background-position: -480px -760px; }
+.emoji-1F935-1F3FB { background-position: -500px -760px; }
+.emoji-1F935-1F3FC { background-position: -520px -760px; }
+.emoji-1F935-1F3FD { background-position: -540px -760px; }
+.emoji-1F935-1F3FE { background-position: -560px -760px; }
+.emoji-1F935-1F3FF { background-position: -580px -760px; }
+.emoji-1F936 { background-position: -600px -760px; }
+.emoji-1F936-1F3FB { background-position: -620px -760px; }
+.emoji-1F936-1F3FC { background-position: -640px -760px; }
+.emoji-1F936-1F3FD { background-position: -660px -760px; }
+.emoji-1F936-1F3FE { background-position: -680px -760px; }
+.emoji-1F936-1F3FF { background-position: -700px -760px; }
+.emoji-1F937 { background-position: -720px -760px; }
+.emoji-1F937-1F3FB { background-position: -740px -760px; }
+.emoji-1F937-1F3FC { background-position: -760px -760px; }
+.emoji-1F937-1F3FD { background-position: -780px 0; }
+.emoji-1F937-1F3FE { background-position: -780px -20px; }
+.emoji-1F937-1F3FF { background-position: -780px -40px; }
+.emoji-1F938 { background-position: -780px -60px; }
+.emoji-1F938-1F3FB { background-position: -780px -80px; }
+.emoji-1F938-1F3FC { background-position: -780px -100px; }
+.emoji-1F938-1F3FD { background-position: -780px -120px; }
+.emoji-1F938-1F3FE { background-position: -780px -140px; }
+.emoji-1F938-1F3FF { background-position: -780px -160px; }
+.emoji-1F939 { background-position: -780px -180px; }
+.emoji-1F939-1F3FB { background-position: -780px -200px; }
+.emoji-1F939-1F3FC { background-position: -780px -220px; }
+.emoji-1F939-1F3FD { background-position: -780px -240px; }
+.emoji-1F939-1F3FE { background-position: -780px -260px; }
+.emoji-1F939-1F3FF { background-position: -780px -280px; }
+.emoji-1F93A { background-position: -780px -300px; }
+.emoji-1F93C { background-position: -780px -320px; }
+.emoji-1F93C-1F3FB { background-position: -780px -340px; }
+.emoji-1F93C-1F3FC { background-position: -780px -360px; }
+.emoji-1F93C-1F3FD { background-position: -780px -380px; }
+.emoji-1F93C-1F3FE { background-position: -780px -400px; }
+.emoji-1F93C-1F3FF { background-position: -780px -420px; }
+.emoji-1F93D { background-position: -780px -440px; }
+.emoji-1F93D-1F3FB { background-position: -780px -460px; }
+.emoji-1F93D-1F3FC { background-position: -780px -480px; }
+.emoji-1F93D-1F3FD { background-position: -780px -500px; }
+.emoji-1F93D-1F3FE { background-position: -780px -520px; }
+.emoji-1F93D-1F3FF { background-position: -780px -540px; }
+.emoji-1F93E { background-position: -780px -560px; }
+.emoji-1F93E-1F3FB { background-position: -780px -580px; }
+.emoji-1F93E-1F3FC { background-position: -780px -600px; }
+.emoji-1F93E-1F3FD { background-position: -780px -620px; }
+.emoji-1F93E-1F3FE { background-position: -780px -640px; }
+.emoji-1F93E-1F3FF { background-position: -780px -660px; }
+.emoji-1F940 { background-position: -780px -680px; }
+.emoji-1F941 { background-position: -780px -700px; }
+.emoji-1F942 { background-position: -780px -720px; }
+.emoji-1F943 { background-position: -780px -740px; }
+.emoji-1F944 { background-position: -780px -760px; }
+.emoji-1F945 { background-position: 0 -780px; }
+.emoji-1F947 { background-position: -20px -780px; }
+.emoji-1F948 { background-position: -40px -780px; }
+.emoji-1F949 { background-position: -60px -780px; }
+.emoji-1F94A { background-position: -80px -780px; }
+.emoji-1F94B { background-position: -100px -780px; }
+.emoji-1F950 { background-position: -120px -780px; }
+.emoji-1F951 { background-position: -140px -780px; }
+.emoji-1F952 { background-position: -160px -780px; }
+.emoji-1F953 { background-position: -180px -780px; }
+.emoji-1F954 { background-position: -200px -780px; }
+.emoji-1F955 { background-position: -220px -780px; }
+.emoji-1F956 { background-position: -240px -780px; }
+.emoji-1F957 { background-position: -260px -780px; }
+.emoji-1F958 { background-position: -280px -780px; }
+.emoji-1F959 { background-position: -300px -780px; }
+.emoji-1F95A { background-position: -320px -780px; }
+.emoji-1F95B { background-position: -340px -780px; }
+.emoji-1F95C { background-position: -360px -780px; }
+.emoji-1F95D { background-position: -380px -780px; }
+.emoji-1F95E { background-position: -400px -780px; }
+.emoji-1F980 { background-position: -420px -780px; }
+.emoji-1F981 { background-position: -440px -780px; }
+.emoji-1F982 { background-position: -460px -780px; }
+.emoji-1F983 { background-position: -480px -780px; }
+.emoji-1F984 { background-position: -500px -780px; }
+.emoji-1F985 { background-position: -520px -780px; }
+.emoji-1F986 { background-position: -540px -780px; }
+.emoji-1F987 { background-position: -560px -780px; }
+.emoji-1F988 { background-position: -580px -780px; }
+.emoji-1F989 { background-position: -600px -780px; }
+.emoji-1F98A { background-position: -620px -780px; }
+.emoji-1F98B { background-position: -640px -780px; }
+.emoji-1F98C { background-position: -660px -780px; }
+.emoji-1F98D { background-position: -680px -780px; }
+.emoji-1F98E { background-position: -700px -780px; }
+.emoji-1F98F { background-position: -720px -780px; }
+.emoji-1F990 { background-position: -740px -780px; }
+.emoji-1F991 { background-position: -760px -780px; }
+.emoji-1F9C0 { background-position: -780px -780px; }
+.emoji-203C { background-position: -800px 0; }
+.emoji-2049 { background-position: -800px -20px; }
+.emoji-2122 { background-position: -800px -40px; }
+.emoji-2139 { background-position: -800px -60px; }
+.emoji-2194 { background-position: -800px -80px; }
+.emoji-2195 { background-position: -800px -100px; }
+.emoji-2196 { background-position: -800px -120px; }
+.emoji-2197 { background-position: -800px -140px; }
+.emoji-2198 { background-position: -800px -160px; }
+.emoji-2199 { background-position: -800px -180px; }
+.emoji-21A9 { background-position: -800px -200px; }
+.emoji-21AA { background-position: -800px -220px; }
+.emoji-231A { background-position: -800px -240px; }
+.emoji-231B { background-position: -800px -260px; }
+.emoji-2328 { background-position: -800px -280px; }
+.emoji-23CF { background-position: -800px -300px; }
+.emoji-23E9 { background-position: -800px -320px; }
+.emoji-23EA { background-position: -800px -340px; }
+.emoji-23EB { background-position: -800px -360px; }
+.emoji-23EC { background-position: -800px -380px; }
+.emoji-23ED { background-position: -800px -400px; }
+.emoji-23EE { background-position: -800px -420px; }
+.emoji-23EF { background-position: -800px -440px; }
+.emoji-23F0 { background-position: -800px -460px; }
+.emoji-23F1 { background-position: -800px -480px; }
+.emoji-23F2 { background-position: -800px -500px; }
+.emoji-23F3 { background-position: -800px -520px; }
+.emoji-23F8 { background-position: -800px -540px; }
+.emoji-23F9 { background-position: -800px -560px; }
+.emoji-23FA { background-position: -800px -580px; }
+.emoji-24C2 { background-position: -800px -600px; }
+.emoji-25AA { background-position: -800px -620px; }
+.emoji-25AB { background-position: -800px -640px; }
+.emoji-25B6 { background-position: -800px -660px; }
+.emoji-25C0 { background-position: -800px -680px; }
+.emoji-25FB { background-position: -800px -700px; }
+.emoji-25FC { background-position: -800px -720px; }
+.emoji-25FD { background-position: -800px -740px; }
+.emoji-25FE { background-position: -800px -760px; }
+.emoji-2600 { background-position: -800px -780px; }
+.emoji-2601 { background-position: 0 -800px; }
+.emoji-2602 { background-position: -20px -800px; }
+.emoji-2603 { background-position: -40px -800px; }
+.emoji-2604 { background-position: -60px -800px; }
+.emoji-260E { background-position: -80px -800px; }
+.emoji-2611 { background-position: -100px -800px; }
+.emoji-2614 { background-position: -120px -800px; }
+.emoji-2615 { background-position: -140px -800px; }
+.emoji-2618 { background-position: -160px -800px; }
+.emoji-261D { background-position: -180px -800px; }
+.emoji-261D-1F3FB { background-position: -200px -800px; }
+.emoji-261D-1F3FC { background-position: -220px -800px; }
+.emoji-261D-1F3FD { background-position: -240px -800px; }
+.emoji-261D-1F3FE { background-position: -260px -800px; }
+.emoji-261D-1F3FF { background-position: -280px -800px; }
+.emoji-2620 { background-position: -300px -800px; }
+.emoji-2622 { background-position: -320px -800px; }
+.emoji-2623 { background-position: -340px -800px; }
+.emoji-2626 { background-position: -360px -800px; }
+.emoji-262A { background-position: -380px -800px; }
+.emoji-262E { background-position: -400px -800px; }
+.emoji-262F { background-position: -420px -800px; }
+.emoji-2638 { background-position: -440px -800px; }
+.emoji-2639 { background-position: -460px -800px; }
+.emoji-263A { background-position: -480px -800px; }
+.emoji-2648 { background-position: -500px -800px; }
+.emoji-2649 { background-position: -520px -800px; }
+.emoji-264A { background-position: -540px -800px; }
+.emoji-264B { background-position: -560px -800px; }
+.emoji-264C { background-position: -580px -800px; }
+.emoji-264D { background-position: -600px -800px; }
+.emoji-264E { background-position: -620px -800px; }
+.emoji-264F { background-position: -640px -800px; }
+.emoji-2650 { background-position: -660px -800px; }
+.emoji-2651 { background-position: -680px -800px; }
+.emoji-2652 { background-position: -700px -800px; }
+.emoji-2653 { background-position: -720px -800px; }
+.emoji-2660 { background-position: -740px -800px; }
+.emoji-2663 { background-position: -760px -800px; }
+.emoji-2665 { background-position: -780px -800px; }
+.emoji-2666 { background-position: -800px -800px; }
+.emoji-2668 { background-position: -820px 0; }
+.emoji-267B { background-position: -820px -20px; }
+.emoji-267F { background-position: -820px -40px; }
+.emoji-2692 { background-position: -820px -60px; }
+.emoji-2693 { background-position: -820px -80px; }
+.emoji-2694 { background-position: -820px -100px; }
+.emoji-2696 { background-position: -820px -120px; }
+.emoji-2697 { background-position: -820px -140px; }
+.emoji-2699 { background-position: -820px -160px; }
+.emoji-269B { background-position: -820px -180px; }
+.emoji-269C { background-position: -820px -200px; }
+.emoji-26A0 { background-position: -820px -220px; }
+.emoji-26A1 { background-position: -820px -240px; }
+.emoji-26AA { background-position: -820px -260px; }
+.emoji-26AB { background-position: -820px -280px; }
+.emoji-26B0 { background-position: -820px -300px; }
+.emoji-26B1 { background-position: -820px -320px; }
+.emoji-26BD { background-position: -820px -340px; }
+.emoji-26BE { background-position: -820px -360px; }
+.emoji-26C4 { background-position: -820px -380px; }
+.emoji-26C5 { background-position: -820px -400px; }
+.emoji-26C8 { background-position: -820px -420px; }
+.emoji-26CE { background-position: -820px -440px; }
+.emoji-26CF { background-position: -820px -460px; }
+.emoji-26D1 { background-position: -820px -480px; }
+.emoji-26D3 { background-position: -820px -500px; }
+.emoji-26D4 { background-position: -820px -520px; }
+.emoji-26E9 { background-position: -820px -540px; }
+.emoji-26EA { background-position: -820px -560px; }
+.emoji-26F0 { background-position: -820px -580px; }
+.emoji-26F1 { background-position: -820px -600px; }
+.emoji-26F2 { background-position: -820px -620px; }
+.emoji-26F3 { background-position: -820px -640px; }
+.emoji-26F4 { background-position: -820px -660px; }
+.emoji-26F5 { background-position: -820px -680px; }
+.emoji-26F7 { background-position: -820px -700px; }
+.emoji-26F8 { background-position: -820px -720px; }
+.emoji-26F9 { background-position: -820px -740px; }
+.emoji-26F9-1F3FB { background-position: -820px -760px; }
+.emoji-26F9-1F3FC { background-position: -820px -780px; }
+.emoji-26F9-1F3FD { background-position: -820px -800px; }
+.emoji-26F9-1F3FE { background-position: 0 -820px; }
+.emoji-26F9-1F3FF { background-position: -20px -820px; }
+.emoji-26FA { background-position: -40px -820px; }
+.emoji-26FD { background-position: -60px -820px; }
+.emoji-2702 { background-position: -80px -820px; }
+.emoji-2705 { background-position: -100px -820px; }
+.emoji-2708 { background-position: -120px -820px; }
+.emoji-2709 { background-position: -140px -820px; }
+.emoji-270A { background-position: -160px -820px; }
+.emoji-270A-1F3FB { background-position: -180px -820px; }
+.emoji-270A-1F3FC { background-position: -200px -820px; }
+.emoji-270A-1F3FD { background-position: -220px -820px; }
+.emoji-270A-1F3FE { background-position: -240px -820px; }
+.emoji-270A-1F3FF { background-position: -260px -820px; }
+.emoji-270B { background-position: -280px -820px; }
+.emoji-270B-1F3FB { background-position: -300px -820px; }
+.emoji-270B-1F3FC { background-position: -320px -820px; }
+.emoji-270B-1F3FD { background-position: -340px -820px; }
+.emoji-270B-1F3FE { background-position: -360px -820px; }
+.emoji-270B-1F3FF { background-position: -380px -820px; }
+.emoji-270C { background-position: -400px -820px; }
+.emoji-270C-1F3FB { background-position: -420px -820px; }
+.emoji-270C-1F3FC { background-position: -440px -820px; }
+.emoji-270C-1F3FD { background-position: -460px -820px; }
+.emoji-270C-1F3FE { background-position: -480px -820px; }
+.emoji-270C-1F3FF { background-position: -500px -820px; }
+.emoji-270D { background-position: -520px -820px; }
+.emoji-270D-1F3FB { background-position: -540px -820px; }
+.emoji-270D-1F3FC { background-position: -560px -820px; }
+.emoji-270D-1F3FD { background-position: -580px -820px; }
+.emoji-270D-1F3FE { background-position: -600px -820px; }
+.emoji-270D-1F3FF { background-position: -620px -820px; }
+.emoji-270F { background-position: -640px -820px; }
+.emoji-2712 { background-position: -660px -820px; }
+.emoji-2714 { background-position: -680px -820px; }
+.emoji-2716 { background-position: -700px -820px; }
+.emoji-271D { background-position: -720px -820px; }
+.emoji-2721 { background-position: -740px -820px; }
+.emoji-2728 { background-position: -760px -820px; }
+.emoji-2733 { background-position: -780px -820px; }
+.emoji-2734 { background-position: -800px -820px; }
+.emoji-2744 { background-position: -820px -820px; }
+.emoji-2747 { background-position: -840px 0; }
+.emoji-274C { background-position: -840px -20px; }
+.emoji-274E { background-position: -840px -40px; }
+.emoji-2753 { background-position: -840px -60px; }
+.emoji-2754 { background-position: -840px -80px; }
+.emoji-2755 { background-position: -840px -100px; }
+.emoji-2757 { background-position: -840px -120px; }
+.emoji-2763 { background-position: -840px -140px; }
+.emoji-2764 { background-position: -840px -160px; }
+.emoji-2795 { background-position: -840px -180px; }
+.emoji-2796 { background-position: -840px -200px; }
+.emoji-2797 { background-position: -840px -220px; }
+.emoji-27A1 { background-position: -840px -240px; }
+.emoji-27B0 { background-position: -840px -260px; }
+.emoji-27BF { background-position: -840px -280px; }
+.emoji-2934 { background-position: -840px -300px; }
+.emoji-2935 { background-position: -840px -320px; }
+.emoji-2B05 { background-position: -840px -340px; }
+.emoji-2B06 { background-position: -840px -360px; }
+.emoji-2B07 { background-position: -840px -380px; }
+.emoji-2B1B { background-position: -840px -400px; }
+.emoji-2B1C { background-position: -840px -420px; }
+.emoji-2B50 { background-position: -840px -440px; }
+.emoji-2B55 { background-position: -840px -460px; }
+.emoji-3030 { background-position: -840px -480px; }
+.emoji-303D { background-position: -840px -500px; }
+.emoji-3297 { background-position: -840px -520px; }
+.emoji-3299 { background-position: -840px -540px; }
.emoji-icon {
background-image: image-url('emoji.png');
@@ -1731,6 +1804,6 @@
only screen and (min-resolution: 192dpi),
only screen and (min-resolution: 2dppx) {
background-image: image-url('emoji@2x.png');
- background-size: 840px 820px;
+ background-size: 860px 840px;
}
}
diff --git a/app/assets/stylesheets/pages/groups.scss b/app/assets/stylesheets/pages/groups.scss
index 701b9388454..2a3acc3eb4c 100644
--- a/app/assets/stylesheets/pages/groups.scss
+++ b/app/assets/stylesheets/pages/groups.scss
@@ -38,33 +38,6 @@
margin-right: 15px;
}
}
-
- &.group-admin {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
-
- .group-avatar, .group-details, .group-controls {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- }
-
- .group-details {
- flex: 1 1 auto;
- flex-direction: column;
- min-width: 0;
- }
-
- .group-controls {
- align-items: center;
-
- a {
- margin-left: 5px;
- }
- }
- }
-
}
.ldap-group-links {
diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss
index 0e4d8c140aa..9807c5a808d 100644
--- a/app/assets/stylesheets/pages/issues.scss
+++ b/app/assets/stylesheets/pages/issues.scss
@@ -63,7 +63,7 @@ form.edit-issue {
.merge-request,
.issue {
&.today {
- background: #f8feef;
+ background: #f3fff2;
border-color: #e1e8d5;
}
diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss
index 15c6c9f231a..fbff0c97355 100644
--- a/app/assets/stylesheets/pages/merge_requests.scss
+++ b/app/assets/stylesheets/pages/merge_requests.scss
@@ -270,7 +270,7 @@
.item-title {
@media (min-width: $screen-sm-min) {
- width: 49%;
+ width: 45%;
}
}
diff --git a/app/assets/stylesheets/pages/pipelines.scss b/app/assets/stylesheets/pages/pipelines.scss
index e6ac3e54fac..a3b72ec9574 100644
--- a/app/assets/stylesheets/pages/pipelines.scss
+++ b/app/assets/stylesheets/pages/pipelines.scss
@@ -47,6 +47,13 @@
border-top-width: 1px;
}
+ .commit-link {
+
+ a:hover {
+ text-decoration: none;
+ }
+ }
+
.branch-commit {
.branch-name {
@@ -88,7 +95,12 @@
margin-left: 0;
}
+ .label {
+ margin-right: 4px;
+ }
+
.label-container {
+ font-size: 0;
.label {
margin-top: 5px;
@@ -138,6 +150,14 @@
color: $table-text-gray;
}
+ .cancel-retry-btns {
+ vertical-align: middle;
+
+ .btn:not(:first-child) {
+ margin-left: 8px;
+ }
+ }
+
.dropdown-toggle,
.dropdown-menu {
color: $table-text-gray;
diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss
index 5be911dc562..ea9f7cf0540 100644
--- a/app/assets/stylesheets/pages/projects.scss
+++ b/app/assets/stylesheets/pages/projects.scss
@@ -482,6 +482,10 @@ pre.light-well {
a:hover {
text-decoration: none;
}
+
+ > span {
+ margin-left: 10px;
+ }
}
}
@@ -639,3 +643,9 @@ pre.light-well {
width: 300px;
}
}
+
+.compare-form-group {
+ .dropdown-menu {
+ width: 300px;
+ }
+}
diff --git a/app/assets/stylesheets/pages/search.scss b/app/assets/stylesheets/pages/search.scss
index 9e9b18fdbb8..c9d436d72ba 100644
--- a/app/assets/stylesheets/pages/search.scss
+++ b/app/assets/stylesheets/pages/search.scss
@@ -185,7 +185,7 @@
padding-right: $gl-padding + 15px;
}
- .btn-search {
+ .btn-search, .btn-new {
width: 100%;
margin-top: 5px;
diff --git a/app/assets/stylesheets/pages/tree.scss b/app/assets/stylesheets/pages/tree.scss
index 5b61270daa8..390977297fb 100644
--- a/app/assets/stylesheets/pages/tree.scss
+++ b/app/assets/stylesheets/pages/tree.scss
@@ -19,16 +19,15 @@
border-top: 1px solid $table-border-gray;
td, th {
- line-height: 23px;
+ line-height: 21px;
}
&:hover {
- cursor: pointer;
-
td {
background-color: $row-hover;
border-top: 1px solid $row-hover-border;
border-bottom: 1px solid $row-hover-border;
+ cursor: pointer;
}
}
diff --git a/app/controllers/admin/builds_controller.rb b/app/controllers/admin/builds_controller.rb
index 0db91eaaf2e..88f3c0e2fd4 100644
--- a/app/controllers/admin/builds_controller.rb
+++ b/app/controllers/admin/builds_controller.rb
@@ -5,8 +5,10 @@ class Admin::BuildsController < Admin::ApplicationController
@builds = @all_builds.order('created_at DESC')
@builds =
case @scope
+ when 'pending'
+ @builds.pending.reverse_order
when 'running'
- @builds.running_or_pending.reverse_order
+ @builds.running.reverse_order
when 'finished'
@builds.finished
else
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 9cc31620d9f..a1004d9bcea 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -344,10 +344,6 @@ class ApplicationController < ActionController::Base
session[:skip_tfa] && session[:skip_tfa] > Time.current
end
- def browser_supports_u2f?
- browser.chrome? && browser.version.to_i >= 41 && !browser.device.mobile?
- end
-
def redirect_to_home_page_url?
# If user is not signed-in and tries to access root_path - redirect him to landing page
# Don't redirect to the default URL to prevent endless redirections
diff --git a/app/controllers/concerns/authenticates_with_two_factor.rb b/app/controllers/concerns/authenticates_with_two_factor.rb
index 998b8adc411..ba07cea569c 100644
--- a/app/controllers/concerns/authenticates_with_two_factor.rb
+++ b/app/controllers/concerns/authenticates_with_two_factor.rb
@@ -57,7 +57,7 @@ module AuthenticatesWithTwoFactor
# Authenticate using the response from a U2F (universal 2nd factor) device
def authenticate_with_two_factor_via_u2f(user)
- if U2fRegistration.authenticate(user, u2f_app_id, user_params[:device_response], session[:challenges])
+ if U2fRegistration.authenticate(user, u2f_app_id, user_params[:device_response], session[:challenge])
# Remove any lingering user data from login
session.delete(:otp_user_id)
session.delete(:challenges)
@@ -77,11 +77,9 @@ module AuthenticatesWithTwoFactor
if key_handles.present?
sign_requests = u2f.authentication_requests(key_handles)
- challenges = sign_requests.map(&:challenge)
- session[:challenges] = challenges
- gon.push(u2f: { challenges: challenges, app_id: u2f_app_id,
- sign_requests: sign_requests,
- browser_supports_u2f: browser_supports_u2f? })
+ session[:challenge] ||= u2f.challenge
+ gon.push(u2f: { challenge: session[:challenge], app_id: u2f_app_id,
+ sign_requests: sign_requests })
end
end
end
diff --git a/app/controllers/concerns/diff_for_path.rb b/app/controllers/concerns/diff_for_path.rb
index e09b8789eb2..026d8b2e1e0 100644
--- a/app/controllers/concerns/diff_for_path.rb
+++ b/app/controllers/concerns/diff_for_path.rb
@@ -10,7 +10,6 @@ module DiffForPath
diff_commit = commit_for_diff(diff_file)
blob = diff_file.blob(diff_commit)
- @expand_all_diffs = true
locals = {
diff_file: diff_file,
diff --git a/app/controllers/profiles/two_factor_auths_controller.rb b/app/controllers/profiles/two_factor_auths_controller.rb
index 6a358fdcc05..e37e9e136db 100644
--- a/app/controllers/profiles/two_factor_auths_controller.rb
+++ b/app/controllers/profiles/two_factor_auths_controller.rb
@@ -100,7 +100,6 @@ class Profiles::TwoFactorAuthsController < Profiles::ApplicationController
gon.push(u2f: { challenges: session[:challenges], app_id: u2f_app_id,
register_requests: registration_requests,
- sign_requests: sign_requests,
- browser_supports_u2f: browser_supports_u2f? })
+ sign_requests: sign_requests })
end
end
diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb
index ef3051d7519..d7513d75f01 100644
--- a/app/controllers/projects/builds_controller.rb
+++ b/app/controllers/projects/builds_controller.rb
@@ -10,8 +10,10 @@ class Projects::BuildsController < Projects::ApplicationController
@builds = @all_builds.order('created_at DESC')
@builds =
case @scope
+ when 'pending'
+ @builds.pending.reverse_order
when 'running'
- @builds.running_or_pending.reverse_order
+ @builds.running.reverse_order
when 'finished'
@builds.finished
else
diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb
index f7ada5cfee4..fa663c9bda4 100644
--- a/app/controllers/projects/issues_controller.rb
+++ b/app/controllers/projects/issues_controller.rb
@@ -119,10 +119,6 @@ class Projects::IssuesController < Projects::ApplicationController
render json: @issue.to_json(include: { milestone: {}, assignee: { methods: :avatar_url }, labels: { methods: :text_color } })
end
end
-
- rescue ActiveRecord::StaleObjectError
- @conflict = true
- render :edit
end
def referenced_merge_requests
@@ -220,7 +216,7 @@ class Projects::IssuesController < Projects::ApplicationController
def issue_params
params.require(:issue).permit(
:title, :assignee_id, :position, :description, :confidential,
- :milestone_id, :due_date, :state_event, :task_num, :lock_version, label_ids: []
+ :milestone_id, :due_date, :state_event, :task_num, label_ids: []
)
end
@@ -230,6 +226,7 @@ class Projects::IssuesController < Projects::ApplicationController
:assignee_id,
:milestone_id,
:state_event,
+ :subscription_event,
label_ids: [],
add_label_ids: [],
remove_label_ids: []
diff --git a/app/controllers/projects/merge_requests_controller.rb b/app/controllers/projects/merge_requests_controller.rb
index 2deb7959700..df659bb8c3b 100644
--- a/app/controllers/projects/merge_requests_controller.rb
+++ b/app/controllers/projects/merge_requests_controller.rb
@@ -196,9 +196,6 @@ class Projects::MergeRequestsController < Projects::ApplicationController
else
render "edit"
end
- rescue ActiveRecord::StaleObjectError
- @conflict = true
- render :edit
end
def remove_wip
@@ -427,7 +424,7 @@ class Projects::MergeRequestsController < Projects::ApplicationController
:title, :assignee_id, :source_project_id, :source_branch,
:target_project_id, :target_branch, :milestone_id,
:state_event, :description, :task_num, :force_remove_source_branch,
- :lock_version, label_ids: []
+ label_ids: []
)
end
diff --git a/app/controllers/projects/protected_branches_controller.rb b/app/controllers/projects/protected_branches_controller.rb
index 80dad758afa..10dca47fded 100644
--- a/app/controllers/projects/protected_branches_controller.rb
+++ b/app/controllers/projects/protected_branches_controller.rb
@@ -50,6 +50,6 @@ class Projects::ProtectedBranchesController < Projects::ApplicationController
end
def protected_branch_params
- params.require(:protected_branch).permit(:name, :developers_can_push)
+ params.require(:protected_branch).permit(:name, :developers_can_push, :developers_can_merge)
end
end
diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb
index 739681f4085..1b91882048e 100644
--- a/app/controllers/projects/services_controller.rb
+++ b/app/controllers/projects/services_controller.rb
@@ -45,8 +45,9 @@ class Projects::ServicesController < Projects::ApplicationController
end
def test
- data = Gitlab::PushDataBuilder.build_sample(project, current_user)
+ data = @service.test_data(project, current_user)
outcome = @service.test(data)
+
if outcome[:success]
message = { notice: 'We sent a request to the provided URL' }
else
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index 1803aa8eab4..4e5bcff9cf8 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -5,7 +5,7 @@ class ProjectsController < Projects::ApplicationController
before_action :project, except: [:new, :create]
before_action :repository, except: [:new, :create]
before_action :assign_ref_vars, only: [:show], if: :repo_exists?
- before_action :tree, only: [:show], if: :project_view_files?
+ before_action :tree, only: [:show], if: [:repo_exists?, :project_view_files?]
# Authorize
before_action :authorize_admin_project!, only: [:edit, :update, :housekeeping, :download_export, :export, :remove_export, :generate_new_export]
diff --git a/app/helpers/blob_helper.rb b/app/helpers/blob_helper.rb
index 428a42266d0..abe115d8c68 100644
--- a/app/helpers/blob_helper.rb
+++ b/app/helpers/blob_helper.rb
@@ -1,10 +1,7 @@
module BlobHelper
- def highlighter(blob_name, blob_content, repository: nil, nowrap: false)
- Gitlab::Highlight.new(blob_name, blob_content, nowrap: nowrap, repository: repository)
- end
-
- def highlight(blob_name, blob_content, repository: nil, nowrap: false, plain: false)
- Gitlab::Highlight.highlight(blob_name, blob_content, nowrap: nowrap, plain: plain, repository: repository)
+ def highlight(blob_name, blob_content, repository: nil, plain: false)
+ highlighted = Gitlab::Highlight.highlight(blob_name, blob_content, plain: plain, repository: repository)
+ raw %(<pre class="code highlight"><code>#{highlighted}</code></pre>)
end
def no_highlight_files
diff --git a/app/helpers/branches_helper.rb b/app/helpers/branches_helper.rb
index 601df5c18df..bfd23aa4e04 100644
--- a/app/helpers/branches_helper.rb
+++ b/app/helpers/branches_helper.rb
@@ -12,7 +12,7 @@ module BranchesHelper
def can_push_branch?(project, branch_name)
return false unless project.repository.branch_exists?(branch_name)
- ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(branch_name)
+ ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(branch_name)
end
def project_branches
diff --git a/app/helpers/diff_helper.rb b/app/helpers/diff_helper.rb
index adab901700c..75b029365f9 100644
--- a/app/helpers/diff_helper.rb
+++ b/app/helpers/diff_helper.rb
@@ -9,7 +9,7 @@ module DiffHelper
end
def expand_all_diffs?
- @expand_all_diffs || params[:expand_all_diffs].present?
+ params[:expand_all_diffs].present?
end
def diff_view
@@ -23,13 +23,14 @@ module DiffHelper
end
def diff_options
- default_options = Commit.max_diff_options
+ options = { ignore_whitespace_change: hide_whitespace?, no_collapse: expand_all_diffs? }
if action_name == 'diff_for_path'
- default_options[:paths] = params.values_at(:old_path, :new_path)
+ options[:no_collapse] = true
+ options[:paths] = params.values_at(:old_path, :new_path)
end
- default_options.merge(ignore_whitespace_change: hide_whitespace?)
+ Commit.max_diff_options.merge(options)
end
def safe_diff_files(diffs, diff_refs: nil, repository: nil)
diff --git a/app/helpers/issuables_helper.rb b/app/helpers/issuables_helper.rb
index 294b7e92b8d..47d174361db 100644
--- a/app/helpers/issuables_helper.rb
+++ b/app/helpers/issuables_helper.rb
@@ -61,7 +61,7 @@ module IssuablesHelper
output = content_tag :strong, "#{text} #{issuable.to_reference}", class: "identifier"
output << " opened #{time_ago_with_tooltip(issuable.created_at)} by ".html_safe
output << content_tag(:strong) do
- author_output = link_to_member(project, issuable.author, size: 24, mobile_classes: "hidden-xs")
+ author_output = link_to_member(project, issuable.author, size: 24, mobile_classes: "hidden-xs", tooltip: true)
author_output << link_to_member(project, issuable.author, size: 24, by_username: true, avatar: false, mobile_classes: "hidden-sm hidden-md hidden-lg")
end
end
diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb
index 3bbbb26cff2..a733dff1579 100644
--- a/app/helpers/projects_helper.rb
+++ b/app/helpers/projects_helper.rb
@@ -19,7 +19,7 @@ module ProjectsHelper
end
def link_to_member(project, author, opts = {}, &block)
- default_opts = { avatar: true, name: true, size: 16, author_class: 'author', title: ":name" }
+ default_opts = { avatar: true, name: true, size: 16, author_class: 'author', title: ":name", tooltip: false }
opts = default_opts.merge(opts)
return "(deleted)" unless author
@@ -33,7 +33,8 @@ module ProjectsHelper
if opts[:by_username]
author_html << content_tag(:span, sanitize("@#{author.username}"), class: opts[:author_class]) if opts[:name]
else
- author_html << content_tag(:span, sanitize(author.name), class: opts[:author_class]) if opts[:name]
+ tooltip_data = { placement: 'top' }
+ author_html << content_tag(:span, sanitize(author.name), class: [opts[:author_class], ('has-tooltip' if opts[:tooltip])], title: (author.to_reference if opts[:tooltip]), data: (tooltip_data if opts[:tooltip])) if opts[:name]
end
author_html << capture(&block) if block
@@ -60,7 +61,7 @@ module ProjectsHelper
project_link = link_to simple_sanitize(project.name), project_path(project), { class: "project-item-select-holder" }
if current_user
- project_link << icon("chevron-down", class: "dropdown-toggle-caret js-projects-dropdown-toggle", data: { target: ".js-dropdown-menu-projects", toggle: "dropdown" })
+ project_link << icon("chevron-down", class: "dropdown-toggle-caret js-projects-dropdown-toggle", aria: { label: "Toggle switch project dropdown" }, data: { target: ".js-dropdown-menu-projects", toggle: "dropdown" })
end
full_title = "#{namespace_link} / #{project_link}".html_safe
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index b165b569372..fcb2703e837 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -45,7 +45,7 @@ module SearchHelper
[
{ category: "Help", label: "API Help", url: help_page_path("api/README") },
{ category: "Help", label: "Markdown Help", url: help_page_path("markdown/markdown") },
- { category: "Help", label: "Permissions Help", url: help_page_path("permissions/permissions") },
+ { category: "Help", label: "Permissions Help", url: help_page_path("user/permissions") },
{ category: "Help", label: "Public Access Help", url: help_page_path("public_access/public_access") },
{ category: "Help", label: "Rake Tasks Help", url: help_page_path("raketasks/README") },
{ category: "Help", label: "SSH Keys Help", url: help_page_path("ssh/README") },
diff --git a/app/helpers/u2f_helper.rb b/app/helpers/u2f_helper.rb
new file mode 100644
index 00000000000..143b4ca6b51
--- /dev/null
+++ b/app/helpers/u2f_helper.rb
@@ -0,0 +1,5 @@
+module U2fHelper
+ def inject_u2f_api?
+ browser.chrome? && browser.version.to_i >= 41 && !browser.device.mobile?
+ end
+end
diff --git a/app/mailers/emails/builds.rb b/app/mailers/emails/builds.rb
index 2f86d1be576..3853af6201a 100644
--- a/app/mailers/emails/builds.rb
+++ b/app/mailers/emails/builds.rb
@@ -6,6 +6,7 @@ module Emails
add_project_headers
add_build_headers('failed')
+
mail(to: to, subject: subject("Build failed for #{@project.name}", @build.short_sha))
end
diff --git a/app/models/ability.rb b/app/models/ability.rb
index eeb0ceba081..6fd18f2ee24 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -204,7 +204,8 @@ class Ability
:download_code,
:fork_project,
:read_commit_status,
- :read_pipeline
+ :read_pipeline,
+ :read_container_image
]
end
diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb
index e189dbac285..ffac3a22efc 100644
--- a/app/models/ci/build.rb
+++ b/app/models/ci/build.rb
@@ -5,6 +5,7 @@ module Ci
belongs_to :erased_by, class_name: 'User'
serialize :options
+ serialize :yaml_variables
validates :coverage, numericality: true, allow_blank: true
validates_presence_of :ref
@@ -52,7 +53,10 @@ module Ci
new_build.stage = build.stage
new_build.stage_idx = build.stage_idx
new_build.trigger_request = build.trigger_request
+ new_build.yaml_variables = build.yaml_variables
+ new_build.when = build.when
new_build.user = user
+ new_build.environment = build.environment
new_build.save
MergeRequests::AddTodoWhenBuildFailsService.new(build.project, nil).close(new_build)
new_build
@@ -117,7 +121,12 @@ module Ci
end
def variables
- predefined_variables + yaml_variables + project_variables + trigger_variables
+ variables = []
+ variables += predefined_variables
+ variables += yaml_variables if yaml_variables
+ variables += project_variables
+ variables += trigger_variables
+ variables
end
def merge_request
@@ -394,30 +403,6 @@ module Ci
self.update(erased_by: user, erased_at: Time.now, artifacts_expire_at: nil)
end
- def yaml_variables
- global_yaml_variables + job_yaml_variables
- end
-
- def global_yaml_variables
- if pipeline.config_processor
- pipeline.config_processor.global_variables.map do |key, value|
- { key: key, value: value, public: true }
- end
- else
- []
- end
- end
-
- def job_yaml_variables
- if pipeline.config_processor
- pipeline.config_processor.job_variables(name).map do |key, value|
- { key: key, value: value, public: true }
- end
- else
- []
- end
- end
-
def project_variables
project.variables.map do |variable|
{ key: variable.key, value: variable.value, public: false }
diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index fa4071e2482..a65a826536d 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -6,6 +6,8 @@ module Ci
self.table_name = 'ci_commits'
belongs_to :project, class_name: '::Project', foreign_key: :gl_project_id
+ belongs_to :user
+
has_many :statuses, class_name: 'CommitStatus', foreign_key: :commit_id
has_many :builds, class_name: 'Ci::Build', foreign_key: :commit_id
has_many :trigger_requests, dependent: :destroy, class_name: 'Ci::TriggerRequest', foreign_key: :commit_id
@@ -49,6 +51,10 @@ module Ci
commit.try(:message)
end
+ def git_commit_title
+ commit.try(:title)
+ end
+
def short_sha
Ci::Pipeline.truncate_sha(sha)
end
@@ -215,6 +221,8 @@ module Ci
end
def keep_around_commits
+ return unless project
+
project.repository.keep_around(self.sha)
project.repository.keep_around(self.before_sha)
end
diff --git a/app/models/concerns/awardable.rb b/app/models/concerns/awardable.rb
index 06beff177b1..800a16ab246 100644
--- a/app/models/concerns/awardable.rb
+++ b/app/models/concerns/awardable.rb
@@ -65,8 +65,7 @@ module Awardable
def create_award_emoji(name, current_user)
return unless emoji_awardable?
-
- award_emoji.create(name: name, user: current_user)
+ award_emoji.create(name: normalize_name(name), user: current_user)
end
def remove_award_emoji(name, current_user)
@@ -80,4 +79,10 @@ module Awardable
create_award_emoji(emoji_name, current_user)
end
end
+
+ private
+
+ def normalize_name(name)
+ Gitlab::AwardEmoji.normalize_emoji_name(name)
+ end
end
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb
index fb49bd7dd64..acb6f5a2998 100644
--- a/app/models/concerns/issuable.rb
+++ b/app/models/concerns/issuable.rb
@@ -87,12 +87,6 @@ module Issuable
User.find(assignee_id_was).update_cache_counts if assignee_id_was
assignee.update_cache_counts if assignee
end
-
- # We want to use optimistic lock for cases when only title or description are involved
- # http://api.rubyonrails.org/classes/ActiveRecord/Locking/Optimistic.html
- def locking_enabled?
- title_changed? || description_changed?
- end
end
module ClassMethods
diff --git a/app/models/concerns/mentionable.rb b/app/models/concerns/mentionable.rb
index 8cac47246db..ec9e0f1b1d0 100644
--- a/app/models/concerns/mentionable.rb
+++ b/app/models/concerns/mentionable.rb
@@ -14,14 +14,14 @@ module Mentionable
attr = attr.to_s
mentionable_attrs << [attr, options]
end
+ end
+ included do
# Accessor for attributes marked mentionable.
- def mentionable_attrs
- @mentionable_attrs ||= []
+ cattr_accessor :mentionable_attrs, instance_accessor: false do
+ []
end
- end
- included do
if self < Participable
participant -> (user, ext) { all_references(user, extractor: ext) }
end
diff --git a/app/models/concerns/participable.rb b/app/models/concerns/participable.rb
index 9822844357d..70740c76e43 100644
--- a/app/models/concerns/participable.rb
+++ b/app/models/concerns/participable.rb
@@ -41,9 +41,12 @@ module Participable
def participant(attr)
participant_attrs << attr
end
+ end
- def participant_attrs
- @participant_attrs ||= []
+ included do
+ # Accessor for participant attributes.
+ cattr_accessor :participant_attrs, instance_accessor: false do
+ []
end
end
diff --git a/app/models/legacy_diff_note.rb b/app/models/legacy_diff_note.rb
index 790dfd4d480..04a651d50ab 100644
--- a/app/models/legacy_diff_note.rb
+++ b/app/models/legacy_diff_note.rb
@@ -38,7 +38,7 @@ class LegacyDiffNote < Note
end
def diff_line
- @diff_line ||= diff_file.line_for_line_code(self.line_code)
+ @diff_line ||= diff_file.line_for_line_code(self.line_code) if diff_file
end
def for_line?(line)
@@ -55,7 +55,7 @@ class LegacyDiffNote < Note
def active?
return @active if defined?(@active)
return true if for_commit?
- return true unless self.diff
+ return true unless diff_line
return false unless noteable
noteable_diff = find_noteable_diff
diff --git a/app/models/merge_request.rb b/app/models/merge_request.rb
index 157901378d3..471e32f3b60 100644
--- a/app/models/merge_request.rb
+++ b/app/models/merge_request.rb
@@ -552,7 +552,13 @@ class MergeRequest < ActiveRecord::Base
end
def can_be_merged_by?(user)
- ::Gitlab::GitAccess.new(user, project, 'web').can_push_to_branch?(target_branch)
+ access = ::Gitlab::UserAccess.new(user, project: project)
+ access.can_push_to_branch?(target_branch) || access.can_merge_to_branch?(target_branch)
+ end
+
+ def can_be_merged_via_command_line_by?(user)
+ access = ::Gitlab::UserAccess.new(user, project: project)
+ access.can_push_to_branch?(target_branch)
end
def mergeable_ci_state?
diff --git a/app/models/merge_request_diff.rb b/app/models/merge_request_diff.rb
index feaba925bad..3f520c8f3ff 100644
--- a/app/models/merge_request_diff.rb
+++ b/app/models/merge_request_diff.rb
@@ -1,6 +1,7 @@
class MergeRequestDiff < ActiveRecord::Base
include Sortable
include Importable
+ include EncodingHelper
# Prevent store of diff if commits amount more then 500
COMMITS_SAFE_SIZE = 100
@@ -211,6 +212,14 @@ class MergeRequestDiff < ActiveRecord::Base
branch_base_commit.try(:sha)
end
+ def utf8_st_diffs
+ st_diffs.map do |diff|
+ diff.each do |k, v|
+ diff[k] = encode_utf8(v) if v.respond_to?(:encoding)
+ end
+ end
+ end
+
#
# #save or #update_attributes providing changes on serialized attributes do a lot of
# serialization and deserialization calls resulting in bad performance.
diff --git a/app/models/note.rb b/app/models/note.rb
index 8dca2ef09a8..0ce10c77de9 100644
--- a/app/models/note.rb
+++ b/app/models/note.rb
@@ -229,8 +229,7 @@ class Note < ActiveRecord::Base
end
def award_emoji_name
- original_name = note.match(Banzai::Filter::EmojiFilter.emoji_pattern)[1]
- Gitlab::AwardEmoji.normalize_emoji_name(original_name)
+ note.match(Banzai::Filter::EmojiFilter.emoji_pattern)[1]
end
private
diff --git a/app/models/project.rb b/app/models/project.rb
index a66b750cd48..a805f5d97bc 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -464,8 +464,8 @@ class Project < ActiveRecord::Base
return super(value) unless Gitlab::UrlSanitizer.valid?(value)
import_url = Gitlab::UrlSanitizer.new(value)
- create_or_update_import_data(credentials: import_url.credentials)
super(import_url.sanitized_url)
+ create_or_update_import_data(credentials: import_url.credentials)
end
def import_url
@@ -477,7 +477,13 @@ class Project < ActiveRecord::Base
end
end
+ def valid_import_url?
+ valid? || errors.messages[:import_url].nil?
+ end
+
def create_or_update_import_data(data: nil, credentials: nil)
+ return unless import_url.present? && valid_import_url?
+
project_import_data = import_data || build_import_data
if data
project_import_data.data ||= {}
@@ -832,6 +838,10 @@ class Project < ActiveRecord::Base
protected_branches.matching(branch_name).any?(&:developers_can_push)
end
+ def developers_can_merge_to_protected_branch?(branch_name)
+ protected_branches.matching(branch_name).any?(&:developers_can_merge)
+ end
+
def forked?
!(forked_project_link.nil? || forked_project_link.forked_from_project.nil?)
end
@@ -1032,8 +1042,8 @@ class Project < ActiveRecord::Base
pipelines.order(id: :desc).find_by(sha: sha, ref: ref)
end
- def ensure_pipeline(sha, ref)
- pipeline(sha, ref) || pipelines.create(sha: sha, ref: ref)
+ def ensure_pipeline(sha, ref, current_user = nil)
+ pipeline(sha, ref) || pipelines.create(sha: sha, ref: ref, user: current_user)
end
def enable_ci
diff --git a/app/models/project_services/builds_email_service.rb b/app/models/project_services/builds_email_service.rb
index 54da4d74fc5..5e166471077 100644
--- a/app/models/project_services/builds_email_service.rb
+++ b/app/models/project_services/builds_email_service.rb
@@ -42,6 +42,19 @@ class BuildsEmailService < Service
end
end
+ def can_test?
+ project.builds.count > 0
+ end
+
+ def disabled_title
+ "Please setup a build on your repository."
+ end
+
+ def test_data(project = nil, user = nil)
+ build = project.builds.last
+ Gitlab::BuildDataBuilder.build(build)
+ end
+
def fields
[
{ type: 'textarea', name: 'recipients', placeholder: 'Emails separated by comma' },
@@ -50,6 +63,20 @@ class BuildsEmailService < Service
]
end
+ def test(data)
+ begin
+ # bypass build status verification when testing
+ data[:build_status] = "failed"
+ data[:build_allow_failure] = false
+
+ result = execute(data)
+ rescue StandardError => error
+ return { success: false, result: error }
+ end
+
+ { success: true, result: result }
+ end
+
def should_build_be_notified?(data)
case data[:build_status]
when 'success'
diff --git a/app/models/repository.rb b/app/models/repository.rb
index 5b670cb4b8f..c187bad39ad 100644
--- a/app/models/repository.rb
+++ b/app/models/repository.rb
@@ -704,6 +704,7 @@ class Repository
options[:commit] = {
message: message,
branch: ref,
+ update_ref: false,
}
raw_repository.mkdir(path, options)
@@ -719,6 +720,7 @@ class Repository
options[:commit] = {
message: message,
branch: ref,
+ update_ref: false,
}
options[:file] = {
@@ -739,7 +741,8 @@ class Repository
options[:author] = committer
options[:commit] = {
message: message,
- branch: ref
+ branch: ref,
+ update_ref: false,
}
options[:file] = {
@@ -769,9 +772,9 @@ class Repository
end
end
- def merge(user, source_sha, target_branch, options = {})
- our_commit = rugged.branches[target_branch].target
- their_commit = rugged.lookup(source_sha)
+ def merge(user, merge_request, options = {})
+ our_commit = rugged.branches[merge_request.target_branch].target
+ their_commit = rugged.lookup(merge_request.diff_head_sha)
raise "Invalid merge target" if our_commit.nil?
raise "Invalid merge source" if their_commit.nil?
@@ -779,14 +782,15 @@ class Repository
merge_index = rugged.merge_commits(our_commit, their_commit)
return false if merge_index.conflicts?
- commit_with_hooks(user, target_branch) do |ref|
+ commit_with_hooks(user, merge_request.target_branch) do
actual_options = options.merge(
parents: [our_commit, their_commit],
tree: merge_index.write_tree(rugged),
- update_ref: ref
)
- Rugged::Commit.create(rugged, actual_options)
+ commit_id = Rugged::Commit.create(rugged, actual_options)
+ merge_request.update(in_progress_merge_commit_sha: commit_id)
+ commit_id
end
end
@@ -796,15 +800,14 @@ class Repository
return false unless revert_tree_id
- commit_with_hooks(user, base_branch) do |ref|
+ commit_with_hooks(user, base_branch) do
committer = user_to_committer(user)
source_sha = Rugged::Commit.create(rugged,
message: commit.revert_message,
author: committer,
committer: committer,
tree: revert_tree_id,
- parents: [rugged.lookup(source_sha)],
- update_ref: ref)
+ parents: [rugged.lookup(source_sha)])
end
end
@@ -814,7 +817,7 @@ class Repository
return false unless cherry_pick_tree_id
- commit_with_hooks(user, base_branch) do |ref|
+ commit_with_hooks(user, base_branch) do
committer = user_to_committer(user)
source_sha = Rugged::Commit.create(rugged,
message: commit.message,
@@ -825,8 +828,7 @@ class Repository
},
committer: committer,
tree: cherry_pick_tree_id,
- parents: [rugged.lookup(source_sha)],
- update_ref: ref)
+ parents: [rugged.lookup(source_sha)])
end
end
@@ -927,20 +929,6 @@ class Repository
Gitlab::Popen.popen(args, path_to_repo)
end
- def with_tmp_ref(oldrev = nil)
- random_string = SecureRandom.hex
- tmp_ref = "refs/tmp/#{random_string}/head"
-
- if oldrev && !Gitlab::Git.blank_ref?(oldrev)
- rugged.references.create(tmp_ref, oldrev)
- end
-
- # Make commit in tmp ref
- yield(tmp_ref)
- ensure
- rugged.references.delete(tmp_ref) rescue nil
- end
-
def commit_with_hooks(current_user, branch)
update_autocrlf_option
@@ -953,33 +941,31 @@ class Repository
oldrev = target_branch.target
end
- with_tmp_ref(oldrev) do |tmp_ref|
- # Make commit in tmp ref
- newrev = yield(tmp_ref)
+ # Make commit
+ newrev = yield(ref)
- unless newrev
- raise CommitError.new('Failed to create commit')
- end
+ unless newrev
+ raise CommitError.new('Failed to create commit')
+ end
- GitHooksService.new.execute(current_user, path_to_repo, oldrev, newrev, ref) do
- if was_empty || !target_branch
- # Create branch
- rugged.references.create(ref, newrev)
+ GitHooksService.new.execute(current_user, path_to_repo, oldrev, newrev, ref) do
+ if was_empty || !target_branch
+ # Create branch
+ rugged.references.create(ref, newrev)
+ else
+ # Update head
+ current_head = find_branch(branch).target
+
+ # Make sure target branch was not changed during pre-receive hook
+ if current_head == oldrev
+ rugged.references.update(ref, newrev)
else
- # Update head
- current_head = find_branch(branch).target
-
- # Make sure target branch was not changed during pre-receive hook
- if current_head == oldrev
- rugged.references.update(ref, newrev)
- else
- raise CommitError.new('Commit was rejected because branch received new push')
- end
+ raise CommitError.new('Commit was rejected because branch received new push')
end
end
-
- newrev
end
+
+ newrev
end
def ls_files(ref)
diff --git a/app/models/service.rb b/app/models/service.rb
index d7a32c28267..5432f8c7ab4 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -76,6 +76,10 @@ class Service < ActiveRecord::Base
[]
end
+ def test_data(project, user)
+ Gitlab::PushDataBuilder.build_sample(project, user)
+ end
+
def supported_events
%w(push tag_push issue merge_request wiki_page)
end
@@ -94,6 +98,11 @@ class Service < ActiveRecord::Base
!project.empty_repo?
end
+ # reason why service cannot be tested
+ def disabled_title
+ "Please setup a project repository."
+ end
+
# Provide convenient accessor methods
# for each serialized property.
# Also keep track of updated properties in a similar way as ActiveModel::Dirty
diff --git a/app/models/user.rb b/app/models/user.rb
index 7a72c202150..3d0a033785c 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -85,6 +85,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 :pipelines, dependent: :nullify, class_name: 'Ci::Pipeline'
has_many :todos, dependent: :destroy
has_many :notification_settings, dependent: :destroy
has_many :award_emoji, dependent: :destroy
diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb
index 2dcb052d274..3b21f0acb96 100644
--- a/app/services/ci/create_builds_service.rb
+++ b/app/services/ci/create_builds_service.rb
@@ -36,7 +36,9 @@ module Ci
:allow_failure,
:stage,
:stage_idx,
- :environment)
+ :environment,
+ :when,
+ :yaml_variables)
build_attrs.merge!(pipeline: @pipeline,
ref: @pipeline.ref,
diff --git a/app/services/ci/create_pipeline_service.rb b/app/services/ci/create_pipeline_service.rb
index b1ee6874190..be91bf0db85 100644
--- a/app/services/ci/create_pipeline_service.rb
+++ b/app/services/ci/create_pipeline_service.rb
@@ -2,6 +2,7 @@ module Ci
class CreatePipelineService < BaseService
def execute
pipeline = project.pipelines.new(params)
+ pipeline.user = current_user
unless ref_names.include?(params[:ref])
pipeline.errors.add(:base, 'Reference not found')
diff --git a/app/services/commits/change_service.rb b/app/services/commits/change_service.rb
index c578097376a..ed73d8cb8c2 100644
--- a/app/services/commits/change_service.rb
+++ b/app/services/commits/change_service.rb
@@ -23,7 +23,7 @@ module Commits
private
def check_push_permissions
- allowed = ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(@target_branch)
+ allowed = ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(@target_branch)
unless allowed
raise ValidationError.new('You are not allowed to push into this branch')
@@ -31,7 +31,7 @@ module Commits
true
end
-
+
def create_target_branch(new_branch)
# Temporary branch exists and contains the change commit
return success if repository.find_branch(new_branch)
diff --git a/app/services/create_branch_service.rb b/app/services/create_branch_service.rb
index d874582d54f..757fc35a78f 100644
--- a/app/services/create_branch_service.rb
+++ b/app/services/create_branch_service.rb
@@ -15,21 +15,19 @@ class CreateBranchService < BaseService
return error('Branch already exists')
end
- new_branch = nil
-
- if source_project != @project
- repository.with_tmp_ref do |tmp_ref|
- repository.fetch_ref(
- source_project.repository.path_to_repo,
- "refs/heads/#{ref}",
- tmp_ref
- )
-
- new_branch = repository.add_branch(current_user, branch_name, tmp_ref)
- end
- else
- new_branch = repository.add_branch(current_user, branch_name, ref)
- end
+ new_branch = if source_project != @project
+ repository.fetch_ref(
+ source_project.repository.path_to_repo,
+ "refs/heads/#{ref}",
+ "refs/heads/#{branch_name}"
+ )
+
+ repository.after_create_branch
+
+ repository.find_branch(branch_name)
+ else
+ repository.add_branch(current_user, branch_name, ref)
+ end
if new_branch
success(new_branch)
diff --git a/app/services/create_commit_builds_service.rb b/app/services/create_commit_builds_service.rb
index f947e8f452e..0b66b854dea 100644
--- a/app/services/create_commit_builds_service.rb
+++ b/app/services/create_commit_builds_service.rb
@@ -14,7 +14,13 @@ class CreateCommitBuildsService
return false
end
- @pipeline = Ci::Pipeline.new(project: project, sha: sha, ref: ref, before_sha: before_sha, tag: tag)
+ @pipeline = Ci::Pipeline.new(
+ project: project,
+ sha: sha,
+ ref: ref,
+ before_sha: before_sha,
+ tag: tag,
+ user: user)
##
# Skip creating pipeline if no gitlab-ci.yml is found
diff --git a/app/services/files/base_service.rb b/app/services/files/base_service.rb
index 37c5e321b39..55da949f56a 100644
--- a/app/services/files/base_service.rb
+++ b/app/services/files/base_service.rb
@@ -42,7 +42,7 @@ module Files
end
def validate
- allowed = ::Gitlab::GitAccess.new(current_user, project, 'web').can_push_to_branch?(@target_branch)
+ allowed = ::Gitlab::UserAccess.new(current_user, project: project).can_push_to_branch?(@target_branch)
unless allowed
raise_error("You are not allowed to push into this branch")
diff --git a/app/services/git_push_service.rb b/app/services/git_push_service.rb
index a886f35981f..e02b50ff9a2 100644
--- a/app/services/git_push_service.rb
+++ b/app/services/git_push_service.rb
@@ -89,7 +89,8 @@ class GitPushService < BaseService
# Set protection on the default branch if configured
if current_application_settings.default_branch_protection != PROTECTION_NONE
developers_can_push = current_application_settings.default_branch_protection == PROTECTION_DEV_CAN_PUSH ? true : false
- @project.protected_branches.create({ name: @project.default_branch, developers_can_push: developers_can_push })
+ developers_can_merge = current_application_settings.default_branch_protection == PROTECTION_DEV_CAN_MERGE ? true : false
+ @project.protected_branches.create({ name: @project.default_branch, developers_can_push: developers_can_push, developers_can_merge: developers_can_merge })
end
end
diff --git a/app/services/issuable_base_service.rb b/app/services/issuable_base_service.rb
index e3dc569152c..2d96efe1042 100644
--- a/app/services/issuable_base_service.rb
+++ b/app/services/issuable_base_service.rb
@@ -101,6 +101,7 @@ class IssuableBaseService < BaseService
def update(issuable)
change_state(issuable)
+ change_subscription(issuable)
filter_params
old_labels = issuable.labels.to_a
@@ -124,6 +125,15 @@ class IssuableBaseService < BaseService
end
end
+ def change_subscription(issuable)
+ case params.delete(:subscription_event)
+ when 'subscribe'
+ issuable.subscribe(current_user)
+ when 'unsubscribe'
+ issuable.unsubscribe(current_user)
+ end
+ end
+
def has_changes?(issuable, old_labels: [])
valid_attrs = [:title, :description, :assignee_id, :milestone_id, :target_branch]
diff --git a/app/services/issues/bulk_update_service.rb b/app/services/issues/bulk_update_service.rb
index cd08c3a0cb9..7e19a73f71a 100644
--- a/app/services/issues/bulk_update_service.rb
+++ b/app/services/issues/bulk_update_service.rb
@@ -4,7 +4,7 @@ module Issues
issues_ids = params.delete(:issues_ids).split(",")
issue_params = params
- %i(state_event milestone_id assignee_id add_label_ids remove_label_ids).each do |key|
+ %i(state_event milestone_id assignee_id add_label_ids remove_label_ids subscription_event).each do |key|
issue_params.delete(key) unless issue_params[key].present?
end
diff --git a/app/services/merge_requests/merge_service.rb b/app/services/merge_requests/merge_service.rb
index f1b1d90c457..0dac0614141 100644
--- a/app/services/merge_requests/merge_service.rb
+++ b/app/services/merge_requests/merge_service.rb
@@ -34,7 +34,7 @@ module MergeRequests
committer: committer
}
- commit_id = repository.merge(current_user, merge_request.diff_head_sha, merge_request.target_branch, options)
+ commit_id = repository.merge(current_user, merge_request, options)
merge_request.update(merge_commit_sha: commit_id)
rescue GitHooksService::PreReceiveError => e
merge_request.update(merge_error: e.message)
@@ -43,6 +43,8 @@ module MergeRequests
merge_request.update(merge_error: "Something went wrong during merge")
Rails.logger.error(e.message)
false
+ ensure
+ merge_request.update(in_progress_merge_commit_sha: nil)
end
def after_merge
diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index b11ecd97a57..1daf6bbf553 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -48,7 +48,7 @@ module MergeRequests
end
def force_push?
- Gitlab::ForcePushCheck.force_push?(@project, @oldrev, @newrev)
+ Gitlab::Checks::ForcePush.force_push?(@project, @oldrev, @newrev)
end
# Refresh merge request diff if we push to source or target branch of merge request
diff --git a/app/services/notes/create_service.rb b/app/services/notes/create_service.rb
index 02fca5c0ea3..18971bd0be3 100644
--- a/app/services/notes/create_service.rb
+++ b/app/services/notes/create_service.rb
@@ -8,7 +8,6 @@ module Notes
if note.award_emoji?
noteable = note.noteable
todo_service.new_award_emoji(noteable, current_user)
-
return noteable.create_award_emoji(note.award_emoji_name, current_user)
end
diff --git a/app/services/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb
index 6afc048576d..998789d64d2 100644
--- a/app/services/projects/import_export/export_service.rb
+++ b/app/services/projects/import_export/export_service.rb
@@ -10,7 +10,7 @@ module Projects
def save_all
if [version_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver].all?(&:save)
- Gitlab::ImportExport::Saver.save(shared: @shared)
+ Gitlab::ImportExport::Saver.save(project: project, shared: @shared)
notify_success
else
cleanup_and_notify
diff --git a/app/services/projects/import_service.rb b/app/services/projects/import_service.rb
index 163ebf26c84..cdad0426b02 100644
--- a/app/services/projects/import_service.rb
+++ b/app/services/projects/import_service.rb
@@ -43,7 +43,7 @@ module Projects
def import_repository
begin
gitlab_shell.import_repository(project.repository_storage_path, project.path_with_namespace, project.import_url)
- rescue Gitlab::Shell::Error => e
+ rescue => e
raise Error, "Error importing repository #{project.import_url} into #{project.path_with_namespace} - #{e.message}"
end
end
diff --git a/app/services/todo_service.rb b/app/services/todo_service.rb
index 6bb0a72d30e..6b48d68cccb 100644
--- a/app/services/todo_service.rb
+++ b/app/services/todo_service.rb
@@ -194,7 +194,7 @@ class TodoService
end
def create_assignment_todo(issuable, author)
- if issuable.assignee && issuable.assignee != author
+ if issuable.assignee
attributes = attributes_for_todo(issuable.project, issuable, author, Todo::ASSIGNED)
create_todos(issuable.assignee, attributes)
end
@@ -239,7 +239,6 @@ class TodoService
def filter_mentioned_users(project, target, author)
mentioned_users = target.mentioned_users(author)
mentioned_users = reject_users_without_access(mentioned_users, project, target)
- mentioned_users.delete(author)
mentioned_users.uniq
end
diff --git a/app/views/admin/builds/index.html.haml b/app/views/admin/builds/index.html.haml
index 9ea3cca0ecb..3d77634d8fa 100644
--- a/app/views/admin/builds/index.html.haml
+++ b/app/views/admin/builds/index.html.haml
@@ -10,15 +10,20 @@
All
%span.badge.js-totalbuilds-count= @all_builds.count(:id)
+ %li{class: ('active' if @scope == 'pending')}
+ = link_to admin_builds_path(scope: :pending) do
+ Pending
+ %span.badge= number_with_delimiter(@all_builds.pending.count(:id))
+
%li{class: ('active' if @scope == 'running')}
= link_to admin_builds_path(scope: :running) do
Running
- %span.badge.js-running-count= number_with_delimiter(@all_builds.running_or_pending.count(:id))
+ %span.badge= number_with_delimiter(@all_builds.running.count(:id))
%li{class: ('active' if @scope == 'finished')}
= link_to admin_builds_path(scope: :finished) do
Finished
- %span.badge.js-running-count= number_with_delimiter(@all_builds.finished.count(:id))
+ %span.badge= number_with_delimiter(@all_builds.finished.count(:id))
.nav-controls
- if @all_builds.running_or_pending.any?
diff --git a/app/views/admin/groups/_group.html.haml b/app/views/admin/groups/_group.html.haml
index 59fd6c3fea0..77a11e49e20 100644
--- a/app/views/admin/groups/_group.html.haml
+++ b/app/views/admin/groups/_group.html.haml
@@ -1,20 +1,26 @@
-- css_class = '' unless local_assigns[:css_class]
+- css_class = 'no-description' if group.description.blank?
-%li.group-row.group-admin{ class: css_class }
- .group-avatar
- = image_tag group_icon(group), class: 'avatar hidden-xs'
- .group-details
- .title
- = link_to [:admin, group], class: 'group-name' do
- = group.name
- .group-stats
- %span>= pluralize(number_with_delimiter(group.projects.count), 'project')
- ,
- %span= pluralize(number_with_delimiter(group.users.count), 'member')
-
- - if group.description.present?
- .description
- = markdown(group.description, pipeline: :description)
- .group-controls.hidden-xs
+%li.group-row{ class: css_class }
+ .controls
= link_to 'Edit', edit_admin_group_path(group), id: "edit_#{dom_id(group)}", class: 'btn'
= link_to 'Delete', [:admin, group], data: { confirm: "Are you sure you want to remove #{group.name}?" }, method: :delete, class: 'btn btn-remove'
+ .stats
+ %span
+ = icon('bookmark')
+ = number_with_delimiter(group.projects.count)
+
+ %span
+ = icon('users')
+ = number_with_delimiter(group.users.count)
+
+ %span.visibility-icon.has-tooltip{data: { container: 'body', placement: 'left' }, title: visibility_icon_description(group)}
+ = visibility_level_icon(group.visibility_level, fw: false)
+
+ = image_tag group_icon(group), class: "avatar s40 hidden-xs"
+ .title
+ = link_to [:admin, group], class: 'group-name' do
+ = group.name
+
+ - if group.description.present?
+ .description
+ = markdown(group.description, pipeline: :description)
diff --git a/app/views/admin/groups/show.html.haml b/app/views/admin/groups/show.html.haml
index 40c8169ad9d..bb374694400 100644
--- a/app/views/admin/groups/show.html.haml
+++ b/app/views/admin/groups/show.html.haml
@@ -79,7 +79,7 @@
.panel-body.form-holder
%p.light
Read more about project permissions
- %strong= link_to "here", help_page_path("permissions/permissions"), class: "vlink"
+ %strong= link_to "here", help_page_path("user/permissions"), class: "vlink"
= form_tag members_update_admin_group_path(@group), id: "new_project_member", class: "bulk_import", method: :put do
%div
diff --git a/app/views/admin/projects/index.html.haml b/app/views/admin/projects/index.html.haml
index 7fbce25b2c4..1e755785d90 100644
--- a/app/views/admin/projects/index.html.haml
+++ b/app/views/admin/projects/index.html.haml
@@ -66,7 +66,7 @@
%ul.projects-list.content-list
- @projects.each_with_index do |project|
%li.project-row
- .controls.pull-right
+ .controls
- if project.archived
%span.label.label-warning archived
%span.label.label-gray
diff --git a/app/views/admin/users/_user.html.haml b/app/views/admin/users/_user.html.haml
index d3519f616f6..4bf1c9cde3c 100644
--- a/app/views/admin/users/_user.html.haml
+++ b/app/views/admin/users/_user.html.haml
@@ -14,7 +14,7 @@
%span It's you!
.user-email
= mail_to user.email, user.email
- .controls.pull-right
+ .controls
= link_to 'Edit', edit_admin_user_path(user), id: "edit_#{dom_id(user)}", class: 'btn'
- unless user == current_user
.dropdown.inline
diff --git a/app/views/dashboard/projects/_zero_authorized_projects.html.haml b/app/views/dashboard/projects/_zero_authorized_projects.html.haml
index d54c7cad7be..fdea834ff45 100644
--- a/app/views/dashboard/projects/_zero_authorized_projects.html.haml
+++ b/app/views/dashboard/projects/_zero_authorized_projects.html.haml
@@ -1,53 +1,46 @@
- publicish_project_count = ProjectsFinder.new.execute(current_user).count
-%h3.page-title Welcome to GitLab!
-%p.light Self hosted Git management application.
-%hr
-%div
- .dashboard-intro-icon
- %i.fa.fa-bookmark-o
- .dashboard-intro-text
- %p.slead
- You don't have access to any projects right now.
- %br
- - if current_user.can_create_project?
- You can create up to
- %strong= pluralize(number_with_delimiter(current_user.projects_limit), "project") + "."
- - else
- If you are added to a project, it will be displayed here.
-
+.blank-state.blank-state-welcome
+ %h2.blank-state-welcome-title
+ Welcome to GitLab
+ %p.blank-state-text
+ Code, test, and deploy together
+.blank-state
+ .blank-state-icon
+ = custom_icon("project", size: 50)
+ %h3.blank-state-title
+ You don't have access to any projects right now
+ %p.blank-state-text
- if current_user.can_create_project?
- .link_holder
- = link_to new_project_path, class: "btn btn-new" do
- = icon('plus')
- New Project
+ You can create up to
+ %strong= number_with_delimiter(current_user.projects_limit)
+ = succeed "." do
+ = "project".pluralize(current_user.projects_limit)
+ - else
+ If you are added to a project, it will be displayed here.
+ - if current_user.can_create_project?
+ = link_to new_project_path, class: "btn btn-new" do
+ New project
- if current_user.can_create_group?
- %hr
- %div
- .dashboard-intro-icon
- %i.fa.fa-users
- .dashboard-intro-text
- %p.slead
- You can create a group for several dependent projects.
- %br
- Groups are the best way to manage projects and members.
- .link_holder
- = link_to new_group_path, class: "btn btn-new" do
- %i.fa.fa-plus
- New Group
+ .blank-state
+ .blank-state-icon
+ = custom_icon("group", size: 50)
+ %h3.blank-state-title
+ You can create a group for several dependent projects.
+ %p.blank-state-text
+ Groups are the best way to manage projects and members.
+ = link_to new_group_path, class: "btn btn-new" do
+ New group
-if publicish_project_count > 0
- %hr
- %div
- .dashboard-intro-icon
- %i.fa.fa-globe
- .dashboard-intro-text
- %p.slead
- There are
- %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.
- .link_holder
- = link_to trending_explore_projects_path, class: "btn btn-new" do
- Browse public projects
+ .blank-state
+ .blank-state-icon
+ = icon("globe")
+ %h3.blank-state-title
+ There are
+ = number_with_delimiter(publicish_project_count)
+ public projects on this server.
+ %p.blank-state-text
+ Public projects are an easy way to allow everyone to have read-only access.
+ = link_to trending_explore_projects_path, class: "btn btn-new" do
+ Browse projects
diff --git a/app/views/dashboard/projects/index.html.haml b/app/views/dashboard/projects/index.html.haml
index 4565e752c1f..4f36a4a1c73 100644
--- a/app/views/dashboard/projects/index.html.haml
+++ b/app/views/dashboard/projects/index.html.haml
@@ -5,7 +5,8 @@
- page_title "Projects"
- header_title "Projects", dashboard_projects_path
-= render 'dashboard/projects_head'
+- if @projects.any? || params[:filter_projects]
+ = render 'dashboard/projects_head'
- if @last_push
= render "events/event_last_push", event: @last_push
diff --git a/app/views/devise/sessions/two_factor.html.haml b/app/views/devise/sessions/two_factor.html.haml
index a373f61bd3c..4debd3d608f 100644
--- a/app/views/devise/sessions/two_factor.html.haml
+++ b/app/views/devise/sessions/two_factor.html.haml
@@ -1,3 +1,7 @@
+- if inject_u2f_api?
+ - content_for :page_specific_javascripts do
+ = page_specific_javascript_tag('u2f.js')
+
%div
.login-box
.login-heading
diff --git a/app/views/emojis/index.html.haml b/app/views/emojis/index.html.haml
index 8b38b4c2bd4..790d90ad3ee 100644
--- a/app/views/emojis/index.html.haml
+++ b/app/views/emojis/index.html.haml
@@ -1,5 +1,5 @@
.emoji-menu
- = text_field_tag :emoji_search, "", class: "emoji-search search-input form-control", placeholder: "Seach emojis"
+ = text_field_tag :emoji_search, "", class: "emoji-search search-input form-control", placeholder: "Search emoji"
.emoji-menu-content
- Gitlab::AwardEmoji.emoji_by_category.each do |category, emojis|
%h5.emoji-menu-title
diff --git a/app/views/errors/access_denied.html.haml b/app/views/errors/access_denied.html.haml
index 2febeef99d3..c034bbe430e 100644
--- a/app/views/errors/access_denied.html.haml
+++ b/app/views/errors/access_denied.html.haml
@@ -3,4 +3,4 @@
%h3 Access Denied
%hr
%p You are not allowed to access this page.
-%p Read more about project permissions #{link_to "here", help_page_path("permissions/permissions"), class: "vlink"}
+%p Read more about project permissions #{link_to "here", help_page_path("user/permissions"), class: "vlink"}
diff --git a/app/views/groups/group_members/_new_group_member.html.haml b/app/views/groups/group_members/_new_group_member.html.haml
index 13ded2bc455..9bb9f962177 100644
--- a/app/views/groups/group_members/_new_group_member.html.haml
+++ b/app/views/groups/group_members/_new_group_member.html.haml
@@ -12,7 +12,7 @@
= select_tag :access_level, options_for_select(GroupMember.access_level_roles, @group_member.access_level), class: "project-access-select select2"
.help-block
Read more about role permissions
- %strong= link_to "here", help_page_path("permissions/permissions"), class: "vlink"
+ %strong= link_to "here", help_page_path("user/permissions"), class: "vlink"
.form-actions
= f.submit 'Add users to group', class: "btn btn-create"
diff --git a/app/views/help/_shortcuts.html.haml b/app/views/help/_shortcuts.html.haml
index 8cc0b59edeb..ce4536ebdc6 100644
--- a/app/views/help/_shortcuts.html.haml
+++ b/app/views/help/_shortcuts.html.haml
@@ -20,6 +20,10 @@
%td Focus Search
%tr
%td.shortcut
+ .key f
+ %td Focus Filter
+ %tr
+ %td.shortcut
.key ?
%td Show/hide this dialog
%tr
diff --git a/app/views/layouts/_page.html.haml b/app/views/layouts/_page.html.haml
index 90c1fa4c87c..a1a71c2fb33 100644
--- a/app/views/layouts/_page.html.haml
+++ b/app/views/layouts/_page.html.haml
@@ -6,7 +6,7 @@
= icon('bars')
= link_to '#', class: "nav-header-btn pin-nav-btn has-tooltip #{'is-active' if pinned_nav?} js-nav-pin", title: pinned_nav? ? "Unpin navigation" : "Pin Navigation", data: {placement: 'right', container: 'body'} do
%span.sr-only Toggle navigation pinning
- = icon('thumb-tack')
+ = icon('fw thumb-tack')
- if defined?(sidebar) && sidebar
= render "layouts/nav/#{sidebar}"
diff --git a/app/views/layouts/_search.html.haml b/app/views/layouts/_search.html.haml
index 245b9c3b4d4..f7580f00159 100644
--- a/app/views/layouts/_search.html.haml
+++ b/app/views/layouts/_search.html.haml
@@ -44,7 +44,7 @@
name: "#{j(@project.name)}"
};
- - if @group and @group.path
+ - if @group && @group.persisted? && @group.path
:javascript
gl.groupOptions = gl.groupOptions || {};
gl.groupOptions["#{j(@group.path)}"] = {
diff --git a/app/views/layouts/header/_default.html.haml b/app/views/layouts/header/_default.html.haml
index 11cee421a99..94c53882623 100644
--- a/app/views/layouts/header/_default.html.haml
+++ b/app/views/layouts/header/_default.html.haml
@@ -1,7 +1,7 @@
%header.navbar.navbar-fixed-top.navbar-gitlab{ class: nav_header_class }
%div{ class: fluid_layout ? "container-fluid" : "container-fluid" }
.header-content
- %button.side-nav-toggle{type: 'button'}
+ %button.side-nav-toggle{ type: 'button', "aria-label" => "Toggle global navigation" }
%span.sr-only Toggle navigation
= icon('bars')
%button.navbar-toggle{type: 'button'}
@@ -13,25 +13,25 @@
%li.hidden-sm.hidden-xs
= render 'layouts/search' unless current_controller?(:search)
%li.visible-sm.visible-xs
- = link_to search_path, title: 'Search', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
+ = link_to search_path, title: 'Search', aria: { label: "Search" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
= icon('search')
- if current_user
- if session[:impersonator_id]
%li.impersonation
- = link_to admin_impersonation_path, method: :delete, title: 'Stop Impersonation', data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do
+ = link_to admin_impersonation_path, method: :delete, title: "Stop Impersonation", aria: { label: 'Stop Impersonation' }, data: { toggle: 'tooltip', placement: 'bottom', container: 'body' } do
= icon('user-secret fw')
- if current_user.is_admin?
%li
- = link_to admin_root_path, title: 'Admin Area', data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
+ = link_to admin_root_path, title: 'Admin Area', aria: { label: "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
+ = link_to dashboard_todos_path, title: 'Todos', aria: { label: "Todos" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
= icon('bell fw')
%span.badge.todos-pending-count{ class: ("hidden" if todos_pending_count == 0) }
= 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
+ = link_to new_project_path, title: 'New project', aria: { label: "New project" }, data: {toggle: 'tooltip', placement: 'bottom', container: 'body'} do
= icon('plus fw')
- if Gitlab::Sherlock.enabled?
%li
@@ -45,12 +45,12 @@
.dropdown-menu-nav.dropdown-menu-align-right
%ul
%li
- = link_to "Profile", current_user, class: 'profile-link', data: { user: current_user.username }
+ = link_to "Profile", current_user, class: 'profile-link', aria: { label: "Profile" }, data: { user: current_user.username }
%li
- = link_to "Profile Settings", profile_path
+ = link_to "Profile Settings", profile_path, aria: { label: "Profile Settings" }
%li.divider
%li
- = link_to "Sign out", destroy_user_session_path, method: :delete, class: "sign-out-link", title: 'Sign out'
+ = link_to "Sign out", destroy_user_session_path, method: :delete, class: "sign-out-link", aria: { label: "Sign out" }
- else
%li
%div
diff --git a/app/views/notify/note_merge_request_email.html.haml b/app/views/notify/note_merge_request_email.html.haml
index 35c4b862bb7..ea7e3d199fd 100644
--- a/app/views/notify/note_merge_request_email.html.haml
+++ b/app/views/notify/note_merge_request_email.html.haml
@@ -1,4 +1,4 @@
-- if @note.diff_note?
+- if @note.diff_note? && @note.diff_file
%p.details
New comment on diff for
= link_to @note.diff_file.file_path, @target_url
diff --git a/app/views/profiles/two_factor_auths/show.html.haml b/app/views/profiles/two_factor_auths/show.html.haml
index 8780da1dec4..366f1fed35b 100644
--- a/app/views/profiles/two_factor_auths/show.html.haml
+++ b/app/views/profiles/two_factor_auths/show.html.haml
@@ -2,6 +2,10 @@
- header_title "Two-Factor Authentication", profile_two_factor_auth_path
= render 'profiles/head'
+- if inject_u2f_api?
+ - content_for :page_specific_javascripts do
+ = page_specific_javascript_tag('u2f.js')
+
.row.prepend-top-default
.col-lg-3
%h4.prepend-top-0
diff --git a/app/views/projects/builds/_sidebar.html.haml b/app/views/projects/builds/_sidebar.html.haml
index cab21f0cf19..396cc4ad925 100644
--- a/app/views/projects/builds/_sidebar.html.haml
+++ b/app/views/projects/builds/_sidebar.html.haml
@@ -94,9 +94,9 @@
.block
.title
- Commit message
+ Commit title
%p.build-light-text.append-bottom-0
- #{@build.pipeline.git_commit_message}
+ #{@build.pipeline.git_commit_title}
- if @build.tags.any?
.block
diff --git a/app/views/projects/builds/index.html.haml b/app/views/projects/builds/index.html.haml
index 85c31dfd918..2af625f69cd 100644
--- a/app/views/projects/builds/index.html.haml
+++ b/app/views/projects/builds/index.html.haml
@@ -11,17 +11,22 @@
%span.badge.js-totalbuilds-count
= number_with_delimiter(@all_builds.count(:id))
+ %li{class: ('active' if @scope == 'pending')}
+ = link_to project_builds_path(@project, scope: :pending) do
+ Pending
+ %span.badge
+ = number_with_delimiter(@all_builds.pending.count(:id))
%li{class: ('active' if @scope == 'running')}
= link_to project_builds_path(@project, scope: :running) do
Running
- %span.badge.js-running-count
- = number_with_delimiter(@all_builds.running_or_pending.count(:id))
+ %span.badge
+ = number_with_delimiter(@all_builds.running.count(:id))
%li{class: ('active' if @scope == 'finished')}
= link_to project_builds_path(@project, scope: :finished) do
Finished
- %span.badge.js-running-count
+ %span.badge
= number_with_delimiter(@all_builds.finished.count(:id))
.nav-controls
diff --git a/app/views/projects/ci/pipelines/_pipeline.html.haml b/app/views/projects/ci/pipelines/_pipeline.html.haml
index aea51dcd986..7ae699832f6 100644
--- a/app/views/projects/ci/pipelines/_pipeline.html.haml
+++ b/app/views/projects/ci/pipelines/_pipeline.html.haml
@@ -33,7 +33,7 @@
Cant find HEAD commit for this branch
- - stages_status = pipeline.statuses.stages_status
+ - stages_status = pipeline.statuses.latest.stages_status
- stages.each do |stage|
%td
- status = stages_status[stage]
@@ -59,16 +59,7 @@
.controls.hidden-xs.pull-right
- artifacts = pipeline.builds.latest.select { |b| b.artifacts? }
- if artifacts.present?
- .btn-group.inline
- .btn-group
- %a.dropdown-toggle.btn.btn-default{type: 'button', 'data-toggle' => 'dropdown'}
- = icon("play")
- %b.caret
- %ul.dropdown-menu.dropdown-menu-align-right
- %li
- = link_to '#' do
- = icon("play")
- %span Deploy to production
+ .inline
.btn-group
%a.dropdown-toggle.btn.btn-default.build-artifacts{type: 'button', 'data-toggle' => 'dropdown'}
= icon("download")
@@ -81,9 +72,10 @@
%span Download '#{build.name}' artifacts
- if can?(current_user, :update_pipeline, @project)
- - if pipeline.retryable?
- = link_to retry_namespace_project_pipeline_path(@project.namespace, @project, pipeline.id), class: 'btn has-tooltip', title: "Retry", method: :post do
- = icon("repeat")
- - if pipeline.cancelable?
- = link_to cancel_namespace_project_pipeline_path(@project.namespace, @project, pipeline.id), class: 'btn btn-remove has-tooltip', title: "Cancel", method: :post do
- = icon("remove")
+ .cancel-retry-btns.inline
+ - if pipeline.retryable?
+ = link_to retry_namespace_project_pipeline_path(@project.namespace, @project, pipeline.id), class: 'btn has-tooltip', title: "Retry", method: :post do
+ = icon("repeat")
+ - if pipeline.cancelable?
+ = link_to cancel_namespace_project_pipeline_path(@project.namespace, @project, pipeline.id), class: 'btn btn-remove has-tooltip', title: "Cancel", method: :post do
+ = icon("remove")
diff --git a/app/views/projects/compare/_form.html.haml b/app/views/projects/compare/_form.html.haml
index dd590a4b8ec..af09b3418ea 100644
--- a/app/views/projects/compare/_form.html.haml
+++ b/app/views/projects/compare/_form.html.haml
@@ -2,15 +2,17 @@
.clearfix
- if params[:to] && params[:from]
= link_to 'switch', {from: params[:to], to: params[:from]}, {class: 'commits-compare-switch has-tooltip', title: 'Switch base of comparison'}
- .form-group
+ .form-group.dropdown.compare-form-group.js-compare-from-dropdown
.input-group.inline-input-group
%span.input-group-addon from
- = text_field_tag :from, params[:from], class: "form-control", required: true
+ = text_field_tag :from, params[:from], class: "form-control js-compare-dropdown", required: true, data: { refs_url: refs_namespace_project_path(@project.namespace, @project), toggle: "dropdown", target: ".js-compare-from-dropdown", selected: params[:from].presence }
+ = render "ref_dropdown"
= "..."
- .form-group
+ .form-group.dropdown.compare-form-group.js-compare-to-dropdown
.input-group.inline-input-group
%span.input-group-addon to
- = text_field_tag :to, params[:to], class: "form-control", required: true
+ = text_field_tag :to, params[:to], class: "form-control js-compare-dropdown", required: true, data: { refs_url: refs_namespace_project_path(@project.namespace, @project), toggle: "dropdown", target: ".js-compare-to-dropdown", selected: params[:to].presence }
+ = render "ref_dropdown"
&nbsp;
= button_tag "Compare", class: "btn btn-create commits-compare-btn"
- if @merge_request.present?
@@ -19,11 +21,3 @@
= link_to create_mr_path, class: 'prepend-left-10 btn' do
= icon("plus")
Create Merge Request
-
-:javascript
- var availableTags = #{@project.repository.ref_names.to_json};
-
- $("#from, #to").autocomplete({
- source: availableTags,
- minLength: 1
- });
diff --git a/app/views/projects/compare/_ref_dropdown.html.haml b/app/views/projects/compare/_ref_dropdown.html.haml
new file mode 100644
index 00000000000..c604c6d0135
--- /dev/null
+++ b/app/views/projects/compare/_ref_dropdown.html.haml
@@ -0,0 +1,4 @@
+.dropdown-menu.dropdown-menu-selectable
+ = dropdown_title "Select branch/tag"
+ = dropdown_content
+ = dropdown_loading
diff --git a/app/views/projects/diffs/_content.html.haml b/app/views/projects/diffs/_content.html.haml
index 0c0424edffd..a1b071f130c 100644
--- a/app/views/projects/diffs/_content.html.haml
+++ b/app/views/projects/diffs/_content.html.haml
@@ -8,12 +8,12 @@
- elsif blob_text_viewable?(blob)
- if !project.repository.diffable?(blob)
.nothing-here-block This diff was suppressed by a .gitattributes entry.
+ - elsif diff_file.collapsed?
+ - url = url_for(params.merge(action: :diff_for_path, old_path: diff_file.old_path, new_path: diff_file.new_path))
+ .nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
+ This diff is collapsed. Click to expand it.
- elsif diff_file.diff_lines.length > 0
- - if diff_file.collapsed_by_default? && !expand_all_diffs?
- - url = url_for(params.merge(action: :diff_for_path, old_path: diff_file.old_path, new_path: diff_file.new_path))
- .nothing-here-block.diff-collapsed{data: { diff_for_path: url } }
- This diff is collapsed. Click to expand it.
- - elsif diff_view == 'parallel'
+ - if diff_view == 'parallel'
= render "projects/diffs/parallel_view", diff_file: diff_file, project: project, blob: blob
- else
= render "projects/diffs/text_file", diff_file: diff_file
diff --git a/app/views/projects/diffs/_diffs.html.haml b/app/views/projects/diffs/_diffs.html.haml
index 20aaab5accf..8ae433b4823 100644
--- a/app/views/projects/diffs/_diffs.html.haml
+++ b/app/views/projects/diffs/_diffs.html.haml
@@ -6,7 +6,7 @@
.content-block.oneline-block.files-changed
.inline-parallel-buttons
- - unless expand_all_diffs?
+ - if !expand_all_diffs? && diff_files.any? { |diff_file| diff_file.collapsed? }
= link_to 'Expand all', url_for(params.merge(expand_all_diffs: 1, format: 'html')), class: 'btn btn-default'
- if show_whitespace_toggle
- if current_controller?(:commit)
diff --git a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
index 06ab0a3fa00..f000cc38a65 100644
--- a/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
+++ b/app/views/projects/merge_requests/widget/open/_conflicts.html.haml
@@ -4,7 +4,7 @@
%p
Please resolve these conflicts or
- - if @merge_request.can_be_merged_by?(current_user)
+ - if @merge_request.can_be_merged_via_command_line_by?(current_user)
#{link_to "merge this request manually", "#modal_merge_info", class: "how_to_merge_link vlink", "data-toggle" => "modal"}.
- else
ask someone with write access to this repository to merge this request manually.
diff --git a/app/views/projects/new.html.haml b/app/views/projects/new.html.haml
index 9b00bdedc27..c72d0140bb9 100644
--- a/app/views/projects/new.html.haml
+++ b/app/views/projects/new.html.haml
@@ -154,4 +154,9 @@
$('.import_gitlab_project').attr('disabled',true);
$('.import_gitlab_project').attr('title', 'Project path required.');
}
- })
+ });
+
+ $('.import_git').click(function( event ) {
+ $projectImportUrl = $('#project_import_url')
+ $projectImportUrl.attr('disabled', !$projectImportUrl.attr('disabled'))
+ }); \ No newline at end of file
diff --git a/app/views/projects/project_members/_new_project_member.html.haml b/app/views/projects/project_members/_new_project_member.html.haml
index ea3d82d858e..978c4dfc5ec 100644
--- a/app/views/projects/project_members/_new_project_member.html.haml
+++ b/app/views/projects/project_members/_new_project_member.html.haml
@@ -12,7 +12,7 @@
= select_tag :access_level, options_for_select(ProjectMember.access_level_roles, @project_member.access_level), class: "project-access-select select2"
.help-block
Read more about role permissions
- %strong= link_to "here", help_page_path("permissions/permissions"), class: "vlink"
+ %strong= link_to "here", help_page_path("user/permissions"), class: "vlink"
.form-actions
= f.submit 'Add users to project', class: "btn btn-create"
diff --git a/app/views/projects/protected_branches/_branches_list.html.haml b/app/views/projects/protected_branches/_branches_list.html.haml
index 97cb1a9052b..720d67dff7c 100644
--- a/app/views/projects/protected_branches/_branches_list.html.haml
+++ b/app/views/projects/protected_branches/_branches_list.html.haml
@@ -8,6 +8,7 @@
.table-responsive
%table.table.protected-branches-list
%colgroup
+ %col{ width: "20%" }
%col{ width: "30%" }
%col{ width: "25%" }
%col{ width: "25%" }
@@ -18,6 +19,7 @@
%th Protected Branch
%th Commit
%th Developers Can Push
+ %th Developers Can Merge
- if can_admin_project
%th
%tbody
diff --git a/app/views/projects/protected_branches/_protected_branch.html.haml b/app/views/projects/protected_branches/_protected_branch.html.haml
index 474aec3a97c..7fda7f96047 100644
--- a/app/views/projects/protected_branches/_protected_branch.html.haml
+++ b/app/views/projects/protected_branches/_protected_branch.html.haml
@@ -16,6 +16,8 @@
(branch was removed from repository)
%td
= check_box_tag("developers_can_push", protected_branch.id, protected_branch.developers_can_push, data: { url: url })
+ %td
+ = check_box_tag("developers_can_merge", protected_branch.id, protected_branch.developers_can_merge, data: { url: url })
- if can_admin_project
%td
= link_to 'Unprotect', [@project.namespace.becomes(Namespace), @project, protected_branch], data: { confirm: 'Branch will be writable for developers. Are you sure?' }, method: :delete, class: "btn btn-warning btn-sm pull-right"
diff --git a/app/views/projects/protected_branches/index.html.haml b/app/views/projects/protected_branches/index.html.haml
index 3fab95751e0..151e1d64851 100644
--- a/app/views/projects/protected_branches/index.html.haml
+++ b/app/views/projects/protected_branches/index.html.haml
@@ -8,10 +8,10 @@
%p.prepend-top-20
Protected branches are designed to:
%ul
- %li prevent pushes from everybody except #{link_to "masters", help_page_path("permissions/permissions"), class: "vlink"}
+ %li prevent pushes from everybody except #{link_to "masters", help_page_path("user/permissions"), class: "vlink"}
%li prevent anyone from force pushing to the branch
%li prevent anyone from deleting the branch
- %p.append-bottom-0 Read more about #{link_to "project permissions", help_page_path("permissions/permissions"), class: "underlined-link"}
+ %p.append-bottom-0 Read more about #{link_to "project permissions", help_page_path("user/permissions"), class: "underlined-link"}
.col-lg-9
%h5.prepend-top-0
Protect a branch
@@ -36,6 +36,14 @@
= f.label :developers_can_push, "Developers can push", class: "label-light append-bottom-0"
%p.light.append-bottom-0
Allow developers to push to this branch
+
+ .form-group
+ = f.check_box :developers_can_merge, class: "pull-left"
+ .prepend-left-20
+ = f.label :developers_can_merge, "Developers can merge", class: "label-light append-bottom-0"
+ %p.light.append-bottom-0
+ Allow developers to accept merge requests to this branch
= f.submit "Protect", class: "btn-create btn protect-branch-btn", disabled: true
+
%hr
= render "branches_list"
diff --git a/app/views/projects/services/_form.html.haml b/app/views/projects/services/_form.html.haml
index 1f13ea28b4e..166dc4a01fc 100644
--- a/app/views/projects/services/_form.html.haml
+++ b/app/views/projects/services/_form.html.haml
@@ -12,5 +12,5 @@
&nbsp;
- if @service.valid? && @service.activated?
- disabled = @service.can_test? ? '':'disabled'
- = link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service.to_param), class: "btn #{disabled}"
+ = link_to 'Test settings', test_namespace_project_service_path(@project.namespace, @project, @service), class: "btn #{disabled}", title: @service.disabled_title
= link_to "Cancel", namespace_project_services_path(@project.namespace, @project), class: "btn btn-cancel"
diff --git a/app/views/shared/_import_form.html.haml b/app/views/shared/_import_form.html.haml
index 627814bcfae..65a3a6bddab 100644
--- a/app/views/shared/_import_form.html.haml
+++ b/app/views/shared/_import_form.html.haml
@@ -2,7 +2,7 @@
= f.label :import_url, class: 'control-label' do
%span Git repository URL
.col-sm-10
- = f.text_field :import_url, class: 'form-control', placeholder: 'https://username:password@gitlab.company.com/group/project.git'
+ = f.text_field :import_url, class: 'form-control', placeholder: 'https://username:password@gitlab.company.com/group/project.git', disabled: true
.well.prepend-top-20
%ul
diff --git a/app/views/shared/icons/_group.svg b/app/views/shared/icons/_group.svg.erb
index 75cae0d16c8..53635016900 100644
--- a/app/views/shared/icons/_group.svg
+++ b/app/views/shared/icons/_group.svg.erb
@@ -1,9 +1,4 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Generator: Sketch 3.7.2 (28276) - http://www.bohemiancoding.com/sketch -->
- <title>Group</title>
- <desc>Created with Sketch.</desc>
- <defs></defs>
+<svg width="<%= size %>" height="<%= size %>" viewBox="0 0 16 16">
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="Group" fill="#303030">
<path d="M15.6667,10.0105 L10.3337,10.0105 C10.1497,10.0105 9.9997,10.1775 9.9997,10.3845 L9.9997,15.6145 C9.9997,15.8215 10.1497,15.9885 10.3337,15.9885 L15.6667,15.9885 C15.8507,15.9885 15.9997,15.8215 15.9997,15.6145 L15.9997,10.3845 C15.9997,10.1775 15.8507,10.0105 15.6667,10.0105 L15.6667,10.0105 L15.6667,10.0105 Z M11.9997,14.0105 L13.9997,14.0105 L13.9997,12.0105 L11.9997,12.0105 L11.9997,14.0105 L11.9997,14.0105 Z" id="Fill-11"></path>
@@ -15,4 +10,4 @@
<path d="M11.6667,6.21724894e-15 L4.3337,6.21724894e-15 C4.1497,6.21724894e-15 3.9997,0.167 3.9997,0.374 L3.9997,6.604 C3.9997,6.811 4.1497,6.978 4.3337,6.978 L11.6667,6.978 C11.8507,6.978 11.9997,6.811 11.9997,6.604 L11.9997,0.374 C11.9997,0.167 11.8507,6.21724894e-15 11.6667,6.21724894e-15 L11.6667,6.21724894e-15 L11.6667,6.21724894e-15 Z M5.9997,5 L9.9997,5 L9.9997,2 L5.9997,2 L5.9997,5 L5.9997,5 Z" id="Fill-14"></path>
</g>
</g>
-</svg> \ No newline at end of file
+</svg>
diff --git a/app/views/shared/icons/_project.svg b/app/views/shared/icons/_project.svg
deleted file mode 100644
index 1e8b43f8c6b..00000000000
--- a/app/views/shared/icons/_project.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg width="16px" height="16px" viewBox="0 0 16 16" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
- <!-- Generator: Sketch 3.8.3 (29802) - http://www.bohemiancoding.com/sketch -->
- <title>Page 1</title>
- <desc>Created with Sketch.</desc>
- <defs></defs>
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
- <path d="M6,6 L12,6 L12,5 L6,5 L6,6 Z M6,8 L12,8 L12,7 L6,7 L6,8 Z M6,10 L12,10 L12,9 L6,9 L6,10 Z M6,12 L12,12 L12,11 L6,11 L6,12 Z M4,6 L5,6 L5,5 L4,5 L4,6 Z M4,8 L5,8 L5,7 L4,7 L4,8 Z M4,10 L5,10 L5,9 L4,9 L4,10 Z M4,12 L5,12 L5,11 L4,11 L4,12 Z M13,3 L10,3 L10,4 L6,4 L6,3 L3,3 L3,13 L13,13 L13,3 Z M2,14 L14,14 L14,2 L2,2 L2,14 Z M1,0 C0.448,0 0,0.448 0,1 L0,15 C0,15.552 0.448,16 1,16 L15,16 C15.552,16 16,15.552 16,15 L16,1 C16,0.448 15.552,0 15,0 L1,0 Z" fill="#7F7E7E"></path>
- </g>
-</svg> \ No newline at end of file
diff --git a/app/views/shared/icons/_project.svg.erb b/app/views/shared/icons/_project.svg.erb
new file mode 100644
index 00000000000..2f60bb7245e
--- /dev/null
+++ b/app/views/shared/icons/_project.svg.erb
@@ -0,0 +1,3 @@
+<svg width="<%= size %>" height="<%= size %>" viewBox="0 0 16 16">
+ <path d="M6,6 L12,6 L12,5 L6,5 L6,6 Z M6,8 L12,8 L12,7 L6,7 L6,8 Z M6,10 L12,10 L12,9 L6,9 L6,10 Z M6,12 L12,12 L12,11 L6,11 L6,12 Z M4,6 L5,6 L5,5 L4,5 L4,6 Z M4,8 L5,8 L5,7 L4,7 L4,8 Z M4,10 L5,10 L5,9 L4,9 L4,10 Z M4,12 L5,12 L5,11 L4,11 L4,12 Z M13,3 L10,3 L10,4 L6,4 L6,3 L3,3 L3,13 L13,13 L13,3 Z M2,14 L14,14 L14,2 L2,2 L2,14 Z M1,0 C0.448,0 0,0.448 0,1 L0,15 C0,15.552 0.448,16 1,16 L15,16 C15.552,16 16,15.552 16,15 L16,1 C16,0.448 15.552,0 15,0 L1,0 Z" fill="#7F7E7E" fill-rule="evenodd"></path>
+</svg>
diff --git a/app/views/shared/issuable/_filter.html.haml b/app/views/shared/issuable/_filter.html.haml
index 094d6636c66..0b7fa8c7d06 100644
--- a/app/views/shared/issuable/_filter.html.haml
+++ b/app/views/shared/issuable/_filter.html.haml
@@ -44,9 +44,15 @@
placeholder: "Search authors", data: { first_user: (current_user.username if current_user), null_user: true, current_user: true, project_id: @project.id, field_name: "update[assignee_id]" } })
.filter-item.inline
= dropdown_tag("Milestone", options: { title: "Assign milestone", toggle_class: 'js-milestone-select js-extra-options js-filter-submit js-filter-bulk-update', filter: true, dropdown_class: "dropdown-menu-selectable dropdown-menu-milestone", placeholder: "Search milestones", data: { show_no: true, field_name: "update[milestone_id]", project_id: @project.id, milestones: namespace_project_milestones_path(@project.namespace, @project, :json), use_id: true } })
-
.filter-item.inline.labels-filter
= render "shared/issuable/label_dropdown", classes: ['js-filter-bulk-update', 'js-multiselect'], show_create: false, show_footer: false, extra_options: false, filter_submit: false, show_footer: false, data_options: { persist_when_hide: "true", field_name: "update[label_ids][]", show_no: false, show_any: false, use_id: true }
+ .filter-item.inline
+ = dropdown_tag("Subscription", options: { toggle_class: "js-subscription-event", title: "Change subscription", dropdown_class: "dropdown-menu-selectable", data: { field_name: "update[subscription_event]" } } ) do
+ %ul
+ %li
+ %a{href: "#", data: {id: "subscribe"}} Subscribe
+ %li
+ %a{href: "#", data: {id: "unsubscribe"}} Unsubscribe
= hidden_field_tag 'update[issues_ids]', []
= hidden_field_tag :state_event, params[:state_event]
@@ -63,6 +69,7 @@
new LabelsSelect();
new MilestoneSelect();
new IssueStatusSelect();
+ new SubscriptionSelect();
$('form.filter-form').on('submit', function (event) {
event.preventDefault();
Turbolinks.visit(this.action + '&' + $(this).serialize());
diff --git a/app/views/shared/issuable/_form.html.haml b/app/views/shared/issuable/_form.html.haml
index 98bbb12eaec..c30bdb0ae91 100644
--- a/app/views/shared/issuable/_form.html.haml
+++ b/app/views/shared/issuable/_form.html.haml
@@ -1,12 +1,5 @@
= form_errors(issuable)
-- if @conflict
- .alert.alert-danger
- Someone edited the #{issuable.class.model_name.human.downcase} the same time you did.
- Please check out
- = link_to "the #{issuable.class.model_name.human.downcase}", polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), target: "_blank"
- and make sure your changes will not unintentionally remove theirs
-
.form-group
= f.label :title, class: 'control-label'
.col-sm-10
@@ -156,5 +149,3 @@
= link_to 'Delete', polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), data: { confirm: "#{issuable.class.name.titleize} will be removed! Are you sure?" },
method: :delete, class: 'btn btn-danger btn-grouped'
= link_to 'Cancel', polymorphic_path([@project.namespace.becomes(Namespace), @project, issuable]), class: 'btn btn-grouped btn-cancel'
-
-= f.hidden_field :lock_version
diff --git a/app/views/shared/issuable/_sidebar.html.haml b/app/views/shared/issuable/_sidebar.html.haml
index adfab1af53e..e020a7d4d00 100644
--- a/app/views/shared/issuable/_sidebar.html.haml
+++ b/app/views/shared/issuable/_sidebar.html.haml
@@ -19,7 +19,7 @@
= form_for [@project.namespace.becomes(Namespace), @project, issuable], remote: true, format: :json, html: {class: 'issuable-context-form inline-update js-issuable-update'} do |f|
.block.assignee
- .sidebar-collapsed-icon.sidebar-collapsed-user{data: {toggle: "tooltip", placement: "left", container: "body"}, title: (issuable.assignee.to_reference if issuable.assignee)}
+ .sidebar-collapsed-icon.sidebar-collapsed-user{data: {toggle: "tooltip", placement: "left", container: "body"}, title: (issuable.assignee.name if issuable.assignee)}
- if issuable.assignee
= link_to_member(@project, issuable.assignee, size: 24)
- else
diff --git a/app/workers/git_garbage_collect_worker.rb b/app/workers/git_garbage_collect_worker.rb
index 2fa3c838f55..a6cefd4d601 100644
--- a/app/workers/git_garbage_collect_worker.rb
+++ b/app/workers/git_garbage_collect_worker.rb
@@ -8,7 +8,9 @@ class GitGarbageCollectWorker
project = Project.find(project_id)
gitlab_shell.gc(project.repository_storage_path, project.path_with_namespace)
- # Expire the branch cache in case garbage collection caused a ref lookup to fail
+ # Refresh the branch cache in case garbage collection caused a ref lookup to fail
project.repository.after_create_branch
+ project.repository.branch_names
+ project.repository.has_visible_content?
end
end
diff --git a/app/workers/project_export_worker.rb b/app/workers/project_export_worker.rb
index 39f6037e077..615311e63f5 100644
--- a/app/workers/project_export_worker.rb
+++ b/app/workers/project_export_worker.rb
@@ -1,7 +1,7 @@
class ProjectExportWorker
include Sidekiq::Worker
- sidekiq_options queue: :gitlab_shell, retry: true
+ sidekiq_options queue: :gitlab_shell, retry: 3
def perform(current_user_id, project_id)
current_user = User.find(current_user_id)
diff --git a/config/application.rb b/config/application.rb
index 21e7cc7b6e8..50cc4235eda 100644
--- a/config/application.rb
+++ b/config/application.rb
@@ -76,7 +76,7 @@ module Gitlab
# Enable the asset pipeline
config.assets.enabled = true
- config.assets.paths << Gemojione.index.images_path
+ config.assets.paths << Gemojione.images_path
config.assets.precompile << "*.png"
config.assets.precompile << "print.css"
config.assets.precompile << "notify.css"
@@ -87,6 +87,7 @@ module Gitlab
config.assets.precompile << "profile/application.js"
config.assets.precompile << "lib/utils/*.js"
config.assets.precompile << "lib/*.js"
+ config.assets.precompile << "u2f.js"
# Version of your assets, change this if you want to expire all your assets
config.assets.version = '1.0'
diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb
new file mode 100644
index 00000000000..9fd24a667cc
--- /dev/null
+++ b/config/initializers/secure_headers.rb
@@ -0,0 +1,109 @@
+# CSP headers have to have single quotes, so failures relating to quotes
+# inside Ruby string arrays are irrelevant.
+# rubocop:disable Lint/PercentStringArray
+require 'gitlab/current_settings'
+include Gitlab::CurrentSettings
+
+# If Sentry is enabled and the Rails app is running in production mode,
+# this will construct the Report URI for Sentry.
+if Rails.env.production? && current_application_settings.sentry_enabled
+ uri = URI.parse(current_application_settings.sentry_dsn)
+ CSP_REPORT_URI = "#{uri.scheme}://#{uri.host}/api#{uri.path}/csp-report/?sentry_key=#{uri.user}"
+else
+ CSP_REPORT_URI = ''
+end
+
+# Content Security Policy Headers
+# For more information on CSP see:
+# - https://gitlab.com/gitlab-org/gitlab-ce/issues/18231
+# - https://developer.mozilla.org/en-US/docs/Web/Security/CSP/CSP_policy_directives
+SecureHeaders::Configuration.default do |config|
+ # Mark all cookies as "Secure", "HttpOnly", and "SameSite=Strict".
+ config.cookies = {
+ secure: true,
+ httponly: true,
+ samesite: {
+ strict: true
+ }
+ }
+ config.x_content_type_options = "nosniff"
+ config.x_xss_protection = "1; mode=block"
+ config.x_download_options = "noopen"
+ config.x_permitted_cross_domain_policies = "none"
+ config.referrer_policy = "origin-when-cross-origin"
+ config.csp = {
+ # "Meta" values.
+ report_only: true,
+ preserve_schemes: true,
+
+ # "Directive" values.
+ # Default source allows nothing, more permissive values are set per-policy.
+ default_src: %w('none'),
+ # (Deprecated) Don't allow iframes.
+ frame_src: %w('none'),
+ # Only allow XMLHTTPRequests from the GitLab instance itself.
+ connect_src: %w('self'),
+ # Only load local fonts.
+ font_src: %w('self'),
+ # Load local images, any external image available over HTTPS.
+ img_src: %w(* 'self' data:),
+ # Audio and video can't be played on GitLab currently, so it's disabled.
+ media_src: %w('none'),
+ # Don't allow <object>, <embed>, or <applet> elements.
+ object_src: %w('none'),
+ # Allow local scripts and inline scripts.
+ script_src: %w('unsafe-inline' 'unsafe-eval' 'self'),
+ # Allow local stylesheets and inline styles.
+ style_src: %w('unsafe-inline' 'self'),
+ # The URIs that a user agent may use as the document base URL.
+ base_uri: %w('self'),
+ # Only allow local iframes and service workers
+ child_src: %w('self'),
+ # Only submit form information to the GitLab instance.
+ form_action: %w('self'),
+ # Disallow any parents from embedding a page in an iframe.
+ frame_ancestors: %w('none'),
+ # Don't allow any plugins (Flash, Shockwave, etc.)
+ plugin_types: %w(),
+ # Blocks all mixed (HTTP) content.
+ block_all_mixed_content: true,
+ # Upgrades insecure requests to HTTPS when possible.
+ upgrade_insecure_requests: true
+ }
+
+ # Reports are sent to Sentry if it's enabled.
+ if current_application_settings.sentry_enabled
+ config.csp[:report_uri] = %W(#{CSP_REPORT_URI})
+ end
+
+ # Allow Bootstrap Linter in development mode.
+ if Rails.env.development?
+ config.csp[:script_src] << "maxcdn.bootstrapcdn.com"
+ end
+
+ # reCAPTCHA
+ if current_application_settings.recaptcha_enabled
+ config.csp[:script_src] << "https://www.google.com/recaptcha/"
+ config.csp[:script_src] << "https://www.gstatic.com/recaptcha/"
+ config.csp[:frame_src] << "https://www.google.com/recaptcha/"
+ config.x_frame_options = "SAMEORIGIN"
+ end
+
+ # Gravatar
+ if current_application_settings.gravatar_enabled?
+ config.csp[:img_src] << "www.gravatar.com"
+ config.csp[:img_src] << "secure.gravatar.com"
+ config.csp[:img_src] << Gitlab.config.gravatar.host
+ end
+
+ # Piwik
+ if Gitlab.config.extra.has_key?('piwik_url') && Gitlab.config.extra.has_key?('piwik_site_id')
+ config.csp[:script_src] << Gitlab.config.extra.piwik_url
+ config.csp[:img_src] << Gitlab.config.extra.piwik_url
+ end
+
+ # Google Analytics
+ if Gitlab.config.extra.has_key?('google_analytics_id')
+ config.csp[:script_src] << "https://www.google-analytics.com"
+ end
+end
diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb
index 593c14a289f..b40fd81ff96 100644
--- a/config/initializers/sidekiq.rb
+++ b/config/initializers/sidekiq.rb
@@ -13,7 +13,14 @@ Sidekiq.configure_server do |config|
# UGLY Hack to get nested hash from settingslogic
cron_jobs = JSON.parse(Gitlab.config.cron_jobs.to_json)
# UGLY hack: Settingslogic doesn't allow 'class' key
- cron_jobs.each { |k, v| cron_jobs[k]['class'] = cron_jobs[k].delete('job_class') }
+ cron_jobs_required_keys = %w(job_class cron)
+ cron_jobs.each do |k, v|
+ if cron_jobs[k] && cron_jobs_required_keys.all? { |s| cron_jobs[k].key?(s) }
+ cron_jobs[k]['class'] = cron_jobs[k].delete('job_class')
+ else
+ raise("Invalid cron_jobs config key: '#{k}'. Check your gitlab config file.")
+ end
+ end
Sidekiq::Cron::Job.load_from_hash! cron_jobs
# Database pool should be at least `sidekiq_concurrency` + 2
diff --git a/db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb b/db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb
new file mode 100644
index 00000000000..15ad8e8bcbb
--- /dev/null
+++ b/db/migrate/20160519203051_add_developers_can_merge_to_protected_branches.rb
@@ -0,0 +1,9 @@
+class AddDevelopersCanMergeToProtectedBranches < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def change
+ add_column_with_default :protected_branches, :developers_can_merge, :boolean, default: false, allow_null: false
+ end
+end
diff --git a/db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb b/db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb
new file mode 100644
index 00000000000..7c5f76572ef
--- /dev/null
+++ b/db/migrate/20160629025435_add_column_in_progress_merge_commit_sha_to_merge_requests.rb
@@ -0,0 +1,8 @@
+# See http://doc.gitlab.com/ce/development/migration_style_guide.html
+# for more information on how to write migrations for GitLab.
+
+class AddColumnInProgressMergeCommitShaToMergeRequests < ActiveRecord::Migration
+ def change
+ add_column :merge_requests, :in_progress_merge_commit_sha, :string
+ end
+end
diff --git a/db/migrate/20160707104333_add_lock_to_issuables.rb b/db/migrate/20160707104333_add_lock_to_issuables.rb
deleted file mode 100644
index cb516672800..00000000000
--- a/db/migrate/20160707104333_add_lock_to_issuables.rb
+++ /dev/null
@@ -1,17 +0,0 @@
-# See http://doc.gitlab.com/ce/development/migration_style_guide.html
-# for more information on how to write migrations for GitLab.
-
-class AddLockToIssuables < ActiveRecord::Migration
- include Gitlab::Database::MigrationHelpers
- disable_ddl_transaction!
-
- def up
- add_column_with_default :issues, :lock_version, :integer, default: 0
- add_column_with_default :merge_requests, :lock_version, :integer, default: 0
- end
-
- def down
- remove_column :issues, :lock_version
- remove_column :merge_requests, :lock_version
- end
-end
diff --git a/db/migrate/20160715132507_add_user_id_to_pipeline.rb b/db/migrate/20160715132507_add_user_id_to_pipeline.rb
new file mode 100644
index 00000000000..af0461c4daf
--- /dev/null
+++ b/db/migrate/20160715132507_add_user_id_to_pipeline.rb
@@ -0,0 +1,7 @@
+class AddUserIdToPipeline < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ def change
+ add_column :ci_commits, :user_id, :integer
+ end
+end
diff --git a/db/migrate/20160715134306_add_index_for_pipeline_user_id.rb b/db/migrate/20160715134306_add_index_for_pipeline_user_id.rb
new file mode 100644
index 00000000000..7c991c6d998
--- /dev/null
+++ b/db/migrate/20160715134306_add_index_for_pipeline_user_id.rb
@@ -0,0 +1,9 @@
+class AddIndexForPipelineUserId < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ disable_ddl_transaction!
+
+ def change
+ add_concurrent_index :ci_commits, :user_id
+ end
+end
diff --git a/db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb b/db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb
new file mode 100644
index 00000000000..3e084023a65
--- /dev/null
+++ b/db/migrate/20160716115710_add_when_and_yaml_variables_to_ci_builds.rb
@@ -0,0 +1,8 @@
+class AddWhenAndYamlVariablesToCiBuilds < ActiveRecord::Migration
+ include Gitlab::Database::MigrationHelpers
+
+ def change
+ add_column :ci_builds, :when, :string
+ add_column :ci_builds, :yaml_variables, :text
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index f24e47b85b2..8882377f9f4 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: 20160712171823) do
+ActiveRecord::Schema.define(version: 20160716115710) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@@ -70,11 +70,11 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.string "recaptcha_site_key"
t.string "recaptcha_private_key"
t.integer "metrics_port", default: 8089
+ t.boolean "akismet_enabled", default: false
+ t.string "akismet_api_key"
t.integer "metrics_sample_interval", default: 15
t.boolean "sentry_enabled", default: false
t.string "sentry_dsn"
- t.boolean "akismet_enabled", default: false
- t.string "akismet_api_key"
t.boolean "email_author_in_body", default: false
t.integer "default_group_visibility"
t.boolean "repository_checks_enabled", default: false
@@ -84,10 +84,10 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.string "health_check_access_token"
t.boolean "send_user_confirmation_email", default: false
t.integer "container_registry_token_expire_delay", default: 5
+ t.boolean "user_default_external", default: false, null: false
t.text "after_sign_up_text"
t.string "repository_storage", default: "default"
t.string "enabled_git_access_protocol"
- t.boolean "user_default_external", default: false, null: false
end
create_table "audit_events", force: :cascade do |t|
@@ -165,9 +165,11 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.text "artifacts_metadata"
t.integer "erased_by_id"
t.datetime "erased_at"
- t.datetime "artifacts_expire_at"
t.string "environment"
+ t.datetime "artifacts_expire_at"
t.integer "artifacts_size"
+ t.string "when"
+ t.text "yaml_variables"
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
@@ -199,6 +201,7 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.datetime "started_at"
t.datetime "finished_at"
t.integer "duration"
+ t.integer "user_id"
end
add_index "ci_commits", ["gl_project_id", "sha"], name: "index_ci_commits_on_gl_project_id_and_sha", using: :btree
@@ -210,6 +213,7 @@ ActiveRecord::Schema.define(version: 20160712171823) do
add_index "ci_commits", ["project_id"], name: "index_ci_commits_on_project_id", using: :btree
add_index "ci_commits", ["sha"], name: "index_ci_commits_on_sha", using: :btree
add_index "ci_commits", ["status"], name: "index_ci_commits_on_status", using: :btree
+ add_index "ci_commits", ["user_id"], name: "index_ci_commits_on_user_id", using: :btree
create_table "ci_events", force: :cascade do |t|
t.integer "project_id"
@@ -481,11 +485,10 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.string "state"
t.integer "iid"
t.integer "updated_by_id"
- t.integer "moved_to_id"
t.boolean "confidential", default: false
t.datetime "deleted_at"
t.date "due_date"
- t.integer "lock_version", default: 0, null: false
+ t.integer "moved_to_id"
end
add_index "issues", ["assignee_id"], name: "index_issues_on_assignee_id", using: :btree
@@ -625,9 +628,8 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.integer "merge_user_id"
t.string "merge_commit_sha"
t.datetime "deleted_at"
- t.integer "lock_version", default: 0, null: false
+ t.string "in_progress_merge_commit_sha"
end
-
add_index "merge_requests", ["assignee_id"], name: "index_merge_requests_on_assignee_id", using: :btree
add_index "merge_requests", ["author_id"], name: "index_merge_requests_on_author_id", using: :btree
add_index "merge_requests", ["created_at", "id"], name: "index_merge_requests_on_created_at_and_id", using: :btree
@@ -775,10 +777,10 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.integer "user_id", null: false
t.string "token", null: false
t.string "name", null: false
- t.boolean "revoked", default: false
- t.datetime "expires_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
+ t.boolean "revoked", default: false
+ t.datetime "expires_at"
end
add_index "personal_access_tokens", ["token"], name: "index_personal_access_tokens_on_token", unique: true, using: :btree
@@ -860,11 +862,12 @@ ActiveRecord::Schema.define(version: 20160712171823) do
add_index "projects", ["visibility_level"], name: "index_projects_on_visibility_level", using: :btree
create_table "protected_branches", force: :cascade do |t|
- t.integer "project_id", null: false
- t.string "name", null: false
+ t.integer "project_id", null: false
+ t.string "name", null: false
t.datetime "created_at"
t.datetime "updated_at"
- t.boolean "developers_can_push", default: false, null: false
+ t.boolean "developers_can_push", default: false, null: false
+ t.boolean "developers_can_merge", default: false, null: false
end
add_index "protected_branches", ["project_id"], name: "index_protected_branches_on_project_id", using: :btree
@@ -898,9 +901,9 @@ ActiveRecord::Schema.define(version: 20160712171823) do
t.string "type"
t.string "title"
t.integer "project_id"
- t.datetime "created_at", null: false
- t.datetime "updated_at", null: false
- t.boolean "active", null: false
+ t.datetime "created_at"
+ t.datetime "updated_at"
+ t.boolean "active", default: false, null: false
t.text "properties"
t.boolean "template", default: false
t.boolean "push_events", default: true
diff --git a/doc/api/branches.md b/doc/api/branches.md
index abc4732c395..dbe8306c66f 100644
--- a/doc/api/branches.md
+++ b/doc/api/branches.md
@@ -23,6 +23,8 @@ Example response:
{
"name": "master",
"protected": true,
+ "developers_can_push": false,
+ "developers_can_merge": false,
"commit": {
"author_email": "john@example.com",
"author_name": "John Smith",
@@ -64,6 +66,8 @@ Example response:
{
"name": "master",
"protected": true,
+ "developers_can_push": false,
+ "developers_can_merge": false,
"commit": {
"author_email": "john@example.com",
"author_name": "John Smith",
@@ -91,13 +95,15 @@ PUT /projects/:id/repository/branches/:branch/protect
```
```bash
-curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect
+curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/5/repository/branches/master/protect?developers_can_push=true&developers_can_merge=true
```
| Attribute | Type | Required | Description |
| --------- | ---- | -------- | ----------- |
| `id` | integer | yes | The ID of a project |
| `branch` | string | yes | The name of the branch |
+| `developers_can_push` | boolean | no | Flag if developers can push to the branch |
+| `developers_can_merge` | boolean | no | Flag if developers can merge to the branch |
Example response:
@@ -117,7 +123,9 @@ Example response:
]
},
"name": "master",
- "protected": true
+ "protected": true,
+ "developers_can_push": true,
+ "developers_can_merge": true
}
```
@@ -158,7 +166,9 @@ Example response:
]
},
"name": "master",
- "protected": false
+ "protected": false,
+ "developers_can_push": false,
+ "developers_can_merge": false
}
```
@@ -196,7 +206,9 @@ Example response:
]
},
"name": "newbranch",
- "protected": false
+ "protected": false,
+ "developers_can_push": false,
+ "developers_can_merge": false
}
```
diff --git a/doc/api/issues.md b/doc/api/issues.md
index 3ced787b23e..419fb8f85d8 100644
--- a/doc/api/issues.md
+++ b/doc/api/issues.md
@@ -78,7 +78,8 @@ Example response:
"iid" : 6,
"labels" : [],
"subscribed" : false,
- "user_notes_count": 1
+ "user_notes_count": 1,
+ "due_date": "2016-07-22"
}
]
```
@@ -154,7 +155,8 @@ Example response:
"updated_at" : "2016-01-04T15:31:46.176Z",
"created_at" : "2016-01-04T15:31:46.176Z",
"subscribed" : false,
- "user_notes_count": 1
+ "user_notes_count": 1,
+ "due_date": null
}
]
```
@@ -232,7 +234,8 @@ Example response:
"updated_at" : "2016-01-04T15:31:46.176Z",
"created_at" : "2016-01-04T15:31:46.176Z",
"subscribed" : false,
- "user_notes_count": 1
+ "user_notes_count": 1,
+ "due_date": "2016-07-22"
}
]
```
@@ -295,7 +298,8 @@ Example response:
"updated_at" : "2016-01-04T15:31:46.176Z",
"created_at" : "2016-01-04T15:31:46.176Z",
"subscribed": false,
- "user_notes_count": 1
+ "user_notes_count": 1,
+ "due_date": null
}
```
@@ -320,6 +324,7 @@ POST /projects/:id/issues
| `milestone_id` | integer | no | The ID of a milestone to assign issue |
| `labels` | string | no | Comma-separated label names for an issue |
| `created_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` |
+| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
```bash
curl -X POST -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues?title=Issues%20with%20auth&labels=bug
@@ -351,7 +356,8 @@ Example response:
"updated_at" : "2016-01-07T12:44:33.959Z",
"milestone" : null,
"subscribed" : true,
- "user_notes_count": 0
+ "user_notes_count": 0,
+ "due_date": null
}
```
@@ -379,6 +385,7 @@ PUT /projects/:id/issues/:issue_id
| `labels` | string | no | Comma-separated label names for an issue |
| `state_event` | string | no | The state event of an issue. Set `close` to close the issue and `reopen` to reopen it |
| `updated_at` | string | no | Date time string, ISO 8601 formatted, e.g. `2016-03-11T03:45:40Z` |
+| `due_date` | string | no | Date time string in the format YEAR-MONTH-DAY, e.g. `2016-03-11` |
```bash
curl -X PUT -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.com/api/v3/projects/4/issues/85?state_event=close
@@ -410,7 +417,8 @@ Example response:
"assignee" : null,
"milestone" : null,
"subscribed" : true,
- "user_notes_count": 0
+ "user_notes_count": 0,
+ "due_date": "2016-07-22"
}
```
@@ -487,7 +495,8 @@ Example response:
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/7a190fecbaa68212a4b68aeb6e3acd10?s=80&d=identicon",
"web_url": "https://gitlab.example.com/u/solon.cremin"
- }
+ },
+ "due_date": null
}
```
@@ -541,7 +550,8 @@ Example response:
"state": "active",
"avatar_url": "http://www.gravatar.com/avatar/7a190fecbaa68212a4b68aeb6e3acd10?s=80&d=identicon",
"web_url": "https://gitlab.example.com/u/solon.cremin"
- }
+ },
+ "due_date": null
}
```
@@ -596,7 +606,8 @@ Example response:
"avatar_url": "http://www.gravatar.com/avatar/5224fd70153710e92fb8bcf79ac29d67?s=80&d=identicon",
"web_url": "https://gitlab.example.com/u/orville"
},
- "subscribed": false
+ "subscribed": false,
+ "due_date": null
}
```
diff --git a/doc/api/todos.md b/doc/api/todos.md
index 23f6e35f2a4..937c71de386 100644
--- a/doc/api/todos.md
+++ b/doc/api/todos.md
@@ -277,8 +277,7 @@ Example Response:
## Mark all todos as done
-Marks all pending todos for the current user as done. All todos marked as done
-are returned in the response.
+Marks all pending todos for the current user as done. It returns the number of marked todos.
```
DELETE /todos
@@ -291,154 +290,7 @@ curl -X DELETE -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" https://gitlab.example.c
Example Response:
```json
-[
- {
- "id": 102,
- "project": {
- "id": 2,
- "name": "Gitlab Ce",
- "name_with_namespace": "Gitlab Org / Gitlab Ce",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
- },
- "author": {
- "name": "Administrator",
- "username": "root",
- "id": 1,
- "state": "active",
- "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
- "web_url": "https://gitlab.example.com/u/root"
- },
- "action_name": "marked",
- "target_type": "MergeRequest",
- "target": {
- "id": 34,
- "iid": 7,
- "project_id": 2,
- "title": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
- "description": "Et ea et omnis illum cupiditate. Dolor aspernatur tenetur ducimus facilis est nihil. Quo esse cupiditate molestiae illo corrupti qui quidem dolor.",
- "state": "opened",
- "created_at": "2016-06-17T07:49:24.419Z",
- "updated_at": "2016-06-17T07:52:43.484Z",
- "target_branch": "tutorials_git_tricks",
- "source_branch": "DNSBL_docs",
- "upvotes": 0,
- "downvotes": 0,
- "author": {
- "name": "Maxie Medhurst",
- "username": "craig_rutherford",
- "id": 12,
- "state": "active",
- "avatar_url": "http://www.gravatar.com/avatar/a0d477b3ea21970ce6ffcbb817b0b435?s=80&d=identicon",
- "web_url": "https://gitlab.example.com/u/craig_rutherford"
- },
- "assignee": {
- "name": "Administrator",
- "username": "root",
- "id": 1,
- "state": "active",
- "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
- "web_url": "https://gitlab.example.com/u/root"
- },
- "source_project_id": 2,
- "target_project_id": 2,
- "labels": [],
- "work_in_progress": false,
- "milestone": {
- "id": 32,
- "iid": 2,
- "project_id": 2,
- "title": "v1.0",
- "description": "Assumenda placeat ea voluptatem voluptate qui.",
- "state": "active",
- "created_at": "2016-06-17T07:47:34.163Z",
- "updated_at": "2016-06-17T07:47:34.163Z",
- "due_date": null
- },
- "merge_when_build_succeeds": false,
- "merge_status": "cannot_be_merged",
- "subscribed": true,
- "user_notes_count": 7
- },
- "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ce/merge_requests/7",
- "body": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
- "state": "done",
- "created_at": "2016-06-17T07:52:35.225Z"
- },
- {
- "id": 98,
- "project": {
- "id": 2,
- "name": "Gitlab Ce",
- "name_with_namespace": "Gitlab Org / Gitlab Ce",
- "path": "gitlab-ce",
- "path_with_namespace": "gitlab-org/gitlab-ce"
- },
- "author": {
- "name": "Maxie Medhurst",
- "username": "craig_rutherford",
- "id": 12,
- "state": "active",
- "avatar_url": "http://www.gravatar.com/avatar/a0d477b3ea21970ce6ffcbb817b0b435?s=80&d=identicon",
- "web_url": "https://gitlab.example.com/u/craig_rutherford"
- },
- "action_name": "assigned",
- "target_type": "MergeRequest",
- "target": {
- "id": 34,
- "iid": 7,
- "project_id": 2,
- "title": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
- "description": "Et ea et omnis illum cupiditate. Dolor aspernatur tenetur ducimus facilis est nihil. Quo esse cupiditate molestiae illo corrupti qui quidem dolor.",
- "state": "opened",
- "created_at": "2016-06-17T07:49:24.419Z",
- "updated_at": "2016-06-17T07:52:43.484Z",
- "target_branch": "tutorials_git_tricks",
- "source_branch": "DNSBL_docs",
- "upvotes": 0,
- "downvotes": 0,
- "author": {
- "name": "Maxie Medhurst",
- "username": "craig_rutherford",
- "id": 12,
- "state": "active",
- "avatar_url": "http://www.gravatar.com/avatar/a0d477b3ea21970ce6ffcbb817b0b435?s=80&d=identicon",
- "web_url": "https://gitlab.example.com/u/craig_rutherford"
- },
- "assignee": {
- "name": "Administrator",
- "username": "root",
- "id": 1,
- "state": "active",
- "avatar_url": "http://www.gravatar.com/avatar/e64c7d89f26bd1972efa854d13d7dd61?s=80&d=identicon",
- "web_url": "https://gitlab.example.com/u/root"
- },
- "source_project_id": 2,
- "target_project_id": 2,
- "labels": [],
- "work_in_progress": false,
- "milestone": {
- "id": 32,
- "iid": 2,
- "project_id": 2,
- "title": "v1.0",
- "description": "Assumenda placeat ea voluptatem voluptate qui.",
- "state": "active",
- "created_at": "2016-06-17T07:47:34.163Z",
- "updated_at": "2016-06-17T07:47:34.163Z",
- "due_date": null
- },
- "merge_when_build_succeeds": false,
- "merge_status": "cannot_be_merged",
- "subscribed": true,
- "user_notes_count": 7
- },
- "target_url": "https://gitlab.example.com/gitlab-org/gitlab-ce/merge_requests/7",
- "body": "Dolores in voluptatem tenetur praesentium omnis repellendus voluptatem quaerat.",
- "state": "done",
- "created_at": "2016-06-17T07:49:24.624Z"
- },
-]
+3
```
[ce-3188]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/3188
diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md
index 16a1461a7e4..5f77888f631 100644
--- a/doc/ci/yaml/README.md
+++ b/doc/ci/yaml/README.md
@@ -757,12 +757,13 @@ Introduced in GitLab 8.6 and GitLab Runner v1.1.1.
This feature should be used in conjunction with [`artifacts`](#artifacts) and
allows you to define the artifacts to pass between different builds.
-Note that `artifacts` from previous [stages](#stages) are passed by default.
+Note that `artifacts` from all previous [stages](#stages) are passed by default.
To use this feature, define `dependencies` in context of the job and pass
a list of all previous builds from which the artifacts should be downloaded.
You can only define builds from stages that are executed before the current one.
An error will be shown if you define builds from the current stage or next ones.
+Defining an empty array will skip downloading any artifacts for that job.
---
@@ -985,11 +986,11 @@ directive defined in `.postgres_services` and `.mysql_services` respectively:
- ruby
test:postgres:
- << *job_definition
+ <<: *job_definition
services: *postgres_definition
test:mysql:
- << *job_definition
+ <<: *job_definition
services: *mysql_definition
```
diff --git a/doc/development/doc_styleguide.md b/doc/development/doc_styleguide.md
index 975bb82c37d..fac35ec964d 100644
--- a/doc/development/doc_styleguide.md
+++ b/doc/development/doc_styleguide.md
@@ -44,7 +44,7 @@ it organized and easy to find.
- When introducing a new document, be careful for the headings to be
grammatically and syntactically correct. It is advised to mention one or all
of the following GitLab members for a review: `@axil`, `@rspeicher`,
- `@dblessing`, `@ashleys`, `@nearlythere`. This is to ensure that no document
+ `@dblessing`, `@ashleys`. This is to ensure that no document
with wrong heading is going live without an audit, thus preventing dead links
and redirection issues when corrected
- Leave exactly one newline after a heading
diff --git a/doc/development/rake_tasks.md b/doc/development/rake_tasks.md
index 41685c7ee41..8852dbcb19e 100644
--- a/doc/development/rake_tasks.md
+++ b/doc/development/rake_tasks.md
@@ -53,3 +53,8 @@ Generating a sprite file containing all the Emoji can be done by running:
```
bundle exec rake gemojione:sprite
```
+
+If new emoji are added, the spritesheet may change size. To compensate for
+such changes, first generate the `emoji.png` spritesheet with the above Rake
+task, then check the dimensions of the new spritesheet and update the
+`SPRITESHEET_WIDTH` and `SPRITESHEET_HEIGHT` constants accordingly.
diff --git a/doc/development/ui_guide.md b/doc/development/ui_guide.md
index 8d02c52c477..65252288019 100644
--- a/doc/development/ui_guide.md
+++ b/doc/development/ui_guide.md
@@ -1,45 +1,45 @@
-# UI Guide for building GitLab
+# UI Guide for building GitLab
## GitLab UI development kit
We created a page inside GitLab where you can check commonly used html and css elements.
-When you run GitLab instance locally - just visit http://localhost:3000/help/ui page to see UI examples
+When you run GitLab instance locally - just visit http://localhost:3000/help/ui page to see UI examples
you can use during GitLab development.
## Design repository
-All design files are stored in the [gitlab-design](https://gitlab.com/gitlab-org/gitlab-design)
-repository and maintained by GitLab UX designers.
+All design files are stored in the [gitlab-design](https://gitlab.com/gitlab-org/gitlab-design)
+repository and maintained by GitLab UX designers.
## Navigation
-GitLab's layout contains 2 sections: the left sidebar and the content. The left sidebar contains a static navigation menu.
-This menu will be visible regardless of what page you visit. The left sidebar also contains the GitLab logo
-and the current user's profile picture. The content section contains a header and the content itself.
-The header describes the current GitLab page and what navigation is
-available to user in this area. Depending on the area (project, group, profile setting) the header name and navigation may change. For example when user visits one of the
+GitLab's layout contains 2 sections: the left sidebar and the content. The left sidebar contains a static navigation menu.
+This menu will be visible regardless of what page you visit. The left sidebar also contains the GitLab logo
+and the current user's profile picture. The content section contains a header and the content itself.
+The header describes the current GitLab page and what navigation is
+available to user in this area. Depending on the area (project, group, profile setting) the header name and navigation may change. For example when user visits one of the
project pages the header will contain a project name and navigation for that project. When the user visits a group page it will contain a group name and navigation related to this group.
### Adding new tab to header navigation
-We try to keep the amount of tabs in the header navigation between 5 and 10 so that it fits on a typical laptop screen. We also try not to confuse the user with too many options. Ideally each
-tab should represent separate functionality. Everything related to the issue
-tracker should be under the 'Issues' tab while everything related to the wiki should
+We try to keep the amount of tabs in the header navigation between 5 and 10 so that it fits on a typical laptop screen. We also try not to confuse the user with too many options. Ideally each
+tab should represent separate functionality. Everything related to the issue
+tracker should be under the 'Issues' tab while everything related to the wiki should
be under 'Wiki' tab and so on and so forth.
-When adding a new tab to the header don't use more than 2 words for text in the link.
+When adding a new tab to the header don't use more than 2 words for text in the link.
We want to keep links short and easy to remember and fit all of them in the small screen.
-## Mobile screen size
+## Mobile screen size
-We want GitLab to work well on small mobile screens as well. Size limitations make it is impossible to fit everything on a mobile screen. In this case it is OK to hide
-part of the UI for smaller resolutions in favor of a better user experience.
+We want GitLab to work well on small mobile screens as well. Size limitations make it is impossible to fit everything on a mobile screen. In this case it is OK to hide
+part of the UI for smaller resolutions in favor of a better user experience.
However core functionality like browsing files, creating issues, writing comments, should
be available on all resolutions.
## Icons
-* `trash` icon for button or link that does destructive action like removing
+* `trash` icon for button or link that does destructive action like removing
information from database or file system
* `x` icon for closing/hiding UI element. For example close modal window
* `pencil` icon for edit button or link
@@ -52,8 +52,14 @@ information from database or file system
* Button should contain icon or text. Exceptions should be approved by UX designer.
* Use red button for destructive actions (not revertable). For example removing issue.
-* Use green or blue button for primary action. Primary button should be only one.
-Do not use both green and blue button in one form.
-* For all other cases use default white button.
-* Text button should have only first word capitalized. So should be "Create issue" instead of "Create Issue"
+* Use green or blue button for primary action. Primary button should be only one.
+Do not use both green and blue button in one form.
+* For all other cases use default white button.
+* Text button should have only first word capitalized. So should be "Create issue" instead of "Create Issue"
+## Counts
+
+* Always use the [`number_with_delimiter`][number_with_delimiter] helper to
+ display counts in the UI.
+
+[number_with_delimiter]: http://api.rubyonrails.org/classes/ActionView/Helpers/NumberHelper.html#method-i-number_with_delimiter
diff --git a/doc/integration/oauth_provider.md b/doc/integration/oauth_provider.md
index 5f8bb57365c..0c53584d201 100644
--- a/doc/integration/oauth_provider.md
+++ b/doc/integration/oauth_provider.md
@@ -28,7 +28,8 @@ GitLab supports two ways of adding a new OAuth2 application to an instance. You
can either add an application as a regular user or add it in the admin area.
What this means is that GitLab can actually have instance-wide and a user-wide
applications. There is no difference between them except for the different
-permission levels they are set (user/admin).
+permission levels they are set (user/admin). The default callback URL is
+`http://your-gitlab.example.com/users/auth/gitlab/callback`
## Adding an application through the profile
diff --git a/doc/raketasks/maintenance.md b/doc/raketasks/maintenance.md
index d9dce2af480..315cb56a089 100644
--- a/doc/raketasks/maintenance.md
+++ b/doc/raketasks/maintenance.md
@@ -167,3 +167,22 @@ of those assets. Unless you are modifying the JavaScript / CSS code on your
production machine after installing the package, there should be no reason to redo
rake assets:precompile on the production machine. If you suspect that assets
have been corrupted, you should reinstall the omnibus package.
+
+## Tracking Deployments
+
+GitLab provides a Rake task that lets you track deployments in GitLab
+Performance Monitoring. This Rake task simply stores the current GitLab version
+in the GitLab Performance Monitoring database.
+
+For Omnibus-packages:
+
+```
+sudo gitlab-rake gitlab:track_deployment
+```
+
+For installations from source:
+
+```
+cd /home/git/gitlab
+sudo -u git -H bundle exec rake gitlab:track_deployment RAILS_ENV=production
+```
diff --git a/features/project/merge_requests.feature b/features/project/merge_requests.feature
index 8176ec5ab45..21768c15c17 100644
--- a/features/project/merge_requests.feature
+++ b/features/project/merge_requests.feature
@@ -89,7 +89,7 @@ Feature: Project Merge Requests
Then The list should be sorted by "Oldest updated"
@javascript
- Scenario: Visiting Merge Requests from a different Project after sorting
+ Scenario: Visiting Merge Requests from a differente Project after sorting
Given I visit project "Shop" merge requests page
And I sort the list by "Oldest updated"
And I visit dashboard merge requests page
diff --git a/fixtures/emojis/aliases.json b/fixtures/emojis/aliases.json
index d3831d8045b..e2f47db0de2 100644
--- a/fixtures/emojis/aliases.json
+++ b/fixtures/emojis/aliases.json
@@ -1,16 +1,9 @@
{
- "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",
@@ -21,51 +14,65 @@
"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",
+ "boxing_gloves":"boxing_glove",
"spiral_calendar_pad":"calendar_spiral",
+ "call_me_hand":"call_me",
+ "call_me_hand_tone1":"call_me_tone1",
+ "call_me_hand_tone2":"call_me_tone2",
+ "call_me_hand_tone3":"call_me_tone3",
+ "call_me_hand_tone4":"call_me_tone4",
+ "call_me_hand_tone5":"call_me_tone5",
+ "kayak":"canoe",
"card_file_box":"card_box",
- "tape_cartridge":"cartridge",
+ "person_doing_cartwheel":"cartwheel",
+ "person_doing_cartwheel_tone1":"cartwheel_tone1",
+ "person_doing_cartwheel_tone2":"cartwheel_tone2",
+ "person_doing_cartwheel_tone3":"cartwheel_tone3",
+ "person_doing_cartwheel_tone4":"cartwheel_tone4",
+ "person_doing_cartwheel_tone5":"cartwheel_tone5",
"bottle_with_popping_cork":"champagne",
+ "clinking_glass":"champagne_glass",
"cheese_wedge":"cheese",
"city_sunrise":"city_sunset",
"mantlepiece_clock":"clock",
- "clockwise_right_and_left_semicircle_arrows":"clockwise_arrows",
"cloud_with_lightning":"cloud_lightning",
"cloud_with_rain":"cloud_rain",
"cloud_with_snow":"cloud_snow",
"cloud_with_tornado":"cloud_tornado",
- "old_personal_computer":"computer_old",
- "building_construction":"contruction_site",
+ "clown_face":"clown",
+ "building_construction":"construction_site",
"couch_and_lamp":"couch",
"couple_with_heart_mm":"couple_mm",
"couple_with_heart_ww":"couple_ww",
+ "face_with_cowboy_hat":"cowboy",
"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",
"passenger_ship":"cruise_ship",
"dagger_knife":"dagger",
"desktop_computer":"desktop",
"card_index_dividers":"dividers",
- "document_with_text":"document_text",
"dove_of_peace":"dove",
+ "drool":"drooling_face",
+ "drum_with_drumsticks":"drum",
"email":"e-mail",
- "back_of_envelope":"envelope_back",
- "flying_envelope":"envelope_flying",
- "stamped_envelope":"envelope_stamped",
- "pen_over_stamped_envelope":"envelope_stamped_pen",
- "white_down_pointing_left_hand_index":"finger_pointing_down",
- "sideways_white_down_pointing_index":"finger_pointing_down2",
- "sideways_white_left_pointing_index":"finger_pointing_left",
- "sideways_white_right_pointing_index":"finger_pointing_right",
- "sideways_white_up_pointing_index":"finger_pointing_up",
+ "eject_symbol":"eject",
+ "facepalm":"face_palm",
+ "facepalm_tone1":"face_palm_tone1",
+ "facepalm_tone2":"face_palm_tone2",
+ "facepalm_tone3":"face_palm_tone3",
+ "facepalm_tone4":"face_palm_tone4",
+ "facepalm_tone5":"face_palm_tone5",
+ "fencing":"fencer",
+ "hand_with_index_and_middle_finger_crossed":"fingers_crossed",
+ "hand_with_index_and_middle_fingers_crossed_tone1":"fingers_crossed_tone1",
+ "hand_with_index_and_middle_fingers_crossed_tone2":"fingers_crossed_tone2",
+ "hand_with_index_and_middle_fingers_crossed_tone3":"fingers_crossed_tone3",
+ "hand_with_index_and_middle_fingers_crossed_tone4":"fingers_crossed_tone4",
+ "hand_with_index_and_middle_fingers_crossed_tone5":"fingers_crossed_tone5",
"flame":"fire",
- "oncoming_fire_engine":"fire_engine_oncoming",
+ "first_place_medal":"first_place",
"ac":"flag_ac",
"ad":"flag_ad",
"ae":"flag_ae",
@@ -326,44 +333,51 @@
"za":"flag_za",
"zm":"flag_zm",
"zw":"flag_zw",
- "clamshell_mobile_phone":"flip_phone",
- "black_hard_shell_floppy_disk":"floppy_black",
- "white_hard_shell_floppy_disk":"floppy_white",
- "open_folder":"folder_open",
"fork_and_knife_with_plate":"fork_knife_plate",
+ "fox_face":"fox",
"frame_with_picture":"frame_photo",
- "frame_with_tiles":"frame_tiles",
- "frame_with_an_x":"frame_x",
+ "baguette_bread":"french_bread",
"anguished":"frowning",
"white_frowning_face":"frowning2",
+ "goal_net":"goal",
"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",
+ "shaking_hands":"handshake",
+ "shaking_hands_tone1":"handshake_tone1",
+ "shaking_hands_tone2":"handshake_tone2",
+ "shaking_hands_tone3":"handshake_tone3",
+ "shaking_hands_tone4":"handshake_tone4",
+ "shaking_hands_tone5":"handshake_tone5",
"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",
+ "juggler":"juggling",
+ "juggler_tone1":"juggling_tone1",
+ "juggler_tone2":"juggling_tone2",
+ "juggler_tone3":"juggling_tone3",
+ "juggler_tone4":"juggling_tone4",
+ "juggler_tone5":"juggling_tone5",
"old_key":"key2",
- "wired_keyboard":"keyboard",
- "keyboard_and_mouse":"keyboard_mouse",
- "musical_keyboard_with_jacks":"keyboard_with_jacks",
"couplekiss_mm":"kiss_mm",
"couplekiss_ww":"kiss_ww",
+ "kiwifruit":"kiwi",
"satisfied":"laughing",
- "left_hand_telephone_receiver":"left_receiver",
+ "left_fist":"left_facing_fist",
+ "left_fist_tone1":"left_facing_fist_tone1",
+ "left_fist_tone2":"left_facing_fist_tone2",
+ "left_fist_tone3":"left_facing_fist_tone3",
+ "left_fist_tone4":"left_facing_fist_tone4",
+ "left_fist_tone5":"left_facing_fist_tone5",
"man_in_business_suit_levitating":"levitate",
"weight_lifter":"lifter",
"weight_lifter_tone1":"lifter_tone1",
@@ -371,9 +385,21 @@
"weight_lifter_tone3":"lifter_tone3",
"weight_lifter_tone4":"lifter_tone4",
"weight_lifter_tone5":"lifter_tone5",
- "light_mark":"light_check_mark",
"lion":"lion_face",
+ "liar":"lying_face",
+ "male_dancer":"man_dancing",
+ "male_dancer_tone1":"man_dancing_tone1",
+ "male_dancer_tone2":"man_dancing_tone2",
+ "male_dancer_tone3":"man_dancing_tone3",
+ "male_dancer_tone4":"man_dancing_tone4",
+ "male_dancer_tone5":"man_dancing_tone5",
+ "tuxedo_tone1":"man_in_tuxedo_tone1",
+ "tuxedo_tone2":"man_in_tuxedo_tone2",
+ "tuxedo_tone3":"man_in_tuxedo_tone3",
+ "tuxedo_tone4":"man_in_tuxedo_tone4",
+ "tuxedo_tone5":"man_in_tuxedo_tone5",
"world_map":"map",
+ "karate_uniform":"martial_arts_uniform",
"sports_medal":"medal",
"sign_of_the_horns":"metal",
"sign_of_the_horns_tone1":"metal_tone1",
@@ -388,21 +414,23 @@
"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",
+ "glass_of_milk":"milk",
"money_mouth_face":"money_mouth",
- "lightning_mood_bubble":"mood_bubble_lightning",
- "lightning_mood":"mood_lightning",
+ "motorbike":"motor_scooter",
"racing_motorcycle":"motorcycle",
"snow_capped_mountain":"mountain_snow",
- "one_button_mouse":"mouse_one",
"three_button_mouse":"mouse_three_button",
+ "mother_christmas":"mrs_claus",
+ "mother_christmas_tone1":"mrs_claus_tone1",
+ "mother_christmas_tone2":"mrs_claus_tone2",
+ "mother_christmas_tone3":"mrs_claus_tone3",
+ "mother_christmas_tone4":"mrs_claus_tone4",
+ "mother_christmas_tone5":"mrs_claus_tone5",
+ "sick":"nauseated_face",
"nerd_face":"nerd",
- "three_networked_computers":"network",
"rolled_up_newspaper":"newspaper2",
- "note_page":"note",
- "empty_note_page":"note_empty",
- "note_pad":"notepad",
- "empty_note_pad":"notepad_empty",
"spiral_note_pad":"notepad_spiral",
+ "stop_sign":"octagonal_sign",
"oil_drum":"oil",
"grandma":"older_woman",
"grandma_tone1":"older_woman_tone1",
@@ -410,57 +438,66 @@
"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",
+ "shelled_peanut":"peanuts",
"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",
+ "expecting_woman":"pregnant_woman",
+ "expecting_woman_tone1":"pregnant_woman_tone1",
+ "expecting_woman_tone2":"pregnant_woman_tone2",
+ "expecting_woman_tone3":"pregnant_woman_tone3",
+ "expecting_woman_tone4":"pregnant_woman_tone4",
+ "expecting_woman_tone5":"pregnant_woman_tone5",
"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",
+ "back_of_hand":"raised_back_of_hand",
+ "back_of_hand_tone1":"raised_back_of_hand_tone1",
+ "back_of_hand_tone2":"raised_back_of_hand_tone2",
+ "back_of_hand_tone3":"raised_back_of_hand_tone3",
+ "back_of_hand_tone4":"raised_back_of_hand_tone4",
+ "back_of_hand_tone5":"raised_back_of_hand_tone5",
+ "rhinoceros":"rhino",
+ "right_fist":"right_facing_fist",
+ "right_fist_tone1":"right_facing_fist_tone1",
+ "right_fist_tone2":"right_facing_fist_tone2",
+ "right_fist_tone3":"right_facing_fist_tone3",
+ "right_fist_tone4":"right_facing_fist_tone4",
+ "right_fist_tone5":"right_facing_fist_tone5",
"robot_face":"robot",
+ "rolling_on_the_floor_laughing":"rofl",
"face_with_rolling_eyes":"rolling_eyes",
+ "green_salad":"salad",
+ "second_place_medal":"second_place",
+ "paella":"shallow_pan_of_food",
+ "shopping_trolley":"shopping_cart",
"skeleton":"skull",
"skull_and_crossbones":"skull_crossbones",
"slightly_frowning_face":"slight_frown",
"slightly_smiling_face":"slight_smile",
+ "sneeze":"sneezing_face",
"speaking_head_in_silhouette":"speaking_head",
- "left_speech_bubble":"speech_left",
- "right_speech_bubble":"speech_right",
- "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",
+ "stuffed_pita":"stuffed_flatbread",
"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",
+ "third_place_medal":"third_place",
"-1":"thumbsdown",
"-1_tone1":"thumbsdown_tone1",
"-1_tone2":"thumbsdown_tone2",
@@ -479,9 +516,7 @@
"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",
+ "whisky":"tumbler_glass",
"unicorn_face":"unicorn",
"upside_down_face":"upside_down",
"funeral_urn":"urn",
@@ -494,6 +529,12 @@
"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",
+ "wilted_flower":"wilted_rose",
+ "wrestling":"wrestlers",
+ "wrestling_tone1":"wrestlers_tone1",
+ "wrestling_tone2":"wrestlers_tone2",
+ "wrestling_tone3":"wrestlers_tone3",
+ "wrestling_tone4":"wrestlers_tone4",
+ "wrestling_tone5":"wrestlers_tone5",
"zipper_mouth_face":"zipper_mouth"
}
diff --git a/fixtures/emojis/digests.json b/fixtures/emojis/digests.json
index 50ee5089d8f..078d3413f33 100644
--- a/fixtures/emojis/digests.json
+++ b/fixtures/emojis/digests.json
@@ -60,16 +60,6 @@
"digest": "5544eace06b8e1b6ea91940e893e013d33d6b166e14e6d128a87f2cd2de88332"
},
{
- "name": "airplane_northeast",
- "unicode": "1F6EA",
- "digest": "fdddc2cd3618ec6661612581b8b93553cb086b0bb197e96aedf1bee8055e7bb4"
- },
- {
- "name": "northeast_pointing_airplane",
- "unicode": "1F6EA",
- "digest": "fdddc2cd3618ec6661612581b8b93553cb086b0bb197e96aedf1bee8055e7bb4"
- },
- {
"name": "airplane_small",
"unicode": "1F6E9",
"digest": "1a2e07abbbe90d05cee7ff8dd52f443d595ccb38959f3089fe016b77e5d6de7d"
@@ -80,26 +70,6 @@
"digest": "1a2e07abbbe90d05cee7ff8dd52f443d595ccb38959f3089fe016b77e5d6de7d"
},
{
- "name": "airplane_small_up",
- "unicode": "1F6E8",
- "digest": "029752b29a757c087dec60f45ea242e974fc181129e20390d5d4a2f90442091a"
- },
- {
- "name": "up_pointing_small_airplane",
- "unicode": "1F6E8",
- "digest": "029752b29a757c087dec60f45ea242e974fc181129e20390d5d4a2f90442091a"
- },
- {
- "name": "airplane_up",
- "unicode": "1F6E7",
- "digest": "ec45d4dbfce1f75dc59339417b1dcf5f1e1359cd9d04ff233babf359a3330e77"
- },
- {
- "name": "up_pointing_airplane",
- "unicode": "1F6E7",
- "digest": "ec45d4dbfce1f75dc59339417b1dcf5f1e1359cd9d04ff233babf359a3330e77"
- },
- {
"name": "alarm_clock",
"unicode": "23F0",
"digest": "fef05a3cd1cddbeca4de8091b94bddb93790b03fa213da86c0eec420f8c49599"
@@ -165,16 +135,6 @@
"digest": "332493913891aa0eda2743b4bb16c4682400f249998bf34eb292246c9009e17f"
},
{
- "name": "anger_left",
- "unicode": "1F5EE",
- "digest": "f2711991e8b386b2d5b12f296ce20a9b4b00ef91d6d67af2cf4e06abf2faa1dc"
- },
- {
- "name": "left_anger_bubble",
- "unicode": "1F5EE",
- "digest": "f2711991e8b386b2d5b12f296ce20a9b4b00ef91d6d67af2cf4e06abf2faa1dc"
- },
- {
"name": "anger_right",
"unicode": "1F5EF",
"digest": "8b049511ef3b1b28325841e2f87c60773eaf2f65cabba58d8b0ec3de9b10c0ae"
@@ -325,11 +285,6 @@
"digest": "c115e6613ebd718268aa31d265e017138b9fb58bbb8201eb3f40de2380e460aa"
},
{
- "name": "ascending_notes",
- "unicode": "1F39C",
- "digest": "33432042771d456338dda5d98e49322d3600f2cc9049963480c7c38d9de1ef0a"
- },
- {
"name": "asterisk",
"unicode": "002A-20E3",
"digest": "33d92093f2914448d5a939cf62e8ee3e32931923abdef5f0210e8a8150fa312d"
@@ -365,6 +320,11 @@
"digest": "6b6bb83b00707a314e46ff8eefbda40978a291ec7881caba1b1ee273f49c1368"
},
{
+ "name": "avocado",
+ "unicode": "1F951",
+ "digest": "bc1fb203d63b18985598400925de24050bb192afda1cbf0813f85cb139869eff"
+ },
+ {
"name": "b",
"unicode": "1F171",
"digest": "722f9db9442e7c0fc0d0ac0f5291fbf47c6a0ac4d8abd42e97957da705fb82bf"
@@ -420,6 +380,11 @@
"digest": "083e4e48b51092c28efb4532e840e1091b5d4b685c6e0f221aa0228f061cd91e"
},
{
+ "name": "bacon",
+ "unicode": "1F953",
+ "digest": "18ad3817f1f88a69706db5727a58e763dde6c21a2d4f184c3d728c32dc5fa05a"
+ },
+ {
"name": "badminton",
"unicode": "1F3F8",
"digest": "353eb7ee93decd9fe0072e4d78a5618d5e2d9e77a6e4de9fe171870d75e02a66"
@@ -445,41 +410,11 @@
"digest": "4175a56eca5c6458574a681e109b1403fbb143cf27f69ae6c1917650f3e08892"
},
{
- "name": "ballot_box_check",
- "unicode": "1F5F9",
- "digest": "fc3ba16c009d963a4a0ea20a348ac98eee3c4c18c481df19a5ada0d1de7fcc15"
- },
- {
- "name": "ballot_box_with_bold_check",
- "unicode": "1F5F9",
- "digest": "fc3ba16c009d963a4a0ea20a348ac98eee3c4c18c481df19a5ada0d1de7fcc15"
- },
- {
"name": "ballot_box_with_check",
"unicode": "2611",
"digest": "c98d6f3588dd87e2f318bbfe6c646399a905450edfd814edae4e5b1bddef2134"
},
{
- "name": "ballot_box_x",
- "unicode": "1F5F5",
- "digest": "861dcfc2361298262587b5d0e163fed96a55c44636361f5b4a9ab1d6502b8928"
- },
- {
- "name": "ballot_box_with_script_x",
- "unicode": "1F5F5",
- "digest": "861dcfc2361298262587b5d0e163fed96a55c44636361f5b4a9ab1d6502b8928"
- },
- {
- "name": "ballot_x",
- "unicode": "1F5F4",
- "digest": "0b73b89847eb82bcad5664644c8af237e0aef6c3d8c94b7a5df94e05d0ebf4e1"
- },
- {
- "name": "ballot_script_x",
- "unicode": "1F5F4",
- "digest": "0b73b89847eb82bcad5664644c8af237e0aef6c3d8c94b7a5df94e05d0ebf4e1"
- },
- {
"name": "bamboo",
"unicode": "1F38D",
"digest": "e4ee65088df43d7081b1ce6fd996f66f3e0accd88840855c47a98a22997823dd"
@@ -580,6 +515,11 @@
"digest": "c631cefc5d2a0a31bdb9f0a0d97ea68b1c6928e565468998403034644572a0b0"
},
{
+ "name": "bat",
+ "unicode": "1F987",
+ "digest": "8fc19e0d7d6f80906bdbc06d616a810de66180d96cf28070a53fa61b88904535"
+ },
+ {
"name": "bath",
"unicode": "1F6C0",
"digest": "33b371832f90aad50baf5296f3ad4cc081c319b279f989c74409903d8568e917"
@@ -760,6 +700,11 @@
"digest": "c2ba672994ad0f99d7fdc449f3fee45a2dca68a58f9fe95825b38465a30ef44e"
},
{
+ "name": "black_heart",
+ "unicode": "1F5A4",
+ "digest": "f334679168d6dd7328c28e9ae3cb2b1fca0e9c2777938d586bfe623db2a688b9"
+ },
+ {
"name": "black_joker",
"unicode": "1F0CF",
"digest": "d004b25f186494d5b2c65204caa9daecd749c840a0bea5718735e18109e5394d"
@@ -840,11 +785,6 @@
"digest": "9d912a9d1bb10dc7f2645b345ed09e90461e83df0de275acb806f1f75cef1fcf"
},
{
- "name": "book2",
- "unicode": "1F56E",
- "digest": "26d6b66a1957e7750b3e22eb2e46d0cc85932977bbb81d3d8482ec1ec58ee12b"
- },
- {
"name": "bookmark",
"unicode": "1F516",
"digest": "5705e3108259d6900649157843c50e22d0086c3630b291d3f942da1a736e3e3d"
@@ -875,16 +815,6 @@
"digest": "b93751a27b40f6185a22b3e8b413f0fe09b6010d1057c672e1a23088e0b8286f"
},
{
- "name": "bouquet2",
- "unicode": "1F395",
- "digest": "1643ec51ff26fc1ac0c67859e202386398650bf2a996c82b68e1b73fa52abf7d"
- },
- {
- "name": "bouquet_of_flowers",
- "unicode": "1F395",
- "digest": "1643ec51ff26fc1ac0c67859e202386398650bf2a996c82b68e1b73fa52abf7d"
- },
- {
"name": "bow",
"unicode": "1F647",
"digest": "33cd6da4d408f18d98bebc6a277dea8b914150e32ee472586ce3f1eb814462bd"
@@ -930,6 +860,16 @@
"digest": "737f2cdfa4ac964baade585a39771b18080bd5e9b55c8661d3518f468f344662"
},
{
+ "name": "boxing_glove",
+ "unicode": "1F94A",
+ "digest": "c914b2ce45f20afad66ad6f0d1b0750c4469e4f48b686dfc4aad1ec8d289c563"
+ },
+ {
+ "name": "boxing_gloves",
+ "unicode": "1F94A",
+ "digest": "c914b2ce45f20afad66ad6f0d1b0750c4469e4f48b686dfc4aad1ec8d289c563"
+ },
+ {
"name": "boy",
"unicode": "1F466",
"digest": "7bc0173d8c88f3f12d41f213f7a3a9f5ebf65efad610fd5a2a31935128a6a6c1"
@@ -960,11 +900,6 @@
"digest": "0f76e97237203950da36c737dcc6f56dcd6c123401a8c817a0636376c7f38ef5"
},
{
- "name": "boys_symbol",
- "unicode": "1F6C9",
- "digest": "47fadbcb876ca436264ce2f3ebd1472bd68f55cc2b4833bf054335be9dc7a0f2"
- },
- {
"name": "bread",
"unicode": "1F35E",
"digest": "81739830f16f33e6a1dd7cc17c25df207846062bb5167bb8abed7fdd49268b86"
@@ -1035,21 +970,6 @@
"digest": "96e74842e919716b7bbbab57339bfd70f099a9bcb4710dffd7c80cf38a7bbff7"
},
{
- "name": "bullhorn",
- "unicode": "1F56B",
- "digest": "a4ca5cbfe299e8ccd148d17055d2d395cf8515e416bf771044c9a670509a8254"
- },
- {
- "name": "bullhorn_waves",
- "unicode": "1F56C",
- "digest": "92493636cf086205d1e12cc19e613b84152ef10b8cd0215619a0fc813bfc9a7c"
- },
- {
- "name": "bullhorn_with_sound_waves",
- "unicode": "1F56C",
- "digest": "92493636cf086205d1e12cc19e613b84152ef10b8cd0215619a0fc813bfc9a7c"
- },
- {
"name": "burrito",
"unicode": "1F32F",
"digest": "b2cf81f1efdf87e674461f73f67cd4b58a5f695e65598d0dd3899f2597da43cf"
@@ -1075,6 +995,11 @@
"digest": "7fee96f1b68bb2c6002e47f2ed13c06baa6a3168441b9aca572db7ec45612f7b"
},
{
+ "name": "butterfly",
+ "unicode": "1F98B",
+ "digest": "a91b6598c17b44a8dc8935a1d99e25f4483ea41470cdd2da343039a9eec29ef1"
+ },
+ {
"name": "cactus",
"unicode": "1F335",
"digest": "2c5c4c35f26c7046fdc002b337e0d939729b33a26980e675950f9934c91e40fd"
@@ -1085,16 +1010,6 @@
"digest": "b928902df8084210d51c1da36f9119164a325393c391b28cd8ea914e0b95c17b"
},
{
- "name": "calculator",
- "unicode": "1F5A9",
- "digest": "01b47b5c69c12b65fa4f4c0d580f2a98280d6116f4ad2cf8be378759008bcc3c"
- },
- {
- "name": "pocket calculator",
- "unicode": "1F5A9",
- "digest": "01b47b5c69c12b65fa4f4c0d580f2a98280d6116f4ad2cf8be378759008bcc3c"
- },
- {
"name": "calendar",
"unicode": "1F4C6",
"digest": "9d990be27778daab041a3583edbd8f83fc8957e42a3aec729c0e2e224a8d05e3"
@@ -1110,6 +1025,66 @@
"digest": "441a0750eade7ce33e28e58bec76958990c412b68409fcdde59ebad1f25361bb"
},
{
+ "name": "call_me",
+ "unicode": "1F919",
+ "digest": "83d2ed96dcb8b4adf4f4d030ffd07e25ca16351e1a4fbefdf9f46f5ca496a55f"
+ },
+ {
+ "name": "call_me_hand",
+ "unicode": "1F919",
+ "digest": "83d2ed96dcb8b4adf4f4d030ffd07e25ca16351e1a4fbefdf9f46f5ca496a55f"
+ },
+ {
+ "name": "call_me_tone1",
+ "unicode": "1F919-1F3FB",
+ "digest": "4a5748efa83e7294e8338b8795d4d315ff1cd31ead6759004d0eb330e50de8cd"
+ },
+ {
+ "name": "call_me_hand_tone1",
+ "unicode": "1F919-1F3FB",
+ "digest": "4a5748efa83e7294e8338b8795d4d315ff1cd31ead6759004d0eb330e50de8cd"
+ },
+ {
+ "name": "call_me_tone2",
+ "unicode": "1F919-1F3FC",
+ "digest": "54feaa6e3c5789ae6e15622127f0e0213234b4b886e1588ce95814348b1f1519"
+ },
+ {
+ "name": "call_me_hand_tone2",
+ "unicode": "1F919-1F3FC",
+ "digest": "54feaa6e3c5789ae6e15622127f0e0213234b4b886e1588ce95814348b1f1519"
+ },
+ {
+ "name": "call_me_tone3",
+ "unicode": "1F919-1F3FD",
+ "digest": "57e949b951e14843b712dab5a828f915ee255f5bb973db33946aab4057427419"
+ },
+ {
+ "name": "call_me_hand_tone3",
+ "unicode": "1F919-1F3FD",
+ "digest": "57e949b951e14843b712dab5a828f915ee255f5bb973db33946aab4057427419"
+ },
+ {
+ "name": "call_me_tone4",
+ "unicode": "1F919-1F3FE",
+ "digest": "f7787e933978a09c7b8ab8d3b1e1ab395aaae998c455e93bb3db24a4c8a60fe0"
+ },
+ {
+ "name": "call_me_hand_tone4",
+ "unicode": "1F919-1F3FE",
+ "digest": "f7787e933978a09c7b8ab8d3b1e1ab395aaae998c455e93bb3db24a4c8a60fe0"
+ },
+ {
+ "name": "call_me_tone5",
+ "unicode": "1F919-1F3FF",
+ "digest": "1fdb7d833d000b117d20d48142d3026a61cc9c8b712ebb498fa66bf75c74d7a5"
+ },
+ {
+ "name": "call_me_hand_tone5",
+ "unicode": "1F919-1F3FF",
+ "digest": "1fdb7d833d000b117d20d48142d3026a61cc9c8b712ebb498fa66bf75c74d7a5"
+ },
+ {
"name": "calling",
"unicode": "1F4F2",
"digest": "acf668c75c11c36686005788266524a972fa1c5bcf666ff3403d909edc5cee91"
@@ -1135,11 +1110,6 @@
"digest": "a42a4ff9521affa72db7b0f01da169b4cb6afb9db1c5dfad47dd4c507bfc30d9"
},
{
- "name": "cancellation_x",
- "unicode": "1F5D9",
- "digest": "cea2f7a48543207615ee06755ded62c2a95a7eaf7d7b68a3fc25e74d94e2c92c"
- },
- {
"name": "cancer",
"unicode": "264B",
"digest": "528c6f21df99a756b553d93a7f395b0f662b30a323affd05f0cedee8ff7b41d6"
@@ -1155,6 +1125,16 @@
"digest": "9cff4538918f60f770fceb96e964f5dc3ce31fd08ddd2ab3bfdf2981bfa74100"
},
{
+ "name": "canoe",
+ "unicode": "1F6F6",
+ "digest": "56ca308cc2ad4827468cf58c4ccf6ef6b3382835a91e935540a2b973e01d2572"
+ },
+ {
+ "name": "kayak",
+ "unicode": "1F6F6",
+ "digest": "56ca308cc2ad4827468cf58c4ccf6ef6b3382835a91e935540a2b973e01d2572"
+ },
+ {
"name": "capital_abcd",
"unicode": "1F520",
"digest": "a416d0b3f564037b680f801fb773b6eaf67225e2cbbfd2cb8a5db0de044321fa"
@@ -1185,14 +1165,69 @@
"digest": "c0e7059efc39a64233f774c02ddb1ab51888fff180f906ce13a6e4f9509672fe"
},
{
- "name": "cartridge",
- "unicode": "1F5AD",
- "digest": "0b1625eea118060b51a70905c1eb3313ed632e989f70943eca16aa29fe8a34f2"
+ "name": "carrot",
+ "unicode": "1F955",
+ "digest": "3a6fd98b63ee73d982a9cdacb08cf7b4014368cde8ffce6056b7df25a5a472b1"
+ },
+ {
+ "name": "cartwheel",
+ "unicode": "1F938",
+ "digest": "d78de3435e0b04a9b1a1048ae12e63e3248f9ace3a0db4d3bda584f22af18863"
+ },
+ {
+ "name": "person_doing_cartwheel",
+ "unicode": "1F938",
+ "digest": "d78de3435e0b04a9b1a1048ae12e63e3248f9ace3a0db4d3bda584f22af18863"
+ },
+ {
+ "name": "cartwheel_tone1",
+ "unicode": "1F938-1F3FB",
+ "digest": "39a49781a269bb40d8efc8fd73c973b00fb2e192850ea6073062b5dea0cd5b74"
+ },
+ {
+ "name": "person_doing_cartwheel_tone1",
+ "unicode": "1F938-1F3FB",
+ "digest": "39a49781a269bb40d8efc8fd73c973b00fb2e192850ea6073062b5dea0cd5b74"
+ },
+ {
+ "name": "cartwheel_tone2",
+ "unicode": "1F938-1F3FC",
+ "digest": "6231eb35be45457fd648f8f4b79983f03705c9d983a18067f7e6d9ae47bc1958"
+ },
+ {
+ "name": "person_doing_cartwheel_tone2",
+ "unicode": "1F938-1F3FC",
+ "digest": "6231eb35be45457fd648f8f4b79983f03705c9d983a18067f7e6d9ae47bc1958"
+ },
+ {
+ "name": "cartwheel_tone3",
+ "unicode": "1F938-1F3FD",
+ "digest": "ca483c78cc823811a8c279c501d9b283e4c990dafc5995ad40e68ecb0af554df"
+ },
+ {
+ "name": "person_doing_cartwheel_tone3",
+ "unicode": "1F938-1F3FD",
+ "digest": "ca483c78cc823811a8c279c501d9b283e4c990dafc5995ad40e68ecb0af554df"
+ },
+ {
+ "name": "cartwheel_tone4",
+ "unicode": "1F938-1F3FE",
+ "digest": "8253afb672431c84e498014c30babb00b9284bec773009e79f7f06aa7108643e"
},
{
- "name": "tape_cartridge",
- "unicode": "1F5AD",
- "digest": "0b1625eea118060b51a70905c1eb3313ed632e989f70943eca16aa29fe8a34f2"
+ "name": "person_doing_cartwheel_tone4",
+ "unicode": "1F938-1F3FE",
+ "digest": "8253afb672431c84e498014c30babb00b9284bec773009e79f7f06aa7108643e"
+ },
+ {
+ "name": "cartwheel_tone5",
+ "unicode": "1F938-1F3FF",
+ "digest": "6fd92baff57c38b3adb6753d9e7e547e762971a8872fd3f1e71c6aaf0b1d3ab9"
+ },
+ {
+ "name": "person_doing_cartwheel_tone5",
+ "unicode": "1F938-1F3FF",
+ "digest": "6fd92baff57c38b3adb6753d9e7e547e762971a8872fd3f1e71c6aaf0b1d3ab9"
},
{
"name": "cat",
@@ -1210,11 +1245,6 @@
"digest": "16363d8a34b873c12df6354b99f575cae3d80e0d27100ed7eea70f0310953c7b"
},
{
- "name": "celtic_cross",
- "unicode": "1F548",
- "digest": "187aac988d7e02085a15f31c4cc0ff25127be5b088e354e65c7b1152bffb40ff"
- },
- {
"name": "chains",
"unicode": "26D3",
"digest": "3884cdbc6f2b433062af06f942552e563231c24727a2f10fa280b3bb7aa614e2"
@@ -1230,6 +1260,16 @@
"digest": "9e6e8987f30a37ae0f3d7dab2f5eeb50aa32b4f31402b29315eb2994afc72457"
},
{
+ "name": "champagne_glass",
+ "unicode": "1F942",
+ "digest": "5a2e4773f7eb126a00122cbfa4dc535da51ce00e0bf0d8d6ff8bab8b3365f8d2"
+ },
+ {
+ "name": "clinking_glass",
+ "unicode": "1F942",
+ "digest": "5a2e4773f7eb126a00122cbfa4dc535da51ce00e0bf0d8d6ff8bab8b3365f8d2"
+ },
+ {
"name": "chart",
"unicode": "1F4B9",
"digest": "a092dbc08f925b028286b2b495a5f59033b8537a586a694f46f4c1e7c3a1e27f"
@@ -1515,16 +1555,6 @@
"digest": "9fdef6a4939315c017b165e1dbac7710fb335df8c309be3fe2a011ef7fc28d74"
},
{
- "name": "clockwise_arrows",
- "unicode": "1F5D8",
- "digest": "67027b7e1a4d800a3ce7d731c21c098d1109d217159a27665eebb7e080fc2622"
- },
- {
- "name": "clockwise_right_and_left_semicircle_arrows",
- "unicode": "1F5D8",
- "digest": "67027b7e1a4d800a3ce7d731c21c098d1109d217159a27665eebb7e080fc2622"
- },
- {
"name": "closed_book",
"unicode": "1F4D5",
"digest": "b18288629d201bfdfc5d66ec47df89809d00642b15732757e6a04789f36a7d9f"
@@ -1585,6 +1615,16 @@
"digest": "7cbed2343c280ba3996082b3d0fb9d8cd57d6e62fe6c9ecb159f46b4a2e49151"
},
{
+ "name": "clown",
+ "unicode": "1F921",
+ "digest": "eea95687caabc9e808514c2450ba599e5e24ef47923dbec86f5297a64438e2e5"
+ },
+ {
+ "name": "clown_face",
+ "unicode": "1F921",
+ "digest": "eea95687caabc9e808514c2450ba599e5e24ef47923dbec86f5297a64438e2e5"
+ },
+ {
"name": "clubs",
"unicode": "2663",
"digest": "b8cf72ecd8568ced077b475d94788fb282bdb06d25031b5d54dd63e25effb138"
@@ -1625,16 +1665,6 @@
"digest": "c970ce76b5607434895b0407bdaa93140f887930781a17dd7dcf16f711451d93"
},
{
- "name": "computer_old",
- "unicode": "1F5B3",
- "digest": "b27c30d74f205a8a3bd00a55ca17da7cf6ae3b65ae33e949755a4c6bd69a9fd3"
- },
- {
- "name": "old_personal_computer",
- "unicode": "1F5B3",
- "digest": "b27c30d74f205a8a3bd00a55ca17da7cf6ae3b65ae33e949755a4c6bd69a9fd3"
- },
- {
"name": "confetti_ball",
"unicode": "1F38A",
"digest": "a638b16f1acdbcf69edf760161b1bd7ff1fd5426c5b1203ad9d294dcc0701f10"
@@ -1665,6 +1695,11 @@
"digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
},
{
+ "name": "building_construction",
+ "unicode": "1F3D7",
+ "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
+ },
+ {
"name": "construction_worker",
"unicode": "1F477",
"digest": "8c094733987e7c4da8d3aa4588b530ae07042bd70cf337b1fd412a70ee8f0ed6"
@@ -1700,16 +1735,6 @@
"digest": "0d7f33ff7acc1cc3a81e6a786ff007df20da145e3070f338505dfed5100e9fcb"
},
{
- "name": "contruction_site",
- "unicode": "1F3D7",
- "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
- },
- {
- "name": "building_construction",
- "unicode": "1F3D7",
- "digest": "c611f0a5de10f000a0756935f226845c7292f19ff5581d1f7a7554316338bbcb"
- },
- {
"name": "convenience_store",
"unicode": "1F3EA",
"digest": "975dcf9b8e9e3fb1e29574b41300b9d96fd64703b3c18ff52f9f1875d1cf1b52"
@@ -1720,6 +1745,11 @@
"digest": "4bed3522bd50091ac5b68ca760661eb484d7f1b9c9d564d2097bd812b7f28ae4"
},
{
+ "name": "cooking",
+ "unicode": "1F373",
+ "digest": "563ffd6cae381ce1e318cdacc54e70040d6a01a50d0db8aeb50edbbe413eac58"
+ },
+ {
"name": "cool",
"unicode": "1F192",
"digest": "5739a37341c782a4736adfce804e12776ae33081098a3d052d8ae9a64b4d22d1"
@@ -1820,6 +1850,16 @@
"digest": "e7a5131d7dee0f3356814b0ac1ea8ff280b12a7b580181e20ddb0b7eeb7e7339"
},
{
+ "name": "cowboy",
+ "unicode": "1F920",
+ "digest": "1aabf23f6b95a9b772fdb8eb45b8ec93584a5357f9131c6eabc9d1b83fe67e89"
+ },
+ {
+ "name": "face_with_cowboy_hat",
+ "unicode": "1F920",
+ "digest": "1aabf23f6b95a9b772fdb8eb45b8ec93584a5357f9131c6eabc9d1b83fe67e89"
+ },
+ {
"name": "crab",
"unicode": "1F980",
"digest": "e6be16699fdb5d87f42f28f6cc141a44b7ffd834ecdd536813c4b5b86d3fc4a5"
@@ -1860,6 +1900,11 @@
"digest": "59cb4164c50b6bc9ae311ce6f7610467c1aaafa848b5fff7614f064715f91992"
},
{
+ "name": "croissant",
+ "unicode": "1F950",
+ "digest": "b751e287157a1e276617a841a5b5f7f1208ca226cfd8fa947f144390b65a5e16"
+ },
+ {
"name": "cross",
"unicode": "271D",
"digest": "a6b07c838fb75ef2ebefa2df6005e8d784753239ec03c37695a13e3b1954d653"
@@ -1870,36 +1915,6 @@
"digest": "a6b07c838fb75ef2ebefa2df6005e8d784753239ec03c37695a13e3b1954d653"
},
{
- "name": "cross_heavy",
- "unicode": "1F547",
- "digest": "2e37c26b9bad0beb019c7f3e7a3892352d0ad9ca1b90c4333d42e8d56680be70"
- },
- {
- "name": "heavy_latin_cross",
- "unicode": "1F547",
- "digest": "2e37c26b9bad0beb019c7f3e7a3892352d0ad9ca1b90c4333d42e8d56680be70"
- },
- {
- "name": "cross_white",
- "unicode": "1F546",
- "digest": "3452e667010d7e49a51d7e1f4ba8ed4f303e33ed43255a051e9a18832a1efba6"
- },
- {
- "name": "white_latin_cross",
- "unicode": "1F546",
- "digest": "3452e667010d7e49a51d7e1f4ba8ed4f303e33ed43255a051e9a18832a1efba6"
- },
- {
- "name": "crossbones",
- "unicode": "1F571",
- "digest": "f5e7ce293c1a3282711073e68f033a3876e8428d1218cb2f8294630f9124e584"
- },
- {
- "name": "black_skull_and_crossbones",
- "unicode": "1F571",
- "digest": "f5e7ce293c1a3282711073e68f033a3876e8428d1218cb2f8294630f9124e584"
- },
- {
"name": "crossed_flags",
"unicode": "1F38C",
"digest": "2841c671075e6f1a79c61c2d716423159fb0bc0786e3fb0049697766533bf262"
@@ -1940,6 +1955,11 @@
"digest": "05f73b30b1e5b0fc66fb5dc6caddd2d547ee7b9d2f97513dc908ba1a2e352e30"
},
{
+ "name": "cucumber",
+ "unicode": "1F952",
+ "digest": "d1196e23f2f155ef5c1330f8497f40957a7357cb177127f457c5c471f0a23727"
+ },
+ {
"name": "cupid",
"unicode": "1F498",
"digest": "246e71f44c6ebc2e4f887e25438e4f894e8cc92e06069e711b893ff391abb658"
@@ -2050,16 +2070,16 @@
"digest": "3c70f1a77f2754f41c830e88d43b7d53c14311d64626ded164aa9ac7d2695790"
},
{
+ "name": "deer",
+ "unicode": "1F98C",
+ "digest": "7f4302ca68fd121ee73be48d0a0a0fb9e7e2741071a491ad2b7b0eab9f11ad25"
+ },
+ {
"name": "department_store",
"unicode": "1F3EC",
"digest": "4be910d2efe74d8ce2c1f41d7753c8873579faca83fcf779a4887d8ab9e5923b"
},
{
- "name": "descending_notes",
- "unicode": "1F39D",
- "digest": "f09c6a2e094b13bf91cc07b7b776e43348ccef9f91247ca36cc02e7d91098af0"
- },
- {
"name": "desert",
"unicode": "1F3DC",
"digest": "d4b1a11c5130debe042df6cc2b3389f15c68a5cb32dc1b3a82b78f733d0c9e4e"
@@ -2075,11 +2095,6 @@
"digest": "cde5bfb6c71bb7d663808a3561b24cb5b5560f95f510b40f81250cac1b21933e"
},
{
- "name": "desktop_window",
- "unicode": "1F5D4",
- "digest": "d5b6c4a847e2a96f97f50fd353a22cb121915cb1d7bbc0f02df38769819b6b7e"
- },
- {
"name": "diamond_shape_with_a_dot_inside",
"unicode": "1F4A0",
"digest": "e91323577ab89e95b0fa0b9272ea0c797b76908f24d36992630e9325273a4ce3"
@@ -2125,21 +2140,6 @@
"digest": "98b07fbbcdb438d1b8a755869fa2de8e180a77fce359ec830eb46d38ec3e67cb"
},
{
- "name": "document",
- "unicode": "1F5CE",
- "digest": "2cbca96cc69306a10f1a9b6505723e027239439d899f6b395dc43f3c37d2d777"
- },
- {
- "name": "document_text",
- "unicode": "1F5B9",
- "digest": "29407b12409c9673f3d89ef1f86ee50cbc7ed53b1870e33b4a29bbc609017f72"
- },
- {
- "name": "document_with_text",
- "unicode": "1F5B9",
- "digest": "29407b12409c9673f3d89ef1f86ee50cbc7ed53b1870e33b4a29bbc609017f72"
- },
- {
"name": "dog",
"unicode": "1F436",
"digest": "3b31ce067b13e463284ce85536512cb1f8cd8b52fe73659f69971d0d6c1dfc11"
@@ -2205,11 +2205,36 @@
"digest": "e06ef69c29f0fb12481727c0b4124e700572d3d7955e173279320f43f286518d"
},
{
+ "name": "drooling_face",
+ "unicode": "1F924",
+ "digest": "5203cb05cd266d7a7c929ab40364ad68571d380d9c7ff93a8d6d55261abaa1ba"
+ },
+ {
+ "name": "drool",
+ "unicode": "1F924",
+ "digest": "5203cb05cd266d7a7c929ab40364ad68571d380d9c7ff93a8d6d55261abaa1ba"
+ },
+ {
"name": "droplet",
"unicode": "1F4A7",
"digest": "6475b4a4460a672c436a68f282ac97fb31e2934db4b80620063ee816159aa7c3"
},
{
+ "name": "drum",
+ "unicode": "1F941",
+ "digest": "0d0639980b1a5dcbf1c3e7ef47263fb6543b871242c58452a8c2f642525d9dd8"
+ },
+ {
+ "name": "drum_with_drumsticks",
+ "unicode": "1F941",
+ "digest": "0d0639980b1a5dcbf1c3e7ef47263fb6543b871242c58452a8c2f642525d9dd8"
+ },
+ {
+ "name": "duck",
+ "unicode": "1F986",
+ "digest": "8f8373798a7727368b32328e7a9a349727a949e7391ddd243b6456141a4f7e94"
+ },
+ {
"name": "dvd",
"unicode": "1F4C0",
"digest": "3b7903285d91277181c26fdc9df857761bbac509d352e320c2519ea3b132704f"
@@ -2225,6 +2250,11 @@
"digest": "39b5a57a2376e4a1137e381be02a1775bd580e0371438f5297a401ea634f1830"
},
{
+ "name": "eagle",
+ "unicode": "1F985",
+ "digest": "b44fd4f61b83c5114358a272343ac9b0eabbc70847f739bbdbf8aae3ade5bc1d"
+ },
+ {
"name": "ear",
"unicode": "1F442",
"digest": "4fdeb5a46e69311ecfd09c5b45c9018c24b625e28475cca8fa516b086ef952f8"
@@ -2276,8 +2306,8 @@
},
{
"name": "egg",
- "unicode": "1F373",
- "digest": "563ffd6cae381ce1e318cdacc54e70040d6a01a50d0db8aeb50edbbe413eac58"
+ "unicode": "1F95A",
+ "digest": "72b9c841af784e7cbccbbe48ba833df5cecdd284397c199cab079872e879d92f"
},
{
"name": "eggplant",
@@ -2300,6 +2330,16 @@
"digest": "bb0758e7cc0e357285937671a91489bd32ce9d248eecdcc9c275a53a66325b26"
},
{
+ "name": "eject",
+ "unicode": "23CF",
+ "digest": "eeb0cd23ead0c965e307de517a6805265f0c780c3e454e64bc4c1425dfe7548e"
+ },
+ {
+ "name": "eject_symbol",
+ "unicode": "23CF",
+ "digest": "eeb0cd23ead0c965e307de517a6805265f0c780c3e454e64bc4c1425dfe7548e"
+ },
+ {
"name": "electric_plug",
"unicode": "1F50C",
"digest": "b10ce87af86fa4f4022572ceb5ecd73bea867347a86832a7ea248364b0aad8d0"
@@ -2320,46 +2360,6 @@
"digest": "f5a512022a2f5280f372ff39c22cbda815f698710ca66f8f8c4d08418f98ca78"
},
{
- "name": "envelope_back",
- "unicode": "1F582",
- "digest": "bc60b6d375feee00758a94a05b42eeb165f4084b20eb3e6012b72faa221f7e75"
- },
- {
- "name": "back_of_envelope",
- "unicode": "1F582",
- "digest": "bc60b6d375feee00758a94a05b42eeb165f4084b20eb3e6012b72faa221f7e75"
- },
- {
- "name": "envelope_flying",
- "unicode": "1F585",
- "digest": "9d6b6ca4c08006062a6f11948de3e15b13cf5c458967e39a9358665a8e13e214"
- },
- {
- "name": "flying_envelope",
- "unicode": "1F585",
- "digest": "9d6b6ca4c08006062a6f11948de3e15b13cf5c458967e39a9358665a8e13e214"
- },
- {
- "name": "envelope_stamped",
- "unicode": "1F583",
- "digest": "f6102aea7283ddc136bfeb09589573420b9279105045fc6b965c1633c1297468"
- },
- {
- "name": "stamped_envelope",
- "unicode": "1F583",
- "digest": "f6102aea7283ddc136bfeb09589573420b9279105045fc6b965c1633c1297468"
- },
- {
- "name": "envelope_stamped_pen",
- "unicode": "1F586",
- "digest": "80ea471318d1e04f8e525ff236b3cd4a4c864e66c6246b6aad77d92f56895f33"
- },
- {
- "name": "pen_over_stamped_envelope",
- "unicode": "1F586",
- "digest": "80ea471318d1e04f8e525ff236b3cd4a4c864e66c6246b6aad77d92f56895f33"
- },
- {
"name": "envelope_with_arrow",
"unicode": "1F4E9",
"digest": "f8643212e6a94f58ccf2bcedc54c5fda8ebeab274f4a8803f253de5f50ddb1d6"
@@ -2415,6 +2415,36 @@
"digest": "1d5cae0b9b2e51e1de54295685d7f0c72ee794e2e6335a95b1d056c7e77260e8"
},
{
+ "name": "face_palm",
+ "unicode": "1F926",
+ "digest": "4ec873048b34b1bb34430724cf28e4bee6c0a9eee88ce39b9d1565047dc92420"
+ },
+ {
+ "name": "face_palm_tone1",
+ "unicode": "1F926-1F3FB",
+ "digest": "e93ef92b4c01dbea6c400e708e23dd36da92ccfbf5eb4f177b3b20c3a46bdc19"
+ },
+ {
+ "name": "face_palm_tone2",
+ "unicode": "1F926-1F3FC",
+ "digest": "22c8bf9fd9fa2ed9dca7a6397ed00ba6cfe9aeef2b0fb7b516ee4dda0df050ea"
+ },
+ {
+ "name": "face_palm_tone3",
+ "unicode": "1F926-1F3FD",
+ "digest": "c0b8bb9d2423e6787b6bdf1ca5a13f52853e4f48a9a1af0f2d4af1364fff022e"
+ },
+ {
+ "name": "face_palm_tone4",
+ "unicode": "1F926-1F3FE",
+ "digest": "f522ab186adcbb4549ea2c03500cdd7a86add548e43ebf7a54d58cc24deea072"
+ },
+ {
+ "name": "face_palm_tone5",
+ "unicode": "1F926-1F3FF",
+ "digest": "363507ae7178b5ec583635f47bcab10c897346f48b85d8759b1004c32cd8ad65"
+ },
+ {
"name": "factory",
"unicode": "1F3ED",
"digest": "c7aeb61ed8b0ac5c91d5197c73f1e2bb801921c22a76bb82c7659d990680dcb0"
@@ -2520,6 +2550,16 @@
"digest": "45aca538d3a9831a0c7de491e5656c17705c07b8f4ac8e85254656b608976016"
},
{
+ "name": "fencer",
+ "unicode": "1F93A",
+ "digest": "5db00fa456af9f6c7cb88d300579dd63e426bcb97ad25486b664aff25c688e21"
+ },
+ {
+ "name": "fencing",
+ "unicode": "1F93A",
+ "digest": "5db00fa456af9f6c7cb88d300579dd63e426bcb97ad25486b664aff25c688e21"
+ },
+ {
"name": "ferris_wheel",
"unicode": "1F3A1",
"digest": "24b4551b7b79a2a5fd73de61542f2b444f896a52030c5f29791c8fcfcc28b95c"
@@ -2550,54 +2590,64 @@
"digest": "4da212148cadb9c4ea91e60d2d8316e38cea99ef4f14afc023711dd7c54ade5a"
},
{
- "name": "finger_pointing_down",
- "unicode": "1F597",
- "digest": "0c542ac3141e8f2e74767acd0eb399c2d68c779cb78bf16d437ad3b1f8134ad9"
+ "name": "fingers_crossed",
+ "unicode": "1F91E",
+ "digest": "a5c797ead191b9712e185083266b455cdf09f6a34c10f8c51aa145e6073427e1"
},
{
- "name": "white_down_pointing_left_hand_index",
- "unicode": "1F597",
- "digest": "0c542ac3141e8f2e74767acd0eb399c2d68c779cb78bf16d437ad3b1f8134ad9"
+ "name": "hand_with_index_and_middle_finger_crossed",
+ "unicode": "1F91E",
+ "digest": "a5c797ead191b9712e185083266b455cdf09f6a34c10f8c51aa145e6073427e1"
},
{
- "name": "finger_pointing_down2",
- "unicode": "1F59F",
- "digest": "c5b128a232cbf518544802a2ae1459368274297163721fa05d0103cf95b2b1ee"
+ "name": "fingers_crossed_tone1",
+ "unicode": "1F91E-1F3FB",
+ "digest": "db56d47bf887f2d8459a3aaba23f15c0087234ae5a54125052e7046e034a4988"
},
{
- "name": "sideways_white_down_pointing_index",
- "unicode": "1F59F",
- "digest": "c5b128a232cbf518544802a2ae1459368274297163721fa05d0103cf95b2b1ee"
+ "name": "hand_with_index_and_middle_fingers_crossed_tone1",
+ "unicode": "1F91E-1F3FB",
+ "digest": "db56d47bf887f2d8459a3aaba23f15c0087234ae5a54125052e7046e034a4988"
},
{
- "name": "finger_pointing_left",
- "unicode": "1F598",
- "digest": "d178ece691e2091be08db77fda9cf05462934628557358a8cb6222587b291f7e"
+ "name": "fingers_crossed_tone2",
+ "unicode": "1F91E-1F3FC",
+ "digest": "19f1bcca3991db7ed2037278c0baab6cd7f12aeaf2e0074de402c4d9e45c1899"
},
{
- "name": "sideways_white_left_pointing_index",
- "unicode": "1F598",
- "digest": "d178ece691e2091be08db77fda9cf05462934628557358a8cb6222587b291f7e"
+ "name": "hand_with_index_and_middle_fingers_crossed_tone2",
+ "unicode": "1F91E-1F3FC",
+ "digest": "19f1bcca3991db7ed2037278c0baab6cd7f12aeaf2e0074de402c4d9e45c1899"
},
{
- "name": "finger_pointing_right",
- "unicode": "1F599",
- "digest": "a412a47544d8f401f9181f8826c5fa3d6b42a1d76f6926963c2d9cd2a01be06d"
+ "name": "fingers_crossed_tone3",
+ "unicode": "1F91E-1F3FD",
+ "digest": "895a3314f6a310f31f7e728bcca20ff834fbfac62ce00e27e3ea5ad0dfc1ba35"
},
{
- "name": "sideways_white_right_pointing_index",
- "unicode": "1F599",
- "digest": "a412a47544d8f401f9181f8826c5fa3d6b42a1d76f6926963c2d9cd2a01be06d"
+ "name": "hand_with_index_and_middle_fingers_crossed_tone3",
+ "unicode": "1F91E-1F3FD",
+ "digest": "895a3314f6a310f31f7e728bcca20ff834fbfac62ce00e27e3ea5ad0dfc1ba35"
},
{
- "name": "finger_pointing_up",
- "unicode": "1F59E",
- "digest": "32c2ccab52aa318a47c816d1bcf9c076e667c9ef3e64ce37d7ba7e827238690d"
+ "name": "fingers_crossed_tone4",
+ "unicode": "1F91E-1F3FE",
+ "digest": "fcb5c4de2001d23a5df1b8702624d134b7f94e93e2dcc8adf6c1033c77722b0e"
},
{
- "name": "sideways_white_up_pointing_index",
- "unicode": "1F59E",
- "digest": "32c2ccab52aa318a47c816d1bcf9c076e667c9ef3e64ce37d7ba7e827238690d"
+ "name": "hand_with_index_and_middle_fingers_crossed_tone4",
+ "unicode": "1F91E-1F3FE",
+ "digest": "fcb5c4de2001d23a5df1b8702624d134b7f94e93e2dcc8adf6c1033c77722b0e"
+ },
+ {
+ "name": "fingers_crossed_tone5",
+ "unicode": "1F91E-1F3FF",
+ "digest": "50132c78d530b048c21be4e788b446872a79b3b3a91009db12f4021c44c8469d"
+ },
+ {
+ "name": "hand_with_index_and_middle_fingers_crossed_tone5",
+ "unicode": "1F91E-1F3FF",
+ "digest": "50132c78d530b048c21be4e788b446872a79b3b3a91009db12f4021c44c8469d"
},
{
"name": "fire",
@@ -2615,19 +2665,19 @@
"digest": "c3a518f27d625e3b62dffa227eb82764bf0a147f10ec0e7f4f43f3f96751af20"
},
{
- "name": "fire_engine_oncoming",
- "unicode": "1F6F1",
- "digest": "e2482c450136d373f74dfafddf502e0b675eb5d2e1e1c645f163db0e4d15fbb6"
+ "name": "fireworks",
+ "unicode": "1F386",
+ "digest": "b62ae08a00c0cc6eba8f9666c8fd9946ce57c3cfc01fe99542a8690a4a566a65"
},
{
- "name": "oncoming_fire_engine",
- "unicode": "1F6F1",
- "digest": "e2482c450136d373f74dfafddf502e0b675eb5d2e1e1c645f163db0e4d15fbb6"
+ "name": "first_place",
+ "unicode": "1F947",
+ "digest": "e3de5d9f14f05544dbee5965cc2baa20e7b417a488c8a18598979038860fd901"
},
{
- "name": "fireworks",
- "unicode": "1F386",
- "digest": "b62ae08a00c0cc6eba8f9666c8fd9946ce57c3cfc01fe99542a8690a4a566a65"
+ "name": "first_place_medal",
+ "unicode": "1F947",
+ "digest": "e3de5d9f14f05544dbee5965cc2baa20e7b417a488c8a18598979038860fd901"
},
{
"name": "first_quarter_moon",
@@ -5300,41 +5350,11 @@
"digest": "ebf49007f367dc05580e9dab942e93e9dda12fa1dc2caa410ac7f8d8cd55d2a3"
},
{
- "name": "flip_phone",
- "unicode": "1F581",
- "digest": "be59efba4bc0759af5a726c06619090ef5071bf2541611d71691dedecee6c697"
- },
- {
- "name": "clamshell_mobile_phone",
- "unicode": "1F581",
- "digest": "be59efba4bc0759af5a726c06619090ef5071bf2541611d71691dedecee6c697"
- },
- {
- "name": "floppy_black",
- "unicode": "1F5AA",
- "digest": "9022f51bb09c5130c6d46bb2accb159bed6f54d6fbffda6ecad62965ebc958ea"
- },
- {
- "name": "black_hard_shell_floppy_disk",
- "unicode": "1F5AA",
- "digest": "9022f51bb09c5130c6d46bb2accb159bed6f54d6fbffda6ecad62965ebc958ea"
- },
- {
"name": "floppy_disk",
"unicode": "1F4BE",
"digest": "4ee0b5bba41b9e301ed125d3ee1c263bef171ca499e6e1b89276b09af2bc03a0"
},
{
- "name": "floppy_white",
- "unicode": "1F5AB",
- "digest": "ec79c400117c4506ef8cf3eebef6c42dd37e60b3079d3e98b6ccd06e517e2af0"
- },
- {
- "name": "white_hard_shell_floppy_disk",
- "unicode": "1F5AB",
- "digest": "ec79c400117c4506ef8cf3eebef6c42dd37e60b3079d3e98b6ccd06e517e2af0"
- },
- {
"name": "flower_playing_cards",
"unicode": "1F3B4",
"digest": "edba47c2e3051b2c7effd98794ec977174052782edcb491daec82a2b0d853869"
@@ -5355,21 +5375,6 @@
"digest": "bc3631a4e9e8473b92e842008937add2cd9ffad5b7d772ce759fb5ff6c0e3dca"
},
{
- "name": "folder",
- "unicode": "1F5C0",
- "digest": "8932141321911032ce8469ba85fe309b78384545c3b9946978b383670b956644"
- },
- {
- "name": "folder_open",
- "unicode": "1F5C1",
- "digest": "74f3b484771c3d6ef61cf003de25c1a59b875afa46c057b5b1d92d9f99460685"
- },
- {
- "name": "open_folder",
- "unicode": "1F5C1",
- "digest": "74f3b484771c3d6ef61cf003de25c1a59b875afa46c057b5b1d92d9f99460685"
- },
- {
"name": "football",
"unicode": "1F3C8",
"digest": "ebd790471c3a28d3077818e3b31d915ffe443e06e299bc5cf0dd2534d080634c"
@@ -5410,6 +5415,16 @@
"digest": "ebee16e86bc9be843dfc72ab5372fb462f06be4486b5b25d7d4cac9b2c8b01c8"
},
{
+ "name": "fox",
+ "unicode": "1F98A",
+ "digest": "e9903cb0396f7e49bdd2c384b38e614c13bfa576b3ecc1ec7b9819e4a40d91d1"
+ },
+ {
+ "name": "fox_face",
+ "unicode": "1F98A",
+ "digest": "e9903cb0396f7e49bdd2c384b38e614c13bfa576b3ecc1ec7b9819e4a40d91d1"
+ },
+ {
"name": "frame_photo",
"unicode": "1F5BC",
"digest": "d5074f748a15055ec1fb812c1e5e169e6e3cc73c522c54be1359b0e26c0fc75c"
@@ -5420,29 +5435,19 @@
"digest": "d5074f748a15055ec1fb812c1e5e169e6e3cc73c522c54be1359b0e26c0fc75c"
},
{
- "name": "frame_tiles",
- "unicode": "1F5BD",
- "digest": "34a5bb044b4b3ad94b116ad106f7b6747fb8612dc0e9f8ccd4313c2920508df0"
- },
- {
- "name": "frame_with_tiles",
- "unicode": "1F5BD",
- "digest": "34a5bb044b4b3ad94b116ad106f7b6747fb8612dc0e9f8ccd4313c2920508df0"
- },
- {
- "name": "frame_x",
- "unicode": "1F5BE",
- "digest": "2e427688fd70361c8c59787d0722ad68abe1c3f968258ee99c0c77ce4b8a8e15"
+ "name": "free",
+ "unicode": "1F193",
+ "digest": "9973522457158362fc5bdd7da858e6371e28a8403d1ef9e4b6427195c7f72cfa"
},
{
- "name": "frame_with_an_x",
- "unicode": "1F5BE",
- "digest": "2e427688fd70361c8c59787d0722ad68abe1c3f968258ee99c0c77ce4b8a8e15"
+ "name": "french_bread",
+ "unicode": "1F956",
+ "digest": "47518a4312f57207b8e8c38188d4a2bd8b16830a885cfcf2d281cfab50c1bc6e"
},
{
- "name": "free",
- "unicode": "1F193",
- "digest": "9973522457158362fc5bdd7da858e6371e28a8403d1ef9e4b6427195c7f72cfa"
+ "name": "baguette_bread",
+ "unicode": "1F956",
+ "digest": "47518a4312f57207b8e8c38188d4a2bd8b16830a885cfcf2d281cfab50c1bc6e"
},
{
"name": "fried_shrimp",
@@ -5560,16 +5565,21 @@
"digest": "f55e4b16a41b6f5e3c817a301420360ba4486e4e82e1092a56a3e3cc4069087d"
},
{
- "name": "girls_symbol",
- "unicode": "1F6CA",
- "digest": "2c55aee81defd7a1620ffeaad8d9bcc1835f19237c72c79633aec45671ddb9ff"
- },
- {
"name": "globe_with_meridians",
"unicode": "1F310",
"digest": "725bebeb3c09a9e3701ebe49e672dcfbf2b73575e05f0821263511577b013b75"
},
{
+ "name": "goal",
+ "unicode": "1F945",
+ "digest": "7088c432f276ff6f447dc0d431b9062b394fb401de1072fe59ca56267bfd6717"
+ },
+ {
+ "name": "goal_net",
+ "unicode": "1F945",
+ "digest": "7088c432f276ff6f447dc0d431b9062b394fb401de1072fe59ca56267bfd6717"
+ },
+ {
"name": "goat",
"unicode": "1F410",
"digest": "d07e384d08529ddcaddd2710f2ad913e5665dc15d5f99c28e16dadd245a111e8"
@@ -5585,6 +5595,11 @@
"digest": "7d7ecc6e226596f646030a4109c2b0001ef0cc690e4863e450bf5d29e7a90344"
},
{
+ "name": "gorilla",
+ "unicode": "1F98D",
+ "digest": "4a564dc14f8ae5450d094f6410ec7f099a7f07dc5254b6395f44a35527bdb4b7"
+ },
+ {
"name": "grapes",
"unicode": "1F347",
"digest": "74d1a09ab411234a84d025a2e717e7ec5791bc02aad29853896d21c0f0283c50"
@@ -5735,16 +5750,6 @@
"digest": "c51a30cb7e575d29ffed16780a6c95ae3f300b8ac523012f4a6e116d68c1fd15"
},
{
- "name": "hand_splayed_reverse",
- "unicode": "1F591",
- "digest": "ff0af0fe9def7388adca6836e5958492282b1afae99f1b6e1e65d11ba68b96db"
- },
- {
- "name": "reversed_raised_hand_with_fingers_splayed",
- "unicode": "1F591",
- "digest": "ff0af0fe9def7388adca6836e5958492282b1afae99f1b6e1e65d11ba68b96db"
- },
- {
"name": "hand_splayed_tone1",
"unicode": "1F590-1F3FB",
"digest": "c31fb44a982ed8808e1c311ec1b0b9c5afcb47f16bb1fc731dc483adf8f0d049"
@@ -5795,24 +5800,99 @@
"digest": "4b3a0aba7829772fec09f26d6facc19a2f822d2998015297b18b5cab85190ee2"
},
{
- "name": "hand_victory",
- "unicode": "1F594",
- "digest": "2d512ced4e8a438f2a346aed67310d3080f9828c748ade1be95943c32ba1c735"
+ "name": "handbag",
+ "unicode": "1F45C",
+ "digest": "45410a3eed0c2e3f68748d7649fa9e33a90f4e80d5291206bdd0b40380c6da45"
},
{
- "name": "reversed_victory_hand",
- "unicode": "1F594",
- "digest": "2d512ced4e8a438f2a346aed67310d3080f9828c748ade1be95943c32ba1c735"
+ "name": "handball",
+ "unicode": "1F93E",
+ "digest": "94ceb28024eb3259d8b137cafd7438773e717fbc04f5da810f85e43ca0fa9e00"
},
{
- "name": "handbag",
- "unicode": "1F45C",
- "digest": "45410a3eed0c2e3f68748d7649fa9e33a90f4e80d5291206bdd0b40380c6da45"
+ "name": "handball_tone1",
+ "unicode": "1F93E-1F3FB",
+ "digest": "8bec4de0d05c80e335e44d65598d186ca92696977353c9fd9c2a5efa122cb842"
+ },
+ {
+ "name": "handball_tone2",
+ "unicode": "1F93E-1F3FC",
+ "digest": "2ff4131e1e2f089b315d8e176c9348877c26c2bd03706fb75d41bc61bc99bf93"
+ },
+ {
+ "name": "handball_tone3",
+ "unicode": "1F93E-1F3FD",
+ "digest": "224a71f94dd37d3729325d11412334667a81422e21f6d7c008730ff350f51a80"
+ },
+ {
+ "name": "handball_tone4",
+ "unicode": "1F93E-1F3FE",
+ "digest": "a5f7a9db790565981bad2d0d9e09554c8c509a8179b4705a418300d58a7894b4"
+ },
+ {
+ "name": "handball_tone5",
+ "unicode": "1F93E-1F3FF",
+ "digest": "00404572d4683f2e8e8a494aa733e96fbec1723634d0a8cb8d75f2829a789d27"
+ },
+ {
+ "name": "handshake",
+ "unicode": "1F91D",
+ "digest": "cb4b08b70560908f96bda0aecd2f4c966bea180f9b7200e4c81d342dc8d36087"
+ },
+ {
+ "name": "shaking_hands",
+ "unicode": "1F91D",
+ "digest": "cb4b08b70560908f96bda0aecd2f4c966bea180f9b7200e4c81d342dc8d36087"
+ },
+ {
+ "name": "handshake_tone1",
+ "unicode": "1F91D-1F3FB",
+ "digest": "40470e224683ba375ed8698c0cbd560556be5a8898237ddf504377a3a7e89ff0"
+ },
+ {
+ "name": "shaking_hands_tone1",
+ "unicode": "1F91D-1F3FB",
+ "digest": "40470e224683ba375ed8698c0cbd560556be5a8898237ddf504377a3a7e89ff0"
+ },
+ {
+ "name": "handshake_tone2",
+ "unicode": "1F91D-1F3FC",
+ "digest": "77ed378243bf682f1f4f1a8caeabcbedf772f54631cc40ea46c099e46a499b18"
+ },
+ {
+ "name": "shaking_hands_tone2",
+ "unicode": "1F91D-1F3FC",
+ "digest": "77ed378243bf682f1f4f1a8caeabcbedf772f54631cc40ea46c099e46a499b18"
+ },
+ {
+ "name": "handshake_tone3",
+ "unicode": "1F91D-1F3FD",
+ "digest": "81b95050f0878b617f5d2640e34031c26a0072e46ca5a688eb4356e48bc74c92"
+ },
+ {
+ "name": "shaking_hands_tone3",
+ "unicode": "1F91D-1F3FD",
+ "digest": "81b95050f0878b617f5d2640e34031c26a0072e46ca5a688eb4356e48bc74c92"
+ },
+ {
+ "name": "handshake_tone4",
+ "unicode": "1F91D-1F3FE",
+ "digest": "74919a6f026fbbd0ccdbdbd4288d1b2ef3bda8930e9142c07736db4a7f3ef345"
+ },
+ {
+ "name": "shaking_hands_tone4",
+ "unicode": "1F91D-1F3FE",
+ "digest": "74919a6f026fbbd0ccdbdbd4288d1b2ef3bda8930e9142c07736db4a7f3ef345"
+ },
+ {
+ "name": "handshake_tone5",
+ "unicode": "1F91D-1F3FF",
+ "digest": "a30d662bfad0074ca7e32cf6f7229b643b636c4beaec496777eb7e1d5b6fc470"
},
{
- "name": "hard_disk",
- "unicode": "1F5B4",
- "digest": "df8549d4281f5ae70fb6792a02c078e651764b0276aa43b7407236bd38fc21b4"
+ "name": "shaking_hands_tone5",
+ "unicode": "1F91D-1F3FF",
+ "digest": "a30d662bfad0074ca7e32cf6f7229b643b636c4beaec496777eb7e1d5b6fc470"
},
{
"name": "hash",
@@ -5880,16 +5960,6 @@
"digest": "8a1f28b97d661ca4cff5ee13889ca61b5fa745ccb590e80832b7d7701df101d6"
},
{
- "name": "heart_tip",
- "unicode": "1F394",
- "digest": "2178829e2c85accda55d2f685544587f6de5c8398a127ae1e08ff1c4ab282204"
- },
- {
- "name": "heart_with_tip_on_the_left",
- "unicode": "1F394",
- "digest": "2178829e2c85accda55d2f685544587f6de5c8398a127ae1e08ff1c4ab282204"
- },
- {
"name": "heartbeat",
"unicode": "1F493",
"digest": "c9ec024943439d476df6f5ec3a6b30508365a7af3427671a80de3ef2f4f95ffe"
@@ -6145,16 +6215,6 @@
"digest": "310b7bdcca93452fe10c72c03d0aafa12b98e5d3408896d275d06d3693812c7a"
},
{
- "name": "info",
- "unicode": "1F6C8",
- "digest": "59c35e77d5ee663c5d56f7d8af845ce8aeb9935e526ae4a06e02ae70e71212ca"
- },
- {
- "name": "circled_information_source",
- "unicode": "1F6C8",
- "digest": "59c35e77d5ee663c5d56f7d8af845ce8aeb9935e526ae4a06e02ae70e71212ca"
- },
- {
"name": "information_desk_person",
"unicode": "1F481",
"digest": "9f12a4a58a650e8e1d3836ef857003c3ccd42ad4203a2479eb95100bf6559064"
@@ -6250,16 +6310,6 @@
"digest": "f986ad32e419cca81c995f8371f0189d1490172a97ebbeac60054a1af08949c5"
},
{
- "name": "jet_up",
- "unicode": "1F6E6",
- "digest": "3708e5e034b1c64d1268d66527e13c369aa0f8903bce9172bef773b2d1940948"
- },
- {
- "name": "up_pointing_military_airplane",
- "unicode": "1F6E6",
- "digest": "3708e5e034b1c64d1268d66527e13c369aa0f8903bce9172bef773b2d1940948"
- },
- {
"name": "joy",
"unicode": "1F602",
"digest": "75d7a05043523d290c46d3b313b19ed3c95271f1110bcf234cf13d4273625b08"
@@ -6275,6 +6325,66 @@
"digest": "671ee588f397a96f27056a67e6a06d6e8d22c2109ec57b2859badb5fec9cf8dd"
},
{
+ "name": "juggling",
+ "unicode": "1F939",
+ "digest": "1f5dafa78de8b37f3df88fdf3084d2380666bd74ab2f449754d8724f6f8dbfa5"
+ },
+ {
+ "name": "juggler",
+ "unicode": "1F939",
+ "digest": "1f5dafa78de8b37f3df88fdf3084d2380666bd74ab2f449754d8724f6f8dbfa5"
+ },
+ {
+ "name": "juggling_tone1",
+ "unicode": "1F939-1F3FB",
+ "digest": "b0b4d020148c896be69c28b08e3c486f6db270d138c7ccf4be362b29eb99878d"
+ },
+ {
+ "name": "juggler_tone1",
+ "unicode": "1F939-1F3FB",
+ "digest": "b0b4d020148c896be69c28b08e3c486f6db270d138c7ccf4be362b29eb99878d"
+ },
+ {
+ "name": "juggling_tone2",
+ "unicode": "1F939-1F3FC",
+ "digest": "cfe0c1649b2fdca03673e0e64f3a7d06d4bd49b8954c769aeb7eb88b70ec99f4"
+ },
+ {
+ "name": "juggler_tone2",
+ "unicode": "1F939-1F3FC",
+ "digest": "cfe0c1649b2fdca03673e0e64f3a7d06d4bd49b8954c769aeb7eb88b70ec99f4"
+ },
+ {
+ "name": "juggling_tone3",
+ "unicode": "1F939-1F3FD",
+ "digest": "7f87022722008bb265abe245e8157dc7a61944f5da62b3cf86f26ee1b3bdef63"
+ },
+ {
+ "name": "juggler_tone3",
+ "unicode": "1F939-1F3FD",
+ "digest": "7f87022722008bb265abe245e8157dc7a61944f5da62b3cf86f26ee1b3bdef63"
+ },
+ {
+ "name": "juggling_tone4",
+ "unicode": "1F939-1F3FE",
+ "digest": "1f00da8c05582c95501cc6c3fe5ce0f9bfbc16789dcee59844a8fe7831198583"
+ },
+ {
+ "name": "juggler_tone4",
+ "unicode": "1F939-1F3FE",
+ "digest": "1f00da8c05582c95501cc6c3fe5ce0f9bfbc16789dcee59844a8fe7831198583"
+ },
+ {
+ "name": "juggling_tone5",
+ "unicode": "1F939-1F3FF",
+ "digest": "a195bf734788eb7961c00dbc05255a49da8b9d5042fada29b26cc20393d3ce52"
+ },
+ {
+ "name": "juggler_tone5",
+ "unicode": "1F939-1F3FF",
+ "digest": "a195bf734788eb7961c00dbc05255a49da8b9d5042fada29b26cc20393d3ce52"
+ },
+ {
"name": "kaaba",
"unicode": "1F54B",
"digest": "a4618782f9583f077bd383965f1c91b9985a949bb7b6cec7af22914e7f5e9ab6"
@@ -6296,38 +6406,8 @@
},
{
"name": "keyboard",
- "unicode": "1F5AE",
- "digest": "3b254cbf19946df3af05e501d11653d89fcda91684b7248d86186f842b83bf16"
- },
- {
- "name": "wired_keyboard",
- "unicode": "1F5AE",
- "digest": "3b254cbf19946df3af05e501d11653d89fcda91684b7248d86186f842b83bf16"
- },
- {
- "name": "keyboard_mouse",
- "unicode": "1F5A6",
- "digest": "95b523e55d8afeaeb06442bbe20e47f49643bb0c32d89a8cdbbccdead20532b3"
- },
- {
- "name": "keyboard_and_mouse",
- "unicode": "1F5A6",
- "digest": "95b523e55d8afeaeb06442bbe20e47f49643bb0c32d89a8cdbbccdead20532b3"
- },
- {
- "name": "keyboard_with_jacks",
- "unicode": "1F398",
- "digest": "e29a0d0b8018d13458469edca13c60a882a2817957c1aa11b050684c995a47ee"
- },
- {
- "name": "musical_keyboard_with_jacks",
- "unicode": "1F398",
- "digest": "e29a0d0b8018d13458469edca13c60a882a2817957c1aa11b050684c995a47ee"
- },
- {
- "name": "keycap_ten",
- "unicode": "1F51F",
- "digest": "c7c9491021740d2c17edddb856f79579b0b943d8dc85a2f48dbaac84f35b8a40"
+ "unicode": "2328",
+ "digest": "34da8ff62ca964142f9281b80123dbba74deaac8d77fa61758c30cfb36c31386"
},
{
"name": "kimono",
@@ -6385,6 +6465,16 @@
"digest": "f0f8636cb1a02b93cc72ce1b194b890fca823d91e35926b889be3ecfae79207f"
},
{
+ "name": "kiwi",
+ "unicode": "1F95D",
+ "digest": "70a3a05f333d9455d2da12eed970bc3baae416286848fed8e5dd31b5be0819be"
+ },
+ {
+ "name": "kiwifruit",
+ "unicode": "1F95D",
+ "digest": "70a3a05f333d9455d2da12eed970bc3baae416286848fed8e5dd31b5be0819be"
+ },
+ {
"name": "knife",
"unicode": "1F52A",
"digest": "e6189e4843c6e80875b4952fcddb0c858f7c6039b9214bbec6a261a1358425df"
@@ -6450,19 +6540,69 @@
"digest": "e58cb714353e96a2891a5d97910ff79660e637af909b81c49c919d3735db55b4"
},
{
- "name": "left_luggage",
- "unicode": "1F6C5",
- "digest": "6625077767a51163ea20cbc299f3c13fd5ccf1b5ce365ee702ef1fef6be3dadf"
+ "name": "left_facing_fist",
+ "unicode": "1F91B",
+ "digest": "7861be485beefae0de341df2f21576666e22f63511a033e785752f30c07291da"
+ },
+ {
+ "name": "left_fist",
+ "unicode": "1F91B",
+ "digest": "7861be485beefae0de341df2f21576666e22f63511a033e785752f30c07291da"
+ },
+ {
+ "name": "left_facing_fist_tone1",
+ "unicode": "1F91B-1F3FB",
+ "digest": "2e4c4dd96b0e4b46fe0f9ce5666344d266d0f17a8544cbae73d96638d1955296"
+ },
+ {
+ "name": "left_fist_tone1",
+ "unicode": "1F91B-1F3FB",
+ "digest": "2e4c4dd96b0e4b46fe0f9ce5666344d266d0f17a8544cbae73d96638d1955296"
+ },
+ {
+ "name": "left_facing_fist_tone2",
+ "unicode": "1F91B-1F3FC",
+ "digest": "b96a63a801175ce98a75f0edad7b5574251a3fbbd894d8ab3f21aeeda366cc13"
},
{
- "name": "left_receiver",
- "unicode": "1F57B",
- "digest": "8052e44951afee04c87296128744b5019ec783c9ed1a231f659af6c8ddaa50f3"
+ "name": "left_fist_tone2",
+ "unicode": "1F91B-1F3FC",
+ "digest": "b96a63a801175ce98a75f0edad7b5574251a3fbbd894d8ab3f21aeeda366cc13"
},
{
- "name": "left_hand_telephone_receiver",
- "unicode": "1F57B",
- "digest": "8052e44951afee04c87296128744b5019ec783c9ed1a231f659af6c8ddaa50f3"
+ "name": "left_facing_fist_tone3",
+ "unicode": "1F91B-1F3FD",
+ "digest": "99df84635513c2ebfef24df1bd3705233e02149eef788c7b82ca0548df6f6ea5"
+ },
+ {
+ "name": "left_fist_tone3",
+ "unicode": "1F91B-1F3FD",
+ "digest": "99df84635513c2ebfef24df1bd3705233e02149eef788c7b82ca0548df6f6ea5"
+ },
+ {
+ "name": "left_facing_fist_tone4",
+ "unicode": "1F91B-1F3FE",
+ "digest": "68954842ca725aec0aa39bce4aa81aad17ac30f5f298561dfa411feb07414cd3"
+ },
+ {
+ "name": "left_fist_tone4",
+ "unicode": "1F91B-1F3FE",
+ "digest": "68954842ca725aec0aa39bce4aa81aad17ac30f5f298561dfa411feb07414cd3"
+ },
+ {
+ "name": "left_facing_fist_tone5",
+ "unicode": "1F91B-1F3FF",
+ "digest": "a419b33fae82612dc860ff48950c0547a1642d4f0c94b6547324440837d3bb21"
+ },
+ {
+ "name": "left_fist_tone5",
+ "unicode": "1F91B-1F3FF",
+ "digest": "a419b33fae82612dc860ff48950c0547a1642d4f0c94b6547324440837d3bb21"
+ },
+ {
+ "name": "left_luggage",
+ "unicode": "1F6C5",
+ "digest": "6625077767a51163ea20cbc299f3c13fd5ccf1b5ce365ee702ef1fef6be3dadf"
},
{
"name": "left_right_arrow",
@@ -6570,16 +6710,6 @@
"digest": "79b0edf6ce1fd024dd7f458e322ad8588af0b789a04cc1cf38380dc8b9c76f55"
},
{
- "name": "light_check_mark",
- "unicode": "1F5F8",
- "digest": "7842b0df8c2b6703bed0cce5d2790d394eec7120b2a245a76f375528f2729a7b"
- },
- {
- "name": "light_mark",
- "unicode": "1F5F8",
- "digest": "7842b0df8c2b6703bed0cce5d2790d394eec7120b2a245a76f375528f2729a7b"
- },
- {
"name": "light_rail",
"unicode": "1F688",
"digest": "2f30b23a738371690b2f00d96ddb5ceb90a1442b5478754626a3dfa263ed2fc1"
@@ -6605,16 +6735,16 @@
"digest": "8740d8086525c7a836d64625a6915cc1c59af69ba143456dbb59e0179276895e"
},
{
- "name": "lips2",
- "unicode": "1F5E2",
- "digest": "c6ba915982ac47d8aaf14ad3605949df95588acfb4e147bf608f8c1714cdf19b"
- },
- {
"name": "lipstick",
"unicode": "1F484",
"digest": "751dcb22706a796033b13a2ccb94304236ec13207ad4d011e02d230ae33ab5c1"
},
{
+ "name": "lizard",
+ "unicode": "1F98E",
+ "digest": "fb9191f9eab58b8403d4c4626ccbb14ba05c1f6944011751a8edcc4dd03c66e6"
+ },
+ {
"name": "lock",
"unicode": "1F512",
"digest": "043b4fc0b8c79d47a07d91308e628e1ac262aea6c1ec05e6b84bf7bcdf89dc83"
@@ -6660,6 +6790,16 @@
"digest": "a065d00a416e297c168b0a675cafcf492fedf94865cb21801a1be5a3914593d4"
},
{
+ "name": "lying_face",
+ "unicode": "1F925",
+ "digest": "ce836170165e1b70938273f289c02c2106873cd9ab5472dbcd487c2f9f53f13d"
+ },
+ {
+ "name": "liar",
+ "unicode": "1F925",
+ "digest": "ce836170165e1b70938273f289c02c2106873cd9ab5472dbcd487c2f9f53f13d"
+ },
+ {
"name": "m",
"unicode": "24C2",
"digest": "54588ac2b7fcd53a96f17124e9de69b617613fcd5af9ad2930a094cb795bb9f4"
@@ -6705,6 +6845,121 @@
"digest": "42b882d2c6aa095f1afcf901203838d95c1908bdc725519779186b9c33c728d7"
},
{
+ "name": "man_dancing",
+ "unicode": "1F57A",
+ "digest": "9f632ee0c886d5f03c61e5f3a27668262c0cc2693b857a91c23c1e5ea3785b9e"
+ },
+ {
+ "name": "male_dancer",
+ "unicode": "1F57A",
+ "digest": "9f632ee0c886d5f03c61e5f3a27668262c0cc2693b857a91c23c1e5ea3785b9e"
+ },
+ {
+ "name": "man_dancing_tone1",
+ "unicode": "1F57A-1F3FB",
+ "digest": "6c56a16cb105bcdd97472645b3a351cebdbb1132cbfd18b0118f289db5fbe741"
+ },
+ {
+ "name": "male_dancer_tone1",
+ "unicode": "1F57A-1F3FB",
+ "digest": "6c56a16cb105bcdd97472645b3a351cebdbb1132cbfd18b0118f289db5fbe741"
+ },
+ {
+ "name": "man_dancing_tone2",
+ "unicode": "1F57A-1F3FC",
+ "digest": "ed7e78c14d205a03fdd5581e5213add69a55e13b4cbaf76a6d5a0d6c80f53327"
+ },
+ {
+ "name": "male_dancer_tone2",
+ "unicode": "1F57A-1F3FC",
+ "digest": "ed7e78c14d205a03fdd5581e5213add69a55e13b4cbaf76a6d5a0d6c80f53327"
+ },
+ {
+ "name": "man_dancing_tone3",
+ "unicode": "1F57A-1F3FD",
+ "digest": "13b45403e11800163406206eedeb8b579cc83eca2f60246be97e099164387bc8"
+ },
+ {
+ "name": "male_dancer_tone3",
+ "unicode": "1F57A-1F3FD",
+ "digest": "13b45403e11800163406206eedeb8b579cc83eca2f60246be97e099164387bc8"
+ },
+ {
+ "name": "man_dancing_tone4",
+ "unicode": "1F57A-1F3FE",
+ "digest": "f6feb1b0b83565fadcdd1a8737d3daa08893e919547d2a06de899160162d9c4a"
+ },
+ {
+ "name": "male_dancer_tone4",
+ "unicode": "1F57A-1F3FE",
+ "digest": "f6feb1b0b83565fadcdd1a8737d3daa08893e919547d2a06de899160162d9c4a"
+ },
+ {
+ "name": "man_dancing_tone5",
+ "unicode": "1F57A-1F3FF",
+ "digest": "fe20a9ed9ba991653b4d0683de347ed7c226a5d75610307584a2ddd6fcd1e3f2"
+ },
+ {
+ "name": "male_dancer_tone5",
+ "unicode": "1F57A-1F3FF",
+ "digest": "fe20a9ed9ba991653b4d0683de347ed7c226a5d75610307584a2ddd6fcd1e3f2"
+ },
+ {
+ "name": "man_in_tuxedo",
+ "unicode": "1F935",
+ "digest": "4d451a971dfefedc4830ba78e19b123f250e09ae65baddccdc56c0f8aa3a9b50"
+ },
+ {
+ "name": "man_in_tuxedo_tone1",
+ "unicode": "1F935-1F3FB",
+ "digest": "2814833334fb211ae2ecb1fb5964e9752282d0fb4d7f3477de5dd2a4f812a793"
+ },
+ {
+ "name": "tuxedo_tone1",
+ "unicode": "1F935-1F3FB",
+ "digest": "2814833334fb211ae2ecb1fb5964e9752282d0fb4d7f3477de5dd2a4f812a793"
+ },
+ {
+ "name": "man_in_tuxedo_tone2",
+ "unicode": "1F935-1F3FC",
+ "digest": "cd1bab9ee0e2335d3cd99d51216cccdc4fc3c2cf20129b8b7e11a51a77258f68"
+ },
+ {
+ "name": "tuxedo_tone2",
+ "unicode": "1F935-1F3FC",
+ "digest": "cd1bab9ee0e2335d3cd99d51216cccdc4fc3c2cf20129b8b7e11a51a77258f68"
+ },
+ {
+ "name": "man_in_tuxedo_tone3",
+ "unicode": "1F935-1F3FD",
+ "digest": "f387775f925fe60b9f3e7cad63a55d4d196ddd41658029a70440d14c17cb99f9"
+ },
+ {
+ "name": "tuxedo_tone3",
+ "unicode": "1F935-1F3FD",
+ "digest": "f387775f925fe60b9f3e7cad63a55d4d196ddd41658029a70440d14c17cb99f9"
+ },
+ {
+ "name": "man_in_tuxedo_tone4",
+ "unicode": "1F935-1F3FE",
+ "digest": "08debd7a573d1201aee8a2f281ef7cb638d4a2a096222150391f36963f07c622"
+ },
+ {
+ "name": "tuxedo_tone4",
+ "unicode": "1F935-1F3FE",
+ "digest": "08debd7a573d1201aee8a2f281ef7cb638d4a2a096222150391f36963f07c622"
+ },
+ {
+ "name": "man_in_tuxedo_tone5",
+ "unicode": "1F935-1F3FF",
+ "digest": "e3b10e0619f0911cf9b665a265f4ef829b8f6ba6e9c3a021d0539a27e315f8fe"
+ },
+ {
+ "name": "tuxedo_tone5",
+ "unicode": "1F935-1F3FF",
+ "digest": "e3b10e0619f0911cf9b665a265f4ef829b8f6ba6e9c3a021d0539a27e315f8fe"
+ },
+ {
"name": "man_tone1",
"unicode": "1F468-1F3FB",
"digest": "7053e265fa7d2594de54a6c5d06c21795b9a7dfb36a1c5594ca43c4c6cc56504"
@@ -6810,6 +7065,16 @@
"digest": "72629a205e33f89337815ad7e51bb5c73947d1a9f98afe5072bdf4846827ae72"
},
{
+ "name": "martial_arts_uniform",
+ "unicode": "1F94B",
+ "digest": "a1ae797b31081425b388ab31efc635d8eb73a40980fd0fae4708aa5313e2a964"
+ },
+ {
+ "name": "karate_uniform",
+ "unicode": "1F94B",
+ "digest": "a1ae797b31081425b388ab31efc635d8eb73a40980fd0fae4708aa5313e2a964"
+ },
+ {
"name": "mask",
"unicode": "1F637",
"digest": "1b58af9ae599308aabf41bbd38f599fa896bd9fe5df7a40be9f2dc7e0e230600"
@@ -7030,6 +7295,16 @@
"digest": "5da18351dc14b66cfc070148c83b7c8e67e6b1e3f515ae501133c38ee5c28d3d"
},
{
+ "name": "milk",
+ "unicode": "1F95B",
+ "digest": "38b28ea40399601fabc95bac5eaaf5a9e4e25548ec80325bd5069395ea884f85"
+ },
+ {
+ "name": "glass_of_milk",
+ "unicode": "1F95B",
+ "digest": "38b28ea40399601fabc95bac5eaaf5a9e4e25548ec80325bd5069395ea884f85"
+ },
+ {
"name": "milky_way",
"unicode": "1F30C",
"digest": "17405ff31d94b13a1fb0adcda204b8adb95ca340bc3980d9ad9f42ba1e366e7d"
@@ -7085,31 +7360,6 @@
"digest": "2c9f185babcb4001fcef2b8dfc4a32126729843084d0076c3e3ccdc845ab23ad"
},
{
- "name": "mood_bubble",
- "unicode": "1F5F0",
- "digest": "1df7061217e478d43ab9a87d4f351c4ca56705acd6b4e0b0bedfdece77635f1b"
- },
- {
- "name": "mood_bubble_lightning",
- "unicode": "1F5F1",
- "digest": "4af3e4e53eaa328b0d20542ab31705a74bf9fd368cd0673b706838ce1681d3c9"
- },
- {
- "name": "lightning_mood_bubble",
- "unicode": "1F5F1",
- "digest": "4af3e4e53eaa328b0d20542ab31705a74bf9fd368cd0673b706838ce1681d3c9"
- },
- {
- "name": "mood_lightning",
- "unicode": "1F5F2",
- "digest": "6784635e81ec722fd50a1c2a23b0f9679e4bf1b5ae2b5a01eeb995bc1f7a426f"
- },
- {
- "name": "lightning_mood",
- "unicode": "1F5F2",
- "digest": "6784635e81ec722fd50a1c2a23b0f9679e4bf1b5ae2b5a01eeb995bc1f7a426f"
- },
- {
"name": "mortar_board",
"unicode": "1F393",
"digest": "d7fbe41d4b340d3564e484aec46a22c9613521414b2ba6eece2180db4d23e410"
@@ -7120,6 +7370,16 @@
"digest": "5f3d3de7feac953a70a318113531c2857d760a516c3d8d6f42d2a3b3b67ed196"
},
{
+ "name": "motor_scooter",
+ "unicode": "1F6F5",
+ "digest": "e2dc7c981744a71f46858bd0858ff91af704ac06425ed80377bc3b119e57c872"
+ },
+ {
+ "name": "motorbike",
+ "unicode": "1F6F5",
+ "digest": "e2dc7c981744a71f46858bd0858ff91af704ac06425ed80377bc3b119e57c872"
+ },
+ {
"name": "motorboat",
"unicode": "1F6E5",
"digest": "81c156643528c5a94a12d6d478e52a019f5a4e3eb58ee365cdd9d2361a7fdb01"
@@ -7210,16 +7470,6 @@
"digest": "f3ed37b639b7c16aae49502bd423f9fdeabaf15bc6f0f74063954b189e176b5d"
},
{
- "name": "mouse_one",
- "unicode": "1F5AF",
- "digest": "e0d2055ccba489d24e0c0b6d2f22793efe48a734b0fd50f5af88f721b40665c0"
- },
- {
- "name": "one_button_mouse",
- "unicode": "1F5AF",
- "digest": "e0d2055ccba489d24e0c0b6d2f22793efe48a734b0fd50f5af88f721b40665c0"
- },
- {
"name": "mouse_three_button",
"unicode": "1F5B1",
"digest": "3724341ac5ad0d01027ef1575db64f1db7619f590ca6ada960d1f2c18dc7fc6a"
@@ -7240,6 +7490,66 @@
"digest": "2c1d0662c95928936e6b9ab5a40c6110ff1cea5339f2803c7b63aabc76115afb"
},
{
+ "name": "mrs_claus",
+ "unicode": "1F936",
+ "digest": "1f72f586ca75bd7ebb4150cdcc8199a930c32fa4b81510cb8d200f1b3ddd4076"
+ },
+ {
+ "name": "mother_christmas",
+ "unicode": "1F936",
+ "digest": "1f72f586ca75bd7ebb4150cdcc8199a930c32fa4b81510cb8d200f1b3ddd4076"
+ },
+ {
+ "name": "mrs_claus_tone1",
+ "unicode": "1F936-1F3FB",
+ "digest": "244596919e0fed050203cf9e040899de323d7821235929f175852439927bd129"
+ },
+ {
+ "name": "mother_christmas_tone1",
+ "unicode": "1F936-1F3FB",
+ "digest": "244596919e0fed050203cf9e040899de323d7821235929f175852439927bd129"
+ },
+ {
+ "name": "mrs_claus_tone2",
+ "unicode": "1F936-1F3FC",
+ "digest": "8cde96e8521f3a90262a7f5f8a2989a9590d9a02cda2c37e92335dc05975c18d"
+ },
+ {
+ "name": "mother_christmas_tone2",
+ "unicode": "1F936-1F3FC",
+ "digest": "8cde96e8521f3a90262a7f5f8a2989a9590d9a02cda2c37e92335dc05975c18d"
+ },
+ {
+ "name": "mrs_claus_tone3",
+ "unicode": "1F936-1F3FD",
+ "digest": "c39cd4346d4581799dd0e9a6447c91a954a75747bf2682c8e4d79c3b0fcf7405"
+ },
+ {
+ "name": "mother_christmas_tone3",
+ "unicode": "1F936-1F3FD",
+ "digest": "c39cd4346d4581799dd0e9a6447c91a954a75747bf2682c8e4d79c3b0fcf7405"
+ },
+ {
+ "name": "mrs_claus_tone4",
+ "unicode": "1F936-1F3FE",
+ "digest": "84c85cf54559ea2d78d196fee96149a249af4f959b78e223a0ec4fb72abdbcab"
+ },
+ {
+ "name": "mother_christmas_tone4",
+ "unicode": "1F936-1F3FE",
+ "digest": "84c85cf54559ea2d78d196fee96149a249af4f959b78e223a0ec4fb72abdbcab"
+ },
+ {
+ "name": "mrs_claus_tone5",
+ "unicode": "1F936-1F3FF",
+ "digest": "ce26c0e0645713b17e7497d9f2d0484cc5477564dae99320cabf04d160d3b2ff"
+ },
+ {
+ "name": "mother_christmas_tone5",
+ "unicode": "1F936-1F3FF",
+ "digest": "ce26c0e0645713b17e7497d9f2d0484cc5477564dae99320cabf04d160d3b2ff"
+ },
+ {
"name": "muscle",
"unicode": "1F4AA",
"digest": "e4ce52757b2b7982e2516e0e8bf2e2253617cc9f3e6178f1887c61c9039461ba"
@@ -7330,6 +7640,16 @@
"digest": "f9f6a4895ff0be8fb2ccc7ad195b94e9650f742f66ead999e90724cfb77af628"
},
{
+ "name": "nauseated_face",
+ "unicode": "1F922",
+ "digest": "f8471cf4720948d8246ec9d30e29783e819f90e3cfe8b1ba628671a1aad1a91c"
+ },
+ {
+ "name": "sick",
+ "unicode": "1F922",
+ "digest": "f8471cf4720948d8246ec9d30e29783e819f90e3cfe8b1ba628671a1aad1a91c"
+ },
+ {
"name": "necktie",
"unicode": "1F454",
"digest": "01bb18dc8bfe787daa9613b5d09988cd5a065449ef906099ce3cb308c8a7da68"
@@ -7350,16 +7670,6 @@
"digest": "9e5f3c93db25cf1d0f9d6e6bd2993161afec6c30573ba3fe85e13b8c84483d66"
},
{
- "name": "network",
- "unicode": "1F5A7",
- "digest": "1dbaa54deeb2328fd8a3f044e450c97ac3ff39627c598bb2f4312d677482ee06"
- },
- {
- "name": "three_networked_computers",
- "unicode": "1F5A7",
- "digest": "1dbaa54deeb2328fd8a3f044e450c97ac3ff39627c598bb2f4312d677482ee06"
- },
- {
"name": "neutral_face",
"unicode": "1F610",
"digest": "7449430a60619956573e9dc80834045296f2b99853737b6c7794c785ff53d64e"
@@ -7515,26 +7825,6 @@
"digest": "1e0f9842e0f8ad5805eabd3f35a6038b7a2e49d566a1f5c17271f9cdf467ca60"
},
{
- "name": "note",
- "unicode": "1F5C9",
- "digest": "073660fdaa02ecf98d04f61f8d65d6cc447ccae3825fccaff19a2c99ebba52af"
- },
- {
- "name": "note_page",
- "unicode": "1F5C9",
- "digest": "073660fdaa02ecf98d04f61f8d65d6cc447ccae3825fccaff19a2c99ebba52af"
- },
- {
- "name": "note_empty",
- "unicode": "1F5C6",
- "digest": "06b56eeaca6349bbcf1020bea98f937450a7e086db65cd5d7497748e0fb607be"
- },
- {
- "name": "empty_note_page",
- "unicode": "1F5C6",
- "digest": "06b56eeaca6349bbcf1020bea98f937450a7e086db65cd5d7497748e0fb607be"
- },
- {
"name": "notebook",
"unicode": "1F4D3",
"digest": "fc679d3728f86073d1607a926885dd8b0261132f5c4a0322f1e46ea9f95c8cb8"
@@ -7545,26 +7835,6 @@
"digest": "d822eda4b49cbfa399b36f134c1a0b8dcfdd27ed89f12c50bc18f6f0a9aa56ef"
},
{
- "name": "notepad",
- "unicode": "1F5CA",
- "digest": "85069e2d13540886457368a57295072aec44c7137d9223bfcf908ce1f0e5124e"
- },
- {
- "name": "note_pad",
- "unicode": "1F5CA",
- "digest": "85069e2d13540886457368a57295072aec44c7137d9223bfcf908ce1f0e5124e"
- },
- {
- "name": "notepad_empty",
- "unicode": "1F5C7",
- "digest": "8be5053e74c13d8220917c5aee1f4afdecb001612886438f283b0c2a0fecf6af"
- },
- {
- "name": "empty_note_pad",
- "unicode": "1F5C7",
- "digest": "8be5053e74c13d8220917c5aee1f4afdecb001612886438f283b0c2a0fecf6af"
- },
- {
"name": "notepad_spiral",
"unicode": "1F5D2",
"digest": "c6a8e16aa62474cef13e5659fddb4afc57e3f79635e32e6020edbee2b5b50f18"
@@ -7600,6 +7870,16 @@
"digest": "1a9ca9848d4fb75852addfc10bf84eccf7caa5339714b90e3de4cb6f2518465e"
},
{
+ "name": "octagonal_sign",
+ "unicode": "1F6D1",
+ "digest": "9f6927048e1f9da57f89d1ae1eb86fa4ab7abdbabca756a738a799e948d0b3f9"
+ },
+ {
+ "name": "stop_sign",
+ "unicode": "1F6D1",
+ "digest": "9f6927048e1f9da57f89d1ae1eb86fa4ab7abdbabca756a738a799e948d0b3f9"
+ },
+ {
"name": "octopus",
"unicode": "1F419",
"digest": "0fcc65c12f4b29ea75a8c4823d20838a7e6db6978fdcb536943072aa1460bc59"
@@ -7860,16 +8140,6 @@
"digest": "6112e2a1656b1cb8bd9a8b0dfa6cbf66d30cae671710a9ef75c821de344aab2b"
},
{
- "name": "optical_disk",
- "unicode": "1F5B8",
- "digest": "df8c10028d29d65f144a6b789d1c3294e7b3293554c4c30d28d72dc7ba8d9a5d"
- },
- {
- "name": "optical_disc_icon",
- "unicode": "1F5B8",
- "digest": "df8c10028d29d65f144a6b789d1c3294e7b3293554c4c30d28d72dc7ba8d9a5d"
- },
- {
"name": "orange_book",
"unicode": "1F4D9",
"digest": "41141b08d2beceded21a94795431603c47fd7d42a3a472a2aa8b2bb25fa87ebf"
@@ -7885,6 +8155,11 @@
"digest": "e47cb481a0ffcb39996f32fd313e19b362a91d8dda15ffca48ac23a3b5bb5baf"
},
{
+ "name": "owl",
+ "unicode": "1F989",
+ "digest": "f62ec1ad23ad9038966eea8d8b79660ac212f291af2e89bcdb0fdc683caf41e5"
+ },
+ {
"name": "ox",
"unicode": "1F402",
"digest": "d13bc60552190bb9936bf32d681bdc742439b702a09cfc62137ea09a98624aed"
@@ -7895,11 +8170,6 @@
"digest": "e82bf5accebb65136e897c15607eef635fb79fd7b2d8c8e19a9eb00b6786918c"
},
{
- "name": "page",
- "unicode": "1F5CF",
- "digest": "cc745056525f59d9128d1d03b14770376bb09ab64b8ef4ac994ab7f38efd4783"
- },
- {
"name": "page_facing_up",
"unicode": "1F4C4",
"digest": "3884868bdcb2f29615b09a13a30385cbc5269379094a54b5a7e8a5f4e8ce905a"
@@ -7915,11 +8185,6 @@
"digest": "e21c756cc1c58ebc1b37ebcd38e22a25b31e2e81306c6f18285d6a7671f9eb12"
},
{
- "name": "pages",
- "unicode": "1F5D0",
- "digest": "05bd47b78f089389356d9d839c736843f56b959ab4277056606ffcbb013390bc"
- },
- {
"name": "paintbrush",
"unicode": "1F58C",
"digest": "fc0da7a25b726b8be9dd6467953e27293d2313a21eeff21424c2a19be614fff2"
@@ -7935,6 +8200,11 @@
"digest": "90fedafd62fe0abf51325174d0f293ebb9a4794913b9ba93b12f2d0119056df1"
},
{
+ "name": "pancakes",
+ "unicode": "1F95E",
+ "digest": "5256b4832431e8a88555796b1a9726f12d909a26fb2bdc3a0abff76412c45903"
+ },
+ {
"name": "panda_face",
"unicode": "1F43C",
"digest": "56a4b84abe983bd6569be1b81ac5e43071015fd308389a16b92231310ae56a5b"
@@ -8010,6 +8280,16 @@
"digest": "768d1f4f29e1e06aff5abb29043be83087ded16427ce6a2d0f682814e665e311"
},
{
+ "name": "peanuts",
+ "unicode": "1F95C",
+ "digest": "e2384846b6e4a6c3a56e991ebb749cb68b330ac00a9e9d888b2c39105ff7ff5d"
+ },
+ {
+ "name": "shelled_peanut",
+ "unicode": "1F95C",
+ "digest": "e2384846b6e4a6c3a56e991ebb749cb68b330ac00a9e9d888b2c39105ff7ff5d"
+ },
+ {
"name": "pear",
"unicode": "1F350",
"digest": "b7c9cf90bb979649b863d2f4132f1b51f6f8107d42e08fb8b4033fea32844948"
@@ -8050,41 +8330,11 @@
"digest": "9ca1b56b5726f472b1f1b23050ed163e213916dac379d22e38e4c8358fe871e0"
},
{
- "name": "pencil3",
- "unicode": "1F589",
- "digest": "52c1ba1228917eb491ac1745a495e0fdafba6b985a81caba250f71d1f94c725c"
- },
- {
- "name": "lower_left_pencil",
- "unicode": "1F589",
- "digest": "52c1ba1228917eb491ac1745a495e0fdafba6b985a81caba250f71d1f94c725c"
- },
- {
"name": "penguin",
"unicode": "1F427",
"digest": "a1800ab931d6dc84a9c89bfab2c815198025c276d952509c55b18dd20bd9d316"
},
{
- "name": "pennant_black",
- "unicode": "1F3F2",
- "digest": "cd3c33bfc3c7fbe84b98d2d481d56a7bf5488ff94afadd8b5a0e454768b80269"
- },
- {
- "name": "black_pennant",
- "unicode": "1F3F2",
- "digest": "cd3c33bfc3c7fbe84b98d2d481d56a7bf5488ff94afadd8b5a0e454768b80269"
- },
- {
- "name": "pennant_white",
- "unicode": "1F3F1",
- "digest": "818b1be73540f2cfeb1c514e1ee75d18715af317f0db817d9ae081b9ea33d4b0"
- },
- {
- "name": "white_pennant",
- "unicode": "1F3F1",
- "digest": "818b1be73540f2cfeb1c514e1ee75d18715af317f0db817d9ae081b9ea33d4b0"
- },
- {
"name": "pensive",
"unicode": "1F614",
"digest": "d237deff9f5ead8a0b281b7e5c6f4b82e98cc30c80c86c22c3fdc6160090b2f2"
@@ -8230,16 +8480,6 @@
"digest": "943a858bd054c81a08a08951f8351c27c8009b85a9359729c7362868298b58e1"
},
{
- "name": "piracy",
- "unicode": "1F572",
- "digest": "f42955ba75c598392e5e258be49968d858c876e0d6e7aa9dc795f7e8cff42be9"
- },
- {
- "name": "no_piracy",
- "unicode": "1F572",
- "digest": "f42955ba75c598392e5e258be49968d858c876e0d6e7aa9dc795f7e8cff42be9"
- },
- {
"name": "pisces",
"unicode": "2653",
"digest": "453c3915122a4b6b32867056d2447be48675a84469145c88d52f8007fcb0861a"
@@ -8470,6 +8710,11 @@
"digest": "dbe80d9637837377cc2a290da2e895f81a3108cc18b049e3d87212402c1c2098"
},
{
+ "name": "potato",
+ "unicode": "1F954",
+ "digest": "a56a69f36f3a0793f278726d92c0cea2960554f3062ef1a0904526a04511d8e1"
+ },
+ {
"name": "pouch",
"unicode": "1F45D",
"digest": "9f012b90310b4a072b6a8fa2c64def087b5f7ffffaafc36e1856ba943a170351"
@@ -8525,6 +8770,96 @@
"digest": "80177091264430cbcf7c994fbe5ee17319d1a58d933636cc752a54dafcf98a05"
},
{
+ "name": "pregnant_woman",
+ "unicode": "1F930",
+ "digest": "49abb86409103338bdb6ae43c13a78ca2dc9cd158a26df35eadd0da3c84a4352"
+ },
+ {
+ "name": "expecting_woman",
+ "unicode": "1F930",
+ "digest": "49abb86409103338bdb6ae43c13a78ca2dc9cd158a26df35eadd0da3c84a4352"
+ },
+ {
+ "name": "pregnant_woman_tone1",
+ "unicode": "1F930-1F3FB",
+ "digest": "5a9f8ed2b631ecf8af111803a5c11f4c156435a5293cb50329c7b98697c8da25"
+ },
+ {
+ "name": "expecting_woman_tone1",
+ "unicode": "1F930-1F3FB",
+ "digest": "5a9f8ed2b631ecf8af111803a5c11f4c156435a5293cb50329c7b98697c8da25"
+ },
+ {
+ "name": "pregnant_woman_tone2",
+ "unicode": "1F930-1F3FC",
+ "digest": "279a2eafff603b11629c955b05f5bd3d7da9a271d4fb3f02e9ccd457b8d2d815"
+ },
+ {
+ "name": "expecting_woman_tone2",
+ "unicode": "1F930-1F3FC",
+ "digest": "279a2eafff603b11629c955b05f5bd3d7da9a271d4fb3f02e9ccd457b8d2d815"
+ },
+ {
+ "name": "pregnant_woman_tone3",
+ "unicode": "1F930-1F3FD",
+ "digest": "93bb63ec2312db315e3f0065520b715cc413ac0fd65538ec9b5cd97df2a42b20"
+ },
+ {
+ "name": "expecting_woman_tone3",
+ "unicode": "1F930-1F3FD",
+ "digest": "93bb63ec2312db315e3f0065520b715cc413ac0fd65538ec9b5cd97df2a42b20"
+ },
+ {
+ "name": "pregnant_woman_tone4",
+ "unicode": "1F930-1F3FE",
+ "digest": "b8dc3dcec894bfd832a249459b10850f8786b6778d8887a677d1291865623da2"
+ },
+ {
+ "name": "expecting_woman_tone4",
+ "unicode": "1F930-1F3FE",
+ "digest": "b8dc3dcec894bfd832a249459b10850f8786b6778d8887a677d1291865623da2"
+ },
+ {
+ "name": "pregnant_woman_tone5",
+ "unicode": "1F930-1F3FF",
+ "digest": "73ee432752f81980f353a7f9b9f7a5ece62512dca08e15c1876b89227face21c"
+ },
+ {
+ "name": "expecting_woman_tone5",
+ "unicode": "1F930-1F3FF",
+ "digest": "73ee432752f81980f353a7f9b9f7a5ece62512dca08e15c1876b89227face21c"
+ },
+ {
+ "name": "prince",
+ "unicode": "1F934",
+ "digest": "34a0e0625f0a9825d3674192d6233b6cae4d8130451293df09f91a6a4165869c"
+ },
+ {
+ "name": "prince_tone1",
+ "unicode": "1F934-1F3FB",
+ "digest": "ccecdfeccb2ab1fceceae14f3fba875c8c7099785a4c40131c08a697b5b675fc"
+ },
+ {
+ "name": "prince_tone2",
+ "unicode": "1F934-1F3FC",
+ "digest": "c373fd3e0c1798415e3d8d88fab6c98c1bbdedcbe6f52f3a3899f6e2124a768d"
+ },
+ {
+ "name": "prince_tone3",
+ "unicode": "1F934-1F3FD",
+ "digest": "71d15695ca954d55aa69d3c753c7d31a8ba5329713a8ddbc90dafc11e524c4ef"
+ },
+ {
+ "name": "prince_tone4",
+ "unicode": "1F934-1F3FE",
+ "digest": "08f6cb32424f15cc3aaf83c31a5dac7c01a6be2f37ea8f13aed579ce6fb4db19"
+ },
+ {
+ "name": "prince_tone5",
+ "unicode": "1F934-1F3FF",
+ "digest": "77d521148efa33fa4d3409693d050fecfd948411e807327484f174e289834649"
+ },
+ {
"name": "princess",
"unicode": "1F478",
"digest": "efabd28480a843c735f0868734da2f9ce28133933b02ab07b645498f494f3f80"
@@ -8560,16 +8895,6 @@
"digest": "5e5307e3dc7ec4e16c9978fb00934c99c4adefca7d32732a244d1f2de71ce6f8"
},
{
- "name": "prohibited",
- "unicode": "1F6C7",
- "digest": "bc6cdea2269a0ec39576d98dc4cda2bd9efa4dc330dde870148c6a85ad9cc63f"
- },
- {
- "name": "prohibited_sign",
- "unicode": "1F6C7",
- "digest": "bc6cdea2269a0ec39576d98dc4cda2bd9efa4dc330dde870148c6a85ad9cc63f"
- },
- {
"name": "projector",
"unicode": "1F4FD",
"digest": "7f8e1fdb89584849a56ee34c62cab808af48b7bd4823467d090af4657a2e0420"
@@ -8625,11 +8950,6 @@
"digest": "c3f7d7008be6bab8dc02284d4d759abf7aafbb3dbbe3a53f0f5b2ff685af88f8"
},
{
- "name": "pushpin_black",
- "unicode": "1F588",
- "digest": "80ebac74edb9e8e1f8a219b32a676d318ed73b359cd8193b91b493d775307f63"
- },
- {
"name": "put_litter_in_its_place",
"unicode": "1F6AE",
"digest": "f52a57d6f1bada7b6e6b9a6458597d70cb701c01e1120d8cb1d7ff65e01d405c"
@@ -8710,6 +9030,66 @@
"digest": "a93aceb54e965f35e397e8c8716b1831614933308d026012d5464ee42783ed4d"
},
{
+ "name": "raised_back_of_hand",
+ "unicode": "1F91A",
+ "digest": "20973a697e826625deba5ee3c4f25eb5e1737f2e860ac6fe4ee4d0e0c84b5e12"
+ },
+ {
+ "name": "back_of_hand",
+ "unicode": "1F91A",
+ "digest": "20973a697e826625deba5ee3c4f25eb5e1737f2e860ac6fe4ee4d0e0c84b5e12"
+ },
+ {
+ "name": "raised_back_of_hand_tone1",
+ "unicode": "1F91A-1F3FB",
+ "digest": "06af5941255ca69d10d99d0a512bbda6141a296453835dbccf259ce0afe1dd3d"
+ },
+ {
+ "name": "back_of_hand_tone1",
+ "unicode": "1F91A-1F3FB",
+ "digest": "06af5941255ca69d10d99d0a512bbda6141a296453835dbccf259ce0afe1dd3d"
+ },
+ {
+ "name": "raised_back_of_hand_tone2",
+ "unicode": "1F91A-1F3FC",
+ "digest": "429ed19555c9e5197b729b3e7bd8013346551051cb0b3fbc8a4372717c9a027d"
+ },
+ {
+ "name": "back_of_hand_tone2",
+ "unicode": "1F91A-1F3FC",
+ "digest": "429ed19555c9e5197b729b3e7bd8013346551051cb0b3fbc8a4372717c9a027d"
+ },
+ {
+ "name": "raised_back_of_hand_tone3",
+ "unicode": "1F91A-1F3FD",
+ "digest": "487a1c3f19e77c99b520ec073de2acc4a9e585b739a84b3989f7de85d2c2045c"
+ },
+ {
+ "name": "back_of_hand_tone3",
+ "unicode": "1F91A-1F3FD",
+ "digest": "487a1c3f19e77c99b520ec073de2acc4a9e585b739a84b3989f7de85d2c2045c"
+ },
+ {
+ "name": "raised_back_of_hand_tone4",
+ "unicode": "1F91A-1F3FE",
+ "digest": "154254d8500c55ec3de698be4a352f9bcf06e2950cabc4eabaccad0f39a1e1e9"
+ },
+ {
+ "name": "back_of_hand_tone4",
+ "unicode": "1F91A-1F3FE",
+ "digest": "154254d8500c55ec3de698be4a352f9bcf06e2950cabc4eabaccad0f39a1e1e9"
+ },
+ {
+ "name": "raised_back_of_hand_tone5",
+ "unicode": "1F91A-1F3FF",
+ "digest": "6e9c0855ecd5f14adca5e5862427c3d39ffcf86f7ddd3aaa1fefc3cefc7483c8"
+ },
+ {
+ "name": "back_of_hand_tone5",
+ "unicode": "1F91A-1F3FF",
+ "digest": "6e9c0855ecd5f14adca5e5862427c3d39ffcf86f7ddd3aaa1fefc3cefc7483c8"
+ },
+ {
"name": "raised_hand",
"unicode": "270B",
"digest": "5cf11be683aea985d5ba51fbd44722c2327311bfe26b61c3d441c90f5d5a195a"
@@ -8880,6 +9260,16 @@
"digest": "d20c918c1e528ff0947312738501ca9a6fb6ff4016aad07db7a8125d00fd65cd"
},
{
+ "name": "rhino",
+ "unicode": "1F98F",
+ "digest": "163fa3acd78eead72c431a1f48b8465a6d45272a9169560e456d30b4df93dc6b"
+ },
+ {
+ "name": "rhinoceros",
+ "unicode": "1F98F",
+ "digest": "163fa3acd78eead72c431a1f48b8465a6d45272a9169560e456d30b4df93dc6b"
+ },
+ {
"name": "ribbon",
"unicode": "1F380",
"digest": "74315fe907f9f0203afe139cd4552aa442eecfa2a64fac12db3e1292fc5a8828"
@@ -8905,29 +9295,64 @@
"digest": "b942a06d3da0570aca59bab0af57cd8c16863934f12a38f70339fd0a36f675f5"
},
{
- "name": "right_speaker",
- "unicode": "1F568",
- "digest": "d268bb84be863c0884620dfc6d2a764b0c7466d2f9810549b138e21ac70add4e"
+ "name": "right_facing_fist",
+ "unicode": "1F91C",
+ "digest": "f815d1cc0c0345ddcc8886ae9c133582d7dc779732ac9b93dde1ab4fdd3b251d"
+ },
+ {
+ "name": "right_fist",
+ "unicode": "1F91C",
+ "digest": "f815d1cc0c0345ddcc8886ae9c133582d7dc779732ac9b93dde1ab4fdd3b251d"
},
{
- "name": "right_speaker_one",
- "unicode": "1F569",
- "digest": "5b92daa87bdf6ee15e798bec382a2ee885f4e6e77a68a3f626adcfe4c782b375"
+ "name": "right_facing_fist_tone1",
+ "unicode": "1F91C-1F3FB",
+ "digest": "0f9269b70cf68071d97389e059a2bdacffd73f2afd2ce6cfd7447bb1a4e9abbb"
},
{
- "name": "right_speaker_with_one_sound_wave",
- "unicode": "1F569",
- "digest": "5b92daa87bdf6ee15e798bec382a2ee885f4e6e77a68a3f626adcfe4c782b375"
+ "name": "right_fist_tone1",
+ "unicode": "1F91C-1F3FB",
+ "digest": "0f9269b70cf68071d97389e059a2bdacffd73f2afd2ce6cfd7447bb1a4e9abbb"
},
{
- "name": "right_speaker_three",
- "unicode": "1F56A",
- "digest": "4d00b720a65bd0f4c3682b290b1976ec2388d6ae61225398f4e70556ae9e5f80"
+ "name": "right_facing_fist_tone2",
+ "unicode": "1F91C-1F3FC",
+ "digest": "32a9833db853972e49e65aa227fb0512c57362da190aa1cc40e1d64f238e837e"
},
{
- "name": "right_speaker_with_three_sound_waves",
- "unicode": "1F56A",
- "digest": "4d00b720a65bd0f4c3682b290b1976ec2388d6ae61225398f4e70556ae9e5f80"
+ "name": "right_fist_tone2",
+ "unicode": "1F91C-1F3FC",
+ "digest": "32a9833db853972e49e65aa227fb0512c57362da190aa1cc40e1d64f238e837e"
+ },
+ {
+ "name": "right_facing_fist_tone3",
+ "unicode": "1F91C-1F3FD",
+ "digest": "be4706f8bb088411f5cbbf9065a0ae5b773c97456bd975c2b6789765657847b9"
+ },
+ {
+ "name": "right_fist_tone3",
+ "unicode": "1F91C-1F3FD",
+ "digest": "be4706f8bb088411f5cbbf9065a0ae5b773c97456bd975c2b6789765657847b9"
+ },
+ {
+ "name": "right_facing_fist_tone4",
+ "unicode": "1F91C-1F3FE",
+ "digest": "1680862891a9d85c4b6f76232a80e2ef7428bcec93087c86eae2efaba9c6a3f7"
+ },
+ {
+ "name": "right_fist_tone4",
+ "unicode": "1F91C-1F3FE",
+ "digest": "1680862891a9d85c4b6f76232a80e2ef7428bcec93087c86eae2efaba9c6a3f7"
+ },
+ {
+ "name": "right_facing_fist_tone5",
+ "unicode": "1F91C-1F3FF",
+ "digest": "388715a4bc2178c52bbb3bc2729f57be50acab5d751784c9f3220e86c6b1fbcc"
+ },
+ {
+ "name": "right_fist_tone5",
+ "unicode": "1F91C-1F3FF",
+ "digest": "388715a4bc2178c52bbb3bc2729f57be50acab5d751784c9f3220e86c6b1fbcc"
},
{
"name": "ring",
@@ -8935,11 +9360,6 @@
"digest": "b5322907222797b5e1786209cda88513e76cd397a40f0a7da24847245c95ef9d"
},
{
- "name": "ringing_bell",
- "unicode": "1F56D",
- "digest": "d71ab7fa937fc4af507b5b07ea58a4f31e875d9e8304ef2b850d7cebe0e9cd66"
- },
- {
"name": "robot",
"unicode": "1F916",
"digest": "4d788e6ec89279588b036fca6b17f5a981291681df8f90306ecf5c039de40848"
@@ -8955,6 +9375,16 @@
"digest": "b82e68a95aa89a6de344d6e256fef86a848ebc91de560b043b3e1f7fd072d57d"
},
{
+ "name": "rofl",
+ "unicode": "1F923",
+ "digest": "f4f99ba2ac67b97338f904f9384ff03fb832a2e427bf6e74611bf5fee45f1f48"
+ },
+ {
+ "name": "rolling_on_the_floor_laughing",
+ "unicode": "1F923",
+ "digest": "f4f99ba2ac67b97338f904f9384ff03fb832a2e427bf6e74611bf5fee45f1f48"
+ },
+ {
"name": "roller_coaster",
"unicode": "1F3A2",
"digest": "a65e9ace1d7900499777af1225995f17af90a398bb414764c20b6e09a8c23a2c"
@@ -8985,11 +9415,6 @@
"digest": "2537def4deef422d4e669b28b1a0675259306ab38601019df3ec3482b14e52d5"
},
{
- "name": "rosette_black",
- "unicode": "1F3F6",
- "digest": "ae8675891c88f9d98463d35178445950c39b0deb0f0e8b3f341228a6e0d0e477"
- },
- {
"name": "rotating_light",
"unicode": "1F6A8",
"digest": "91fcdb85a752ae904d335a978c7e7936aed4c75d414b35219b5a74430e51555f"
@@ -9090,6 +9515,16 @@
"digest": "0a786075f3d9da48ae91afccf6ae0d097888da9509d354ee1d3cb99afcc88fe4"
},
{
+ "name": "salad",
+ "unicode": "1F957",
+ "digest": "fe321487ab847abe670e68a83f1d9e096129741c689c769ee7de4a65aeac29f8"
+ },
+ {
+ "name": "green_salad",
+ "unicode": "1F957",
+ "digest": "fe321487ab847abe670e68a83f1d9e096129741c689c769ee7de4a65aeac29f8"
+ },
+ {
"name": "sandal",
"unicode": "1F461",
"digest": "03c3077cb4bd900934f9bdf921165b465e5cc9a6bee53e45a091411bceb8892d"
@@ -9160,6 +9595,11 @@
"digest": "95225be28f05d8b5a6b6e6bf58d973f61f183ad4fef55a558dc1b810796b85c8"
},
{
+ "name": "scooter",
+ "unicode": "1F6F4",
+ "digest": "4a7db148880398db75e059711cb53edefb6b8fa9d442009f52856b887ab1dde4"
+ },
+ {
"name": "scorpion",
"unicode": "1F982",
"digest": "d41119d1ea5daf727c17dbea7dadec1718c72fc9f98ae88252161df5fde0938a"
@@ -9190,6 +9630,16 @@
"digest": "ae68d86fc2a07cae332451b23bd1ceba3f6526a6c56d8c1089777fa4632850e1"
},
{
+ "name": "second_place",
+ "unicode": "1F948",
+ "digest": "9e2336fc16e532829b55380252f94655b58817d47c909fc2570002c5b06b9c40"
+ },
+ {
+ "name": "second_place_medal",
+ "unicode": "1F948",
+ "digest": "9e2336fc16e532829b55380252f94655b58817d47c909fc2570002c5b06b9c40"
+ },
+ {
"name": "secret",
"unicode": "3299",
"digest": "1d0b9adde2657f41421b135962de20820cf4b4eb0204044f9859522ab9d211b0"
@@ -9205,16 +9655,61 @@
"digest": "c0ec5e6d20e1afdc4e78eeddb1301c8b708ad6278e7287a4e4e825417c858e75"
},
{
+ "name": "selfie",
+ "unicode": "1F933",
+ "digest": "2a1bc9f18ad4d6fb893d91c88ef1b2d9bd063dc2bb1a4b08c248c30f52545d4e"
+ },
+ {
+ "name": "selfie_tone1",
+ "unicode": "1F933-1F3FB",
+ "digest": "26dc212ffed30c276bd6a66a72bc4513e68098a2205fb4ca5b51ccfa1de5b544"
+ },
+ {
+ "name": "selfie_tone2",
+ "unicode": "1F933-1F3FC",
+ "digest": "71eceaefda46e3521f374f76693e7fa8f215067498067900080e2925ca94d7de"
+ },
+ {
+ "name": "selfie_tone3",
+ "unicode": "1F933-1F3FD",
+ "digest": "53eabbd4f6b8ebbd2f7af7bf5cd64309c4039ac1c5b2180290a547deaafcebdf"
+ },
+ {
+ "name": "selfie_tone4",
+ "unicode": "1F933-1F3FE",
+ "digest": "0baad378b09652b99c5d458db2e03b4db14a1557db4ea0969806a0ca1d33d40c"
+ },
+ {
+ "name": "selfie_tone5",
+ "unicode": "1F933-1F3FF",
+ "digest": "9a07608f34ec4dad48764a855f83f3965709d7b2fd2342e6dc9ed61f23f4adfd"
+ },
+ {
"name": "seven",
"unicode": "0037-20E3",
"digest": "ae85172d2c76c44afb4e3b45d277d400abb2dc895244b9abfbd1dac1cd7c53c2"
},
{
+ "name": "shallow_pan_of_food",
+ "unicode": "1F958",
+ "digest": "7c7ad9d5d3f7226427d310b5853e8257fad899febe58dcbc5adb4677964f5c6d"
+ },
+ {
+ "name": "paella",
+ "unicode": "1F958",
+ "digest": "7c7ad9d5d3f7226427d310b5853e8257fad899febe58dcbc5adb4677964f5c6d"
+ },
+ {
"name": "shamrock",
"unicode": "2618",
"digest": "68ed70c26e04a818439a1742d2da6bc169edd02db86b6e6f8014b651f3235488"
},
{
+ "name": "shark",
+ "unicode": "1F988",
+ "digest": "23a2364b6356e7bbb84c138e9cf58e2c68cd8caabb337a0c4d365ce87bf5d2da"
+ },
+ {
"name": "shaved_ice",
"unicode": "1F367",
"digest": "54048e77268b7548d03088517bf8558d11324db901ca57f9bec93f1873663a74"
@@ -9255,11 +9750,56 @@
"digest": "95a3f03c675207bb1354270d02a630c204455c47b3edca23c48523a40cf3ea3b"
},
{
+ "name": "shopping_cart",
+ "unicode": "1F6D2",
+ "digest": "4599b63f6861cdb4d8272cac84435c24c1d4d6a73c66d51e04a1cd14a1d333e6"
+ },
+ {
+ "name": "shopping_trolley",
+ "unicode": "1F6D2",
+ "digest": "4599b63f6861cdb4d8272cac84435c24c1d4d6a73c66d51e04a1cd14a1d333e6"
+ },
+ {
"name": "shower",
"unicode": "1F6BF",
"digest": "6b3c767c0eb472d4861c6c3cc2735a5e2c09681872ef42a11dc89f3c80b9da01"
},
{
+ "name": "shrimp",
+ "unicode": "1F990",
+ "digest": "b3651f3be3767125076a013fe903854f5b456a8afae865cb219cf528e0f44caa"
+ },
+ {
+ "name": "shrug",
+ "unicode": "1F937",
+ "digest": "6e264243cc3b6e396069dea4357a958bdcd4081cb1af0ed6aa47235bef88cf27"
+ },
+ {
+ "name": "shrug_tone1",
+ "unicode": "1F937-1F3FB",
+ "digest": "0567b9fd95c8a857914003a5465a500ca79c8111811d45b865021b1b1d92d0b1"
+ },
+ {
+ "name": "shrug_tone2",
+ "unicode": "1F937-1F3FC",
+ "digest": "1557c2f5e3d4599c806d74c0b78afcca940678787534b6862bb89a20601bac8a"
+ },
+ {
+ "name": "shrug_tone3",
+ "unicode": "1F937-1F3FD",
+ "digest": "f02754541a7bf74ba7eebe6c27daf1e3e1dac25172c35b8ba45641e278dfda3d"
+ },
+ {
+ "name": "shrug_tone4",
+ "unicode": "1F937-1F3FE",
+ "digest": "2b5121164cb5f4e253d8fb31f6445cf8afaf30dba41732edc511440cdb78d15c"
+ },
+ {
+ "name": "shrug_tone5",
+ "unicode": "1F937-1F3FF",
+ "digest": "62d99a26bbad479f574f66208c41b9960cd41fb9d79d3a13fbdaa44682077115"
+ },
+ {
"name": "signal_strength",
"unicode": "1F4F6",
"digest": "2c6f04ba4ecd2d2d423e19eb52cfbfd253f4db6e0908d91c1af4ea6192597447"
@@ -9415,6 +9955,16 @@
"digest": "18da2d97c771149ef5454dd23470e900903a62ab93f9e2ce301aad5a8181d773"
},
{
+ "name": "sneezing_face",
+ "unicode": "1F927",
+ "digest": "c20ef571dc7e35572fe3c18b7845aefc89af083ea925c48a29de3b7387af6e17"
+ },
+ {
+ "name": "sneeze",
+ "unicode": "1F927",
+ "digest": "c20ef571dc7e35572fe3c18b7845aefc89af083ea925c48a29de3b7387af6e17"
+ },
+ {
"name": "snowboarder",
"unicode": "1F3C2",
"digest": "c6e074139b851aa53b1ba6464d84da14b3da7412fc44c6c196a8469d76915c19"
@@ -9520,46 +10070,6 @@
"digest": "817100d9979456e7d2f253ac22e13b7a2302dc1590566214915b003e403c53ca"
},
{
- "name": "speech_left",
- "unicode": "1F5E8",
- "digest": "912797107d574f5665411498b6e349dbdec69846f085b6dc356548c4155e90b0"
- },
- {
- "name": "left_speech_bubble",
- "unicode": "1F5E8",
- "digest": "912797107d574f5665411498b6e349dbdec69846f085b6dc356548c4155e90b0"
- },
- {
- "name": "speech_right",
- "unicode": "1F5E9",
- "digest": "8439b13779163c15e678a78b08ebeeb7d131632df21d2a7868de7fed38ca9d8a"
- },
- {
- "name": "right_speech_bubble",
- "unicode": "1F5E9",
- "digest": "8439b13779163c15e678a78b08ebeeb7d131632df21d2a7868de7fed38ca9d8a"
- },
- {
- "name": "speech_three",
- "unicode": "1F5EB",
- "digest": "55a934f3659b6e75fdce0d0c4e2ea56dd34a43892c85a6666bd1882a0bfb92a9"
- },
- {
- "name": "three_speech_bubbles",
- "unicode": "1F5EB",
- "digest": "55a934f3659b6e75fdce0d0c4e2ea56dd34a43892c85a6666bd1882a0bfb92a9"
- },
- {
- "name": "speech_two",
- "unicode": "1F5EA",
- "digest": "0563ef0591da243673cf877462acc5d8e1d980a56e81668ac627de74d0c33983"
- },
- {
- "name": "two_speech_bubbles",
- "unicode": "1F5EA",
- "digest": "0563ef0591da243673cf877462acc5d8e1d980a56e81668ac627de74d0c33983"
- },
- {
"name": "speedboat",
"unicode": "1F6A4",
"digest": "a523b2320f0b24be1e9fdbc1ff828e28d8fd9a64d51e5888ab453ef0bc9f0576"
@@ -9575,6 +10085,11 @@
"digest": "2434bdfbe56dcc4a43699dd59b638af431486b52fb1d6d685451f3b231b2be23"
},
{
+ "name": "spoon",
+ "unicode": "1F944",
+ "digest": "4fa31d59e5bffd2c45a8e01fcd5652e78a5691cbfa744e69882bc67173ddea05"
+ },
+ {
"name": "spy",
"unicode": "1F575",
"digest": "99fe3cdeff934726ee5855b0e401bf32570084aaad4eb10df837fd410ca742aa"
@@ -9635,6 +10150,11 @@
"digest": "ffc6fefd9a537124ebf0a9ddf387414dce1291335026064644f6cf9315591129"
},
{
+ "name": "squid",
+ "unicode": "1F991",
+ "digest": "65a1b318c2c506b9d26cfd8282a5cf9922109595c8d12e92c3f7481ac7c08c49"
+ },
+ {
"name": "stadium",
"unicode": "1F3DF",
"digest": "73bf955e767ba1518c9c92b2ba59a2aa1ec4b018652dffd97bcd74832a33789f"
@@ -9680,26 +10200,11 @@
"digest": "52ad0073f37b978faf3884fb193046f2b0614e1557bbcc9de1b020e42aff2dba"
},
{
- "name": "stereo",
- "unicode": "1F4FE",
- "digest": "1ce1f9a83867514b8351ad4fd80c46bba04ad67dfb9874e63d7296e1a21161a5"
- },
- {
- "name": "portable_stereo",
- "unicode": "1F4FE",
- "digest": "1ce1f9a83867514b8351ad4fd80c46bba04ad67dfb9874e63d7296e1a21161a5"
- },
- {
"name": "stew",
"unicode": "1F372",
"digest": "c16f61236db314ad8d9f2dd241ec1e15c8d64e5872cce93ec4d0996490dd39df"
},
{
- "name": "stock_chart",
- "unicode": "1F5E0",
- "digest": "4a0fbf54d19b0b5626f91c932a24e6ac12a65b4fc276d852ff4356c8c579d28a"
- },
- {
"name": "stop_button",
"unicode": "23F9",
"digest": "83f9d0da3ad845fef41b4e8336815d30e9c8f042ab2a8340894ade2f428fc98a"
@@ -9735,6 +10240,16 @@
"digest": "dbacd6428a2a2933212e6a4dc0c7f302177fb23b963626ccb26f27f91737f03d"
},
{
+ "name": "stuffed_flatbread",
+ "unicode": "1F959",
+ "digest": "9f841f2520640d69be4f20a3199023d5811842b28556b5e1152e5ec11f0fda07"
+ },
+ {
+ "name": "stuffed_pita",
+ "unicode": "1F959",
+ "digest": "9f841f2520640d69be4f20a3199023d5811842b28556b5e1152e5ec11f0fda07"
+ },
+ {
"name": "sun_with_face",
"unicode": "1F31E",
"digest": "7256ff5263006c64c03f1eb66e3ddb56d67d785d65dacc37aa886d0cd4be63be"
@@ -9910,31 +10425,11 @@
"digest": "3a53851e641f8ad938ce3597b1afca2ea63c9314ff81f62563b99937496a13d7"
},
{
- "name": "telephone_black",
- "unicode": "1F57F",
- "digest": "c3a42a653a91d90c6b668f678419d5438f2e546050914b841623e57107e805db"
- },
- {
- "name": "black_touchtone_telephone",
- "unicode": "1F57F",
- "digest": "c3a42a653a91d90c6b668f678419d5438f2e546050914b841623e57107e805db"
- },
- {
"name": "telephone_receiver",
"unicode": "1F4DE",
"digest": "1614d67f3d8814b0d75f39d55f9149e4d28ef57b343498625e62fcfff8365046"
},
{
- "name": "telephone_white",
- "unicode": "1F57E",
- "digest": "62a7e0e50c53e9f85eba51a92882e6064be05997910d3f7700e1e957dbaf0581"
- },
- {
- "name": "white_touchtone_telephone",
- "unicode": "1F57E",
- "digest": "62a7e0e50c53e9f85eba51a92882e6064be05997910d3f7700e1e957dbaf0581"
- },
- {
"name": "telescope",
"unicode": "1F52D",
"digest": "4adf40387870276c4f59fb050d441023e8dac784365b6a8c0282fb519780b495"
@@ -9980,29 +10475,19 @@
"digest": "4f0b84e5ab8a650cafb166e93688f0e9b31b9ade22a91035261ac90490edb9d3"
},
{
- "name": "thought_balloon",
- "unicode": "1F4AD",
- "digest": "bf59624560c333561d636aedf2c8827089e275895cf434974daaabb3d5cea46e"
- },
- {
- "name": "thought_left",
- "unicode": "1F5EC",
- "digest": "4fd591bf4318df73d1b17f434a449d8e95f49cca53a3d8f4d1ca983f3809ef46"
+ "name": "third_place",
+ "unicode": "1F949",
+ "digest": "27c9bcba44ad95bee30882cc0722e8b0a798206306655dd648e884447ed26808"
},
{
- "name": "left_thought_bubble",
- "unicode": "1F5EC",
- "digest": "4fd591bf4318df73d1b17f434a449d8e95f49cca53a3d8f4d1ca983f3809ef46"
+ "name": "third_place_medal",
+ "unicode": "1F949",
+ "digest": "27c9bcba44ad95bee30882cc0722e8b0a798206306655dd648e884447ed26808"
},
{
- "name": "thought_right",
- "unicode": "1F5ED",
- "digest": "0e8c0ce26e2d0e30894f5394b0736456e8268f775e0e7eda4c7dc3c2ff9231ae"
- },
- {
- "name": "right_thought_bubble",
- "unicode": "1F5ED",
- "digest": "0e8c0ce26e2d0e30894f5394b0736456e8268f775e0e7eda4c7dc3c2ff9231ae"
+ "name": "thought_balloon",
+ "unicode": "1F4AD",
+ "digest": "bf59624560c333561d636aedf2c8827089e275895cf434974daaabb3d5cea46e"
},
{
"name": "three",
@@ -10010,26 +10495,6 @@
"digest": "d3f85828787799c769655c38a519cad0743ab799ab276c7606e6e6894cc442e6"
},
{
- "name": "thumbs_down_reverse",
- "unicode": "1F593",
- "digest": "a8b561e389bc4e4b07fba70994f6445e5ddc6afe68922fcb6e9e7282d19ad958"
- },
- {
- "name": "reversed_thumbs_down_sign",
- "unicode": "1F593",
- "digest": "a8b561e389bc4e4b07fba70994f6445e5ddc6afe68922fcb6e9e7282d19ad958"
- },
- {
- "name": "thumbs_up_reverse",
- "unicode": "1F592",
- "digest": "b6e52715c5ce590bfd08f6e05058ec3765ea2da341b11f9825d100608b173837"
- },
- {
- "name": "reversed_thumbs_up_sign",
- "unicode": "1F592",
- "digest": "b6e52715c5ce590bfd08f6e05058ec3765ea2da341b11f9825d100608b173837"
- },
- {
"name": "thumbsdown",
"unicode": "1F44E",
"digest": "5954334e2dae5357312b3d629f10a496c728029e02216f8c8b887f9b51561c61"
@@ -10315,31 +10780,11 @@
"digest": "06e65d549e771632f3c64287a38ba67236f9800ccb6a23c3b592bc010e24e122"
},
{
- "name": "train_diesel",
- "unicode": "1F6F2",
- "digest": "621bb967cd93fa9f8fd4b155965cc7572d3f91f88d94938ba10c8626718b623c"
- },
- {
- "name": "diesel_locomotive",
- "unicode": "1F6F2",
- "digest": "621bb967cd93fa9f8fd4b155965cc7572d3f91f88d94938ba10c8626718b623c"
- },
- {
"name": "tram",
"unicode": "1F68A",
"digest": "21a7699f1a94f06dcb4d1e896448b98a4205f8efe902a8ac169a5005d11ab100"
},
{
- "name": "triangle_round",
- "unicode": "1F6C6",
- "digest": "e24bb39ecfaaa746b03dc8418697d09ef327d5b077db39014f39d5fb87e23bd5"
- },
- {
- "name": "triangle_with_rounded_corners",
- "unicode": "1F6C6",
- "digest": "e24bb39ecfaaa746b03dc8418697d09ef327d5b077db39014f39d5fb87e23bd5"
- },
- {
"name": "triangular_flag_on_post",
"unicode": "1F6A9",
"digest": "1f5ce3828a42f5b1717bac1521d0502cf7081ad9f15e8ed292c1a65f0d1386da"
@@ -10395,19 +10840,19 @@
"digest": "e744e8dbbdc6b126bd5b15aad56b524191de5a604189f4ab6d96730dfef4d086"
},
{
- "name": "turkey",
- "unicode": "1F983",
- "digest": "bf5daef15716b66636a5fdb6d059420521443c0603e2d56bd7c99c791a7285f4"
+ "name": "tumbler_glass",
+ "unicode": "1F943",
+ "digest": "7a38658274b9ff28836725a1dbfad49b8fa3af5ec8385e629db6bfdc7d93907a"
},
{
- "name": "turned_ok_hand",
- "unicode": "1F58F",
- "digest": "8a6c5b7d4c737866e7e32c6d9f7f447a48a0ac57a8909d43f87367d4a9b59246"
+ "name": "whisky",
+ "unicode": "1F943",
+ "digest": "7a38658274b9ff28836725a1dbfad49b8fa3af5ec8385e629db6bfdc7d93907a"
},
{
- "name": "turned_ok_hand_sign",
- "unicode": "1F58F",
- "digest": "8a6c5b7d4c737866e7e32c6d9f7f447a48a0ac57a8909d43f87367d4a9b59246"
+ "name": "turkey",
+ "unicode": "1F983",
+ "digest": "bf5daef15716b66636a5fdb6d059420521443c0603e2d56bd7c99c791a7285f4"
},
{
"name": "turtle",
@@ -10760,6 +11205,36 @@
"digest": "ba6a840d4f57f8f9f3e9f29b8a030faf02a3a3d912e3e31b067616b2ac48a3d1"
},
{
+ "name": "water_polo",
+ "unicode": "1F93D",
+ "digest": "fc77e1d2a84a9f4cf0cf19c1ea10cf137cf0940b9103a523121eda87677ad148"
+ },
+ {
+ "name": "water_polo_tone1",
+ "unicode": "1F93D-1F3FB",
+ "digest": "3be28384edd29ada8109f07720d601a9d5866ed63e6234efe9ee1a194ed5d0c5"
+ },
+ {
+ "name": "water_polo_tone2",
+ "unicode": "1F93D-1F3FC",
+ "digest": "afcd3f28c6719f869ca79a6fd1ccade2ea976ade844fbc1081fc72865bcb652f"
+ },
+ {
+ "name": "water_polo_tone3",
+ "unicode": "1F93D-1F3FD",
+ "digest": "d19481c9b82d9413e99c2652e020fd763f2b54408dedaffec8dfe80973ded407"
+ },
+ {
+ "name": "water_polo_tone4",
+ "unicode": "1F93D-1F3FE",
+ "digest": "375972d882b627e8d525e632e58b30346fc3e01858d7d08d62a9d3bf8132bbc7"
+ },
+ {
+ "name": "water_polo_tone5",
+ "unicode": "1F93D-1F3FF",
+ "digest": "a8e1ced1c5382a8147a1d1801a133cada9a0e52e41de6272e56c3c1f426f6048"
+ },
+ {
"name": "watermelon",
"unicode": "1F349",
"digest": "42a3821d2e4dd595c93f5db7a5c70b7af486b8f0ddd3b9d26bc4e743a88e699a"
@@ -10915,6 +11390,16 @@
"digest": "0a6164cdadf2413555b7ef47b95f823f5a010f36d2dacfb1a38335a0f59e9601"
},
{
+ "name": "wilted_rose",
+ "unicode": "1F940",
+ "digest": "2c9e01ab9a61d057c71478b09ba7d82ae08f4a5a1c2212b7ad562b74f616677f"
+ },
+ {
+ "name": "wilted_flower",
+ "unicode": "1F940",
+ "digest": "2c9e01ab9a61d057c71478b09ba7d82ae08f4a5a1c2212b7ad562b74f616677f"
+ },
+ {
"name": "wind_blowing_face",
"unicode": "1F32C",
"digest": "e4f63149cbc8829118571f6a93487b96d26665fc15d17d578cca4e5c752cd54f"
@@ -10995,14 +11480,69 @@
"digest": "81aae53bc892035b905bf3ec5b442a8ecc95027c5fa9eb51b7c3e7d8fad3f3f4"
},
{
- "name": "writing_hand",
- "unicode": "1F58E",
- "digest": "c4fc18ece6778339ebe14438aaf570e22385c3010c2d341824fa72ac6068cfeb"
+ "name": "wrestlers",
+ "unicode": "1F93C",
+ "digest": "9be983f3f9438f3ab8f6b643a958371d1e710c6d78e728f3465141811f05c2d5"
+ },
+ {
+ "name": "wrestling",
+ "unicode": "1F93C",
+ "digest": "9be983f3f9438f3ab8f6b643a958371d1e710c6d78e728f3465141811f05c2d5"
},
{
- "name": "left_writing_hand",
- "unicode": "1F58E",
- "digest": "c4fc18ece6778339ebe14438aaf570e22385c3010c2d341824fa72ac6068cfeb"
+ "name": "wrestlers_tone1",
+ "unicode": "1F93C-1F3FB",
+ "digest": "60461f83bfc93ce59dd027eab4782b7f206a7b142719fa72f301e047dc83a5d9"
+ },
+ {
+ "name": "wrestling_tone1",
+ "unicode": "1F93C-1F3FB",
+ "digest": "60461f83bfc93ce59dd027eab4782b7f206a7b142719fa72f301e047dc83a5d9"
+ },
+ {
+ "name": "wrestlers_tone2",
+ "unicode": "1F93C-1F3FC",
+ "digest": "67ad93c86e6c58d552c18e7a0105cc81fd9bb0474da51f788eba2e4c14b4a636"
+ },
+ {
+ "name": "wrestling_tone2",
+ "unicode": "1F93C-1F3FC",
+ "digest": "67ad93c86e6c58d552c18e7a0105cc81fd9bb0474da51f788eba2e4c14b4a636"
+ },
+ {
+ "name": "wrestlers_tone3",
+ "unicode": "1F93C-1F3FD",
+ "digest": "6bfd06c4435cabf2def153912040e05bf8db424fa383148ddda6d0ce8a8a3349"
+ },
+ {
+ "name": "wrestling_tone3",
+ "unicode": "1F93C-1F3FD",
+ "digest": "6bfd06c4435cabf2def153912040e05bf8db424fa383148ddda6d0ce8a8a3349"
+ },
+ {
+ "name": "wrestlers_tone4",
+ "unicode": "1F93C-1F3FE",
+ "digest": "597312678834c4d288c238482879856d5eba4620deb1eaef495f428e2ba5f2a5"
+ },
+ {
+ "name": "wrestling_tone4",
+ "unicode": "1F93C-1F3FE",
+ "digest": "597312678834c4d288c238482879856d5eba4620deb1eaef495f428e2ba5f2a5"
+ },
+ {
+ "name": "wrestlers_tone5",
+ "unicode": "1F93C-1F3FF",
+ "digest": "d6aebdf1e44fd825b9a5b3716aefbc53f4b4dbb73cb2a628c0f2994ebfd34614"
+ },
+ {
+ "name": "wrestling_tone5",
+ "unicode": "1F93C-1F3FF",
+ "digest": "d6aebdf1e44fd825b9a5b3716aefbc53f4b4dbb73cb2a628c0f2994ebfd34614"
+ },
+ {
+ "name": "writing_hand",
+ "unicode": "270D",
+ "digest": "110517ae4da5587e8b0662881658e27da4120bfacec54734fd6657831d4d782f"
},
{
"name": "writing_hand_tone1",
diff --git a/fixtures/emojis/index.json b/fixtures/emojis/index.json
index 7f204c1a8e0..2a990913b9c 100644
--- a/fixtures/emojis/index.json
+++ b/fixtures/emojis/index.json
@@ -4,7 +4,7 @@
"unicode_alternates": [],
"name": "hundred points symbol",
"shortname": ":100:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15,12 +15,14 @@
"percent",
"a",
"plus",
- "perfect",
"school",
"quiz",
- "score",
"test",
- "exam"
+ "exam",
+ "symbol",
+ "wow",
+ "win",
+ "parties"
],
"moji": "💯"
},
@@ -29,12 +31,13 @@
"unicode_alternates": [],
"name": "input symbol for numbers",
"shortname": ":1234:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "numbers"
+ "numbers",
+ "symbol"
],
"moji": "🔢"
},
@@ -43,16 +46,20 @@
"unicode_alternates": [],
"name": "billiards",
"shortname": ":8ball:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"pool",
"billiards",
"eight ball",
- "pool",
"pocket ball",
- "cue"
+ "cue",
+ "game",
+ "ball",
+ "sport",
+ "luck",
+ "boys night"
],
"moji": "🎱"
},
@@ -61,13 +68,14 @@
"unicode_alternates": [],
"name": "negative squared latin capital letter a",
"shortname": ":a:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"letter",
- "red-square"
+ "red-square",
+ "symbol"
],
"moji": "🅰"
},
@@ -76,12 +84,13 @@
"unicode_alternates": [],
"name": "negative squared ab",
"shortname": ":ab:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
- "red-square"
+ "red-square",
+ "symbol"
],
"moji": "🆎"
},
@@ -90,12 +99,13 @@
"unicode_alternates": [],
"name": "input symbol for latin letters",
"shortname": ":abc:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "🔤"
},
@@ -104,12 +114,13 @@
"unicode_alternates": [],
"name": "input symbol for latin small letters",
"shortname": ":abcd:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "🔡"
},
@@ -118,7 +129,7 @@
"unicode_alternates": [],
"name": "circled ideograph accept",
"shortname": ":accept:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -127,7 +138,8 @@
"good",
"kanji",
"ok",
- "yes"
+ "yes",
+ "symbol"
],
"moji": "🉑"
},
@@ -136,7 +148,7 @@
"unicode_alternates": [],
"name": "aerial tramway",
"shortname": ":aerial_tramway:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -146,7 +158,9 @@
"tram",
"tramway",
"cable",
- "transport"
+ "transport",
+ "travel",
+ "train"
],
"moji": "🚡"
},
@@ -157,7 +171,7 @@
],
"name": "airplane",
"shortname": ":airplane:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -173,7 +187,8 @@
"jet",
"jumbo",
"boeing",
- "airbus"
+ "airbus",
+ "vacation"
],
"moji": "✈"
},
@@ -182,7 +197,7 @@
"unicode_alternates": [],
"name": "airplane arriving",
"shortname": ":airplane_arriving:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -197,15 +212,17 @@
"jet",
"jumbo",
"boeing",
- "airbus"
- ]
+ "airbus",
+ "vacation"
+ ],
+ "moji": "🛬"
},
"airplane_departure": {
"unicode": "1F6EB",
"unicode_alternates": [],
"name": "airplane departure",
"shortname": ":airplane_departure:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -221,30 +238,17 @@
"jumbo",
"boeing",
"airbus",
- "leaving"
- ]
- },
- "airplane_northeast": {
- "unicode": "1F6EA",
- "unicode_alternates": [],
- "name": "northeast-pointing airplane",
- "shortname": ":airplane_northeast:",
- "category": "travel_places",
- "aliases": [
- ":northeast_pointing_airplane:"
+ "leaving",
+ "vacation"
],
- "aliases_ascii": [],
- "keywords": [
- "plane",
- "travel"
- ]
+ "moji": "🛫"
},
"airplane_small": {
"unicode": "1F6E9",
"unicode_alternates": [],
"name": "small airplane",
"shortname": ":airplane_small:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":small_airplane:"
],
@@ -261,38 +265,10 @@
"jet",
"jumbo",
"boeing",
- "airbus"
- ]
- },
- "airplane_small_up": {
- "unicode": "1F6E8",
- "unicode_alternates": [],
- "name": "up-pointing small airplane",
- "shortname": ":airplane_small_up:",
- "category": "travel_places",
- "aliases": [
- ":up_pointing_small_airplane:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "plane",
- "travel"
- ]
- },
- "airplane_up": {
- "unicode": "1F6E7",
- "unicode_alternates": [],
- "name": "up-pointing airplane",
- "shortname": ":airplane_up:",
- "category": "travel_places",
- "aliases": [
- ":up_pointing_airplane:"
+ "airbus",
+ "vacation"
],
- "aliases_ascii": [],
- "keywords": [
- "plane",
- "travel"
- ]
+ "moji": "🛩"
},
"alarm_clock": {
"unicode": "23F0",
@@ -304,13 +280,14 @@
"aliases_ascii": [],
"keywords": [
"time",
- "wake"
+ "wake",
+ "object"
],
"moji": "⏰"
},
"alembic": {
"unicode": "2697",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "alembic",
"shortname": ":alembic:",
"category": "objects",
@@ -319,22 +296,27 @@
"keywords": [
"chemistry",
"object",
- "tool"
- ]
+ "tool",
+ "science"
+ ],
+ "moji": "⚗"
},
"alien": {
"unicode": "1F47D",
"unicode_alternates": [],
"name": "extraterrestrial alien",
"shortname": ":alien:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"UFO",
"paul",
"alien",
- "ufo"
+ "ufo",
+ "space",
+ "monster",
+ "scientology"
],
"moji": "👽"
},
@@ -343,7 +325,7 @@
"unicode_alternates": [],
"name": "ambulance",
"shortname": ":ambulance:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -353,19 +335,23 @@
"emergency",
"medical",
"help",
- "assistance"
+ "assistance",
+ "transportation"
],
"moji": "🚑"
},
"amphora": {
"unicode": "1F3FA",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "amphora",
"shortname": ":amphora:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "object"
+ ],
+ "moji": "🏺"
},
"anchor": {
"unicode": "2693",
@@ -374,21 +360,23 @@
],
"name": "anchor",
"shortname": ":anchor:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"ferry",
"ship",
"anchor",
- "ship",
"boat",
"ocean",
"harbor",
"marina",
"shipyard",
"sailor",
- "tattoo"
+ "tattoo",
+ "object",
+ "travel",
+ "vacation"
],
"moji": "⚓"
},
@@ -397,7 +385,7 @@
"unicode_alternates": [],
"name": "baby angel",
"shortname": ":angel:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -406,16 +394,17 @@
"halo",
"cupid",
"wings",
- "halo",
"heaven",
- "wings",
- "jesus"
+ "jesus",
+ "people",
+ "diversity",
+ "omg"
],
"moji": "👼"
},
"angel_tone1": {
"unicode": "1F47C-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby angel tone 1",
"shortname": ":angel_tone1:",
"category": "people",
@@ -427,11 +416,12 @@
"heaven",
"wings",
"jesus"
- ]
+ ],
+ "moji": "👼🏻"
},
"angel_tone2": {
"unicode": "1F47C-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby angel tone 2",
"shortname": ":angel_tone2:",
"category": "people",
@@ -443,11 +433,12 @@
"heaven",
"wings",
"jesus"
- ]
+ ],
+ "moji": "👼🏼"
},
"angel_tone3": {
"unicode": "1F47C-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby angel tone 3",
"shortname": ":angel_tone3:",
"category": "people",
@@ -459,11 +450,12 @@
"heaven",
"wings",
"jesus"
- ]
+ ],
+ "moji": "👼🏽"
},
"angel_tone4": {
"unicode": "1F47C-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby angel tone 4",
"shortname": ":angel_tone4:",
"category": "people",
@@ -475,11 +467,12 @@
"heaven",
"wings",
"jesus"
- ]
+ ],
+ "moji": "👼🏾"
},
"angel_tone5": {
"unicode": "1F47C-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby angel tone 5",
"shortname": ":angel_tone5:",
"category": "people",
@@ -491,50 +484,31 @@
"heaven",
"wings",
"jesus"
- ]
+ ],
+ "moji": "👼🏿"
},
"anger": {
"unicode": "1F4A2",
"unicode_alternates": [],
"name": "anger symbol",
"shortname": ":anger:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"anger",
"angry",
- "mad"
+ "mad",
+ "symbol"
],
"moji": "💢"
},
- "anger_left": {
- "unicode": "1F5EE",
- "unicode_alternates": [],
- "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"
- ]
- },
"anger_right": {
"unicode": "1F5EF",
"unicode_alternates": [],
"name": "right anger bubble",
"shortname": ":anger_right:",
- "category": "objects_symbols",
+ "category": "symbols",
"aliases": [
":right_anger_bubble:"
],
@@ -547,15 +521,17 @@
"conversation",
"communication",
"comic",
- "angry"
- ]
+ "angry",
+ "symbol"
+ ],
+ "moji": "🗯"
},
"angry": {
"unicode": "1F620",
"unicode_alternates": [],
"name": "angry face",
"shortname": ":angry:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
">:(",
@@ -571,7 +547,8 @@
"annoyed",
"face",
"frustrated",
- "mad"
+ "smiley",
+ "emotion"
],
"moji": "😠"
},
@@ -580,7 +557,7 @@
"unicode_alternates": [],
"name": "anguished face",
"shortname": ":anguished:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -592,7 +569,11 @@
"ouch",
"misery",
"distress",
- "grief"
+ "grief",
+ "sad",
+ "smiley",
+ "surprised",
+ "emotion"
],
"moji": "😧"
},
@@ -609,8 +590,8 @@
"insect",
"ant",
"queen",
- "insect",
- "team"
+ "team",
+ "insects"
],
"moji": "🐜"
},
@@ -619,20 +600,21 @@
"unicode_alternates": [],
"name": "red apple",
"shortname": ":apple:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fruit",
"mac",
"apple",
- "fruit",
"electronics",
"red",
"doctor",
"teacher",
"school",
- "core"
+ "core",
+ "food",
+ "creationism"
],
"moji": "🍎"
},
@@ -643,7 +625,7 @@
],
"name": "aquarius",
"shortname": ":aquarius:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -657,9 +639,8 @@
"zodiac",
"sign",
"purple-square",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♒"
},
@@ -670,7 +651,7 @@
],
"name": "aries",
"shortname": ":aries:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -683,9 +664,8 @@
"zodiac",
"sign",
"purple-square",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♈"
},
@@ -696,12 +676,14 @@
],
"name": "black left-pointing triangle",
"shortname": ":arrow_backward:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol",
+ "triangle"
],
"moji": "◀"
},
@@ -710,12 +692,13 @@
"unicode_alternates": [],
"name": "black down-pointing double triangle",
"shortname": ":arrow_double_down:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "⏬"
},
@@ -724,12 +707,13 @@
"unicode_alternates": [],
"name": "black up-pointing double triangle",
"shortname": ":arrow_double_up:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "⏫"
},
@@ -740,12 +724,13 @@
],
"name": "downwards black arrow",
"shortname": ":arrow_down:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "⬇"
},
@@ -754,12 +739,14 @@
"unicode_alternates": [],
"name": "down-pointing small red triangle",
"shortname": ":arrow_down_small:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol",
+ "triangle"
],
"moji": "🔽"
},
@@ -770,12 +757,14 @@
],
"name": "black right-pointing triangle",
"shortname": ":arrow_forward:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol",
+ "triangle"
],
"moji": "▶"
},
@@ -786,12 +775,13 @@
],
"name": "arrow pointing rightwards then curving downwards",
"shortname": ":arrow_heading_down:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "⤵"
},
@@ -802,12 +792,13 @@
],
"name": "arrow pointing rightwards then curving upwards",
"shortname": ":arrow_heading_up:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "⤴"
},
@@ -818,13 +809,14 @@
],
"name": "leftwards black arrow",
"shortname": ":arrow_left:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
"blue-square",
- "previous"
+ "previous",
+ "symbol"
],
"moji": "⬅"
},
@@ -835,12 +827,13 @@
],
"name": "south west arrow",
"shortname": ":arrow_lower_left:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "↙"
},
@@ -851,12 +844,13 @@
],
"name": "south east arrow",
"shortname": ":arrow_lower_right:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "↘"
},
@@ -867,12 +861,14 @@
],
"name": "black rightwards arrow",
"shortname": ":arrow_right:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "next"
+ "next",
+ "arrow",
+ "symbol"
],
"moji": "➡"
},
@@ -883,11 +879,13 @@
],
"name": "rightwards arrow with hook",
"shortname": ":arrow_right_hook:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "↪"
},
@@ -898,11 +896,13 @@
],
"name": "upwards black arrow",
"shortname": ":arrow_up:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "⬆"
},
@@ -913,11 +913,13 @@
],
"name": "up down arrow",
"shortname": ":arrow_up_down:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "↕"
},
@@ -926,11 +928,14 @@
"unicode_alternates": [],
"name": "up-pointing small red triangle",
"shortname": ":arrow_up_small:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol",
+ "triangle"
],
"moji": "🔼"
},
@@ -941,11 +946,13 @@
],
"name": "north west arrow",
"shortname": ":arrow_upper_left:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "↖"
},
@@ -956,11 +963,13 @@
],
"name": "north east arrow",
"shortname": ":arrow_upper_right:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "↗"
},
@@ -969,11 +978,13 @@
"unicode_alternates": [],
"name": "clockwise downwards and upwards open circle arrows",
"shortname": ":arrows_clockwise:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "sync"
+ "sync",
+ "arrow",
+ "symbol"
],
"moji": "🔃"
},
@@ -982,12 +993,14 @@
"unicode_alternates": [],
"name": "anticlockwise downwards and upwards open circle ar",
"shortname": ":arrows_counterclockwise:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "sync"
+ "sync",
+ "arrow",
+ "symbol"
],
"moji": "🔄"
},
@@ -996,7 +1009,7 @@
"unicode_alternates": [],
"name": "artist palette",
"shortname": ":art:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1007,8 +1020,6 @@
"palette",
"art",
"colors",
- "paint",
- "draw",
"brush",
"pastels",
"oils"
@@ -1020,7 +1031,7 @@
"unicode_alternates": [],
"name": "articulated lorry",
"shortname": ":articulated_lorry:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1035,24 +1046,11 @@
],
"moji": "🚛"
},
- "ascending_notes": {
- "unicode": "1F39C",
- "unicode_alternates": [],
- "name": "beamed ascending musical notes",
- "shortname": ":ascending_notes:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "score",
- "music",
- "sound",
- "tone"
- ]
- },
"asterisk": {
"unicode": "002A-20E3",
- "unicode_alternates": "002a-fe0f-20e3",
+ "unicode_alternates": [
+ "002A-FE0F-20E3"
+ ],
"name": "keycap asterisk",
"shortname": ":asterisk:",
"category": "symbols",
@@ -1064,14 +1062,15 @@
"*",
"star",
"symbol"
- ]
+ ],
+ "moji": "*⃣"
},
"astonished": {
"unicode": "1F632",
"unicode_alternates": [],
"name": "astonished face",
"shortname": ":astonished:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1079,7 +1078,12 @@
"xox",
"shocked",
"surprise",
- "astonished"
+ "astonished",
+ "smiley",
+ "surprised",
+ "wow",
+ "emotion",
+ "omg"
],
"moji": "😲"
},
@@ -1088,12 +1092,16 @@
"unicode_alternates": [],
"name": "athletic shoe",
"shortname": ":athletic_shoe:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"shoes",
- "sports"
+ "sports",
+ "fashion",
+ "shoe",
+ "accessories",
+ "boys night"
],
"moji": "👟"
},
@@ -1102,7 +1110,7 @@
"unicode_alternates": [],
"name": "automated teller machine",
"shortname": ":atm:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1115,17 +1123,16 @@
"bank",
"adam",
"payday",
- "bank",
"blue-square",
- "cash",
- "money",
- "payment"
+ "payment",
+ "electronics",
+ "symbol"
],
"moji": "🏧"
},
"atom": {
"unicode": "269B",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "atom symbol",
"shortname": ":atom:",
"category": "symbols",
@@ -1134,21 +1141,36 @@
],
"aliases_ascii": [],
"keywords": [
- "atheist"
- ]
+ "atheist",
+ "symbol",
+ "science"
+ ],
+ "moji": "⚛"
+ },
+ "avocado": {
+ "unicode": "1F951",
+ "unicode_alternates": [],
+ "name": "avocado",
+ "shortname": ":avocado:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥑"
},
"b": {
"unicode": "1F171",
"unicode_alternates": [],
"name": "negative squared latin capital letter b",
"shortname": ":b:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"letter",
- "red-square"
+ "red-square",
+ "symbol"
],
"moji": "🅱"
},
@@ -1157,13 +1179,16 @@
"unicode_alternates": [],
"name": "baby",
"shortname": ":baby:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"boy",
"child",
- "infant"
+ "infant",
+ "people",
+ "baby",
+ "diversity"
],
"moji": "👶"
},
@@ -1172,7 +1197,7 @@
"unicode_alternates": [],
"name": "baby bottle",
"shortname": ":baby_bottle:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1184,7 +1209,9 @@
"mother",
"nipple",
"newborn",
- "formula"
+ "formula",
+ "drink",
+ "object"
],
"moji": "🍼"
},
@@ -1202,7 +1229,6 @@
"chick",
"baby",
"bird",
- "chicken",
"young",
"woman",
"cute"
@@ -1214,7 +1240,7 @@
"unicode_alternates": [],
"name": "baby symbol",
"shortname": ":baby_symbol:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1226,13 +1252,14 @@
"human",
"diaper",
"small",
- "babe"
+ "babe",
+ "symbol"
],
"moji": "🚼"
},
"baby_tone1": {
"unicode": "1F476-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby tone 1",
"shortname": ":baby_tone1:",
"category": "people",
@@ -1242,11 +1269,12 @@
"child",
"infant",
"toddler"
- ]
+ ],
+ "moji": "👶🏻"
},
"baby_tone2": {
"unicode": "1F476-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby tone 2",
"shortname": ":baby_tone2:",
"category": "people",
@@ -1256,11 +1284,12 @@
"child",
"infant",
"toddler"
- ]
+ ],
+ "moji": "👶🏼"
},
"baby_tone3": {
"unicode": "1F476-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby tone 3",
"shortname": ":baby_tone3:",
"category": "people",
@@ -1270,11 +1299,12 @@
"child",
"infant",
"toddler"
- ]
+ ],
+ "moji": "👶🏽"
},
"baby_tone4": {
"unicode": "1F476-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby tone 4",
"shortname": ":baby_tone4:",
"category": "people",
@@ -1284,11 +1314,12 @@
"child",
"infant",
"toddler"
- ]
+ ],
+ "moji": "👶🏾"
},
"baby_tone5": {
"unicode": "1F476-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "baby tone 5",
"shortname": ":baby_tone5:",
"category": "people",
@@ -1298,37 +1329,57 @@
"child",
"infant",
"toddler"
- ]
+ ],
+ "moji": "👶🏿"
},
"back": {
"unicode": "1F519",
"unicode_alternates": [],
"name": "back with leftwards arrow above",
"shortname": ":back:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "arrow"
+ "arrow",
+ "symbol"
],
"moji": "🔙"
},
+ "bacon": {
+ "unicode": "1F953",
+ "unicode_alternates": [],
+ "name": "bacon",
+ "shortname": ":bacon:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "pig"
+ ],
+ "moji": "🥓"
+ },
"badminton": {
"unicode": "1F3F8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "badminton racquet",
"shortname": ":badminton:",
"category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "game",
+ "sport",
+ "badminton"
+ ],
+ "moji": "🏸"
},
"baggage_claim": {
"unicode": "1F6C4",
"unicode_alternates": [],
"name": "baggage claim",
"shortname": ":baggage_claim:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1338,7 +1389,8 @@
"bag",
"baggage",
"luggage",
- "travel"
+ "travel",
+ "symbol"
],
"moji": "🛄"
},
@@ -1355,11 +1407,13 @@
"party",
"balloon",
"birthday",
- "celebration",
"helium",
"gas",
"children",
- "float"
+ "float",
+ "object",
+ "good",
+ "parties"
],
"moji": "🎈"
},
@@ -1368,29 +1422,17 @@
"unicode_alternates": [],
"name": "ballot box with ballot",
"shortname": ":ballot_box:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":ballot_box_with_ballot:"
],
"aliases_ascii": [],
"keywords": [
- "vote"
- ]
- },
- "ballot_box_check": {
- "unicode": "1F5F9",
- "unicode_alternates": [],
- "name": "ballot box with bold check",
- "shortname": ":ballot_box_check:",
- "category": "objects_symbols",
- "aliases": [
- ":ballot_box_with_bold_check:"
+ "vote",
+ "object",
+ "office"
],
- "aliases_ascii": [],
- "keywords": [
- "mark",
- "vote"
- ]
+ "moji": "🗳"
},
"ballot_box_with_check": {
"unicode": "2611",
@@ -1399,51 +1441,22 @@
],
"name": "ballot box with check",
"shortname": ":ballot_box_with_check:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"agree",
- "ok"
+ "ok",
+ "symbol"
],
"moji": "☑"
},
- "ballot_box_x": {
- "unicode": "1F5F5",
- "unicode_alternates": [],
- "name": "ballot box with script x",
- "shortname": ":ballot_box_x:",
- "category": "objects_symbols",
- "aliases": [
- ":ballot_box_with_script_x:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mark",
- "vote"
- ]
- },
- "ballot_x": {
- "unicode": "1F5F4",
- "unicode_alternates": [],
- "name": "ballot script x",
- "shortname": ":ballot_x:",
- "category": "objects_symbols",
- "aliases": [
- ":ballot_script_x:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "mark",
- "vote"
- ]
- },
"bamboo": {
"unicode": "1F38D",
"unicode_alternates": [],
"name": "pine decoration",
"shortname": ":bamboo:",
- "category": "objects",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1472,7 +1485,7 @@
"unicode_alternates": [],
"name": "banana",
"shortname": ":banana:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1480,7 +1493,8 @@
"fruit",
"banana",
"peel",
- "bunch"
+ "bunch",
+ "penis"
],
"moji": "🍌"
},
@@ -1491,12 +1505,14 @@
],
"name": "double exclamation mark",
"shortname": ":bangbang:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"exclamation",
- "surprise"
+ "surprise",
+ "symbol",
+ "punctuation"
],
"moji": "‼"
},
@@ -1505,11 +1521,12 @@
"unicode_alternates": [],
"name": "bank",
"shortname": ":bank:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "building"
+ "building",
+ "places"
],
"moji": "🏦"
},
@@ -1524,7 +1541,9 @@
"keywords": [
"graph",
"presentation",
- "stats"
+ "stats",
+ "work",
+ "office"
],
"moji": "📊"
},
@@ -1533,13 +1552,14 @@
"unicode_alternates": [],
"name": "barber pole",
"shortname": ":barber:",
- "category": "places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"hair",
"salon",
- "style"
+ "style",
+ "object"
],
"moji": "💈"
},
@@ -1550,13 +1570,17 @@
],
"name": "baseball",
"shortname": ":baseball:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"MLB",
"balls",
- "sports"
+ "sports",
+ "game",
+ "ball",
+ "sport",
+ "baseball"
],
"moji": "⚾"
},
@@ -1565,7 +1589,7 @@
"unicode_alternates": [],
"name": "basketball and hoop",
"shortname": ":basketball:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1578,13 +1602,16 @@
"hoop",
"net",
"swish",
- "rip city"
+ "rip city",
+ "game",
+ "ball",
+ "sport"
],
"moji": "🏀"
},
"basketball_player": {
"unicode": "26F9",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with ball",
"shortname": ":basketball_player:",
"category": "activity",
@@ -1594,12 +1621,18 @@
"aliases_ascii": [],
"keywords": [
"sport",
- "travel"
- ]
+ "travel",
+ "men",
+ "game",
+ "ball",
+ "basketball",
+ "diversity"
+ ],
+ "moji": "⛹"
},
"basketball_player_tone1": {
"unicode": "26F9-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with ball tone 1",
"shortname": ":basketball_player_tone1:",
"category": "activity",
@@ -1607,11 +1640,19 @@
":person_with_ball_tone1:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "sport",
+ "travel",
+ "men",
+ "game",
+ "ball",
+ "basketball"
+ ],
+ "moji": "⛹🏻"
},
"basketball_player_tone2": {
"unicode": "26F9-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with ball tone 2",
"shortname": ":basketball_player_tone2:",
"category": "activity",
@@ -1619,11 +1660,19 @@
":person_with_ball_tone2:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "sport",
+ "travel",
+ "men",
+ "game",
+ "ball",
+ "basketball"
+ ],
+ "moji": "⛹🏼"
},
"basketball_player_tone3": {
"unicode": "26F9-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with ball tone 3",
"shortname": ":basketball_player_tone3:",
"category": "activity",
@@ -1631,11 +1680,19 @@
":person_with_ball_tone3:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "sport",
+ "travel",
+ "men",
+ "game",
+ "ball",
+ "basketball"
+ ],
+ "moji": "⛹🏽"
},
"basketball_player_tone4": {
"unicode": "26F9-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with ball tone 4",
"shortname": ":basketball_player_tone4:",
"category": "activity",
@@ -1643,11 +1700,19 @@
":person_with_ball_tone4:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "sport",
+ "travel",
+ "men",
+ "game",
+ "ball",
+ "basketball"
+ ],
+ "moji": "⛹🏾"
},
"basketball_player_tone5": {
"unicode": "26F9-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with ball tone 5",
"shortname": ":basketball_player_tone5:",
"category": "activity",
@@ -1655,14 +1720,33 @@
":person_with_ball_tone5:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "sport",
+ "travel",
+ "men",
+ "game",
+ "ball",
+ "basketball"
+ ],
+ "moji": "⛹🏿"
+ },
+ "bat": {
+ "unicode": "1F987",
+ "unicode_alternates": [],
+ "name": "bat",
+ "shortname": ":bat:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦇"
},
"bath": {
"unicode": "1F6C0",
"unicode_alternates": [],
"name": "bath",
"shortname": ":bath:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1677,16 +1761,17 @@
"bathroom",
"soap",
"water",
- "clean",
"shampoo",
"lather",
- "water"
+ "tired",
+ "diversity",
+ "steam"
],
"moji": "🛀"
},
"bath_tone1": {
"unicode": "1F6C0-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bath tone 1",
"shortname": ":bath_tone1:",
"category": "activity",
@@ -1705,11 +1790,12 @@
"clean",
"shampoo",
"lather"
- ]
+ ],
+ "moji": "🛀🏻"
},
"bath_tone2": {
"unicode": "1F6C0-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bath tone 2",
"shortname": ":bath_tone2:",
"category": "activity",
@@ -1728,11 +1814,12 @@
"clean",
"shampoo",
"lather"
- ]
+ ],
+ "moji": "🛀🏼"
},
"bath_tone3": {
"unicode": "1F6C0-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bath tone 3",
"shortname": ":bath_tone3:",
"category": "activity",
@@ -1751,11 +1838,12 @@
"clean",
"shampoo",
"lather"
- ]
+ ],
+ "moji": "🛀🏽"
},
"bath_tone4": {
"unicode": "1F6C0-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bath tone 4",
"shortname": ":bath_tone4:",
"category": "activity",
@@ -1774,11 +1862,12 @@
"clean",
"shampoo",
"lather"
- ]
+ ],
+ "moji": "🛀🏾"
},
"bath_tone5": {
"unicode": "1F6C0-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bath tone 5",
"shortname": ":bath_tone5:",
"category": "activity",
@@ -1797,7 +1886,8 @@
"clean",
"shampoo",
"lather"
- ]
+ ],
+ "moji": "🛀🏿"
},
"bathtub": {
"unicode": "1F6C1",
@@ -1819,10 +1909,11 @@
"bathroom",
"soap",
"water",
- "clean",
"shampoo",
"lather",
- "water"
+ "object",
+ "tired",
+ "steam"
],
"moji": "🛁"
},
@@ -1837,7 +1928,8 @@
"keywords": [
"energy",
"power",
- "sustain"
+ "sustain",
+ "object"
],
"moji": "🔋"
},
@@ -1846,7 +1938,7 @@
"unicode_alternates": [],
"name": "beach with umbrella",
"shortname": ":beach:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":beach_with_umbrella:"
],
@@ -1859,12 +1951,18 @@
"relaxation",
"tanning",
"tan",
- "swimming"
- ]
+ "swimming",
+ "places",
+ "travel",
+ "tropical",
+ "beach",
+ "swim"
+ ],
+ "moji": "🏖"
},
"beach_umbrella": {
"unicode": "26F1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "umbrella on ground",
"shortname": ":beach_umbrella:",
"category": "objects",
@@ -1877,8 +1975,11 @@
"rain",
"sun",
"travel",
- "weather"
- ]
+ "weather",
+ "vacation",
+ "tropical"
+ ],
+ "moji": "⛱"
},
"bear": {
"unicode": "1F43B",
@@ -1890,7 +1991,9 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife",
+ "roar"
],
"moji": "🐻"
},
@@ -1899,7 +2002,7 @@
"unicode_alternates": [],
"name": "bed",
"shortname": ":bed:",
- "category": "travel_places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1909,8 +2012,11 @@
"full",
"twin",
"king",
- "mattress"
- ]
+ "mattress",
+ "object",
+ "tired"
+ ],
+ "moji": "🛏"
},
"bee": {
"unicode": "1F41D",
@@ -1932,7 +2038,8 @@
"honey",
"hive",
"bumble",
- "pollination"
+ "pollination",
+ "insects"
],
"moji": "🐝"
},
@@ -1941,7 +2048,7 @@
"unicode_alternates": [],
"name": "beer mug",
"shortname": ":beer:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1962,7 +2069,9 @@
"brewery",
"micro",
"pint",
- "boot"
+ "boot",
+ "alcohol",
+ "parties"
],
"moji": "🍺"
},
@@ -1971,7 +2080,7 @@
"unicode_alternates": [],
"name": "clinking beer mugs",
"shortname": ":beers:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -1987,11 +2096,14 @@
"mug",
"toast",
"celebrate",
- "pub",
"bar",
"jolly",
"hops",
- "clink"
+ "clink",
+ "alcohol",
+ "thank you",
+ "boys night",
+ "parties"
],
"moji": "🍻"
},
@@ -2013,8 +2125,9 @@
"beetle",
"cow",
"lady cow",
- "insect",
- "endearment"
+ "endearment",
+ "insects",
+ "animal"
],
"moji": "🐞"
},
@@ -2023,12 +2136,13 @@
"unicode_alternates": [],
"name": "japanese symbol for beginner",
"shortname": ":beginner:",
- "category": "places",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"badge",
- "shield"
+ "shield",
+ "symbol"
],
"moji": "🔰"
},
@@ -2037,7 +2151,7 @@
"unicode_alternates": [],
"name": "bell",
"shortname": ":bell:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2045,7 +2159,10 @@
"christmas",
"notification",
"sound",
- "xmas"
+ "xmas",
+ "object",
+ "alarm",
+ "symbol"
],
"moji": "🔔"
},
@@ -2054,7 +2171,7 @@
"unicode_alternates": [],
"name": "bellhop bell",
"shortname": ":bellhop:",
- "category": "travel_places",
+ "category": "objects",
"aliases": [
":bellhop_bell:"
],
@@ -2062,15 +2179,17 @@
"keywords": [
"hotel",
"porter",
- "ding"
- ]
+ "ding",
+ "object"
+ ],
+ "moji": "🛎"
},
"bento": {
"unicode": "1F371",
"unicode_alternates": [],
"name": "bento box",
"shortname": ":bento:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2078,13 +2197,14 @@
"food",
"japanese",
"bento",
- "japanese",
"rice",
"meal",
- "box",
"obento",
"convenient",
- "lunchbox"
+ "lunchbox",
+ "object",
+ "sushi",
+ "japan"
],
"moji": "🍱"
},
@@ -2093,7 +2213,7 @@
"unicode_alternates": [],
"name": "bicyclist",
"shortname": ":bicyclist:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2103,16 +2223,19 @@
"sports",
"bicyclist",
"road",
- "bike",
"pedal",
"bicycle",
- "transportation"
+ "transportation",
+ "men",
+ "workout",
+ "sport",
+ "diversity"
],
"moji": "🚴"
},
"bicyclist_tone1": {
"unicode": "1F6B4-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bicyclist tone 1",
"shortname": ":bicyclist_tone1:",
"category": "activity",
@@ -2127,11 +2250,12 @@
"pedal",
"bicycle",
"transportation"
- ]
+ ],
+ "moji": "🚴🏻"
},
"bicyclist_tone2": {
"unicode": "1F6B4-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bicyclist tone 2",
"shortname": ":bicyclist_tone2:",
"category": "activity",
@@ -2146,11 +2270,12 @@
"pedal",
"bicycle",
"transportation"
- ]
+ ],
+ "moji": "🚴🏼"
},
"bicyclist_tone3": {
"unicode": "1F6B4-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bicyclist tone 3",
"shortname": ":bicyclist_tone3:",
"category": "activity",
@@ -2165,11 +2290,12 @@
"pedal",
"bicycle",
"transportation"
- ]
+ ],
+ "moji": "🚴🏽"
},
"bicyclist_tone4": {
"unicode": "1F6B4-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bicyclist tone 4",
"shortname": ":bicyclist_tone4:",
"category": "activity",
@@ -2184,11 +2310,12 @@
"pedal",
"bicycle",
"transportation"
- ]
+ ],
+ "moji": "🚴🏾"
},
"bicyclist_tone5": {
"unicode": "1F6B4-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bicyclist tone 5",
"shortname": ":bicyclist_tone5:",
"category": "activity",
@@ -2203,14 +2330,15 @@
"pedal",
"bicycle",
"transportation"
- ]
+ ],
+ "moji": "🚴🏿"
},
"bike": {
"unicode": "1F6B2",
"unicode_alternates": [],
"name": "bicycle",
"shortname": ":bike:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2220,8 +2348,8 @@
"sports",
"bike",
"pedal",
- "bicycle",
- "transportation"
+ "transportation",
+ "travel"
],
"moji": "🚲"
},
@@ -2230,7 +2358,7 @@
"unicode_alternates": [],
"name": "bikini",
"shortname": ":bikini:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2239,13 +2367,18 @@
"female",
"girl",
"swimming",
- "woman"
+ "woman",
+ "women",
+ "sexy",
+ "vacation",
+ "tropical",
+ "swim"
],
"moji": "👙"
},
"biohazard": {
"unicode": "2623",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "biohazard sign",
"shortname": ":biohazard:",
"category": "symbols",
@@ -2254,8 +2387,10 @@
],
"aliases_ascii": [],
"keywords": [
- "symbol"
- ]
+ "symbol",
+ "science"
+ ],
+ "moji": "☣"
},
"bird": {
"unicode": "1F426",
@@ -2269,7 +2404,8 @@
"animal",
"fly",
"nature",
- "tweet"
+ "tweet",
+ "wildlife"
],
"moji": "🐦"
},
@@ -2278,7 +2414,7 @@
"unicode_alternates": [],
"name": "birthday cake",
"shortname": ":birthday:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2286,10 +2422,11 @@
"party",
"birthday",
"birth",
- "cake",
"dessert",
"wish",
- "celebrate"
+ "celebrate",
+ "food",
+ "parties"
],
"moji": "🎂"
},
@@ -2300,26 +2437,42 @@
],
"name": "medium black circle",
"shortname": ":black_circle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "circle"
],
"moji": "⚫"
},
+ "black_heart": {
+ "unicode": "1F5A4",
+ "unicode_alternates": [],
+ "name": "black heart",
+ "shortname": ":black_heart:",
+ "category": "symbols",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🖤"
+ },
"black_joker": {
"unicode": "1F0CF",
"unicode_alternates": [],
"name": "playing card black joker",
"shortname": ":black_joker:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cards",
"game",
- "poker"
+ "poker",
+ "object",
+ "symbol"
],
"moji": "🃏"
},
@@ -2330,11 +2483,14 @@
],
"name": "black large square",
"shortname": ":black_large_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "⬛"
},
@@ -2345,10 +2501,14 @@
],
"name": "black medium small square",
"shortname": ":black_medium_small_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "shapes",
+ "symbol",
+ "square"
+ ],
"moji": "◾"
},
"black_medium_square": {
@@ -2358,11 +2518,14 @@
],
"name": "black medium square",
"shortname": ":black_medium_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "◼"
},
@@ -2378,7 +2541,10 @@
"aliases_ascii": [],
"keywords": [
"pen",
- "stationery"
+ "stationery",
+ "object",
+ "office",
+ "write"
],
"moji": "✒"
},
@@ -2389,10 +2555,14 @@
],
"name": "black small square",
"shortname": ":black_small_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "shapes",
+ "symbol",
+ "square"
+ ],
"moji": "▪"
},
"black_square_button": {
@@ -2400,11 +2570,14 @@
"unicode_alternates": [],
"name": "black square button",
"shortname": ":black_square_button:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "frame"
+ "frame",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "🔲"
},
@@ -2422,7 +2595,8 @@
"yellow",
"blossom",
"daisy",
- "flower"
+ "flower",
+ "plant"
],
"moji": "🌼"
},
@@ -2445,7 +2619,9 @@
"ballonfish",
"toadfish",
"fugu fish",
- "sushi"
+ "sushi",
+ "wildlife",
+ "animal"
],
"moji": "🐡"
},
@@ -2460,7 +2636,11 @@
"keywords": [
"knowledge",
"library",
- "read"
+ "read",
+ "object",
+ "office",
+ "write",
+ "book"
],
"moji": "📘"
},
@@ -2469,15 +2649,16 @@
"unicode_alternates": [],
"name": "recreational vehicle",
"shortname": ":blue_car:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"car",
"suv",
- "car",
"wagon",
- "automobile"
+ "automobile",
+ "transportation",
+ "travel"
],
"moji": "🚙"
},
@@ -2486,7 +2667,7 @@
"unicode_alternates": [],
"name": "blue heart",
"shortname": ":blue_heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2496,11 +2677,11 @@
"valentines",
"blue",
"heart",
- "love",
"stability",
"truth",
"loyalty",
- "trust"
+ "trust",
+ "symbol"
],
"moji": "💙"
},
@@ -2509,7 +2690,7 @@
"unicode_alternates": [],
"name": "smiling face with smiling eyes",
"shortname": ":blush:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2521,8 +2702,10 @@
"shy",
"smile",
"smiling",
- "smile",
- "smiley"
+ "smiley",
+ "emotion",
+ "good",
+ "beautiful"
],
"moji": "😊"
},
@@ -2536,7 +2719,8 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife"
],
"moji": "🐗"
},
@@ -2550,7 +2734,11 @@
"aliases_ascii": [],
"keywords": [
"boom",
- "explode"
+ "explode",
+ "object",
+ "weapon",
+ "dead",
+ "blast"
],
"moji": "💣"
},
@@ -2564,26 +2752,14 @@
"aliases_ascii": [],
"keywords": [
"library",
- "literature"
+ "literature",
+ "object",
+ "office",
+ "write",
+ "book"
],
"moji": "📖"
},
- "book2": {
- "unicode": "1F56E",
- "unicode_alternates": [],
- "name": "book",
- "shortname": ":book2:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "library",
- "literature",
- "novel",
- "reading",
- "story"
- ]
- },
"bookmark": {
"unicode": "1F516",
"unicode_alternates": [],
@@ -2593,7 +2769,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "favorite"
+ "favorite",
+ "object",
+ "book"
],
"moji": "🔖"
},
@@ -2606,7 +2784,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "favorite"
+ "favorite",
+ "office",
+ "write"
],
"moji": "📑"
},
@@ -2620,7 +2800,11 @@
"aliases_ascii": [],
"keywords": [
"library",
- "literature"
+ "literature",
+ "object",
+ "office",
+ "write",
+ "book"
],
"moji": "📚"
},
@@ -2629,7 +2813,7 @@
"unicode_alternates": [],
"name": "collision symbol",
"shortname": ":boom:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2642,7 +2826,9 @@
"fire",
"emphasis",
"wow",
- "bam"
+ "bam",
+ "symbol",
+ "blast"
],
"moji": "💥"
},
@@ -2651,12 +2837,16 @@
"unicode_alternates": [],
"name": "womans boots",
"shortname": ":boot:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fashion",
- "shoes"
+ "shoes",
+ "women",
+ "shoe",
+ "sexy",
+ "accessories"
],
"moji": "👢"
},
@@ -2670,33 +2860,20 @@
"aliases_ascii": [],
"keywords": [
"flowers",
- "nature"
+ "nature",
+ "flower",
+ "plant",
+ "rip",
+ "condolence"
],
"moji": "💐"
},
- "bouquet2": {
- "unicode": "1F395",
- "unicode_alternates": [],
- "name": "bouquet of flowers",
- "shortname": ":bouquet2:",
- "category": "celebration",
- "aliases": [
- ":bouquet_of_flowers:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "nature",
- "marriage",
- "wedding",
- "bride"
- ]
- },
"bow": {
"unicode": "1F647",
"unicode_alternates": [],
"name": "person bowing deeply",
"shortname": ":bow:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2707,13 +2884,16 @@
"bow",
"respect",
"curtsy",
- "bend"
+ "bend",
+ "people",
+ "pray",
+ "diversity"
],
"moji": "🙇"
},
"bow_and_arrow": {
"unicode": "1F3F9",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bow and arrow",
"shortname": ":bow_and_arrow:",
"category": "activity",
@@ -2721,11 +2901,15 @@
":archery:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "weapon",
+ "sport"
+ ],
+ "moji": "🏹"
},
"bow_tone1": {
"unicode": "1F647-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person bowing deeply tone 1",
"shortname": ":bow_tone1:",
"category": "people",
@@ -2739,11 +2923,12 @@
"bow",
"respect",
"bend"
- ]
+ ],
+ "moji": "🙇🏻"
},
"bow_tone2": {
"unicode": "1F647-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person bowing deeply tone 2",
"shortname": ":bow_tone2:",
"category": "people",
@@ -2757,11 +2942,12 @@
"bow",
"respect",
"bend"
- ]
+ ],
+ "moji": "🙇🏼"
},
"bow_tone3": {
"unicode": "1F647-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person bowing deeply tone 3",
"shortname": ":bow_tone3:",
"category": "people",
@@ -2775,11 +2961,12 @@
"bow",
"respect",
"bend"
- ]
+ ],
+ "moji": "🙇🏽"
},
"bow_tone4": {
"unicode": "1F647-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person bowing deeply tone 4",
"shortname": ":bow_tone4:",
"category": "people",
@@ -2793,11 +2980,12 @@
"bow",
"respect",
"bend"
- ]
+ ],
+ "moji": "🙇🏾"
},
"bow_tone5": {
"unicode": "1F647-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person bowing deeply tone 5",
"shortname": ":bow_tone5:",
"category": "people",
@@ -2811,14 +2999,15 @@
"bow",
"respect",
"bend"
- ]
+ ],
+ "moji": "🙇🏿"
},
"bowling": {
"unicode": "1F3B3",
"unicode_alternates": [],
"name": "bowling",
"shortname": ":bowling:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2831,28 +3020,46 @@
"pin",
"strike",
"spare",
- "game"
+ "game",
+ "sport",
+ "boys night"
],
"moji": "🎳"
},
+ "boxing_glove": {
+ "unicode": "1F94A",
+ "unicode_alternates": [],
+ "name": "boxing glove",
+ "shortname": ":boxing_glove:",
+ "category": "activity",
+ "aliases": [
+ ":boxing_gloves:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥊"
+ },
"boy": {
"unicode": "1F466",
"unicode_alternates": [],
"name": "boy",
"shortname": ":boy:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"guy",
"male",
- "man"
+ "man",
+ "people",
+ "baby",
+ "diversity"
],
"moji": "👦"
},
"boy_tone1": {
"unicode": "1F466-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "boy tone 1",
"shortname": ":boy_tone1:",
"category": "people",
@@ -2862,11 +3069,12 @@
"male",
"kid",
"child"
- ]
+ ],
+ "moji": "👦🏻"
},
"boy_tone2": {
"unicode": "1F466-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "boy tone 2",
"shortname": ":boy_tone2:",
"category": "people",
@@ -2876,11 +3084,12 @@
"male",
"kid",
"child"
- ]
+ ],
+ "moji": "👦🏼"
},
"boy_tone3": {
"unicode": "1F466-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "boy tone 3",
"shortname": ":boy_tone3:",
"category": "people",
@@ -2890,11 +3099,12 @@
"male",
"kid",
"child"
- ]
+ ],
+ "moji": "👦🏽"
},
"boy_tone4": {
"unicode": "1F466-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "boy tone 4",
"shortname": ":boy_tone4:",
"category": "people",
@@ -2904,11 +3114,12 @@
"male",
"kid",
"child"
- ]
+ ],
+ "moji": "👦🏾"
},
"boy_tone5": {
"unicode": "1F466-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "boy tone 5",
"shortname": ":boy_tone5:",
"category": "people",
@@ -2918,27 +3129,15 @@
"male",
"kid",
"child"
- ]
- },
- "boys_symbol": {
- "unicode": "1F6C9",
- "unicode_alternates": [],
- "name": "boys symbol",
- "shortname": ":boys_symbol:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "male",
- "child"
- ]
+ ],
+ "moji": "👦🏿"
},
"bread": {
"unicode": "1F35E",
"unicode_alternates": [],
"name": "bread",
"shortname": ":bread:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2957,7 +3156,7 @@
"unicode_alternates": [],
"name": "bride with veil",
"shortname": ":bride_with_veil:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -2965,19 +3164,21 @@
"marriage",
"wedding",
"bride",
- "wedding",
"planning",
"veil",
"gown",
"dress",
"engagement",
- "white"
+ "white",
+ "people",
+ "women",
+ "diversity"
],
"moji": "👰"
},
"bride_with_veil_tone1": {
"unicode": "1F470-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bride with veil tone 1",
"shortname": ":bride_with_veil_tone1:",
"category": "people",
@@ -2987,17 +3188,17 @@
"couple",
"marriage",
"wedding",
- "wedding",
"planning",
"gown",
"dress",
"engagement",
"white"
- ]
+ ],
+ "moji": "👰🏻"
},
"bride_with_veil_tone2": {
"unicode": "1F470-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bride with veil tone 2",
"shortname": ":bride_with_veil_tone2:",
"category": "people",
@@ -3007,17 +3208,17 @@
"couple",
"marriage",
"wedding",
- "wedding",
"planning",
"gown",
"dress",
"engagement",
"white"
- ]
+ ],
+ "moji": "👰🏼"
},
"bride_with_veil_tone3": {
"unicode": "1F470-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bride with veil tone 3",
"shortname": ":bride_with_veil_tone3:",
"category": "people",
@@ -3027,17 +3228,17 @@
"couple",
"marriage",
"wedding",
- "wedding",
"planning",
"gown",
"dress",
"engagement",
"white"
- ]
+ ],
+ "moji": "👰🏽"
},
"bride_with_veil_tone4": {
"unicode": "1F470-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bride with veil tone 4",
"shortname": ":bride_with_veil_tone4:",
"category": "people",
@@ -3047,17 +3248,17 @@
"couple",
"marriage",
"wedding",
- "wedding",
"planning",
"gown",
"dress",
"engagement",
"white"
- ]
+ ],
+ "moji": "👰🏾"
},
"bride_with_veil_tone5": {
"unicode": "1F470-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bride with veil tone 5",
"shortname": ":bride_with_veil_tone5:",
"category": "people",
@@ -3067,20 +3268,20 @@
"couple",
"marriage",
"wedding",
- "wedding",
"planning",
"gown",
"dress",
"engagement",
"white"
- ]
+ ],
+ "moji": "👰🏿"
},
"bridge_at_night": {
"unicode": "1F309",
"unicode_alternates": [],
"name": "bridge at night",
"shortname": ":bridge_at_night:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3093,7 +3294,11 @@
"evening",
"suspension",
"golden",
- "gate"
+ "gate",
+ "places",
+ "travel",
+ "vacation",
+ "goodnight"
],
"moji": "🌉"
},
@@ -3102,13 +3307,17 @@
"unicode_alternates": [],
"name": "briefcase",
"shortname": ":briefcase:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"business",
"documents",
- "work"
+ "work",
+ "bag",
+ "accessories",
+ "nutcase",
+ "job"
],
"moji": "💼"
},
@@ -3117,14 +3326,17 @@
"unicode_alternates": [],
"name": "broken heart",
"shortname": ":broken_heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [
"</3"
],
"keywords": [
"sad",
- "sorry"
+ "sorry",
+ "love",
+ "symbol",
+ "heartbreak"
],
"moji": "💔"
},
@@ -3140,9 +3352,10 @@
"insect",
"nature",
"bug",
- "insect",
"virus",
- "error"
+ "error",
+ "insects",
+ "animal"
],
"moji": "🐛"
},
@@ -3159,7 +3372,8 @@
"light",
"idea",
"bulb",
- "light"
+ "object",
+ "science"
],
"moji": "💡"
},
@@ -3168,14 +3382,15 @@
"unicode_alternates": [],
"name": "high-speed train with bullet nose",
"shortname": ":bullettrain_front:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"transportation",
"train",
"bullet",
- "rail"
+ "rail",
+ "travel"
],
"moji": "🚅"
},
@@ -3184,7 +3399,7 @@
"unicode_alternates": [],
"name": "high-speed train",
"shortname": ":bullettrain_side:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3192,58 +3407,31 @@
"vehicle",
"train",
"bullet",
- "rail"
+ "rail",
+ "travel"
],
"moji": "🚄"
},
- "bullhorn": {
- "unicode": "1F56B",
- "unicode_alternates": [],
- "name": "bullhorn",
- "shortname": ":bullhorn:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "sound",
- "noise",
- "announcement",
- "megaphone"
- ]
- },
- "bullhorn_waves": {
- "unicode": "1F56C",
- "unicode_alternates": [],
- "name": "bullhorn with sound waves",
- "shortname": ":bullhorn_waves:",
- "category": "objects_symbols",
- "aliases": [
- ":bullhorn_with_sound_waves:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "sound",
- "noise",
- "announcement",
- "megaphone"
- ]
- },
"burrito": {
"unicode": "1F32F",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "burrito",
"shortname": ":burrito:",
- "category": "foods",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "food",
+ "mexican"
+ ],
+ "moji": "🌯"
},
"bus": {
"unicode": "1F68C",
"unicode_alternates": [],
"name": "bus",
"shortname": ":bus:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3253,8 +3441,8 @@
"bus",
"school",
"city",
- "transportation",
- "public"
+ "public",
+ "office"
],
"moji": "🚌"
},
@@ -3263,7 +3451,7 @@
"unicode_alternates": [],
"name": "bus stop",
"shortname": ":busstop:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3272,7 +3460,7 @@
"stop",
"city",
"transport",
- "transportation"
+ "object"
],
"moji": "🚏"
},
@@ -3281,7 +3469,7 @@
"unicode_alternates": [],
"name": "bust in silhouette",
"shortname": ":bust_in_silhouette:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3290,8 +3478,6 @@
"person",
"user",
"silhouette",
- "person",
- "user",
"member",
"account",
"guest",
@@ -3300,7 +3486,8 @@
"profile",
"me",
"myself",
- "i"
+ "i",
+ "people"
],
"moji": "👤"
},
@@ -3309,7 +3496,7 @@
"unicode_alternates": [],
"name": "busts in silhouette",
"shortname": ":busts_in_silhouette:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3322,7 +3509,6 @@
"silhouette",
"silhouettes",
"people",
- "user",
"members",
"accounts",
"relationship",
@@ -3330,6 +3516,17 @@
],
"moji": "👥"
},
+ "butterfly": {
+ "unicode": "1F98B",
+ "unicode_alternates": [],
+ "name": "butterfly",
+ "shortname": ":butterfly:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦋"
+ },
"cactus": {
"unicode": "1F335",
"unicode_alternates": [],
@@ -3346,7 +3543,8 @@
"desert",
"drought",
"spike",
- "poke"
+ "poke",
+ "trees"
],
"moji": "🌵"
},
@@ -3355,7 +3553,7 @@
"unicode_alternates": [],
"name": "shortcake",
"shortname": ":cake:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3368,24 +3566,6 @@
],
"moji": "🍰"
},
- "calculator": {
- "unicode": "1F5A9",
- "unicode_alternates": [],
- "name": "pocket calculator",
- "shortname": ":calculator:",
- "category": "objects_symbols",
- "aliases": [
- ":pocket calculator:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "add",
- "subtract",
- "multiple",
- "divide",
- "scientific"
- ]
- },
"calendar": {
"unicode": "1F4C6",
"unicode_alternates": [],
@@ -3395,7 +3575,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "schedule"
+ "schedule",
+ "object",
+ "office"
],
"moji": "📆"
},
@@ -3404,7 +3586,7 @@
"unicode_alternates": [],
"name": "spiral calendar pad",
"shortname": ":calendar_spiral:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":spiral_calendar_pad:"
],
@@ -3412,8 +3594,89 @@
"keywords": [
"schedule",
"date",
- "day"
- ]
+ "day",
+ "object",
+ "office"
+ ],
+ "moji": "🗓"
+ },
+ "call_me": {
+ "unicode": "1F919",
+ "unicode_alternates": [],
+ "name": "call me hand",
+ "shortname": ":call_me:",
+ "category": "people",
+ "aliases": [
+ ":call_me_hand:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤙"
+ },
+ "call_me_tone1": {
+ "unicode": "1F919-1F3FB",
+ "unicode_alternates": [],
+ "name": "call me hand tone 1",
+ "shortname": ":call_me_tone1:",
+ "category": "people",
+ "aliases": [
+ ":call_me_hand_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤙🏻"
+ },
+ "call_me_tone2": {
+ "unicode": "1F919-1F3FC",
+ "unicode_alternates": [],
+ "name": "call me hand tone 2",
+ "shortname": ":call_me_tone2:",
+ "category": "people",
+ "aliases": [
+ ":call_me_hand_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤙🏼"
+ },
+ "call_me_tone3": {
+ "unicode": "1F919-1F3FD",
+ "unicode_alternates": [],
+ "name": "call me hand tone 3",
+ "shortname": ":call_me_tone3:",
+ "category": "people",
+ "aliases": [
+ ":call_me_hand_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤙🏽"
+ },
+ "call_me_tone4": {
+ "unicode": "1F919-1F3FE",
+ "unicode_alternates": [],
+ "name": "call me hand tone 4",
+ "shortname": ":call_me_tone4:",
+ "category": "people",
+ "aliases": [
+ ":call_me_hand_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤙🏾"
+ },
+ "call_me_tone5": {
+ "unicode": "1F919-1F3FF",
+ "unicode_alternates": [],
+ "name": "call me hand tone 5",
+ "shortname": ":call_me_tone5:",
+ "category": "people",
+ "aliases": [
+ ":call_me_hand_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤙🏿"
},
"calling": {
"unicode": "1F4F2",
@@ -3425,7 +3688,10 @@
"aliases_ascii": [],
"keywords": [
"incoming",
- "iphone"
+ "iphone",
+ "electronics",
+ "phone",
+ "selfie"
],
"moji": "📲"
},
@@ -3447,11 +3713,11 @@
"desert",
"central asia",
"heat",
- "hot",
"water",
"hump day",
"wednesday",
- "sex"
+ "sex",
+ "wildlife"
],
"moji": "🐫"
},
@@ -3465,7 +3731,10 @@
"aliases_ascii": [],
"keywords": [
"gadgets",
- "photo"
+ "photo",
+ "electronics",
+ "camera",
+ "selfie"
],
"moji": "📷"
},
@@ -3474,20 +3743,23 @@
"unicode_alternates": [],
"name": "camera with flash",
"shortname": ":camera_with_flash:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"photo",
- "picture"
- ]
+ "picture",
+ "electronics",
+ "camera"
+ ],
+ "moji": "📸"
},
"camping": {
"unicode": "1F3D5",
"unicode_alternates": [],
"name": "camping",
"shortname": ":camping:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3495,22 +3767,13 @@
"nature",
"wilderness",
"roughing",
- "activity"
- ]
- },
- "cancellation_x": {
- "unicode": "1F5D9",
- "unicode_alternates": [],
- "name": "cancellation x",
- "shortname": ":cancellation_x:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "cancel",
- "stop",
- "delete"
- ]
+ "activity",
+ "places",
+ "travel",
+ "vacation",
+ "camp"
+ ],
+ "moji": "🏕"
},
"cancer": {
"unicode": "264B",
@@ -3519,7 +3782,7 @@
],
"name": "cancer",
"shortname": ":cancer:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3531,9 +3794,8 @@
"stars",
"zodiac",
"sign",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♋"
},
@@ -3542,20 +3804,22 @@
"unicode_alternates": [],
"name": "candle",
"shortname": ":candle:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"light",
- "wax"
- ]
+ "wax",
+ "object"
+ ],
+ "moji": "🕯"
},
"candy": {
"unicode": "1F36C",
"unicode_alternates": [],
"name": "candy",
"shortname": ":candy:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3564,22 +3828,38 @@
"candy",
"sugar",
"sweet",
- "hard"
+ "hard",
+ "food",
+ "halloween"
],
"moji": "🍬"
},
+ "canoe": {
+ "unicode": "1F6F6",
+ "unicode_alternates": [],
+ "name": "canoe",
+ "shortname": ":canoe:",
+ "category": "travel",
+ "aliases": [
+ ":kayak:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🛶"
+ },
"capital_abcd": {
"unicode": "1F520",
"unicode_alternates": [],
"name": "input symbol for latin capital letters",
"shortname": ":capital_abcd:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"blue-square",
- "words"
+ "words",
+ "symbol"
],
"moji": "🔠"
},
@@ -3590,7 +3870,7 @@
],
"name": "capricorn",
"shortname": ":capricorn:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3603,9 +3883,8 @@
"stars",
"zodiac",
"sign",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♑"
},
@@ -3614,15 +3893,19 @@
"unicode_alternates": [],
"name": "card file box",
"shortname": ":card_box:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":card_file_box:"
],
"aliases_ascii": [],
"keywords": [
"index",
- "organization"
- ]
+ "organization",
+ "object",
+ "work",
+ "office"
+ ],
+ "moji": "🗃"
},
"card_index": {
"unicode": "1F4C7",
@@ -3634,7 +3917,10 @@
"aliases_ascii": [],
"keywords": [
"business",
- "stationery"
+ "stationery",
+ "object",
+ "work",
+ "office"
],
"moji": "📇"
},
@@ -3643,7 +3929,7 @@
"unicode_alternates": [],
"name": "carousel horse",
"shortname": ":carousel_horse:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3651,37 +3937,106 @@
"horse",
"photo",
"carousel",
- "horse",
"amusement",
"park",
"ride",
"entertainment",
- "park",
- "fair"
+ "fair",
+ "places",
+ "object",
+ "vacation",
+ "roller coaster"
],
"moji": "🎠"
},
- "cartridge": {
- "unicode": "1F5AD",
+ "carrot": {
+ "unicode": "1F955",
"unicode_alternates": [],
- "name": "tape cartridge",
- "shortname": ":cartridge:",
- "category": "objects_symbols",
+ "name": "carrot",
+ "shortname": ":carrot:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥕"
+ },
+ "cartwheel": {
+ "unicode": "1F938",
+ "unicode_alternates": [],
+ "name": "person doing cartwheel",
+ "shortname": ":cartwheel:",
+ "category": "activity",
"aliases": [
- ":tape_cartridge:"
+ ":person_doing_cartwheel:"
],
"aliases_ascii": [],
- "keywords": [
- "oldschool",
- "save",
- "technology",
- "disk",
- "storage",
- "information",
- "computer",
- "drive",
- "megabyte"
- ]
+ "keywords": [],
+ "moji": "🤸"
+ },
+ "cartwheel_tone1": {
+ "unicode": "1F938-1F3FB",
+ "unicode_alternates": [],
+ "name": "person doing cartwheel tone 1",
+ "shortname": ":cartwheel_tone1:",
+ "category": "activity",
+ "aliases": [
+ ":person_doing_cartwheel_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤸🏻"
+ },
+ "cartwheel_tone2": {
+ "unicode": "1F938-1F3FC",
+ "unicode_alternates": [],
+ "name": "person doing cartwheel tone 2",
+ "shortname": ":cartwheel_tone2:",
+ "category": "activity",
+ "aliases": [
+ ":person_doing_cartwheel_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤸🏼"
+ },
+ "cartwheel_tone3": {
+ "unicode": "1F938-1F3FD",
+ "unicode_alternates": [],
+ "name": "person doing cartwheel tone 3",
+ "shortname": ":cartwheel_tone3:",
+ "category": "activity",
+ "aliases": [
+ ":person_doing_cartwheel_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤸🏽"
+ },
+ "cartwheel_tone4": {
+ "unicode": "1F938-1F3FE",
+ "unicode_alternates": [],
+ "name": "person doing cartwheel tone 4",
+ "shortname": ":cartwheel_tone4:",
+ "category": "activity",
+ "aliases": [
+ ":person_doing_cartwheel_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤸🏾,"
+ },
+ "cartwheel_tone5": {
+ "unicode": "1F938-1F3FF",
+ "unicode_alternates": [],
+ "name": "person doing cartwheel tone 5",
+ "shortname": ":cartwheel_tone5:",
+ "category": "activity",
+ "aliases": [
+ ":person_doing_cartwheel_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤸🏿"
},
"cat": {
"unicode": "1F431",
@@ -3693,7 +4048,10 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "meow"
+ "meow",
+ "halloween",
+ "vagina",
+ "cat"
],
"moji": "🐱"
},
@@ -3711,13 +4069,13 @@
"pet",
"cat",
"kitten",
- "meow"
+ "halloween"
],
"moji": "🐈"
},
"cd": {
"unicode": "1F4BF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "optical disc",
"shortname": ":cd:",
"category": "objects",
@@ -3732,25 +4090,14 @@
"cd",
"computer",
"object",
- "office"
- ]
- },
- "celtic_cross": {
- "unicode": "1F548",
- "unicode_alternates": [],
- "name": "celtic cross",
- "shortname": ":celtic_cross:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "religion",
- "symbol"
- ]
+ "office",
+ "electronics"
+ ],
+ "moji": "💿"
},
"chains": {
"unicode": "26D3",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "chains",
"shortname": ":chains:",
"category": "objects",
@@ -3758,32 +4105,55 @@
"aliases_ascii": [],
"keywords": [
"chain",
- "object"
- ]
+ "object",
+ "tool"
+ ],
+ "moji": "⛓"
},
"champagne": {
"unicode": "1F37E",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bottle with popping cork",
"shortname": ":champagne:",
- "category": "foods",
+ "category": "food",
"aliases": [
":bottle_with_popping_cork:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "drink",
+ "cheers",
+ "alcohol",
+ "parties"
+ ],
+ "moji": "🍾"
+ },
+ "champagne_glass": {
+ "unicode": "1F942",
+ "unicode_alternates": [],
+ "name": "clinking glasses",
+ "shortname": ":champagne_glass:",
+ "category": "food",
+ "aliases": [
+ ":clinking_glass:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥂"
},
"chart": {
"unicode": "1F4B9",
"unicode_alternates": [],
"name": "chart with upwards trend and yen sign",
"shortname": ":chart:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"graph",
- "green-square"
+ "green-square",
+ "symbol",
+ "money"
],
"moji": "💹"
},
@@ -3796,7 +4166,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "graph"
+ "graph",
+ "work",
+ "office"
],
"moji": "📉"
},
@@ -3809,7 +4181,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "graph"
+ "graph",
+ "work",
+ "office"
],
"moji": "📈"
},
@@ -3818,7 +4192,7 @@
"unicode_alternates": [],
"name": "chequered flag",
"shortname": ":checkered_flag:",
- "category": "objects",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3832,28 +4206,32 @@
"flag",
"finish",
"complete",
- "end"
+ "end",
+ "object"
],
"moji": "🏁"
},
"cheese": {
"unicode": "1F9C0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "cheese wedge",
"shortname": ":cheese:",
- "category": "foods",
+ "category": "food",
"aliases": [
":cheese_wedge:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "food"
+ ],
+ "moji": "🧀"
},
"cherries": {
"unicode": "1F352",
"unicode_alternates": [],
"name": "cherries",
"shortname": ":cherries:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3862,7 +4240,6 @@
"cherry",
"cherries",
"tree",
- "fruit",
"pit"
],
"moji": "🍒"
@@ -3882,7 +4259,7 @@
"cherry",
"blossom",
"tree",
- "flower"
+ "tropical"
],
"moji": "🌸"
},
@@ -3899,8 +4276,9 @@
"squirrel",
"chestnut",
"roasted",
- "food",
- "tree"
+ "tree",
+ "nature",
+ "plant"
],
"moji": "🌰"
},
@@ -3927,7 +4305,7 @@
"unicode_alternates": [],
"name": "children crossing",
"shortname": ":children_crossing:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3938,7 +4316,8 @@
"crossing",
"street",
"crosswalk",
- "slow"
+ "slow",
+ "symbol"
],
"moji": "🚸"
},
@@ -3952,15 +4331,17 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
- ]
+ "nature",
+ "wildlife"
+ ],
+ "moji": "🐿"
},
"chocolate_bar": {
"unicode": "1F36B",
"unicode_alternates": [],
"name": "chocolate bar",
"shortname": ":chocolate_bar:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3971,7 +4352,8 @@
"bar",
"candy",
"coca",
- "hershey&#039;s"
+ "hershey&#039;s",
+ "halloween"
],
"moji": "🍫"
},
@@ -3980,7 +4362,7 @@
"unicode_alternates": [],
"name": "christmas tree",
"shortname": ":christmas_tree:",
- "category": "objects",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -3990,17 +4372,17 @@
"vacation",
"xmas",
"christmas",
- "xmas",
"santa",
"holiday",
"winter",
- "december",
- "santa",
"evergreen",
"ornaments",
"jesus",
"gifts",
- "presents"
+ "presents",
+ "plant",
+ "holidays",
+ "trees"
],
"moji": "🎄"
},
@@ -4011,13 +4393,16 @@
],
"name": "church",
"shortname": ":church:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"building",
"christ",
- "religion"
+ "religion",
+ "places",
+ "wedding",
+ "condolence"
],
"moji": "⛪"
},
@@ -4026,7 +4411,7 @@
"unicode_alternates": [],
"name": "cinema",
"shortname": ":cinema:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4035,10 +4420,11 @@
"movie",
"record",
"cinema",
- "movie",
"theater",
"motion",
- "picture"
+ "picture",
+ "symbol",
+ "camera"
],
"moji": "🎦"
},
@@ -4047,7 +4433,7 @@
"unicode_alternates": [],
"name": "circus tent",
"shortname": ":circus_tent:",
- "category": "places",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4057,10 +4443,10 @@
"circus",
"tent",
"event",
- "carnival",
"big",
"top",
- "canvas"
+ "canvas",
+ "circus tent"
],
"moji": "🎪"
},
@@ -4069,7 +4455,7 @@
"unicode_alternates": [],
"name": "cityscape at dusk",
"shortname": ":city_dusk:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4082,7 +4468,9 @@
"evening",
"metropolitan",
"night",
- "dark"
+ "dark",
+ "places",
+ "building"
],
"moji": "🌆"
},
@@ -4091,7 +4479,7 @@
"unicode_alternates": [],
"name": "sunset over buildings",
"shortname": ":city_sunset:",
- "category": "places",
+ "category": "travel",
"aliases": [
":city_sunrise:"
],
@@ -4106,7 +4494,11 @@
"morning",
"metropolitan",
"rise",
- "sun"
+ "sun",
+ "places",
+ "building",
+ "sky",
+ "vacation"
],
"moji": "🌇"
},
@@ -4115,7 +4507,7 @@
"unicode_alternates": [],
"name": "cityscape",
"shortname": ":cityscape:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4124,12 +4516,16 @@
"view",
"lights",
"buiildings",
- "metropolis"
- ]
+ "metropolis",
+ "places",
+ "building",
+ "vacation"
+ ],
+ "moji": "🏙"
},
"cl": {
"unicode": "1F191",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "squared cl",
"shortname": ":cl:",
"category": "symbols",
@@ -4143,14 +4539,15 @@
"clear",
"symbol",
"word"
- ]
+ ],
+ "moji": "🆑"
},
"clap": {
"unicode": "1F44F",
"unicode_alternates": [],
"name": "clapping hands sign",
"shortname": ":clap:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4163,13 +4560,18 @@
"approval",
"sound",
"encouragement",
- "enthusiasm"
+ "enthusiasm",
+ "body",
+ "win",
+ "diversity",
+ "good",
+ "beautiful"
],
"moji": "👏"
},
"clap_tone1": {
"unicode": "1F44F-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "clapping hands sign tone 1",
"shortname": ":clap_tone1:",
"category": "people",
@@ -4185,11 +4587,12 @@
"sound",
"encouragement",
"enthusiasm"
- ]
+ ],
+ "moji": "👏🏻"
},
"clap_tone2": {
"unicode": "1F44F-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "clapping hands sign tone 2",
"shortname": ":clap_tone2:",
"category": "people",
@@ -4205,11 +4608,12 @@
"sound",
"encouragement",
"enthusiasm"
- ]
+ ],
+ "moji": "👏🏼"
},
"clap_tone3": {
"unicode": "1F44F-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "clapping hands sign tone 3",
"shortname": ":clap_tone3:",
"category": "people",
@@ -4225,11 +4629,12 @@
"sound",
"encouragement",
"enthusiasm"
- ]
+ ],
+ "moji": "👏🏽"
},
"clap_tone4": {
"unicode": "1F44F-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "clapping hands sign tone 4",
"shortname": ":clap_tone4:",
"category": "people",
@@ -4245,11 +4650,12 @@
"sound",
"encouragement",
"enthusiasm"
- ]
+ ],
+ "moji": "👏🏾"
},
"clap_tone5": {
"unicode": "1F44F-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "clapping hands sign tone 5",
"shortname": ":clap_tone5:",
"category": "people",
@@ -4265,14 +4671,15 @@
"sound",
"encouragement",
"enthusiasm"
- ]
+ ],
+ "moji": "👏🏿"
},
"clapper": {
"unicode": "1F3AC",
"unicode_alternates": [],
"name": "clapper board",
"shortname": ":clapper:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4282,8 +4689,6 @@
"clapper",
"board",
"clapboard",
- "movie",
- "film",
"take"
],
"moji": "🎬"
@@ -4293,7 +4698,7 @@
"unicode_alternates": [],
"name": "classical building",
"shortname": ":classical_building:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4301,8 +4706,13 @@
"architecture",
"history",
"iconic",
- "genre"
- ]
+ "genre",
+ "places",
+ "building",
+ "travel",
+ "vacation"
+ ],
+ "moji": "🏛"
},
"clipboard": {
"unicode": "1F4CB",
@@ -4314,7 +4724,11 @@
"aliases_ascii": [],
"keywords": [
"documents",
- "stationery"
+ "stationery",
+ "object",
+ "work",
+ "office",
+ "write"
],
"moji": "📋"
},
@@ -4323,26 +4737,29 @@
"unicode_alternates": [],
"name": "mantlepiece clock",
"shortname": ":clock:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":mantlepiece_clock:"
],
"aliases_ascii": [],
"keywords": [
- "time"
- ]
+ "time",
+ "object"
+ ],
+ "moji": "🕰"
},
"clock1": {
"unicode": "1F550",
"unicode_alternates": [],
"name": "clock face one oclock",
"shortname": ":clock1:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕐"
},
@@ -4351,12 +4768,13 @@
"unicode_alternates": [],
"name": "clock face ten oclock",
"shortname": ":clock10:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕙"
},
@@ -4365,12 +4783,13 @@
"unicode_alternates": [],
"name": "clock face ten-thirty",
"shortname": ":clock1030:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕥"
},
@@ -4379,12 +4798,13 @@
"unicode_alternates": [],
"name": "clock face eleven oclock",
"shortname": ":clock11:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕚"
},
@@ -4393,12 +4813,13 @@
"unicode_alternates": [],
"name": "clock face eleven-thirty",
"shortname": ":clock1130:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕦"
},
@@ -4407,12 +4828,13 @@
"unicode_alternates": [],
"name": "clock face twelve oclock",
"shortname": ":clock12:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕛"
},
@@ -4421,25 +4843,28 @@
"unicode_alternates": [],
"name": "clock face twelve-thirty",
"shortname": ":clock1230:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
- ]
+ "time",
+ "symbol"
+ ],
+ "moji": "🕧"
},
"clock130": {
"unicode": "1F55C",
"unicode_alternates": [],
"name": "clock face one-thirty",
"shortname": ":clock130:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕜"
},
@@ -4448,12 +4873,13 @@
"unicode_alternates": [],
"name": "clock face two oclock",
"shortname": ":clock2:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕑"
},
@@ -4462,12 +4888,13 @@
"unicode_alternates": [],
"name": "clock face two-thirty",
"shortname": ":clock230:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕝"
},
@@ -4476,12 +4903,13 @@
"unicode_alternates": [],
"name": "clock face three oclock",
"shortname": ":clock3:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕒"
},
@@ -4490,12 +4918,13 @@
"unicode_alternates": [],
"name": "clock face three-thirty",
"shortname": ":clock330:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕞"
},
@@ -4504,12 +4933,13 @@
"unicode_alternates": [],
"name": "clock face four oclock",
"shortname": ":clock4:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕓"
},
@@ -4518,12 +4948,13 @@
"unicode_alternates": [],
"name": "clock face four-thirty",
"shortname": ":clock430:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕟"
},
@@ -4532,12 +4963,13 @@
"unicode_alternates": [],
"name": "clock face five oclock",
"shortname": ":clock5:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕔"
},
@@ -4546,12 +4978,13 @@
"unicode_alternates": [],
"name": "clock face five-thirty",
"shortname": ":clock530:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕠"
},
@@ -4560,12 +4993,13 @@
"unicode_alternates": [],
"name": "clock face six oclock",
"shortname": ":clock6:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕕"
},
@@ -4574,12 +5008,13 @@
"unicode_alternates": [],
"name": "clock face six-thirty",
"shortname": ":clock630:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕡"
},
@@ -4588,12 +5023,13 @@
"unicode_alternates": [],
"name": "clock face seven oclock",
"shortname": ":clock7:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕖"
},
@@ -4602,12 +5038,13 @@
"unicode_alternates": [],
"name": "clock face seven-thirty",
"shortname": ":clock730:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕢"
},
@@ -4616,12 +5053,13 @@
"unicode_alternates": [],
"name": "clock face eight oclock",
"shortname": ":clock8:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕗"
},
@@ -4630,12 +5068,13 @@
"unicode_alternates": [],
"name": "clock face eight-thirty",
"shortname": ":clock830:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕣"
},
@@ -4644,12 +5083,13 @@
"unicode_alternates": [],
"name": "clock face nine oclock",
"shortname": ":clock9:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕘"
},
@@ -4658,29 +5098,16 @@
"unicode_alternates": [],
"name": "clock face nine-thirty",
"shortname": ":clock930:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clock",
- "time"
+ "time",
+ "symbol"
],
"moji": "🕤"
},
- "clockwise_arrows": {
- "unicode": "1F5D8",
- "unicode_alternates": [],
- "name": "clockwise right and left semicircle arrows",
- "shortname": ":clockwise_arrows:",
- "category": "objects_symbols",
- "aliases": [
- ":clockwise_right_and_left_semicircle_arrows:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "sync"
- ]
- },
"closed_book": {
"unicode": "1F4D5",
"unicode_alternates": [],
@@ -4692,7 +5119,11 @@
"keywords": [
"knowledge",
"library",
- "read"
+ "read",
+ "object",
+ "office",
+ "write",
+ "book"
],
"moji": "📕"
},
@@ -4706,7 +5137,9 @@
"aliases_ascii": [],
"keywords": [
"privacy",
- "security"
+ "security",
+ "object",
+ "lock"
],
"moji": "🔐"
},
@@ -4715,7 +5148,7 @@
"unicode_alternates": [],
"name": "closed umbrella",
"shortname": ":closed_umbrella:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4724,12 +5157,14 @@
"weather",
"umbrella",
"closed",
- "rain",
"moisture",
"protection",
"sun",
"ultraviolet",
- "uv"
+ "uv",
+ "object",
+ "sky",
+ "accessories"
],
"moji": "🌂"
},
@@ -4745,7 +5180,10 @@
"aliases_ascii": [],
"keywords": [
"sky",
- "weather"
+ "weather",
+ "cloud",
+ "cold",
+ "rain"
],
"moji": "☁"
},
@@ -4761,8 +5199,13 @@
"aliases_ascii": [],
"keywords": [
"weather",
- "thunder"
- ]
+ "thunder",
+ "sky",
+ "cloud",
+ "cold",
+ "rain"
+ ],
+ "moji": "🌩"
},
"cloud_rain": {
"unicode": "1F327",
@@ -4776,8 +5219,14 @@
"aliases_ascii": [],
"keywords": [
"weather",
- "wet"
- ]
+ "wet",
+ "winter",
+ "sky",
+ "cloud",
+ "cold",
+ "rain"
+ ],
+ "moji": "🌧"
},
"cloud_snow": {
"unicode": "1F328",
@@ -4791,8 +5240,13 @@
"aliases_ascii": [],
"keywords": [
"weather",
- "cold"
- ]
+ "cold",
+ "winter",
+ "sky",
+ "cloud",
+ "snow"
+ ],
+ "moji": "🌨"
},
"cloud_tornado": {
"unicode": "1F32A",
@@ -4807,8 +5261,24 @@
"keywords": [
"weather",
"destruction",
- "funnel"
- ]
+ "funnel",
+ "sky",
+ "cold"
+ ],
+ "moji": "🌪"
+ },
+ "clown": {
+ "unicode": "1F921",
+ "unicode_alternates": [],
+ "name": "clown face",
+ "shortname": ":clown:",
+ "category": "people",
+ "aliases": [
+ ":clown_face:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤡"
},
"clubs": {
"unicode": "2663",
@@ -4817,12 +5287,14 @@
],
"name": "black club suit",
"shortname": ":clubs:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cards",
- "poker"
+ "poker",
+ "symbol",
+ "game"
],
"moji": "♣"
},
@@ -4831,7 +5303,7 @@
"unicode_alternates": [],
"name": "cocktail glass",
"shortname": ":cocktail:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4841,11 +5313,11 @@
"drunk",
"cocktail",
"mixed",
- "drink",
- "alcohol",
"glass",
"martini",
- "bar"
+ "bar",
+ "girls night",
+ "parties"
],
"moji": "🍸"
},
@@ -4856,20 +5328,23 @@
],
"name": "hot beverage",
"shortname": ":coffee:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"beverage",
"cafe",
"drink",
- "espresso"
+ "espresso",
+ "caffeine",
+ "steam",
+ "morning"
],
"moji": "☕"
},
"coffin": {
"unicode": "26B0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "coffin",
"shortname": ":coffin:",
"category": "objects",
@@ -4877,15 +5352,18 @@
"aliases_ascii": [],
"keywords": [
"death",
- "object"
- ]
+ "object",
+ "dead",
+ "rip"
+ ],
+ "moji": "⚰"
},
"cold_sweat": {
"unicode": "1F630",
"unicode_alternates": [],
"name": "face with open mouth and cold sweat",
"shortname": ":cold_sweat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4893,13 +5371,15 @@
"nervous",
"sweat",
"exasperated",
- "frustrated"
+ "frustrated",
+ "smiley",
+ "emotion"
],
"moji": "😰"
},
"comet": {
"unicode": "2604",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "comet",
"shortname": ":comet:",
"category": "nature",
@@ -4907,20 +5387,23 @@
"aliases_ascii": [],
"keywords": [
"object",
- "space"
- ]
+ "space",
+ "sky"
+ ],
+ "moji": "☄"
},
"compression": {
"unicode": "1F5DC",
"unicode_alternates": [],
"name": "compression",
"shortname": ":compression:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"reduce"
- ]
+ ],
+ "moji": "🗜"
},
"computer": {
"unicode": "1F4BB",
@@ -4932,25 +5415,13 @@
"aliases_ascii": [],
"keywords": [
"laptop",
- "tech"
+ "tech",
+ "electronics",
+ "work",
+ "office"
],
"moji": "💻"
},
- "computer_old": {
- "unicode": "1F5B3",
- "unicode_alternates": [],
- "name": "old personal computer",
- "shortname": ":computer_old:",
- "category": "objects_symbols",
- "aliases": [
- ":old_personal_computer:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cpu",
- "terminal"
- ]
- },
"confetti_ball": {
"unicode": "1F38A",
"unicode_alternates": [],
@@ -4962,7 +5433,6 @@
"keywords": [
"festival",
"party",
- "party",
"congratulations",
"confetti",
"ball",
@@ -4970,7 +5440,13 @@
"win",
"birthday",
"new years",
- "wedding"
+ "wedding",
+ "object",
+ "holidays",
+ "cheers",
+ "girls night",
+ "boys night",
+ "parties"
],
"moji": "🎊"
},
@@ -4979,7 +5455,7 @@
"unicode_alternates": [],
"name": "confounded face",
"shortname": ":confounded:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -4991,7 +5467,11 @@
"amaze",
"perplex",
"puzzle",
- "mystify"
+ "mystify",
+ "sad",
+ "smiley",
+ "angry",
+ "emotion"
],
"moji": "😖"
},
@@ -5000,7 +5480,7 @@
"unicode_alternates": [],
"name": "confused face",
"shortname": ":confused:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
">:\\",
@@ -5024,7 +5504,10 @@
"skeptical",
"undecided",
"uneasy",
- "hesitant"
+ "hesitant",
+ "smiley",
+ "surprised",
+ "emotion"
],
"moji": "😕"
},
@@ -5035,13 +5518,15 @@
],
"name": "circled ideograph congratulation",
"shortname": ":congratulations:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"japanese",
- "kanji"
+ "kanji",
+ "japan",
+ "symbol"
],
"moji": "㊗"
},
@@ -5050,19 +5535,20 @@
"unicode_alternates": [],
"name": "construction sign",
"shortname": ":construction:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"caution",
"progress",
- "wip"
+ "wip",
+ "object"
],
"moji": "🚧"
},
"construction_site": {
"unicode": "1F3D7",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "building construction",
"shortname": ":construction_site:",
"category": "travel",
@@ -5073,28 +5559,36 @@
"keywords": [
"site",
"work",
- "place"
- ]
+ "place",
+ "building",
+ "crane"
+ ],
+ "moji": "🏗"
},
"construction_worker": {
"unicode": "1F477",
"unicode_alternates": [],
"name": "construction worker",
"shortname": ":construction_worker:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"human",
"male",
"man",
- "wip"
+ "wip",
+ "people",
+ "hat",
+ "men",
+ "diversity",
+ "job"
],
"moji": "👷"
},
"construction_worker_tone1": {
"unicode": "1F477-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "construction worker tone 1",
"shortname": ":construction_worker_tone1:",
"category": "people",
@@ -5105,11 +5599,12 @@
"male",
"man",
"wip"
- ]
+ ],
+ "moji": "👷🏻"
},
"construction_worker_tone2": {
"unicode": "1F477-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "construction worker tone 2",
"shortname": ":construction_worker_tone2:",
"category": "people",
@@ -5120,11 +5615,12 @@
"male",
"man",
"wip"
- ]
+ ],
+ "moji": "👷🏼"
},
"construction_worker_tone3": {
"unicode": "1F477-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "construction worker tone 3",
"shortname": ":construction_worker_tone3:",
"category": "people",
@@ -5135,11 +5631,12 @@
"male",
"man",
"wip"
- ]
+ ],
+ "moji": "👷🏽"
},
"construction_worker_tone4": {
"unicode": "1F477-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "construction worker tone 4",
"shortname": ":construction_worker_tone4:",
"category": "people",
@@ -5150,11 +5647,12 @@
"male",
"man",
"wip"
- ]
+ ],
+ "moji": "👷🏾"
},
"construction_worker_tone5": {
"unicode": "1F477-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "construction worker tone 5",
"shortname": ":construction_worker_tone5:",
"category": "people",
@@ -5165,45 +5663,34 @@
"male",
"man",
"wip"
- ]
+ ],
+ "moji": "👷🏿"
},
"control_knobs": {
"unicode": "1F39B",
"unicode_alternates": [],
"name": "control knobs",
"shortname": ":control_knobs:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "dial"
- ]
- },
- "contruction_site": {
- "unicode": "1F3D7",
- "unicode_alternates": [],
- "name": "building construction",
- "shortname": ":contruction_site:",
- "category": "travel_places",
- "aliases": [
- ":building_construction:"
+ "dial",
+ "time"
],
- "aliases_ascii": [],
- "keywords": [
- "site",
- "work"
- ]
+ "moji": "🎛"
},
"convenience_store": {
"unicode": "1F3EA",
"unicode_alternates": [],
"name": "convenience store",
"shortname": ":convenience_store:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "building"
+ "building",
+ "places"
],
"moji": "🏪"
},
@@ -5212,7 +5699,7 @@
"unicode_alternates": [],
"name": "cookie",
"shortname": ":cookie:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5224,21 +5711,44 @@
"dessert",
"biscuit",
"sweet",
- "chocolate"
+ "vagina"
],
"moji": "🍪"
},
+ "cooking": {
+ "unicode": "1F373",
+ "unicode_alternates": [],
+ "name": "cooking",
+ "shortname": ":cooking:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [
+ "breakfast",
+ "food",
+ "egg",
+ "fry",
+ "pan",
+ "flat",
+ "cook",
+ "frying",
+ "cooking",
+ "utensil"
+ ],
+ "moji": "🍳"
+ },
"cool": {
"unicode": "1F192",
"unicode_alternates": [],
"name": "squared cool",
"shortname": ":cool:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "words"
+ "words",
+ "symbol"
],
"moji": "🆒"
},
@@ -5247,7 +5757,7 @@
"unicode_alternates": [],
"name": "police officer",
"shortname": ":cop:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5255,13 +5765,19 @@
"enforcement",
"law",
"man",
- "police"
+ "police",
+ "people",
+ "hat",
+ "men",
+ "diversity",
+ "job",
+ "911"
],
"moji": "👮"
},
"cop_tone1": {
"unicode": "1F46E-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "police officer tone 1",
"shortname": ":cop_tone1:",
"category": "people",
@@ -5273,11 +5789,12 @@
"law",
"man",
"cop"
- ]
+ ],
+ "moji": "👮🏻"
},
"cop_tone2": {
"unicode": "1F46E-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "police officer tone 2",
"shortname": ":cop_tone2:",
"category": "people",
@@ -5289,11 +5806,12 @@
"law",
"man",
"cop"
- ]
+ ],
+ "moji": "👮🏼"
},
"cop_tone3": {
"unicode": "1F46E-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "police officer tone 3",
"shortname": ":cop_tone3:",
"category": "people",
@@ -5305,11 +5823,12 @@
"law",
"man",
"cop"
- ]
+ ],
+ "moji": "👮🏽"
},
"cop_tone4": {
"unicode": "1F46E-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "police officer tone 4",
"shortname": ":cop_tone4:",
"category": "people",
@@ -5321,11 +5840,12 @@
"law",
"man",
"cop"
- ]
+ ],
+ "moji": "👮🏾"
},
"cop_tone5": {
"unicode": "1F46E-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "police officer tone 5",
"shortname": ":cop_tone5:",
"category": "people",
@@ -5337,7 +5857,8 @@
"law",
"man",
"cop"
- ]
+ ],
+ "moji": "👮🏿"
},
"copyright": {
"moji": "©",
@@ -5345,12 +5866,13 @@
"unicode_alternates": [],
"name": "copyright sign",
"shortname": ":copyright:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"ip",
- "license"
+ "license",
+ "symbol"
]
},
"corn": {
@@ -5358,7 +5880,7 @@
"unicode_alternates": [],
"name": "ear of maize",
"shortname": ":corn:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5367,7 +5889,6 @@
"vegetable",
"corn",
"maize",
- "food",
"iowa",
"kernel",
"popcorn",
@@ -5375,7 +5896,8 @@
"yellow",
"stalk",
"cob",
- "ear"
+ "ear",
+ "vegetables"
],
"moji": "🌽"
},
@@ -5384,7 +5906,7 @@
"unicode_alternates": [],
"name": "couch and lamp",
"shortname": ":couch:",
- "category": "travel_places",
+ "category": "objects",
"aliases": [
":couch_and_lamp:"
],
@@ -5397,15 +5919,17 @@
"leather",
"microfiber",
"sit",
- "relax"
- ]
+ "relax",
+ "object"
+ ],
+ "moji": "🛋"
},
"couple": {
"unicode": "1F46B",
"unicode_alternates": [],
"name": "man and woman holding hands",
"shortname": ":couple:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5417,7 +5941,9 @@
"love",
"marriage",
"people",
- "valentines"
+ "valentines",
+ "sex",
+ "creationism"
],
"moji": "👫"
},
@@ -5440,15 +5966,21 @@
"like",
"love",
"marriage",
- "valentines"
- ]
+ "valentines",
+ "people",
+ "gay",
+ "men",
+ "sex",
+ "lgbt"
+ ],
+ "moji": "👨‍❤️‍👨"
},
"couple_with_heart": {
"unicode": "1F491",
"unicode_alternates": [],
"name": "couple with heart",
"shortname": ":couple_with_heart:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5458,7 +5990,9 @@
"like",
"love",
"marriage",
- "valentines"
+ "valentines",
+ "people",
+ "sex"
],
"moji": "💑"
},
@@ -5481,15 +6015,20 @@
"like",
"love",
"marriage",
- "valentines"
- ]
+ "valentines",
+ "people",
+ "women",
+ "sex",
+ "lgbt"
+ ],
+ "moji": "👩‍❤️‍👩"
},
"couplekiss": {
"unicode": "1F48F",
"unicode_alternates": [],
"name": "kiss",
"shortname": ":couplekiss:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5497,7 +6036,9 @@
"like",
"love",
"marriage",
- "valentines"
+ "valentines",
+ "people",
+ "sex"
],
"moji": "💏"
},
@@ -5532,28 +6073,44 @@
"cow",
"milk",
"dairy",
- "beef",
"bessie",
"moo"
],
"moji": "🐄"
},
+ "cowboy": {
+ "unicode": "1F920",
+ "unicode_alternates": [],
+ "name": "face with cowboy hat",
+ "shortname": ":cowboy:",
+ "category": "people",
+ "aliases": [
+ ":face_with_cowboy_hat:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤠"
+ },
"crab": {
"unicode": "1F980",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "crab",
"shortname": ":crab:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "tropical",
+ "animal"
+ ],
+ "moji": "🦀"
},
"crayon": {
"unicode": "1F58D",
"unicode_alternates": [],
"name": "lower left crayon",
"shortname": ":crayon:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":lower_left_crayon:"
],
@@ -5562,8 +6119,11 @@
"write",
"draw",
"color",
- "wax"
- ]
+ "wax",
+ "object",
+ "office"
+ ],
+ "moji": "🖍"
},
"credit_card": {
"unicode": "1F4B3",
@@ -5588,7 +6148,9 @@
"visa",
"american express",
"wallet",
- "signature"
+ "signature",
+ "object",
+ "boys night"
],
"moji": "💳"
},
@@ -5606,15 +6168,16 @@
"crescent",
"waxing",
"sky",
- "night",
"cheese",
- "phase"
+ "phase",
+ "space",
+ "goodnight"
],
"moji": "🌙"
},
"cricket": {
"unicode": "1F3CF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "cricket bat and ball",
"shortname": ":cricket:",
"category": "activity",
@@ -5622,7 +6185,12 @@
":cricket_bat_ball:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "ball",
+ "sport",
+ "cricket"
+ ],
+ "moji": "🏏"
},
"crocodile": {
"unicode": "1F40A",
@@ -5639,13 +6207,26 @@
"croc",
"alligator",
"gator",
- "cranky"
+ "cranky",
+ "wildlife",
+ "reptile"
],
"moji": "🐊"
},
+ "croissant": {
+ "unicode": "1F950",
+ "unicode_alternates": [],
+ "name": "croissant",
+ "shortname": ":croissant:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥐"
+ },
"cross": {
"unicode": "271D",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "latin cross",
"shortname": ":cross:",
"category": "symbols",
@@ -5657,53 +6238,8 @@
"religion",
"symbol",
"christian"
- ]
- },
- "cross_heavy": {
- "unicode": "1F547",
- "unicode_alternates": [],
- "name": "heavy latin cross",
- "shortname": ":cross_heavy:",
- "category": "objects_symbols",
- "aliases": [
- ":heavy_latin_cross:"
],
- "aliases_ascii": [],
- "keywords": [
- "religion",
- "symbol"
- ]
- },
- "cross_white": {
- "unicode": "1F546",
- "unicode_alternates": [],
- "name": "white latin cross",
- "shortname": ":cross_white:",
- "category": "objects_symbols",
- "aliases": [
- ":white_latin_cross:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "religion",
- "symbol"
- ]
- },
- "crossbones": {
- "unicode": "1F571",
- "unicode_alternates": [],
- "name": "black skull and crossbones",
- "shortname": ":crossbones:",
- "category": "objects_symbols",
- "aliases": [
- ":black_skull_and_crossbones:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "poison",
- "danger",
- "death"
- ]
+ "moji": "✝"
},
"crossed_flags": {
"unicode": "1F38C",
@@ -5714,13 +6250,14 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "japan"
+ "japan",
+ "object"
],
"moji": "🎌"
},
"crossed_swords": {
"unicode": "2694",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "crossed swords",
"shortname": ":crossed_swords:",
"category": "objects",
@@ -5729,21 +6266,25 @@
"keywords": [
"object",
"weapon"
- ]
+ ],
+ "moji": "⚔"
},
"crown": {
"unicode": "1F451",
"unicode_alternates": [],
"name": "crown",
"shortname": ":crown:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"king",
"kod",
"leader",
- "royalty"
+ "royalty",
+ "object",
+ "gem",
+ "accessories"
],
"moji": "👑"
},
@@ -5752,7 +6293,7 @@
"unicode_alternates": [],
"name": "passenger ship",
"shortname": ":cruise_ship:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":passenger_ship:"
],
@@ -5760,15 +6301,18 @@
"keywords": [
"titanic",
"transportation",
- "boat"
- ]
+ "boat",
+ "travel",
+ "vacation"
+ ],
+ "moji": "🛳"
},
"cry": {
"unicode": "1F622",
"unicode_alternates": [],
"name": "crying face",
"shortname": ":cry:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":'(",
@@ -5779,11 +6323,14 @@
"keywords": [
"face",
"sad",
- "sad",
"cry",
"tear",
"weep",
- "tears"
+ "tears",
+ "smiley",
+ "emotion",
+ "rip",
+ "heartbreak"
],
"moji": "😢"
},
@@ -5792,7 +6339,7 @@
"unicode_alternates": [],
"name": "crying cat face",
"shortname": ":crying_cat_face:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5804,8 +6351,6 @@
"cry",
"cat",
"sob",
- "tears",
- "sad",
"melancholy",
"morn",
"somber",
@@ -5823,16 +6368,29 @@
"aliases_ascii": [],
"keywords": [
"disco",
- "party"
+ "party",
+ "object",
+ "ball"
],
"moji": "🔮"
},
+ "cucumber": {
+ "unicode": "1F952",
+ "unicode_alternates": [],
+ "name": "cucumber",
+ "shortname": ":cucumber:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥒"
+ },
"cupid": {
"unicode": "1F498",
"unicode_alternates": [],
"name": "heart with arrow",
"shortname": ":cupid:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5840,7 +6398,8 @@
"heart",
"like",
"love",
- "valentines"
+ "valentines",
+ "symbol"
],
"moji": "💘"
},
@@ -5849,11 +6408,12 @@
"unicode_alternates": [],
"name": "curly loop",
"shortname": ":curly_loop:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "scribble"
+ "scribble",
+ "symbol"
],
"moji": "➰"
},
@@ -5862,13 +6422,14 @@
"unicode_alternates": [],
"name": "currency exchange",
"shortname": ":currency_exchange:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"dollar",
"money",
- "travel"
+ "travel",
+ "symbol"
],
"moji": "💱"
},
@@ -5877,7 +6438,7 @@
"unicode_alternates": [],
"name": "curry and rice",
"shortname": ":curry:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5888,7 +6449,6 @@
"curry",
"spice",
"flavor",
- "food",
"meal"
],
"moji": "🍛"
@@ -5898,7 +6458,7 @@
"unicode_alternates": [],
"name": "custard",
"shortname": ":custard:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5920,7 +6480,7 @@
"unicode_alternates": [],
"name": "customs",
"shortname": ":customs:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5932,7 +6492,8 @@
"goods",
"check",
"authority",
- "government"
+ "government",
+ "symbol"
],
"moji": "🛃"
},
@@ -5942,7 +6503,7 @@
"unicode_alternates": [],
"name": "cyclone",
"shortname": ":cyclone:",
- "category": "nature",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5954,7 +6515,9 @@
"hurricane",
"typhoon",
"storm",
- "ocean"
+ "ocean",
+ "symbol",
+ "drugs"
]
},
"dagger": {
@@ -5962,22 +6525,25 @@
"unicode_alternates": [],
"name": "dagger knife",
"shortname": ":dagger:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":dagger_knife:"
],
"aliases_ascii": [],
"keywords": [
"blade",
- "knife"
- ]
+ "knife",
+ "object",
+ "weapon"
+ ],
+ "moji": "🗡"
},
"dancer": {
"unicode": "1F483",
"unicode_alternates": [],
"name": "dancer",
"shortname": ":dancer:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -5995,13 +6561,18 @@
"ballet",
"tango",
"cha cha",
- "music"
+ "music",
+ "people",
+ "women",
+ "sexy",
+ "diversity",
+ "girls night"
],
"moji": "💃"
},
"dancer_tone1": {
"unicode": "1F483-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "dancer tone 1",
"shortname": ":dancer_tone1:",
"category": "people",
@@ -6021,11 +6592,12 @@
"tango",
"cha cha",
"music"
- ]
+ ],
+ "moji": "💃🏻"
},
"dancer_tone2": {
"unicode": "1F483-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "dancer tone 2",
"shortname": ":dancer_tone2:",
"category": "people",
@@ -6045,11 +6617,12 @@
"tango",
"cha cha",
"music"
- ]
+ ],
+ "moji": "💃🏼"
},
"dancer_tone3": {
"unicode": "1F483-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "dancer tone 3",
"shortname": ":dancer_tone3:",
"category": "people",
@@ -6069,11 +6642,12 @@
"tango",
"cha cha",
"music"
- ]
+ ],
+ "moji": "💃🏽"
},
"dancer_tone4": {
"unicode": "1F483-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "dancer tone 4",
"shortname": ":dancer_tone4:",
"category": "people",
@@ -6093,11 +6667,12 @@
"tango",
"cha cha",
"music"
- ]
+ ],
+ "moji": "💃🏾"
},
"dancer_tone5": {
"unicode": "1F483-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "dancer tone 5",
"shortname": ":dancer_tone5:",
"category": "people",
@@ -6117,14 +6692,15 @@
"tango",
"cha cha",
"music"
- ]
+ ],
+ "moji": "💃🏿"
},
"dancers": {
"unicode": "1F46F",
"unicode_alternates": [],
"name": "woman with bunny ears",
"shortname": ":dancers:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6137,8 +6713,13 @@
"showgirl",
"playboy",
"costume",
- "bunny",
- "cancan"
+ "cancan",
+ "people",
+ "sexy",
+ "girls night",
+ "boys night",
+ "parties",
+ "dance"
],
"moji": "👯"
},
@@ -6147,7 +6728,7 @@
"unicode_alternates": [],
"name": "dango",
"shortname": ":dango:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6166,20 +6747,24 @@
"unicode_alternates": [],
"name": "dark sunglasses",
"shortname": ":dark_sunglasses:",
- "category": "objects_symbols",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"shades",
- "eyes"
- ]
+ "eyes",
+ "fashion",
+ "glasses",
+ "accessories"
+ ],
+ "moji": "🕶"
},
"dart": {
"unicode": "1F3AF",
"unicode_alternates": [],
"name": "direct hit",
"shortname": ":dart:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6190,10 +6775,10 @@
"bullseye",
"dart",
"archery",
- "game",
"fletching",
"arrow",
- "sport"
+ "sport",
+ "boys night"
],
"moji": "🎯"
},
@@ -6202,14 +6787,17 @@
"unicode_alternates": [],
"name": "dash symbol",
"shortname": ":dash:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"air",
"fast",
"shoo",
- "wind"
+ "wind",
+ "cloud",
+ "cold",
+ "smoking"
],
"moji": "💨"
},
@@ -6223,7 +6811,9 @@
"aliases_ascii": [],
"keywords": [
"calendar",
- "schedule"
+ "schedule",
+ "object",
+ "office"
],
"moji": "📅"
},
@@ -6242,16 +6832,29 @@
"tree",
"leaves",
"fall",
- "color"
+ "color",
+ "camp",
+ "trees"
],
"moji": "🌳"
},
+ "deer": {
+ "unicode": "1F98C",
+ "unicode_alternates": [],
+ "name": "deer",
+ "shortname": ":deer:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦌"
+ },
"department_store": {
"unicode": "1F3EC",
"unicode_alternates": [],
"name": "department store",
"shortname": ":department_store:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6262,31 +6865,17 @@
"store",
"retail",
"sale",
- "merchandise"
+ "merchandise",
+ "places"
],
"moji": "🏬"
},
- "descending_notes": {
- "unicode": "1F39D",
- "unicode_alternates": [],
- "name": "beamed descending musical notes",
- "shortname": ":descending_notes:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "score",
- "music",
- "sound",
- "tone"
- ]
- },
"desert": {
"unicode": "1F3DC",
"unicode_alternates": [],
"name": "desert",
"shortname": ":desert:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6295,41 +6884,36 @@
"sandy",
"cactus",
"sunny",
- "barren"
- ]
+ "barren",
+ "places",
+ "travel",
+ "vacation"
+ ],
+ "moji": "🏜"
},
"desktop": {
"unicode": "1F5A5",
"unicode_alternates": [],
"name": "desktop computer",
"shortname": ":desktop:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":desktop_computer:"
],
"aliases_ascii": [],
"keywords": [
- "cpu"
- ]
- },
- "desktop_window": {
- "unicode": "1F5D4",
- "unicode_alternates": [],
- "name": "desktop window",
- "shortname": ":desktop_window:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "computer"
- ]
+ "cpu",
+ "electronics",
+ "work"
+ ],
+ "moji": "🖥"
},
"diamond_shape_with_a_dot_inside": {
"unicode": "1F4A0",
"unicode_alternates": [],
"name": "diamond shape with a dot inside",
"shortname": ":diamond_shape_with_a_dot_inside:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6339,7 +6923,8 @@
"kawaii",
"japanese",
"glyph",
- "adorable"
+ "adorable",
+ "symbol"
],
"moji": "💠"
},
@@ -6350,12 +6935,15 @@
],
"name": "black diamond suit",
"shortname": ":diamonds:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cards",
- "poker"
+ "poker",
+ "shapes",
+ "symbol",
+ "game"
],
"moji": "♦"
},
@@ -6364,7 +6952,7 @@
"unicode_alternates": [],
"name": "disappointed face",
"shortname": ":disappointed:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
">:[",
@@ -6382,7 +6970,10 @@
"discouraged",
"face",
"sad",
- "upset"
+ "upset",
+ "smiley",
+ "tired",
+ "emotion"
],
"moji": "😞"
},
@@ -6391,7 +6982,7 @@
"unicode_alternates": [],
"name": "disappointed but relieved face",
"shortname": ":disappointed_relieved:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6400,7 +6991,12 @@
"phew",
"sweat",
"disappoint",
- "relief"
+ "relief",
+ "sad",
+ "smiley",
+ "stressed",
+ "cry",
+ "emotion"
],
"moji": "😥"
},
@@ -6409,22 +7005,25 @@
"unicode_alternates": [],
"name": "card index dividers",
"shortname": ":dividers:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":card_index_dividers:"
],
"aliases_ascii": [],
"keywords": [
"stationery",
- "rolodex"
- ]
+ "rolodex",
+ "work",
+ "office"
+ ],
+ "moji": "🗂"
},
"dizzy": {
"unicode": "1F4AB",
"unicode_alternates": [],
"name": "dizzy symbol",
"shortname": ":dizzy:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6437,7 +7036,7 @@
"intoxicated",
"squeans",
"starburst",
- "star"
+ "symbol"
],
"moji": "💫"
},
@@ -6446,7 +7045,7 @@
"unicode_alternates": [],
"name": "dizzy face",
"shortname": ":dizzy_face:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"#-)",
@@ -6463,7 +7062,13 @@
"face",
"spent",
"unconscious",
- "xox"
+ "xox",
+ "smiley",
+ "surprised",
+ "dead",
+ "wow",
+ "emotion",
+ "omg"
],
"moji": "😵"
},
@@ -6472,7 +7077,7 @@
"unicode_alternates": [],
"name": "do not litter symbol",
"shortname": ":do_not_litter:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6480,40 +7085,13 @@
"garbage",
"trash",
"litter",
- "garbage",
"waste",
"no",
"can",
- "trash"
+ "symbol"
],
"moji": "🚯"
},
- "document": {
- "unicode": "1F5CE",
- "unicode_alternates": [],
- "name": "document",
- "shortname": ":document:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "page"
- ]
- },
- "document_text": {
- "unicode": "1F5B9",
- "unicode_alternates": [],
- "name": "document with text",
- "shortname": ":document_text:",
- "category": "objects_symbols",
- "aliases": [
- ":document_with_text:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "page"
- ]
- },
"dog": {
"unicode": "1F436",
"unicode_alternates": [],
@@ -6526,7 +7104,9 @@
"animal",
"friend",
"nature",
- "woof"
+ "woof",
+ "dog",
+ "pug"
],
"moji": "🐶"
},
@@ -6546,11 +7126,10 @@
"pet",
"dog",
"puppy",
- "pet",
- "friend",
"woof",
"bark",
- "fido"
+ "fido",
+ "pug"
],
"moji": "🐕"
},
@@ -6571,8 +7150,6 @@
"canada",
"australia",
"banknote",
- "money",
- "currency",
"paper",
"cash",
"bills"
@@ -6593,7 +7170,6 @@
"toy",
"dolls",
"japan",
- "japanese",
"day",
"girls",
"emperor",
@@ -6602,7 +7178,8 @@
"blessing",
"imperial",
"family",
- "royal"
+ "royal",
+ "people"
],
"moji": "🎎"
},
@@ -6621,7 +7198,9 @@
"flipper",
"nature",
"ocean",
- "sea"
+ "sea",
+ "wildlife",
+ "tropical"
],
"moji": "🐬"
},
@@ -6641,8 +7220,7 @@
"doorway",
"entrance",
"enter",
- "exit",
- "entry"
+ "object"
],
"moji": "🚪"
},
@@ -6651,7 +7229,7 @@
"unicode_alternates": [],
"name": "doughnut",
"shortname": ":doughnut:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6666,8 +7244,7 @@
"dessert",
"breakfast",
"police",
- "homer",
- "sweet"
+ "homer"
],
"moji": "🍩"
},
@@ -6676,15 +7253,17 @@
"unicode_alternates": [],
"name": "dove of peace",
"shortname": ":dove:",
- "category": "objects_symbols",
+ "category": "nature",
"aliases": [
":dove_of_peace:"
],
"aliases_ascii": [],
"keywords": [
"symbol",
- "bird"
- ]
+ "bird",
+ "animal"
+ ],
+ "moji": "🕊"
},
"dragon": {
"unicode": "1F409",
@@ -6703,7 +7282,8 @@
"dragon",
"fire",
"legendary",
- "myth"
+ "roar",
+ "reptile"
],
"moji": "🐉"
},
@@ -6725,7 +7305,9 @@
"head",
"fire",
"legendary",
- "myth"
+ "roar",
+ "monster",
+ "reptile"
],
"moji": "🐲"
},
@@ -6734,12 +7316,15 @@
"unicode_alternates": [],
"name": "dress",
"shortname": ":dress:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"clothes",
- "fashion"
+ "fashion",
+ "women",
+ "sexy",
+ "girls night"
],
"moji": "👗"
},
@@ -6758,23 +7343,35 @@
"dromedary",
"camel",
"hump",
- "desert",
"middle east",
"heat",
- "hot",
"water",
"hump day",
"wednesday",
- "sex"
+ "sex",
+ "wildlife"
],
"moji": "🐪"
},
+ "drooling_face": {
+ "unicode": "1F924",
+ "unicode_alternates": [],
+ "name": "drooling face",
+ "shortname": ":drooling_face:",
+ "category": "people",
+ "aliases": [
+ ":drool:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤤"
+ },
"droplet": {
"unicode": "1F4A7",
"unicode_alternates": [],
"name": "droplet",
"shortname": ":droplet:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -6784,7 +7381,6 @@
"drop",
"droplet",
"h20",
- "water",
"aqua",
"tear",
"sweat",
@@ -6792,10 +7388,36 @@
"moisture",
"wet",
"moist",
- "spit"
+ "spit",
+ "weather",
+ "sky"
],
"moji": "💧"
},
+ "drum": {
+ "unicode": "1F941",
+ "unicode_alternates": [],
+ "name": "drum with drumsticks",
+ "shortname": ":drum:",
+ "category": "activity",
+ "aliases": [
+ ":drum_with_drumsticks:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥁"
+ },
+ "duck": {
+ "unicode": "1F986",
+ "unicode_alternates": [],
+ "name": "duck",
+ "shortname": ":duck:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦆"
+ },
"dvd": {
"unicode": "1F4C0",
"unicode_alternates": [],
@@ -6807,7 +7429,8 @@
"keywords": [
"cd",
"disc",
- "disk"
+ "disk",
+ "electronics"
],
"moji": "📀"
},
@@ -6823,23 +7446,37 @@
"aliases_ascii": [],
"keywords": [
"communication",
- "inbox"
+ "inbox",
+ "office"
],
"moji": "📧"
},
+ "eagle": {
+ "unicode": "1F985",
+ "unicode_alternates": [],
+ "name": "eagle",
+ "shortname": ":eagle:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦅"
+ },
"ear": {
"unicode": "1F442",
"unicode_alternates": [],
"name": "ear",
"shortname": ":ear:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"face",
"hear",
"listen",
- "sound"
+ "sound",
+ "body",
+ "diversity"
],
"moji": "👂"
},
@@ -6857,14 +7494,14 @@
"ear",
"rice",
"food",
- "plant",
- "seed"
+ "seed",
+ "leaf"
],
"moji": "🌾"
},
"ear_tone1": {
"unicode": "1F442-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ear tone 1",
"shortname": ":ear_tone1:",
"category": "people",
@@ -6874,11 +7511,12 @@
"hear",
"listen",
"sound"
- ]
+ ],
+ "moji": "👂🏻"
},
"ear_tone2": {
"unicode": "1F442-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ear tone 2",
"shortname": ":ear_tone2:",
"category": "people",
@@ -6888,11 +7526,12 @@
"hear",
"listen",
"sound"
- ]
+ ],
+ "moji": "👂🏼"
},
"ear_tone3": {
"unicode": "1F442-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ear tone 3",
"shortname": ":ear_tone3:",
"category": "people",
@@ -6902,11 +7541,12 @@
"hear",
"listen",
"sound"
- ]
+ ],
+ "moji": "👂🏽"
},
"ear_tone4": {
"unicode": "1F442-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ear tone 4",
"shortname": ":ear_tone4:",
"category": "people",
@@ -6916,11 +7556,12 @@
"hear",
"listen",
"sound"
- ]
+ ],
+ "moji": "👂🏾"
},
"ear_tone5": {
"unicode": "1F442-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ear tone 5",
"shortname": ":ear_tone5:",
"category": "people",
@@ -6930,7 +7571,8 @@
"hear",
"listen",
"sound"
- ]
+ ],
+ "moji": "👂🏿"
},
"earth_africa": {
"unicode": "1F30D",
@@ -6945,12 +7587,13 @@
"international",
"world",
"earth",
- "globe",
"space",
"planet",
"africa",
"europe",
- "home"
+ "home",
+ "map",
+ "vacation"
],
"moji": "🌍"
},
@@ -6968,14 +7611,15 @@
"international",
"world",
"earth",
- "globe",
"space",
"planet",
"north",
"south",
"america",
"americas",
- "home"
+ "home",
+ "map",
+ "vacation"
],
"moji": "🌎"
},
@@ -6993,43 +7637,33 @@
"international",
"world",
"earth",
- "globe",
"space",
"planet",
"asia",
"australia",
- "home"
+ "home",
+ "map",
+ "vacation"
],
"moji": "🌏"
},
"egg": {
- "unicode": "1F373",
+ "unicode": "1F95A",
"unicode_alternates": [],
- "name": "cooking",
+ "name": "egg",
"shortname": ":egg:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
- "keywords": [
- "breakfast",
- "food",
- "egg",
- "fry",
- "pan",
- "flat",
- "cook",
- "frying",
- "cooking",
- "utensil"
- ],
- "moji": "🍳"
+ "keywords": [],
+ "moji": "🥚"
},
"eggplant": {
"unicode": "1F346",
"unicode_alternates": [],
"name": "aubergine",
"shortname": ":eggplant:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7038,10 +7672,10 @@
"nature",
"vegetable",
"eggplant",
- "aubergine",
"fruit",
"purple",
- "penis"
+ "penis",
+ "vegetables"
],
"moji": "🍆"
},
@@ -7051,15 +7685,18 @@
"unicode_alternates": [
"0038-FE0F-20E3"
],
- "name": "digit eight",
+ "name": "keycap digit eight",
"shortname": ":eight:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"8",
"blue-square",
- "numbers"
+ "numbers",
+ "number",
+ "math",
+ "symbol"
]
},
"eight_pointed_black_star": {
@@ -7069,10 +7706,12 @@
],
"name": "eight pointed black star",
"shortname": ":eight_pointed_black_star:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "symbol"
+ ],
"moji": "✴"
},
"eight_spoked_asterisk": {
@@ -7082,16 +7721,32 @@
],
"name": "eight spoked asterisk",
"shortname": ":eight_spoked_asterisk:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"green-square",
"sparkle",
- "star"
+ "star",
+ "symbol"
],
"moji": "✳"
},
+ "eject": {
+ "unicode": "23CF",
+ "unicode_alternates": [
+ "23CF-FE0F"
+ ],
+ "name": "eject symbol",
+ "shortname": ":eject:",
+ "category": "symbols",
+ "aliases": [
+ ":eject_symbol:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "⏏"
+ },
"electric_plug": {
"unicode": "1F50C",
"unicode_alternates": [],
@@ -7102,7 +7757,8 @@
"aliases_ascii": [],
"keywords": [
"charger",
- "power"
+ "power",
+ "electronics"
],
"moji": "🔌"
},
@@ -7118,7 +7774,8 @@
"animal",
"nature",
"nose",
- "thailand"
+ "thailand",
+ "wildlife"
],
"moji": "🐘"
},
@@ -7127,12 +7784,13 @@
"unicode_alternates": [],
"name": "end with leftwards arrow above",
"shortname": ":end:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "words"
+ "words",
+ "symbol"
],
"moji": "🔚"
},
@@ -7150,78 +7808,13 @@
"communication",
"letter",
"mail",
- "postal"
+ "postal",
+ "object",
+ "office",
+ "write"
],
"moji": "✉"
},
- "envelope_back": {
- "unicode": "1F582",
- "unicode_alternates": [],
- "name": "back of envelope",
- "shortname": ":envelope_back:",
- "category": "objects_symbols",
- "aliases": [
- ":back_of_envelope:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "letter",
- "mail",
- "postal"
- ]
- },
- "envelope_flying": {
- "unicode": "1F585",
- "unicode_alternates": [],
- "name": "flying envelope",
- "shortname": ":envelope_flying:",
- "category": "objects_symbols",
- "aliases": [
- ":flying_envelope:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "letter",
- "mail",
- "postal"
- ]
- },
- "envelope_stamped": {
- "unicode": "1F583",
- "unicode_alternates": [],
- "name": "stamped envelope",
- "shortname": ":envelope_stamped:",
- "category": "objects_symbols",
- "aliases": [
- ":stamped_envelope:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "letter",
- "mail",
- "postal"
- ]
- },
- "envelope_stamped_pen": {
- "unicode": "1F586",
- "unicode_alternates": [],
- "name": "pen over stamped envelope",
- "shortname": ":envelope_stamped_pen:",
- "category": "objects_symbols",
- "aliases": [
- ":pen_over_stamped_envelope:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "letter",
- "mail",
- "postal"
- ]
- },
"envelope_with_arrow": {
"unicode": "1F4E9",
"unicode_alternates": [],
@@ -7231,7 +7824,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "email"
+ "email",
+ "object",
+ "office"
],
"moji": "📩"
},
@@ -7250,8 +7845,6 @@
"euro",
"europe",
"banknote",
- "money",
- "currency",
"paper",
"cash",
"bills"
@@ -7263,7 +7856,7 @@
"unicode_alternates": [],
"name": "european castle",
"shortname": ":european_castle:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7273,7 +7866,6 @@
"castle",
"european",
"residence",
- "royalty",
"disneyland",
"disney",
"fort",
@@ -7287,7 +7879,10 @@
"queen",
"fortress",
"nobel",
- "stronghold"
+ "stronghold",
+ "places",
+ "travel",
+ "vacation"
],
"moji": "🏰"
},
@@ -7296,11 +7891,13 @@
"unicode_alternates": [],
"name": "european post office",
"shortname": ":european_post_office:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "building"
+ "building",
+ "places",
+ "post office"
],
"moji": "🏤"
},
@@ -7318,7 +7915,10 @@
"evergreen",
"tree",
"needles",
- "christmas"
+ "christmas",
+ "holidays",
+ "camp",
+ "trees"
],
"moji": "🌲"
},
@@ -7329,11 +7929,13 @@
],
"name": "heavy exclamation mark symbol",
"shortname": ":exclamation:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "surprise"
+ "surprise",
+ "symbol",
+ "punctuation"
],
"moji": "❗"
},
@@ -7342,7 +7944,7 @@
"unicode_alternates": [],
"name": "expressionless face",
"shortname": ":expressionless:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"-_-",
@@ -7356,7 +7958,11 @@
"vapid",
"without expression",
"face",
- "indifferent"
+ "indifferent",
+ "mad",
+ "smiley",
+ "neutral",
+ "emotion"
],
"moji": "😑"
},
@@ -7371,25 +7977,36 @@
"keywords": [
"look",
"peek",
- "watch"
- ]
+ "watch",
+ "body",
+ "eyes"
+ ],
+ "moji": "👁"
},
"eye_in_speech_bubble": {
"unicode": "1F441-1F5E8",
- "unicode_alternates": "1f441-200d-1f5e8",
+ "unicode_alternates": [
+ "1F441-200D-1F5E8"
+ ],
"name": "eye in speech bubble",
"shortname": ":eye_in_speech_bubble:",
"category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "object",
+ "symbol",
+ "eyes",
+ "talk"
+ ],
+ "moji": "👁‍🗨"
},
"eyeglasses": {
"unicode": "1F453",
"unicode_alternates": [],
"name": "eyeglasses",
"shortname": ":eyeglasses:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7408,7 +8025,8 @@
"vision",
"see",
"blurry",
- "contacts"
+ "contacts",
+ "glasses"
],
"moji": "👓"
},
@@ -7417,27 +8035,110 @@
"unicode_alternates": [],
"name": "eyes",
"shortname": ":eyes:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"look",
"peek",
"stalk",
- "watch"
+ "watch",
+ "body",
+ "eyes"
],
"moji": "👀"
},
+ "face_palm": {
+ "unicode": "1F926",
+ "unicode_alternates": [],
+ "name": "face palm",
+ "shortname": ":face_palm:",
+ "category": "people",
+ "aliases": [
+ ":facepalm:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤦"
+ },
+ "face_palm_tone1": {
+ "unicode": "1F926-1F3FB",
+ "unicode_alternates": [],
+ "name": "face palm tone 1",
+ "shortname": ":face_palm_tone1:",
+ "category": "people",
+ "aliases": [
+ ":facepalm_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤦🏻"
+ },
+ "face_palm_tone2": {
+ "unicode": "1F926-1F3FC",
+ "unicode_alternates": [],
+ "name": "face palm tone 2",
+ "shortname": ":face_palm_tone2:",
+ "category": "people",
+ "aliases": [
+ ":facepalm_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤦🏼"
+ },
+ "face_palm_tone3": {
+ "unicode": "1F926-1F3FD",
+ "unicode_alternates": [],
+ "name": "face palm tone 3",
+ "shortname": ":face_palm_tone3:",
+ "category": "people",
+ "aliases": [
+ ":facepalm_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤦🏽"
+ },
+ "face_palm_tone4": {
+ "unicode": "1F926-1F3FE",
+ "unicode_alternates": [],
+ "name": "face palm tone 4",
+ "shortname": ":face_palm_tone4:",
+ "category": "people",
+ "aliases": [
+ ":facepalm_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤦🏾"
+ },
+ "face_palm_tone5": {
+ "unicode": "1F926-1F3FF",
+ "unicode_alternates": [],
+ "name": "face palm tone 5",
+ "shortname": ":face_palm_tone5:",
+ "category": "people",
+ "aliases": [
+ ":facepalm_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤦🏿"
+ },
"factory": {
"unicode": "1F3ED",
"unicode_alternates": [],
"name": "factory",
"shortname": ":factory:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "building"
+ "building",
+ "places",
+ "travel",
+ "steam"
],
"moji": "🏭"
},
@@ -7467,7 +8168,7 @@
"unicode_alternates": [],
"name": "family",
"shortname": ":family:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7479,13 +8180,12 @@
"mother",
"parents",
"family",
- "mother",
- "father",
- "child",
"girl",
"boy",
"group",
- "unit"
+ "unit",
+ "people",
+ "baby"
],
"moji": "👪"
},
@@ -7509,8 +8209,14 @@
"gay",
"homosexual",
"man",
- "boy"
- ]
+ "boy",
+ "people",
+ "family",
+ "men",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👨‍👨‍👦"
},
"family_mmbb": {
"unicode": "1F468-1F468-1F466-1F466",
@@ -7532,8 +8238,14 @@
"gay",
"homosexual",
"man",
- "boy"
- ]
+ "boy",
+ "people",
+ "family",
+ "men",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👨‍👨‍👦‍👦"
},
"family_mmg": {
"unicode": "1F468-1F468-1F467",
@@ -7555,8 +8267,14 @@
"gay",
"homosexual",
"man",
- "girl"
- ]
+ "girl",
+ "people",
+ "family",
+ "men",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👨‍👨‍👧"
},
"family_mmgb": {
"unicode": "1F468-1F468-1F467-1F466",
@@ -7579,8 +8297,14 @@
"homosexual",
"man",
"girl",
- "boy"
- ]
+ "boy",
+ "people",
+ "family",
+ "men",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👨‍👨‍👧‍👦"
},
"family_mmgg": {
"unicode": "1F468-1F468-1F467-1F467",
@@ -7602,8 +8326,14 @@
"gay",
"homosexual",
"man",
- "girl"
- ]
+ "girl",
+ "people",
+ "family",
+ "men",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👨‍👨‍👧‍👧"
},
"family_mwbb": {
"unicode": "1F468-1F469-1F466-1F466",
@@ -7626,8 +8356,12 @@
"group",
"unit",
"man",
- "woman"
- ]
+ "woman",
+ "people",
+ "family",
+ "baby"
+ ],
+ "moji": "👨‍👩‍👦‍👦"
},
"family_mwg": {
"unicode": "1F468-1F469-1F467",
@@ -7651,8 +8385,12 @@
"group",
"unit",
"man",
- "woman"
- ]
+ "woman",
+ "people",
+ "family",
+ "baby"
+ ],
+ "moji": "👨‍👩‍👧"
},
"family_mwgb": {
"unicode": "1F468-1F469-1F467-1F466",
@@ -7676,8 +8414,12 @@
"group",
"unit",
"man",
- "woman"
- ]
+ "woman",
+ "people",
+ "family",
+ "baby"
+ ],
+ "moji": "👨‍👩‍👧‍👦"
},
"family_mwgg": {
"unicode": "1F468-1F469-1F467-1F467",
@@ -7700,8 +8442,12 @@
"group",
"unit",
"man",
- "woman"
- ]
+ "woman",
+ "people",
+ "family",
+ "baby"
+ ],
+ "moji": "👨‍👩‍👧‍👧"
},
"family_wwb": {
"unicode": "1F469-1F469-1F466",
@@ -7724,8 +8470,14 @@
"gay",
"lesbian",
"homosexual",
- "woman"
- ]
+ "woman",
+ "people",
+ "family",
+ "women",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👩‍👩‍👦"
},
"family_wwbb": {
"unicode": "1F469-1F469-1F466-1F466",
@@ -7748,8 +8500,14 @@
"lesbian",
"homosexual",
"woman",
- "boy"
- ]
+ "boy",
+ "people",
+ "family",
+ "women",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👩‍👩‍👦‍👦"
},
"family_wwg": {
"unicode": "1F469-1F469-1F467",
@@ -7772,8 +8530,14 @@
"unit",
"gay",
"lesbian",
- "homosexual"
- ]
+ "homosexual",
+ "people",
+ "family",
+ "women",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👩‍👩‍👧"
},
"family_wwgb": {
"unicode": "1F469-1F469-1F467-1F466",
@@ -7797,8 +8561,14 @@
"homosexual",
"woman",
"girl",
- "boy"
- ]
+ "boy",
+ "people",
+ "family",
+ "women",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👩‍👩‍👧‍👦"
},
"family_wwgg": {
"unicode": "1F469-1F469-1F467-1F467",
@@ -7821,19 +8591,27 @@
"lesbian",
"homosexual",
"woman",
- "girl"
- ]
+ "girl",
+ "people",
+ "family",
+ "women",
+ "baby",
+ "lgbt"
+ ],
+ "moji": "👩‍👩‍👧‍👧"
},
"fast_forward": {
"unicode": "23E9",
"unicode_alternates": [],
"name": "black right-pointing double triangle",
"shortname": ":fast_forward:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "⏩"
},
@@ -7847,7 +8625,10 @@
"aliases_ascii": [],
"keywords": [
"communication",
- "technology"
+ "technology",
+ "electronics",
+ "work",
+ "office"
],
"moji": "📠"
},
@@ -7856,7 +8637,7 @@
"unicode_alternates": [],
"name": "fearful face",
"shortname": ":fearful:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7867,8 +8648,10 @@
"terrified",
"fear",
"fearful",
- "scared",
- "frightened"
+ "frightened",
+ "smiley",
+ "surprised",
+ "emotion"
],
"moji": "😨"
},
@@ -7888,16 +8671,12 @@
"paw",
"pet",
"tracking",
- "paw",
"prints",
"mark",
"imprints",
"footsteps",
- "animal",
"lion",
"bear",
- "dog",
- "cat",
"raccoon",
"critter",
"feet",
@@ -7905,12 +8684,25 @@
],
"moji": "🐾"
},
+ "fencer": {
+ "unicode": "1F93A",
+ "unicode_alternates": [],
+ "name": "fencer",
+ "shortname": ":fencer:",
+ "category": "activity",
+ "aliases": [
+ ":fencing:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤺"
+ },
"ferris_wheel": {
"unicode": "1F3A1",
"unicode_alternates": [],
"name": "ferris wheel",
"shortname": ":ferris_wheel:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7923,13 +8715,16 @@
"park",
"fair",
"ride",
- "entertainment"
+ "entertainment",
+ "places",
+ "vacation",
+ "ferris wheel"
],
"moji": "🎡"
},
"ferry": {
"unicode": "26F4",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ferry",
"shortname": ":ferry:",
"category": "travel",
@@ -7938,33 +8733,44 @@
"keywords": [
"boat",
"place",
- "travel"
- ]
+ "travel",
+ "transportation",
+ "vacation"
+ ],
+ "moji": "⛴"
},
"field_hockey": {
"unicode": "1F3D1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "field hockey stick and ball",
"shortname": ":field_hockey:",
"category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "ball",
+ "sport",
+ "hockey"
+ ],
+ "moji": "🏑"
},
"file_cabinet": {
"unicode": "1F5C4",
"unicode_alternates": [],
"name": "file cabinet",
"shortname": ":file_cabinet:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"folders",
"office",
"documents",
- "storage"
- ]
+ "storage",
+ "object",
+ "work"
+ ],
+ "moji": "🗄"
},
"file_folder": {
"unicode": "1F4C1",
@@ -7975,7 +8781,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "documents"
+ "documents",
+ "work",
+ "office"
],
"moji": "📁"
},
@@ -7984,7 +8792,7 @@
"unicode_alternates": [],
"name": "film frames",
"shortname": ":film_frames:",
- "category": "activity",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -7993,95 +8801,96 @@
"8mm",
"16mm",
"reel",
- "celluloid"
- ]
+ "celluloid",
+ "object",
+ "camera"
+ ],
+ "moji": "🎞"
},
- "finger_pointing_down": {
- "unicode": "1F597",
+ "fingers_crossed": {
+ "unicode": "1F91E",
"unicode_alternates": [],
- "name": "white down pointing left hand index",
- "shortname": ":finger_pointing_down:",
+ "name": "hand with first and index finger crossed",
+ "shortname": ":fingers_crossed:",
"category": "people",
"aliases": [
- ":white_down_pointing_left_hand_index:"
+ ":hand_with_index_and_middle_finger_crossed:"
],
"aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ]
+ "keywords": [],
+ "moji": "🤞"
},
- "finger_pointing_down2": {
- "unicode": "1F59F",
+ "fingers_crossed_tone1": {
+ "unicode": "1F91E-1F3FB",
"unicode_alternates": [],
- "name": "sideways white down pointing index",
- "shortname": ":finger_pointing_down2:",
+ "name": "hand with index and middle fingers crossed tone 1",
+ "shortname": ":fingers_crossed_tone1:",
"category": "people",
"aliases": [
- ":sideways_white_down_pointing_index:"
+ ":hand_with_index_and_middle_fingers_crossed_tone1:"
],
"aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ]
+ "keywords": [],
+ "moji": "🤞🏻"
},
- "finger_pointing_left": {
- "unicode": "1F598",
+ "fingers_crossed_tone2": {
+ "unicode": "1F91E-1F3FC",
"unicode_alternates": [],
- "name": "sideways white left pointing index",
- "shortname": ":finger_pointing_left:",
+ "name": "hand with index and middle fingers crossed tone 2",
+ "shortname": ":fingers_crossed_tone2:",
"category": "people",
"aliases": [
- ":sideways_white_left_pointing_index:"
+ ":hand_with_index_and_middle_fingers_crossed_tone2:"
],
"aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ]
+ "keywords": [],
+ "moji": "🤞🏼"
},
- "finger_pointing_right": {
- "unicode": "1F599",
+ "fingers_crossed_tone3": {
+ "unicode": "1F91E-1F3FD",
"unicode_alternates": [],
- "name": "sideways white right pointing index",
- "shortname": ":finger_pointing_right:",
+ "name": "hand with index and middle fingers crossed tone 3",
+ "shortname": ":fingers_crossed_tone3:",
"category": "people",
"aliases": [
- ":sideways_white_right_pointing_index:"
+ ":hand_with_index_and_middle_fingers_crossed_tone3:"
],
"aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ]
+ "keywords": [],
+ "moji": "🤞🏽"
},
- "finger_pointing_up": {
- "unicode": "1F59E",
+ "fingers_crossed_tone4": {
+ "unicode": "1F91E-1F3FE",
"unicode_alternates": [],
- "name": "sideways white up pointing index",
- "shortname": ":finger_pointing_up:",
+ "name": "hand with index and middle fingers crossed tone 4",
+ "shortname": ":fingers_crossed_tone4:",
"category": "people",
"aliases": [
- ":sideways_white_up_pointing_index:"
+ ":hand_with_index_and_middle_fingers_crossed_tone4:"
],
"aliases_ascii": [],
- "keywords": [
- "direction",
- "finger",
- "hand"
- ]
+ "keywords": [],
+ "moji": "🤞🏾"
+ },
+ "fingers_crossed_tone5": {
+ "unicode": "1F91E-1F3FF",
+ "unicode_alternates": [],
+ "name": "hand with index and middle fingers crossed tone 5",
+ "shortname": ":fingers_crossed_tone5:",
+ "category": "people",
+ "aliases": [
+ ":hand_with_index_and_middle_fingers_crossed_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤞🏿"
},
"fire": {
"unicode": "1F525",
"unicode_alternates": [],
"name": "fire",
"shortname": ":fire:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [
":flame:"
],
@@ -8089,7 +8898,8 @@
"keywords": [
"cook",
"hot",
- "flame"
+ "flame",
+ "wth"
],
"moji": "🔥"
},
@@ -8098,7 +8908,7 @@
"unicode_alternates": [],
"name": "fire engine",
"shortname": ":fire_engine:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -8110,34 +8920,17 @@
"engine",
"truck",
"emergency",
- "medical"
+ "medical",
+ "911"
],
"moji": "🚒"
},
- "fire_engine_oncoming": {
- "unicode": "1F6F1",
- "unicode_alternates": [],
- "name": "oncoming fire engine",
- "shortname": ":fire_engine_oncoming:",
- "category": "travel_places",
- "aliases": [
- ":oncoming_fire_engine:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "transportation",
- "vehicle",
- "fighter",
- "truck",
- "emergency"
- ]
- },
"fireworks": {
"unicode": "1F386",
"unicode_alternates": [],
"name": "fireworks",
"shortname": ":fireworks:",
- "category": "objects",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -8154,10 +8947,24 @@
"rocket",
"sky",
"idea",
- "excitement"
+ "excitement",
+ "parties"
],
"moji": "🎆"
},
+ "first_place": {
+ "unicode": "1F947",
+ "unicode_alternates": [],
+ "name": "first place medal",
+ "shortname": ":first_place:",
+ "category": "activity",
+ "aliases": [
+ ":first_place_medal:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥇"
+ },
"first_quarter_moon": {
"unicode": "1F313",
"unicode_alternates": [],
@@ -8174,7 +8981,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌓"
},
@@ -8196,7 +9004,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌛"
},
@@ -8211,7 +9020,8 @@
"keywords": [
"animal",
"food",
- "nature"
+ "nature",
+ "wildlife"
],
"moji": "🐟"
},
@@ -8220,7 +9030,7 @@
"unicode_alternates": [],
"name": "fish cake with swirl design",
"shortname": ":fish_cake:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -8231,7 +9041,8 @@
"swirl",
"ramen",
"noodles",
- "naruto"
+ "naruto",
+ "sushi"
],
"moji": "🍥"
},
@@ -8240,7 +9051,7 @@
"unicode_alternates": [],
"name": "fishing pole and fish",
"shortname": ":fishing_pole_and_fish:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -8248,7 +9059,9 @@
"hobby",
"fish",
"fishing",
- "pole"
+ "pole",
+ "vacation",
+ "sport"
],
"moji": "🎣"
},
@@ -8257,19 +9070,25 @@
"unicode_alternates": [],
"name": "raised fist",
"shortname": ":fist:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fingers",
"grasp",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "hi",
+ "fist bump",
+ "diversity",
+ "condolence"
],
"moji": "✊"
},
"fist_tone1": {
"unicode": "270A-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised fist tone 1",
"shortname": ":fist_tone1:",
"category": "people",
@@ -8279,11 +9098,12 @@
"fingers",
"grasp",
"hand"
- ]
+ ],
+ "moji": "✊🏻"
},
"fist_tone2": {
"unicode": "270A-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised fist tone 2",
"shortname": ":fist_tone2:",
"category": "people",
@@ -8293,11 +9113,12 @@
"fingers",
"grasp",
"hand"
- ]
+ ],
+ "moji": "✊🏼"
},
"fist_tone3": {
"unicode": "270A-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised fist tone 3",
"shortname": ":fist_tone3:",
"category": "people",
@@ -8307,11 +9128,12 @@
"fingers",
"grasp",
"hand"
- ]
+ ],
+ "moji": "✊🏽"
},
"fist_tone4": {
"unicode": "270A-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised fist tone 4",
"shortname": ":fist_tone4:",
"category": "people",
@@ -8321,11 +9143,12 @@
"fingers",
"grasp",
"hand"
- ]
+ ],
+ "moji": "✊🏾"
},
"fist_tone5": {
"unicode": "270A-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised fist tone 5",
"shortname": ":fist_tone5:",
"category": "people",
@@ -8335,7 +9158,8 @@
"fingers",
"grasp",
"hand"
- ]
+ ],
+ "moji": "✊🏿"
},
"five": {
"moji": "5️⃣",
@@ -8343,15 +9167,18 @@
"unicode_alternates": [
"0035-FE0F-20E3"
],
- "name": "digit five",
+ "name": "keycap digit five",
"shortname": ":five:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
"numbers",
- "prime"
+ "prime",
+ "number",
+ "math",
+ "symbol"
]
},
"flag_ac": {
@@ -8367,8 +9194,10 @@
"keywords": [
"country",
"nation",
- "ac"
- ]
+ "ac",
+ "flag"
+ ],
+ "moji": "🇦🇨"
},
"flag_ad": {
"unicode": "1F1E6-1F1E9",
@@ -8383,8 +9212,10 @@
"keywords": [
"country",
"nation",
- "ad"
- ]
+ "ad",
+ "flag"
+ ],
+ "moji": "🇦🇩"
},
"flag_ae": {
"unicode": "1F1E6-1F1EA",
@@ -8399,8 +9230,10 @@
"keywords": [
"country",
"nation",
- "ae"
- ]
+ "ae",
+ "flag"
+ ],
+ "moji": "🇦🇪"
},
"flag_af": {
"unicode": "1F1E6-1F1EB",
@@ -8416,8 +9249,10 @@
"country",
"nation",
"afghanestan",
- "af"
- ]
+ "af",
+ "flag"
+ ],
+ "moji": "🇦🇫"
},
"flag_ag": {
"unicode": "1F1E6-1F1EC",
@@ -8432,8 +9267,10 @@
"keywords": [
"country",
"nation",
- "ag"
- ]
+ "ag",
+ "flag"
+ ],
+ "moji": "🇦🇬"
},
"flag_ai": {
"unicode": "1F1E6-1F1EE",
@@ -8448,8 +9285,10 @@
"keywords": [
"country",
"nation",
- "ai"
- ]
+ "ai",
+ "flag"
+ ],
+ "moji": "🇦🇮"
},
"flag_al": {
"unicode": "1F1E6-1F1F1",
@@ -8465,8 +9304,10 @@
"country",
"nation",
"shqiperia",
- "al"
- ]
+ "al",
+ "flag"
+ ],
+ "moji": "🇦🇱"
},
"flag_am": {
"unicode": "1F1E6-1F1F2",
@@ -8482,8 +9323,10 @@
"country",
"nation",
"hayastan",
- "am"
- ]
+ "am",
+ "flag"
+ ],
+ "moji": "🇦🇲"
},
"flag_ao": {
"unicode": "1F1E6-1F1F4",
@@ -8498,12 +9341,14 @@
"keywords": [
"country",
"nation",
- "ao"
- ]
+ "ao",
+ "flag"
+ ],
+ "moji": "🇦🇴"
},
"flag_aq": {
"unicode": "1F1E6-1F1F6",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "antarctica",
"shortname": ":flag_aq:",
"category": "flags",
@@ -8511,7 +9356,11 @@
":aq:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇦🇶"
},
"flag_ar": {
"unicode": "1F1E6-1F1F7",
@@ -8526,12 +9375,14 @@
"keywords": [
"country",
"nation",
- "ar"
- ]
+ "ar",
+ "flag"
+ ],
+ "moji": "🇦🇷"
},
"flag_as": {
"unicode": "1F1E6-1F1F8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "american samoa",
"shortname": ":flag_as:",
"category": "flags",
@@ -8539,7 +9390,11 @@
":as:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇦🇸"
},
"flag_at": {
"unicode": "1F1E6-1F1F9",
@@ -8556,8 +9411,10 @@
"nation",
"&ouml;sterreich",
"osterreich",
- "at"
- ]
+ "at",
+ "flag"
+ ],
+ "moji": "🇦🇹"
},
"flag_au": {
"unicode": "1F1E6-1F1FA",
@@ -8572,8 +9429,10 @@
"keywords": [
"country",
"nation",
- "au"
- ]
+ "au",
+ "flag"
+ ],
+ "moji": "🇦🇺"
},
"flag_aw": {
"unicode": "1F1E6-1F1FC",
@@ -8588,12 +9447,14 @@
"keywords": [
"country",
"nation",
- "aw"
- ]
+ "aw",
+ "flag"
+ ],
+ "moji": "🇦🇼"
},
"flag_ax": {
"unicode": "1F1E6-1F1FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "åland islands",
"shortname": ":flag_ax:",
"category": "flags",
@@ -8601,7 +9462,11 @@
":ax:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇦🇽"
},
"flag_az": {
"unicode": "1F1E6-1F1FF",
@@ -8617,8 +9482,10 @@
"country",
"nation",
"azarbaycan",
- "az"
- ]
+ "az",
+ "flag"
+ ],
+ "moji": "🇦🇿"
},
"flag_ba": {
"unicode": "1F1E7-1F1E6",
@@ -8634,8 +9501,10 @@
"country",
"nation",
"bosna i hercegovina",
- "ba"
- ]
+ "ba",
+ "flag"
+ ],
+ "moji": "🇧🇦"
},
"flag_bb": {
"unicode": "1F1E7-1F1E7",
@@ -8650,8 +9519,10 @@
"keywords": [
"country",
"nation",
- "bb"
- ]
+ "bb",
+ "flag"
+ ],
+ "moji": "🇧🇧"
},
"flag_bd": {
"unicode": "1F1E7-1F1E9",
@@ -8666,8 +9537,10 @@
"keywords": [
"country",
"nation",
- "bd"
- ]
+ "bd",
+ "flag"
+ ],
+ "moji": "🇧🇩"
},
"flag_be": {
"unicode": "1F1E7-1F1EA",
@@ -8684,8 +9557,10 @@
"nation",
"belgique",
"belgie",
- "be"
- ]
+ "be",
+ "flag"
+ ],
+ "moji": "🇧🇪"
},
"flag_bf": {
"unicode": "1F1E7-1F1EB",
@@ -8700,8 +9575,10 @@
"keywords": [
"country",
"nation",
- "bf"
- ]
+ "bf",
+ "flag"
+ ],
+ "moji": "🇧🇫"
},
"flag_bg": {
"unicode": "1F1E7-1F1EC",
@@ -8716,8 +9593,10 @@
"keywords": [
"country",
"nation",
- "bg"
- ]
+ "bg",
+ "flag"
+ ],
+ "moji": "🇧🇬"
},
"flag_bh": {
"unicode": "1F1E7-1F1ED",
@@ -8733,8 +9612,10 @@
"country",
"nation",
"al bahrayn",
- "bh"
- ]
+ "bh",
+ "flag"
+ ],
+ "moji": "🇧🇭"
},
"flag_bi": {
"unicode": "1F1E7-1F1EE",
@@ -8749,8 +9630,10 @@
"keywords": [
"country",
"nation",
- "bi"
- ]
+ "bi",
+ "flag"
+ ],
+ "moji": "🇧🇮"
},
"flag_bj": {
"unicode": "1F1E7-1F1EF",
@@ -8765,12 +9648,14 @@
"keywords": [
"country",
"nation",
- "bj"
- ]
+ "bj",
+ "flag"
+ ],
+ "moji": "🇧🇯"
},
"flag_bl": {
"unicode": "1F1E7-1F1F1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "saint barthélemy",
"shortname": ":flag_bl:",
"category": "flags",
@@ -8778,22 +9663,28 @@
":bl:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇧🇱"
},
"flag_black": {
"unicode": "1F3F4",
"unicode_alternates": [],
"name": "waving black flag",
"shortname": ":flag_black:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":waving_black_flag:"
],
"aliases_ascii": [],
"keywords": [
"symbol",
- "signal"
- ]
+ "signal",
+ "object"
+ ],
+ "moji": "🏴"
},
"flag_bm": {
"unicode": "1F1E7-1F1F2",
@@ -8808,8 +9699,10 @@
"keywords": [
"country",
"nation",
- "bm"
- ]
+ "bm",
+ "flag"
+ ],
+ "moji": "🇧🇲"
},
"flag_bn": {
"unicode": "1F1E7-1F1F3",
@@ -8824,8 +9717,10 @@
"keywords": [
"country",
"nation",
- "bn"
- ]
+ "bn",
+ "flag"
+ ],
+ "moji": "🇧🇳"
},
"flag_bo": {
"unicode": "1F1E7-1F1F4",
@@ -8840,12 +9735,14 @@
"keywords": [
"country",
"nation",
- "bo"
- ]
+ "bo",
+ "flag"
+ ],
+ "moji": "🇧🇴"
},
"flag_bq": {
"unicode": "1F1E7-1F1F6",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "caribbean netherlands",
"shortname": ":flag_bq:",
"category": "flags",
@@ -8853,7 +9750,11 @@
":bq:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇧🇶"
},
"flag_br": {
"unicode": "1F1E7-1F1F7",
@@ -8869,8 +9770,10 @@
"country",
"nation",
"brasil",
- "br"
- ]
+ "br",
+ "flag"
+ ],
+ "moji": "🇧🇷"
},
"flag_bs": {
"unicode": "1F1E7-1F1F8",
@@ -8885,8 +9788,10 @@
"keywords": [
"country",
"nation",
- "bs"
- ]
+ "bs",
+ "flag"
+ ],
+ "moji": "🇧🇸"
},
"flag_bt": {
"unicode": "1F1E7-1F1F9",
@@ -8901,12 +9806,14 @@
"keywords": [
"country",
"nation",
- "bt"
- ]
+ "bt",
+ "flag"
+ ],
+ "moji": "🇧🇹"
},
"flag_bv": {
"unicode": "1F1E7-1F1FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "bouvet island",
"shortname": ":flag_bv:",
"category": "flags",
@@ -8914,7 +9821,11 @@
":bv:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇧🇻"
},
"flag_bw": {
"unicode": "1F1E7-1F1FC",
@@ -8929,8 +9840,10 @@
"keywords": [
"country",
"nation",
- "bw"
- ]
+ "bw",
+ "flag"
+ ],
+ "moji": "🇧🇼"
},
"flag_by": {
"unicode": "1F1E7-1F1FE",
@@ -8946,8 +9859,10 @@
"country",
"nation",
"byelarus",
- "by"
- ]
+ "by",
+ "flag"
+ ],
+ "moji": "🇧🇾"
},
"flag_bz": {
"unicode": "1F1E7-1F1FF",
@@ -8962,8 +9877,10 @@
"keywords": [
"country",
"nation",
- "bz"
- ]
+ "bz",
+ "flag"
+ ],
+ "moji": "🇧🇿"
},
"flag_ca": {
"unicode": "1F1E8-1F1E6",
@@ -8978,12 +9895,14 @@
"keywords": [
"country",
"nation",
- "ca"
- ]
+ "ca",
+ "flag"
+ ],
+ "moji": "🇨🇦"
},
"flag_cc": {
"unicode": "1F1E8-1F1E8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "cocos (keeling) islands",
"shortname": ":flag_cc:",
"category": "flags",
@@ -8991,7 +9910,11 @@
":cc:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇨🇨"
},
"flag_cd": {
"unicode": "1F1E8-1F1E9",
@@ -9008,8 +9931,10 @@
"nation",
"r&eacute;publique d&eacute;mocratique du congo",
"republique democratique du congo",
- "cd"
- ]
+ "cd",
+ "flag"
+ ],
+ "moji": "🇨🇩"
},
"flag_cf": {
"unicode": "1F1E8-1F1EB",
@@ -9024,8 +9949,10 @@
"keywords": [
"country",
"nation",
- "cf"
- ]
+ "cf",
+ "flag"
+ ],
+ "moji": "🇨🇫"
},
"flag_cg": {
"unicode": "1F1E8-1F1EC",
@@ -9040,8 +9967,10 @@
"keywords": [
"country",
"nation",
- "cg"
- ]
+ "cg",
+ "flag"
+ ],
+ "moji": "🇨🇬"
},
"flag_ch": {
"unicode": "1F1E8-1F1ED",
@@ -9056,8 +9985,11 @@
"keywords": [
"country",
"nation",
- "swiss"
- ]
+ "swiss",
+ "neutral",
+ "flag"
+ ],
+ "moji": "🇨🇭"
},
"flag_ci": {
"unicode": "1F1E8-1F1EE",
@@ -9072,12 +10004,14 @@
"keywords": [
"country",
"nation",
- "ci"
- ]
+ "ci",
+ "flag"
+ ],
+ "moji": "🇨🇮"
},
"flag_ck": {
"unicode": "1F1E8-1F1F0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "cook islands",
"shortname": ":flag_ck:",
"category": "flags",
@@ -9085,7 +10019,11 @@
":ck:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇨🇰"
},
"flag_cl": {
"unicode": "1F1E8-1F1F1",
@@ -9100,8 +10038,10 @@
"keywords": [
"country",
"nation",
- "cl"
- ]
+ "cl",
+ "flag"
+ ],
+ "moji": "🇨🇱"
},
"flag_cm": {
"unicode": "1F1E8-1F1F2",
@@ -9116,8 +10056,10 @@
"keywords": [
"country",
"nation",
- "cm"
- ]
+ "cm",
+ "flag"
+ ],
+ "moji": "🇨🇲"
},
"flag_cn": {
"unicode": "1F1E8-1F1F3",
@@ -9135,8 +10077,10 @@
"zhong guo",
"country",
"nation",
- "cn"
- ]
+ "cn",
+ "flag"
+ ],
+ "moji": "🇨🇳"
},
"flag_co": {
"unicode": "1F1E8-1F1F4",
@@ -9151,12 +10095,14 @@
"keywords": [
"country",
"nation",
- "co"
- ]
+ "co",
+ "flag"
+ ],
+ "moji": "🇨🇴"
},
"flag_cp": {
"unicode": "1F1E8-1F1F5",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "clipperton island",
"shortname": ":flag_cp:",
"category": "flags",
@@ -9164,7 +10110,11 @@
":cp:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇨🇵"
},
"flag_cr": {
"unicode": "1F1E8-1F1F7",
@@ -9179,8 +10129,10 @@
"keywords": [
"country",
"nation",
- "cr"
- ]
+ "cr",
+ "flag"
+ ],
+ "moji": "🇨🇷"
},
"flag_cu": {
"unicode": "1F1E8-1F1FA",
@@ -9195,8 +10147,10 @@
"keywords": [
"country",
"nation",
- "cu"
- ]
+ "cu",
+ "flag"
+ ],
+ "moji": "🇨🇺"
},
"flag_cv": {
"unicode": "1F1E8-1F1FB",
@@ -9212,12 +10166,14 @@
"country",
"nation",
"cabo verde",
- "cv"
- ]
+ "cv",
+ "flag"
+ ],
+ "moji": "🇨🇻"
},
"flag_cw": {
"unicode": "1F1E8-1F1FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "curaçao",
"shortname": ":flag_cw:",
"category": "flags",
@@ -9225,11 +10181,15 @@
":cw:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇨🇼"
},
"flag_cx": {
"unicode": "1F1E8-1F1FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "christmas island",
"shortname": ":flag_cx:",
"category": "flags",
@@ -9237,7 +10197,11 @@
":cx:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇨🇽"
},
"flag_cy": {
"unicode": "1F1E8-1F1FE",
@@ -9254,8 +10218,10 @@
"nation",
"kibris",
"kypros",
- "cy"
- ]
+ "cy",
+ "flag"
+ ],
+ "moji": "🇨🇾"
},
"flag_cz": {
"unicode": "1F1E8-1F1FF",
@@ -9271,8 +10237,10 @@
"country",
"nation",
"ceska republika",
- "cz"
- ]
+ "cz",
+ "flag"
+ ],
+ "moji": "🇨🇿"
},
"flag_de": {
"unicode": "1F1E9-1F1EA",
@@ -9289,12 +10257,14 @@
"nation",
"deutschland",
"country",
- "de"
- ]
+ "de",
+ "flag"
+ ],
+ "moji": "🇩🇪"
},
"flag_dg": {
"unicode": "1F1E9-1F1EC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "diego garcia",
"shortname": ":flag_dg:",
"category": "flags",
@@ -9302,7 +10272,11 @@
":dg:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇩🇬"
},
"flag_dj": {
"unicode": "1F1E9-1F1EF",
@@ -9317,8 +10291,10 @@
"keywords": [
"country",
"nation",
- "dj"
- ]
+ "dj",
+ "flag"
+ ],
+ "moji": "🇩🇯"
},
"flag_dk": {
"unicode": "1F1E9-1F1F0",
@@ -9334,8 +10310,10 @@
"country",
"nation",
"danmark",
- "dk"
- ]
+ "dk",
+ "flag"
+ ],
+ "moji": "🇩🇰"
},
"flag_dm": {
"unicode": "1F1E9-1F1F2",
@@ -9350,8 +10328,10 @@
"keywords": [
"country",
"nation",
- "dm"
- ]
+ "dm",
+ "flag"
+ ],
+ "moji": "🇩🇲"
},
"flag_do": {
"unicode": "1F1E9-1F1F4",
@@ -9366,8 +10346,10 @@
"keywords": [
"country",
"nation",
- "do"
- ]
+ "do",
+ "flag"
+ ],
+ "moji": "🇩🇴"
},
"flag_dz": {
"unicode": "1F1E9-1F1FF",
@@ -9384,12 +10366,14 @@
"nation",
"al jaza'ir",
"al jazair",
- "dz"
- ]
+ "dz",
+ "flag"
+ ],
+ "moji": "🇩🇿"
},
"flag_ea": {
"unicode": "1F1EA-1F1E6",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ceuta, melilla",
"shortname": ":flag_ea:",
"category": "flags",
@@ -9397,7 +10381,11 @@
":ea:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇪🇦"
},
"flag_ec": {
"unicode": "1F1EA-1F1E8",
@@ -9412,8 +10400,10 @@
"keywords": [
"country",
"nation",
- "ec"
- ]
+ "ec",
+ "flag"
+ ],
+ "moji": "🇪🇨"
},
"flag_ee": {
"unicode": "1F1EA-1F1EA",
@@ -9429,8 +10419,10 @@
"country",
"nation",
"eesti vabariik",
- "ee"
- ]
+ "ee",
+ "flag"
+ ],
+ "moji": "🇪🇪"
},
"flag_eg": {
"unicode": "1F1EA-1F1EC",
@@ -9446,8 +10438,10 @@
"country",
"nation",
"misr",
- "eg"
- ]
+ "eg",
+ "flag"
+ ],
+ "moji": "🇪🇬"
},
"flag_eh": {
"unicode": "1F1EA-1F1ED",
@@ -9465,8 +10459,10 @@
"aṣ-Ṣaḥrā’ al-gharbīyah",
"sahra",
"gharbiyah",
- "eh"
- ]
+ "eh",
+ "flag"
+ ],
+ "moji": "🇪🇭"
},
"flag_er": {
"unicode": "1F1EA-1F1F7",
@@ -9482,8 +10478,10 @@
"country",
"nation",
"hagere ertra",
- "er"
- ]
+ "er",
+ "flag"
+ ],
+ "moji": "🇪🇷"
},
"flag_es": {
"unicode": "1F1EA-1F1F8",
@@ -9500,8 +10498,10 @@
"espa&ntilde;a",
"country",
"espana",
- "es"
- ]
+ "es",
+ "flag"
+ ],
+ "moji": "🇪🇸"
},
"flag_et": {
"unicode": "1F1EA-1F1F9",
@@ -9518,12 +10518,14 @@
"nation",
"ityop'iya",
"ityopiya",
- "et"
- ]
+ "et",
+ "flag"
+ ],
+ "moji": "🇪🇹"
},
"flag_eu": {
"unicode": "1F1EA-1F1FA",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "european union",
"shortname": ":flag_eu:",
"category": "flags",
@@ -9531,7 +10533,11 @@
":eu:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇪🇺"
},
"flag_fi": {
"unicode": "1F1EB-1F1EE",
@@ -9547,8 +10553,10 @@
"country",
"nation",
"suomen tasavalta",
- "fi"
- ]
+ "fi",
+ "flag"
+ ],
+ "moji": "🇫🇮"
},
"flag_fj": {
"unicode": "1F1EB-1F1EF",
@@ -9563,8 +10571,10 @@
"keywords": [
"country",
"nation",
- "fj"
- ]
+ "fj",
+ "flag"
+ ],
+ "moji": "🇫🇯"
},
"flag_fk": {
"unicode": "1F1EB-1F1F0",
@@ -9580,8 +10590,10 @@
"country",
"nation",
"islas malvinas",
- "fk"
- ]
+ "fk",
+ "flag"
+ ],
+ "moji": "🇫🇰"
},
"flag_fm": {
"unicode": "1F1EB-1F1F2",
@@ -9596,8 +10608,10 @@
"keywords": [
"country",
"nation",
- "fm"
- ]
+ "fm",
+ "flag"
+ ],
+ "moji": "🇫🇲"
},
"flag_fo": {
"unicode": "1F1EB-1F1F4",
@@ -9613,8 +10627,10 @@
"country",
"nation",
"foroyar",
- "fo"
- ]
+ "fo",
+ "flag"
+ ],
+ "moji": "🇫🇴"
},
"flag_fr": {
"unicode": "1F1EB-1F1F7",
@@ -9630,8 +10646,10 @@
"french",
"nation",
"country",
- "fr"
- ]
+ "fr",
+ "flag"
+ ],
+ "moji": "🇫🇷"
},
"flag_ga": {
"unicode": "1F1EC-1F1E6",
@@ -9646,8 +10664,10 @@
"keywords": [
"country",
"nation",
- "ga"
- ]
+ "ga",
+ "flag"
+ ],
+ "moji": "🇬🇦"
},
"flag_gb": {
"unicode": "1F1EC-1F1E7",
@@ -9666,8 +10686,10 @@
"nation",
"united kingdom",
"england",
- "country"
- ]
+ "country",
+ "flag"
+ ],
+ "moji": "🇬🇧"
},
"flag_gd": {
"unicode": "1F1EC-1F1E9",
@@ -9682,8 +10704,10 @@
"keywords": [
"country",
"nation",
- "gd"
- ]
+ "gd",
+ "flag"
+ ],
+ "moji": "🇬🇩"
},
"flag_ge": {
"unicode": "1F1EC-1F1EA",
@@ -9700,12 +10724,14 @@
"nation",
"sak'art'velo",
"sakartvelo",
- "ge"
- ]
+ "ge",
+ "flag"
+ ],
+ "moji": "🇬🇪"
},
"flag_gf": {
"unicode": "1F1EC-1F1EB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "french guiana",
"shortname": ":flag_gf:",
"category": "flags",
@@ -9713,11 +10739,15 @@
":gf:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇬🇫"
},
"flag_gg": {
"unicode": "1F1EC-1F1EC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guernsey",
"shortname": ":flag_gg:",
"category": "flags",
@@ -9725,7 +10755,11 @@
":gg:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇬🇬"
},
"flag_gh": {
"unicode": "1F1EC-1F1ED",
@@ -9740,8 +10774,10 @@
"keywords": [
"country",
"nation",
- "gh"
- ]
+ "gh",
+ "flag"
+ ],
+ "moji": "🇬🇭"
},
"flag_gi": {
"unicode": "1F1EC-1F1EE",
@@ -9756,8 +10792,10 @@
"keywords": [
"country",
"nation",
- "gi"
- ]
+ "gi",
+ "flag"
+ ],
+ "moji": "🇬🇮"
},
"flag_gl": {
"unicode": "1F1EC-1F1F1",
@@ -9773,8 +10811,10 @@
"country",
"nation",
"kalaallit nunaat",
- "gl"
- ]
+ "gl",
+ "flag"
+ ],
+ "moji": "🇬🇱"
},
"flag_gm": {
"unicode": "1F1EC-1F1F2",
@@ -9789,8 +10829,10 @@
"keywords": [
"country",
"nation",
- "gm"
- ]
+ "gm",
+ "flag"
+ ],
+ "moji": "🇬🇲"
},
"flag_gn": {
"unicode": "1F1EC-1F1F3",
@@ -9806,12 +10848,14 @@
"country",
"nation",
"guinee",
- "gn"
- ]
+ "gn",
+ "flag"
+ ],
+ "moji": "🇬🇳"
},
"flag_gp": {
"unicode": "1F1EC-1F1F5",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guadeloupe",
"shortname": ":flag_gp:",
"category": "flags",
@@ -9819,7 +10863,11 @@
":gp:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇬🇵"
},
"flag_gq": {
"unicode": "1F1EC-1F1F6",
@@ -9835,8 +10883,10 @@
"country",
"nation",
"guinea ecuatorial",
- "gq"
- ]
+ "gq",
+ "flag"
+ ],
+ "moji": "🇬🇶"
},
"flag_gr": {
"unicode": "1F1EC-1F1F7",
@@ -9853,12 +10903,14 @@
"nation",
"ellas",
"ellada",
- "gr"
- ]
+ "gr",
+ "flag"
+ ],
+ "moji": "🇬🇷"
},
"flag_gs": {
"unicode": "1F1EC-1F1F8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "south georgia",
"shortname": ":flag_gs:",
"category": "flags",
@@ -9866,7 +10918,11 @@
":gs:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇬🇸"
},
"flag_gt": {
"unicode": "1F1EC-1F1F9",
@@ -9881,8 +10937,10 @@
"keywords": [
"country",
"nation",
- "gt"
- ]
+ "gt",
+ "flag"
+ ],
+ "moji": "🇬🇹"
},
"flag_gu": {
"unicode": "1F1EC-1F1FA",
@@ -9897,8 +10955,10 @@
"keywords": [
"country",
"nation",
- "gu"
- ]
+ "gu",
+ "flag"
+ ],
+ "moji": "🇬🇺"
},
"flag_gw": {
"unicode": "1F1EC-1F1FC",
@@ -9915,8 +10975,10 @@
"nation",
"guine-bissau",
"guine bissau",
- "gw"
- ]
+ "gw",
+ "flag"
+ ],
+ "moji": "🇬🇼"
},
"flag_gy": {
"unicode": "1F1EC-1F1FE",
@@ -9931,8 +10993,10 @@
"keywords": [
"country",
"nation",
- "gy"
- ]
+ "gy",
+ "flag"
+ ],
+ "moji": "🇬🇾"
},
"flag_hk": {
"unicode": "1F1ED-1F1F0",
@@ -9948,12 +11012,14 @@
"country",
"nation",
"xianggang",
- "hk"
- ]
+ "hk",
+ "flag"
+ ],
+ "moji": "🇭🇰"
},
"flag_hm": {
"unicode": "1F1ED-1F1F2",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "heard island and mcdonald islands",
"shortname": ":flag_hm:",
"category": "flags",
@@ -9961,7 +11027,11 @@
":hm:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇭🇲"
},
"flag_hn": {
"unicode": "1F1ED-1F1F3",
@@ -9976,8 +11046,10 @@
"keywords": [
"country",
"nation",
- "hn"
- ]
+ "hn",
+ "flag"
+ ],
+ "moji": "🇭🇳"
},
"flag_hr": {
"unicode": "1F1ED-1F1F7",
@@ -9993,8 +11065,10 @@
"country",
"nation",
"hrvatska",
- "hr"
- ]
+ "hr",
+ "flag"
+ ],
+ "moji": "🇭🇷"
},
"flag_ht": {
"unicode": "1F1ED-1F1F9",
@@ -10009,8 +11083,10 @@
"keywords": [
"country",
"nation",
- "ht"
- ]
+ "ht",
+ "flag"
+ ],
+ "moji": "🇭🇹"
},
"flag_hu": {
"unicode": "1F1ED-1F1FA",
@@ -10026,12 +11102,14 @@
"country",
"nation",
"magyarorszag",
- "hu"
- ]
+ "hu",
+ "flag"
+ ],
+ "moji": "🇭🇺"
},
"flag_ic": {
"unicode": "1F1EE-1F1E8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "canary islands",
"shortname": ":flag_ic:",
"category": "flags",
@@ -10039,7 +11117,11 @@
":ic:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇮🇨"
},
"flag_id": {
"unicode": "1F1EE-1F1E9",
@@ -10054,8 +11136,10 @@
"keywords": [
"country",
"nation",
- "id"
- ]
+ "id",
+ "flag"
+ ],
+ "moji": "🇮🇩"
},
"flag_ie": {
"unicode": "1F1EE-1F1EA",
@@ -10072,8 +11156,10 @@
"nation",
"&eacute;ire",
"eire",
- "ie"
- ]
+ "ie",
+ "flag"
+ ],
+ "moji": "🇮🇪"
},
"flag_il": {
"unicode": "1F1EE-1F1F1",
@@ -10090,12 +11176,15 @@
"nation",
"yisra'el",
"yisrael",
- "il"
- ]
+ "il",
+ "jew",
+ "flag"
+ ],
+ "moji": "🇮🇱"
},
"flag_im": {
"unicode": "1F1EE-1F1F2",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "isle of man",
"shortname": ":flag_im:",
"category": "flags",
@@ -10103,7 +11192,11 @@
":im:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇮🇲"
},
"flag_in": {
"unicode": "1F1EE-1F1F3",
@@ -10119,12 +11212,14 @@
"country",
"nation",
"bharat",
- "in"
- ]
+ "in",
+ "flag"
+ ],
+ "moji": "🇮🇳"
},
"flag_io": {
"unicode": "1F1EE-1F1F4",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "british indian ocean territory",
"shortname": ":flag_io:",
"category": "flags",
@@ -10132,7 +11227,11 @@
":io:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇮🇴"
},
"flag_iq": {
"unicode": "1F1EE-1F1F6",
@@ -10147,8 +11246,10 @@
"keywords": [
"country",
"nation",
- "iq"
- ]
+ "iq",
+ "flag"
+ ],
+ "moji": "🇮🇶"
},
"flag_ir": {
"unicode": "1F1EE-1F1F7",
@@ -10163,8 +11264,10 @@
"keywords": [
"country",
"nation",
- "ir"
- ]
+ "ir",
+ "flag"
+ ],
+ "moji": "🇮🇷"
},
"flag_is": {
"unicode": "1F1EE-1F1F8",
@@ -10180,8 +11283,10 @@
"country",
"nation",
"lyoveldio island",
- "is"
- ]
+ "is",
+ "flag"
+ ],
+ "moji": "🇮🇸"
},
"flag_it": {
"unicode": "1F1EE-1F1F9",
@@ -10197,8 +11302,11 @@
"italia",
"country",
"nation",
- "it"
- ]
+ "it",
+ "italian",
+ "flag"
+ ],
+ "moji": "🇮🇹"
},
"flag_je": {
"unicode": "1F1EF-1F1EA",
@@ -10213,8 +11321,10 @@
"keywords": [
"country",
"nation",
- "je"
- ]
+ "je",
+ "flag"
+ ],
+ "moji": "🇯🇪"
},
"flag_jm": {
"unicode": "1F1EF-1F1F2",
@@ -10229,8 +11339,10 @@
"keywords": [
"country",
"nation",
- "jm"
- ]
+ "jm",
+ "flag"
+ ],
+ "moji": "🇯🇲"
},
"flag_jo": {
"unicode": "1F1EF-1F1F4",
@@ -10246,8 +11358,10 @@
"country",
"nation",
"al urdun",
- "jo"
- ]
+ "jo",
+ "flag"
+ ],
+ "moji": "🇯🇴"
},
"flag_jp": {
"unicode": "1F1EF-1F1F5",
@@ -10263,8 +11377,11 @@
"nation",
"nippon",
"country",
- "jp"
- ]
+ "jp",
+ "japan",
+ "flag"
+ ],
+ "moji": "🇯🇵"
},
"flag_ke": {
"unicode": "1F1F0-1F1EA",
@@ -10279,8 +11396,10 @@
"keywords": [
"country",
"nation",
- "ke"
- ]
+ "ke",
+ "flag"
+ ],
+ "moji": "🇰🇪"
},
"flag_kg": {
"unicode": "1F1F0-1F1EC",
@@ -10296,8 +11415,10 @@
"country",
"nation",
"kyrgyz respublikasy",
- "kg"
- ]
+ "kg",
+ "flag"
+ ],
+ "moji": "🇰🇬"
},
"flag_kh": {
"unicode": "1F1F0-1F1ED",
@@ -10313,8 +11434,10 @@
"country",
"nation",
"kampuchea",
- "kh"
- ]
+ "kh",
+ "flag"
+ ],
+ "moji": "🇰🇭"
},
"flag_ki": {
"unicode": "1F1F0-1F1EE",
@@ -10331,8 +11454,10 @@
"nation",
"kiribati",
"kiribas",
- "ki"
- ]
+ "ki",
+ "flag"
+ ],
+ "moji": "🇰🇮"
},
"flag_km": {
"unicode": "1F1F0-1F1F2",
@@ -10347,8 +11472,10 @@
"keywords": [
"country",
"nation",
- "km"
- ]
+ "km",
+ "flag"
+ ],
+ "moji": "🇰🇲"
},
"flag_kn": {
"unicode": "1F1F0-1F1F3",
@@ -10363,8 +11490,10 @@
"keywords": [
"country",
"nation",
- "kn"
- ]
+ "kn",
+ "flag"
+ ],
+ "moji": "🇰🇳"
},
"flag_kp": {
"unicode": "1F1F0-1F1F5",
@@ -10379,8 +11508,10 @@
"keywords": [
"country",
"nation",
- "kp"
- ]
+ "kp",
+ "flag"
+ ],
+ "moji": "🇰🇵"
},
"flag_kr": {
"unicode": "1F1F0-1F1F7",
@@ -10396,8 +11527,10 @@
"nation",
"country",
"south korea",
- "kr"
- ]
+ "kr",
+ "flag"
+ ],
+ "moji": "🇰🇷"
},
"flag_kw": {
"unicode": "1F1F0-1F1FC",
@@ -10413,8 +11546,10 @@
"country",
"nation",
"al kuwayt",
- "kw"
- ]
+ "kw",
+ "flag"
+ ],
+ "moji": "🇰🇼"
},
"flag_ky": {
"unicode": "1F1F0-1F1FE",
@@ -10429,8 +11564,10 @@
"keywords": [
"country",
"nation",
- "ky"
- ]
+ "ky",
+ "flag"
+ ],
+ "moji": "🇰🇾"
},
"flag_kz": {
"unicode": "1F1F0-1F1FF",
@@ -10446,8 +11583,10 @@
"country",
"nation",
"qazaqstan",
- "kz"
- ]
+ "kz",
+ "flag"
+ ],
+ "moji": "🇰🇿"
},
"flag_la": {
"unicode": "1F1F1-1F1E6",
@@ -10462,8 +11601,10 @@
"keywords": [
"country",
"nation",
- "la"
- ]
+ "la",
+ "flag"
+ ],
+ "moji": "🇱🇦"
},
"flag_lb": {
"unicode": "1F1F1-1F1E7",
@@ -10479,8 +11620,10 @@
"country",
"nation",
"lubnan",
- "lb"
- ]
+ "lb",
+ "flag"
+ ],
+ "moji": "🇱🇧"
},
"flag_lc": {
"unicode": "1F1F1-1F1E8",
@@ -10495,8 +11638,10 @@
"keywords": [
"country",
"nation",
- "lc"
- ]
+ "lc",
+ "flag"
+ ],
+ "moji": "🇱🇨"
},
"flag_li": {
"unicode": "1F1F1-1F1EE",
@@ -10511,8 +11656,10 @@
"keywords": [
"country",
"nation",
- "li"
- ]
+ "li",
+ "flag"
+ ],
+ "moji": "🇱🇮"
},
"flag_lk": {
"unicode": "1F1F1-1F1F0",
@@ -10527,8 +11674,10 @@
"keywords": [
"country",
"nation",
- "lk"
- ]
+ "lk",
+ "flag"
+ ],
+ "moji": "🇱🇰"
},
"flag_lr": {
"unicode": "1F1F1-1F1F7",
@@ -10543,8 +11692,10 @@
"keywords": [
"country",
"nation",
- "lr"
- ]
+ "lr",
+ "flag"
+ ],
+ "moji": "🇱🇷"
},
"flag_ls": {
"unicode": "1F1F1-1F1F8",
@@ -10559,8 +11710,10 @@
"keywords": [
"country",
"nation",
- "ls"
- ]
+ "ls",
+ "flag"
+ ],
+ "moji": "🇱🇸"
},
"flag_lt": {
"unicode": "1F1F1-1F1F9",
@@ -10576,8 +11729,10 @@
"country",
"nation",
"lietuva",
- "lt"
- ]
+ "lt",
+ "flag"
+ ],
+ "moji": "🇱🇹"
},
"flag_lu": {
"unicode": "1F1F1-1F1FA",
@@ -10594,8 +11749,10 @@
"nation",
"luxembourg",
"letzebuerg",
- "lu"
- ]
+ "lu",
+ "flag"
+ ],
+ "moji": "🇱🇺"
},
"flag_lv": {
"unicode": "1F1F1-1F1FB",
@@ -10611,8 +11768,10 @@
"country",
"nation",
"latvija",
- "lv"
- ]
+ "lv",
+ "flag"
+ ],
+ "moji": "🇱🇻"
},
"flag_ly": {
"unicode": "1F1F1-1F1FE",
@@ -10628,8 +11787,10 @@
"country",
"nation",
"libiyah",
- "ly"
- ]
+ "ly",
+ "flag"
+ ],
+ "moji": "🇱🇾"
},
"flag_ma": {
"unicode": "1F1F2-1F1E6",
@@ -10645,8 +11806,10 @@
"country",
"nation",
"al maghrib",
- "ma"
- ]
+ "ma",
+ "flag"
+ ],
+ "moji": "🇲🇦"
},
"flag_mc": {
"unicode": "1F1F2-1F1E8",
@@ -10661,8 +11824,10 @@
"keywords": [
"country",
"nation",
- "mc"
- ]
+ "mc",
+ "flag"
+ ],
+ "moji": "🇲🇨"
},
"flag_md": {
"unicode": "1F1F2-1F1E9",
@@ -10677,8 +11842,10 @@
"keywords": [
"country",
"nation",
- "md"
- ]
+ "md",
+ "flag"
+ ],
+ "moji": "🇲🇩"
},
"flag_me": {
"unicode": "1F1F2-1F1EA",
@@ -10694,12 +11861,14 @@
"country",
"nation",
"crna gora",
- "me"
- ]
+ "me",
+ "flag"
+ ],
+ "moji": "🇲🇪"
},
"flag_mf": {
"unicode": "1F1F2-1F1EB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "saint martin",
"shortname": ":flag_mf:",
"category": "flags",
@@ -10707,7 +11876,11 @@
":mf:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇲🇫"
},
"flag_mg": {
"unicode": "1F1F2-1F1EC",
@@ -10722,8 +11895,10 @@
"keywords": [
"country",
"nation",
- "mg"
- ]
+ "mg",
+ "flag"
+ ],
+ "moji": "🇲🇬"
},
"flag_mh": {
"unicode": "1F1F2-1F1ED",
@@ -10738,8 +11913,10 @@
"keywords": [
"country",
"nation",
- "mh"
- ]
+ "mh",
+ "flag"
+ ],
+ "moji": "🇲🇭"
},
"flag_mk": {
"unicode": "1F1F2-1F1F0",
@@ -10754,8 +11931,10 @@
"keywords": [
"country",
"nation",
- "mk"
- ]
+ "mk",
+ "flag"
+ ],
+ "moji": "🇲🇰"
},
"flag_ml": {
"unicode": "1F1F2-1F1F1",
@@ -10770,8 +11949,10 @@
"keywords": [
"country",
"nation",
- "ml"
- ]
+ "ml",
+ "flag"
+ ],
+ "moji": "🇲🇱"
},
"flag_mm": {
"unicode": "1F1F2-1F1F2",
@@ -10787,8 +11968,10 @@
"country",
"nation",
"myanma naingngandaw",
- "mm"
- ]
+ "mm",
+ "flag"
+ ],
+ "moji": "🇲🇲"
},
"flag_mn": {
"unicode": "1F1F2-1F1F3",
@@ -10804,8 +11987,10 @@
"country",
"nation",
"mongol uls",
- "mn"
- ]
+ "mn",
+ "flag"
+ ],
+ "moji": "🇲🇳"
},
"flag_mo": {
"unicode": "1F1F2-1F1F4",
@@ -10821,12 +12006,14 @@
"country",
"nation",
"aomen",
- "mo"
- ]
+ "mo",
+ "flag"
+ ],
+ "moji": "🇲🇴"
},
"flag_mp": {
"unicode": "1F1F2-1F1F5",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "northern mariana islands",
"shortname": ":flag_mp:",
"category": "flags",
@@ -10834,11 +12021,15 @@
":mp:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇲🇵"
},
"flag_mq": {
"unicode": "1F1F2-1F1F6",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "martinique",
"shortname": ":flag_mq:",
"category": "flags",
@@ -10846,7 +12037,11 @@
":mq:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇲🇶"
},
"flag_mr": {
"unicode": "1F1F2-1F1F7",
@@ -10862,8 +12057,10 @@
"country",
"nation",
"muritaniyah",
- "mr"
- ]
+ "mr",
+ "flag"
+ ],
+ "moji": "🇲🇷"
},
"flag_ms": {
"unicode": "1F1F2-1F1F8",
@@ -10878,8 +12075,10 @@
"keywords": [
"country",
"nation",
- "ms"
- ]
+ "ms",
+ "flag"
+ ],
+ "moji": "🇲🇸"
},
"flag_mt": {
"unicode": "1F1F2-1F1F9",
@@ -10894,8 +12093,10 @@
"keywords": [
"country",
"nation",
- "mt"
- ]
+ "mt",
+ "flag"
+ ],
+ "moji": "🇲🇹"
},
"flag_mu": {
"unicode": "1F1F2-1F1FA",
@@ -10910,8 +12111,10 @@
"keywords": [
"country",
"nation",
- "mu"
- ]
+ "mu",
+ "flag"
+ ],
+ "moji": "🇲🇺"
},
"flag_mv": {
"unicode": "1F1F2-1F1FB",
@@ -10927,8 +12130,10 @@
"country",
"nation",
"dhivehi raajje",
- "mv"
- ]
+ "mv",
+ "flag"
+ ],
+ "moji": "🇲🇻"
},
"flag_mw": {
"unicode": "1F1F2-1F1FC",
@@ -10943,8 +12148,10 @@
"keywords": [
"country",
"nation",
- "mw"
- ]
+ "mw",
+ "flag"
+ ],
+ "moji": "🇲🇼"
},
"flag_mx": {
"unicode": "1F1F2-1F1FD",
@@ -10959,8 +12166,11 @@
"keywords": [
"country",
"nation",
- "mx"
- ]
+ "mx",
+ "mexican",
+ "flag"
+ ],
+ "moji": "🇲🇽"
},
"flag_my": {
"unicode": "1F1F2-1F1FE",
@@ -10975,8 +12185,10 @@
"keywords": [
"country",
"nation",
- "my"
- ]
+ "my",
+ "flag"
+ ],
+ "moji": "🇲🇾"
},
"flag_mz": {
"unicode": "1F1F2-1F1FF",
@@ -10992,8 +12204,10 @@
"country",
"nation",
"mocambique",
- "mz"
- ]
+ "mz",
+ "flag"
+ ],
+ "moji": "🇲🇿"
},
"flag_na": {
"unicode": "1F1F3-1F1E6",
@@ -11008,8 +12222,10 @@
"keywords": [
"country",
"nation",
- "na"
- ]
+ "na",
+ "flag"
+ ],
+ "moji": "🇳🇦"
},
"flag_nc": {
"unicode": "1F1F3-1F1E8",
@@ -11027,8 +12243,10 @@
"nouvelle",
"cal&eacute;donie",
"caledonie",
- "nc"
- ]
+ "nc",
+ "flag"
+ ],
+ "moji": "🇳🇨"
},
"flag_ne": {
"unicode": "1F1F3-1F1EA",
@@ -11043,12 +12261,14 @@
"keywords": [
"country",
"nation",
- "ne"
- ]
+ "ne",
+ "flag"
+ ],
+ "moji": "🇳🇪"
},
"flag_nf": {
"unicode": "1F1F3-1F1EB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "norfolk island",
"shortname": ":flag_nf:",
"category": "flags",
@@ -11056,7 +12276,11 @@
":nf:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇳🇫"
},
"flag_ng": {
"unicode": "1F1F3-1F1EC",
@@ -11071,8 +12295,10 @@
"keywords": [
"country",
"nation",
- "ng"
- ]
+ "ng",
+ "flag"
+ ],
+ "moji": "🇳🇬"
},
"flag_ni": {
"unicode": "1F1F3-1F1EE",
@@ -11087,8 +12313,10 @@
"keywords": [
"country",
"nation",
- "ni"
- ]
+ "ni",
+ "flag"
+ ],
+ "moji": "🇳🇮"
},
"flag_nl": {
"unicode": "1F1F3-1F1F1",
@@ -11105,8 +12333,10 @@
"nation",
"nederland",
"holland",
- "nl"
- ]
+ "nl",
+ "flag"
+ ],
+ "moji": "🇳🇱"
},
"flag_no": {
"unicode": "1F1F3-1F1F4",
@@ -11122,8 +12352,10 @@
"country",
"nation",
"norge",
- "no"
- ]
+ "no",
+ "flag"
+ ],
+ "moji": "🇳🇴"
},
"flag_np": {
"unicode": "1F1F3-1F1F5",
@@ -11138,8 +12370,10 @@
"keywords": [
"country",
"nation",
- "np"
- ]
+ "np",
+ "flag"
+ ],
+ "moji": "🇳🇵"
},
"flag_nr": {
"unicode": "1F1F3-1F1F7",
@@ -11154,8 +12388,10 @@
"keywords": [
"country",
"nation",
- "nr"
- ]
+ "nr",
+ "flag"
+ ],
+ "moji": "🇳🇷"
},
"flag_nu": {
"unicode": "1F1F3-1F1FA",
@@ -11170,8 +12406,10 @@
"keywords": [
"country",
"nation",
- "nu"
- ]
+ "nu",
+ "flag"
+ ],
+ "moji": "🇳🇺"
},
"flag_nz": {
"unicode": "1F1F3-1F1FF",
@@ -11187,8 +12425,10 @@
"country",
"nation",
"aotearoa",
- "nz"
- ]
+ "nz",
+ "flag"
+ ],
+ "moji": "🇳🇿"
},
"flag_om": {
"unicode": "1F1F4-1F1F2",
@@ -11204,8 +12444,10 @@
"country",
"nation",
"saltanat uman",
- "om"
- ]
+ "om",
+ "flag"
+ ],
+ "moji": "🇴🇲"
},
"flag_pa": {
"unicode": "1F1F5-1F1E6",
@@ -11220,8 +12462,10 @@
"keywords": [
"country",
"nation",
- "pa"
- ]
+ "pa",
+ "flag"
+ ],
+ "moji": "🇵🇦"
},
"flag_pe": {
"unicode": "1F1F5-1F1EA",
@@ -11236,8 +12480,10 @@
"keywords": [
"country",
"nation",
- "pe"
- ]
+ "pe",
+ "flag"
+ ],
+ "moji": "🇵🇪"
},
"flag_pf": {
"unicode": "1F1F5-1F1EB",
@@ -11254,8 +12500,10 @@
"nation",
"polyn&eacute;sie fran&ccedil;aise",
"polynesie francaise",
- "pf"
- ]
+ "pf",
+ "flag"
+ ],
+ "moji": "🇵🇫"
},
"flag_pg": {
"unicode": "1F1F5-1F1EC",
@@ -11271,8 +12519,10 @@
"country",
"nation",
"papua niu gini",
- "pg"
- ]
+ "pg",
+ "flag"
+ ],
+ "moji": "🇵🇬"
},
"flag_ph": {
"unicode": "1F1F5-1F1ED",
@@ -11288,8 +12538,10 @@
"country",
"nation",
"pilipinas",
- "ph"
- ]
+ "ph",
+ "flag"
+ ],
+ "moji": "🇵🇭"
},
"flag_pk": {
"unicode": "1F1F5-1F1F0",
@@ -11304,8 +12556,10 @@
"keywords": [
"country",
"nation",
- "pk"
- ]
+ "pk",
+ "flag"
+ ],
+ "moji": "🇵🇰"
},
"flag_pl": {
"unicode": "1F1F5-1F1F1",
@@ -11321,12 +12575,14 @@
"country",
"nation",
"polska",
- "pl"
- ]
+ "pl",
+ "flag"
+ ],
+ "moji": "🇵🇱"
},
"flag_pm": {
"unicode": "1F1F5-1F1F2",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "saint pierre and miquelon",
"shortname": ":flag_pm:",
"category": "flags",
@@ -11334,11 +12590,15 @@
":pm:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇵🇲"
},
"flag_pn": {
"unicode": "1F1F5-1F1F3",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pitcairn",
"shortname": ":flag_pn:",
"category": "flags",
@@ -11346,7 +12606,11 @@
":pn:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇵🇳"
},
"flag_pr": {
"unicode": "1F1F5-1F1F7",
@@ -11361,8 +12625,10 @@
"keywords": [
"country",
"nation",
- "pr"
- ]
+ "pr",
+ "flag"
+ ],
+ "moji": "🇵🇷"
},
"flag_ps": {
"unicode": "1F1F5-1F1F8",
@@ -11377,8 +12643,10 @@
"keywords": [
"country",
"nation",
- "ps"
- ]
+ "ps",
+ "flag"
+ ],
+ "moji": "🇵🇸"
},
"flag_pt": {
"unicode": "1F1F5-1F1F9",
@@ -11393,8 +12661,10 @@
"keywords": [
"country",
"nation",
- "pt"
- ]
+ "pt",
+ "flag"
+ ],
+ "moji": "🇵🇹"
},
"flag_pw": {
"unicode": "1F1F5-1F1FC",
@@ -11410,8 +12680,10 @@
"country",
"nation",
"belau",
- "pw"
- ]
+ "pw",
+ "flag"
+ ],
+ "moji": "🇵🇼"
},
"flag_py": {
"unicode": "1F1F5-1F1FE",
@@ -11426,8 +12698,10 @@
"keywords": [
"country",
"nation",
- "py"
- ]
+ "py",
+ "flag"
+ ],
+ "moji": "🇵🇾"
},
"flag_qa": {
"unicode": "1F1F6-1F1E6",
@@ -11443,12 +12717,14 @@
"country",
"nation",
"dawlat qatar",
- "qa"
- ]
+ "qa",
+ "flag"
+ ],
+ "moji": "🇶🇦"
},
"flag_re": {
"unicode": "1F1F7-1F1EA",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "réunion",
"shortname": ":flag_re:",
"category": "flags",
@@ -11456,7 +12732,11 @@
":re:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇷🇪"
},
"flag_ro": {
"unicode": "1F1F7-1F1F4",
@@ -11471,8 +12751,10 @@
"keywords": [
"country",
"nation",
- "ro"
- ]
+ "ro",
+ "flag"
+ ],
+ "moji": "🇷🇴"
},
"flag_rs": {
"unicode": "1F1F7-1F1F8",
@@ -11488,8 +12770,10 @@
"country",
"nation",
"srbija",
- "rs"
- ]
+ "rs",
+ "flag"
+ ],
+ "moji": "🇷🇸"
},
"flag_ru": {
"unicode": "1F1F7-1F1FA",
@@ -11505,8 +12789,10 @@
"nation",
"russian",
"country",
- "ru"
- ]
+ "ru",
+ "flag"
+ ],
+ "moji": "🇷🇺"
},
"flag_rw": {
"unicode": "1F1F7-1F1FC",
@@ -11521,8 +12807,10 @@
"keywords": [
"country",
"nation",
- "rw"
- ]
+ "rw",
+ "flag"
+ ],
+ "moji": "🇷🇼"
},
"flag_sa": {
"unicode": "1F1F8-1F1E6",
@@ -11539,8 +12827,10 @@
"country",
"nation",
"al arabiyah as suudiyah",
- "sa"
- ]
+ "sa",
+ "flag"
+ ],
+ "moji": "🇸🇦"
},
"flag_sb": {
"unicode": "1F1F8-1F1E7",
@@ -11555,8 +12845,10 @@
"keywords": [
"country",
"nation",
- "sb"
- ]
+ "sb",
+ "flag"
+ ],
+ "moji": "🇸🇧"
},
"flag_sc": {
"unicode": "1F1F8-1F1E8",
@@ -11572,8 +12864,10 @@
"country",
"nation",
"seychelles",
- "sc"
- ]
+ "sc",
+ "flag"
+ ],
+ "moji": "🇸🇨"
},
"flag_sd": {
"unicode": "1F1F8-1F1E9",
@@ -11589,8 +12883,10 @@
"country",
"nation",
"as-sudan",
- "sd"
- ]
+ "sd",
+ "flag"
+ ],
+ "moji": "🇸🇩"
},
"flag_se": {
"unicode": "1F1F8-1F1EA",
@@ -11606,8 +12902,10 @@
"country",
"nation",
"sverige",
- "se"
- ]
+ "se",
+ "flag"
+ ],
+ "moji": "🇸🇪"
},
"flag_sg": {
"unicode": "1F1F8-1F1EC",
@@ -11622,8 +12920,10 @@
"keywords": [
"country",
"nation",
- "sg"
- ]
+ "sg",
+ "flag"
+ ],
+ "moji": "🇸🇬"
},
"flag_sh": {
"unicode": "1F1F8-1F1ED",
@@ -11638,8 +12938,10 @@
"keywords": [
"country",
"nation",
- "sh"
- ]
+ "sh",
+ "flag"
+ ],
+ "moji": "🇸🇭"
},
"flag_si": {
"unicode": "1F1F8-1F1EE",
@@ -11655,12 +12957,14 @@
"country",
"nation",
"slovenija",
- "si"
- ]
+ "si",
+ "flag"
+ ],
+ "moji": "🇸🇮"
},
"flag_sj": {
"unicode": "1F1F8-1F1EF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "svalbard and jan mayen",
"shortname": ":flag_sj:",
"category": "flags",
@@ -11668,7 +12972,11 @@
":sj:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇸🇯"
},
"flag_sk": {
"unicode": "1F1F8-1F1F0",
@@ -11683,8 +12991,10 @@
"keywords": [
"country",
"nation",
- "sk"
- ]
+ "sk",
+ "flag"
+ ],
+ "moji": "🇸🇰"
},
"flag_sl": {
"unicode": "1F1F8-1F1F1",
@@ -11699,8 +13009,10 @@
"keywords": [
"country",
"nation",
- "sl"
- ]
+ "sl",
+ "flag"
+ ],
+ "moji": "🇸🇱"
},
"flag_sm": {
"unicode": "1F1F8-1F1F2",
@@ -11715,8 +13027,10 @@
"keywords": [
"country",
"nation",
- "sm"
- ]
+ "sm",
+ "flag"
+ ],
+ "moji": "🇸🇲"
},
"flag_sn": {
"unicode": "1F1F8-1F1F3",
@@ -11731,8 +13045,10 @@
"keywords": [
"country",
"nation",
- "sn"
- ]
+ "sn",
+ "flag"
+ ],
+ "moji": "🇸🇳"
},
"flag_so": {
"unicode": "1F1F8-1F1F4",
@@ -11747,8 +13063,10 @@
"keywords": [
"country",
"nation",
- "so"
- ]
+ "so",
+ "flag"
+ ],
+ "moji": "🇸🇴"
},
"flag_sr": {
"unicode": "1F1F8-1F1F7",
@@ -11763,12 +13081,14 @@
"keywords": [
"country",
"nation",
- "sr"
- ]
+ "sr",
+ "flag"
+ ],
+ "moji": "🇸🇷"
},
"flag_ss": {
"unicode": "1F1F8-1F1F8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "south sudan",
"shortname": ":flag_ss:",
"category": "flags",
@@ -11776,7 +13096,11 @@
":ss:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇸🇸"
},
"flag_st": {
"unicode": "1F1F8-1F1F9",
@@ -11792,8 +13116,10 @@
"country",
"nation",
"sao tome e principe",
- "st"
- ]
+ "st",
+ "flag"
+ ],
+ "moji": "🇸🇹"
},
"flag_sv": {
"unicode": "1F1F8-1F1FB",
@@ -11808,12 +13134,14 @@
"keywords": [
"country",
"nation",
- "sv"
- ]
+ "sv",
+ "flag"
+ ],
+ "moji": "🇸🇻"
},
"flag_sx": {
"unicode": "1F1F8-1F1FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sint maarten",
"shortname": ":flag_sx:",
"category": "flags",
@@ -11821,7 +13149,11 @@
":sx:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇸🇽"
},
"flag_sy": {
"unicode": "1F1F8-1F1FE",
@@ -11836,8 +13168,10 @@
"keywords": [
"country",
"nation",
- "sy"
- ]
+ "sy",
+ "flag"
+ ],
+ "moji": "🇸🇾"
},
"flag_sz": {
"unicode": "1F1F8-1F1FF",
@@ -11852,12 +13186,14 @@
"keywords": [
"country",
"nation",
- "sz"
- ]
+ "sz",
+ "flag"
+ ],
+ "moji": "🇸🇿"
},
"flag_ta": {
"unicode": "1F1F9-1F1E6",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "tristan da cunha",
"shortname": ":flag_ta:",
"category": "flags",
@@ -11865,11 +13201,15 @@
":ta:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇹🇦"
},
"flag_tc": {
"unicode": "1F1F9-1F1E8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "turks and caicos islands",
"shortname": ":flag_tc:",
"category": "flags",
@@ -11877,7 +13217,11 @@
":tc:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇹🇨"
},
"flag_td": {
"unicode": "1F1F9-1F1E9",
@@ -11893,12 +13237,14 @@
"country",
"nation",
"tchad",
- "td"
- ]
+ "td",
+ "flag"
+ ],
+ "moji": "🇹🇩"
},
"flag_tf": {
"unicode": "1F1F9-1F1EB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "french southern territories",
"shortname": ":flag_tf:",
"category": "flags",
@@ -11906,7 +13252,11 @@
":tf:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇹🇫"
},
"flag_tg": {
"unicode": "1F1F9-1F1EC",
@@ -11922,8 +13272,10 @@
"country",
"nation",
"republique togolaise",
- "tg"
- ]
+ "tg",
+ "flag"
+ ],
+ "moji": "🇹🇬"
},
"flag_th": {
"unicode": "1F1F9-1F1ED",
@@ -11939,8 +13291,10 @@
"country",
"nation",
"prathet thai",
- "th"
- ]
+ "th",
+ "flag"
+ ],
+ "moji": "🇹🇭"
},
"flag_tj": {
"unicode": "1F1F9-1F1EF",
@@ -11956,12 +13310,14 @@
"country",
"nation",
"jumhurii tojikiston",
- "tj"
- ]
+ "tj",
+ "flag"
+ ],
+ "moji": "🇹🇯"
},
"flag_tk": {
"unicode": "1F1F9-1F1F0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "tokelau",
"shortname": ":flag_tk:",
"category": "flags",
@@ -11969,7 +13325,11 @@
":tk:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇹🇰"
},
"flag_tl": {
"unicode": "1F1F9-1F1F1",
@@ -11984,8 +13344,10 @@
"keywords": [
"country",
"nation",
- "tl"
- ]
+ "tl",
+ "flag"
+ ],
+ "moji": "🇹🇱"
},
"flag_tm": {
"unicode": "1F1F9-1F1F2",
@@ -12000,8 +13362,10 @@
"keywords": [
"country",
"nation",
- "tm"
- ]
+ "tm",
+ "flag"
+ ],
+ "moji": "🇹🇲"
},
"flag_tn": {
"unicode": "1F1F9-1F1F3",
@@ -12017,8 +13381,10 @@
"country",
"nation",
"tunis",
- "tn"
- ]
+ "tn",
+ "flag"
+ ],
+ "moji": "🇹🇳"
},
"flag_to": {
"unicode": "1F1F9-1F1F4",
@@ -12033,8 +13399,10 @@
"keywords": [
"country",
"nation",
- "to"
- ]
+ "to",
+ "flag"
+ ],
+ "moji": "🇹🇴"
},
"flag_tr": {
"unicode": "1F1F9-1F1F7",
@@ -12049,8 +13417,10 @@
"keywords": [
"country",
"nation",
- "turkiye"
- ]
+ "turkiye",
+ "flag"
+ ],
+ "moji": "🇹🇷"
},
"flag_tt": {
"unicode": "1F1F9-1F1F9",
@@ -12065,8 +13435,10 @@
"keywords": [
"country",
"nation",
- "tt"
- ]
+ "tt",
+ "flag"
+ ],
+ "moji": "🇹🇹"
},
"flag_tv": {
"unicode": "1F1F9-1F1FB",
@@ -12081,8 +13453,10 @@
"keywords": [
"country",
"nation",
- "tv"
- ]
+ "tv",
+ "flag"
+ ],
+ "moji": "🇹🇻"
},
"flag_tw": {
"unicode": "1F1F9-1F1FC",
@@ -12098,8 +13472,10 @@
"country",
"nation",
"taiwan",
- "tw"
- ]
+ "tw",
+ "flag"
+ ],
+ "moji": "🇹🇼"
},
"flag_tz": {
"unicode": "1F1F9-1F1FF",
@@ -12114,8 +13490,10 @@
"keywords": [
"country",
"nation",
- "tz"
- ]
+ "tz",
+ "flag"
+ ],
+ "moji": "🇹🇿"
},
"flag_ua": {
"unicode": "1F1FA-1F1E6",
@@ -12131,8 +13509,10 @@
"country",
"nation",
"ukrayina",
- "ua"
- ]
+ "ua",
+ "flag"
+ ],
+ "moji": "🇺🇦"
},
"flag_ug": {
"unicode": "1F1FA-1F1EC",
@@ -12147,12 +13527,14 @@
"keywords": [
"country",
"nation",
- "ug"
- ]
+ "ug",
+ "flag"
+ ],
+ "moji": "🇺🇬"
},
"flag_um": {
"unicode": "1F1FA-1F1F2",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "united states minor outlying islands",
"shortname": ":flag_um:",
"category": "flags",
@@ -12160,7 +13542,11 @@
":um:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇺🇲"
},
"flag_us": {
"unicode": "1F1FA-1F1F8",
@@ -12180,8 +13566,10 @@
"united states of america",
"america",
"old glory",
- "us"
- ]
+ "us",
+ "flag"
+ ],
+ "moji": "🇺🇸"
},
"flag_uy": {
"unicode": "1F1FA-1F1FE",
@@ -12196,8 +13584,10 @@
"keywords": [
"country",
"nation",
- "uy"
- ]
+ "uy",
+ "flag"
+ ],
+ "moji": "🇺🇾"
},
"flag_uz": {
"unicode": "1F1FA-1F1FF",
@@ -12213,8 +13603,10 @@
"country",
"nation",
"uzbekiston respublikasi",
- "uz"
- ]
+ "uz",
+ "flag"
+ ],
+ "moji": "🇺🇿"
},
"flag_va": {
"unicode": "1F1FB-1F1E6",
@@ -12229,8 +13621,10 @@
"keywords": [
"country",
"nation",
- "va"
- ]
+ "va",
+ "flag"
+ ],
+ "moji": "🇻🇦"
},
"flag_vc": {
"unicode": "1F1FB-1F1E8",
@@ -12245,8 +13639,10 @@
"keywords": [
"country",
"nation",
- "vc"
- ]
+ "vc",
+ "flag"
+ ],
+ "moji": "🇻🇨"
},
"flag_ve": {
"unicode": "1F1FB-1F1EA",
@@ -12261,12 +13657,14 @@
"keywords": [
"country",
"nation",
- "ve"
- ]
+ "ve",
+ "flag"
+ ],
+ "moji": "🇻🇪"
},
"flag_vg": {
"unicode": "1F1FB-1F1EC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "british virgin islands",
"shortname": ":flag_vg:",
"category": "flags",
@@ -12274,7 +13672,11 @@
":vg:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇻🇬"
},
"flag_vi": {
"unicode": "1F1FB-1F1EE",
@@ -12289,8 +13691,10 @@
"keywords": [
"country",
"nation",
- "vi"
- ]
+ "vi",
+ "flag"
+ ],
+ "moji": "🇻🇮"
},
"flag_vn": {
"unicode": "1F1FB-1F1F3",
@@ -12306,8 +13710,10 @@
"country",
"nation",
"viet nam",
- "vn"
- ]
+ "vn",
+ "flag"
+ ],
+ "moji": "🇻🇳"
},
"flag_vu": {
"unicode": "1F1FB-1F1FA",
@@ -12322,8 +13728,10 @@
"keywords": [
"country",
"nation",
- "vu"
- ]
+ "vu",
+ "flag"
+ ],
+ "moji": "🇻🇺"
},
"flag_wf": {
"unicode": "1F1FC-1F1EB",
@@ -12338,23 +13746,27 @@
"keywords": [
"country",
"nation",
- "wf"
- ]
+ "wf",
+ "flag"
+ ],
+ "moji": "🇼🇫"
},
"flag_white": {
"unicode": "1F3F3",
"unicode_alternates": [],
"name": "waving white flag",
"shortname": ":flag_white:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":waving_white_flag:"
],
"aliases_ascii": [],
"keywords": [
"symbol",
- "signal"
- ]
+ "signal",
+ "object"
+ ],
+ "moji": "🏳"
},
"flag_ws": {
"unicode": "1F1FC-1F1F8",
@@ -12370,8 +13782,10 @@
"country",
"nation",
"american samoa",
- "ws"
- ]
+ "ws",
+ "flag"
+ ],
+ "moji": "🇼🇸"
},
"flag_xk": {
"unicode": "1F1FD-1F1F0",
@@ -12386,8 +13800,10 @@
"keywords": [
"country",
"nation",
- "xk"
- ]
+ "xk",
+ "flag"
+ ],
+ "moji": "🇽🇰"
},
"flag_ye": {
"unicode": "1F1FE-1F1EA",
@@ -12403,12 +13819,14 @@
"country",
"nation",
"al yaman",
- "ye"
- ]
+ "ye",
+ "flag"
+ ],
+ "moji": "🇾🇪"
},
"flag_yt": {
"unicode": "1F1FE-1F1F9",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mayotte",
"shortname": ":flag_yt:",
"category": "flags",
@@ -12416,7 +13834,11 @@
":yt:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "country",
+ "flag"
+ ],
+ "moji": "🇾🇹"
},
"flag_za": {
"unicode": "1F1FF-1F1E6",
@@ -12430,8 +13852,10 @@
"aliases_ascii": [],
"keywords": [
"country",
- "nation"
- ]
+ "nation",
+ "flag"
+ ],
+ "moji": "🇿🇦"
},
"flag_zm": {
"unicode": "1F1FF-1F1F2",
@@ -12446,8 +13870,10 @@
"keywords": [
"country",
"nation",
- "zm"
- ]
+ "zm",
+ "flag"
+ ],
+ "moji": "🇿🇲"
},
"flag_zw": {
"unicode": "1F1FF-1F1FC",
@@ -12462,8 +13888,10 @@
"keywords": [
"country",
"nation",
- "zw"
- ]
+ "zw",
+ "flag"
+ ],
+ "moji": "🇿🇼"
},
"flags": {
"unicode": "1F38F",
@@ -12484,11 +13912,11 @@
"boys",
"celebration",
"happiness",
- "carp",
"streamers",
- "japanese",
"holiday",
- "flags"
+ "flags",
+ "object",
+ "japan"
],
"moji": "🎏"
},
@@ -12501,56 +13929,25 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "dark"
+ "dark",
+ "electronics",
+ "object"
],
"moji": "🔦"
},
"fleur-de-lis": {
"unicode": "269C",
- "unicode_alternates": "",
+ "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_ascii": [],
- "keywords": [
- "cellphone"
- ]
- },
- "floppy_black": {
- "unicode": "1F5AA",
- "unicode_alternates": [],
- "name": "black hard shell floppy disk",
- "shortname": ":floppy_black:",
- "category": "objects_symbols",
- "aliases": [
- ":black_hard_shell_floppy_disk:"
+ "symbol",
+ "object"
],
- "aliases_ascii": [],
- "keywords": [
- "oldschool",
- "save",
- "technology",
- "storage",
- "information",
- "computer",
- "drive",
- "megabyte"
- ]
+ "moji": "⚜"
},
"floppy_disk": {
"unicode": "1F4BE",
@@ -12570,37 +13967,18 @@
"information",
"computer",
"drive",
- "megabyte"
+ "megabyte",
+ "electronics",
+ "office"
],
"moji": "💾"
},
- "floppy_white": {
- "unicode": "1F5AB",
- "unicode_alternates": [],
- "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"
- ]
- },
"flower_playing_cards": {
"unicode": "1F3B4",
"unicode_alternates": [],
"name": "flower playing cards",
"shortname": ":flower_playing_cards:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12610,7 +13988,9 @@
"game",
"august",
"moon",
- "special"
+ "special",
+ "object",
+ "symbol"
],
"moji": "🎴"
},
@@ -12619,7 +13999,7 @@
"unicode_alternates": [],
"name": "flushed face",
"shortname": ":flushed:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":$",
@@ -12630,11 +14010,13 @@
"face",
"flattered",
"flush",
- "blush",
"red",
"pink",
"cheeks",
- "shy"
+ "shy",
+ "smiley",
+ "emotion",
+ "omg"
],
"moji": "😳"
},
@@ -12650,15 +14032,18 @@
"weather",
"damp",
"cloud",
- "hazy"
- ]
+ "hazy",
+ "sky",
+ "cold"
+ ],
+ "moji": "🌫"
},
"foggy": {
"unicode": "1F301",
"unicode_alternates": [],
"name": "foggy",
"shortname": ":foggy:",
- "category": "nature",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12667,43 +14052,21 @@
"bridge",
"weather",
"fog",
- "foggy"
+ "foggy",
+ "places",
+ "building",
+ "sky",
+ "travel",
+ "vacation"
],
"moji": "🌁"
},
- "folder": {
- "unicode": "1F5C0",
- "unicode_alternates": [],
- "name": "folder",
- "shortname": ":folder:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "documents"
- ]
- },
- "folder_open": {
- "unicode": "1F5C1",
- "unicode_alternates": [],
- "name": "open folder",
- "shortname": ":folder_open:",
- "category": "objects_symbols",
- "aliases": [
- ":open_folder:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "documents",
- "load"
- ]
- },
"football": {
"unicode": "1F3C8",
"unicode_alternates": [],
"name": "american football",
"shortname": ":football:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12714,7 +14077,8 @@
"ball",
"sport",
"america",
- "american"
+ "american",
+ "game"
],
"moji": "🏈"
},
@@ -12723,7 +14087,7 @@
"unicode_alternates": [],
"name": "footprints",
"shortname": ":footprints:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12736,7 +14100,7 @@
"unicode_alternates": [],
"name": "fork and knife",
"shortname": ":fork_and_knife:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12747,7 +14111,9 @@
"restaurant",
"meal",
"food",
- "eat"
+ "eat",
+ "object",
+ "weapon"
],
"moji": "🍴"
},
@@ -12756,7 +14122,7 @@
"unicode_alternates": [],
"name": "fork and knife with plate",
"shortname": ":fork_knife_plate:",
- "category": "travel_places",
+ "category": "food",
"aliases": [
":fork_and_knife_with_plate:"
],
@@ -12768,8 +14134,10 @@
"lunch",
"dinner",
"utensils",
- "setting"
- ]
+ "setting",
+ "object"
+ ],
+ "moji": "🍽"
},
"fountain": {
"unicode": "26F2",
@@ -12778,11 +14146,13 @@
],
"name": "fountain",
"shortname": ":fountain:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "photo"
+ "photo",
+ "travel",
+ "vacation"
],
"moji": "⛲"
},
@@ -12792,15 +14162,18 @@
"unicode_alternates": [
"0034-FE0F-20E3"
],
- "name": "digit four",
+ "name": "keycap digit four",
"shortname": ":four:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"4",
"blue-square",
- "numbers"
+ "numbers",
+ "number",
+ "math",
+ "symbol"
]
},
"four_leaf_clover": {
@@ -12823,74 +14196,75 @@
"irish",
"saint",
"patrick",
- "green"
+ "green",
+ "sol"
],
"moji": "🍀"
},
- "frame_photo": {
- "unicode": "1F5BC",
+ "fox": {
+ "unicode": "1F98A",
"unicode_alternates": [],
- "name": "frame with picture",
- "shortname": ":frame_photo:",
- "category": "objects_symbols",
+ "name": "fox face",
+ "shortname": ":fox:",
+ "category": "nature",
"aliases": [
- ":frame_with_picture:"
+ ":fox_face:"
],
"aliases_ascii": [],
- "keywords": [
- "photo"
- ]
+ "keywords": [],
+ "moji": "🦊"
},
- "frame_tiles": {
- "unicode": "1F5BD",
+ "frame_photo": {
+ "unicode": "1F5BC",
"unicode_alternates": [],
- "name": "frame with tiles",
- "shortname": ":frame_tiles:",
- "category": "objects_symbols",
+ "name": "frame with picture",
+ "shortname": ":frame_photo:",
+ "category": "objects",
"aliases": [
- ":frame_with_tiles:"
+ ":frame_with_picture:"
],
"aliases_ascii": [],
"keywords": [
"photo",
- "painting"
- ]
- },
- "frame_x": {
- "unicode": "1F5BE",
- "unicode_alternates": [],
- "name": "frame with an x",
- "shortname": ":frame_x:",
- "category": "objects_symbols",
- "aliases": [
- ":frame_with_an_x:"
+ "travel",
+ "vacation"
],
- "aliases_ascii": [],
- "keywords": [
- "photo",
- "painting"
- ]
+ "moji": "🖼"
},
"free": {
"unicode": "1F193",
"unicode_alternates": [],
"name": "squared free",
"shortname": ":free:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "words"
+ "words",
+ "symbol"
],
"moji": "🆓"
},
+ "french_bread": {
+ "unicode": "1F956",
+ "unicode_alternates": [],
+ "name": "baguette bread",
+ "shortname": ":french_bread:",
+ "category": "food",
+ "aliases": [
+ ":baguette_bread:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥖"
+ },
"fried_shrimp": {
"unicode": "1F364",
"unicode_alternates": [],
"name": "fried shrimp",
"shortname": ":fried_shrimp:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12909,7 +14283,7 @@
"unicode_alternates": [],
"name": "french fries",
"shortname": ":fries:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -12920,7 +14294,8 @@
"potato",
"fry",
"russet",
- "idaho"
+ "idaho",
+ "america"
],
"moji": "🍟"
},
@@ -12934,7 +14309,8 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife"
],
"moji": "🐸"
},
@@ -12943,7 +14319,7 @@
"unicode_alternates": [],
"name": "frowning face with open mouth",
"shortname": ":frowning:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":anguished:"
],
@@ -12955,13 +14331,16 @@
"sad",
"pout",
"sulk",
- "glower"
+ "glower",
+ "smiley",
+ "surprised",
+ "emotion"
],
"moji": "😦"
},
"frowning2": {
"unicode": "2639",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white frowning face",
"shortname": ":frowning2:",
"category": "people",
@@ -12971,8 +14350,12 @@
"aliases_ascii": [],
"keywords": [
"frown",
- "person"
- ]
+ "person",
+ "sad",
+ "smiley",
+ "emotion"
+ ],
+ "moji": "☹"
},
"fuelpump": {
"unicode": "26FD",
@@ -12981,12 +14364,14 @@
],
"name": "fuel pump",
"shortname": ":fuelpump:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"gas station",
- "petroleum"
+ "petroleum",
+ "object",
+ "gas pump"
],
"moji": "⛽"
},
@@ -13010,7 +14395,8 @@
"monster",
"spooky",
"werewolves",
- "twilight"
+ "twilight",
+ "space"
],
"moji": "🌕"
},
@@ -13029,12 +14415,13 @@
"anthropomorphic",
"face",
"sky",
- "night",
"cheese",
"phase",
"spooky",
"werewolves",
- "monsters"
+ "monsters",
+ "space",
+ "goodnight"
],
"moji": "🌝"
},
@@ -13043,23 +14430,24 @@
"unicode_alternates": [],
"name": "game die",
"shortname": ":game_die:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"dice",
"game",
"die",
- "dice",
"craps",
"gamble",
- "play"
+ "play",
+ "object",
+ "boys night"
],
"moji": "🎲"
},
"gear": {
"unicode": "2699",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "gear",
"shortname": ":gear:",
"category": "objects",
@@ -13068,19 +14456,22 @@
"keywords": [
"object",
"tool"
- ]
+ ],
+ "moji": "⚙"
},
"gem": {
"unicode": "1F48E",
"unicode_alternates": [],
"name": "gem stone",
"shortname": ":gem:",
- "category": "emoticons",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue",
- "ruby"
+ "ruby",
+ "object",
+ "gem"
],
"moji": "💎"
},
@@ -13091,7 +14482,7 @@
],
"name": "gemini",
"shortname": ":gemini:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13103,9 +14494,8 @@
"stars",
"zodiac",
"sign",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♊"
},
@@ -13114,11 +14504,13 @@
"unicode_alternates": [],
"name": "ghost",
"shortname": ":ghost:",
- "category": "objects",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "halloween"
+ "halloween",
+ "holidays",
+ "monster"
],
"moji": "👻"
},
@@ -13136,11 +14528,12 @@
"present",
"xmas",
"gift",
- "present",
"wrap",
"package",
- "birthday",
- "wedding"
+ "wedding",
+ "object",
+ "holidays",
+ "parties"
],
"moji": "🎁"
},
@@ -13149,12 +14542,14 @@
"unicode_alternates": [],
"name": "heart with ribbon",
"shortname": ":gift_heart:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"love",
- "valentines"
+ "valentines",
+ "symbol",
+ "condolence"
],
"moji": "💝"
},
@@ -13163,18 +14558,22 @@
"unicode_alternates": [],
"name": "girl",
"shortname": ":girl:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"female",
- "woman"
+ "woman",
+ "people",
+ "women",
+ "baby",
+ "diversity"
],
"moji": "👧"
},
"girl_tone1": {
"unicode": "1F467-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "girl tone 1",
"shortname": ":girl_tone1:",
"category": "people",
@@ -13184,11 +14583,12 @@
"female",
"kid",
"child"
- ]
+ ],
+ "moji": "👧🏻"
},
"girl_tone2": {
"unicode": "1F467-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "girl tone 2",
"shortname": ":girl_tone2:",
"category": "people",
@@ -13198,11 +14598,12 @@
"female",
"kid",
"child"
- ]
+ ],
+ "moji": "👧🏼"
},
"girl_tone3": {
"unicode": "1F467-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "girl tone 3",
"shortname": ":girl_tone3:",
"category": "people",
@@ -13212,11 +14613,12 @@
"female",
"kid",
"child"
- ]
+ ],
+ "moji": "👧🏽"
},
"girl_tone4": {
"unicode": "1F467-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "girl tone 4",
"shortname": ":girl_tone4:",
"category": "people",
@@ -13226,11 +14628,12 @@
"female",
"kid",
"child"
- ]
+ ],
+ "moji": "👧🏾"
},
"girl_tone5": {
"unicode": "1F467-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "girl tone 5",
"shortname": ":girl_tone5:",
"category": "people",
@@ -13240,42 +14643,43 @@
"female",
"kid",
"child"
- ]
- },
- "girls_symbol": {
- "unicode": "1F6CA",
- "unicode_alternates": [],
- "name": "girls symbol",
- "shortname": ":girls_symbol:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "female",
- "child"
- ]
+ ],
+ "moji": "👧🏿"
},
"globe_with_meridians": {
"unicode": "1F310",
"unicode_alternates": [],
"name": "globe with meridians",
"shortname": ":globe_with_meridians:",
- "category": "nature",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"earth",
"international",
"world",
- "earth",
"meridian",
"globe",
"space",
"planet",
- "home"
+ "home",
+ "symbol"
],
"moji": "🌐"
},
+ "goal": {
+ "unicode": "1F945",
+ "unicode_alternates": [],
+ "name": "goal net",
+ "shortname": ":goal:",
+ "category": "activity",
+ "aliases": [
+ ":goal_net:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥅"
+ },
"goat": {
"unicode": "1F410",
"unicode_alternates": [],
@@ -13302,12 +14706,17 @@
],
"name": "flag in hole",
"shortname": ":golf:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"business",
- "sports"
+ "sports",
+ "game",
+ "ball",
+ "vacation",
+ "sport",
+ "golf"
],
"moji": "⛳"
},
@@ -13324,15 +14733,32 @@
"par",
"birdie",
"eagle",
- "mulligan"
- ]
+ "mulligan",
+ "men",
+ "game",
+ "ball",
+ "vacation",
+ "golf"
+ ],
+ "moji": "🏌"
+ },
+ "gorilla": {
+ "unicode": "1F98D",
+ "unicode_alternates": [],
+ "name": "gorilla",
+ "shortname": ":gorilla:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦍"
},
"grapes": {
"unicode": "1F347",
"unicode_alternates": [],
"name": "grapes",
"shortname": ":grapes:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13341,7 +14767,6 @@
"grapes",
"wine",
"vinegar",
- "fruit",
"cluster",
"vine"
],
@@ -13352,19 +14777,19 @@
"unicode_alternates": [],
"name": "green apple",
"shortname": ":green_apple:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fruit",
"nature",
"apple",
- "fruit",
"green",
"pie",
"granny",
"smith",
- "core"
+ "core",
+ "food"
],
"moji": "🍏"
},
@@ -13379,7 +14804,10 @@
"keywords": [
"knowledge",
"library",
- "read"
+ "read",
+ "object",
+ "office",
+ "book"
],
"moji": "📗"
},
@@ -13388,7 +14816,7 @@
"unicode_alternates": [],
"name": "green heart",
"shortname": ":green_heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13398,14 +14826,14 @@
"valentines",
"green",
"heart",
- "love",
"nature",
"rebirth",
"reborn",
"jealous",
"clingy",
"envious",
- "possessive"
+ "possessive",
+ "symbol"
],
"moji": "💚"
},
@@ -13414,11 +14842,13 @@
"unicode_alternates": [],
"name": "white exclamation mark ornament",
"shortname": ":grey_exclamation:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "surprise"
+ "surprise",
+ "symbol",
+ "punctuation"
],
"moji": "❕"
},
@@ -13427,11 +14857,13 @@
"unicode_alternates": [],
"name": "white question mark ornament",
"shortname": ":grey_question:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "doubts"
+ "doubts",
+ "symbol",
+ "punctuation"
],
"moji": "❔"
},
@@ -13440,16 +14872,19 @@
"unicode_alternates": [],
"name": "grimacing face",
"shortname": ":grimacing:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"face",
"grimace",
"teeth",
- "grimace",
"disapprove",
- "pain"
+ "pain",
+ "silly",
+ "smiley",
+ "emotion",
+ "selfie"
],
"moji": "😬"
},
@@ -13458,7 +14893,7 @@
"unicode_alternates": [],
"name": "grinning face with smiling eyes",
"shortname": ":grin:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13469,8 +14904,11 @@
"grin",
"grinning",
"smiling",
- "smile",
- "smiley"
+ "smiley",
+ "silly",
+ "emotion",
+ "good",
+ "selfie"
],
"moji": "😁"
},
@@ -13479,7 +14917,7 @@
"unicode_alternates": [],
"name": "grinning face",
"shortname": ":grinning:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13490,17 +14928,17 @@
"grin",
"grinning",
"smiling",
- "smile",
- "smiley"
+ "smiley",
+ "emotion"
],
- "moji": "🕧"
+ "moji": "😀"
},
"guardsman": {
"unicode": "1F482",
"unicode_alternates": [],
"name": "guardsman",
"shortname": ":guardsman:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13513,16 +14951,19 @@
"guard",
"bearskin",
"hat",
- "british",
"queen",
"ceremonial",
- "military"
+ "military",
+ "people",
+ "men",
+ "diversity",
+ "job"
],
"moji": "💂"
},
"guardsman_tone1": {
"unicode": "1F482-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guardsman tone 1",
"shortname": ":guardsman_tone1:",
"category": "people",
@@ -13537,15 +14978,15 @@
"guard",
"bearskin",
"hat",
- "british",
"queen",
"ceremonial",
"military"
- ]
+ ],
+ "moji": "💂🏻"
},
"guardsman_tone2": {
"unicode": "1F482-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guardsman tone 2",
"shortname": ":guardsman_tone2:",
"category": "people",
@@ -13560,15 +15001,15 @@
"guard",
"bearskin",
"hat",
- "british",
"queen",
"ceremonial",
"military"
- ]
+ ],
+ "moji": "💂🏼"
},
"guardsman_tone3": {
"unicode": "1F482-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guardsman tone 3",
"shortname": ":guardsman_tone3:",
"category": "people",
@@ -13583,15 +15024,15 @@
"guard",
"bearskin",
"hat",
- "british",
"queen",
"ceremonial",
"military"
- ]
+ ],
+ "moji": "💂🏽"
},
"guardsman_tone4": {
"unicode": "1F482-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guardsman tone 4",
"shortname": ":guardsman_tone4:",
"category": "people",
@@ -13606,15 +15047,15 @@
"guard",
"bearskin",
"hat",
- "british",
"queen",
"ceremonial",
"military"
- ]
+ ],
+ "moji": "💂🏾"
},
"guardsman_tone5": {
"unicode": "1F482-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "guardsman tone 5",
"shortname": ":guardsman_tone5:",
"category": "people",
@@ -13629,18 +15070,18 @@
"guard",
"bearskin",
"hat",
- "british",
"queen",
"ceremonial",
"military"
- ]
+ ],
+ "moji": "💂🏿"
},
"guitar": {
"unicode": "1F3B8",
"unicode_alternates": [],
"name": "guitar",
"shortname": ":guitar:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13648,12 +15089,11 @@
"music",
"guitar",
"string",
- "music",
- "instrument",
"jam",
"rock",
"acoustic",
- "electric"
+ "electric",
+ "instruments"
],
"moji": "🎸"
},
@@ -13667,7 +15107,11 @@
"aliases_ascii": [],
"keywords": [
"violence",
- "weapon"
+ "weapon",
+ "object",
+ "dead",
+ "gun",
+ "sarcastic"
],
"moji": "🔫"
},
@@ -13676,19 +15120,22 @@
"unicode_alternates": [],
"name": "haircut",
"shortname": ":haircut:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"female",
"girl",
- "woman"
+ "woman",
+ "people",
+ "women",
+ "diversity"
],
"moji": "💇"
},
"haircut_tone1": {
"unicode": "1F487-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "haircut tone 1",
"shortname": ":haircut_tone1:",
"category": "people",
@@ -13698,11 +15145,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💇🏻"
},
"haircut_tone2": {
"unicode": "1F487-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "haircut tone 2",
"shortname": ":haircut_tone2:",
"category": "people",
@@ -13712,11 +15160,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💇🏼"
},
"haircut_tone3": {
"unicode": "1F487-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "haircut tone 3",
"shortname": ":haircut_tone3:",
"category": "people",
@@ -13726,11 +15175,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💇🏽"
},
"haircut_tone4": {
"unicode": "1F487-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "haircut tone 4",
"shortname": ":haircut_tone4:",
"category": "people",
@@ -13740,11 +15190,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💇🏾"
},
"haircut_tone5": {
"unicode": "1F487-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "haircut tone 5",
"shortname": ":haircut_tone5:",
"category": "people",
@@ -13754,14 +15205,15 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💇🏿"
},
"hamburger": {
"unicode": "1F354",
"unicode_alternates": [],
"name": "hamburger",
"shortname": ":hamburger:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -13769,9 +15221,9 @@
"meat",
"hamburger",
"burger",
- "meat",
"cow",
- "beef"
+ "beef",
+ "america"
],
"moji": "🍔"
},
@@ -13789,13 +15241,16 @@
"law",
"ruling",
"tools",
- "verdict"
+ "verdict",
+ "object",
+ "tool",
+ "weapon"
],
"moji": "🔨"
},
"hammer_pick": {
"unicode": "2692",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "hammer and pick",
"shortname": ":hammer_pick:",
"category": "objects",
@@ -13805,8 +15260,10 @@
"aliases_ascii": [],
"keywords": [
"object",
- "tool"
- ]
+ "tool",
+ "weapon"
+ ],
+ "moji": "⚒"
},
"hamster": {
"unicode": "1F439",
@@ -13836,29 +15293,16 @@
"hi",
"five",
"stop",
- "halt"
- ]
- },
- "hand_splayed_reverse": {
- "unicode": "1F591",
- "unicode_alternates": [],
- "name": "reversed raised hand with fingers splayed",
- "shortname": ":hand_splayed_reverse:",
- "category": "people",
- "aliases": [
- ":reversed_raised_hand_with_fingers_splayed:"
+ "halt",
+ "body",
+ "hands",
+ "diversity"
],
- "aliases_ascii": [],
- "keywords": [
- "hi",
- "five",
- "stop",
- "halt"
- ]
+ "moji": "🖐"
},
"hand_splayed_tone1": {
"unicode": "1F590-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with fingers splayed tone 1",
"shortname": ":hand_splayed_tone1:",
"category": "people",
@@ -13871,11 +15315,12 @@
"five",
"stop",
"halt"
- ]
+ ],
+ "moji": "🖐🏻"
},
"hand_splayed_tone2": {
"unicode": "1F590-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with fingers splayed tone 2",
"shortname": ":hand_splayed_tone2:",
"category": "people",
@@ -13888,11 +15333,12 @@
"five",
"stop",
"halt"
- ]
+ ],
+ "moji": "🖐🏼"
},
"hand_splayed_tone3": {
"unicode": "1F590-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with fingers splayed tone 3",
"shortname": ":hand_splayed_tone3:",
"category": "people",
@@ -13905,11 +15351,12 @@
"five",
"stop",
"halt"
- ]
+ ],
+ "moji": "🖐🏽"
},
"hand_splayed_tone4": {
"unicode": "1F590-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with fingers splayed tone 4",
"shortname": ":hand_splayed_tone4:",
"category": "people",
@@ -13922,11 +15369,12 @@
"five",
"stop",
"halt"
- ]
+ ],
+ "moji": "🖐🏾"
},
"hand_splayed_tone5": {
"unicode": "1F590-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with fingers splayed tone 5",
"shortname": ":hand_splayed_tone5:",
"category": "people",
@@ -13939,57 +15387,170 @@
"five",
"stop",
"halt"
- ]
- },
- "hand_victory": {
- "unicode": "1F594",
- "unicode_alternates": [],
- "name": "reversed victory hand",
- "shortname": ":hand_victory:",
- "category": "people",
- "aliases": [
- ":reversed_victory_hand:"
],
- "aliases_ascii": [],
- "keywords": [
- "fu"
- ]
+ "moji": "🖐🏿"
},
"handbag": {
"unicode": "1F45C",
"unicode_alternates": [],
"name": "handbag",
"shortname": ":handbag:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"accessories",
"accessory",
"bag",
- "fashion"
+ "fashion",
+ "women",
+ "vacation"
],
"moji": "👜"
},
- "hard_disk": {
- "unicode": "1F5B4",
+ "handball": {
+ "unicode": "1F93E",
"unicode_alternates": [],
- "name": "hard disk",
- "shortname": ":hard_disk:",
- "category": "objects_symbols",
+ "name": "handball",
+ "shortname": ":handball:",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": [
- "save",
- "technology",
- "storage",
- "information",
- "computer",
- "drive",
- "megabyte",
- "gigabyte",
- "hd"
- ]
+ "keywords": [],
+ "moji": "🤾"
+ },
+ "handball_tone1": {
+ "unicode": "1F93E-1F3FB",
+ "unicode_alternates": [],
+ "name": "handball tone 1",
+ "shortname": ":handball_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤾🏻"
+ },
+ "handball_tone2": {
+ "unicode": "1F93E-1F3FC",
+ "unicode_alternates": [],
+ "name": "handball tone 2",
+ "shortname": ":handball_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤾🏼"
+ },
+ "handball_tone3": {
+ "unicode": "1F93E-1F3FD",
+ "unicode_alternates": [],
+ "name": "handball tone 3",
+ "shortname": ":handball_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤾🏽"
+ },
+ "handball_tone4": {
+ "unicode": "1F93E-1F3FE",
+ "unicode_alternates": [],
+ "name": "handball tone 4",
+ "shortname": ":handball_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤾🏾"
+ },
+ "handball_tone5": {
+ "unicode": "1F93E-1F3FF",
+ "unicode_alternates": [],
+ "name": "handball tone 5",
+ "shortname": ":handball_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤾🏿"
+ },
+ "handshake": {
+ "unicode": "1F91D",
+ "unicode_alternates": [],
+ "name": "handshake",
+ "shortname": ":handshake:",
+ "category": "people",
+ "aliases": [
+ ":shaking_hands:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤝"
+ },
+ "handshake_tone1": {
+ "unicode": "1F91D-1F3FB",
+ "unicode_alternates": [],
+ "name": "handshake tone 1",
+ "shortname": ":handshake_tone1:",
+ "category": "people",
+ "aliases": [
+ ":shaking_hands_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤝🏻"
+ },
+ "handshake_tone2": {
+ "unicode": "1F91D-1F3FC",
+ "unicode_alternates": [],
+ "name": "handshake tone 2",
+ "shortname": ":handshake_tone2:",
+ "category": "people",
+ "aliases": [
+ ":shaking_hands_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤝🏼"
+ },
+ "handshake_tone3": {
+ "unicode": "1F91D-1F3FD",
+ "unicode_alternates": [],
+ "name": "handshake tone 3",
+ "shortname": ":handshake_tone3:",
+ "category": "people",
+ "aliases": [
+ ":shaking_hands_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤝🏽"
+ },
+ "handshake_tone4": {
+ "unicode": "1F91D-1F3FE",
+ "unicode_alternates": [],
+ "name": "handshake tone 4",
+ "shortname": ":handshake_tone4:",
+ "category": "people",
+ "aliases": [
+ ":shaking_hands_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤝🏾"
+ },
+ "handshake_tone5": {
+ "unicode": "1F91D-1F3FF",
+ "unicode_alternates": [],
+ "name": "handshake tone 5",
+ "shortname": ":handshake_tone5:",
+ "category": "people",
+ "aliases": [
+ ":shaking_hands_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤝🏿"
},
"hash": {
"moji": "#⃣",
@@ -13999,11 +15560,12 @@
],
"name": "number sign",
"shortname": ":hash:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "symbol"
+ "symbol",
+ "number"
]
},
"hatched_chick": {
@@ -14018,12 +15580,11 @@
"baby",
"chicken",
"chick",
- "baby",
"bird",
- "chicken",
"young",
"woman",
- "cute"
+ "cute",
+ "animal"
],
"moji": "🐥"
},
@@ -14040,19 +15601,18 @@
"chicken",
"egg",
"chick",
- "egg",
"baby",
"bird",
- "chicken",
"young",
"woman",
- "cute"
+ "cute",
+ "animal"
],
"moji": "🐣"
},
"head_bandage": {
"unicode": "1F915",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with head-bandage",
"shortname": ":head_bandage:",
"category": "people",
@@ -14060,14 +15620,20 @@
":face_with_head_bandage:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "smiley",
+ "health",
+ "sick",
+ "emotion"
+ ],
+ "moji": "🤕"
},
"headphones": {
"unicode": "1F3A7",
"unicode_alternates": [],
"name": "headphone",
"shortname": ":headphones:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14076,12 +15642,12 @@
"score",
"headphone",
"sound",
- "music",
"ears",
"beats",
"buds",
"audio",
- "listen"
+ "listen",
+ "instruments"
],
"moji": "🎧"
},
@@ -14090,13 +15656,12 @@
"unicode_alternates": [],
"name": "hear-no-evil monkey",
"shortname": ":hear_no_evil:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"animal",
"monkey",
- "monkey",
"ears",
"hear",
"sound",
@@ -14112,7 +15677,7 @@
],
"name": "heavy black heart",
"shortname": ":heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [
"<3"
@@ -14124,7 +15689,6 @@
"pink",
"black",
"heart",
- "love",
"passion",
"romance",
"intense",
@@ -14132,7 +15696,9 @@
"death",
"evil",
"cold",
- "valentines"
+ "valentines",
+ "symbol",
+ "parties"
]
},
"heart_decoration": {
@@ -14140,19 +15706,20 @@
"unicode_alternates": [],
"name": "heart decoration",
"shortname": ":heart_decoration:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"like",
"love",
- "purple-square"
+ "purple-square",
+ "symbol"
],
"moji": "💟"
},
"heart_exclamation": {
"unicode": "2763",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "heavy heart exclamation mark ornament",
"shortname": ":heart_exclamation:",
"category": "symbols",
@@ -14163,15 +15730,17 @@
"keywords": [
"emotion",
"punctuation",
- "symbol"
- ]
+ "symbol",
+ "love"
+ ],
+ "moji": "❣"
},
"heart_eyes": {
"unicode": "1F60D",
"unicode_alternates": [],
"name": "smiling face with heart-shaped eyes",
"shortname": ":heart_eyes:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14185,10 +15754,15 @@
"smiling",
"heart",
"lovestruck",
- "love",
"flirt",
"smile",
- "heart-shaped"
+ "heart-shaped",
+ "happy",
+ "smiley",
+ "sex",
+ "heart eyes",
+ "emotion",
+ "beautiful"
],
"moji": "😍"
},
@@ -14197,7 +15771,7 @@
"unicode_alternates": [],
"name": "smiling cat face with heart-shaped eyes",
"shortname": ":heart_eyes_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14208,41 +15782,27 @@
"love",
"valentines",
"lovestruck",
- "love",
- "heart"
+ "heart",
+ "heart eyes",
+ "cat",
+ "beautiful"
],
"moji": "😻"
},
- "heart_tip": {
- "unicode": "1F394",
- "unicode_alternates": [],
- "name": "heart with tip on the left",
- "shortname": ":heart_tip:",
- "category": "celebration",
- "aliases": [
- ":heart_with_tip_on_the_left:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "affection",
- "like",
- "love",
- "valentines"
- ]
- },
"heartbeat": {
"unicode": "1F493",
"unicode_alternates": [],
"name": "beating heart",
"shortname": ":heartbeat:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"affection",
"like",
"love",
- "valentines"
+ "valentines",
+ "symbol"
],
"moji": "💓"
},
@@ -14251,14 +15811,15 @@
"unicode_alternates": [],
"name": "growing heart",
"shortname": ":heartpulse:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"affection",
"like",
"love",
- "valentines"
+ "valentines",
+ "symbol"
],
"moji": "💗"
},
@@ -14269,12 +15830,15 @@
],
"name": "black heart suit",
"shortname": ":hearts:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cards",
- "poker"
+ "poker",
+ "love",
+ "symbol",
+ "game"
],
"moji": "♥"
},
@@ -14285,12 +15849,13 @@
],
"name": "heavy check mark",
"shortname": ":heavy_check_mark:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"nike",
- "ok"
+ "ok",
+ "symbol"
],
"moji": "✔"
},
@@ -14299,13 +15864,14 @@
"unicode_alternates": [],
"name": "heavy division sign",
"shortname": ":heavy_division_sign:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"calculation",
"divide",
- "math"
+ "math",
+ "symbol"
],
"moji": "➗"
},
@@ -14314,7 +15880,7 @@
"unicode_alternates": [],
"name": "heavy dollar sign",
"shortname": ":heavy_dollar_sign:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14322,12 +15888,12 @@
"money",
"payment",
"dollar",
- "currency",
- "money",
"cash",
"sale",
"purchase",
- "value"
+ "value",
+ "math",
+ "symbol"
],
"moji": "💲"
},
@@ -14336,12 +15902,13 @@
"unicode_alternates": [],
"name": "heavy minus sign",
"shortname": ":heavy_minus_sign:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"calculation",
- "math"
+ "math",
+ "symbol"
],
"moji": "➖"
},
@@ -14352,12 +15919,13 @@
],
"name": "heavy multiplication x",
"shortname": ":heavy_multiplication_x:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"calculation",
- "math"
+ "math",
+ "symbol"
],
"moji": "✖"
},
@@ -14366,12 +15934,13 @@
"unicode_alternates": [],
"name": "heavy plus sign",
"shortname": ":heavy_plus_sign:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"calculation",
- "math"
+ "math",
+ "symbol"
],
"moji": "➕"
},
@@ -14380,7 +15949,7 @@
"unicode_alternates": [],
"name": "helicopter",
"shortname": ":helicopter:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14389,13 +15958,16 @@
"helicopter",
"helo",
"gyro",
- "gyrocopter"
+ "gyrocopter",
+ "plane",
+ "travel",
+ "fly"
],
"moji": "🚁"
},
"helmet_with_cross": {
"unicode": "26D1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "helmet with white cross",
"shortname": ":helmet_with_cross:",
"category": "people",
@@ -14407,8 +15979,12 @@
"aid",
"face",
"hat",
- "person"
- ]
+ "person",
+ "object",
+ "accessories",
+ "job"
+ ],
+ "moji": "⛑"
},
"herb": {
"unicode": "1F33F",
@@ -14427,9 +16003,10 @@
"weed",
"herb",
"spice",
- "plant",
"cook",
- "cooking"
+ "cooking",
+ "nature",
+ "leaf"
],
"moji": "🌿"
},
@@ -14447,7 +16024,9 @@
"vegetable",
"hibiscus",
"flower",
- "warm"
+ "warm",
+ "nature",
+ "tropical"
],
"moji": "🌺"
},
@@ -14456,13 +16035,14 @@
"unicode_alternates": [],
"name": "high brightness symbol",
"shortname": ":high_brightness:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"light",
"summer",
- "sun"
+ "sun",
+ "symbol"
],
"moji": "🔆"
},
@@ -14471,45 +16051,57 @@
"unicode_alternates": [],
"name": "high-heeled shoe",
"shortname": ":high_heel:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fashion",
"female",
- "shoes"
+ "shoes",
+ "women",
+ "shoe",
+ "sexy",
+ "accessories",
+ "girls night"
],
"moji": "👠"
},
"hockey": {
"unicode": "1F3D2",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ice hockey stick and puck",
"shortname": ":hockey:",
"category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "game",
+ "sport",
+ "hockey"
+ ],
+ "moji": "🏒"
},
"hole": {
"unicode": "1F573",
"unicode_alternates": [],
"name": "hole",
"shortname": ":hole:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"pit",
- "well"
- ]
+ "well",
+ "object"
+ ],
+ "moji": "🕳"
},
"homes": {
"unicode": "1F3D8",
"unicode_alternates": [],
"name": "house buildings",
"shortname": ":homes:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":house_buildings:"
],
@@ -14521,15 +16113,19 @@
"mansion",
"bungalow",
"ranch",
- "craftsman"
- ]
+ "craftsman",
+ "places",
+ "building",
+ "house"
+ ],
+ "moji": "🏘"
},
"honey_pot": {
"unicode": "1F36F",
"unicode_alternates": [],
"name": "honey pot",
"shortname": ":honey_pot:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14537,9 +16133,10 @@
"sweet",
"honey",
"pot",
- "bees",
"pooh",
- "bear"
+ "bear",
+ "food",
+ "vagina"
],
"moji": "🍯"
},
@@ -14553,7 +16150,8 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "brown"
+ "brown",
+ "wildlife"
],
"moji": "🐴"
},
@@ -14562,7 +16160,7 @@
"unicode_alternates": [],
"name": "horse racing",
"shortname": ":horse_racing:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14573,13 +16171,16 @@
"race",
"racing",
"jockey",
- "triple crown"
+ "triple crown",
+ "men",
+ "sport",
+ "horse racing"
],
"moji": "🏇"
},
"horse_racing_tone1": {
"unicode": "1F3C7-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "horse racing tone 1",
"shortname": ":horse_racing_tone1:",
"category": "activity",
@@ -14592,11 +16193,12 @@
"race",
"jockey",
"triple crown"
- ]
+ ],
+ "moji": "🏇🏻"
},
"horse_racing_tone2": {
"unicode": "1F3C7-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "horse racing tone 2",
"shortname": ":horse_racing_tone2:",
"category": "activity",
@@ -14609,11 +16211,12 @@
"race",
"jockey",
"triple crown"
- ]
+ ],
+ "moji": "🏇🏼"
},
"horse_racing_tone3": {
"unicode": "1F3C7-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "horse racing tone 3",
"shortname": ":horse_racing_tone3:",
"category": "activity",
@@ -14626,11 +16229,12 @@
"race",
"jockey",
"triple crown"
- ]
+ ],
+ "moji": "🏇🏽"
},
"horse_racing_tone4": {
"unicode": "1F3C7-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "horse racing tone 4",
"shortname": ":horse_racing_tone4:",
"category": "activity",
@@ -14643,11 +16247,12 @@
"race",
"jockey",
"triple crown"
- ]
+ ],
+ "moji": "🏇🏾"
},
"horse_racing_tone5": {
"unicode": "1F3C7-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "horse racing tone 5",
"shortname": ":horse_racing_tone5:",
"category": "activity",
@@ -14660,21 +16265,24 @@
"race",
"jockey",
"triple crown"
- ]
+ ],
+ "moji": "🏇🏿"
},
"hospital": {
"unicode": "1F3E5",
"unicode_alternates": [],
"name": "hospital",
"shortname": ":hospital:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"building",
"doctor",
"health",
- "surgery"
+ "surgery",
+ "places",
+ "911"
],
"moji": "🏥"
},
@@ -14683,7 +16291,7 @@
"unicode_alternates": [],
"name": "hot pepper",
"shortname": ":hot_pepper:",
- "category": "food_drink",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14693,27 +16301,33 @@
"chili",
"cayenne",
"habanero",
- "jalapeno"
- ]
+ "jalapeno",
+ "vegetables"
+ ],
+ "moji": "🌶"
},
"hotdog": {
"unicode": "1F32D",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "hot dog",
"shortname": ":hotdog:",
- "category": "foods",
+ "category": "food",
"aliases": [
":hot_dog:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "america",
+ "food"
+ ],
+ "moji": "🌭"
},
"hotel": {
"unicode": "1F3E8",
"unicode_alternates": [],
"name": "hotel",
"shortname": ":hotel:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14724,7 +16338,9 @@
"hotel",
"motel",
"holiday inn",
- "hospital"
+ "hospital",
+ "places",
+ "vacation"
],
"moji": "🏨"
},
@@ -14735,13 +16351,14 @@
],
"name": "hot springs",
"shortname": ":hotsprings:",
- "category": "places",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"bath",
"relax",
- "warm"
+ "warm",
+ "symbol"
],
"moji": "♨"
},
@@ -14758,7 +16375,8 @@
"keywords": [
"clock",
"oldschool",
- "time"
+ "time",
+ "object"
],
"moji": "⌛"
},
@@ -14773,7 +16391,8 @@
"keywords": [
"countdown",
"oldschool",
- "time"
+ "time",
+ "object"
],
"moji": "⏳"
},
@@ -14782,20 +16401,20 @@
"unicode_alternates": [],
"name": "house building",
"shortname": ":house:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"building",
"home",
"house",
- "home",
"residence",
"dwelling",
"mansion",
"bungalow",
"ranch",
- "craftsman"
+ "craftsman",
+ "places"
],
"moji": "🏠"
},
@@ -14804,7 +16423,7 @@
"unicode_alternates": [],
"name": "derelict house building",
"shortname": ":house_abandoned:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":derelict_house_building:"
],
@@ -14821,27 +16440,34 @@
"abandoned",
"vacant",
"run down",
- "shoddy"
- ]
+ "shoddy",
+ "places",
+ "building",
+ "house"
+ ],
+ "moji": "🏚"
},
"house_with_garden": {
"unicode": "1F3E1",
"unicode_alternates": [],
"name": "house with garden",
"shortname": ":house_with_garden:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"home",
"nature",
- "plant"
+ "plant",
+ "places",
+ "building",
+ "house"
],
"moji": "🏡"
},
"hugging": {
"unicode": "1F917",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "hugging face",
"shortname": ":hugging:",
"category": "people",
@@ -14849,14 +16475,19 @@
":hugging_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "smiley",
+ "hug",
+ "thank you"
+ ],
+ "moji": "🤗"
},
"hushed": {
"unicode": "1F62F",
"unicode_alternates": [],
"name": "hushed face",
"shortname": ":hushed:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14865,7 +16496,10 @@
"quiet",
"hush",
"whisper",
- "silent"
+ "silent",
+ "smiley",
+ "surprised",
+ "wow"
],
"moji": "😯"
},
@@ -14874,7 +16508,7 @@
"unicode_alternates": [],
"name": "ice cream",
"shortname": ":ice_cream:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14896,7 +16530,7 @@
},
"ice_skate": {
"unicode": "26F8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ice skate",
"shortname": ":ice_skate:",
"category": "activity",
@@ -14905,15 +16539,18 @@
"keywords": [
"place",
"sport",
- "travel"
- ]
+ "travel",
+ "cold",
+ "ice skating"
+ ],
+ "moji": "⛸"
},
"icecream": {
"unicode": "1F366",
"unicode_alternates": [],
"name": "soft ice cream",
"shortname": ":icecream:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14935,7 +16572,7 @@
},
"id": {
"unicode": "1F194",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "squared id",
"shortname": ":id:",
"category": "symbols",
@@ -14947,21 +16584,24 @@
"identity",
"symbol",
"word"
- ]
+ ],
+ "moji": "🆔"
},
"ideograph_advantage": {
"unicode": "1F250",
"unicode_alternates": [],
"name": "circled ideograph advantage",
"shortname": ":ideograph_advantage:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"get",
"kanji",
- "obtain"
+ "obtain",
+ "japan",
+ "symbol"
],
"moji": "🉐"
},
@@ -14970,7 +16610,7 @@
"unicode_alternates": [],
"name": "imp",
"shortname": ":imp:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -14979,7 +16619,9 @@
"evil",
"horns",
"cute",
- "devil"
+ "smiley",
+ "monster",
+ "wth"
],
"moji": "👿"
},
@@ -14993,7 +16635,9 @@
"aliases_ascii": [],
"keywords": [
"documents",
- "email"
+ "email",
+ "work",
+ "office"
],
"moji": "📥"
},
@@ -15007,30 +16651,17 @@
"aliases_ascii": [],
"keywords": [
"email",
- "inbox"
+ "inbox",
+ "object"
],
"moji": "📨"
},
- "info": {
- "unicode": "1F6C8",
- "unicode_alternates": [],
- "name": "circled information source",
- "shortname": ":info:",
- "category": "objects_symbols",
- "aliases": [
- ":circled_information_source:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "icon"
- ]
- },
"information_desk_person": {
"unicode": "1F481",
"unicode_alternates": [],
"name": "information desk person",
"shortname": ":information_desk_person:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15045,13 +16676,16 @@
"sassy",
"unimpressed",
"attitude",
- "snarky"
+ "snarky",
+ "people",
+ "women",
+ "diversity"
],
"moji": "💁"
},
"information_desk_person_tone1": {
"unicode": "1F481-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "information desk person tone 1",
"shortname": ":information_desk_person_tone1:",
"category": "people",
@@ -15069,11 +16703,12 @@
"unimpressed",
"attitude",
"snarky"
- ]
+ ],
+ "moji": "💁🏻"
},
"information_desk_person_tone2": {
"unicode": "1F481-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "information desk person tone 2",
"shortname": ":information_desk_person_tone2:",
"category": "people",
@@ -15091,11 +16726,12 @@
"unimpressed",
"attitude",
"snarky"
- ]
+ ],
+ "moji": "💁🏼"
},
"information_desk_person_tone3": {
"unicode": "1F481-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "information desk person tone 3",
"shortname": ":information_desk_person_tone3:",
"category": "people",
@@ -15113,11 +16749,12 @@
"unimpressed",
"attitude",
"snarky"
- ]
+ ],
+ "moji": "💁🏽"
},
"information_desk_person_tone4": {
"unicode": "1F481-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "information desk person tone 4",
"shortname": ":information_desk_person_tone4:",
"category": "people",
@@ -15135,11 +16772,12 @@
"unimpressed",
"attitude",
"snarky"
- ]
+ ],
+ "moji": "💁🏾"
},
"information_desk_person_tone5": {
"unicode": "1F481-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "information desk person tone 5",
"shortname": ":information_desk_person_tone5:",
"category": "people",
@@ -15157,7 +16795,8 @@
"unimpressed",
"attitude",
"snarky"
- ]
+ ],
+ "moji": "💁🏿"
},
"information_source": {
"unicode": "2139",
@@ -15166,13 +16805,14 @@
],
"name": "information source",
"shortname": ":information_source:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"blue-square",
- "letter"
+ "letter",
+ "symbol"
],
"moji": "ℹ"
},
@@ -15181,7 +16821,7 @@
"unicode_alternates": [],
"name": "smiling face with halo",
"shortname": ":innocent:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"O:-)",
@@ -15202,12 +16842,12 @@
"angel",
"face",
"halo",
- "halo",
- "angel",
"innocent",
"ring",
"circle",
- "heaven"
+ "heaven",
+ "smiley",
+ "emotion"
],
"moji": "😇"
},
@@ -15218,13 +16858,14 @@
],
"name": "exclamation question mark",
"shortname": ":interrobang:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"punctuation",
"surprise",
- "wat"
+ "wat",
+ "symbol"
],
"moji": "⁉"
},
@@ -15240,7 +16881,10 @@
"apple",
"dial",
"gadgets",
- "technology"
+ "technology",
+ "electronics",
+ "phone",
+ "selfie"
],
"moji": "📱"
},
@@ -15249,7 +16893,7 @@
"unicode_alternates": [],
"name": "desert island",
"shortname": ":island:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":desert_island:"
],
@@ -15257,15 +16901,22 @@
"keywords": [
"land",
"solitude",
- "alone"
- ]
+ "alone",
+ "places",
+ "travel",
+ "vacation",
+ "tropical",
+ "beach",
+ "swim"
+ ],
+ "moji": "🏝"
},
"izakaya_lantern": {
"unicode": "1F3EE",
"unicode_alternates": [],
"name": "izakaya lantern",
"shortname": ":izakaya_lantern:",
- "category": "places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15277,7 +16928,9 @@
"alcohol",
"bar",
"sake",
- "restaurant"
+ "restaurant",
+ "object",
+ "japan"
],
"moji": "🏮"
},
@@ -15286,14 +16939,13 @@
"unicode_alternates": [],
"name": "jack-o-lantern",
"shortname": ":jack_o_lantern:",
- "category": "objects",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"halloween",
"jack-o-lantern",
"pumpkin",
- "halloween",
"holiday",
"carve",
"autumn",
@@ -15305,7 +16957,8 @@
"horror",
"scary",
"scared",
- "dead"
+ "dead",
+ "holidays"
],
"moji": "🎃"
},
@@ -15314,11 +16967,16 @@
"unicode_alternates": [],
"name": "silhouette of japan",
"shortname": ":japan:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "nation"
+ "nation",
+ "places",
+ "travel",
+ "map",
+ "vacation",
+ "tropical"
],
"moji": "🗾"
},
@@ -15327,7 +16985,7 @@
"unicode_alternates": [],
"name": "japanese castle",
"shortname": ":japanese_castle:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15339,7 +16997,10 @@
"royalty",
"fort",
"fortified",
- "fortress"
+ "fortress",
+ "places",
+ "travel",
+ "vacation"
],
"moji": "🏯"
},
@@ -15348,7 +17009,7 @@
"unicode_alternates": [],
"name": "japanese goblin",
"shortname": ":japanese_goblin:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15361,13 +17022,14 @@
"avian",
"demon",
"goblin",
- "mask",
"theater",
"nose",
"frown",
"mustache",
"anger",
- "frustration"
+ "frustration",
+ "angry",
+ "monster"
],
"moji": "👺"
},
@@ -15376,7 +17038,7 @@
"unicode_alternates": [],
"name": "japanese ogre",
"shortname": ":japanese_ogre:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15387,7 +17049,6 @@
"troll",
"ogre",
"folklore",
- "monster",
"devil",
"mask",
"theater",
@@ -15401,7 +17062,7 @@
"unicode_alternates": [],
"name": "jeans",
"shortname": ":jeans:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15419,26 +17080,12 @@
],
"moji": "👖"
},
- "jet_up": {
- "unicode": "1F6E6",
- "unicode_alternates": [],
- "name": "up-pointing military airplane",
- "shortname": ":jet_up:",
- "category": "travel_places",
- "aliases": [
- ":up_pointing_military_airplane:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "jet"
- ]
- },
"joy": {
"unicode": "1F602",
"unicode_alternates": [],
"name": "face with tears of joy",
"shortname": ":joy:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":')",
@@ -15450,11 +17097,13 @@
"haha",
"happy",
"tears",
- "tears",
- "cry",
"joy",
- "happy",
- "weep"
+ "weep",
+ "silly",
+ "smiley",
+ "laugh",
+ "emotion",
+ "sarcastic"
],
"moji": "😂"
},
@@ -15463,7 +17112,7 @@
"unicode_alternates": [],
"name": "cat face with tears of joy",
"shortname": ":joy_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15472,10 +17121,12 @@
"haha",
"happy",
"tears",
- "happy",
- "tears",
"cry",
- "joy"
+ "joy",
+ "silly",
+ "laugh",
+ "cat",
+ "sarcastic"
],
"moji": "😹"
},
@@ -15484,24 +17135,112 @@
"unicode_alternates": [],
"name": "joystick",
"shortname": ":joystick:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"games",
"atari",
- "controller"
- ]
+ "controller",
+ "electronics",
+ "game",
+ "boys night"
+ ],
+ "moji": "🕹"
+ },
+ "juggling": {
+ "unicode": "1F939",
+ "unicode_alternates": [],
+ "name": "juggling",
+ "shortname": ":juggling:",
+ "category": "activity",
+ "aliases": [
+ ":juggler:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤹"
+ },
+ "juggling_tone1": {
+ "unicode": "1F939-1F3FB",
+ "unicode_alternates": [],
+ "name": "juggling tone 1",
+ "shortname": ":juggling_tone1:",
+ "category": "activity",
+ "aliases": [
+ ":juggler_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤹🏻"
+ },
+ "juggling_tone2": {
+ "unicode": "1F939-1F3FC",
+ "unicode_alternates": [],
+ "name": "juggling tone 2",
+ "shortname": ":juggling_tone2:",
+ "category": "activity",
+ "aliases": [
+ ":juggler_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤹🏼"
+ },
+ "juggling_tone3": {
+ "unicode": "1F939-1F3FD",
+ "unicode_alternates": [],
+ "name": "juggling tone 3",
+ "shortname": ":juggling_tone3:",
+ "category": "activity",
+ "aliases": [
+ ":juggler_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤹🏽"
+ },
+ "juggling_tone4": {
+ "unicode": "1F939-1F3FE",
+ "unicode_alternates": [],
+ "name": "juggling tone 4",
+ "shortname": ":juggling_tone4:",
+ "category": "activity",
+ "aliases": [
+ ":juggler_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤹🏾"
+ },
+ "juggling_tone5": {
+ "unicode": "1F939-1F3FF",
+ "unicode_alternates": [],
+ "name": "juggling tone 5",
+ "shortname": ":juggling_tone5:",
+ "category": "activity",
+ "aliases": [
+ ":juggler_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤹🏿"
},
"kaaba": {
"unicode": "1F54B",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "kaaba",
"shortname": ":kaaba:",
"category": "travel",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "places",
+ "religion",
+ "building",
+ "condolence"
+ ],
+ "moji": "🕋"
},
"key": {
"unicode": "1F511",
@@ -15514,7 +17253,8 @@
"keywords": [
"door",
"lock",
- "password"
+ "password",
+ "object"
],
"moji": "🔑"
},
@@ -15523,7 +17263,7 @@
"unicode_alternates": [],
"name": "old key",
"shortname": ":key2:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":old_key:"
],
@@ -15532,79 +17272,34 @@
"door",
"lock",
"password",
- "skeleton"
- ]
- },
- "keyboard": {
- "unicode": "1F5AE",
- "unicode_alternates": [],
- "name": "wired keyboard",
- "shortname": ":keyboard:",
- "category": "objects_symbols",
- "aliases": [
- ":wired_keyboard:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "typing",
- "keys",
- "input",
- "device"
- ]
- },
- "keyboard_mouse": {
- "unicode": "1F5A6",
- "unicode_alternates": [],
- "name": "keyboard and mouse",
- "shortname": ":keyboard_mouse:",
- "category": "objects_symbols",
- "aliases": [
- ":keyboard_and_mouse:"
+ "skeleton",
+ "object"
],
- "aliases_ascii": [],
- "keywords": [
- "computer",
- "input",
- "desktop"
- ]
+ "moji": "🗝"
},
- "keyboard_with_jacks": {
- "unicode": "1F398",
- "unicode_alternates": [],
- "name": "musical keyboard with jacks",
- "shortname": ":keyboard_with_jacks:",
- "category": "objects_symbols",
- "aliases": [
- ":musical_keyboard_with_jacks:"
+ "keyboard": {
+ "unicode": "2328",
+ "unicode_alternates": [
+ "2328-FE0F"
],
- "aliases_ascii": [],
- "keywords": [
- "music",
- "instrument",
- "midi"
- ]
- },
- "keycap_ten": {
- "unicode": "1F51F",
- "unicode_alternates": [],
- "name": "keycap ten",
- "shortname": ":keycap_ten:",
- "category": "other",
+ "name": "keyboard",
+ "shortname": ":keyboard:",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "10",
- "blue-square",
- "numbers"
+ "electronics",
+ "work",
+ "office"
],
- "moji": "🔟"
+ "moji": "⌨"
},
"kimono": {
"unicode": "1F458",
"unicode_alternates": [],
"name": "kimono",
"shortname": ":kimono:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15621,7 +17316,7 @@
"unicode_alternates": [],
"name": "kiss mark",
"shortname": ":kiss:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15630,7 +17325,12 @@
"like",
"lips",
"love",
- "valentines"
+ "valentines",
+ "women",
+ "sexy",
+ "lip",
+ "beautiful",
+ "girls night"
],
"moji": "💋"
},
@@ -15652,8 +17352,14 @@
"love",
"marriage",
"valentines",
- "couple"
- ]
+ "couple",
+ "people",
+ "gay",
+ "men",
+ "sex",
+ "lgbt"
+ ],
+ "moji": "👨‍❤️‍💋‍👨"
},
"kiss_ww": {
"unicode": "1F469-2764-1F48B-1F469",
@@ -15673,15 +17379,21 @@
"love",
"marriage",
"valentines",
- "couple"
- ]
+ "couple",
+ "people",
+ "women",
+ "sex",
+ "lgbt",
+ "lesbian"
+ ],
+ "moji": "👩‍❤️‍💋‍👩"
},
"kissing": {
"unicode": "1F617",
"unicode_alternates": [],
"name": "kissing face",
"shortname": ":kissing:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15695,7 +17407,9 @@
"kiss",
"pucker",
"lips",
- "smooch"
+ "smooch",
+ "smiley",
+ "sexy"
],
"moji": "😗"
},
@@ -15704,7 +17418,7 @@
"unicode_alternates": [],
"name": "kissing cat face with closed eyes",
"shortname": ":kissing_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15714,7 +17428,8 @@
"kiss",
"puckered",
"heart",
- "love"
+ "love",
+ "cat"
],
"moji": "😽"
},
@@ -15723,7 +17438,7 @@
"unicode_alternates": [],
"name": "kissing face with closed eyes",
"shortname": ":kissing_closed_eyes:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15738,8 +17453,9 @@
"passion",
"puckered",
"heart",
- "love",
- "smooch"
+ "smooch",
+ "smiley",
+ "sexy"
],
"moji": "😚"
},
@@ -15748,7 +17464,7 @@
"unicode_alternates": [],
"name": "face throwing a kiss",
"shortname": ":kissing_heart:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":*",
@@ -15766,8 +17482,9 @@
"love",
"lips",
"like",
- "love",
- "valentines"
+ "valentines",
+ "smiley",
+ "sexy"
],
"moji": "😘"
},
@@ -15776,7 +17493,7 @@
"unicode_alternates": [],
"name": "kissing face with smiling eyes",
"shortname": ":kissing_smiling_eyes:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15789,10 +17506,25 @@
"smile",
"pucker",
"lips",
- "smooch"
+ "smooch",
+ "smiley",
+ "sexy"
],
"moji": "😙"
},
+ "kiwi": {
+ "unicode": "1F95D",
+ "unicode_alternates": [],
+ "name": "kiwifruit",
+ "shortname": ":kiwi:",
+ "category": "food",
+ "aliases": [
+ ":kiwifruit:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥝"
+ },
"knife": {
"unicode": "1F52A",
"unicode_alternates": [],
@@ -15801,7 +17533,10 @@
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "object",
+ "weapon"
+ ],
"moji": "🔪"
},
"koala": {
@@ -15814,7 +17549,8 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife"
],
"moji": "🐨"
},
@@ -15823,7 +17559,7 @@
"unicode_alternates": [],
"name": "squared katakana koko",
"shortname": ":koko:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -15831,7 +17567,8 @@
"destination",
"here",
"japanese",
- "katakana"
+ "katakana",
+ "symbol"
],
"moji": "🈁"
},
@@ -15840,22 +17577,28 @@
"unicode_alternates": [],
"name": "label",
"shortname": ":label:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "tag"
- ]
+ "tag",
+ "object"
+ ],
+ "moji": "🏷"
},
"large_blue_circle": {
"unicode": "1F535",
"unicode_alternates": [],
"name": "large blue circle",
"shortname": ":large_blue_circle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "shapes",
+ "symbol",
+ "circle"
+ ],
"moji": "🔵"
},
"large_blue_diamond": {
@@ -15863,11 +17606,13 @@
"unicode_alternates": [],
"name": "large blue diamond",
"shortname": ":large_blue_diamond:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol"
],
"moji": "🔷"
},
@@ -15876,11 +17621,13 @@
"unicode_alternates": [],
"name": "large orange diamond",
"shortname": ":large_orange_diamond:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol"
],
"moji": "🔶"
},
@@ -15900,7 +17647,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌗"
},
@@ -15922,7 +17670,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌜"
},
@@ -15931,7 +17680,7 @@
"unicode_alternates": [],
"name": "smiling face with open mouth and tightly-closed ey",
"shortname": ":laughing:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":satisfied:"
],
@@ -15947,7 +17696,9 @@
"lol",
"smiling",
"laughing",
- "laugh"
+ "laugh",
+ "smiley",
+ "emotion"
],
"moji": "😆"
},
@@ -15984,16 +17735,97 @@
"aliases_ascii": [],
"keywords": [
"notes",
- "paper"
+ "paper",
+ "object",
+ "office",
+ "write"
],
"moji": "📒"
},
+ "left_facing_fist": {
+ "unicode": "1F91B",
+ "unicode_alternates": [],
+ "name": "left-facing fist",
+ "shortname": ":left_facing_fist:",
+ "category": "people",
+ "aliases": [
+ ":left_fist:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤛"
+ },
+ "left_facing_fist_tone1": {
+ "unicode": "1F91B-1F3FB",
+ "unicode_alternates": [],
+ "name": "left facing fist tone 1",
+ "shortname": ":left_facing_fist_tone1:",
+ "category": "people",
+ "aliases": [
+ ":left_fist_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤛🏻"
+ },
+ "left_facing_fist_tone2": {
+ "unicode": "1F91B-1F3FC",
+ "unicode_alternates": [],
+ "name": "left facing fist tone 2",
+ "shortname": ":left_facing_fist_tone2:",
+ "category": "people",
+ "aliases": [
+ ":left_fist_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤛🏼"
+ },
+ "left_facing_fist_tone3": {
+ "unicode": "1F91B-1F3FD",
+ "unicode_alternates": [],
+ "name": "left facing fist tone 3",
+ "shortname": ":left_facing_fist_tone3:",
+ "category": "people",
+ "aliases": [
+ ":left_fist_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤛🏽"
+ },
+ "left_facing_fist_tone4": {
+ "unicode": "1F91B-1F3FE",
+ "unicode_alternates": [],
+ "name": "left facing fist tone 4",
+ "shortname": ":left_facing_fist_tone4:",
+ "category": "people",
+ "aliases": [
+ ":left_fist_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤛🏾"
+ },
+ "left_facing_fist_tone5": {
+ "unicode": "1F91B-1F3FF",
+ "unicode_alternates": [],
+ "name": "left facing fist tone 5",
+ "shortname": ":left_facing_fist_tone5:",
+ "category": "people",
+ "aliases": [
+ ":left_fist_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤛🏿"
+ },
"left_luggage": {
"unicode": "1F6C5",
"unicode_alternates": [],
"name": "left luggage",
"shortname": ":left_luggage:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16002,26 +17834,10 @@
"bag",
"baggage",
"luggage",
- "travel"
+ "symbol"
],
"moji": "🛅"
},
- "left_receiver": {
- "unicode": "1F57B",
- "unicode_alternates": [],
- "name": "left hand telephone receiver",
- "shortname": ":left_receiver:",
- "category": "objects_symbols",
- "aliases": [
- ":left_hand_telephone_receiver:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "dial",
- "technology"
- ]
- },
"left_right_arrow": {
"unicode": "2194",
"unicode_alternates": [
@@ -16029,11 +17845,13 @@
],
"name": "left right arrow",
"shortname": ":left_right_arrow:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "arrow",
+ "symbol"
],
"moji": "↔"
},
@@ -16044,10 +17862,13 @@
],
"name": "leftwards arrow with hook",
"shortname": ":leftwards_arrow_with_hook:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "arrow",
+ "symbol"
+ ],
"moji": "↩"
},
"lemon": {
@@ -16055,7 +17876,7 @@
"unicode_alternates": [],
"name": "lemon",
"shortname": ":lemon:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16063,7 +17884,8 @@
"nature",
"lemon",
"yellow",
- "citrus"
+ "citrus",
+ "food"
],
"moji": "🍋"
},
@@ -16074,7 +17896,7 @@
],
"name": "leo",
"shortname": ":leo:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16087,9 +17909,8 @@
"zodiac",
"sign",
"purple-square",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♌"
},
@@ -16108,7 +17929,9 @@
"cat",
"spot",
"spotted",
- "sexy"
+ "sexy",
+ "wildlife",
+ "roar"
],
"moji": "🐆"
},
@@ -16117,27 +17940,31 @@
"unicode_alternates": [],
"name": "level slider",
"shortname": ":level_slider:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"controls"
- ]
+ ],
+ "moji": "🎚"
},
"levitate": {
"unicode": "1F574",
"unicode_alternates": [],
"name": "man in business suit levitating",
"shortname": ":levitate:",
- "category": "people",
+ "category": "activity",
"aliases": [
":man_in_business_suit_levitating:"
],
"aliases_ascii": [],
"keywords": [
"hover",
- "exclamation"
- ]
+ "exclamation",
+ "men",
+ "job"
+ ],
+ "moji": "🕴"
},
"libra": {
"unicode": "264E",
@@ -16146,7 +17973,7 @@
],
"name": "libra",
"shortname": ":libra:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16159,9 +17986,8 @@
"zodiac",
"sign",
"purple-square",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♎"
},
@@ -16179,12 +18005,20 @@
"bench",
"press",
"squats",
- "deadlift"
- ]
+ "deadlift",
+ "men",
+ "workout",
+ "flex",
+ "sport",
+ "weight lifting",
+ "win",
+ "diversity"
+ ],
+ "moji": "🏋"
},
"lifter_tone1": {
"unicode": "1F3CB-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "weight lifter tone 1",
"shortname": ":lifter_tone1:",
"category": "activity",
@@ -16197,11 +18031,12 @@
"press",
"squats",
"deadlift"
- ]
+ ],
+ "moji": "🏋🏻"
},
"lifter_tone2": {
"unicode": "1F3CB-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "weight lifter tone 2",
"shortname": ":lifter_tone2:",
"category": "activity",
@@ -16214,11 +18049,12 @@
"press",
"squats",
"deadlift"
- ]
+ ],
+ "moji": "🏋🏼"
},
"lifter_tone3": {
"unicode": "1F3CB-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "weight lifter tone 3",
"shortname": ":lifter_tone3:",
"category": "activity",
@@ -16231,11 +18067,12 @@
"press",
"squats",
"deadlift"
- ]
+ ],
+ "moji": "🏋🏽"
},
"lifter_tone4": {
"unicode": "1F3CB-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "weight lifter tone 4",
"shortname": ":lifter_tone4:",
"category": "activity",
@@ -16248,11 +18085,12 @@
"press",
"squats",
"deadlift"
- ]
+ ],
+ "moji": "🏋🏾"
},
"lifter_tone5": {
"unicode": "1F3CB-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "weight lifter tone 5",
"shortname": ":lifter_tone5:",
"category": "activity",
@@ -16265,28 +18103,15 @@
"press",
"squats",
"deadlift"
- ]
- },
- "light_check_mark": {
- "unicode": "1F5F8",
- "unicode_alternates": [],
- "name": "light check mark",
- "shortname": ":light_check_mark:",
- "category": "objects_symbols",
- "aliases": [
- ":light_mark:"
],
- "aliases_ascii": [],
- "keywords": [
- "vote"
- ]
+ "moji": "🏋🏿"
},
"light_rail": {
"unicode": "1F688",
"unicode_alternates": [],
"name": "light rail",
"shortname": ":light_rail:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16294,7 +18119,8 @@
"vehicle",
"train",
"rail",
- "light"
+ "light",
+ "travel"
],
"moji": "🚈"
},
@@ -16303,18 +18129,20 @@
"unicode_alternates": [],
"name": "link symbol",
"shortname": ":link:",
- "category": "other",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"rings",
- "url"
+ "url",
+ "symbol",
+ "office"
],
"moji": "🔗"
},
"lion_face": {
"unicode": "1F981",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "lion face",
"shortname": ":lion_face:",
"category": "nature",
@@ -16322,50 +18150,62 @@
":lion:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "wildlife",
+ "roar",
+ "cat",
+ "animal"
+ ],
+ "moji": "🦁"
},
"lips": {
"unicode": "1F444",
"unicode_alternates": [],
"name": "mouth",
"shortname": ":lips:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"kiss",
- "mouth"
+ "mouth",
+ "women",
+ "body",
+ "sexy",
+ "lip"
],
"moji": "👄"
},
- "lips2": {
- "unicode": "1F5E2",
- "unicode_alternates": [],
- "name": "lips",
- "shortname": ":lips2:",
- "category": "people",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "kiss",
- "mouth"
- ]
- },
"lipstick": {
"unicode": "1F484",
"unicode_alternates": [],
"name": "lipstick",
"shortname": ":lipstick:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fashion",
"female",
- "girl"
+ "girl",
+ "object",
+ "women",
+ "sexy",
+ "lip"
],
"moji": "💄"
},
+ "lizard": {
+ "unicode": "1F98E",
+ "unicode_alternates": [],
+ "name": "lizard",
+ "shortname": ":lizard:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦎"
+ },
"lock": {
"unicode": "1F512",
"unicode_alternates": [],
@@ -16376,7 +18216,9 @@
"aliases_ascii": [],
"keywords": [
"password",
- "security"
+ "security",
+ "object",
+ "lock"
],
"moji": "🔒"
},
@@ -16390,7 +18232,9 @@
"aliases_ascii": [],
"keywords": [
"secret",
- "security"
+ "security",
+ "object",
+ "lock"
],
"moji": "🔏"
},
@@ -16399,7 +18243,7 @@
"unicode_alternates": [],
"name": "lollipop",
"shortname": ":lollipop:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16410,9 +18254,8 @@
"lollipop",
"stick",
"lick",
- "sweet",
"sugar",
- "candy"
+ "halloween"
],
"moji": "🍭"
},
@@ -16421,11 +18264,12 @@
"unicode_alternates": [],
"name": "double curly loop",
"shortname": ":loop:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "curly"
+ "curly",
+ "symbol"
],
"moji": "➿"
},
@@ -16434,10 +18278,13 @@
"unicode_alternates": [],
"name": "speaker with three sound waves",
"shortname": ":loud_sound:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": [],
+ "keywords": [
+ "alarm",
+ "symbol"
+ ],
"moji": "🔊"
},
"loudspeaker": {
@@ -16445,12 +18292,15 @@
"unicode_alternates": [],
"name": "public address loudspeaker",
"shortname": ":loudspeaker:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"sound",
- "volume"
+ "volume",
+ "object",
+ "alarm",
+ "symbol"
],
"moji": "📢"
},
@@ -16459,7 +18309,7 @@
"unicode_alternates": [],
"name": "love hotel",
"shortname": ":love_hotel:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16468,7 +18318,6 @@
"like",
"love",
"hotel",
- "love",
"sex",
"romance",
"leisure",
@@ -16476,7 +18325,9 @@
"prostitution",
"hospital",
"birth",
- "happy"
+ "happy",
+ "places",
+ "building"
],
"moji": "🏩"
},
@@ -16485,7 +18336,7 @@
"unicode_alternates": [],
"name": "love letter",
"shortname": ":love_letter:",
- "category": "emoticons",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16497,7 +18348,8 @@
"love",
"letter",
"kiss",
- "heart"
+ "heart",
+ "object"
],
"moji": "💌"
},
@@ -16506,15 +18358,29 @@
"unicode_alternates": [],
"name": "low brightness symbol",
"shortname": ":low_brightness:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"summer",
- "sun"
+ "sun",
+ "symbol"
],
"moji": "🔅"
},
+ "lying_face": {
+ "unicode": "1F925",
+ "unicode_alternates": [],
+ "name": "lying face",
+ "shortname": ":lying_face:",
+ "category": "people",
+ "aliases": [
+ ":liar:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤥"
+ },
"m": {
"unicode": "24C2",
"unicode_alternates": [
@@ -16522,13 +18388,14 @@
],
"name": "circled latin capital letter m",
"shortname": ":m:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"blue-circle",
- "letter"
+ "letter",
+ "symbol"
],
"moji": "Ⓜ"
},
@@ -16546,7 +18413,8 @@
"detective",
"investigator",
"detail",
- "details"
+ "details",
+ "object"
],
"moji": "🔍"
},
@@ -16564,7 +18432,8 @@
"detective",
"investigator",
"detail",
- "details"
+ "details",
+ "object"
],
"moji": "🔎"
},
@@ -16575,13 +18444,15 @@
],
"name": "mahjong tile red dragon",
"shortname": ":mahjong:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"game",
- "kanji"
+ "kanji",
+ "object",
+ "symbol"
],
"moji": "🀄"
},
@@ -16596,7 +18467,8 @@
"keywords": [
"communication",
"email",
- "inbox"
+ "inbox",
+ "object"
],
"moji": "📫"
},
@@ -16611,7 +18483,9 @@
"keywords": [
"communication",
"email",
- "inbox"
+ "inbox",
+ "object",
+ "office"
],
"moji": "📪"
},
@@ -16626,7 +18500,8 @@
"keywords": [
"communication",
"email",
- "inbox"
+ "inbox",
+ "object"
],
"moji": "📬"
},
@@ -16640,7 +18515,8 @@
"aliases_ascii": [],
"keywords": [
"email",
- "inbox"
+ "inbox",
+ "object"
],
"moji": "📭"
},
@@ -16649,7 +18525,7 @@
"unicode_alternates": [],
"name": "man",
"shortname": ":man:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16657,13 +18533,173 @@
"dad",
"father",
"guy",
- "mustashe"
+ "mustashe",
+ "people",
+ "men",
+ "sex",
+ "diversity",
+ "selfie",
+ "boys night"
],
"moji": "👨"
},
+ "man_dancing": {
+ "unicode": "1F57A",
+ "unicode_alternates": [],
+ "name": "man dancing",
+ "shortname": ":man_dancing:",
+ "category": "people",
+ "aliases": [
+ ":male_dancer:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🕺"
+ },
+ "man_dancing_tone1": {
+ "unicode": "1F57A-1F3FB",
+ "unicode_alternates": [],
+ "name": "man dancing tone 1",
+ "shortname": ":man_dancing_tone1:",
+ "category": "activity",
+ "aliases": [
+ ":male_dancer_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🕺🏻"
+ },
+ "man_dancing_tone2": {
+ "unicode": "1F57A-1F3FC",
+ "unicode_alternates": [],
+ "name": "man dancing tone 2",
+ "shortname": ":man_dancing_tone2:",
+ "category": "activity",
+ "aliases": [
+ ":male_dancer_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🕺🏼"
+ },
+ "man_dancing_tone3": {
+ "unicode": "1F57A-1F3FD",
+ "unicode_alternates": [],
+ "name": "man dancing tone 3",
+ "shortname": ":man_dancing_tone3:",
+ "category": "activity",
+ "aliases": [
+ ":male_dancer_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🕺🏽"
+ },
+ "man_dancing_tone4": {
+ "unicode": "1F57A-1F3FE",
+ "unicode_alternates": [],
+ "name": "man dancing tone 4",
+ "shortname": ":man_dancing_tone4:",
+ "category": "activity",
+ "aliases": [
+ ":male_dancer_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🕺🏾"
+ },
+ "man_dancing_tone5": {
+ "unicode": "1F57A-1F3FF",
+ "unicode_alternates": [],
+ "name": "man dancing tone 5",
+ "shortname": ":man_dancing_tone5:",
+ "category": "activity",
+ "aliases": [
+ ":male_dancer_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🕺🏿"
+ },
+ "man_in_tuxedo": {
+ "unicode": "1F935",
+ "unicode_alternates": [],
+ "name": "man in tuxedo",
+ "shortname": ":man_in_tuxedo:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤵"
+ },
+ "man_in_tuxedo_tone1": {
+ "unicode": "1F935-1F3FB",
+ "unicode_alternates": [],
+ "name": "man in tuxedo tone 1",
+ "shortname": ":man_in_tuxedo_tone1:",
+ "category": "people",
+ "aliases": [
+ ":tuxedo_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤵🏻"
+ },
+ "man_in_tuxedo_tone2": {
+ "unicode": "1F935-1F3FC",
+ "unicode_alternates": [],
+ "name": "man in tuxedo tone 2",
+ "shortname": ":man_in_tuxedo_tone2:",
+ "category": "people",
+ "aliases": [
+ ":tuxedo_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤵🏼"
+ },
+ "man_in_tuxedo_tone3": {
+ "unicode": "1F935-1F3FD",
+ "unicode_alternates": [],
+ "name": "man in tuxedo tone 3",
+ "shortname": ":man_in_tuxedo_tone3:",
+ "category": "people",
+ "aliases": [
+ ":tuxedo_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤵🏽"
+ },
+ "man_in_tuxedo_tone4": {
+ "unicode": "1F935-1F3FE",
+ "unicode_alternates": [],
+ "name": "man in tuxedo tone 4",
+ "shortname": ":man_in_tuxedo_tone4:",
+ "category": "people",
+ "aliases": [
+ ":tuxedo_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤵🏾"
+ },
+ "man_in_tuxedo_tone5": {
+ "unicode": "1F935-1F3FF",
+ "unicode_alternates": [],
+ "name": "man in tuxedo tone 5",
+ "shortname": ":man_in_tuxedo_tone5:",
+ "category": "people",
+ "aliases": [
+ ":tuxedo_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤵🏿"
+ },
"man_tone1": {
"unicode": "1F468-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man tone 1",
"shortname": ":man_tone1:",
"category": "people",
@@ -16675,11 +18711,12 @@
"father",
"guy",
"mustache"
- ]
+ ],
+ "moji": "👨🏻"
},
"man_tone2": {
"unicode": "1F468-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man tone 2",
"shortname": ":man_tone2:",
"category": "people",
@@ -16691,11 +18728,12 @@
"father",
"guy",
"mustache"
- ]
+ ],
+ "moji": "👨🏼"
},
"man_tone3": {
"unicode": "1F468-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man tone 3",
"shortname": ":man_tone3:",
"category": "people",
@@ -16707,11 +18745,12 @@
"father",
"guy",
"mustache"
- ]
+ ],
+ "moji": "👨🏽"
},
"man_tone4": {
"unicode": "1F468-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man tone 4",
"shortname": ":man_tone4:",
"category": "people",
@@ -16723,11 +18762,12 @@
"father",
"guy",
"mustache"
- ]
+ ],
+ "moji": "👨🏾"
},
"man_tone5": {
"unicode": "1F468-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man tone 5",
"shortname": ":man_tone5:",
"category": "people",
@@ -16739,14 +18779,15 @@
"father",
"guy",
"mustache"
- ]
+ ],
+ "moji": "👨🏿"
},
"man_with_gua_pi_mao": {
"unicode": "1F472",
"unicode_alternates": [],
"name": "man with gua pi mao",
"shortname": ":man_with_gua_pi_mao:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16755,13 +18796,17 @@
"skullcap",
"chinese",
"asian",
- "qing"
+ "qing",
+ "people",
+ "hat",
+ "men",
+ "diversity"
],
"moji": "👲"
},
"man_with_gua_pi_mao_tone1": {
"unicode": "1F472-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with gua pi mao tone 1",
"shortname": ":man_with_gua_pi_mao_tone1:",
"category": "people",
@@ -16774,11 +18819,12 @@
"chinese",
"asian",
"qing"
- ]
+ ],
+ "moji": "👲🏻"
},
"man_with_gua_pi_mao_tone2": {
"unicode": "1F472-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with gua pi mao tone 2",
"shortname": ":man_with_gua_pi_mao_tone2:",
"category": "people",
@@ -16791,11 +18837,12 @@
"chinese",
"asian",
"qing"
- ]
+ ],
+ "moji": "👲🏼"
},
"man_with_gua_pi_mao_tone3": {
"unicode": "1F472-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with gua pi mao tone 3",
"shortname": ":man_with_gua_pi_mao_tone3:",
"category": "people",
@@ -16808,11 +18855,12 @@
"chinese",
"asian",
"qing"
- ]
+ ],
+ "moji": "👲🏽"
},
"man_with_gua_pi_mao_tone4": {
"unicode": "1F472-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with gua pi mao tone 4",
"shortname": ":man_with_gua_pi_mao_tone4:",
"category": "people",
@@ -16825,11 +18873,12 @@
"chinese",
"asian",
"qing"
- ]
+ ],
+ "moji": "👲🏾"
},
"man_with_gua_pi_mao_tone5": {
"unicode": "1F472-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with gua pi mao tone 5",
"shortname": ":man_with_gua_pi_mao_tone5:",
"category": "people",
@@ -16842,14 +18891,15 @@
"chinese",
"asian",
"qing"
- ]
+ ],
+ "moji": "👲🏿"
},
"man_with_turban": {
"unicode": "1F473",
"unicode_alternates": [],
"name": "man with turban",
"shortname": ":man_with_turban:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -16862,13 +18912,16 @@
"indian",
"mummy",
"wisdom",
- "peace"
+ "peace",
+ "people",
+ "hat",
+ "diversity"
],
"moji": "👳"
},
"man_with_turban_tone1": {
"unicode": "1F473-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with turban tone 1",
"shortname": ":man_with_turban_tone1:",
"category": "people",
@@ -16884,11 +18937,12 @@
"mummy",
"wisdom",
"peace"
- ]
+ ],
+ "moji": "👳🏻"
},
"man_with_turban_tone2": {
"unicode": "1F473-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with turban tone 2",
"shortname": ":man_with_turban_tone2:",
"category": "people",
@@ -16904,11 +18958,12 @@
"mummy",
"wisdom",
"peace"
- ]
+ ],
+ "moji": "👳🏼"
},
"man_with_turban_tone3": {
"unicode": "1F473-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with turban tone 3",
"shortname": ":man_with_turban_tone3:",
"category": "people",
@@ -16924,11 +18979,12 @@
"mummy",
"wisdom",
"peace"
- ]
+ ],
+ "moji": "👳🏽"
},
"man_with_turban_tone4": {
"unicode": "1F473-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with turban tone 4",
"shortname": ":man_with_turban_tone4:",
"category": "people",
@@ -16944,11 +19000,12 @@
"mummy",
"wisdom",
"peace"
- ]
+ ],
+ "moji": "👳🏾"
},
"man_with_turban_tone5": {
"unicode": "1F473-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "man with turban tone 5",
"shortname": ":man_with_turban_tone5:",
"category": "people",
@@ -16964,19 +19021,22 @@
"mummy",
"wisdom",
"peace"
- ]
+ ],
+ "moji": "👳🏿"
},
"mans_shoe": {
"unicode": "1F45E",
"unicode_alternates": [],
"name": "mans shoe",
"shortname": ":mans_shoe:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fashion",
- "male"
+ "male",
+ "shoe",
+ "accessories"
],
"moji": "👞"
},
@@ -16985,7 +19045,7 @@
"unicode_alternates": [],
"name": "world map",
"shortname": ":map:",
- "category": "travel_places",
+ "category": "objects",
"aliases": [
":world_map:"
],
@@ -16993,8 +19053,12 @@
"keywords": [
"atlas",
"earth",
- "cartography"
- ]
+ "cartography",
+ "travel",
+ "map",
+ "vacation"
+ ],
+ "moji": "🗺"
},
"maple_leaf": {
"unicode": "1F341",
@@ -17012,28 +19076,42 @@
"maple",
"leaf",
"syrup",
- "canada",
"tree"
],
"moji": "🍁"
},
+ "martial_arts_uniform": {
+ "unicode": "1F94B",
+ "unicode_alternates": [],
+ "name": "martial arts uniform",
+ "shortname": ":martial_arts_uniform:",
+ "category": "activity",
+ "aliases": [
+ ":karate_uniform:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥋"
+ },
"mask": {
"unicode": "1F637",
"unicode_alternates": [],
"name": "face with medical mask",
"shortname": ":mask:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"face",
"ill",
"sick",
- "sick",
"virus",
"flu",
"medical",
- "mask"
+ "mask",
+ "smiley",
+ "dead",
+ "health"
],
"moji": "😷"
},
@@ -17042,19 +19120,22 @@
"unicode_alternates": [],
"name": "face massage",
"shortname": ":massage:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"female",
"girl",
- "woman"
+ "woman",
+ "people",
+ "women",
+ "diversity"
],
"moji": "💆"
},
"massage_tone1": {
"unicode": "1F486-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face massage tone 1",
"shortname": ":massage_tone1:",
"category": "people",
@@ -17064,11 +19145,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💆🏻"
},
"massage_tone2": {
"unicode": "1F486-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face massage tone 2",
"shortname": ":massage_tone2:",
"category": "people",
@@ -17078,11 +19160,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💆🏼"
},
"massage_tone3": {
"unicode": "1F486-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face massage tone 3",
"shortname": ":massage_tone3:",
"category": "people",
@@ -17092,11 +19175,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💆🏽"
},
"massage_tone4": {
"unicode": "1F486-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face massage tone 4",
"shortname": ":massage_tone4:",
"category": "people",
@@ -17106,11 +19190,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💆🏾"
},
"massage_tone5": {
"unicode": "1F486-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face massage tone 5",
"shortname": ":massage_tone5:",
"category": "people",
@@ -17120,14 +19205,15 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "💆🏿"
},
"meat_on_bone": {
"unicode": "1F356",
"unicode_alternates": [],
"name": "meat on bone",
"shortname": ":meat_on_bone:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17160,21 +19246,27 @@
"first",
"show",
"reward",
- "achievement"
- ]
+ "achievement",
+ "object",
+ "sport",
+ "perfect"
+ ],
+ "moji": "🏅"
},
"mega": {
"unicode": "1F4E3",
"unicode_alternates": [],
"name": "cheering megaphone",
"shortname": ":mega:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"sound",
"speaker",
- "volume"
+ "volume",
+ "object",
+ "sport"
],
"moji": "📣"
},
@@ -17183,7 +19275,7 @@
"unicode_alternates": [],
"name": "melon",
"shortname": ":melon:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17192,26 +19284,34 @@
"nature",
"melon",
"cantaloupe",
- "honeydew"
+ "honeydew",
+ "boobs"
],
"moji": "🍈"
},
"menorah": {
"unicode": "1F54E",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "menorah with nine branches",
"shortname": ":menorah:",
"category": "symbols",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "religion",
+ "object",
+ "jew",
+ "symbol",
+ "holidays"
+ ],
+ "moji": "🕎"
},
"mens": {
"unicode": "1F6B9",
"unicode_alternates": [],
"name": "mens symbol",
"shortname": ":mens:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17220,17 +19320,17 @@
"wc",
"men",
"bathroom",
- "restroom",
"sign",
"boy",
"male",
- "avatar"
+ "avatar",
+ "symbol"
],
"moji": "🚹"
},
"metal": {
"unicode": "1F918",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sign of the horns",
"shortname": ":metal:",
"category": "people",
@@ -17242,12 +19342,19 @@
"band",
"concert",
"fingers",
- "rocknroll"
- ]
+ "rocknroll",
+ "body",
+ "hands",
+ "hi",
+ "diversity",
+ "boys night",
+ "parties"
+ ],
+ "moji": "🤘"
},
"metal_tone1": {
"unicode": "1F918-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sign of the horns tone 1",
"shortname": ":metal_tone1:",
"category": "people",
@@ -17260,11 +19367,12 @@
"concert",
"fingers",
"rocknroll"
- ]
+ ],
+ "moji": "🤘🏻"
},
"metal_tone2": {
"unicode": "1F918-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sign of the horns tone 2",
"shortname": ":metal_tone2:",
"category": "people",
@@ -17277,11 +19385,12 @@
"concert",
"fingers",
"rocknroll"
- ]
+ ],
+ "moji": "🤘🏼"
},
"metal_tone3": {
"unicode": "1F918-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sign of the horns tone 3",
"shortname": ":metal_tone3:",
"category": "people",
@@ -17294,11 +19403,12 @@
"concert",
"fingers",
"rocknroll"
- ]
+ ],
+ "moji": "🤘🏽"
},
"metal_tone4": {
"unicode": "1F918-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sign of the horns tone 4",
"shortname": ":metal_tone4:",
"category": "people",
@@ -17311,11 +19421,12 @@
"concert",
"fingers",
"rocknroll"
- ]
+ ],
+ "moji": "🤘🏾"
},
"metal_tone5": {
"unicode": "1F918-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sign of the horns tone 5",
"shortname": ":metal_tone5:",
"category": "people",
@@ -17328,14 +19439,15 @@
"concert",
"fingers",
"rocknroll"
- ]
+ ],
+ "moji": "🤘🏿"
},
"metro": {
"unicode": "1F687",
"unicode_alternates": [],
"name": "metro",
"shortname": ":metro:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17346,8 +19458,8 @@
"underground",
"metro",
"subway",
- "underground",
- "train"
+ "train",
+ "travel"
],
"moji": "🚇"
},
@@ -17356,7 +19468,7 @@
"unicode_alternates": [],
"name": "microphone",
"shortname": ":microphone:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17366,9 +19478,9 @@
"microphone",
"mic",
"audio",
- "sound",
"voice",
- "karaoke"
+ "karaoke",
+ "instruments"
],
"moji": "🎤"
},
@@ -17377,7 +19489,7 @@
"unicode_alternates": [],
"name": "studio microphone",
"shortname": ":microphone2:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":studio_microphone:"
],
@@ -17385,8 +19497,11 @@
"keywords": [
"mic",
"audio",
- "recording"
- ]
+ "recording",
+ "electronics",
+ "object"
+ ],
+ "moji": "🎙"
},
"microscope": {
"unicode": "1F52C",
@@ -17399,7 +19514,9 @@
"keywords": [
"experiment",
"laboratory",
- "zoomin"
+ "zoomin",
+ "object",
+ "science"
],
"moji": "🔬"
},
@@ -17414,12 +19531,17 @@
],
"aliases_ascii": [],
"keywords": [
- "fu"
- ]
+ "fu",
+ "body",
+ "hands",
+ "middle finger",
+ "diversity"
+ ],
+ "moji": "🖕"
},
"middle_finger_tone1": {
"unicode": "1F595-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "reversed hand with middle finger extended tone 1",
"shortname": ":middle_finger_tone1:",
"category": "people",
@@ -17429,11 +19551,12 @@
"aliases_ascii": [],
"keywords": [
"fu"
- ]
+ ],
+ "moji": "🖕🏻"
},
"middle_finger_tone2": {
"unicode": "1F595-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "reversed hand with middle finger extended tone 2",
"shortname": ":middle_finger_tone2:",
"category": "people",
@@ -17443,11 +19566,12 @@
"aliases_ascii": [],
"keywords": [
"fu"
- ]
+ ],
+ "moji": "🖕🏼"
},
"middle_finger_tone3": {
"unicode": "1F595-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "reversed hand with middle finger extended tone 3",
"shortname": ":middle_finger_tone3:",
"category": "people",
@@ -17457,11 +19581,12 @@
"aliases_ascii": [],
"keywords": [
"fu"
- ]
+ ],
+ "moji": "🖕🏽"
},
"middle_finger_tone4": {
"unicode": "1F595-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "reversed hand with middle finger extended tone 4",
"shortname": ":middle_finger_tone4:",
"category": "people",
@@ -17471,11 +19596,12 @@
"aliases_ascii": [],
"keywords": [
"fu"
- ]
+ ],
+ "moji": "🖕🏾"
},
"middle_finger_tone5": {
"unicode": "1F595-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "reversed hand with middle finger extended tone 5",
"shortname": ":middle_finger_tone5:",
"category": "people",
@@ -17485,14 +19611,15 @@
"aliases_ascii": [],
"keywords": [
"fu"
- ]
+ ],
+ "moji": "🖕🏿"
},
"military_medal": {
"unicode": "1F396",
"unicode_alternates": [],
"name": "military medal",
"shortname": ":military_medal:",
- "category": "celebration",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17500,15 +19627,32 @@
"acknowledgment",
"purple heart",
"heroism",
- "veteran"
- ]
+ "veteran",
+ "object",
+ "award",
+ "win"
+ ],
+ "moji": "🎖"
+ },
+ "milk": {
+ "unicode": "1F95B",
+ "unicode_alternates": [],
+ "name": "glass of milk",
+ "shortname": ":milk:",
+ "category": "food",
+ "aliases": [
+ ":glass_of_milk:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥛"
},
"milky_way": {
"unicode": "1F30C",
"unicode_alternates": [],
"name": "milky way",
"shortname": ":milky_way:",
- "category": "nature",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17519,8 +19663,10 @@
"star",
"stars",
"planets",
- "space",
- "sky"
+ "sky",
+ "places",
+ "travel",
+ "vacation"
],
"moji": "🌌"
},
@@ -17529,7 +19675,7 @@
"unicode_alternates": [],
"name": "minibus",
"shortname": ":minibus:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17538,8 +19684,7 @@
"vehicle",
"bus",
"city",
- "transport",
- "transportation"
+ "transport"
],
"moji": "🚐"
},
@@ -17556,7 +19701,8 @@
"disc",
"disk",
"record",
- "technology"
+ "technology",
+ "electronics"
],
"moji": "💽"
},
@@ -17565,17 +19711,18 @@
"unicode_alternates": [],
"name": "mobile phone off",
"shortname": ":mobile_phone_off:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "mute"
+ "mute",
+ "symbol"
],
"moji": "📴"
},
"money_mouth": {
"unicode": "1F911",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "money-mouth face",
"shortname": ":money_mouth:",
"category": "people",
@@ -17583,7 +19730,14 @@
":money_mouth_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "smiley",
+ "win",
+ "money",
+ "emotion",
+ "boys night"
+ ],
+ "moji": "🤑"
},
"money_with_wings": {
"unicode": "1F4B8",
@@ -17607,7 +19761,7 @@
"burned",
"gift",
"cash",
- "dollar"
+ "boys night"
],
"moji": "💸"
},
@@ -17622,7 +19776,10 @@
"keywords": [
"coins",
"dollar",
- "payment"
+ "payment",
+ "bag",
+ "award",
+ "money"
],
"moji": "💰"
},
@@ -17640,7 +19797,8 @@
"monkey",
"primate",
"banana",
- "silly"
+ "silly",
+ "wildlife"
],
"moji": "🐒"
},
@@ -17663,7 +19821,7 @@
"unicode_alternates": [],
"name": "monorail",
"shortname": ":monorail:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17672,66 +19830,18 @@
"train",
"mono",
"rail",
- "transport"
+ "transport",
+ "travel",
+ "vacation"
],
"moji": "🚝"
},
- "mood_bubble": {
- "unicode": "1F5F0",
- "unicode_alternates": [],
- "name": "mood bubble",
- "shortname": ":mood_bubble:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "conversation",
- "communication",
- "comic",
- "feeling"
- ]
- },
- "mood_bubble_lightning": {
- "unicode": "1F5F1",
- "unicode_alternates": [],
- "name": "lightning mood bubble",
- "shortname": ":mood_bubble_lightning:",
- "category": "objects_symbols",
- "aliases": [
- ":lightning_mood_bubble:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "conversation",
- "communication",
- "comic",
- "feeling"
- ]
- },
- "mood_lightning": {
- "unicode": "1F5F2",
- "unicode_alternates": [],
- "name": "lightning mood",
- "shortname": ":mood_lightning:",
- "category": "objects_symbols",
- "aliases": [
- ":lightning_mood:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "zap",
- "electric",
- "current"
- ]
- },
"mortar_board": {
"unicode": "1F393",
"unicode_alternates": [],
"name": "graduation cap",
"shortname": ":mortar_board:",
- "category": "objects",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17742,33 +19852,55 @@
"hat",
"school",
"university",
- "graduation",
- "cap",
"mortarboard",
"academic",
"education",
"ceremony",
"square",
- "tassel"
+ "tassel",
+ "office",
+ "accessories"
],
"moji": "🎓"
},
"mosque": {
"unicode": "1F54C",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mosque",
"shortname": ":mosque:",
"category": "travel",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "places",
+ "religion",
+ "building",
+ "vacation",
+ "condolence"
+ ],
+ "moji": "🕌"
+ },
+ "motor_scooter": {
+ "unicode": "1F6F5",
+ "unicode_alternates": [],
+ "name": "motor scooter",
+ "shortname": ":motor_scooter:",
+ "category": "travel",
+ "aliases": [
+ ":motorbike:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "moped"
+ ],
+ "moji": "🛵"
},
"motorboat": {
"unicode": "1F6E5",
"unicode_alternates": [],
"name": "motorboat",
"shortname": ":motorboat:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17776,30 +19908,35 @@
"vehicle",
"boat",
"speedboat",
- "powerboat"
- ]
+ "powerboat",
+ "travel"
+ ],
+ "moji": "🛥"
},
"motorcycle": {
"unicode": "1F3CD",
"unicode_alternates": [],
"name": "racing motorcycle",
"shortname": ":motorcycle:",
- "category": "activity",
+ "category": "travel",
"aliases": [
":racing_motorcycle:"
],
"aliases_ascii": [],
"keywords": [
"bike",
- "speed"
- ]
+ "speed",
+ "transportation",
+ "travel"
+ ],
+ "moji": "🏍"
},
"motorway": {
"unicode": "1F6E3",
"unicode_alternates": [],
"name": "motorway",
"shortname": ":motorway:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17807,43 +19944,56 @@
"highway",
"freeway",
"traffic",
- "travel"
- ]
+ "travel",
+ "vacation",
+ "camp"
+ ],
+ "moji": "🛣"
},
"mount_fuji": {
"unicode": "1F5FB",
"unicode_alternates": [],
"name": "mount fuji",
"shortname": ":mount_fuji:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"japan",
"mountain",
"nature",
- "photo"
+ "photo",
+ "places",
+ "travel",
+ "vacation",
+ "cold",
+ "camp"
],
"moji": "🗻"
},
"mountain": {
"unicode": "26F0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mountain",
"shortname": ":mountain:",
"category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "place"
- ]
+ "place",
+ "places",
+ "travel",
+ "vacation",
+ "camp"
+ ],
+ "moji": "⛰"
},
"mountain_bicyclist": {
"unicode": "1F6B5",
"unicode_alternates": [],
"name": "mountain bicyclist",
"shortname": ":mountain_bicyclist:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17855,13 +20005,15 @@
"bike",
"pedal",
"bicycle",
- "transportation"
+ "men",
+ "sport",
+ "diversity"
],
"moji": "🚵"
},
"mountain_bicyclist_tone1": {
"unicode": "1F6B5-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mountain bicyclist tone 1",
"shortname": ":mountain_bicyclist_tone1:",
"category": "activity",
@@ -17872,13 +20024,13 @@
"transportation",
"bike",
"pedal",
- "bicycle",
- "transportation"
- ]
+ "bicycle"
+ ],
+ "moji": "🚵🏻"
},
"mountain_bicyclist_tone2": {
"unicode": "1F6B5-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mountain bicyclist tone 2",
"shortname": ":mountain_bicyclist_tone2:",
"category": "activity",
@@ -17889,13 +20041,13 @@
"transportation",
"bike",
"pedal",
- "bicycle",
- "transportation"
- ]
+ "bicycle"
+ ],
+ "moji": "🚵🏼"
},
"mountain_bicyclist_tone3": {
"unicode": "1F6B5-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mountain bicyclist tone 3",
"shortname": ":mountain_bicyclist_tone3:",
"category": "activity",
@@ -17906,13 +20058,13 @@
"transportation",
"bike",
"pedal",
- "bicycle",
- "transportation"
- ]
+ "bicycle"
+ ],
+ "moji": "🚵🏽"
},
"mountain_bicyclist_tone4": {
"unicode": "1F6B5-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mountain bicyclist tone 4",
"shortname": ":mountain_bicyclist_tone4:",
"category": "activity",
@@ -17923,13 +20075,13 @@
"transportation",
"bike",
"pedal",
- "bicycle",
- "transportation"
- ]
+ "bicycle"
+ ],
+ "moji": "🚵🏾"
},
"mountain_bicyclist_tone5": {
"unicode": "1F6B5-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "mountain bicyclist tone 5",
"shortname": ":mountain_bicyclist_tone5:",
"category": "activity",
@@ -17940,16 +20092,16 @@
"transportation",
"bike",
"pedal",
- "bicycle",
- "transportation"
- ]
+ "bicycle"
+ ],
+ "moji": "🚵🏿"
},
"mountain_cableway": {
"unicode": "1F6A0",
"unicode_alternates": [],
"name": "mountain cableway",
"shortname": ":mountain_cableway:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17959,7 +20111,8 @@
"cable",
"rail",
"train",
- "railway"
+ "railway",
+ "travel"
],
"moji": "🚠"
},
@@ -17968,7 +20121,7 @@
"unicode_alternates": [],
"name": "mountain railway",
"shortname": ":mountain_railway:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -17977,7 +20130,8 @@
"railway",
"rail",
"train",
- "transport"
+ "transport",
+ "travel"
],
"moji": "🚞"
},
@@ -17986,7 +20140,7 @@
"unicode_alternates": [],
"name": "snow capped mountain",
"shortname": ":mountain_snow:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":snow_capped_mountain:"
],
@@ -17995,8 +20149,13 @@
"cold",
"elevation",
"hiking",
- "peak"
- ]
+ "peak",
+ "places",
+ "travel",
+ "vacation",
+ "camp"
+ ],
+ "moji": "🏔"
},
"mouse": {
"unicode": "1F42D",
@@ -18029,25 +20188,9 @@
],
"moji": "🐁"
},
- "mouse_one": {
- "unicode": "1F5AF",
- "unicode_alternates": [],
- "name": "one button mouse",
- "shortname": ":mouse_one:",
- "category": "objects_symbols",
- "aliases": [
- ":one_button_mouse:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "computer",
- "input",
- "device"
- ]
- },
"mouse_three_button": {
"unicode": "1F5B1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "three button mouse",
"shortname": ":mouse_three_button:",
"category": "objects",
@@ -18059,8 +20202,12 @@
"3",
"computer",
"object",
- "office"
- ]
+ "office",
+ "electronics",
+ "work",
+ "game"
+ ],
+ "moji": "🖱"
},
"movie_camera": {
"unicode": "1F3A5",
@@ -18078,7 +20225,8 @@
"camcorder",
"video",
"motion",
- "picture"
+ "picture",
+ "object"
],
"moji": "🎥"
},
@@ -18087,21 +20235,101 @@
"unicode_alternates": [],
"name": "moyai",
"shortname": ":moyai:",
- "category": "places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"island",
- "stone"
+ "stone",
+ "travel",
+ "vacation"
],
"moji": "🗿"
},
+ "mrs_claus": {
+ "unicode": "1F936",
+ "unicode_alternates": [],
+ "name": "mother christmas",
+ "shortname": ":mrs_claus:",
+ "category": "people",
+ "aliases": [
+ ":mother_christmas:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤶"
+ },
+ "mrs_claus_tone1": {
+ "unicode": "1F936-1F3FB",
+ "unicode_alternates": [],
+ "name": "mother christmas tone 1",
+ "shortname": ":mrs_claus_tone1:",
+ "category": "people",
+ "aliases": [
+ ":mother_christmas_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤶🏻"
+ },
+ "mrs_claus_tone2": {
+ "unicode": "1F936-1F3FC",
+ "unicode_alternates": [],
+ "name": "mother christmas tone 2",
+ "shortname": ":mrs_claus_tone2:",
+ "category": "people",
+ "aliases": [
+ ":mother_christmas_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤶🏼"
+ },
+ "mrs_claus_tone3": {
+ "unicode": "1F936-1F3FD",
+ "unicode_alternates": [],
+ "name": "mother christmas tone 3",
+ "shortname": ":mrs_claus_tone3:",
+ "category": "people",
+ "aliases": [
+ ":mother_christmas_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤶🏽"
+ },
+ "mrs_claus_tone4": {
+ "unicode": "1F936-1F3FE",
+ "unicode_alternates": [],
+ "name": "mother christmas tone 4",
+ "shortname": ":mrs_claus_tone4:",
+ "category": "people",
+ "aliases": [
+ ":mother_christmas_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤶🏾"
+ },
+ "mrs_claus_tone5": {
+ "unicode": "1F936-1F3FF",
+ "unicode_alternates": [],
+ "name": "mother christmas tone 5",
+ "shortname": ":mrs_claus_tone5:",
+ "category": "people",
+ "aliases": [
+ ":mother_christmas_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤶🏿"
+ },
"muscle": {
"unicode": "1F4AA",
"unicode_alternates": [],
"name": "flexed biceps",
"shortname": ":muscle:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18110,13 +20338,20 @@
"hand",
"strong",
"muscle",
- "bicep"
+ "bicep",
+ "body",
+ "hands",
+ "workout",
+ "win",
+ "diversity",
+ "feminist",
+ "boys night"
],
"moji": "💪"
},
"muscle_tone1": {
"unicode": "1F4AA-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "flexed biceps tone 1",
"shortname": ":muscle_tone1:",
"category": "people",
@@ -18129,11 +20364,12 @@
"strong",
"muscle",
"bicep"
- ]
+ ],
+ "moji": "💪🏻"
},
"muscle_tone2": {
"unicode": "1F4AA-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "flexed biceps tone 2",
"shortname": ":muscle_tone2:",
"category": "people",
@@ -18146,11 +20382,12 @@
"strong",
"muscle",
"bicep"
- ]
+ ],
+ "moji": "💪🏼"
},
"muscle_tone3": {
"unicode": "1F4AA-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "flexed biceps tone 3",
"shortname": ":muscle_tone3:",
"category": "people",
@@ -18163,11 +20400,12 @@
"strong",
"muscle",
"bicep"
- ]
+ ],
+ "moji": "💪🏽"
},
"muscle_tone4": {
"unicode": "1F4AA-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "flexed biceps tone 4",
"shortname": ":muscle_tone4:",
"category": "people",
@@ -18180,11 +20418,12 @@
"strong",
"muscle",
"bicep"
- ]
+ ],
+ "moji": "💪🏾"
},
"muscle_tone5": {
"unicode": "1F4AA-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "flexed biceps tone 5",
"shortname": ":muscle_tone5:",
"category": "people",
@@ -18197,7 +20436,8 @@
"strong",
"muscle",
"bicep"
- ]
+ ],
+ "moji": "💪🏿"
},
"mushroom": {
"unicode": "1F344",
@@ -18213,7 +20453,9 @@
"mushroom",
"fungi",
"food",
- "fungus"
+ "fungus",
+ "nature",
+ "drugs"
],
"moji": "🍄"
},
@@ -18222,7 +20464,7 @@
"unicode_alternates": [],
"name": "musical keyboard",
"shortname": ":musical_keyboard:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18230,10 +20472,9 @@
"piano",
"music",
"keyboard",
- "piano",
"organ",
- "instrument",
- "electric"
+ "electric",
+ "instruments"
],
"moji": "🎹"
},
@@ -18242,7 +20483,7 @@
"unicode_alternates": [],
"name": "musical note",
"shortname": ":musical_note:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18250,8 +20491,9 @@
"musical",
"music",
"note",
- "music",
- "sound"
+ "sound",
+ "instruments",
+ "symbol"
],
"moji": "🎵"
},
@@ -18260,7 +20502,7 @@
"unicode_alternates": [],
"name": "musical score",
"shortname": ":musical_score:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18269,10 +20511,10 @@
"music",
"musical",
"score",
- "clef",
"g-clef",
"stave",
- "staff"
+ "staff",
+ "instruments"
],
"moji": "🎼"
},
@@ -18281,12 +20523,14 @@
"unicode_alternates": [],
"name": "speaker with cancellation stroke",
"shortname": ":mute:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"sound",
- "volume"
+ "volume",
+ "alarm",
+ "symbol"
],
"moji": "🔇"
},
@@ -18295,18 +20539,24 @@
"unicode_alternates": [],
"name": "nail polish",
"shortname": ":nail_care:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"beauty",
- "manicure"
+ "manicure",
+ "women",
+ "body",
+ "hands",
+ "nailpolish",
+ "diversity",
+ "girls night"
],
"moji": "💅"
},
"nail_care_tone1": {
"unicode": "1F485-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nail polish tone 1",
"shortname": ":nail_care_tone1:",
"category": "people",
@@ -18315,11 +20565,12 @@
"keywords": [
"beauty",
"manicure"
- ]
+ ],
+ "moji": "💅🏻"
},
"nail_care_tone2": {
"unicode": "1F485-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nail polish tone 2",
"shortname": ":nail_care_tone2:",
"category": "people",
@@ -18328,11 +20579,12 @@
"keywords": [
"beauty",
"manicure"
- ]
+ ],
+ "moji": "💅🏼"
},
"nail_care_tone3": {
"unicode": "1F485-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nail polish tone 3",
"shortname": ":nail_care_tone3:",
"category": "people",
@@ -18341,11 +20593,12 @@
"keywords": [
"beauty",
"manicure"
- ]
+ ],
+ "moji": "💅🏽"
},
"nail_care_tone4": {
"unicode": "1F485-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nail polish tone 4",
"shortname": ":nail_care_tone4:",
"category": "people",
@@ -18354,11 +20607,12 @@
"keywords": [
"beauty",
"manicure"
- ]
+ ],
+ "moji": "💅🏾"
},
"nail_care_tone5": {
"unicode": "1F485-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nail polish tone 5",
"shortname": ":nail_care_tone5:",
"category": "people",
@@ -18367,28 +20621,43 @@
"keywords": [
"beauty",
"manicure"
- ]
+ ],
+ "moji": "💅🏿"
},
"name_badge": {
"unicode": "1F4DB",
"unicode_alternates": [],
"name": "name badge",
"shortname": ":name_badge:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fire",
- "forbid"
+ "forbid",
+ "work"
],
"moji": "📛"
},
+ "nauseated_face": {
+ "unicode": "1F922",
+ "unicode_alternates": [],
+ "name": "nauseated face",
+ "shortname": ":nauseated_face:",
+ "category": "people",
+ "aliases": [
+ ":sick:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤢"
+ },
"necktie": {
"unicode": "1F454",
"unicode_alternates": [],
"name": "necktie",
"shortname": ":necktie:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18405,20 +20674,21 @@
"unicode_alternates": [],
"name": "negative squared cross mark",
"shortname": ":negative_squared_cross_mark:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"deny",
"green-square",
"no",
- "x"
+ "x",
+ "symbol"
],
"moji": "❎"
},
"nerd": {
"unicode": "1F913",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nerd face",
"shortname": ":nerd:",
"category": "people",
@@ -18426,31 +20696,18 @@
":nerd_face:"
],
"aliases_ascii": [],
- "keywords": []
- },
- "network": {
- "unicode": "1F5A7",
- "unicode_alternates": [],
- "name": "three networked computers",
- "shortname": ":network:",
- "category": "objects_symbols",
- "aliases": [
- ":three_networked_computers:"
- ],
- "aliases_ascii": [],
"keywords": [
- "lan",
- "wan",
- "network",
- "technology"
- ]
+ "smiley",
+ "glasses"
+ ],
+ "moji": "🤓"
},
"neutral_face": {
"unicode": "1F610",
"unicode_alternates": [],
"name": "neutral face",
"shortname": ":neutral_face:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18459,7 +20716,11 @@
"neutral",
"objective",
"impartial",
- "blank"
+ "blank",
+ "mad",
+ "smiley",
+ "shrug",
+ "emotion"
],
"moji": "😐"
},
@@ -18468,11 +20729,12 @@
"unicode_alternates": [],
"name": "squared new",
"shortname": ":new:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "🆕"
},
@@ -18491,7 +20753,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌑"
},
@@ -18512,7 +20775,9 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space",
+ "goodnight"
],
"moji": "🌚"
},
@@ -18526,7 +20791,9 @@
"aliases_ascii": [],
"keywords": [
"headline",
- "press"
+ "press",
+ "office",
+ "write"
],
"moji": "📰"
},
@@ -18535,19 +20802,22 @@
"unicode_alternates": [],
"name": "rolled-up newspaper",
"shortname": ":newspaper2:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":rolled_up_newspaper:"
],
"aliases_ascii": [],
"keywords": [
"headline",
- "press"
- ]
+ "press",
+ "office",
+ "write"
+ ],
+ "moji": "🗞"
},
"ng": {
"unicode": "1F196",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "squared ng",
"shortname": ":ng:",
"category": "symbols",
@@ -18558,14 +20828,15 @@
"no good",
"symbol",
"word"
- ]
+ ],
+ "moji": "🆖"
},
"night_with_stars": {
"unicode": "1F303",
"unicode_alternates": [],
"name": "night with stars",
"shortname": ":night_with_stars:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18575,7 +20846,11 @@
"evening",
"planets",
"space",
- "sky"
+ "sky",
+ "places",
+ "building",
+ "vacation",
+ "goodnight"
],
"moji": "🌃"
},
@@ -18585,15 +20860,18 @@
"unicode_alternates": [
"0039-FE0F-20E3"
],
- "name": "digit nine",
+ "name": "keycap digit nine",
"shortname": ":nine:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"9",
"blue-square",
- "numbers"
+ "numbers",
+ "number",
+ "math",
+ "symbol"
]
},
"no_bell": {
@@ -18601,13 +20879,15 @@
"unicode_alternates": [],
"name": "bell with cancellation stroke",
"shortname": ":no_bell:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"mute",
"sound",
- "volume"
+ "volume",
+ "alarm",
+ "symbol"
],
"moji": "🔕"
},
@@ -18616,7 +20896,7 @@
"unicode_alternates": [],
"name": "no bicycles",
"shortname": ":no_bicycles:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18624,7 +20904,8 @@
"prohibited",
"bicycle",
"bike pedal",
- "no"
+ "no",
+ "symbol"
],
"moji": "🚳"
},
@@ -18635,7 +20916,7 @@
],
"name": "no entry",
"shortname": ":no_entry:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18644,7 +20925,9 @@
"limit",
"privacy",
"security",
- "stop"
+ "stop",
+ "symbol",
+ "circle"
],
"moji": "⛔"
},
@@ -18653,7 +20936,7 @@
"unicode_alternates": [],
"name": "no entry sign",
"shortname": ":no_entry_sign:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18663,8 +20946,9 @@
"limit",
"stop",
"no",
- "stop",
- "entry"
+ "entry",
+ "symbol",
+ "circle"
],
"moji": "🚫"
},
@@ -18673,7 +20957,7 @@
"unicode_alternates": [],
"name": "face with no good gesture",
"shortname": ":no_good:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18684,13 +20968,17 @@
"stop",
"nope",
"don&#039;t",
- "not"
+ "not",
+ "people",
+ "women",
+ "diversity",
+ "girls night"
],
"moji": "🙅"
},
"no_good_tone1": {
"unicode": "1F645-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with no good gesture tone 1",
"shortname": ":no_good_tone1:",
"category": "people",
@@ -18708,11 +20996,12 @@
"hand",
"person",
"prohibited"
- ]
+ ],
+ "moji": "🙅🏻"
},
"no_good_tone2": {
"unicode": "1F645-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with no good gesture tone 2",
"shortname": ":no_good_tone2:",
"category": "people",
@@ -18730,11 +21019,12 @@
"hand",
"person",
"prohibited"
- ]
+ ],
+ "moji": "🙅🏼"
},
"no_good_tone3": {
"unicode": "1F645-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with no good gesture tone 3",
"shortname": ":no_good_tone3:",
"category": "people",
@@ -18752,11 +21042,12 @@
"hand",
"person",
"prohibited"
- ]
+ ],
+ "moji": "🙅🏽"
},
"no_good_tone4": {
"unicode": "1F645-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with no good gesture tone 4",
"shortname": ":no_good_tone4:",
"category": "people",
@@ -18774,11 +21065,12 @@
"hand",
"person",
"prohibited"
- ]
+ ],
+ "moji": "🙅🏾"
},
"no_good_tone5": {
"unicode": "1F645-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with no good gesture tone 5",
"shortname": ":no_good_tone5:",
"category": "people",
@@ -18796,19 +21088,22 @@
"hand",
"person",
"prohibited"
- ]
+ ],
+ "moji": "🙅🏿"
},
"no_mobile_phones": {
"unicode": "1F4F5",
"unicode_alternates": [],
"name": "no mobile phones",
"shortname": ":no_mobile_phones:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"iphone",
- "mute"
+ "mute",
+ "symbol",
+ "phone"
],
"moji": "📵"
},
@@ -18817,7 +21112,7 @@
"unicode_alternates": [],
"name": "face without mouth",
"shortname": ":no_mouth:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":-X",
@@ -18835,7 +21130,11 @@
"hellokitty",
"mouth",
"silent",
- "vapid"
+ "vapid",
+ "mad",
+ "smiley",
+ "neutral",
+ "emotion"
],
"moji": "😶"
},
@@ -18844,7 +21143,7 @@
"unicode_alternates": [],
"name": "no pedestrians",
"shortname": ":no_pedestrians:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18857,7 +21156,8 @@
"stroll",
"stride",
"foot",
- "feet"
+ "feet",
+ "symbol"
],
"moji": "🚷"
},
@@ -18866,20 +21166,20 @@
"unicode_alternates": [],
"name": "no smoking symbol",
"shortname": ":no_smoking:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cigarette",
"no",
"smoking",
- "cigarette",
"smoke",
"cancer",
"lungs",
"inhale",
"tar",
- "nicotine"
+ "nicotine",
+ "symbol"
],
"moji": "🚭"
},
@@ -18888,7 +21188,7 @@
"unicode_alternates": [],
"name": "non-potable water symbol",
"shortname": ":non-potable_water:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -18901,7 +21201,8 @@
"dirty",
"gross",
"aqua",
- "h20"
+ "h20",
+ "symbol"
],
"moji": "🚱"
},
@@ -18910,18 +21211,20 @@
"unicode_alternates": [],
"name": "nose",
"shortname": ":nose:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"smell",
- "sniff"
+ "sniff",
+ "body",
+ "diversity"
],
"moji": "👃"
},
"nose_tone1": {
"unicode": "1F443-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nose tone 1",
"shortname": ":nose_tone1:",
"category": "people",
@@ -18930,11 +21233,12 @@
"keywords": [
"smell",
"sniff"
- ]
+ ],
+ "moji": "👃🏻"
},
"nose_tone2": {
"unicode": "1F443-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nose tone 2",
"shortname": ":nose_tone2:",
"category": "people",
@@ -18943,11 +21247,12 @@
"keywords": [
"smell",
"sniff"
- ]
+ ],
+ "moji": "👃🏼"
},
"nose_tone3": {
"unicode": "1F443-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nose tone 3",
"shortname": ":nose_tone3:",
"category": "people",
@@ -18956,11 +21261,12 @@
"keywords": [
"smell",
"sniff"
- ]
+ ],
+ "moji": "👃🏽"
},
"nose_tone4": {
"unicode": "1F443-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nose tone 4",
"shortname": ":nose_tone4:",
"category": "people",
@@ -18969,11 +21275,12 @@
"keywords": [
"smell",
"sniff"
- ]
+ ],
+ "moji": "👃🏾"
},
"nose_tone5": {
"unicode": "1F443-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "nose tone 5",
"shortname": ":nose_tone5:",
"category": "people",
@@ -18982,37 +21289,8 @@
"keywords": [
"smell",
"sniff"
- ]
- },
- "note": {
- "unicode": "1F5C9",
- "unicode_alternates": [],
- "name": "note page",
- "shortname": ":note:",
- "category": "objects_symbols",
- "aliases": [
- ":note_page:"
],
- "aliases_ascii": [],
- "keywords": [
- "stationery",
- "post-it"
- ]
- },
- "note_empty": {
- "unicode": "1F5C6",
- "unicode_alternates": [],
- "name": "empty note page",
- "shortname": ":note_empty:",
- "category": "objects_symbols",
- "aliases": [
- ":empty_note_page:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "stationery",
- "post-it"
- ]
+ "moji": "👃🏿"
},
"notebook": {
"unicode": "1F4D3",
@@ -19026,7 +21304,10 @@
"notes",
"paper",
"record",
- "stationery"
+ "stationery",
+ "object",
+ "office",
+ "write"
],
"moji": "📓"
},
@@ -19042,71 +21323,48 @@
"classroom",
"notes",
"paper",
- "record"
+ "record",
+ "object",
+ "office",
+ "write"
],
"moji": "📔"
},
- "notepad": {
- "unicode": "1F5CA",
- "unicode_alternates": [],
- "name": "note pad",
- "shortname": ":notepad:",
- "category": "objects_symbols",
- "aliases": [
- ":note_pad:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "stationery",
- "post-it"
- ]
- },
- "notepad_empty": {
- "unicode": "1F5C7",
- "unicode_alternates": [],
- "name": "empty note pad",
- "shortname": ":notepad_empty:",
- "category": "objects_symbols",
- "aliases": [
- ":empty_note_pad:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "stationery",
- "post-it"
- ]
- },
"notepad_spiral": {
"unicode": "1F5D2",
"unicode_alternates": [],
"name": "spiral note pad",
"shortname": ":notepad_spiral:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":spiral_note_pad:"
],
"aliases_ascii": [],
"keywords": [
- "stationery"
- ]
+ "stationery",
+ "work",
+ "office",
+ "write"
+ ],
+ "moji": "🗒"
},
"notes": {
"unicode": "1F3B6",
"unicode_alternates": [],
"name": "multiple musical notes",
"shortname": ":notes:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"music",
"score",
"musical",
- "music",
"notes",
- "music",
"sound",
- "melody"
+ "melody",
+ "instruments",
+ "symbol"
],
"moji": "🎶"
},
@@ -19120,7 +21378,10 @@
"aliases_ascii": [],
"keywords": [
"handy",
- "tools"
+ "tools",
+ "object",
+ "tool",
+ "nutcase"
],
"moji": "🔩"
},
@@ -19131,12 +21392,13 @@
],
"name": "heavy large circle",
"shortname": ":o:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"circle",
- "round"
+ "round",
+ "symbol"
],
"moji": "⭕"
},
@@ -19145,13 +21407,14 @@
"unicode_alternates": [],
"name": "negative squared latin capital letter o",
"shortname": ":o2:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"letter",
- "red-square"
+ "red-square",
+ "symbol"
],
"moji": "🅾"
},
@@ -19168,13 +21431,29 @@
"water",
"wave",
"ocean",
- "wave",
"surf",
"beach",
- "tide"
+ "tide",
+ "weather",
+ "boat",
+ "tropical",
+ "swim"
],
"moji": "🌊"
},
+ "octagonal_sign": {
+ "unicode": "1F6D1",
+ "unicode_alternates": [],
+ "name": "octagonal sign",
+ "shortname": ":octagonal_sign:",
+ "category": "symbols",
+ "aliases": [
+ ":stop_sign:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🛑"
+ },
"octopus": {
"unicode": "1F419",
"unicode_alternates": [],
@@ -19187,7 +21466,8 @@
"animal",
"creature",
"ocean",
- "sea"
+ "sea",
+ "wildlife"
],
"moji": "🐙"
},
@@ -19196,7 +21476,7 @@
"unicode_alternates": [],
"name": "oden",
"shortname": ":oden:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19214,13 +21494,14 @@
"unicode_alternates": [],
"name": "office building",
"shortname": ":office:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"building",
"bureau",
- "work"
+ "work",
+ "places"
],
"moji": "🏢"
},
@@ -19229,28 +21510,31 @@
"unicode_alternates": [],
"name": "oil drum",
"shortname": ":oil:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":oil_drum:"
],
"aliases_ascii": [],
"keywords": [
- "petroleum"
- ]
+ "petroleum",
+ "object"
+ ],
+ "moji": "🛢"
},
"ok": {
"unicode": "1F197",
"unicode_alternates": [],
"name": "squared ok",
"shortname": ":ok:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"agree",
"blue-square",
"good",
- "yes"
+ "yes",
+ "symbol"
],
"moji": "🆗"
},
@@ -19259,7 +21543,7 @@
"unicode_alternates": [],
"name": "ok hand sign",
"shortname": ":ok_hand:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19273,13 +21557,19 @@
"marijuana",
"joint",
"pot",
- "420"
+ "420",
+ "body",
+ "hands",
+ "hi",
+ "diversity",
+ "good",
+ "beautiful"
],
"moji": "👌"
},
"ok_hand_tone1": {
"unicode": "1F44C-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ok hand sign tone 1",
"shortname": ":ok_hand_tone1:",
"category": "people",
@@ -19296,11 +21586,12 @@
"joint",
"pot",
"420"
- ]
+ ],
+ "moji": "👌🏻"
},
"ok_hand_tone2": {
"unicode": "1F44C-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ok hand sign tone 2",
"shortname": ":ok_hand_tone2:",
"category": "people",
@@ -19317,11 +21608,12 @@
"joint",
"pot",
"420"
- ]
+ ],
+ "moji": "👌🏼"
},
"ok_hand_tone3": {
"unicode": "1F44C-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ok hand sign tone 3",
"shortname": ":ok_hand_tone3:",
"category": "people",
@@ -19338,11 +21630,12 @@
"joint",
"pot",
"420"
- ]
+ ],
+ "moji": "👌🏽"
},
"ok_hand_tone4": {
"unicode": "1F44C-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ok hand sign tone 4",
"shortname": ":ok_hand_tone4:",
"category": "people",
@@ -19359,11 +21652,12 @@
"joint",
"pot",
"420"
- ]
+ ],
+ "moji": "👌🏾"
},
"ok_hand_tone5": {
"unicode": "1F44C-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "ok hand sign tone 5",
"shortname": ":ok_hand_tone5:",
"category": "people",
@@ -19380,14 +21674,15 @@
"joint",
"pot",
"420"
- ]
+ ],
+ "moji": "👌🏿"
},
"ok_woman": {
"unicode": "1F646",
"unicode_alternates": [],
"name": "face with ok gesture",
"shortname": ":ok_woman:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"*\\0/*",
@@ -19404,13 +21699,15 @@
"yes",
"ok",
"okay",
- "accept"
+ "accept",
+ "people",
+ "diversity"
],
"moji": "🙆"
},
"ok_woman_tone1": {
"unicode": "1F646-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with ok gesture tone1",
"shortname": ":ok_woman_tone1:",
"category": "people",
@@ -19425,11 +21722,12 @@
"yes",
"okay",
"accept"
- ]
+ ],
+ "moji": "🙆🏻"
},
"ok_woman_tone2": {
"unicode": "1F646-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with ok gesture tone2",
"shortname": ":ok_woman_tone2:",
"category": "people",
@@ -19444,11 +21742,12 @@
"yes",
"okay",
"accept"
- ]
+ ],
+ "moji": "🙆🏼"
},
"ok_woman_tone3": {
"unicode": "1F646-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with ok gesture tone3",
"shortname": ":ok_woman_tone3:",
"category": "people",
@@ -19463,11 +21762,12 @@
"yes",
"okay",
"accept"
- ]
+ ],
+ "moji": "🙆🏽"
},
"ok_woman_tone4": {
"unicode": "1F646-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with ok gesture tone4",
"shortname": ":ok_woman_tone4:",
"category": "people",
@@ -19482,11 +21782,12 @@
"yes",
"okay",
"accept"
- ]
+ ],
+ "moji": "🙆🏾"
},
"ok_woman_tone5": {
"unicode": "1F646-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with ok gesture tone5",
"shortname": ":ok_woman_tone5:",
"category": "people",
@@ -19501,26 +21802,30 @@
"yes",
"okay",
"accept"
- ]
+ ],
+ "moji": "🙆🏿"
},
"older_man": {
"unicode": "1F474",
"unicode_alternates": [],
"name": "older man",
"shortname": ":older_man:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"human",
"male",
- "men"
+ "men",
+ "people",
+ "old people",
+ "diversity"
],
"moji": "👴"
},
"older_man_tone1": {
"unicode": "1F474-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older man tone 1",
"shortname": ":older_man_tone1:",
"category": "people",
@@ -19531,11 +21836,12 @@
"men",
"grandpa",
"grandfather"
- ]
+ ],
+ "moji": "👴🏻"
},
"older_man_tone2": {
"unicode": "1F474-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older man tone 2",
"shortname": ":older_man_tone2:",
"category": "people",
@@ -19546,11 +21852,12 @@
"men",
"grandpa",
"grandfather"
- ]
+ ],
+ "moji": "👴🏼"
},
"older_man_tone3": {
"unicode": "1F474-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older man tone 3",
"shortname": ":older_man_tone3:",
"category": "people",
@@ -19561,11 +21868,12 @@
"men",
"grandpa",
"grandfather"
- ]
+ ],
+ "moji": "👴🏽"
},
"older_man_tone4": {
"unicode": "1F474-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older man tone 4",
"shortname": ":older_man_tone4:",
"category": "people",
@@ -19576,11 +21884,12 @@
"men",
"grandpa",
"grandfather"
- ]
+ ],
+ "moji": "👴🏾"
},
"older_man_tone5": {
"unicode": "1F474-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older man tone 5",
"shortname": ":older_man_tone5:",
"category": "people",
@@ -19591,14 +21900,15 @@
"men",
"grandpa",
"grandfather"
- ]
+ ],
+ "moji": "👴🏿"
},
"older_woman": {
"unicode": "1F475",
"unicode_alternates": [],
"name": "older woman",
"shortname": ":older_woman:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":grandma:"
],
@@ -19608,13 +21918,16 @@
"girl",
"women",
"grandma",
- "grandmother"
+ "grandmother",
+ "people",
+ "old people",
+ "diversity"
],
"moji": "👵"
},
"older_woman_tone1": {
"unicode": "1F475-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older woman tone 1",
"shortname": ":older_woman_tone1:",
"category": "people",
@@ -19628,11 +21941,12 @@
"lady",
"grandma",
"grandmother"
- ]
+ ],
+ "moji": "👵🏻"
},
"older_woman_tone2": {
"unicode": "1F475-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older woman tone 2",
"shortname": ":older_woman_tone2:",
"category": "people",
@@ -19646,11 +21960,12 @@
"lady",
"grandma",
"grandmother"
- ]
+ ],
+ "moji": "👵🏼"
},
"older_woman_tone3": {
"unicode": "1F475-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older woman tone 3",
"shortname": ":older_woman_tone3:",
"category": "people",
@@ -19664,11 +21979,12 @@
"lady",
"grandma",
"grandmother"
- ]
+ ],
+ "moji": "👵🏽"
},
"older_woman_tone4": {
"unicode": "1F475-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older woman tone 4",
"shortname": ":older_woman_tone4:",
"category": "people",
@@ -19682,11 +21998,12 @@
"lady",
"grandma",
"grandmother"
- ]
+ ],
+ "moji": "👵🏾"
},
"older_woman_tone5": {
"unicode": "1F475-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "older woman tone 5",
"shortname": ":older_woman_tone5:",
"category": "people",
@@ -19700,14 +22017,15 @@
"lady",
"grandma",
"grandmother"
- ]
+ ],
+ "moji": "👵🏿"
},
"om_symbol": {
"unicode": "1F549",
"unicode_alternates": [],
"name": "om symbol",
"shortname": ":om_symbol:",
- "category": "objects_symbols",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19718,20 +22036,24 @@
"dharmic",
"buddhism",
"jainism",
- "meditate"
- ]
+ "meditate",
+ "religion",
+ "symbol"
+ ],
+ "moji": "🕉"
},
"on": {
"unicode": "1F51B",
"unicode_alternates": [],
"name": "on with exclamation mark with left right arrow abo",
"shortname": ":on:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "words"
+ "words",
+ "symbol"
],
"moji": "🔛"
},
@@ -19740,7 +22062,7 @@
"unicode_alternates": [],
"name": "oncoming automobile",
"shortname": ":oncoming_automobile:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19748,8 +22070,8 @@
"transportation",
"vehicle",
"sedan",
- "car",
- "automobile"
+ "automobile",
+ "travel"
],
"moji": "🚘"
},
@@ -19758,7 +22080,7 @@
"unicode_alternates": [],
"name": "oncoming bus",
"shortname": ":oncoming_bus:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19767,8 +22089,8 @@
"bus",
"school",
"city",
- "transportation",
- "public"
+ "public",
+ "travel"
],
"moji": "🚍"
},
@@ -19777,7 +22099,7 @@
"unicode_alternates": [],
"name": "oncoming police car",
"shortname": ":oncoming_police_car:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19791,7 +22113,9 @@
"citation",
"crime",
"help",
- "officer"
+ "officer",
+ "transportation",
+ "911"
],
"moji": "🚔"
},
@@ -19800,7 +22124,7 @@
"unicode_alternates": [],
"name": "oncoming taxi",
"shortname": ":oncoming_taxi:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19812,7 +22136,9 @@
"automobile",
"city",
"transport",
- "service"
+ "service",
+ "transportation",
+ "travel"
],
"moji": "🚖"
},
@@ -19822,15 +22148,18 @@
"unicode_alternates": [
"0031-FE0F-20E3"
],
- "name": "digit one",
+ "name": "keycap digit one",
"shortname": ":one:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"1",
"blue-square",
- "numbers"
+ "numbers",
+ "number",
+ "math",
+ "symbol"
]
},
"open_file_folder": {
@@ -19843,7 +22172,9 @@
"aliases_ascii": [],
"keywords": [
"documents",
- "load"
+ "load",
+ "work",
+ "office"
],
"moji": "📂"
},
@@ -19852,18 +22183,22 @@
"unicode_alternates": [],
"name": "open hands sign",
"shortname": ":open_hands:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"butterfly",
- "fingers"
+ "fingers",
+ "body",
+ "hands",
+ "diversity",
+ "condolence"
],
"moji": "👐"
},
"open_hands_tone1": {
"unicode": "1F450-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "open hands sign tone 1",
"shortname": ":open_hands_tone1:",
"category": "people",
@@ -19872,11 +22207,12 @@
"keywords": [
"butterfly",
"fingers"
- ]
+ ],
+ "moji": "👐🏻"
},
"open_hands_tone2": {
"unicode": "1F450-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "open hands sign tone 2",
"shortname": ":open_hands_tone2:",
"category": "people",
@@ -19885,11 +22221,12 @@
"keywords": [
"butterfly",
"fingers"
- ]
+ ],
+ "moji": "👐🏼"
},
"open_hands_tone3": {
"unicode": "1F450-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "open hands sign tone 3",
"shortname": ":open_hands_tone3:",
"category": "people",
@@ -19898,11 +22235,12 @@
"keywords": [
"butterfly",
"fingers"
- ]
+ ],
+ "moji": "👐🏽"
},
"open_hands_tone4": {
"unicode": "1F450-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "open hands sign tone 4",
"shortname": ":open_hands_tone4:",
"category": "people",
@@ -19911,11 +22249,12 @@
"keywords": [
"butterfly",
"fingers"
- ]
+ ],
+ "moji": "👐🏾"
},
"open_hands_tone5": {
"unicode": "1F450-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "open hands sign tone 5",
"shortname": ":open_hands_tone5:",
"category": "people",
@@ -19924,14 +22263,15 @@
"keywords": [
"butterfly",
"fingers"
- ]
+ ],
+ "moji": "👐🏿"
},
"open_mouth": {
"unicode": "1F62E",
"unicode_alternates": [],
"name": "face with open mouth",
"shortname": ":open_mouth:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":-O",
@@ -19949,7 +22289,10 @@
"jaw",
"gapping",
"surprise",
- "wow"
+ "wow",
+ "smiley",
+ "surprised",
+ "emotion"
],
"moji": "😮"
},
@@ -19958,7 +22301,7 @@
"unicode_alternates": [],
"name": "ophiuchus",
"shortname": ":ophiuchus:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -19972,28 +22315,11 @@
"zodiac",
"purple-square",
"sign",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "⛎"
},
- "optical_disk": {
- "unicode": "1F5B8",
- "unicode_alternates": [],
- "name": "optical disc icon",
- "shortname": ":optical_disk:",
- "category": "objects_symbols",
- "aliases": [
- ":optical_disc_icon:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cd",
- "dvd",
- "disc",
- "disk",
- "technology"
- ]
- },
"orange_book": {
"unicode": "1F4D9",
"unicode_alternates": [],
@@ -20005,13 +22331,17 @@
"keywords": [
"knowledge",
"library",
- "read"
+ "read",
+ "object",
+ "office",
+ "write",
+ "book"
],
"moji": "📙"
},
"orthodox_cross": {
"unicode": "2626",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "orthodox cross",
"shortname": ":orthodox_cross:",
"category": "symbols",
@@ -20021,7 +22351,8 @@
"christian",
"religion",
"symbol"
- ]
+ ],
+ "moji": "☦"
},
"outbox_tray": {
"unicode": "1F4E4",
@@ -20033,10 +22364,23 @@
"aliases_ascii": [],
"keywords": [
"email",
- "inbox"
+ "inbox",
+ "work",
+ "office"
],
"moji": "📤"
},
+ "owl": {
+ "unicode": "1F989",
+ "unicode_alternates": [],
+ "name": "owl",
+ "shortname": ":owl:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦉"
+ },
"ox": {
"unicode": "1F402",
"unicode_alternates": [],
@@ -20062,22 +22406,12 @@
"aliases_ascii": [],
"keywords": [
"gift",
- "mail"
+ "mail",
+ "object",
+ "office"
],
"moji": "📦"
},
- "page": {
- "unicode": "1F5CF",
- "unicode_alternates": [],
- "name": "page",
- "shortname": ":page:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "document"
- ]
- },
"page_facing_up": {
"unicode": "1F4C4",
"unicode_alternates": [],
@@ -20087,7 +22421,10 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "documents"
+ "documents",
+ "work",
+ "office",
+ "write"
],
"moji": "📄"
},
@@ -20100,7 +22437,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "documents"
+ "documents",
+ "office",
+ "write"
],
"moji": "📃"
},
@@ -20114,28 +22453,18 @@
"aliases_ascii": [],
"keywords": [
"bbcall",
- "oldschool"
+ "oldschool",
+ "electronics",
+ "work"
],
"moji": "📟"
},
- "pages": {
- "unicode": "1F5D0",
- "unicode_alternates": [],
- "name": "pages",
- "shortname": ":pages:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "documents"
- ]
- },
"paintbrush": {
"unicode": "1F58C",
"unicode_alternates": [],
"name": "lower left paintbrush",
"shortname": ":paintbrush:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":lower_left_paintbrush:"
],
@@ -20143,8 +22472,12 @@
"keywords": [
"brush",
"art",
- "painting"
- ]
+ "painting",
+ "object",
+ "office",
+ "write"
+ ],
+ "moji": "🖌"
},
"palm_tree": {
"unicode": "1F334",
@@ -20163,10 +22496,22 @@
"coconuts",
"fronds",
"warm",
- "tropical"
+ "tropical",
+ "trees"
],
"moji": "🌴"
},
+ "pancakes": {
+ "unicode": "1F95E",
+ "unicode_alternates": [],
+ "name": "pancakes",
+ "shortname": ":pancakes:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥞"
+ },
"panda_face": {
"unicode": "1F43C",
"unicode_alternates": [],
@@ -20189,7 +22534,9 @@
"bamboo",
"china",
"black",
- "white"
+ "white",
+ "wildlife",
+ "roar"
],
"moji": "🐼"
},
@@ -20203,7 +22550,10 @@
"aliases_ascii": [],
"keywords": [
"documents",
- "stationery"
+ "stationery",
+ "object",
+ "work",
+ "office"
],
"moji": "📎"
},
@@ -20212,22 +22562,26 @@
"unicode_alternates": [],
"name": "linked paperclips",
"shortname": ":paperclips:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":linked_paperclips:"
],
"aliases_ascii": [],
"keywords": [
"documents",
- "stationery"
- ]
+ "stationery",
+ "object",
+ "work",
+ "office"
+ ],
+ "moji": "🖇"
},
"park": {
"unicode": "1F3DE",
"unicode_alternates": [],
"name": "national park",
"shortname": ":park:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":national_park:"
],
@@ -20238,8 +22592,13 @@
"wildlife",
"forest",
"wilderness",
- "national"
- ]
+ "national",
+ "travel",
+ "vacation",
+ "park",
+ "camp"
+ ],
+ "moji": "🏞"
},
"parking": {
"unicode": "1F17F",
@@ -20248,14 +22607,15 @@
],
"name": "negative squared latin capital letter p",
"shortname": ":parking:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
"blue-square",
"cars",
- "letter"
+ "letter",
+ "symbol"
],
"moji": "🅿"
},
@@ -20266,7 +22626,7 @@
],
"name": "part alternation mark",
"shortname": ":part_alternation_mark:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20279,7 +22639,8 @@
"cue",
"letter",
"m",
- "japanese"
+ "japanese",
+ "symbol"
],
"moji": "〽"
},
@@ -20297,7 +22658,9 @@
"cloud",
"morning",
"nature",
- "weather"
+ "weather",
+ "sky",
+ "sun"
],
"moji": "⛅"
},
@@ -20306,7 +22669,7 @@
"unicode_alternates": [],
"name": "passport control",
"shortname": ":passport_control:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20317,13 +22680,14 @@
"travel",
"control",
"foreign",
- "identification"
+ "identification",
+ "symbol"
],
"moji": "🛂"
},
"pause_button": {
"unicode": "23F8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "double vertical bar",
"shortname": ":pause_button:",
"category": "symbols",
@@ -20335,11 +22699,12 @@
"pause",
"sound",
"symbol"
- ]
+ ],
+ "moji": "⏸"
},
"peace": {
"unicode": "262E",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "peace symbol",
"shortname": ":peace:",
"category": "symbols",
@@ -20348,15 +22713,19 @@
],
"aliases_ascii": [],
"keywords": [
- "sign"
- ]
+ "sign",
+ "symbol",
+ "peace",
+ "drugs"
+ ],
+ "moji": "☮"
},
"peach": {
"unicode": "1F351",
"unicode_alternates": [],
"name": "peach",
"shortname": ":peach:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20364,26 +22733,39 @@
"fruit",
"nature",
"peach",
- "fruit",
"juicy",
- "pit"
+ "pit",
+ "butt"
],
"moji": "🍑"
},
+ "peanuts": {
+ "unicode": "1F95C",
+ "unicode_alternates": [],
+ "name": "peanuts",
+ "shortname": ":peanuts:",
+ "category": "food",
+ "aliases": [
+ ":shelled_peanut:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥜"
+ },
"pear": {
"unicode": "1F350",
"unicode_alternates": [],
"name": "pear",
"shortname": ":pear:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fruit",
"nature",
"pear",
- "fruit",
- "shape"
+ "shape",
+ "food"
],
"moji": "🍐"
},
@@ -20392,7 +22774,7 @@
"unicode_alternates": [],
"name": "lower left ballpoint pen",
"shortname": ":pen_ballpoint:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":lower_left_ballpoint_pen:"
],
@@ -20400,15 +22782,18 @@
"keywords": [
"write",
"bic",
- "ink"
- ]
+ "ink",
+ "object",
+ "office"
+ ],
+ "moji": "🖊"
},
"pen_fountain": {
"unicode": "1F58B",
"unicode_alternates": [],
"name": "lower left fountain pen",
"shortname": ":pen_fountain:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":lower_left_fountain_pen:"
],
@@ -20416,8 +22801,11 @@
"keywords": [
"write",
"calligraphy",
- "ink"
- ]
+ "ink",
+ "object",
+ "office"
+ ],
+ "moji": "🖋"
},
"pencil": {
"unicode": "1F4DD",
@@ -20433,7 +22821,9 @@
"documents",
"paper",
"station",
- "write"
+ "write",
+ "work",
+ "office"
],
"moji": "📝"
},
@@ -20450,26 +22840,12 @@
"keywords": [
"paper",
"stationery",
- "write"
+ "write",
+ "object",
+ "office"
],
"moji": "✏"
},
- "pencil3": {
- "unicode": "1F589",
- "unicode_alternates": [],
- "name": "lower left pencil",
- "shortname": ":pencil3:",
- "category": "objects_symbols",
- "aliases": [
- ":lower_left_pencil:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "paper",
- "stationery",
- "write"
- ]
- },
"penguin": {
"unicode": "1F427",
"unicode_alternates": [],
@@ -20480,46 +22856,17 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife"
],
"moji": "🐧"
},
- "pennant_black": {
- "unicode": "1F3F2",
- "unicode_alternates": [],
- "name": "black pennant",
- "shortname": ":pennant_black:",
- "category": "objects_symbols",
- "aliases": [
- ":black_pennant:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "flag",
- "athletics"
- ]
- },
- "pennant_white": {
- "unicode": "1F3F1",
- "unicode_alternates": [],
- "name": "white pennant",
- "shortname": ":pennant_white:",
- "category": "objects_symbols",
- "aliases": [
- ":white_pennant:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "flag",
- "athletics"
- ]
- },
"pensive": {
"unicode": "1F614",
"unicode_alternates": [],
"name": "pensive face",
"shortname": ":pensive:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20532,7 +22879,10 @@
"reflective",
"wistful",
"meditate",
- "serious"
+ "serious",
+ "smiley",
+ "emotion",
+ "rip"
],
"moji": "😔"
},
@@ -20541,7 +22891,7 @@
"unicode_alternates": [],
"name": "performing arts",
"shortname": ":performing_arts:",
- "category": "places",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20552,10 +22902,11 @@
"arts",
"performance",
"entertainment",
- "acting",
"story",
"mask",
- "masks"
+ "masks",
+ "theatre",
+ "movie"
],
"moji": "🎭"
},
@@ -20564,7 +22915,7 @@
"unicode_alternates": [],
"name": "persevering face",
"shortname": ":persevere:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
">.<"
@@ -20575,7 +22926,11 @@
"face",
"no",
"sick",
- "upset"
+ "upset",
+ "sad",
+ "smiley",
+ "angry",
+ "emotion"
],
"moji": "😣"
},
@@ -20584,7 +22939,7 @@
"unicode_alternates": [],
"name": "person frowning",
"shortname": ":person_frowning:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20594,13 +22949,16 @@
"dejected",
"rejected",
"sad",
- "frown"
+ "frown",
+ "people",
+ "women",
+ "diversity"
],
"moji": "🙍"
},
"person_frowning_tone1": {
"unicode": "1F64D-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person frowning tone 1",
"shortname": ":person_frowning_tone1:",
"category": "people",
@@ -20614,11 +22972,12 @@
"rejected",
"sad",
"frown"
- ]
+ ],
+ "moji": "🙍🏻"
},
"person_frowning_tone2": {
"unicode": "1F64D-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person frowning tone 2",
"shortname": ":person_frowning_tone2:",
"category": "people",
@@ -20632,11 +22991,12 @@
"rejected",
"sad",
"frown"
- ]
+ ],
+ "moji": "🙍🏼"
},
"person_frowning_tone3": {
"unicode": "1F64D-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person frowning tone 3",
"shortname": ":person_frowning_tone3:",
"category": "people",
@@ -20650,11 +23010,12 @@
"rejected",
"sad",
"frown"
- ]
+ ],
+ "moji": "🙍🏽"
},
"person_frowning_tone4": {
"unicode": "1F64D-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person frowning tone 4",
"shortname": ":person_frowning_tone4:",
"category": "people",
@@ -20668,11 +23029,12 @@
"rejected",
"sad",
"frown"
- ]
+ ],
+ "moji": "🙍🏾"
},
"person_frowning_tone5": {
"unicode": "1F64D-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person frowning tone 5",
"shortname": ":person_frowning_tone5:",
"category": "people",
@@ -20686,14 +23048,15 @@
"rejected",
"sad",
"frown"
- ]
+ ],
+ "moji": "🙍🏿"
},
"person_with_blond_hair": {
"unicode": "1F471",
"unicode_alternates": [],
"name": "person with blond hair",
"shortname": ":person_with_blond_hair:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20703,13 +23066,16 @@
"young",
"western",
"westerner",
- "occidental"
+ "occidental",
+ "people",
+ "men",
+ "diversity"
],
"moji": "👱"
},
"person_with_blond_hair_tone1": {
"unicode": "1F471-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with blond hair tone 1",
"shortname": ":person_with_blond_hair_tone1:",
"category": "people",
@@ -20723,11 +23089,12 @@
"western",
"westerner",
"occidental"
- ]
+ ],
+ "moji": "👱🏻"
},
"person_with_blond_hair_tone2": {
"unicode": "1F471-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with blond hair tone 2",
"shortname": ":person_with_blond_hair_tone2:",
"category": "people",
@@ -20741,11 +23108,12 @@
"western",
"westerner",
"occidental"
- ]
+ ],
+ "moji": "👱🏼"
},
"person_with_blond_hair_tone3": {
"unicode": "1F471-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with blond hair tone 3",
"shortname": ":person_with_blond_hair_tone3:",
"category": "people",
@@ -20759,11 +23127,12 @@
"western",
"westerner",
"occidental"
- ]
+ ],
+ "moji": "👱🏽"
},
"person_with_blond_hair_tone4": {
"unicode": "1F471-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with blond hair tone 4",
"shortname": ":person_with_blond_hair_tone4:",
"category": "people",
@@ -20777,11 +23146,12 @@
"western",
"westerner",
"occidental"
- ]
+ ],
+ "moji": "👱🏾"
},
"person_with_blond_hair_tone5": {
"unicode": "1F471-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with blond hair tone 5",
"shortname": ":person_with_blond_hair_tone5:",
"category": "people",
@@ -20795,14 +23165,15 @@
"western",
"westerner",
"occidental"
- ]
+ ],
+ "moji": "👱🏿"
},
"person_with_pouting_face": {
"unicode": "1F64E",
"unicode_alternates": [],
"name": "person with pouting face",
"shortname": ":person_with_pouting_face:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -20812,13 +23183,16 @@
"pout",
"sexy",
"cute",
- "annoyed"
+ "annoyed",
+ "people",
+ "women",
+ "diversity"
],
"moji": "🙎"
},
"person_with_pouting_face_tone1": {
"unicode": "1F64E-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with pouting face tone1",
"shortname": ":person_with_pouting_face_tone1:",
"category": "people",
@@ -20832,11 +23206,12 @@
"sexy",
"cute",
"annoyed"
- ]
+ ],
+ "moji": "🙎🏻"
},
"person_with_pouting_face_tone2": {
"unicode": "1F64E-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with pouting face tone2",
"shortname": ":person_with_pouting_face_tone2:",
"category": "people",
@@ -20850,11 +23225,12 @@
"sexy",
"cute",
"annoyed"
- ]
+ ],
+ "moji": "🙎🏼"
},
"person_with_pouting_face_tone3": {
"unicode": "1F64E-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with pouting face tone3",
"shortname": ":person_with_pouting_face_tone3:",
"category": "people",
@@ -20868,11 +23244,12 @@
"sexy",
"cute",
"annoyed"
- ]
+ ],
+ "moji": "🙎🏽"
},
"person_with_pouting_face_tone4": {
"unicode": "1F64E-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with pouting face tone4",
"shortname": ":person_with_pouting_face_tone4:",
"category": "people",
@@ -20886,11 +23263,12 @@
"sexy",
"cute",
"annoyed"
- ]
+ ],
+ "moji": "🙎🏾"
},
"person_with_pouting_face_tone5": {
"unicode": "1F64E-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with pouting face tone5",
"shortname": ":person_with_pouting_face_tone5:",
"category": "people",
@@ -20904,11 +23282,12 @@
"sexy",
"cute",
"annoyed"
- ]
+ ],
+ "moji": "🙎🏿"
},
"pick": {
"unicode": "26CF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pick",
"shortname": ":pick:",
"category": "objects",
@@ -20917,8 +23296,10 @@
"keywords": [
"mining",
"object",
- "tool"
- ]
+ "tool",
+ "weapon"
+ ],
+ "moji": "⛏"
},
"pig": {
"unicode": "1F437",
@@ -20976,7 +23357,6 @@
"food",
"eat",
"cute",
- "oink",
"pink",
"smell",
"truffle"
@@ -20993,7 +23373,9 @@
"aliases_ascii": [],
"keywords": [
"health",
- "medicine"
+ "medicine",
+ "object",
+ "drugs"
],
"moji": "💊"
},
@@ -21002,7 +23384,7 @@
"unicode_alternates": [],
"name": "pineapple",
"shortname": ":pineapple:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21018,7 +23400,7 @@
},
"ping_pong": {
"unicode": "1F3D3",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "table tennis paddle and ball",
"shortname": ":ping_pong:",
"category": "activity",
@@ -21026,22 +23408,13 @@
":table_tennis:"
],
"aliases_ascii": [],
- "keywords": []
- },
- "piracy": {
- "unicode": "1F572",
- "unicode_alternates": [],
- "name": "no piracy",
- "shortname": ":piracy:",
- "category": "objects_symbols",
- "aliases": [
- ":no_piracy:"
- ],
- "aliases_ascii": [],
"keywords": [
- "theft",
- "rule"
- ]
+ "game",
+ "ball",
+ "sport",
+ "ping pong"
+ ],
+ "moji": "🏓"
},
"pisces": {
"unicode": "2653",
@@ -21050,7 +23423,7 @@
],
"name": "pisces",
"shortname": ":pisces:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21063,9 +23436,8 @@
"zodiac",
"sign",
"purple-square",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♓"
},
@@ -21074,7 +23446,7 @@
"unicode_alternates": [],
"name": "slice of pizza",
"shortname": ":pizza:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21086,13 +23458,14 @@
"italian",
"italy",
"slice",
- "peperoni"
+ "peperoni",
+ "boys night"
],
"moji": "🍕"
},
"place_of_worship": {
"unicode": "1F6D0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "place of worship",
"shortname": ":place_of_worship:",
"category": "symbols",
@@ -21100,11 +23473,16 @@
":worship_symbol:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "religion",
+ "symbol",
+ "pray"
+ ],
+ "moji": "🛐"
},
"play_pause": {
"unicode": "23EF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "black right-pointing double triangle with double vertical bar",
"shortname": ":play_pause:",
"category": "symbols",
@@ -21117,26 +23495,30 @@
"right",
"sound",
"symbol"
- ]
+ ],
+ "moji": "⏯"
},
"point_down": {
"unicode": "1F447",
"unicode_alternates": [],
"name": "white down pointing backhand index",
"shortname": ":point_down:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"direction",
"fingers",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "diversity"
],
"moji": "👇"
},
"point_down_tone1": {
"unicode": "1F447-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white down pointing backhand index tone 1",
"shortname": ":point_down_tone1:",
"category": "people",
@@ -21146,11 +23528,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👇🏻"
},
"point_down_tone2": {
"unicode": "1F447-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white down pointing backhand index tone 2",
"shortname": ":point_down_tone2:",
"category": "people",
@@ -21160,11 +23543,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👇🏼"
},
"point_down_tone3": {
"unicode": "1F447-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white down pointing backhand index tone 3",
"shortname": ":point_down_tone3:",
"category": "people",
@@ -21174,11 +23558,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👇🏽"
},
"point_down_tone4": {
"unicode": "1F447-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white down pointing backhand index tone 4",
"shortname": ":point_down_tone4:",
"category": "people",
@@ -21188,11 +23573,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👇🏾"
},
"point_down_tone5": {
"unicode": "1F447-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white down pointing backhand index tone 5",
"shortname": ":point_down_tone5:",
"category": "people",
@@ -21202,26 +23588,31 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👇🏿"
},
"point_left": {
"unicode": "1F448",
"unicode_alternates": [],
"name": "white left pointing backhand index",
"shortname": ":point_left:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"direction",
"fingers",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "hi",
+ "diversity"
],
"moji": "👈"
},
"point_left_tone1": {
"unicode": "1F448-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white left pointing backhand index tone 1",
"shortname": ":point_left_tone1:",
"category": "people",
@@ -21231,11 +23622,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👈🏻"
},
"point_left_tone2": {
"unicode": "1F448-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white left pointing backhand index tone 2",
"shortname": ":point_left_tone2:",
"category": "people",
@@ -21245,11 +23637,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👈🏼"
},
"point_left_tone3": {
"unicode": "1F448-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white left pointing backhand index tone 3",
"shortname": ":point_left_tone3:",
"category": "people",
@@ -21259,11 +23652,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👈🏽"
},
"point_left_tone4": {
"unicode": "1F448-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white left pointing backhand index tone 4",
"shortname": ":point_left_tone4:",
"category": "people",
@@ -21273,11 +23667,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👈🏾"
},
"point_left_tone5": {
"unicode": "1F448-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white left pointing backhand index tone 5",
"shortname": ":point_left_tone5:",
"category": "people",
@@ -21287,26 +23682,31 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👈🏿"
},
"point_right": {
"unicode": "1F449",
"unicode_alternates": [],
"name": "white right pointing backhand index",
"shortname": ":point_right:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"direction",
"fingers",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "hi",
+ "diversity"
],
"moji": "👉"
},
"point_right_tone1": {
"unicode": "1F449-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white right pointing backhand index tone 1",
"shortname": ":point_right_tone1:",
"category": "people",
@@ -21316,11 +23716,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👉🏻"
},
"point_right_tone2": {
"unicode": "1F449-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white right pointing backhand index tone 2",
"shortname": ":point_right_tone2:",
"category": "people",
@@ -21330,11 +23731,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👉🏼"
},
"point_right_tone3": {
"unicode": "1F449-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white right pointing backhand index tone 3",
"shortname": ":point_right_tone3:",
"category": "people",
@@ -21344,11 +23746,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👉🏽"
},
"point_right_tone4": {
"unicode": "1F449-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white right pointing backhand index tone 4",
"shortname": ":point_right_tone4:",
"category": "people",
@@ -21358,11 +23761,12 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👉🏾"
},
"point_right_tone5": {
"unicode": "1F449-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white right pointing backhand index tone 5",
"shortname": ":point_right_tone5:",
"category": "people",
@@ -21372,7 +23776,8 @@
"direction",
"finger",
"hand"
- ]
+ ],
+ "moji": "👉🏿"
},
"point_up": {
"unicode": "261D",
@@ -21381,13 +23786,17 @@
],
"name": "white up pointing index",
"shortname": ":point_up:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"direction",
"fingers",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "emojione",
+ "diversity"
],
"moji": "☝"
},
@@ -21396,19 +23805,22 @@
"unicode_alternates": [],
"name": "white up pointing backhand index",
"shortname": ":point_up_2:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"direction",
"fingers",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "diversity"
],
"moji": "👆"
},
"point_up_2_tone1": {
"unicode": "1F446-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing backhand index tone 1",
"shortname": ":point_up_2_tone1:",
"category": "people",
@@ -21419,11 +23831,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "👆🏻"
},
"point_up_2_tone2": {
"unicode": "1F446-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing backhand index tone 2",
"shortname": ":point_up_2_tone2:",
"category": "people",
@@ -21434,11 +23847,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "👆🏼"
},
"point_up_2_tone3": {
"unicode": "1F446-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing backhand index tone 3",
"shortname": ":point_up_2_tone3:",
"category": "people",
@@ -21449,11 +23863,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "👆🏽"
},
"point_up_2_tone4": {
"unicode": "1F446-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing backhand index tone 4",
"shortname": ":point_up_2_tone4:",
"category": "people",
@@ -21464,11 +23879,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "👆🏾"
},
"point_up_2_tone5": {
"unicode": "1F446-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing backhand index tone 5",
"shortname": ":point_up_2_tone5:",
"category": "people",
@@ -21479,11 +23895,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "👆🏿"
},
"point_up_tone1": {
"unicode": "261D-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing index tone 1",
"shortname": ":point_up_tone1:",
"category": "people",
@@ -21494,11 +23911,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "☝🏻"
},
"point_up_tone2": {
"unicode": "261D-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing index tone 2",
"shortname": ":point_up_tone2:",
"category": "people",
@@ -21509,11 +23927,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "☝🏼"
},
"point_up_tone3": {
"unicode": "261D-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing index tone 3",
"shortname": ":point_up_tone3:",
"category": "people",
@@ -21524,11 +23943,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "☝🏽"
},
"point_up_tone4": {
"unicode": "261D-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing index tone 4",
"shortname": ":point_up_tone4:",
"category": "people",
@@ -21539,11 +23959,12 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "☝🏾"
},
"point_up_tone5": {
"unicode": "261D-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white up pointing index tone 5",
"shortname": ":point_up_tone5:",
"category": "people",
@@ -21554,14 +23975,15 @@
"finger",
"hand",
"one"
- ]
+ ],
+ "moji": "☝🏿"
},
"police_car": {
"unicode": "1F693",
"unicode_alternates": [],
"name": "police car",
"shortname": ":police_car:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21577,7 +23999,8 @@
"citation",
"crime",
"help",
- "officer"
+ "officer",
+ "911"
],
"moji": "🚓"
},
@@ -21595,7 +24018,6 @@
"dog",
"nature",
"poodle",
- "dog",
"clip",
"showy",
"sophisticated",
@@ -21608,7 +24030,7 @@
"unicode_alternates": [],
"name": "pile of poo",
"shortname": ":poop:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":shit:",
":hankey:",
@@ -21620,32 +24042,41 @@
"shit",
"shitface",
"turd",
- "poo"
+ "poo",
+ "bathroom",
+ "sol",
+ "diarrhea"
],
"moji": "💩"
},
"popcorn": {
"unicode": "1F37F",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "popcorn",
"shortname": ":popcorn:",
- "category": "foods",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "food",
+ "parties"
+ ],
+ "moji": "🍿"
},
"post_office": {
"unicode": "1F3E3",
"unicode_alternates": [],
"name": "japanese post office",
"shortname": ":post_office:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"building",
"communication",
- "email"
+ "email",
+ "places",
+ "post office"
],
"moji": "🏣"
},
@@ -21659,7 +24090,8 @@
"aliases_ascii": [],
"keywords": [
"instrument",
- "music"
+ "music",
+ "object"
],
"moji": "📯"
},
@@ -21674,7 +24106,8 @@
"keywords": [
"email",
"envelope",
- "letter"
+ "letter",
+ "object"
],
"moji": "📮"
},
@@ -21683,7 +24116,7 @@
"unicode_alternates": [],
"name": "potable water symbol",
"shortname": ":potable_water:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21699,27 +24132,40 @@
"clear",
"clean",
"aqua",
- "h20"
+ "h20",
+ "symbol"
],
"moji": "🚰"
},
+ "potato": {
+ "unicode": "1F954",
+ "unicode_alternates": [],
+ "name": "potato",
+ "shortname": ":potato:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥔"
+ },
"pouch": {
"unicode": "1F45D",
"unicode_alternates": [],
"name": "pouch",
"shortname": ":pouch:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"accessories",
"bag",
"pouch",
- "bag",
"cosmetic",
"packing",
"grandma",
- "makeup"
+ "makeup",
+ "women",
+ "fashion"
],
"moji": "👝"
},
@@ -21728,7 +24174,7 @@
"unicode_alternates": [],
"name": "poultry leg",
"shortname": ":poultry_leg:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21737,7 +24183,8 @@
"poultry",
"leg",
"chicken",
- "fried"
+ "fried",
+ "holidays"
],
"moji": "🍗"
},
@@ -21759,13 +24206,9 @@
"uk",
"pound",
"britain",
- "british",
"banknote",
- "money",
- "currency",
"paper",
- "cash",
- "bills"
+ "cash"
],
"moji": "💷"
},
@@ -21774,7 +24217,7 @@
"unicode_alternates": [],
"name": "pouting cat face",
"shortname": ":pouting_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21784,7 +24227,8 @@
"annoyed",
"miffed",
"glower",
- "frown"
+ "frown",
+ "cat"
],
"moji": "😾"
},
@@ -21793,7 +24237,7 @@
"unicode_alternates": [],
"name": "person with folded hands",
"shortname": ":pray:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21807,13 +24251,19 @@
"hands",
"sorrow",
"regret",
- "sorry"
+ "sorry",
+ "body",
+ "hi",
+ "luck",
+ "thank you",
+ "diversity",
+ "scientology"
],
"moji": "🙏"
},
"pray_tone1": {
"unicode": "1F64F-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with folded hands tone 1",
"shortname": ":pray_tone1:",
"category": "people",
@@ -21830,11 +24280,12 @@
"sorrow",
"regret",
"sorry"
- ]
+ ],
+ "moji": "🙏🏻"
},
"pray_tone2": {
"unicode": "1F64F-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with folded hands tone 2",
"shortname": ":pray_tone2:",
"category": "people",
@@ -21851,11 +24302,12 @@
"sorrow",
"regret",
"sorry"
- ]
+ ],
+ "moji": "🙏🏼"
},
"pray_tone3": {
"unicode": "1F64F-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with folded hands tone 3",
"shortname": ":pray_tone3:",
"category": "people",
@@ -21872,11 +24324,12 @@
"sorrow",
"regret",
"sorry"
- ]
+ ],
+ "moji": "🙏🏽"
},
"pray_tone4": {
"unicode": "1F64F-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with folded hands tone 4",
"shortname": ":pray_tone4:",
"category": "people",
@@ -21893,11 +24346,12 @@
"sorrow",
"regret",
"sorry"
- ]
+ ],
+ "moji": "🙏🏾"
},
"pray_tone5": {
"unicode": "1F64F-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person with folded hands tone 5",
"shortname": ":pray_tone5:",
"category": "people",
@@ -21914,24 +24368,173 @@
"sorrow",
"regret",
"sorry"
- ]
+ ],
+ "moji": "🙏🏿"
},
"prayer_beads": {
"unicode": "1F4FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "prayer beads",
"shortname": ":prayer_beads:",
"category": "objects",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "object",
+ "rosary"
+ ],
+ "moji": "📿"
+ },
+ "pregnant_woman": {
+ "unicode": "1F930",
+ "unicode_alternates": [],
+ "name": "pregnant woman",
+ "shortname": ":pregnant_woman:",
+ "category": "people",
+ "aliases": [
+ ":expecting_woman:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤰"
+ },
+ "pregnant_woman_tone1": {
+ "unicode": "1F930-1F3FB",
+ "unicode_alternates": [],
+ "name": "pregnant woman tone 1",
+ "shortname": ":pregnant_woman_tone1:",
+ "category": "people",
+ "aliases": [
+ ":expecting_woman_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤰🏻"
+ },
+ "pregnant_woman_tone2": {
+ "unicode": "1F930-1F3FC",
+ "unicode_alternates": [],
+ "name": "pregnant woman tone 2",
+ "shortname": ":pregnant_woman_tone2:",
+ "category": "people",
+ "aliases": [
+ ":expecting_woman_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤰🏼"
+ },
+ "pregnant_woman_tone3": {
+ "unicode": "1F930-1F3FD",
+ "unicode_alternates": [],
+ "name": "pregnant woman tone 3",
+ "shortname": ":pregnant_woman_tone3:",
+ "category": "people",
+ "aliases": [
+ ":expecting_woman_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤰🏽"
+ },
+ "pregnant_woman_tone4": {
+ "unicode": "1F930-1F3FE",
+ "unicode_alternates": [],
+ "name": "pregnant woman tone 4",
+ "shortname": ":pregnant_woman_tone4:",
+ "category": "people",
+ "aliases": [
+ ":expecting_woman_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤰🏾"
+ },
+ "pregnant_woman_tone5": {
+ "unicode": "1F930-1F3FF",
+ "unicode_alternates": [],
+ "name": "pregnant woman tone 5",
+ "shortname": ":pregnant_woman_tone5:",
+ "category": "people",
+ "aliases": [
+ ":expecting_woman_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤰🏿"
+ },
+ "prince": {
+ "unicode": "1F934",
+ "unicode_alternates": [],
+ "name": "prince",
+ "shortname": ":prince:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤴"
+ },
+ "prince_tone1": {
+ "unicode": "1F934-1F3FB",
+ "unicode_alternates": [],
+ "name": "prince tone 1",
+ "shortname": ":prince_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤴🏻"
+ },
+ "prince_tone2": {
+ "unicode": "1F934-1F3FC",
+ "unicode_alternates": [],
+ "name": "prince tone 2",
+ "shortname": ":prince_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤴🏼"
+ },
+ "prince_tone3": {
+ "unicode": "1F934-1F3FD",
+ "unicode_alternates": [],
+ "name": "prince tone 3",
+ "shortname": ":prince_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤴🏽"
+ },
+ "prince_tone4": {
+ "unicode": "1F934-1F3FE",
+ "unicode_alternates": [],
+ "name": "prince tone 4",
+ "shortname": ":prince_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤴🏾"
+ },
+ "prince_tone5": {
+ "unicode": "1F934-1F3FF",
+ "unicode_alternates": [],
+ "name": "prince tone 5",
+ "shortname": ":prince_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤴🏿"
},
"princess": {
"unicode": "1F478",
"unicode_alternates": [],
"name": "princess",
"shortname": ":princess:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -21947,13 +24550,18 @@
"queen",
"daughter",
"disney",
- "high-maintenance"
+ "high-maintenance",
+ "people",
+ "women",
+ "diversity",
+ "beautiful",
+ "girls night"
],
"moji": "👸"
},
"princess_tone1": {
"unicode": "1F478-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "princess tone 1",
"shortname": ":princess_tone1:",
"category": "people",
@@ -21972,11 +24580,12 @@
"daughter",
"disney",
"high-maintenance"
- ]
+ ],
+ "moji": "👸🏻"
},
"princess_tone2": {
"unicode": "1F478-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "princess tone 2",
"shortname": ":princess_tone2:",
"category": "people",
@@ -21995,11 +24604,12 @@
"daughter",
"disney",
"high-maintenance"
- ]
+ ],
+ "moji": "👸🏼"
},
"princess_tone3": {
"unicode": "1F478-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "princess tone 3",
"shortname": ":princess_tone3:",
"category": "people",
@@ -22018,11 +24628,12 @@
"daughter",
"disney",
"high-maintenance"
- ]
+ ],
+ "moji": "👸🏽"
},
"princess_tone4": {
"unicode": "1F478-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "princess tone 4",
"shortname": ":princess_tone4:",
"category": "people",
@@ -22041,11 +24652,12 @@
"daughter",
"disney",
"high-maintenance"
- ]
+ ],
+ "moji": "👸🏾"
},
"princess_tone5": {
"unicode": "1F478-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "princess tone 5",
"shortname": ":princess_tone5:",
"category": "people",
@@ -22064,49 +24676,34 @@
"daughter",
"disney",
"high-maintenance"
- ]
+ ],
+ "moji": "👸🏿"
},
"printer": {
"unicode": "1F5A8",
"unicode_alternates": [],
"name": "printer",
"shortname": ":printer:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"hardcopy",
"paper",
"inkjet",
- "laser"
- ]
- },
- "prohibited": {
- "unicode": "1F6C7",
- "unicode_alternates": [],
- "name": "prohibited sign",
- "shortname": ":prohibited:",
- "category": "objects_symbols",
- "aliases": [
- ":prohibited_sign:"
+ "laser",
+ "electronics",
+ "work",
+ "office"
],
- "aliases_ascii": [],
- "keywords": [
- "no",
- "not",
- "denied",
- "disallow",
- "forbid",
- "limit",
- "stop"
- ]
+ "moji": "🖨"
},
"projector": {
"unicode": "1F4FD",
"unicode_alternates": [],
"name": "film projector",
"shortname": ":projector:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":film_projector:"
],
@@ -22117,26 +24714,35 @@
"motion",
"picture",
"8mm",
- "16mm"
- ]
+ "16mm",
+ "object",
+ "camera"
+ ],
+ "moji": "📽"
},
"punch": {
"unicode": "1F44A",
"unicode_alternates": [],
"name": "fisted hand sign",
"shortname": ":punch:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fist",
- "hand"
+ "hand",
+ "body",
+ "hands",
+ "hi",
+ "fist bump",
+ "diversity",
+ "boys night"
],
"moji": "👊"
},
"punch_tone1": {
"unicode": "1F44A-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "fisted hand sign tone 1",
"shortname": ":punch_tone1:",
"category": "people",
@@ -22145,11 +24751,12 @@
"keywords": [
"fist",
"punch"
- ]
+ ],
+ "moji": "👊🏻"
},
"punch_tone2": {
"unicode": "1F44A-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "fisted hand sign tone 2",
"shortname": ":punch_tone2:",
"category": "people",
@@ -22158,11 +24765,12 @@
"keywords": [
"fist",
"punch"
- ]
+ ],
+ "moji": "👊🏼"
},
"punch_tone3": {
"unicode": "1F44A-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "fisted hand sign tone 3",
"shortname": ":punch_tone3:",
"category": "people",
@@ -22171,11 +24779,12 @@
"keywords": [
"fist",
"punch"
- ]
+ ],
+ "moji": "👊🏽"
},
"punch_tone4": {
"unicode": "1F44A-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "fisted hand sign tone 4",
"shortname": ":punch_tone4:",
"category": "people",
@@ -22184,11 +24793,12 @@
"keywords": [
"fist",
"punch"
- ]
+ ],
+ "moji": "👊🏾"
},
"punch_tone5": {
"unicode": "1F44A-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "fisted hand sign tone 5",
"shortname": ":punch_tone5:",
"category": "people",
@@ -22197,14 +24807,15 @@
"keywords": [
"fist",
"punch"
- ]
+ ],
+ "moji": "👊🏿"
},
"purple_heart": {
"unicode": "1F49C",
"unicode_alternates": [],
"name": "purple heart",
"shortname": ":purple_heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22215,7 +24826,6 @@
"purple",
"violet",
"heart",
- "love",
"sensitive",
"understanding",
"compassionate",
@@ -22224,7 +24834,8 @@
"honor",
"royalty",
"veteran",
- "sacrifice"
+ "sacrifice",
+ "symbol"
],
"moji": "💜"
},
@@ -22233,7 +24844,7 @@
"unicode_alternates": [],
"name": "purse",
"shortname": ":purse:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22246,9 +24857,9 @@
"handbag",
"coin bag",
"accessory",
- "money",
"ladies",
- "shopping"
+ "shopping",
+ "women"
],
"moji": "👛"
},
@@ -22261,28 +24872,18 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "stationery"
+ "stationery",
+ "object",
+ "office"
],
"moji": "📌"
},
- "pushpin_black": {
- "unicode": "1F588",
- "unicode_alternates": [],
- "name": "black pushpin",
- "shortname": ":pushpin_black:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "stationery"
- ]
- },
"put_litter_in_its_place": {
"unicode": "1F6AE",
"unicode_alternates": [],
"name": "put litter in its place symbol",
"shortname": ":put_litter_in_its_place:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22292,7 +24893,8 @@
"trash",
"garbage",
"receptacle",
- "can"
+ "can",
+ "symbol"
],
"moji": "🚮"
},
@@ -22301,12 +24903,15 @@
"unicode_alternates": [],
"name": "black question mark ornament",
"shortname": ":question:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"confused",
- "doubt"
+ "doubt",
+ "symbol",
+ "punctuation",
+ "wth"
],
"moji": "❓"
},
@@ -22320,7 +24925,8 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife"
],
"moji": "🐰"
},
@@ -22339,7 +24945,8 @@
"bunny",
"easter",
"reproduction",
- "prolific"
+ "prolific",
+ "wildlife"
],
"moji": "🐇"
},
@@ -22348,7 +24955,7 @@
"unicode_alternates": [],
"name": "racing car",
"shortname": ":race_car:",
- "category": "activity",
+ "category": "travel",
"aliases": [
":racing_car:"
],
@@ -22359,8 +24966,11 @@
"stock",
"nascar",
"speed",
- "drive"
- ]
+ "drive",
+ "transportation",
+ "car"
+ ],
+ "moji": "🏎"
},
"racehorse": {
"unicode": "1F40E",
@@ -22391,7 +25001,8 @@
"gelding",
"yearling",
"thoroughbred",
- "pony"
+ "pony",
+ "wildlife"
],
"moji": "🐎"
},
@@ -22407,7 +25018,8 @@
"communication",
"music",
"podcast",
- "program"
+ "program",
+ "electronics"
],
"moji": "📻"
},
@@ -22416,17 +25028,19 @@
"unicode_alternates": [],
"name": "radio button",
"shortname": ":radio_button:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "input"
+ "input",
+ "symbol",
+ "circle"
],
"moji": "🔘"
},
"radioactive": {
"unicode": "2622",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "radioactive sign",
"shortname": ":radioactive:",
"category": "symbols",
@@ -22435,15 +25049,17 @@
],
"aliases_ascii": [],
"keywords": [
- "symbol"
- ]
+ "symbol",
+ "science"
+ ],
+ "moji": "☢"
},
"rage": {
"unicode": "1F621",
"unicode_alternates": [],
"name": "pouting face",
"shortname": ":rage:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22454,7 +25070,9 @@
"pout",
"anger",
"rage",
- "irate"
+ "irate",
+ "smiley",
+ "emotion"
],
"moji": "😡"
},
@@ -22463,7 +25081,7 @@
"unicode_alternates": [],
"name": "railway car",
"shortname": ":railway_car:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22473,7 +25091,8 @@
"rail",
"car",
"coach",
- "train"
+ "train",
+ "travel"
],
"moji": "🚃"
},
@@ -22482,7 +25101,7 @@
"unicode_alternates": [],
"name": "railway track",
"shortname": ":railway_track:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [
":railroad_track:"
],
@@ -22492,15 +25111,18 @@
"trolley",
"subway",
"locomotive",
- "transit"
- ]
+ "transit",
+ "travel",
+ "vacation"
+ ],
+ "moji": "🛤"
},
"rainbow": {
"unicode": "1F308",
"unicode_alternates": [],
"name": "rainbow",
"shortname": ":rainbow:",
- "category": "nature",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22516,28 +25138,114 @@
"spectrum",
"refract",
"leprechaun",
- "gold"
+ "gold",
+ "weather",
+ "gay",
+ "rain"
],
"moji": "🌈"
},
+ "raised_back_of_hand": {
+ "unicode": "1F91A",
+ "unicode_alternates": [],
+ "name": "raised back of hand",
+ "shortname": ":raised_back_of_hand:",
+ "category": "people",
+ "aliases": [
+ ":back_of_hand:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤚"
+ },
+ "raised_back_of_hand_tone1": {
+ "unicode": "1F91A-1F3FB",
+ "unicode_alternates": [],
+ "name": "raised back of hand tone 1",
+ "shortname": ":raised_back_of_hand_tone1:",
+ "category": "people",
+ "aliases": [
+ ":back_of_hand_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤚🏻"
+ },
+ "raised_back_of_hand_tone2": {
+ "unicode": "1F91A-1F3FC",
+ "unicode_alternates": [],
+ "name": "raised back of hand tone 2",
+ "shortname": ":raised_back_of_hand_tone2:",
+ "category": "people",
+ "aliases": [
+ ":back_of_hand_tone2:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤚🏼"
+ },
+ "raised_back_of_hand_tone3": {
+ "unicode": "1F91A-1F3FD",
+ "unicode_alternates": [],
+ "name": "raised back of hand tone 3",
+ "shortname": ":raised_back_of_hand_tone3:",
+ "category": "people",
+ "aliases": [
+ ":back_of_hand_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤚🏽"
+ },
+ "raised_back_of_hand_tone4": {
+ "unicode": "1F91A-1F3FE",
+ "unicode_alternates": [],
+ "name": "raised back of hand tone 4",
+ "shortname": ":raised_back_of_hand_tone4:",
+ "category": "people",
+ "aliases": [
+ ":back_of_hand_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤚🏾"
+ },
+ "raised_back_of_hand_tone5": {
+ "unicode": "1F91A-1F3FF",
+ "unicode_alternates": [],
+ "name": "raised back of hand tone 5",
+ "shortname": ":raised_back_of_hand_tone5:",
+ "category": "people",
+ "aliases": [
+ ":back_of_hand_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤚🏿"
+ },
"raised_hand": {
"unicode": "270B",
"unicode_alternates": [],
"name": "raised hand",
"shortname": ":raised_hand:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"female",
"girl",
- "woman"
+ "woman",
+ "body",
+ "hands",
+ "hi",
+ "diversity",
+ "girls night"
],
"moji": "✋"
},
"raised_hand_tone1": {
"unicode": "270B-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand tone 1",
"shortname": ":raised_hand_tone1:",
"category": "people",
@@ -22547,11 +25255,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "✋🏻"
},
"raised_hand_tone2": {
"unicode": "270B-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand tone 2",
"shortname": ":raised_hand_tone2:",
"category": "people",
@@ -22561,11 +25270,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "✋🏼"
},
"raised_hand_tone3": {
"unicode": "270B-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand tone 3",
"shortname": ":raised_hand_tone3:",
"category": "people",
@@ -22575,11 +25285,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "✋🏽"
},
"raised_hand_tone4": {
"unicode": "270B-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand tone 4",
"shortname": ":raised_hand_tone4:",
"category": "people",
@@ -22589,11 +25300,12 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "✋🏾"
},
"raised_hand_tone5": {
"unicode": "270B-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand tone 5",
"shortname": ":raised_hand_tone5:",
"category": "people",
@@ -22603,14 +25315,15 @@
"female",
"girl",
"woman"
- ]
+ ],
+ "moji": "✋🏿"
},
"raised_hands": {
"unicode": "1F64C",
"unicode_alternates": [],
"name": "person raising both hands in celebration",
"shortname": ":raised_hands:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22619,13 +25332,19 @@
"winning",
"woot",
"yay",
- "banzai"
+ "banzai",
+ "body",
+ "hands",
+ "diversity",
+ "perfect",
+ "good",
+ "parties"
],
"moji": "🙌"
},
"raised_hands_tone1": {
"unicode": "1F64C-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person raising both hands in celebration tone 1",
"shortname": ":raised_hands_tone1:",
"category": "people",
@@ -22639,11 +25358,12 @@
"yay",
"banzai",
"raised"
- ]
+ ],
+ "moji": "🙌🏻"
},
"raised_hands_tone2": {
"unicode": "1F64C-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person raising both hands in celebration tone 2",
"shortname": ":raised_hands_tone2:",
"category": "people",
@@ -22657,11 +25377,12 @@
"yay",
"banzai",
"raised"
- ]
+ ],
+ "moji": "🙌🏼"
},
"raised_hands_tone3": {
"unicode": "1F64C-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person raising both hands in celebration tone 3",
"shortname": ":raised_hands_tone3:",
"category": "people",
@@ -22675,11 +25396,12 @@
"yay",
"banzai",
"raised"
- ]
+ ],
+ "moji": "🙌🏽"
},
"raised_hands_tone4": {
"unicode": "1F64C-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person raising both hands in celebration tone 4",
"shortname": ":raised_hands_tone4:",
"category": "people",
@@ -22693,11 +25415,12 @@
"yay",
"banzai",
"raised"
- ]
+ ],
+ "moji": "🙌🏾"
},
"raised_hands_tone5": {
"unicode": "1F64C-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "person raising both hands in celebration tone 5",
"shortname": ":raised_hands_tone5:",
"category": "people",
@@ -22711,14 +25434,15 @@
"yay",
"banzai",
"raised"
- ]
+ ],
+ "moji": "🙌🏿"
},
"raising_hand": {
"unicode": "1F64B",
"unicode_alternates": [],
"name": "happy person raising one hand",
"shortname": ":raising_hand:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22729,13 +25453,16 @@
"raise",
"notice",
"attention",
- "answer"
+ "answer",
+ "people",
+ "women",
+ "diversity"
],
"moji": "🙋"
},
"raising_hand_tone1": {
"unicode": "1F64B-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "happy person raising one hand tone1",
"shortname": ":raising_hand_tone1:",
"category": "people",
@@ -22749,11 +25476,12 @@
"notice",
"attention",
"answer"
- ]
+ ],
+ "moji": "🙋🏻"
},
"raising_hand_tone2": {
"unicode": "1F64B-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "happy person raising one hand tone2",
"shortname": ":raising_hand_tone2:",
"category": "people",
@@ -22767,11 +25495,12 @@
"notice",
"attention",
"answer"
- ]
+ ],
+ "moji": "🙋🏼"
},
"raising_hand_tone3": {
"unicode": "1F64B-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "happy person raising one hand tone3",
"shortname": ":raising_hand_tone3:",
"category": "people",
@@ -22785,11 +25514,12 @@
"notice",
"attention",
"answer"
- ]
+ ],
+ "moji": "🙋🏽"
},
"raising_hand_tone4": {
"unicode": "1F64B-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "happy person raising one hand tone4",
"shortname": ":raising_hand_tone4:",
"category": "people",
@@ -22803,11 +25533,12 @@
"notice",
"attention",
"answer"
- ]
+ ],
+ "moji": "🙋🏾"
},
"raising_hand_tone5": {
"unicode": "1F64B-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "happy person raising one hand tone5",
"shortname": ":raising_hand_tone5:",
"category": "people",
@@ -22821,7 +25552,8 @@
"notice",
"attention",
"answer"
- ]
+ ],
+ "moji": "🙋🏿"
},
"ram": {
"unicode": "1F40F",
@@ -22836,10 +25568,10 @@
"nature",
"sheep",
"ram",
- "sheep",
"male",
"horn",
- "horns"
+ "horns",
+ "wildlife"
],
"moji": "🐏"
},
@@ -22848,7 +25580,7 @@
"unicode_alternates": [],
"name": "steaming bowl",
"shortname": ":ramen:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22860,7 +25592,8 @@
"noodles",
"bowl",
"steaming",
- "soup"
+ "soup",
+ "japan"
],
"moji": "🍜"
},
@@ -22884,7 +25617,7 @@
},
"record_button": {
"unicode": "23FA",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "black circle for record",
"shortname": ":record_button:",
"category": "symbols",
@@ -22892,8 +25625,10 @@
"aliases_ascii": [],
"keywords": [
"sound",
- "symbol"
- ]
+ "symbol",
+ "circle"
+ ],
+ "moji": "⏺"
},
"recycle": {
"unicode": "267B",
@@ -22902,14 +25637,15 @@
],
"name": "black universal recycling symbol",
"shortname": ":recycle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
"environment",
"garbage",
- "trash"
+ "trash",
+ "symbol"
],
"moji": "♻"
},
@@ -22918,12 +25654,14 @@
"unicode_alternates": [],
"name": "automobile",
"shortname": ":red_car:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"transportation",
- "vehicle"
+ "vehicle",
+ "car",
+ "travel"
],
"moji": "🚗"
},
@@ -22932,11 +25670,14 @@
"unicode_alternates": [],
"name": "large red circle",
"shortname": ":red_circle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "circle"
],
"moji": "🔴"
},
@@ -22946,12 +25687,13 @@
"unicode_alternates": [],
"name": "registered sign",
"shortname": ":registered:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"alphabet",
- "circle"
+ "circle",
+ "symbol"
]
},
"relaxed": {
@@ -22961,7 +25703,7 @@
],
"name": "white smiling face",
"shortname": ":relaxed:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22969,7 +25711,9 @@
"face",
"happiness",
"massage",
- "smile"
+ "smile",
+ "happy",
+ "smiley"
],
"moji": "☺"
},
@@ -22978,7 +25722,7 @@
"unicode_alternates": [],
"name": "relieved face",
"shortname": ":relieved:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -22989,8 +25733,9 @@
"relaxed",
"relieved",
"satisfied",
- "phew",
- "relief"
+ "relief",
+ "smiley",
+ "emotion"
],
"moji": "😌"
},
@@ -22999,24 +25744,28 @@
"unicode_alternates": [],
"name": "reminder ribbon",
"shortname": ":reminder_ribbon:",
- "category": "celebration",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "awareness"
- ]
+ "awareness",
+ "award"
+ ],
+ "moji": "🎗"
},
"repeat": {
"unicode": "1F501",
"unicode_alternates": [],
"name": "clockwise rightwards and leftwards open circle arr",
"shortname": ":repeat:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"loop",
- "record"
+ "record",
+ "arrow",
+ "symbol"
],
"moji": "🔁"
},
@@ -23025,12 +25774,14 @@
"unicode_alternates": [],
"name": "clockwise rightwards and leftwards open circle arr",
"shortname": ":repeat_one:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "loop"
+ "loop",
+ "arrow",
+ "symbol"
],
"moji": "🔂"
},
@@ -23039,7 +25790,7 @@
"unicode_alternates": [],
"name": "restroom",
"shortname": ":restroom:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23051,7 +25802,8 @@
"restroom",
"sign",
"shared",
- "toilet"
+ "toilet",
+ "symbol"
],
"moji": "🚻"
},
@@ -23060,7 +25812,7 @@
"unicode_alternates": [],
"name": "revolving hearts",
"shortname": ":revolving_hearts:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23074,7 +25826,8 @@
"moving",
"circle",
"multiple",
- "lovers"
+ "lovers",
+ "symbol"
],
"moji": "💞"
},
@@ -23083,21 +25836,36 @@
"unicode_alternates": [],
"name": "black left-pointing double triangle",
"shortname": ":rewind:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "play"
+ "play",
+ "arrow",
+ "symbol"
],
"moji": "⏪"
},
+ "rhino": {
+ "unicode": "1F98F",
+ "unicode_alternates": [],
+ "name": "rhinoceros",
+ "shortname": ":rhino:",
+ "category": "nature",
+ "aliases": [
+ ":rhinoceros:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦏"
+ },
"ribbon": {
"unicode": "1F380",
"unicode_alternates": [],
"name": "ribbon",
"shortname": ":ribbon:",
- "category": "emoticons",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23108,7 +25876,10 @@
"ribbon",
"lace",
"wrap",
- "decorate"
+ "decorate",
+ "object",
+ "gift",
+ "birthday"
],
"moji": "🎀"
},
@@ -23117,7 +25888,7 @@
"unicode_alternates": [],
"name": "cooked rice",
"shortname": ":rice:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23125,8 +25896,9 @@
"rice",
"white",
"grain",
- "food",
- "bowl"
+ "bowl",
+ "sushi",
+ "japan"
],
"moji": "🍚"
},
@@ -23135,7 +25907,7 @@
"unicode_alternates": [],
"name": "rice ball",
"shortname": ":rice_ball:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23146,7 +25918,8 @@
"white",
"nori",
"seaweed",
- "japanese"
+ "sushi",
+ "japan"
],
"moji": "🍙"
},
@@ -23155,7 +25928,7 @@
"unicode_alternates": [],
"name": "rice cracker",
"shortname": ":rice_cracker:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23164,8 +25937,7 @@
"rice",
"cracker",
"seaweed",
- "food",
- "japanese"
+ "sushi"
],
"moji": "🍘"
},
@@ -23174,7 +25946,7 @@
"unicode_alternates": [],
"name": "moon viewing ceremony",
"shortname": ":rice_scene:",
- "category": "objects",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23187,92 +25959,115 @@
"rice",
"scene",
"festival",
- "autumn"
+ "autumn",
+ "places",
+ "space",
+ "sky",
+ "travel"
],
"moji": "🎑"
},
- "right_speaker": {
- "unicode": "1F568",
+ "right_facing_fist": {
+ "unicode": "1F91C",
"unicode_alternates": [],
- "name": "right speaker",
- "shortname": ":right_speaker:",
- "category": "objects_symbols",
- "aliases": [],
+ "name": "right-facing fist",
+ "shortname": ":right_facing_fist:",
+ "category": "people",
+ "aliases": [
+ ":right_fist:"
+ ],
"aliases_ascii": [],
- "keywords": [
- "sound",
- "listen",
- "hear",
- "noise",
- "volume"
- ]
+ "keywords": [],
+ "moji": "🤜"
},
- "right_speaker_one": {
- "unicode": "1F569",
+ "right_facing_fist_tone1": {
+ "unicode": "1F91C-1F3FB",
"unicode_alternates": [],
- "name": "right speaker with one sound wave",
- "shortname": ":right_speaker_one:",
- "category": "objects_symbols",
+ "name": "right facing fist tone 1",
+ "shortname": ":right_facing_fist_tone1:",
+ "category": "people",
"aliases": [
- ":right_speaker_with_one_sound_wave:"
+ ":right_fist_tone1:"
],
"aliases_ascii": [],
- "keywords": [
- "low",
- "volume"
- ]
+ "keywords": [],
+ "moji": "🤜🏻"
},
- "right_speaker_three": {
- "unicode": "1F56A",
+ "right_facing_fist_tone2": {
+ "unicode": "1F91C-1F3FC",
"unicode_alternates": [],
- "name": "right speaker with three sound waves",
- "shortname": ":right_speaker_three:",
- "category": "objects_symbols",
+ "name": "right facing fist tone 2",
+ "shortname": ":right_facing_fist_tone2:",
+ "category": "people",
"aliases": [
- ":right_speaker_with_three_sound_waves:"
+ ":right_fist_tone2:"
],
"aliases_ascii": [],
- "keywords": [
- "loud",
- "high",
- "volume"
- ]
+ "keywords": [],
+ "moji": "🤜🏼"
+ },
+ "right_facing_fist_tone3": {
+ "unicode": "1F91C-1F3FD",
+ "unicode_alternates": [],
+ "name": "right facing fist tone 3",
+ "shortname": ":right_facing_fist_tone3:",
+ "category": "people",
+ "aliases": [
+ ":right_fist_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤜🏽"
+ },
+ "right_facing_fist_tone4": {
+ "unicode": "1F91C-1F3FE",
+ "unicode_alternates": [],
+ "name": "right facing fist tone 4",
+ "shortname": ":right_facing_fist_tone4:",
+ "category": "people",
+ "aliases": [
+ ":right_fist_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤜🏾"
+ },
+ "right_facing_fist_tone5": {
+ "unicode": "1F91C-1F3FF",
+ "unicode_alternates": [],
+ "name": "right facing fist tone 5",
+ "shortname": ":right_facing_fist_tone5:",
+ "category": "people",
+ "aliases": [
+ ":right_fist_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤜🏿"
},
"ring": {
"unicode": "1F48D",
"unicode_alternates": [],
"name": "ring",
"shortname": ":ring:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"marriage",
"propose",
"valentines",
- "wedding"
+ "wedding",
+ "object",
+ "fashion",
+ "gem",
+ "accessories"
],
"moji": "💍"
},
- "ringing_bell": {
- "unicode": "1F56D",
- "unicode_alternates": [],
- "name": "ringing bell",
- "shortname": ":ringing_bell:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "alert",
- "ding",
- "volume",
- "sound",
- "chime"
- ]
- },
"robot": {
"unicode": "1F916",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "robot face",
"shortname": ":robot:",
"category": "people",
@@ -23280,14 +26075,18 @@
":robot_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "monster",
+ "robot"
+ ],
+ "moji": "🤖"
},
"rocket": {
"unicode": "1F680",
"unicode_alternates": [],
"name": "rocket",
"shortname": ":rocket:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23298,16 +26097,33 @@
"space",
"spacecraft",
"astronaut",
- "cosmonaut"
+ "cosmonaut",
+ "transportation",
+ "object",
+ "fly",
+ "blast"
],
"moji": "🚀"
},
+ "rofl": {
+ "unicode": "1F923",
+ "unicode_alternates": [],
+ "name": "rolling on the floor laughing",
+ "shortname": ":rofl:",
+ "category": "people",
+ "aliases": [
+ ":rolling_on_the_floor_laughing:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤣"
+ },
"roller_coaster": {
"unicode": "1F3A2",
"unicode_alternates": [],
"name": "roller coaster",
"shortname": ":roller_coaster:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23322,13 +26138,16 @@
"park",
"fair",
"ride",
- "entertainment"
+ "entertainment",
+ "places",
+ "vacation",
+ "roller coaster"
],
"moji": "🎢"
},
"rolling_eyes": {
"unicode": "1F644",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with rolling eyes",
"shortname": ":rolling_eyes:",
"category": "people",
@@ -23336,7 +26155,14 @@
":face_with_rolling_eyes:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "mad",
+ "smiley",
+ "rolling eyes",
+ "emotion",
+ "sarcastic"
+ ],
+ "moji": "🙄"
},
"rooster": {
"unicode": "1F413",
@@ -23375,9 +26201,13 @@
"fragrant",
"flower",
"thorns",
- "love",
"petals",
- "romance"
+ "romance",
+ "nature",
+ "plant",
+ "rip",
+ "condolence",
+ "beautiful"
],
"moji": "🌹"
},
@@ -23386,31 +26216,21 @@
"unicode_alternates": [],
"name": "rosette",
"shortname": ":rosette:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "flower"
- ]
- },
- "rosette_black": {
- "unicode": "1F3F6",
- "unicode_alternates": [],
- "name": "black rosette",
- "shortname": ":rosette_black:",
- "category": "objects_symbols",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "flower"
- ]
+ "flower",
+ "tropical"
+ ],
+ "moji": "🏵"
},
"rotating_light": {
"unicode": "1F6A8",
"unicode_alternates": [],
"name": "police cars revolving light",
"shortname": ":rotating_light:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23419,8 +26239,8 @@
"emergency",
"police",
"light",
- "police",
- "emergency"
+ "transportation",
+ "object"
],
"moji": "🚨"
},
@@ -23429,11 +26249,13 @@
"unicode_alternates": [],
"name": "round pushpin",
"shortname": ":round_pushpin:",
- "category": "places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "stationery"
+ "stationery",
+ "object",
+ "office"
],
"moji": "📍"
},
@@ -23442,7 +26264,7 @@
"unicode_alternates": [],
"name": "rowboat",
"shortname": ":rowboat:",
- "category": "places",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23453,13 +26275,18 @@
"boat",
"row",
"oar",
- "paddle"
+ "paddle",
+ "men",
+ "workout",
+ "sport",
+ "rowing",
+ "diversity"
],
"moji": "🚣"
},
"rowboat_tone1": {
"unicode": "1F6A3-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "rowboat tone 1",
"shortname": ":rowboat_tone1:",
"category": "activity",
@@ -23473,11 +26300,12 @@
"row",
"oar",
"paddle"
- ]
+ ],
+ "moji": "🚣🏻"
},
"rowboat_tone2": {
"unicode": "1F6A3-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "rowboat tone 2",
"shortname": ":rowboat_tone2:",
"category": "activity",
@@ -23491,11 +26319,12 @@
"row",
"oar",
"paddle"
- ]
+ ],
+ "moji": "🚣🏼"
},
"rowboat_tone3": {
"unicode": "1F6A3-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "rowboat tone 3",
"shortname": ":rowboat_tone3:",
"category": "activity",
@@ -23509,11 +26338,12 @@
"row",
"oar",
"paddle"
- ]
+ ],
+ "moji": "🚣🏽"
},
"rowboat_tone4": {
"unicode": "1F6A3-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "rowboat tone 4",
"shortname": ":rowboat_tone4:",
"category": "activity",
@@ -23527,11 +26357,12 @@
"row",
"oar",
"paddle"
- ]
+ ],
+ "moji": "🚣🏾"
},
"rowboat_tone5": {
"unicode": "1F6A3-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "rowboat tone 5",
"shortname": ":rowboat_tone5:",
"category": "activity",
@@ -23545,14 +26376,15 @@
"row",
"oar",
"paddle"
- ]
+ ],
+ "moji": "🚣🏿"
},
"rugby_football": {
"unicode": "1F3C9",
"unicode_alternates": [],
"name": "rugby football",
"shortname": ":rugby_football:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23562,7 +26394,8 @@
"ball",
"sport",
"team",
- "england"
+ "england",
+ "game"
],
"moji": "🏉"
},
@@ -23571,7 +26404,7 @@
"unicode_alternates": [],
"name": "runner",
"shortname": ":runner:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23581,16 +26414,19 @@
"run",
"runner",
"jog",
- "exercise",
"sprint",
"race",
- "dash"
+ "dash",
+ "people",
+ "men",
+ "diversity",
+ "boys night"
],
"moji": "🏃"
},
"runner_tone1": {
"unicode": "1F3C3-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "runner tone 1",
"shortname": ":runner_tone1:",
"category": "people",
@@ -23605,11 +26441,12 @@
"race",
"dash",
"marathon"
- ]
+ ],
+ "moji": "🏃🏻"
},
"runner_tone2": {
"unicode": "1F3C3-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "runner tone 2",
"shortname": ":runner_tone2:",
"category": "people",
@@ -23624,11 +26461,12 @@
"race",
"dash",
"marathon"
- ]
+ ],
+ "moji": "🏃🏼"
},
"runner_tone3": {
"unicode": "1F3C3-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "runner tone 3",
"shortname": ":runner_tone3:",
"category": "people",
@@ -23643,11 +26481,12 @@
"race",
"dash",
"marathon"
- ]
+ ],
+ "moji": "🏃🏽"
},
"runner_tone4": {
"unicode": "1F3C3-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "runner tone 4",
"shortname": ":runner_tone4:",
"category": "people",
@@ -23662,11 +26501,12 @@
"race",
"dash",
"marathon"
- ]
+ ],
+ "moji": "🏃🏾"
},
"runner_tone5": {
"unicode": "1F3C3-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "runner tone 5",
"shortname": ":runner_tone5:",
"category": "people",
@@ -23681,14 +26521,15 @@
"race",
"dash",
"marathon"
- ]
+ ],
+ "moji": "🏃🏿"
},
"running_shirt_with_sash": {
"unicode": "1F3BD",
"unicode_alternates": [],
"name": "running shirt with sash",
"shortname": ":running_shirt_with_sash:",
- "category": "emoticons",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23699,13 +26540,14 @@
"shirt",
"cloths",
"compete",
- "sports"
+ "sports",
+ "award"
],
"moji": "🎽"
},
"sa": {
"unicode": "1F202",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "squared katakana sa",
"shortname": ":sa:",
"category": "symbols",
@@ -23716,7 +26558,8 @@
"japanese",
"symbol",
"word"
- ]
+ ],
+ "moji": "🈂"
},
"sagittarius": {
"unicode": "2650",
@@ -23725,7 +26568,7 @@
],
"name": "sagittarius",
"shortname": ":sagittarius:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23738,9 +26581,8 @@
"stars",
"zodiac",
"sign",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♐"
},
@@ -23751,12 +26593,15 @@
],
"name": "sailboat",
"shortname": ":sailboat:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"ship",
- "transportation"
+ "transportation",
+ "travel",
+ "boat",
+ "vacation"
],
"moji": "⛵"
},
@@ -23765,7 +26610,7 @@
"unicode_alternates": [],
"name": "sake bottle and cup",
"shortname": ":sake:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23774,26 +26619,41 @@
"drunk",
"wine",
"sake",
- "wine",
"rice",
"ferment",
"alcohol",
"japanese",
- "drink"
+ "japan",
+ "girls night"
],
"moji": "🍶"
},
+ "salad": {
+ "unicode": "1F957",
+ "unicode_alternates": [],
+ "name": "green salad",
+ "shortname": ":salad:",
+ "category": "food",
+ "aliases": [
+ ":green_salad:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥗"
+ },
"sandal": {
"unicode": "1F461",
"unicode_alternates": [],
"name": "womans sandal",
"shortname": ":sandal:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"fashion",
- "shoes"
+ "shoes",
+ "shoe",
+ "accessories"
],
"moji": "👡"
},
@@ -23802,7 +26662,7 @@
"unicode_alternates": [],
"name": "father christmas",
"shortname": ":santa:",
- "category": "objects",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23823,14 +26683,18 @@
"nice",
"sleigh",
"father",
- "christmas",
- "holiday"
+ "holiday",
+ "people",
+ "hat",
+ "winter",
+ "holidays",
+ "diversity"
],
"moji": "🎅"
},
"santa_tone1": {
"unicode": "1F385-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "father christmas tone 1",
"shortname": ":santa_tone1:",
"category": "people",
@@ -23852,11 +26716,12 @@
"nice",
"sleigh",
"holiday"
- ]
+ ],
+ "moji": "🎅🏻"
},
"santa_tone2": {
"unicode": "1F385-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "father christmas tone 2",
"shortname": ":santa_tone2:",
"category": "people",
@@ -23878,11 +26743,12 @@
"nice",
"sleigh",
"holiday"
- ]
+ ],
+ "moji": "🎅🏼"
},
"santa_tone3": {
"unicode": "1F385-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "father christmas tone 3",
"shortname": ":santa_tone3:",
"category": "people",
@@ -23904,11 +26770,12 @@
"nice",
"sleigh",
"holiday"
- ]
+ ],
+ "moji": "🎅🏽"
},
"santa_tone4": {
"unicode": "1F385-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "father christmas tone 4",
"shortname": ":santa_tone4:",
"category": "people",
@@ -23930,11 +26797,12 @@
"nice",
"sleigh",
"holiday"
- ]
+ ],
+ "moji": "🎅🏾"
},
"santa_tone5": {
"unicode": "1F385-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "father christmas tone 5",
"shortname": ":santa_tone5:",
"category": "people",
@@ -23956,7 +26824,8 @@
"nice",
"sleigh",
"holiday"
- ]
+ ],
+ "moji": "🎅🏿"
},
"satellite": {
"unicode": "1F4E1",
@@ -23967,7 +26836,8 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "communication"
+ "communication",
+ "object"
],
"moji": "📡"
},
@@ -23976,21 +26846,23 @@
"unicode_alternates": [],
"name": "satellite",
"shortname": ":satellite_orbital:",
- "category": "objects_symbols",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"communication",
"orbital",
- "space"
- ]
+ "space",
+ "object"
+ ],
+ "moji": "🛰"
},
"saxophone": {
"unicode": "1F3B7",
"unicode_alternates": [],
"name": "saxophone",
"shortname": ":saxophone:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -23998,15 +26870,14 @@
"music",
"saxophone",
"sax",
- "music",
- "instrument",
- "woodwind"
+ "woodwind",
+ "instruments"
],
"moji": "🎷"
},
"scales": {
"unicode": "2696",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "scales",
"shortname": ":scales:",
"category": "objects",
@@ -24020,14 +26891,15 @@
"tool",
"weight",
"zodiac"
- ]
+ ],
+ "moji": "⚖"
},
"school": {
"unicode": "1F3EB",
"unicode_alternates": [],
"name": "school",
"shortname": ":school:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24039,7 +26911,8 @@
"high",
"college",
"teach",
- "education"
+ "education",
+ "places"
],
"moji": "🏫"
},
@@ -24048,7 +26921,7 @@
"unicode_alternates": [],
"name": "school satchel",
"shortname": ":school_satchel:",
- "category": "objects",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24058,14 +26931,16 @@
"school",
"satchel",
"backpack",
- "bag",
"packing",
"pack",
"hike",
- "education",
"adventure",
"travel",
- "sightsee"
+ "sightsee",
+ "fashion",
+ "office",
+ "vacation",
+ "accessories"
],
"moji": "🎒"
},
@@ -24081,19 +26956,39 @@
"aliases_ascii": [],
"keywords": [
"cut",
- "stationery"
+ "stationery",
+ "object",
+ "tool",
+ "weapon",
+ "office"
],
"moji": "✂"
},
+ "scooter": {
+ "unicode": "1F6F4",
+ "unicode_alternates": [],
+ "name": "scooter",
+ "shortname": ":scooter:",
+ "category": "travel",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🛴"
+ },
"scorpion": {
"unicode": "1F982",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "scorpion",
"shortname": ":scorpion:",
"category": "nature",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "insects",
+ "reptile",
+ "animal"
+ ],
+ "moji": "🦂"
},
"scorpius": {
"unicode": "264F",
@@ -24102,7 +26997,7 @@
],
"name": "scorpius",
"shortname": ":scorpius:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24115,9 +27010,8 @@
"stars",
"zodiac",
"sign",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♏"
},
@@ -24126,7 +27020,7 @@
"unicode_alternates": [],
"name": "face screaming in fear",
"shortname": ":scream:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24135,7 +27029,12 @@
"scream",
"painting",
"artist",
- "alien"
+ "alien",
+ "smiley",
+ "surprised",
+ "wow",
+ "emotion",
+ "omg"
],
"moji": "😱"
},
@@ -24144,7 +27043,7 @@
"unicode_alternates": [],
"name": "weary cat face",
"shortname": ":scream_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24161,7 +27060,8 @@
"exhausted",
"scream",
"painting",
- "artist"
+ "artist",
+ "cat"
],
"moji": "🙀"
},
@@ -24174,7 +27074,9 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "documents"
+ "documents",
+ "object",
+ "office"
],
"moji": "📜"
},
@@ -24183,14 +27085,31 @@
"unicode_alternates": [],
"name": "seat",
"shortname": ":seat:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "sit"
+ "sit",
+ "transportation",
+ "object",
+ "travel",
+ "vacation"
],
"moji": "💺"
},
+ "second_place": {
+ "unicode": "1F948",
+ "unicode_alternates": [],
+ "name": "second place medal",
+ "shortname": ":second_place:",
+ "category": "activity",
+ "aliases": [
+ ":second_place_medal:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥈"
+ },
"secret": {
"unicode": "3299",
"unicode_alternates": [
@@ -24198,11 +27117,13 @@
],
"name": "circled ideograph secret",
"shortname": ":secret:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "privacy"
+ "privacy",
+ "japan",
+ "symbol"
],
"moji": "㊙"
},
@@ -24211,14 +27132,13 @@
"unicode_alternates": [],
"name": "see-no-evil monkey",
"shortname": ":see_no_evil:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"animal",
"monkey",
"nature",
- "monkey",
"see",
"eyes",
"vision",
@@ -24241,34 +27161,118 @@
"nature",
"plant",
"seedling",
- "plant",
"new",
"start",
- "grow"
+ "grow",
+ "leaf"
],
"moji": "🌱"
},
+ "selfie": {
+ "unicode": "1F933",
+ "unicode_alternates": [],
+ "name": "selfie",
+ "shortname": ":selfie:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤳"
+ },
+ "selfie_tone1": {
+ "unicode": "1F933-1F3FB",
+ "unicode_alternates": [],
+ "name": "selfie tone 1",
+ "shortname": ":selfie_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤳🏻"
+ },
+ "selfie_tone2": {
+ "unicode": "1F933-1F3FC",
+ "unicode_alternates": [],
+ "name": "selfie tone 2",
+ "shortname": ":selfie_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤳🏼"
+ },
+ "selfie_tone3": {
+ "unicode": "1F933-1F3FD",
+ "unicode_alternates": [],
+ "name": "selfie tone 3",
+ "shortname": ":selfie_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤳🏽"
+ },
+ "selfie_tone4": {
+ "unicode": "1F933-1F3FE",
+ "unicode_alternates": [],
+ "name": "selfie tone 4",
+ "shortname": ":selfie_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤳🏾"
+ },
+ "selfie_tone5": {
+ "unicode": "1F933-1F3FF",
+ "unicode_alternates": [],
+ "name": "selfie tone 5",
+ "shortname": ":selfie_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤳🏿"
+ },
"seven": {
"moji": "7️⃣",
"unicode": "0037-20E3",
"unicode_alternates": [
"0037-FE0F-20E3"
],
- "name": "digit seven",
+ "name": "keycap digit seven",
"shortname": ":seven:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"7",
"blue-square",
"numbers",
- "prime"
+ "prime",
+ "number",
+ "math",
+ "symbol"
]
},
+ "shallow_pan_of_food": {
+ "unicode": "1F958",
+ "unicode_alternates": [],
+ "name": "shallow pan of food",
+ "shortname": ":shallow_pan_of_food:",
+ "category": "food",
+ "aliases": [
+ ":paella:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "pan of food"
+ ],
+ "moji": "🥘"
+ },
"shamrock": {
"unicode": "2618",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "shamrock",
"shortname": ":shamrock:",
"category": "nature",
@@ -24276,15 +27280,29 @@
"aliases_ascii": [],
"keywords": [
"nature",
- "plant"
- ]
+ "plant",
+ "luck",
+ "leaf"
+ ],
+ "moji": "☘"
+ },
+ "shark": {
+ "unicode": "1F988",
+ "unicode_alternates": [],
+ "name": "shark",
+ "shortname": ":shark:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦈"
},
"shaved_ice": {
"unicode": "1F367",
"unicode_alternates": [],
"name": "shaved ice",
"shortname": ":shaved_ice:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24295,7 +27313,8 @@
"dessert",
"treat",
"syrup",
- "flavoring"
+ "flavoring",
+ "food"
],
"moji": "🍧"
},
@@ -24334,7 +27353,6 @@
"sea",
"shell",
"spiral",
- "beach",
"sand",
"crab",
"nautilus"
@@ -24346,7 +27364,7 @@
"unicode_alternates": [],
"name": "shield",
"shortname": ":shield:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24354,12 +27372,13 @@
"route",
"sign",
"highway",
- "interstate"
- ]
+ "object"
+ ],
+ "moji": "🛡"
},
"shinto_shrine": {
"unicode": "26E9",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "shinto shrine",
"shortname": ":shinto_shrine:",
"category": "travel",
@@ -24367,15 +27386,20 @@
"aliases_ascii": [],
"keywords": [
"religion",
- "symbol"
- ]
+ "symbol",
+ "places",
+ "building",
+ "travel",
+ "vacation"
+ ],
+ "moji": "⛩"
},
"ship": {
"unicode": "1F6A2",
"unicode_alternates": [],
"name": "ship",
"shortname": ":ship:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24383,7 +27407,9 @@
"transportation",
"ferry",
"ship",
- "boat"
+ "boat",
+ "travel",
+ "vacation"
],
"moji": "🚢"
},
@@ -24392,7 +27418,7 @@
"unicode_alternates": [],
"name": "t-shirt",
"shortname": ":shirt:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24406,7 +27432,7 @@
"unicode_alternates": [],
"name": "shopping bags",
"shortname": ":shopping_bags:",
- "category": "travel_places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24414,8 +27440,25 @@
"mall",
"buy",
"store",
- "shop"
- ]
+ "shop",
+ "object",
+ "birthday",
+ "parties"
+ ],
+ "moji": "🛍"
+ },
+ "shopping_cart": {
+ "unicode": "1F6D2",
+ "unicode_alternates": [],
+ "name": "shopping trolley",
+ "shortname": ":shopping_cart:",
+ "category": "objects",
+ "aliases": [
+ ":shopping_trolley:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🛒"
},
"shower": {
"unicode": "1F6BF",
@@ -24433,22 +27476,100 @@
"shower",
"soap",
"water",
- "clean",
"shampoo",
- "lather"
+ "lather",
+ "object"
],
"moji": "🚿"
},
+ "shrimp": {
+ "unicode": "1F990",
+ "unicode_alternates": [],
+ "name": "shrimp",
+ "shortname": ":shrimp:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦐"
+ },
+ "shrug": {
+ "unicode": "1F937",
+ "unicode_alternates": [],
+ "name": "shrug",
+ "shortname": ":shrug:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤷"
+ },
+ "shrug_tone1": {
+ "unicode": "1F937-1F3FB",
+ "unicode_alternates": [],
+ "name": "shrug tone 1",
+ "shortname": ":shrug_tone1:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤷🏻"
+ },
+ "shrug_tone2": {
+ "unicode": "1F937-1F3FC",
+ "unicode_alternates": [],
+ "name": "shrug tone 2",
+ "shortname": ":shrug_tone2:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤷🏼"
+ },
+ "shrug_tone3": {
+ "unicode": "1F937-1F3FD",
+ "unicode_alternates": [],
+ "name": "shrug tone 3",
+ "shortname": ":shrug_tone3:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤷🏽"
+ },
+ "shrug_tone4": {
+ "unicode": "1F937-1F3FE",
+ "unicode_alternates": [],
+ "name": "shrug tone 4",
+ "shortname": ":shrug_tone4:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤷🏾"
+ },
+ "shrug_tone5": {
+ "unicode": "1F937-1F3FF",
+ "unicode_alternates": [],
+ "name": "shrug tone 5",
+ "shortname": ":shrug_tone5:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤷🏿"
+ },
"signal_strength": {
"unicode": "1F4F6",
"unicode_alternates": [],
"name": "antenna with bars",
"shortname": ":signal_strength:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "📶"
},
@@ -24458,15 +27579,18 @@
"unicode_alternates": [
"0036-FE0F-20E3"
],
- "name": "digit six",
+ "name": "keycap digit six",
"shortname": ":six:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"6",
"blue-square",
- "numbers"
+ "numbers",
+ "number",
+ "math",
+ "symbol"
]
},
"six_pointed_star": {
@@ -24474,11 +27598,15 @@
"unicode_alternates": [],
"name": "six pointed star with middle dot",
"shortname": ":six_pointed_star:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "purple-square"
+ "purple-square",
+ "religion",
+ "jew",
+ "star",
+ "symbol"
],
"moji": "🔯"
},
@@ -24487,7 +27615,7 @@
"unicode_alternates": [],
"name": "ski and ski boot",
"shortname": ":ski:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24499,18 +27627,19 @@
"cross-country",
"poles",
"snow",
- "winter",
"mountain",
"alpine",
"powder",
"slalom",
- "freestyle"
+ "freestyle",
+ "sport",
+ "skiing"
],
"moji": "🎿"
},
"skier": {
"unicode": "26F7",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "skier",
"shortname": ":skier:",
"category": "activity",
@@ -24521,15 +27650,20 @@
"ski",
"snow",
"sport",
- "travel"
- ]
+ "travel",
+ "hat",
+ "vacation",
+ "cold",
+ "skiing"
+ ],
+ "moji": "⛷"
},
"skull": {
"unicode": "1F480",
"unicode_alternates": [],
"name": "skull",
"shortname": ":skull:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":skeleton:"
],
@@ -24537,13 +27671,15 @@
"keywords": [
"dead",
"skeleton",
- "dying"
+ "dying",
+ "halloween",
+ "skull"
],
"moji": "💀"
},
"skull_crossbones": {
"unicode": "2620",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "skull and crossbones",
"shortname": ":skull_crossbones:",
"category": "objects",
@@ -24556,15 +27692,19 @@
"death",
"face",
"monster",
- "person"
- ]
+ "person",
+ "symbol",
+ "dead",
+ "skull"
+ ],
+ "moji": "☠"
},
"sleeping": {
"unicode": "1F634",
"unicode_alternates": [],
"name": "sleeping face",
"shortname": ":sleeping:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24572,9 +27712,11 @@
"sleepy",
"tired",
"sleep",
- "sleepy",
"sleeping",
- "snore"
+ "snore",
+ "smiley",
+ "emotion",
+ "goodnight"
],
"moji": "😴"
},
@@ -24583,21 +27725,23 @@
"unicode_alternates": [],
"name": "sleeping accommodation",
"shortname": ":sleeping_accommodation:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"hotel",
"motel",
- "rest"
- ]
+ "rest",
+ "tired"
+ ],
+ "moji": "🛌"
},
"sleepy": {
"unicode": "1F62A",
"unicode_alternates": [],
"name": "sleepy face",
"shortname": ":sleepy:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24605,8 +27749,10 @@
"rest",
"tired",
"sleepy",
- "tired",
- "exhausted"
+ "exhausted",
+ "smiley",
+ "sick",
+ "emotion"
],
"moji": "😪"
},
@@ -24624,8 +27770,12 @@
"slight",
"frown",
"unhappy",
- "disappointed"
- ]
+ "disappointed",
+ "sad",
+ "smiley",
+ "emotion"
+ ],
+ "moji": "🙁"
},
"slight_smile": {
"unicode": "1F642",
@@ -24640,15 +27790,17 @@
"keywords": [
"slight",
"smile",
- "happy"
- ]
+ "happy",
+ "smiley"
+ ],
+ "moji": "🙂"
},
"slot_machine": {
"unicode": "1F3B0",
"unicode_alternates": [],
"name": "slot machine",
"shortname": ":slot_machine:",
- "category": "places",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24657,10 +27809,11 @@
"vegas",
"slot",
"machine",
- "gamble",
"one-armed bandit",
"slots",
- "luck"
+ "luck",
+ "game",
+ "boys night"
],
"moji": "🎰"
},
@@ -24669,11 +27822,13 @@
"unicode_alternates": [],
"name": "small blue diamond",
"shortname": ":small_blue_diamond:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol"
],
"moji": "🔹"
},
@@ -24682,11 +27837,13 @@
"unicode_alternates": [],
"name": "small orange diamond",
"shortname": ":small_orange_diamond:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol"
],
"moji": "🔸"
},
@@ -24695,11 +27852,14 @@
"unicode_alternates": [],
"name": "up-pointing red triangle",
"shortname": ":small_red_triangle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "triangle"
],
"moji": "🔺"
},
@@ -24708,11 +27868,14 @@
"unicode_alternates": [],
"name": "down-pointing red triangle",
"shortname": ":small_red_triangle_down:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "triangle"
],
"moji": "🔻"
},
@@ -24721,7 +27884,7 @@
"unicode_alternates": [],
"name": "smiling face with open mouth and smiling eyes",
"shortname": ":smile:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":)",
@@ -24739,7 +27902,8 @@
"laugh",
"smile",
"smiley",
- "smiling"
+ "smiling",
+ "emotion"
],
"moji": "😄"
},
@@ -24748,7 +27912,7 @@
"unicode_alternates": [],
"name": "grinning cat face with smiling eyes",
"shortname": ":smile_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24757,7 +27921,8 @@
"cat",
"smile",
"grin",
- "grinning"
+ "grinning",
+ "happy"
],
"moji": "😸"
},
@@ -24766,7 +27931,7 @@
"unicode_alternates": [],
"name": "smiling face with open mouth",
"shortname": ":smiley:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":D",
@@ -24780,7 +27945,9 @@
"joy",
"smiling",
"smile",
- "smiley"
+ "smiley",
+ "emotion",
+ "good"
],
"moji": "😃"
},
@@ -24789,7 +27956,7 @@
"unicode_alternates": [],
"name": "smiling cat face with open mouth",
"shortname": ":smiley_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24798,8 +27965,7 @@
"happy",
"smile",
"smiley",
- "cat",
- "happy"
+ "cat"
],
"moji": "😺"
},
@@ -24808,16 +27974,19 @@
"unicode_alternates": [],
"name": "smiling face with horns",
"shortname": ":smiling_imp:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"devil",
"horns",
- "horns",
- "devil",
"impish",
- "trouble"
+ "trouble",
+ "silly",
+ "smiley",
+ "angry",
+ "monster",
+ "boys night"
],
"moji": "😈"
},
@@ -24826,7 +27995,7 @@
"unicode_alternates": [],
"name": "smirking face",
"shortname": ":smirk:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24836,10 +28005,12 @@
"smug",
"smirking",
"smirk",
- "smug",
- "smile",
"half-smile",
- "conceited"
+ "conceited",
+ "silly",
+ "smiley",
+ "sexy",
+ "sarcastic"
],
"moji": "😏"
},
@@ -24848,7 +28019,7 @@
"unicode_alternates": [],
"name": "cat face with wry smile",
"shortname": ":smirk_cat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24858,7 +28029,8 @@
"smirking",
"wry",
"confident",
- "confidence"
+ "confidence",
+ "cat"
],
"moji": "😼"
},
@@ -24875,13 +28047,14 @@
"kills",
"tobacco",
"smoking",
- "cigarette",
"smoke",
"cancer",
"lungs",
"inhale",
"tar",
- "nicotine"
+ "nicotine",
+ "symbol",
+ "drugs"
],
"moji": "🚬"
},
@@ -24898,10 +28071,10 @@
"shell",
"slow",
"snail",
- "slow",
"escargot",
"french",
- "appetizer"
+ "appetizer",
+ "insects"
],
"moji": "🐌"
},
@@ -24915,16 +28088,32 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "evil"
+ "evil",
+ "wildlife",
+ "reptile",
+ "creationism"
],
"moji": "🐍"
},
+ "sneezing_face": {
+ "unicode": "1F927",
+ "unicode_alternates": [],
+ "name": "sneezing face",
+ "shortname": ":sneezing_face:",
+ "category": "people",
+ "aliases": [
+ ":sneeze:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤧"
+ },
"snowboarder": {
"unicode": "1F3C2",
"unicode_alternates": [],
"name": "snowboarder",
"shortname": ":snowboarder:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -24932,13 +28121,16 @@
"winter",
"snow",
"boarding",
- "sports",
"freestyle",
"halfpipe",
"board",
"mountain",
"alpine",
- "winter"
+ "hat",
+ "vacation",
+ "cold",
+ "sport",
+ "snowboarding"
],
"moji": "🏂"
},
@@ -24965,13 +28157,13 @@
"droplet",
"ice",
"crystal",
- "cold",
"chilly",
- "winter",
"unique",
"special",
"below zero",
- "elsa"
+ "elsa",
+ "sky",
+ "holidays"
],
"moji": "❄"
},
@@ -24991,13 +28183,15 @@
"season",
"weather",
"winter",
- "xmas"
+ "xmas",
+ "holidays",
+ "snow"
],
"moji": "⛄"
},
"snowman2": {
"unicode": "2603",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "snowman",
"shortname": ":snowman2:",
"category": "nature",
@@ -25007,15 +28201,19 @@
"cold",
"nature",
"snow",
- "weather"
- ]
+ "weather",
+ "winter",
+ "holidays",
+ "christmas"
+ ],
+ "moji": "☃"
},
"sob": {
"unicode": "1F62D",
"unicode_alternates": [],
"name": "loudly crying face",
"shortname": ":sob:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25024,14 +28222,14 @@
"sad",
"tears",
"upset",
- "cry",
"sob",
- "tears",
- "sad",
"melancholy",
"morn",
"somber",
- "hurt"
+ "hurt",
+ "smiley",
+ "emotion",
+ "heartbreak"
],
"moji": "😭"
},
@@ -25042,7 +28240,7 @@
],
"name": "soccer ball",
"shortname": ":soccer:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25051,7 +28249,10 @@
"football",
"sports",
"european",
- "football"
+ "game",
+ "ball",
+ "sport",
+ "soccer"
],
"moji": "⚽"
},
@@ -25060,12 +28261,13 @@
"unicode_alternates": [],
"name": "soon with rightwards arrow above",
"shortname": ":soon:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arrow",
- "words"
+ "words",
+ "symbol"
],
"moji": "🔜"
},
@@ -25074,14 +28276,15 @@
"unicode_alternates": [],
"name": "squared sos",
"shortname": ":sos:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"emergency",
"help",
"red-square",
- "words"
+ "words",
+ "symbol"
],
"moji": "🆘"
},
@@ -25090,12 +28293,14 @@
"unicode_alternates": [],
"name": "speaker with one sound wave",
"shortname": ":sound:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"speaker",
- "volume"
+ "volume",
+ "alarm",
+ "symbol"
],
"moji": "🔉"
},
@@ -25104,12 +28309,14 @@
"unicode_alternates": [],
"name": "alien monster",
"shortname": ":space_invader:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"arcade",
- "game"
+ "game",
+ "monster",
+ "alien"
],
"moji": "👾"
},
@@ -25120,12 +28327,14 @@
],
"name": "black spade suit",
"shortname": ":spades:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cards",
- "poker"
+ "poker",
+ "symbol",
+ "game"
],
"moji": "♠"
},
@@ -25134,7 +28343,7 @@
"unicode_alternates": [],
"name": "spaghetti",
"shortname": ":spaghetti:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25145,7 +28354,7 @@
"noodles",
"tomato",
"sauce",
- "italian"
+ "pasta"
],
"moji": "🍝"
},
@@ -25156,12 +28365,13 @@
],
"name": "sparkle",
"shortname": ":sparkle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"green-square",
- "stars"
+ "stars",
+ "symbol"
],
"moji": "❇"
},
@@ -25170,13 +28380,14 @@
"unicode_alternates": [],
"name": "firework sparkler",
"shortname": ":sparkler:",
- "category": "objects",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"night",
"shine",
- "stars"
+ "stars",
+ "parties"
],
"moji": "🎇"
},
@@ -25185,14 +28396,16 @@
"unicode_alternates": [],
"name": "sparkles",
"shortname": ":sparkles:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"cool",
"shine",
"shiny",
- "stars"
+ "stars",
+ "star",
+ "girls night"
],
"moji": "✨"
},
@@ -25201,14 +28414,16 @@
"unicode_alternates": [],
"name": "sparkling heart",
"shortname": ":sparkling_heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"affection",
"like",
"love",
- "valentines"
+ "valentines",
+ "symbol",
+ "girls night"
],
"moji": "💖"
},
@@ -25217,13 +28432,12 @@
"unicode_alternates": [],
"name": "speak-no-evil monkey",
"shortname": ":speak_no_evil:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"animal",
"monkey",
- "monkey",
"mouth",
"talk",
"say",
@@ -25240,36 +28454,41 @@
"unicode_alternates": [],
"name": "speaker",
"shortname": ":speaker:",
- "category": "objects",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"sound",
"listen",
"hear",
- "noise"
- ]
+ "noise",
+ "alarm",
+ "symbol"
+ ],
+ "moji": "🔈"
},
"speaking_head": {
"unicode": "1F5E3",
"unicode_alternates": [],
"name": "speaking head in silhouette",
"shortname": ":speaking_head:",
- "category": "objects_symbols",
+ "category": "people",
"aliases": [
":speaking_head_in_silhouette:"
],
"aliases_ascii": [],
"keywords": [
- "talk"
- ]
+ "talk",
+ "people"
+ ],
+ "moji": "🗣"
},
"speech_balloon": {
"unicode": "1F4AC",
"unicode_alternates": [],
"name": "speech balloon",
"shortname": ":speech_balloon:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25281,96 +28500,18 @@
"conversation",
"communication",
"comic",
- "dialogue"
+ "dialogue",
+ "symbol",
+ "free speech"
],
"moji": "💬"
},
- "speech_left": {
- "unicode": "1F5E8",
- "unicode_alternates": [],
- "name": "left speech bubble",
- "shortname": ":speech_left:",
- "category": "objects_symbols",
- "aliases": [
- ":left_speech_bubble:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "words",
- "talk",
- "conversation",
- "communication",
- "comic",
- "dialogue"
- ]
- },
- "speech_right": {
- "unicode": "1F5E9",
- "unicode_alternates": [],
- "name": "right speech bubble",
- "shortname": ":speech_right:",
- "category": "objects_symbols",
- "aliases": [
- ":right_speech_bubble:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "words",
- "talk",
- "conversation",
- "communication",
- "comic",
- "dialogue"
- ]
- },
- "speech_three": {
- "unicode": "1F5EB",
- "unicode_alternates": [],
- "name": "three speech bubbles",
- "shortname": ":speech_three:",
- "category": "objects_symbols",
- "aliases": [
- ":three_speech_bubbles:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "words",
- "talk",
- "conversation",
- "communication",
- "comic",
- "dialogue"
- ]
- },
- "speech_two": {
- "unicode": "1F5EA",
- "unicode_alternates": [],
- "name": "two speech bubbles",
- "shortname": ":speech_two:",
- "category": "objects_symbols",
- "aliases": [
- ":two_speech_bubbles:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "words",
- "talk",
- "conversation",
- "communication",
- "comic",
- "dialogue"
- ]
- },
"speedboat": {
"unicode": "1F6A4",
"unicode_alternates": [],
"name": "speedboat",
"shortname": ":speedboat:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25381,7 +28522,10 @@
"speed",
"ski",
"power",
- "boat"
+ "boat",
+ "travel",
+ "vacation",
+ "tropical"
],
"moji": "🚤"
},
@@ -25395,8 +28539,12 @@
"aliases_ascii": [],
"keywords": [
"arachnid",
- "eight-legged"
- ]
+ "eight-legged",
+ "insects",
+ "halloween",
+ "animal"
+ ],
+ "moji": "🕷"
},
"spider_web": {
"unicode": "1F578",
@@ -25407,8 +28555,21 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "cobweb"
- ]
+ "cobweb",
+ "halloween"
+ ],
+ "moji": "🕸"
+ },
+ "spoon": {
+ "unicode": "1F944",
+ "unicode_alternates": [],
+ "name": "spoon",
+ "shortname": ":spoon:",
+ "category": "food",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥄"
},
"spy": {
"unicode": "1F575",
@@ -25423,12 +28584,19 @@
"keywords": [
"pi",
"undercover",
- "investigator"
- ]
+ "investigator",
+ "people",
+ "hat",
+ "men",
+ "glasses",
+ "diversity",
+ "job"
+ ],
+ "moji": "🕵"
},
"spy_tone1": {
"unicode": "1F575-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sleuth or spy tone 1",
"shortname": ":spy_tone1:",
"category": "people",
@@ -25441,11 +28609,12 @@
"undercover",
"investigator",
"person"
- ]
+ ],
+ "moji": "🕵🏻"
},
"spy_tone2": {
"unicode": "1F575-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sleuth or spy tone 2",
"shortname": ":spy_tone2:",
"category": "people",
@@ -25458,11 +28627,12 @@
"undercover",
"investigator",
"person"
- ]
+ ],
+ "moji": "🕵🏼"
},
"spy_tone3": {
"unicode": "1F575-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sleuth or spy tone 3",
"shortname": ":spy_tone3:",
"category": "people",
@@ -25475,11 +28645,12 @@
"undercover",
"investigator",
"person"
- ]
+ ],
+ "moji": "🕵🏽"
},
"spy_tone4": {
"unicode": "1F575-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sleuth or spy tone 4",
"shortname": ":spy_tone4:",
"category": "people",
@@ -25492,11 +28663,12 @@
"undercover",
"investigator",
"person"
- ]
+ ],
+ "moji": "🕵🏾"
},
"spy_tone5": {
"unicode": "1F575-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "sleuth or spy tone 5",
"shortname": ":spy_tone5:",
"category": "people",
@@ -25509,14 +28681,26 @@
"undercover",
"investigator",
"person"
- ]
+ ],
+ "moji": "🕵🏿"
+ },
+ "squid": {
+ "unicode": "1F991",
+ "unicode_alternates": [],
+ "name": "squid",
+ "shortname": ":squid:",
+ "category": "nature",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🦑"
},
"stadium": {
"unicode": "1F3DF",
"unicode_alternates": [],
"name": "stadium",
"shortname": ":stadium:",
- "category": "travel_places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25524,8 +28708,14 @@
"event",
"concert",
"convention",
- "game"
- ]
+ "game",
+ "places",
+ "building",
+ "travel",
+ "vacation",
+ "boys night"
+ ],
+ "moji": "🏟"
},
"star": {
"unicode": "2B50",
@@ -25539,7 +28729,10 @@
"aliases_ascii": [],
"keywords": [
"night",
- "yellow"
+ "yellow",
+ "space",
+ "sky",
+ "star"
],
"moji": "⭐"
},
@@ -25548,7 +28741,7 @@
"unicode_alternates": [],
"name": "glowing star",
"shortname": ":star2:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25559,13 +28752,15 @@
"star",
"five",
"points",
- "classic"
+ "classic",
+ "space",
+ "sky"
],
"moji": "🌟"
},
"star_and_crescent": {
"unicode": "262A",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "star and crescent",
"shortname": ":star_and_crescent:",
"category": "symbols",
@@ -25576,11 +28771,12 @@
"muslim",
"religion",
"symbol"
- ]
+ ],
+ "moji": "☪"
},
"star_of_david": {
"unicode": "2721",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "star of david",
"shortname": ":star_of_david:",
"category": "symbols",
@@ -25590,15 +28786,17 @@
"jew",
"jewish",
"religion",
- "symbol"
- ]
+ "symbol",
+ "star"
+ ],
+ "moji": "✡"
},
"stars": {
"unicode": "1F320",
"unicode_alternates": [],
"name": "shooting star",
"shortname": ":stars:",
- "category": "nature",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25608,9 +28806,9 @@
"shoot",
"star",
"sky",
- "night",
"comet",
- "meteoroid"
+ "meteoroid",
+ "space"
],
"moji": "🌠"
},
@@ -25619,7 +28817,7 @@
"unicode_alternates": [],
"name": "station",
"shortname": ":station:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25628,7 +28826,8 @@
"vehicle",
"station",
"train",
- "subway"
+ "subway",
+ "travel"
],
"moji": "🚉"
},
@@ -25637,12 +28836,18 @@
"unicode_alternates": [],
"name": "statue of liberty",
"shortname": ":statue_of_liberty:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"american",
- "newyork"
+ "newyork",
+ "places",
+ "america",
+ "travel",
+ "vacation",
+ "statue of liberty",
+ "free speech"
],
"moji": "🗽"
},
@@ -25651,7 +28856,7 @@
"unicode_alternates": [],
"name": "steam locomotive",
"shortname": ":steam_locomotive:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25660,35 +28865,17 @@
"vehicle",
"locomotive",
"steam",
- "train",
- "engine"
+ "engine",
+ "travel"
],
"moji": "🚂"
},
- "stereo": {
- "unicode": "1F4FE",
- "unicode_alternates": [],
- "name": "portable stereo",
- "shortname": ":stereo:",
- "category": "objects_symbols",
- "aliases": [
- ":portable_stereo:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "music",
- "program",
- "boom",
- "box"
- ]
- },
"stew": {
"unicode": "1F372",
"unicode_alternates": [],
"name": "pot of food",
"shortname": ":stew:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25699,28 +28886,14 @@
"soup",
"thick",
"hot",
- "pot"
+ "pot",
+ "steam"
],
"moji": "🍲"
},
- "stock_chart": {
- "unicode": "1F5E0",
- "unicode_alternates": [],
- "name": "stock chart",
- "shortname": ":stock_chart:",
- "category": "objects_symbols",
- "aliases": [],
- "aliases_ascii": [],
- "keywords": [
- "graph",
- "presentation",
- "stats",
- "business"
- ]
- },
"stop_button": {
"unicode": "23F9",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "black square for stop",
"shortname": ":stop_button:",
"category": "symbols",
@@ -25728,12 +28901,14 @@
"aliases_ascii": [],
"keywords": [
"sound",
- "symbol"
- ]
+ "symbol",
+ "square"
+ ],
+ "moji": "⏹"
},
"stopwatch": {
"unicode": "23F1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "stopwatch",
"shortname": ":stopwatch:",
"category": "objects",
@@ -25742,8 +28917,10 @@
"keywords": [
"clock",
"object",
- "time"
- ]
+ "time",
+ "electronics"
+ ],
+ "moji": "⏱"
},
"straight_ruler": {
"unicode": "1F4CF",
@@ -25754,7 +28931,10 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "stationery"
+ "stationery",
+ "object",
+ "tool",
+ "office"
],
"moji": "📏"
},
@@ -25763,7 +28943,7 @@
"unicode_alternates": [],
"name": "strawberry",
"shortname": ":strawberry:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25782,7 +28962,7 @@
"unicode_alternates": [],
"name": "face with stuck-out tongue",
"shortname": ":stuck_out_tongue:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
":P",
@@ -25807,8 +28987,10 @@
"prank",
"tongue",
"silly",
- "playful",
- "cheeky"
+ "cheeky",
+ "smiley",
+ "sex",
+ "emotion"
],
"moji": "😛"
},
@@ -25817,7 +28999,7 @@
"unicode_alternates": [],
"name": "face with stuck-out tongue and tightly-closed eyes",
"shortname": ":stuck_out_tongue_closed_eyes:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25828,8 +29010,10 @@
"tongue",
"kidding",
"silly",
- "playful",
- "ecstatic"
+ "ecstatic",
+ "happy",
+ "smiley",
+ "emotion"
],
"moji": "😝"
},
@@ -25838,7 +29022,7 @@
"unicode_alternates": [],
"name": "face with stuck-out tongue and winking eye",
"shortname": ":stuck_out_tongue_winking_eye:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
">:P",
@@ -25856,11 +29040,27 @@
"winking",
"kidding",
"silly",
- "playful",
- "crazy"
+ "crazy",
+ "happy",
+ "smiley",
+ "emotion",
+ "parties"
],
"moji": "😜"
},
+ "stuffed_flatbread": {
+ "unicode": "1F959",
+ "unicode_alternates": [],
+ "name": "stuffed flatbread",
+ "shortname": ":stuffed_flatbread:",
+ "category": "food",
+ "aliases": [
+ ":stuffed_pita:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥙"
+ },
"sun_with_face": {
"unicode": "1F31E",
"unicode_alternates": [],
@@ -25874,7 +29074,9 @@
"sun",
"anthropomorphic",
"face",
- "sky"
+ "sky",
+ "day",
+ "hump day"
],
"moji": "🌞"
},
@@ -25902,7 +29104,7 @@
"unicode_alternates": [],
"name": "smiling face with sunglasses",
"shortname": ":sunglasses:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"B-)",
@@ -25920,8 +29122,11 @@
"sun",
"glasses",
"sunny",
- "cool",
- "smooth"
+ "smooth",
+ "silly",
+ "smiley",
+ "emojione",
+ "boys night"
],
"moji": "😎"
},
@@ -25937,15 +29142,21 @@
"aliases_ascii": [],
"keywords": [
"brightness",
- "weather"
- ]
+ "weather",
+ "sky",
+ "day",
+ "sun",
+ "hot",
+ "morning"
+ ],
+ "moji": "☀"
},
"sunrise": {
"unicode": "1F305",
"unicode_alternates": [],
"name": "sunrise",
"shortname": ":sunrise:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25955,9 +29166,13 @@
"view",
"sunrise",
"sun",
- "morning",
"color",
- "sky"
+ "sky",
+ "places",
+ "travel",
+ "tropical",
+ "day",
+ "hump day"
],
"moji": "🌅"
},
@@ -25966,7 +29181,7 @@
"unicode_alternates": [],
"name": "sunrise over mountains",
"shortname": ":sunrise_over_mountains:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25979,7 +29194,11 @@
"mountain",
"rural",
"color",
- "sky"
+ "sky",
+ "places",
+ "travel",
+ "day",
+ "camp"
],
"moji": "🌄"
},
@@ -25988,7 +29207,7 @@
"unicode_alternates": [],
"name": "surfer",
"shortname": ":surfer:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -25998,15 +29217,19 @@
"surfer",
"surf",
"wave",
- "ocean",
"ride",
- "swell"
+ "swell",
+ "men",
+ "vacation",
+ "tropical",
+ "sport",
+ "diversity"
],
"moji": "🏄"
},
"surfer_tone1": {
"unicode": "1F3C4-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "surfer tone 1",
"shortname": ":surfer_tone1:",
"category": "activity",
@@ -26018,14 +29241,14 @@
"sport",
"surf",
"wave",
- "ocean",
"ride",
"swell"
- ]
+ ],
+ "moji": "🏄🏻"
},
"surfer_tone2": {
"unicode": "1F3C4-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "surfer tone 2",
"shortname": ":surfer_tone2:",
"category": "activity",
@@ -26037,14 +29260,14 @@
"sport",
"surf",
"wave",
- "ocean",
"ride",
"swell"
- ]
+ ],
+ "moji": "🏄🏼"
},
"surfer_tone3": {
"unicode": "1F3C4-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "surfer tone 3",
"shortname": ":surfer_tone3:",
"category": "activity",
@@ -26056,14 +29279,14 @@
"sport",
"surf",
"wave",
- "ocean",
"ride",
"swell"
- ]
+ ],
+ "moji": "🏄🏽"
},
"surfer_tone4": {
"unicode": "1F3C4-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "surfer tone 4",
"shortname": ":surfer_tone4:",
"category": "activity",
@@ -26075,14 +29298,14 @@
"sport",
"surf",
"wave",
- "ocean",
"ride",
"swell"
- ]
+ ],
+ "moji": "🏄🏾"
},
"surfer_tone5": {
"unicode": "1F3C4-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "surfer tone 5",
"shortname": ":surfer_tone5:",
"category": "activity",
@@ -26094,17 +29317,17 @@
"sport",
"surf",
"wave",
- "ocean",
"ride",
"swell"
- ]
+ ],
+ "moji": "🏄🏿"
},
"sushi": {
"unicode": "1F363",
"unicode_alternates": [],
"name": "sushi",
"shortname": ":sushi:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26114,7 +29337,7 @@
"fish",
"raw",
"nigiri",
- "japanese"
+ "japan"
],
"moji": "🍣"
},
@@ -26123,7 +29346,7 @@
"unicode_alternates": [],
"name": "suspension railway",
"shortname": ":suspension_railway:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26133,7 +29356,7 @@
"railway",
"rail",
"train",
- "transportation"
+ "travel"
],
"moji": "🚟"
},
@@ -26142,7 +29365,7 @@
"unicode_alternates": [],
"name": "face with cold sweat",
"shortname": ":sweat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"':(",
@@ -26158,7 +29381,11 @@
"clammy",
"diaphoresis",
"face",
- "hot"
+ "hot",
+ "sad",
+ "smiley",
+ "stressed",
+ "emotion"
],
"moji": "😓"
},
@@ -26167,11 +29394,14 @@
"unicode_alternates": [],
"name": "splashing sweat symbol",
"shortname": ":sweat_drops:",
- "category": "emoticons",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "water"
+ "water",
+ "rain",
+ "stressed",
+ "sweat"
],
"moji": "💦"
},
@@ -26180,7 +29410,7 @@
"unicode_alternates": [],
"name": "smiling face with open mouth and cold sweat",
"shortname": ":sweat_smile:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
"':)",
@@ -26197,7 +29427,10 @@
"smiling",
"cold",
"sweat",
- "perspiration"
+ "perspiration",
+ "smiley",
+ "workout",
+ "emotion"
],
"moji": "😅"
},
@@ -26206,7 +29439,7 @@
"unicode_alternates": [],
"name": "roasted sweet potato",
"shortname": ":sweet_potato:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26216,7 +29449,8 @@
"potato",
"potassium",
"roasted",
- "roast"
+ "roast",
+ "vegetables"
],
"moji": "🍠"
},
@@ -26225,7 +29459,7 @@
"unicode_alternates": [],
"name": "swimmer",
"shortname": ":swimmer:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26238,13 +29472,16 @@
"freestyle",
"butterfly",
"breaststroke",
- "backstroke"
+ "backstroke",
+ "workout",
+ "sport",
+ "diversity"
],
"moji": "🏊"
},
"swimmer_tone1": {
"unicode": "1F3CA-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "swimmer tone 1",
"shortname": ":swimmer_tone1:",
"category": "activity",
@@ -26260,11 +29497,12 @@
"butterfly",
"breaststroke",
"backstroke"
- ]
+ ],
+ "moji": "🏊🏻"
},
"swimmer_tone2": {
"unicode": "1F3CA-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "swimmer tone 2",
"shortname": ":swimmer_tone2:",
"category": "activity",
@@ -26280,11 +29518,12 @@
"butterfly",
"breaststroke",
"backstroke"
- ]
+ ],
+ "moji": "🏊🏼"
},
"swimmer_tone3": {
"unicode": "1F3CA-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "swimmer tone 3",
"shortname": ":swimmer_tone3:",
"category": "activity",
@@ -26300,11 +29539,12 @@
"butterfly",
"breaststroke",
"backstroke"
- ]
+ ],
+ "moji": "🏊🏽"
},
"swimmer_tone4": {
"unicode": "1F3CA-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "swimmer tone 4",
"shortname": ":swimmer_tone4:",
"category": "activity",
@@ -26320,11 +29560,12 @@
"butterfly",
"breaststroke",
"backstroke"
- ]
+ ],
+ "moji": "🏊🏾"
},
"swimmer_tone5": {
"unicode": "1F3CA-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "swimmer tone 5",
"shortname": ":swimmer_tone5:",
"category": "activity",
@@ -26340,30 +29581,40 @@
"butterfly",
"breaststroke",
"backstroke"
- ]
+ ],
+ "moji": "🏊🏿"
},
"symbols": {
"unicode": "1F523",
"unicode_alternates": [],
"name": "input symbol for symbols",
"shortname": ":symbols:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "🔣"
},
"synagogue": {
"unicode": "1F54D",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "synagogue",
"shortname": ":synagogue:",
"category": "travel",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "places",
+ "religion",
+ "building",
+ "travel",
+ "vacation",
+ "condolence"
+ ],
+ "moji": "🕍"
},
"syringe": {
"unicode": "1F489",
@@ -26379,19 +29630,26 @@
"health",
"hospital",
"medicine",
- "needle"
+ "needle",
+ "object",
+ "weapon"
],
"moji": "💉"
},
"taco": {
"unicode": "1F32E",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "taco",
"shortname": ":taco:",
- "category": "foods",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "food",
+ "mexican",
+ "vagina"
+ ],
+ "moji": "🌮"
},
"tada": {
"unicode": "1F389",
@@ -26404,14 +29662,21 @@
"keywords": [
"contulations",
"party",
- "party",
"popper",
"tada",
"celebration",
"victory",
"announcement",
"climax",
- "congratulations"
+ "congratulations",
+ "object",
+ "birthday",
+ "holidays",
+ "cheers",
+ "good",
+ "girls night",
+ "boys night",
+ "parties"
],
"moji": "🎉"
},
@@ -26420,7 +29685,7 @@
"unicode_alternates": [],
"name": "tanabata tree",
"shortname": ":tanabata_tree:",
- "category": "objects",
+ "category": "nature",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26431,7 +29696,8 @@
"festival",
"star",
"wish",
- "holiday"
+ "holiday",
+ "trees"
],
"moji": "🎋"
},
@@ -26440,7 +29706,7 @@
"unicode_alternates": [],
"name": "tangerine",
"shortname": ":tangerine:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26460,7 +29726,7 @@
],
"name": "taurus",
"shortname": ":taurus:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26473,9 +29739,8 @@
"constellation",
"stars",
"zodiac",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♉"
},
@@ -26484,7 +29749,7 @@
"unicode_alternates": [],
"name": "taxi",
"shortname": ":taxi:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26497,7 +29762,8 @@
"automobile",
"city",
"transport",
- "service"
+ "service",
+ "travel"
],
"moji": "🚕"
},
@@ -26506,7 +29772,7 @@
"unicode_alternates": [],
"name": "teacup without handle",
"shortname": ":tea:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26517,10 +29783,13 @@
"green",
"tea",
"leaf",
- "drink",
"teacup",
"hot",
- "beverage"
+ "beverage",
+ "japan",
+ "caffeine",
+ "steam",
+ "morning"
],
"moji": "🍵"
},
@@ -26537,26 +29806,12 @@
"keywords": [
"communication",
"dial",
- "technology"
+ "technology",
+ "electronics",
+ "phone"
],
"moji": "☎"
},
- "telephone_black": {
- "unicode": "1F57F",
- "unicode_alternates": [],
- "name": "black touchtone telephone",
- "shortname": ":telephone_black:",
- "category": "objects_symbols",
- "aliases": [
- ":black_touchtone_telephone:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "dial",
- "technology"
- ]
- },
"telephone_receiver": {
"unicode": "1F4DE",
"unicode_alternates": [],
@@ -26568,26 +29823,12 @@
"keywords": [
"communication",
"dial",
- "technology"
+ "technology",
+ "electronics",
+ "phone"
],
"moji": "📞"
},
- "telephone_white": {
- "unicode": "1F57E",
- "unicode_alternates": [],
- "name": "white touchtone telephone",
- "shortname": ":telephone_white:",
- "category": "objects_symbols",
- "aliases": [
- ":white_touchtone_telephone:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "communication",
- "dial",
- "technology"
- ]
- },
"telescope": {
"unicode": "1F52D",
"unicode_alternates": [],
@@ -26598,13 +29839,15 @@
"aliases_ascii": [],
"keywords": [
"space",
- "stars"
+ "stars",
+ "object",
+ "science"
],
"moji": "🔭"
},
"ten": {
"unicode": "1F51F",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "keycap ten",
"shortname": ":ten:",
"category": "symbols",
@@ -26615,15 +29858,18 @@
"blue-square",
"numbers",
"symbol",
- "word"
- ]
+ "word",
+ "number",
+ "math"
+ ],
+ "moji": "🔟"
},
"tennis": {
"unicode": "1F3BE",
"unicode_alternates": [],
"name": "tennis racquet and ball",
"shortname": ":tennis:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26637,7 +29883,8 @@
"game",
"net",
"court",
- "love"
+ "love",
+ "sport"
],
"moji": "🎾"
},
@@ -26648,13 +29895,16 @@
],
"name": "tent",
"shortname": ":tent:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"camp",
"outdoors",
- "photo"
+ "photo",
+ "places",
+ "travel",
+ "vacation"
],
"moji": "⛺"
},
@@ -26663,16 +29913,21 @@
"unicode_alternates": [],
"name": "thermometer",
"shortname": ":thermometer:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "temperature"
- ]
+ "temperature",
+ "object",
+ "science",
+ "health",
+ "hot"
+ ],
+ "moji": "🌡"
},
"thermometer_face": {
"unicode": "1F912",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "face with thermometer",
"shortname": ":thermometer_face:",
"category": "people",
@@ -26680,11 +29935,17 @@
":face_with_thermometer:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "smiley",
+ "health",
+ "sick",
+ "emotion"
+ ],
+ "moji": "🤒"
},
"thinking": {
"unicode": "1F914",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thinking face",
"shortname": ":thinking:",
"category": "people",
@@ -26692,14 +29953,32 @@
":thinking_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "smiley",
+ "thinking",
+ "boys night"
+ ],
+ "moji": "🤔"
+ },
+ "third_place": {
+ "unicode": "1F949",
+ "unicode_alternates": [],
+ "name": "third place medal",
+ "shortname": ":third_place:",
+ "category": "activity",
+ "aliases": [
+ ":third_place_medal:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥉"
},
"thought_balloon": {
"unicode": "1F4AD",
"unicode_alternates": [],
"name": "thought balloon",
"shortname": ":thought_balloon:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -26711,98 +29990,30 @@
"comic",
"think",
"day dream",
- "wonder"
+ "wonder",
+ "symbol"
],
"moji": "💭"
},
- "thought_left": {
- "unicode": "1F5EC",
- "unicode_alternates": [],
- "name": "left thought bubble",
- "shortname": ":thought_left:",
- "category": "objects_symbols",
- "aliases": [
- ":left_thought_bubble:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "balloon",
- "cloud",
- "comic",
- "think",
- "day dream",
- "wonder"
- ]
- },
- "thought_right": {
- "unicode": "1F5ED",
- "unicode_alternates": [],
- "name": "right thought bubble",
- "shortname": ":thought_right:",
- "category": "objects_symbols",
- "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"
],
- "name": "digit three",
+ "name": "keycap digit three",
"shortname": ":three:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"3",
"blue-square",
"numbers",
- "prime"
- ]
- },
- "thumbs_down_reverse": {
- "unicode": "1F593",
- "unicode_alternates": [],
- "name": "reversed thumbs down sign",
- "shortname": ":thumbs_down_reverse:",
- "category": "people",
- "aliases": [
- ":reversed_thumbs_down_sign:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "hand",
- "no",
- "-1"
- ]
- },
- "thumbs_up_reverse": {
- "unicode": "1F592",
- "unicode_alternates": [],
- "name": "reversed thumbs up sign",
- "shortname": ":thumbs_up_reverse:",
- "category": "people",
- "aliases": [
- ":reversed_thumbs_up_sign:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "cool",
- "hand",
- "like",
- "yes",
- "+1"
+ "prime",
+ "number",
+ "math",
+ "symbol"
]
},
"thumbsdown": {
@@ -26810,20 +30021,23 @@
"unicode_alternates": [],
"name": "thumbs down sign",
"shortname": ":thumbsdown:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":-1:"
],
"aliases_ascii": [],
"keywords": [
"hand",
- "no"
+ "no",
+ "body",
+ "hands",
+ "diversity"
],
"moji": "👎"
},
"thumbsdown_tone1": {
"unicode": "1F44E-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs down sign tone 1",
"shortname": ":thumbsdown_tone1:",
"category": "people",
@@ -26835,11 +30049,12 @@
"hand",
"no",
"-1"
- ]
+ ],
+ "moji": "👎🏻"
},
"thumbsdown_tone2": {
"unicode": "1F44E-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs down sign tone 2",
"shortname": ":thumbsdown_tone2:",
"category": "people",
@@ -26851,11 +30066,12 @@
"hand",
"no",
"-1"
- ]
+ ],
+ "moji": "👎🏼"
},
"thumbsdown_tone3": {
"unicode": "1F44E-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs down sign tone 3",
"shortname": ":thumbsdown_tone3:",
"category": "people",
@@ -26867,11 +30083,12 @@
"hand",
"no",
"-1"
- ]
+ ],
+ "moji": "👎🏽"
},
"thumbsdown_tone4": {
"unicode": "1F44E-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs down sign tone 4",
"shortname": ":thumbsdown_tone4:",
"category": "people",
@@ -26883,11 +30100,12 @@
"hand",
"no",
"-1"
- ]
+ ],
+ "moji": "👎🏾"
},
"thumbsdown_tone5": {
"unicode": "1F44E-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs down sign tone 5",
"shortname": ":thumbsdown_tone5:",
"category": "people",
@@ -26899,14 +30117,15 @@
"hand",
"no",
"-1"
- ]
+ ],
+ "moji": "👎🏿"
},
"thumbsup": {
"unicode": "1F44D",
"unicode_alternates": [],
"name": "thumbs up sign",
"shortname": ":thumbsup:",
- "category": "emoticons",
+ "category": "people",
"aliases": [
":+1:"
],
@@ -26915,13 +30134,22 @@
"cool",
"hand",
"like",
- "yes"
+ "yes",
+ "body",
+ "hands",
+ "hi",
+ "luck",
+ "thank you",
+ "diversity",
+ "perfect",
+ "good",
+ "beautiful"
],
"moji": "👍"
},
"thumbsup_tone1": {
"unicode": "1F44D-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs up sign tone 1",
"shortname": ":thumbsup_tone1:",
"category": "people",
@@ -26935,11 +30163,12 @@
"like",
"yes",
"+1"
- ]
+ ],
+ "moji": "👍🏻"
},
"thumbsup_tone2": {
"unicode": "1F44D-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs up sign tone 2",
"shortname": ":thumbsup_tone2:",
"category": "people",
@@ -26953,11 +30182,12 @@
"like",
"yes",
"+1"
- ]
+ ],
+ "moji": "👍🏼"
},
"thumbsup_tone3": {
"unicode": "1F44D-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs up sign tone 3",
"shortname": ":thumbsup_tone3:",
"category": "people",
@@ -26971,11 +30201,12 @@
"like",
"yes",
"+1"
- ]
+ ],
+ "moji": "👍🏽"
},
"thumbsup_tone4": {
"unicode": "1F44D-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs up sign tone 4",
"shortname": ":thumbsup_tone4:",
"category": "people",
@@ -26989,11 +30220,12 @@
"like",
"yes",
"+1"
- ]
+ ],
+ "moji": "👍🏾"
},
"thumbsup_tone5": {
"unicode": "1F44D-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thumbs up sign tone 5",
"shortname": ":thumbsup_tone5:",
"category": "people",
@@ -27007,11 +30239,12 @@
"like",
"yes",
"+1"
- ]
+ ],
+ "moji": "👍🏿"
},
"thunder_cloud_rain": {
"unicode": "26C8",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "thunder cloud and rain",
"shortname": ":thunder_cloud_rain:",
"category": "nature",
@@ -27021,15 +30254,20 @@
"aliases_ascii": [],
"keywords": [
"nature",
- "weather"
- ]
+ "weather",
+ "sky",
+ "cloud",
+ "cold",
+ "rain"
+ ],
+ "moji": "⛈"
},
"ticket": {
"unicode": "1F3AB",
"unicode_alternates": [],
"name": "ticket",
"shortname": ":ticket:",
- "category": "places",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27042,7 +30280,10 @@
"stub",
"admission",
"proof",
- "purchase"
+ "purchase",
+ "theatre",
+ "movie",
+ "parties"
],
"moji": "🎫"
},
@@ -27064,8 +30305,12 @@
"entertainment",
"stub",
"proof",
- "purchase"
- ]
+ "purchase",
+ "theatre",
+ "movie",
+ "parties"
+ ],
+ "moji": "🎟"
},
"tiger": {
"unicode": "1F42F",
@@ -27076,7 +30321,10 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "animal"
+ "animal",
+ "wildlife",
+ "roar",
+ "cat"
],
"moji": "🐯"
},
@@ -27096,13 +30344,15 @@
"striped",
"tony",
"tigger",
- "hobs"
+ "hobs",
+ "wildlife",
+ "roar"
],
"moji": "🐅"
},
"timer": {
"unicode": "23F2",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "timer clock",
"shortname": ":timer:",
"category": "objects",
@@ -27113,14 +30363,15 @@
"keywords": [
"object",
"time"
- ]
+ ],
+ "moji": "⏲"
},
"tired_face": {
"unicode": "1F62B",
"unicode_alternates": [],
"name": "tired face",
"shortname": ":tired_face:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27131,13 +30382,18 @@
"whine",
"exhausted",
"sleepy",
- "tired"
+ "tired",
+ "sad",
+ "smiley",
+ "emotion"
],
"moji": "😫"
},
"tm": {
"unicode": "2122",
- "unicode_alternates": "2122-fe0f",
+ "unicode_alternates": [
+ "2122-FE0F"
+ ],
"name": "trade mark sign",
"shortname": ":tm:",
"category": "symbols",
@@ -27149,7 +30405,8 @@
"symbol",
"tm",
"word"
- ]
+ ],
+ "moji": "™"
},
"toilet": {
"unicode": "1F6BD",
@@ -27168,7 +30425,8 @@
"porcelain",
"waste",
"flush",
- "plumbing"
+ "plumbing",
+ "object"
],
"moji": "🚽"
},
@@ -27177,12 +30435,16 @@
"unicode_alternates": [],
"name": "tokyo tower",
"shortname": ":tokyo_tower:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"japan",
- "photo"
+ "photo",
+ "places",
+ "travel",
+ "vacation",
+ "eiffel tower"
],
"moji": "🗼"
},
@@ -27191,7 +30453,7 @@
"unicode_alternates": [],
"name": "tomato",
"shortname": ":tomato:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27200,80 +30462,83 @@
"nature",
"vegetable",
"tomato",
- "fruit",
"sauce",
- "italian"
+ "italian",
+ "vegetables"
],
"moji": "🍅"
},
"tone1": {
"unicode": "1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "emoji modifier Fitzpatrick type-1-2",
"shortname": ":tone1:",
"category": "modifier",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [],
+ "moji": "🏻"
},
"tone2": {
"unicode": "1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "emoji modifier Fitzpatrick type-3",
"shortname": ":tone2:",
"category": "modifier",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [],
+ "moji": "🏼"
},
"tone3": {
"unicode": "1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "emoji modifier Fitzpatrick type-4",
"shortname": ":tone3:",
"category": "modifier",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [],
+ "moji": "🏽"
},
"tone4": {
"unicode": "1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "emoji modifier Fitzpatrick type-5",
"shortname": ":tone4:",
"category": "modifier",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [],
+ "moji": "🏾"
},
"tone5": {
"unicode": "1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "emoji modifier Fitzpatrick type-6",
"shortname": ":tone5:",
"category": "modifier",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [],
+ "moji": "🏿"
},
"tongue": {
"unicode": "1F445",
"unicode_alternates": [],
"name": "tongue",
"shortname": ":tongue:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"mouth",
"playful",
"tongue",
- "mouth",
"taste",
"buds",
"food",
"silly",
- "playful",
"tease",
"kiss",
"french kiss",
@@ -27281,7 +30546,10 @@
"tasty",
"playfulness",
"silliness",
- "intimacy"
+ "intimacy",
+ "body",
+ "sexy",
+ "lip"
],
"moji": "👅"
},
@@ -27290,26 +30558,31 @@
"unicode_alternates": [],
"name": "hammer and wrench",
"shortname": ":tools:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [
":hammer_and_wrench:"
],
"aliases_ascii": [],
"keywords": [
- "tools"
- ]
+ "tools",
+ "object",
+ "tool"
+ ],
+ "moji": "🛠"
},
"top": {
"unicode": "1F51D",
"unicode_alternates": [],
"name": "top with upwards arrow above",
"shortname": ":top:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "words"
+ "words",
+ "arrow",
+ "symbol"
],
"moji": "🔝"
},
@@ -27318,7 +30591,7 @@
"unicode_alternates": [],
"name": "top hat",
"shortname": ":tophat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27337,14 +30610,15 @@
"topper",
"london",
"period piece",
- "magic",
- "magician"
+ "magician",
+ "fashion",
+ "accessories"
],
"moji": "🎩"
},
"track_next": {
"unicode": "23ED",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "black right-pointing double triangle with vertical bar",
"shortname": ":track_next:",
"category": "symbols",
@@ -27358,11 +30632,12 @@
"next track",
"sound",
"symbol"
- ]
+ ],
+ "moji": "⏭"
},
"track_previous": {
"unicode": "23EE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "black left-pointing double triangle with vertical bar",
"shortname": ":track_previous:",
"category": "symbols",
@@ -27376,28 +30651,34 @@
"previous track",
"sound",
"symbol"
- ]
+ ],
+ "moji": "⏮"
},
"trackball": {
"unicode": "1F5B2",
"unicode_alternates": [],
"name": "trackball",
"shortname": ":trackball:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"input",
"device",
- "gadget"
- ]
+ "gadget",
+ "electronics",
+ "work",
+ "game",
+ "office"
+ ],
+ "moji": "🖲"
},
"tractor": {
"unicode": "1F69C",
"unicode_alternates": [],
"name": "tractor",
"shortname": ":tractor:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27409,7 +30690,8 @@
"farm",
"construction",
"machine",
- "digger"
+ "digger",
+ "transportation"
],
"moji": "🚜"
},
@@ -27418,18 +30700,19 @@
"unicode_alternates": [],
"name": "horizontal traffic light",
"shortname": ":traffic_light:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"traffic",
"transportation",
- "traffic",
"light",
"stop",
"go",
"yield",
- "horizontal"
+ "horizontal",
+ "object",
+ "stop light"
],
"moji": "🚥"
},
@@ -27438,20 +30721,24 @@
"unicode_alternates": [],
"name": "Tram Car",
"shortname": ":train:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"tram",
- "rail"
- ]
+ "rail",
+ "transportation",
+ "travel",
+ "train"
+ ],
+ "moji": "🚋"
},
"train2": {
"unicode": "1F686",
"unicode_alternates": [],
"name": "train",
"shortname": ":train2:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27459,66 +30746,35 @@
"vehicle",
"train",
"locomotive",
- "rail"
+ "rail",
+ "travel"
],
"moji": "🚆"
},
- "train_diesel": {
- "unicode": "1F6F2",
- "unicode_alternates": [],
- "name": "diesel locomotive",
- "shortname": ":train_diesel:",
- "category": "travel_places",
- "aliases": [
- ":diesel_locomotive:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "train",
- "transportation",
- "engine",
- "rail"
- ]
- },
"tram": {
"unicode": "1F68A",
"unicode_alternates": [],
"name": "tram",
"shortname": ":tram:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"transportation",
"vehicle",
"tram",
- "transportation",
- "transport"
+ "transport",
+ "travel",
+ "train"
],
"moji": "🚊"
},
- "triangle_round": {
- "unicode": "1F6C6",
- "unicode_alternates": [],
- "name": "triangle with rounded corners",
- "shortname": ":triangle_round:",
- "category": "objects_symbols",
- "aliases": [
- ":triangle_with_rounded_corners:"
- ],
- "aliases_ascii": [],
- "keywords": [
- "caution",
- "warning",
- "alert"
- ]
- },
"triangular_flag_on_post": {
"unicode": "1F6A9",
"unicode_alternates": [],
"name": "triangular flag on post",
"shortname": ":triangular_flag_on_post:",
- "category": "places",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27527,7 +30783,8 @@
"flag",
"golf",
"post",
- "flagpole"
+ "flagpole",
+ "object"
],
"moji": "🚩"
},
@@ -27543,7 +30800,10 @@
"architect",
"math",
"sketch",
- "stationery"
+ "stationery",
+ "object",
+ "tool",
+ "office"
],
"moji": "📐"
},
@@ -27552,12 +30812,14 @@
"unicode_alternates": [],
"name": "trident emblem",
"shortname": ":trident:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"spear",
- "weapon"
+ "weapon",
+ "object",
+ "symbol"
],
"moji": "🔱"
},
@@ -27566,7 +30828,7 @@
"unicode_alternates": [],
"name": "face with look of triumph",
"shortname": ":triumph:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27575,7 +30837,11 @@
"phew",
"triumph",
"steam",
- "breath"
+ "breath",
+ "mad",
+ "smiley",
+ "angry",
+ "emotion"
],
"moji": "😤"
},
@@ -27584,7 +30850,7 @@
"unicode_alternates": [],
"name": "trolleybus",
"shortname": ":trolleybus:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27595,7 +30861,7 @@
"bus",
"city",
"transport",
- "transportation"
+ "travel"
],
"moji": "🚎"
},
@@ -27604,7 +30870,7 @@
"unicode_alternates": [],
"name": "trophy",
"shortname": ":trophy:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27617,11 +30883,13 @@
"trophy",
"first",
"show",
- "place",
- "win",
"reward",
"achievement",
- "medal"
+ "medal",
+ "object",
+ "game",
+ "perfect",
+ "parties"
],
"moji": "🏆"
},
@@ -27630,7 +30898,7 @@
"unicode_alternates": [],
"name": "tropical drink",
"shortname": ":tropical_drink:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27642,7 +30910,9 @@
"coconut",
"pina",
"fruit",
- "umbrella"
+ "umbrella",
+ "cocktail",
+ "alcohol"
],
"moji": "🍹"
},
@@ -27656,7 +30926,8 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "swim"
+ "swim",
+ "wildlife"
],
"moji": "🐠"
},
@@ -27665,7 +30936,7 @@
"unicode_alternates": [],
"name": "delivery truck",
"shortname": ":truck:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27682,16 +30953,15 @@
"unicode_alternates": [],
"name": "trumpet",
"shortname": ":trumpet:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"brass",
"music",
"trumpet",
- "brass",
- "music",
- "instrument"
+ "instrument",
+ "instruments"
],
"moji": "🎺"
},
@@ -27711,34 +30981,40 @@
"flower",
"bulb",
"spring",
- "easter"
+ "easter",
+ "vagina",
+ "girls night"
],
"moji": "🌷"
},
+ "tumbler_glass": {
+ "unicode": "1F943",
+ "unicode_alternates": [],
+ "name": "tumbler glass",
+ "shortname": ":tumbler_glass:",
+ "category": "food",
+ "aliases": [
+ ":whisky:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [
+ "booze"
+ ],
+ "moji": "🥃"
+ },
"turkey": {
"unicode": "1F983",
- "unicode_alternates": "",
+ "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_ascii": [],
"keywords": [
- "perfect",
- "okay"
- ]
+ "wildlife",
+ "animal"
+ ],
+ "moji": "🦃"
},
"turtle": {
"unicode": "1F422",
@@ -27756,15 +31032,15 @@
"tortoise",
"chelonian",
"reptile",
- "slow",
"snap",
- "steady"
+ "steady",
+ "wildlife"
],
"moji": "🐢"
},
"tv": {
"unicode": "1F4FA",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "television",
"shortname": ":tv:",
"category": "objects",
@@ -27778,19 +31054,23 @@
"tv",
"entertainment",
"object",
- "video"
- ]
+ "video",
+ "electronics"
+ ],
+ "moji": "📺"
},
"twisted_rightwards_arrows": {
"unicode": "1F500",
"unicode_alternates": [],
"name": "twisted rightwards arrows",
"shortname": ":twisted_rightwards_arrows:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "arrow",
+ "symbol"
],
"moji": "🔀"
},
@@ -27800,16 +31080,19 @@
"unicode_alternates": [
"0032-FE0F-20E3"
],
- "name": "digit two",
+ "name": "keycap digit two",
"shortname": ":two:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"2",
"blue-square",
"numbers",
- "prime"
+ "prime",
+ "number",
+ "math",
+ "symbol"
]
},
"two_hearts": {
@@ -27817,7 +31100,7 @@
"unicode_alternates": [],
"name": "two hearts",
"shortname": ":two_hearts:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27828,8 +31111,8 @@
"heart",
"hearts",
"two",
- "love",
- "emotion"
+ "emotion",
+ "symbol"
],
"moji": "💕"
},
@@ -27838,7 +31121,7 @@
"unicode_alternates": [],
"name": "two men holding hands",
"shortname": ":two_men_holding_hands:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27850,11 +31133,13 @@
"men",
"gay",
"homosexual",
- "friends",
"hands",
"holding",
"team",
- "unity"
+ "unity",
+ "people",
+ "sex",
+ "lgbt"
],
"moji": "👬"
},
@@ -27863,7 +31148,7 @@
"unicode_alternates": [],
"name": "two women holding hands",
"shortname": ":two_women_holding_hands:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27875,14 +31160,17 @@
"women",
"hands",
"girlfriends",
- "friends",
"sisters",
"mother",
"daughter",
"gay",
"homosexual",
- "couple",
- "unity"
+ "unity",
+ "people",
+ "sex",
+ "lgbt",
+ "lesbian",
+ "girls night"
],
"moji": "👭"
},
@@ -27891,7 +31179,7 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-5272",
"shortname": ":u5272:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27899,7 +31187,8 @@
"cut",
"divide",
"kanji",
- "pink"
+ "pink",
+ "symbol"
],
"moji": "🈹"
},
@@ -27908,14 +31197,16 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-5408",
"shortname": ":u5408:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"japanese",
"join",
- "kanji"
+ "kanji",
+ "japan",
+ "symbol"
],
"moji": "🈴"
},
@@ -27924,12 +31215,13 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-55b6",
"shortname": ":u55b6:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"japanese",
- "opening hours"
+ "opening hours",
+ "symbol"
],
"moji": "🈺"
},
@@ -27940,14 +31232,15 @@
],
"name": "squared cjk unified ideograph-6307",
"shortname": ":u6307:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"green-square",
"kanji",
- "point"
+ "point",
+ "symbol"
],
"moji": "🈯"
},
@@ -27956,7 +31249,7 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-6708",
"shortname": ":u6708:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27964,7 +31257,8 @@
"japanese",
"kanji",
"moon",
- "orange-square"
+ "orange-square",
+ "symbol"
],
"moji": "🈷"
},
@@ -27973,14 +31267,15 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-6709",
"shortname": ":u6709:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"have",
"kanji",
- "orange-square"
+ "orange-square",
+ "symbol"
],
"moji": "🈶"
},
@@ -27989,7 +31284,7 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-6e80",
"shortname": ":u6e80:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -27997,7 +31292,9 @@
"full",
"japanese",
"kanji",
- "red-square"
+ "red-square",
+ "japan",
+ "symbol"
],
"moji": "🈵"
},
@@ -28008,7 +31305,7 @@
],
"name": "squared cjk unified ideograph-7121",
"shortname": ":u7121:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28017,7 +31314,8 @@
"kanji",
"no",
"nothing",
- "orange-square"
+ "orange-square",
+ "symbol"
],
"moji": "🈚"
},
@@ -28026,13 +31324,14 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-7533",
"shortname": ":u7533:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"japanese",
- "kanji"
+ "kanji",
+ "symbol"
],
"moji": "🈸"
},
@@ -28041,7 +31340,7 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-7981",
"shortname": ":u7981:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28050,7 +31349,9 @@
"japanese",
"kanji",
"limit",
- "restricted"
+ "restricted",
+ "japan",
+ "symbol"
],
"moji": "🈲"
},
@@ -28059,14 +31360,15 @@
"unicode_alternates": [],
"name": "squared cjk unified ideograph-7a7a",
"shortname": ":u7a7a:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"chinese",
"empty",
"japanese",
- "kanji"
+ "kanji",
+ "symbol"
],
"moji": "🈳"
},
@@ -28082,13 +31384,15 @@
"aliases_ascii": [],
"keywords": [
"rain",
- "weather"
+ "weather",
+ "sky",
+ "cold"
],
"moji": "☔"
},
"umbrella2": {
"unicode": "2602",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "umbrella",
"shortname": ":umbrella2:",
"category": "nature",
@@ -28098,15 +31402,19 @@
"clothing",
"nature",
"rain",
- "weather"
- ]
+ "weather",
+ "object",
+ "sky",
+ "cold"
+ ],
+ "moji": "☂"
},
"unamused": {
"unicode": "1F612",
"unicode_alternates": [],
"name": "unamused face",
"shortname": ":unamused:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28120,7 +31428,12 @@
"depressed",
"unhappy",
"disapprove",
- "lame"
+ "lame",
+ "sad",
+ "mad",
+ "smiley",
+ "tired",
+ "emotion"
],
"moji": "😒"
},
@@ -28129,20 +31442,21 @@
"unicode_alternates": [],
"name": "no one under eighteen symbol",
"shortname": ":underage:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"18",
"drink",
"night",
- "pub"
+ "pub",
+ "symbol"
],
"moji": "🔞"
},
"unicorn": {
"unicode": "1F984",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "unicorn face",
"shortname": ":unicorn:",
"category": "nature",
@@ -28150,7 +31464,10 @@
":unicorn_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "animal"
+ ],
+ "moji": "🦄"
},
"unlock": {
"unicode": "1F513",
@@ -28162,7 +31479,9 @@
"aliases_ascii": [],
"keywords": [
"privacy",
- "security"
+ "security",
+ "object",
+ "lock"
],
"moji": "🔓"
},
@@ -28171,17 +31490,18 @@
"unicode_alternates": [],
"name": "squared up with exclamation mark",
"shortname": ":up:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "blue-square"
+ "blue-square",
+ "symbol"
],
"moji": "🆙"
},
"upside_down": {
"unicode": "1F643",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "upside-down face",
"shortname": ":upside_down:",
"category": "people",
@@ -28189,11 +31509,16 @@
":upside_down_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "silly",
+ "smiley",
+ "sarcastic"
+ ],
+ "moji": "🙃"
},
"urn": {
"unicode": "26B1",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "funeral urn",
"shortname": ":urn:",
"category": "objects",
@@ -28203,8 +31528,11 @@
"aliases_ascii": [],
"keywords": [
"death",
- "object"
- ]
+ "object",
+ "dead",
+ "rip"
+ ],
+ "moji": "⚱"
},
"v": {
"unicode": "270C",
@@ -28213,7 +31541,7 @@
],
"name": "victory hand",
"shortname": ":v:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28222,13 +31550,19 @@
"ohyeah",
"peace",
"two",
- "victory"
+ "victory",
+ "body",
+ "hands",
+ "hi",
+ "thank you",
+ "diversity",
+ "girls night"
],
"moji": "✌"
},
"v_tone1": {
"unicode": "270C-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "victory hand tone 1",
"shortname": ":v_tone1:",
"category": "people",
@@ -28240,11 +31574,12 @@
"peace",
"two",
"v"
- ]
+ ],
+ "moji": "✌🏻"
},
"v_tone2": {
"unicode": "270C-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "victory hand tone 2",
"shortname": ":v_tone2:",
"category": "people",
@@ -28256,11 +31591,12 @@
"peace",
"two",
"v"
- ]
+ ],
+ "moji": "✌🏼"
},
"v_tone3": {
"unicode": "270C-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "victory hand tone 3",
"shortname": ":v_tone3:",
"category": "people",
@@ -28272,11 +31608,12 @@
"peace",
"two",
"v"
- ]
+ ],
+ "moji": "✌🏽"
},
"v_tone4": {
"unicode": "270C-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "victory hand tone 4",
"shortname": ":v_tone4:",
"category": "people",
@@ -28288,11 +31625,12 @@
"peace",
"two",
"v"
- ]
+ ],
+ "moji": "✌🏾"
},
"v_tone5": {
"unicode": "270C-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "victory hand tone 5",
"shortname": ":v_tone5:",
"category": "people",
@@ -28304,14 +31642,15 @@
"peace",
"two",
"v"
- ]
+ ],
+ "moji": "✌🏿"
},
"vertical_traffic_light": {
"unicode": "1F6A6",
"unicode_alternates": [],
"name": "vertical traffic light",
"shortname": ":vertical_traffic_light:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28321,7 +31660,9 @@
"stop",
"go",
"yield",
- "vertical"
+ "vertical",
+ "object",
+ "stop light"
],
"moji": "🚦"
},
@@ -28336,7 +31677,8 @@
"keywords": [
"oldschool",
"record",
- "video"
+ "video",
+ "electronics"
],
"moji": "📼"
},
@@ -28345,12 +31687,13 @@
"unicode_alternates": [],
"name": "vibration mode",
"shortname": ":vibration_mode:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"orange-square",
- "phone"
+ "phone",
+ "symbol"
],
"moji": "📳"
},
@@ -28364,7 +31707,10 @@
"aliases_ascii": [],
"keywords": [
"film",
- "record"
+ "record",
+ "electronics",
+ "camera",
+ "movie"
],
"moji": "📹"
},
@@ -28373,7 +31719,7 @@
"unicode_alternates": [],
"name": "video game",
"shortname": ":video_game:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28383,11 +31729,11 @@
"play",
"video",
"game",
- "console",
- "controller",
"nintendo",
"xbox",
- "playstation"
+ "playstation",
+ "electronics",
+ "boys night"
],
"moji": "🎮"
},
@@ -28396,7 +31742,7 @@
"unicode_alternates": [],
"name": "violin",
"shortname": ":violin:",
- "category": "objects",
+ "category": "activity",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28404,8 +31750,8 @@
"music",
"violin",
"fiddle",
- "music",
- "instrument"
+ "instruments",
+ "sarcastic"
],
"moji": "🎻"
},
@@ -28416,7 +31762,7 @@
],
"name": "virgo",
"shortname": ":virgo:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28428,9 +31774,8 @@
"constellation",
"stars",
"zodiac",
- "sign",
- "zodiac",
- "horoscope"
+ "horoscope",
+ "symbol"
],
"moji": "♍"
},
@@ -28439,7 +31784,7 @@
"unicode_alternates": [],
"name": "volcano",
"shortname": ":volcano:",
- "category": "nature",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28449,31 +31794,40 @@
"lava",
"magma",
"hot",
- "explode"
+ "explode",
+ "places",
+ "tropical"
],
"moji": "🌋"
},
"volleyball": {
"unicode": "1F3D0",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "volleyball",
"shortname": ":volleyball:",
"category": "activity",
"aliases": [],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "game",
+ "ball",
+ "sport",
+ "volleyball"
+ ],
+ "moji": "🏐"
},
"vs": {
"unicode": "1F19A",
"unicode_alternates": [],
"name": "squared vs",
"shortname": ":vs:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"orange-square",
- "words"
+ "words",
+ "symbol"
],
"moji": "🆚"
},
@@ -28493,12 +31847,17 @@
"leonard",
"nimoy",
"star trek",
- "live long"
- ]
+ "live long",
+ "body",
+ "hands",
+ "hi",
+ "diversity"
+ ],
+ "moji": "🖖"
},
"vulcan_tone1": {
"unicode": "1F596-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with part between middle and ring fingers tone 1",
"shortname": ":vulcan_tone1:",
"category": "people",
@@ -28513,11 +31872,12 @@
"nimoy",
"star trek",
"live long"
- ]
+ ],
+ "moji": "🖖🏻"
},
"vulcan_tone2": {
"unicode": "1F596-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with part between middle and ring fingers tone 2",
"shortname": ":vulcan_tone2:",
"category": "people",
@@ -28532,11 +31892,12 @@
"nimoy",
"star trek",
"live long"
- ]
+ ],
+ "moji": "🖖🏼"
},
"vulcan_tone3": {
"unicode": "1F596-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with part between middle and ring fingers tone 3",
"shortname": ":vulcan_tone3:",
"category": "people",
@@ -28551,11 +31912,12 @@
"nimoy",
"star trek",
"live long"
- ]
+ ],
+ "moji": "🖖🏽"
},
"vulcan_tone4": {
"unicode": "1F596-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with part between middle and ring fingers tone 4",
"shortname": ":vulcan_tone4:",
"category": "people",
@@ -28570,11 +31932,12 @@
"nimoy",
"star trek",
"live long"
- ]
+ ],
+ "moji": "🖖🏾"
},
"vulcan_tone5": {
"unicode": "1F596-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "raised hand with part between middle and ring fingers tone 5",
"shortname": ":vulcan_tone5:",
"category": "people",
@@ -28589,14 +31952,15 @@
"nimoy",
"star trek",
"live long"
- ]
+ ],
+ "moji": "🖖🏿"
},
"walking": {
"unicode": "1F6B6",
"unicode_alternates": [],
"name": "pedestrian",
"shortname": ":walking:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28607,13 +31971,16 @@
"stroll",
"stride",
"foot",
- "feet"
+ "feet",
+ "people",
+ "men",
+ "diversity"
],
"moji": "🚶"
},
"walking_tone1": {
"unicode": "1F6B6-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pedestrian tone 1",
"shortname": ":walking_tone1:",
"category": "people",
@@ -28626,11 +31993,12 @@
"stride",
"hiking",
"hike"
- ]
+ ],
+ "moji": "🚶🏻"
},
"walking_tone2": {
"unicode": "1F6B6-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pedestrian tone 2",
"shortname": ":walking_tone2:",
"category": "people",
@@ -28643,11 +32011,12 @@
"stride",
"hiking",
"hike"
- ]
+ ],
+ "moji": "🚶🏼"
},
"walking_tone3": {
"unicode": "1F6B6-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pedestrian tone 3",
"shortname": ":walking_tone3:",
"category": "people",
@@ -28660,11 +32029,12 @@
"stride",
"hiking",
"hike"
- ]
+ ],
+ "moji": "🚶🏽"
},
"walking_tone4": {
"unicode": "1F6B6-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pedestrian tone 4",
"shortname": ":walking_tone4:",
"category": "people",
@@ -28677,11 +32047,12 @@
"stride",
"hiking",
"hike"
- ]
+ ],
+ "moji": "🚶🏾"
},
"walking_tone5": {
"unicode": "1F6B6-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "pedestrian tone 5",
"shortname": ":walking_tone5:",
"category": "people",
@@ -28694,7 +32065,8 @@
"stride",
"hiking",
"hike"
- ]
+ ],
+ "moji": "🚶🏿"
},
"waning_crescent_moon": {
"unicode": "1F318",
@@ -28712,7 +32084,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌘"
},
@@ -28732,7 +32105,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌖"
},
@@ -28743,12 +32117,14 @@
],
"name": "warning sign",
"shortname": ":warning:",
- "category": "places",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"exclamation",
- "wip"
+ "wip",
+ "symbol",
+ "punctuation"
],
"moji": "⚠"
},
@@ -28757,14 +32133,17 @@
"unicode_alternates": [],
"name": "wastebasket",
"shortname": ":wastebasket:",
- "category": "objects_symbols",
+ "category": "objects",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"trash",
"garbage",
- "dispose"
- ]
+ "dispose",
+ "object",
+ "work"
+ ],
+ "moji": "🗑"
},
"watch": {
"unicode": "231A",
@@ -28778,7 +32157,8 @@
"aliases_ascii": [],
"keywords": [
"accessories",
- "time"
+ "time",
+ "electronics"
],
"moji": "⌚"
},
@@ -28800,16 +32180,83 @@
"asia",
"bovine",
"milk",
- "dairy"
+ "dairy",
+ "wildlife"
],
"moji": "🐃"
},
+ "water_polo": {
+ "unicode": "1F93D",
+ "unicode_alternates": [],
+ "name": "water polo",
+ "shortname": ":water_polo:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤽"
+ },
+ "water_polo_tone1": {
+ "unicode": "1F93D-1F3FB",
+ "unicode_alternates": [],
+ "name": "water polo tone 1",
+ "shortname": ":water_polo_tone1:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤽🏻"
+ },
+ "water_polo_tone2": {
+ "unicode": "1F93D-1F3FC",
+ "unicode_alternates": [],
+ "name": "water polo tone 2",
+ "shortname": ":water_polo_tone2:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤽🏼"
+ },
+ "water_polo_tone3": {
+ "unicode": "1F93D-1F3FD",
+ "unicode_alternates": [],
+ "name": "water polo tone 3",
+ "shortname": ":water_polo_tone3:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤽🏽"
+ },
+ "water_polo_tone4": {
+ "unicode": "1F93D-1F3FE",
+ "unicode_alternates": [],
+ "name": "water polo tone 4",
+ "shortname": ":water_polo_tone4:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤽🏾"
+ },
+ "water_polo_tone5": {
+ "unicode": "1F93D-1F3FF",
+ "unicode_alternates": [],
+ "name": "water polo tone 5",
+ "shortname": ":water_polo_tone5:",
+ "category": "activity",
+ "aliases": [],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤽🏿"
+ },
"watermelon": {
"unicode": "1F349",
"unicode_alternates": [],
"name": "watermelon",
"shortname": ":watermelon:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28818,7 +32265,6 @@
"melon",
"watermelon",
"summer",
- "fruit",
"large"
],
"moji": "🍉"
@@ -28828,7 +32274,7 @@
"unicode_alternates": [],
"name": "waving hand sign",
"shortname": ":wave:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28836,13 +32282,16 @@
"gesture",
"goodbye",
"hands",
- "solong"
+ "solong",
+ "body",
+ "hi",
+ "diversity"
],
"moji": "👋"
},
"wave_tone1": {
"unicode": "1F44B-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "waving hand sign tone 1",
"shortname": ":wave_tone1:",
"category": "people",
@@ -28855,11 +32304,12 @@
"solong",
"hi",
"wave"
- ]
+ ],
+ "moji": "👋🏻"
},
"wave_tone2": {
"unicode": "1F44B-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "waving hand sign tone 2",
"shortname": ":wave_tone2:",
"category": "people",
@@ -28872,11 +32322,12 @@
"solong",
"hi",
"wave"
- ]
+ ],
+ "moji": "👋🏼"
},
"wave_tone3": {
"unicode": "1F44B-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "waving hand sign tone 3",
"shortname": ":wave_tone3:",
"category": "people",
@@ -28889,11 +32340,12 @@
"solong",
"hi",
"wave"
- ]
+ ],
+ "moji": "👋🏽"
},
"wave_tone4": {
"unicode": "1F44B-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "waving hand sign tone 4",
"shortname": ":wave_tone4:",
"category": "people",
@@ -28906,11 +32358,12 @@
"solong",
"hi",
"wave"
- ]
+ ],
+ "moji": "👋🏾"
},
"wave_tone5": {
"unicode": "1F44B-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "waving hand sign tone 5",
"shortname": ":wave_tone5:",
"category": "people",
@@ -28923,19 +32376,21 @@
"solong",
"hi",
"wave"
- ]
+ ],
+ "moji": "👋🏿"
},
"wavy_dash": {
"unicode": "3030",
"unicode_alternates": [],
"name": "wavy dash",
"shortname": ":wavy_dash:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"draw",
- "line"
+ "line",
+ "symbol"
],
"moji": "〰"
},
@@ -28954,7 +32409,8 @@
"sky",
"night",
"cheese",
- "phase"
+ "phase",
+ "space"
],
"moji": "🌒"
},
@@ -28967,7 +32423,10 @@
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "nature"
+ "nature",
+ "space",
+ "sky",
+ "moon"
],
"moji": "🌔"
},
@@ -28976,7 +32435,7 @@
"unicode_alternates": [],
"name": "water closet",
"shortname": ":wc:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -28985,13 +32444,13 @@
"toilet",
"water",
"closet",
- "toilet",
"bathroom",
"throne",
"porcelain",
"waste",
"flush",
- "plumbing"
+ "plumbing",
+ "symbol"
],
"moji": "🚾"
},
@@ -29000,7 +32459,7 @@
"unicode_alternates": [],
"name": "weary face",
"shortname": ":weary:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29010,13 +32469,14 @@
"sleepy",
"tired",
"weary",
- "sleepy",
- "tired",
"tiredness",
"study",
"finals",
"school",
- "exhausted"
+ "exhausted",
+ "smiley",
+ "stressed",
+ "emotion"
],
"moji": "😩"
},
@@ -29025,7 +32485,7 @@
"unicode_alternates": [],
"name": "wedding",
"shortname": ":wedding:",
- "category": "places",
+ "category": "travel",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29035,7 +32495,11 @@
"groom",
"like",
"love",
- "marriage"
+ "marriage",
+ "places",
+ "wedding",
+ "building",
+ "parties"
],
"moji": "💒"
},
@@ -29051,7 +32515,10 @@
"animal",
"nature",
"ocean",
- "sea"
+ "sea",
+ "wildlife",
+ "tropical",
+ "whales"
],
"moji": "🐳"
},
@@ -29073,13 +32540,16 @@
"bloated",
"fat",
"large",
- "massive"
+ "massive",
+ "wildlife",
+ "tropical",
+ "whales"
],
"moji": "🐋"
},
"wheel_of_dharma": {
"unicode": "2638",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "wheel of dharma",
"shortname": ":wheel_of_dharma:",
"category": "symbols",
@@ -29089,7 +32559,8 @@
"buddhist",
"religion",
"symbol"
- ]
+ ],
+ "moji": "☸"
},
"wheelchair": {
"unicode": "267F",
@@ -29098,12 +32569,13 @@
],
"name": "wheelchair symbol",
"shortname": ":wheelchair:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
- "disabled"
+ "disabled",
+ "symbol"
],
"moji": "♿"
},
@@ -29112,13 +32584,14 @@
"unicode_alternates": [],
"name": "white heavy check mark",
"shortname": ":white_check_mark:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"agree",
"green-square",
- "ok"
+ "ok",
+ "symbol"
],
"moji": "✅"
},
@@ -29129,11 +32602,14 @@
],
"name": "medium white circle",
"shortname": ":white_circle:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "circle"
],
"moji": "⚪"
},
@@ -29142,7 +32618,7 @@
"unicode_alternates": [],
"name": "white flower",
"shortname": ":white_flower:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29158,7 +32634,8 @@
"homework",
"student",
"assignment",
- "praise"
+ "praise",
+ "symbol"
],
"moji": "💮"
},
@@ -29169,11 +32646,14 @@
],
"name": "white large square",
"shortname": ":white_large_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "⬜"
},
@@ -29184,11 +32664,14 @@
],
"name": "white medium small square",
"shortname": ":white_medium_small_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "◽"
},
@@ -29199,11 +32682,14 @@
],
"name": "white medium square",
"shortname": ":white_medium_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "◻"
},
@@ -29214,11 +32700,14 @@
],
"name": "white small square",
"shortname": ":white_small_square:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "▫"
},
@@ -29227,17 +32716,20 @@
"unicode_alternates": [],
"name": "white square button",
"shortname": ":white_square_button:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
- "shape"
+ "shape",
+ "shapes",
+ "symbol",
+ "square"
],
"moji": "🔳"
},
"white_sun_cloud": {
"unicode": "1F325",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white sun behind cloud",
"shortname": ":white_sun_cloud:",
"category": "nature",
@@ -29247,12 +32739,17 @@
"aliases_ascii": [],
"keywords": [
"nature",
- "weather"
- ]
+ "weather",
+ "sky",
+ "cloud",
+ "cold",
+ "sun"
+ ],
+ "moji": "🌥"
},
"white_sun_rain_cloud": {
"unicode": "1F326",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white sun behind cloud with rain",
"shortname": ":white_sun_rain_cloud:",
"category": "nature",
@@ -29262,12 +32759,18 @@
"aliases_ascii": [],
"keywords": [
"nature",
- "weather"
- ]
+ "weather",
+ "sky",
+ "cloud",
+ "cold",
+ "rain",
+ "sun"
+ ],
+ "moji": "🌦"
},
"white_sun_small_cloud": {
"unicode": "1F324",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "white sun with small cloud",
"shortname": ":white_sun_small_cloud:",
"category": "nature",
@@ -29277,8 +32780,25 @@
"aliases_ascii": [],
"keywords": [
"nature",
- "weather"
- ]
+ "weather",
+ "sky",
+ "cloud",
+ "sun"
+ ],
+ "moji": "🌤"
+ },
+ "wilted_rose": {
+ "unicode": "1F940",
+ "unicode_alternates": [],
+ "name": "wilted flower",
+ "shortname": ":wilted_rose:",
+ "category": "nature",
+ "aliases": [
+ ":wilted_flower:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🥀"
},
"wind_blowing_face": {
"unicode": "1F32C",
@@ -29290,8 +32810,11 @@
"aliases_ascii": [],
"keywords": [
"mother",
- "nature"
- ]
+ "nature",
+ "weather",
+ "cold"
+ ],
+ "moji": "🌬"
},
"wind_chime": {
"unicode": "1F390",
@@ -29314,7 +32837,9 @@
"soothing",
"protective",
"spiritual",
- "sound"
+ "sound",
+ "object",
+ "japan"
],
"moji": "🎐"
},
@@ -29323,7 +32848,7 @@
"unicode_alternates": [],
"name": "wine glass",
"shortname": ":wine_glass:",
- "category": "objects",
+ "category": "food",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29338,7 +32863,10 @@
"grapes",
"tasting",
"wine",
- "winery"
+ "winery",
+ "italian",
+ "girls night",
+ "parties"
],
"moji": "🍷"
},
@@ -29347,7 +32875,7 @@
"unicode_alternates": [],
"name": "winking face",
"shortname": ":wink:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [
";)",
@@ -29367,7 +32895,10 @@
"wink",
"winking",
"friendly",
- "joke"
+ "joke",
+ "silly",
+ "smiley",
+ "emotion"
],
"moji": "😉"
},
@@ -29381,7 +32912,9 @@
"aliases_ascii": [],
"keywords": [
"animal",
- "nature"
+ "nature",
+ "wildlife",
+ "roar"
],
"moji": "🐺"
},
@@ -29390,18 +32923,25 @@
"unicode_alternates": [],
"name": "woman",
"shortname": ":woman:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"female",
- "girls"
+ "girls",
+ "people",
+ "women",
+ "sex",
+ "diversity",
+ "feminist",
+ "selfie",
+ "girls night"
],
"moji": "👩"
},
"woman_tone1": {
"unicode": "1F469-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "woman tone 1",
"shortname": ":woman_tone1:",
"category": "people",
@@ -29411,11 +32951,12 @@
"female",
"girl",
"lady"
- ]
+ ],
+ "moji": "👩🏻"
},
"woman_tone2": {
"unicode": "1F469-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "woman tone 2",
"shortname": ":woman_tone2:",
"category": "people",
@@ -29425,11 +32966,12 @@
"female",
"girl",
"lady"
- ]
+ ],
+ "moji": "👩🏼"
},
"woman_tone3": {
"unicode": "1F469-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "woman tone 3",
"shortname": ":woman_tone3:",
"category": "people",
@@ -29439,11 +32981,12 @@
"female",
"girl",
"lady"
- ]
+ ],
+ "moji": "👩🏽"
},
"woman_tone4": {
"unicode": "1F469-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "woman tone 4",
"shortname": ":woman_tone4:",
"category": "people",
@@ -29453,11 +32996,12 @@
"female",
"girl",
"lady"
- ]
+ ],
+ "moji": "👩🏾"
},
"woman_tone5": {
"unicode": "1F469-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "woman tone 5",
"shortname": ":woman_tone5:",
"category": "people",
@@ -29467,14 +33011,15 @@
"female",
"girl",
"lady"
- ]
+ ],
+ "moji": "👩🏿"
},
"womans_clothes": {
"unicode": "1F45A",
"unicode_alternates": [],
"name": "womans clothes",
"shortname": ":womans_clothes:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29490,7 +33035,8 @@
"shopping",
"shop",
"dressing",
- "dressed"
+ "dressed",
+ "women"
],
"moji": "👚"
},
@@ -29499,13 +33045,14 @@
"unicode_alternates": [],
"name": "womans hat",
"shortname": ":womans_hat:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"accessories",
"fashion",
- "female"
+ "female",
+ "women"
],
"moji": "👒"
},
@@ -29514,7 +33061,7 @@
"unicode_alternates": [],
"name": "womens symbol",
"shortname": ":womens:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29525,7 +33072,8 @@
"sign",
"girl",
"female",
- "avatar"
+ "avatar",
+ "symbol"
],
"moji": "🚺"
},
@@ -29534,7 +33082,7 @@
"unicode_alternates": [],
"name": "worried face",
"shortname": ":worried:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29544,8 +33092,10 @@
"worried",
"anxious",
"distressed",
- "nervous",
- "tense"
+ "tense",
+ "sad",
+ "smiley",
+ "emotion"
],
"moji": "😟"
},
@@ -29560,30 +33110,111 @@
"keywords": [
"diy",
"ikea",
- "tools"
+ "tools",
+ "object",
+ "tool"
],
"moji": "🔧"
},
- "writing_hand": {
- "unicode": "1F58E",
+ "wrestlers": {
+ "unicode": "1F93C",
"unicode_alternates": [],
- "name": "left writing hand",
- "shortname": ":writing_hand:",
- "category": "people",
+ "name": "wrestlers",
+ "shortname": ":wrestlers:",
+ "category": "activity",
+ "aliases": [
+ ":wrestling:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤼"
+ },
+ "wrestlers_tone1": {
+ "unicode": "1F93C-1F3FB",
+ "unicode_alternates": [],
+ "name": "wrestlers tone 1",
+ "shortname": ":wrestlers_tone1:",
+ "category": "activity",
+ "aliases": [
+ ":wrestling_tone1:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤼🏻"
+ },
+ "wrestlers_tone2": {
+ "unicode": "1F93C-1F3FC",
+ "unicode_alternates": [],
+ "name": "wrestlers tone 2",
+ "shortname": ":wrestlers_tone2:",
+ "category": "activity",
"aliases": [
- ":left_writing_hand:"
+ ":wrestling_tone2:"
],
"aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤼🏼"
+ },
+ "wrestlers_tone3": {
+ "unicode": "1F93C-1F3FD",
+ "unicode_alternates": [],
+ "name": "wrestlers tone 3",
+ "shortname": ":wrestlers_tone3:",
+ "category": "activity",
+ "aliases": [
+ ":wrestling_tone3:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤼🏽"
+ },
+ "wrestlers_tone4": {
+ "unicode": "1F93C-1F3FE",
+ "unicode_alternates": [],
+ "name": "wrestlers tone 4",
+ "shortname": ":wrestlers_tone4:",
+ "category": "activity",
+ "aliases": [
+ ":wrestling_tone4:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤼🏾"
+ },
+ "wrestlers_tone5": {
+ "unicode": "1F93C-1F3FF",
+ "unicode_alternates": [],
+ "name": "wrestlers tone 5",
+ "shortname": ":wrestlers_tone5:",
+ "category": "activity",
+ "aliases": [
+ ":wrestling_tone5:"
+ ],
+ "aliases_ascii": [],
+ "keywords": [],
+ "moji": "🤼🏿"
+ },
+ "writing_hand": {
+ "unicode": "270D",
+ "unicode_alternates": [
+ "270D-FE0F"
+ ],
+ "name": "writing hand",
+ "shortname": ":writing_hand:",
+ "category": "people",
+ "aliases": [],
+ "aliases_ascii": [],
"keywords": [
+ "body",
+ "hands",
"write",
- "sign",
- "signature",
- "draw"
- ]
+ "diversity"
+ ],
+ "moji": "✍"
},
"writing_hand_tone1": {
"unicode": "270D-1F3FB",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "writing hand tone 1",
"shortname": ":writing_hand_tone1:",
"category": "people",
@@ -29594,11 +33225,12 @@
"sign",
"signature",
"draw"
- ]
+ ],
+ "moji": "✍🏻"
},
"writing_hand_tone2": {
"unicode": "270D-1F3FC",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "writing hand tone 2",
"shortname": ":writing_hand_tone2:",
"category": "people",
@@ -29609,11 +33241,12 @@
"sign",
"signature",
"draw"
- ]
+ ],
+ "moji": "✍🏼"
},
"writing_hand_tone3": {
"unicode": "270D-1F3FD",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "writing hand tone 3",
"shortname": ":writing_hand_tone3:",
"category": "people",
@@ -29624,11 +33257,12 @@
"sign",
"signature",
"draw"
- ]
+ ],
+ "moji": "✍🏽"
},
"writing_hand_tone4": {
"unicode": "270D-1F3FE",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "writing hand tone 4",
"shortname": ":writing_hand_tone4:",
"category": "people",
@@ -29639,11 +33273,12 @@
"sign",
"signature",
"draw"
- ]
+ ],
+ "moji": "✍🏾"
},
"writing_hand_tone5": {
"unicode": "270D-1F3FF",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "writing hand tone 5",
"shortname": ":writing_hand_tone5:",
"category": "people",
@@ -29654,20 +33289,23 @@
"sign",
"signature",
"draw"
- ]
+ ],
+ "moji": "✍🏿"
},
"x": {
"unicode": "274C",
"unicode_alternates": [],
"name": "cross mark",
"shortname": ":x:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"delete",
"no",
- "remove"
+ "remove",
+ "symbol",
+ "sol"
],
"moji": "❌"
},
@@ -29676,7 +33314,7 @@
"unicode_alternates": [],
"name": "yellow heart",
"shortname": ":yellow_heart:",
- "category": "emoticons",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29687,7 +33325,6 @@
"yellow",
"gold",
"heart",
- "love",
"friendship",
"happy",
"happiness",
@@ -29696,7 +33333,8 @@
"respectful",
"honest",
"caring",
- "selfless"
+ "selfless",
+ "symbol"
],
"moji": "💛"
},
@@ -29715,10 +33353,7 @@
"money",
"yen",
"japan",
- "japanese",
"banknote",
- "money",
- "currency",
"paper",
"cash",
"bill"
@@ -29727,7 +33362,7 @@
},
"yin_yang": {
"unicode": "262F",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "yin yang",
"shortname": ":yin_yang:",
"category": "symbols",
@@ -29739,14 +33374,15 @@
"symbol",
"tao",
"taoist"
- ]
+ ],
+ "moji": "☯"
},
"yum": {
"unicode": "1F60B",
"unicode_alternates": [],
"name": "face savouring delicious food",
"shortname": ":yum:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
@@ -29762,7 +33398,12 @@
"yummy",
"yum",
"tasty",
- "savory"
+ "savory",
+ "silly",
+ "smiley",
+ "emotion",
+ "sarcastic",
+ "good"
],
"moji": "😋"
},
@@ -29779,7 +33420,9 @@
"keywords": [
"lightning bolt",
"thunder",
- "weather"
+ "weather",
+ "sky",
+ "diarrhea"
],
"moji": "⚡"
},
@@ -29789,20 +33432,23 @@
"unicode_alternates": [
"0030-FE0F-20E3"
],
- "name": "digit zero",
+ "name": "keycap digit zero",
"shortname": ":zero:",
- "category": "other",
+ "category": "symbols",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"blue-square",
"null",
- "numbers"
+ "numbers",
+ "number",
+ "math",
+ "symbol"
]
},
"zipper_mouth": {
"unicode": "1F910",
- "unicode_alternates": "",
+ "unicode_alternates": [],
"name": "zipper-mouth face",
"shortname": ":zipper_mouth:",
"category": "people",
@@ -29810,19 +33456,24 @@
":zipper_mouth_face:"
],
"aliases_ascii": [],
- "keywords": []
+ "keywords": [
+ "mad",
+ "smiley"
+ ],
+ "moji": "🤐"
},
"zzz": {
"unicode": "1F4A4",
"unicode_alternates": [],
"name": "sleeping symbol",
"shortname": ":zzz:",
- "category": "emoticons",
+ "category": "people",
"aliases": [],
"aliases_ascii": [],
"keywords": [
"sleepy",
- "tired"
+ "tired",
+ "goodnight"
],
"moji": "💤"
}
diff --git a/lib/api/award_emoji.rb b/lib/api/award_emoji.rb
index c4fa1838b5a..2efe7e3adf3 100644
--- a/lib/api/award_emoji.rb
+++ b/lib/api/award_emoji.rb
@@ -56,9 +56,9 @@ module API
not_found!('Award Emoji') unless can_read_awardable?
- award = awardable.award_emoji.new(name: params[:name], user: current_user)
+ award = awardable.create_award_emoji(params[:name], current_user)
- if award.save
+ if award.persisted?
present award, with: Entities::AwardEmoji
else
not_found!("Award Emoji #{award.errors.messages}")
diff --git a/lib/api/branches.rb b/lib/api/branches.rb
index d467eb9d474..35efe4f2e4a 100644
--- a/lib/api/branches.rb
+++ b/lib/api/branches.rb
@@ -36,6 +36,8 @@ module API
# Parameters:
# id (required) - The ID of a project
# branch (required) - The name of the branch
+ # developers_can_push (optional) - Flag if developers can push to that branch
+ # developers_can_merge (optional) - Flag if developers can merge to that branch
# Example Request:
# PUT /projects/:id/repository/branches/:branch/protect
put ':id/repository/branches/:branch/protect',
@@ -43,9 +45,20 @@ module API
authorize_admin_project
@branch = user_project.repository.find_branch(params[:branch])
- not_found!("Branch") unless @branch
+ not_found!('Branch') unless @branch
protected_branch = user_project.protected_branches.find_by(name: @branch.name)
- user_project.protected_branches.create(name: @branch.name) unless protected_branch
+ developers_can_push = to_boolean(params[:developers_can_push])
+ developers_can_merge = to_boolean(params[:developers_can_merge])
+
+ if protected_branch
+ protected_branch.developers_can_push = developers_can_push unless developers_can_push.nil?
+ protected_branch.developers_can_merge = developers_can_merge unless developers_can_merge.nil?
+ protected_branch.save
+ else
+ user_project.protected_branches.create(name: @branch.name,
+ developers_can_push: developers_can_push || false,
+ developers_can_merge: developers_can_merge || false)
+ end
present @branch, with: Entities::RepoObject, project: user_project
end
diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb
index 323a7086890..acb4812b5cf 100644
--- a/lib/api/commit_statuses.rb
+++ b/lib/api/commit_statuses.rb
@@ -64,7 +64,7 @@ module API
ref = branches.first
end
- pipeline = @project.ensure_pipeline(commit.sha, ref)
+ pipeline = @project.ensure_pipeline(commit.sha, ref, current_user)
name = params[:name] || params[:context]
status = GenericCommitStatus.running_or_pending.find_by(pipeline: pipeline, name: name, ref: params[:ref])
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
index 8e03c08f47b..d6fed1a1eed 100644
--- a/lib/api/entities.rb
+++ b/lib/api/entities.rb
@@ -125,9 +125,21 @@ module API
end
end
- expose :protected do |repo, options|
+ expose :protected do |repo_obj, options|
if options[:project]
- options[:project].protected_branch? repo.name
+ options[:project].protected_branch? repo_obj.name
+ end
+ end
+
+ expose :developers_can_push do |repo_obj, options|
+ if options[:project]
+ options[:project].developers_can_push_to_protected_branch? repo_obj.name
+ end
+ end
+
+ expose :developers_can_merge do |repo_obj, options|
+ if options[:project]
+ options[:project].developers_can_merge_to_protected_branch? repo_obj.name
end
end
end
@@ -187,6 +199,7 @@ module API
end
expose :user_notes_count
expose :upvotes, :downvotes
+ expose :due_date
end
class ExternalIssue < Grape::Entity
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
index 77e407b54c5..d6e4eb2afd7 100644
--- a/lib/api/helpers.rb
+++ b/lib/api/helpers.rb
@@ -9,6 +9,13 @@ module API
[ true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON' ].include?(value)
end
+ def to_boolean(value)
+ return true if value =~ /^(true|t|yes|y|1|on)$/i
+ return false if value =~ /^(false|f|no|n|0|off)$/i
+
+ nil
+ end
+
def find_user_by_private_token
token_string = (params[PRIVATE_TOKEN_PARAM] || env[PRIVATE_TOKEN_HEADER]).to_s
User.find_by_authentication_token(token_string) || User.find_by_personal_access_token(token_string)
@@ -17,7 +24,7 @@ module API
def current_user
@current_user ||= (find_user_by_private_token || doorkeeper_guard)
- unless @current_user && Gitlab::UserAccess.allowed?(@current_user)
+ unless @current_user && Gitlab::UserAccess.new(@current_user).allowed?
return nil
end
diff --git a/lib/api/internal.rb b/lib/api/internal.rb
index d5dfba5e0cc..959b700de78 100644
--- a/lib/api/internal.rb
+++ b/lib/api/internal.rb
@@ -63,7 +63,12 @@ module API
if access_status.status
# Return the repository full path so that gitlab-shell has it when
# handling ssh commands
- response[:repository_path] = project.repository.path_to_repo
+ response[:repository_path] =
+ if wiki?
+ project.wiki.repository.path_to_repo
+ else
+ project.repository.path_to_repo
+ end
end
response
diff --git a/lib/api/issues.rb b/lib/api/issues.rb
index 8a03a41e9c5..c588103e517 100644
--- a/lib/api/issues.rb
+++ b/lib/api/issues.rb
@@ -152,12 +152,13 @@ module API
# milestone_id (optional) - The ID of a milestone to assign issue
# labels (optional) - The labels of an issue
# created_at (optional) - Date time string, ISO 8601 formatted
+ # due_date (optional) - Date time string in the format YEAR-MONTH-DAY
# Example Request:
# POST /projects/:id/issues
- post ":id/issues" do
+ post ':id/issues' do
required_attributes! [:title]
- keys = [:title, :description, :assignee_id, :milestone_id]
+ keys = [:title, :description, :assignee_id, :milestone_id, :due_date]
keys << :created_at if current_user.admin? || user_project.owner == current_user
attrs = attributes_for_keys(keys)
@@ -201,12 +202,13 @@ module API
# labels (optional) - The labels of an issue
# state_event (optional) - The state event of an issue (close|reopen)
# updated_at (optional) - Date time string, ISO 8601 formatted
+ # due_date (optional) - Date time string in the format YEAR-MONTH-DAY
# Example Request:
# PUT /projects/:id/issues/:issue_id
- put ":id/issues/:issue_id" do
+ put ':id/issues/:issue_id' do
issue = user_project.issues.find(params[:issue_id])
authorize! :update_issue, issue
- keys = [:title, :description, :assignee_id, :milestone_id, :state_event]
+ keys = [:title, :description, :assignee_id, :milestone_id, :state_event, :due_date]
keys << :updated_at if current_user.admin? || user_project.owner == current_user
attrs = attributes_for_keys(keys)
diff --git a/lib/api/todos.rb b/lib/api/todos.rb
index 2a6bfa98ca4..26c24c3baff 100644
--- a/lib/api/todos.rb
+++ b/lib/api/todos.rb
@@ -75,7 +75,7 @@ module API
todos = find_todos
todos.each(&:done)
- present paginate(Kaminari.paginate_array(todos)), with: Entities::Todo, current_user: current_user
+ todos.length
end
end
end
diff --git a/lib/banzai/filter/autolink_filter.rb b/lib/banzai/filter/autolink_filter.rb
index fac7dad3243..9ed45707515 100644
--- a/lib/banzai/filter/autolink_filter.rb
+++ b/lib/banzai/filter/autolink_filter.rb
@@ -56,6 +56,8 @@ module Banzai
# period (e.g., http://localhost:3000/)
rinku = Rinku.auto_link(html, :urls, options, IGNORE_PARENTS.to_a, 1)
+ return if rinku == html
+
# Rinku returns a String, so parse it back to a Nokogiri::XML::Document
# for further processing.
@doc = parse_html(rinku)
diff --git a/lib/banzai/filter/syntax_highlight_filter.rb b/lib/banzai/filter/syntax_highlight_filter.rb
index 536b478979f..91f0159f9a1 100644
--- a/lib/banzai/filter/syntax_highlight_filter.rb
+++ b/lib/banzai/filter/syntax_highlight_filter.rb
@@ -19,14 +19,22 @@ module Banzai
language = node.attr('class')
code = node.text
+ css_classes = "code highlight"
+
+ lexer = Rouge::Lexer.find_fancy(language) || Rouge::Lexers::PlainText
+ formatter = Rouge::Formatters::HTML.new
+
begin
- highlighted = block_code(code, language)
+ code = formatter.format(lexer.lex(code))
+
+ css_classes << " js-syntax-highlight #{lexer.tag}"
rescue
# Gracefully handle syntax highlighter bugs/errors to ensure
# users can still access an issue/comment/etc.
- highlighted = "<pre>#{code}</pre>"
end
+ highlighted = %(<pre class="#{css_classes}"><code>#{code}</code></pre>)
+
# Extracted to a method to measure it
replace_parent_pre_element(node, highlighted)
end
@@ -40,8 +48,7 @@ module Banzai
# Override Rouge::Plugins::Redcarpet#rouge_formatter
def rouge_formatter(lexer)
- Rouge::Formatters::HTMLGitlab.new(
- cssclass: "code highlight js-syntax-highlight #{lexer.tag}")
+ Rouge::Formatters::HTML.new
end
end
end
diff --git a/lib/banzai/filter/user_reference_filter.rb b/lib/banzai/filter/user_reference_filter.rb
index 5b0a6d8541b..e1ca7f4d24b 100644
--- a/lib/banzai/filter/user_reference_filter.rb
+++ b/lib/banzai/filter/user_reference_filter.rb
@@ -112,7 +112,7 @@ module Banzai
data = data_attribute(project: project.id, author: author.try(:id))
text = link_text || User.reference_prefix + 'all'
- link_tag(url, data, text)
+ link_tag(url, data, text, 'All Project and Group Members')
end
def link_to_namespace(namespace, link_text: nil)
@@ -128,7 +128,7 @@ module Banzai
data = data_attribute(group: namespace.id)
text = link_text || Group.reference_prefix + group
- link_tag(url, data, text)
+ link_tag(url, data, text, namespace.name)
end
def link_to_user(user, namespace, link_text: nil)
@@ -136,11 +136,11 @@ module Banzai
data = data_attribute(user: namespace.owner_id)
text = link_text || User.reference_prefix + user
- link_tag(url, data, text)
+ link_tag(url, data, text, namespace.owner_name)
end
- def link_tag(url, data, text)
- %(<a href="#{url}" #{data} class="#{link_class}">#{escape_once(text)}</a>)
+ def link_tag(url, data, text, title)
+ %(<a href="#{url}" #{data} class="#{link_class}" title="#{escape_once(title)}">#{escape_once(text)}</a>)
end
end
end
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb
index 01ef13df57a..a48dc542b14 100644
--- a/lib/ci/gitlab_ci_yaml_processor.rb
+++ b/lib/ci/gitlab_ci_yaml_processor.rb
@@ -31,28 +31,34 @@ module Ci
raise ValidationError, e.message
end
- def builds_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)
- builds.select do |build|
- build[:stage] == stage &&
- process?(build[:only], build[:except], ref, tag, trigger_request)
+ def jobs_for_ref(ref, tag = false, trigger_request = nil)
+ @jobs.select do |_, job|
+ process?(job[:only], job[:except], ref, tag, trigger_request)
end
end
- def builds
- @jobs.map do |name, job|
- build_job(name, job)
+ def jobs_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)
+ jobs_for_ref(ref, tag, trigger_request).select do |_, job|
+ job[:stage] == stage
end
end
- def global_variables
- @variables
+ def builds_for_ref(ref, tag = false, trigger_request = nil)
+ jobs_for_ref(ref, tag, trigger_request).map do |name, job|
+ build_job(name, job)
+ end
end
- def job_variables(name)
- job = @jobs[name.to_sym]
- return [] unless job
+ def builds_for_stage_and_ref(stage, ref, tag = false, trigger_request = nil)
+ jobs_for_stage_and_ref(stage, ref, tag, trigger_request).map do |name, job|
+ build_job(name, job)
+ end
+ end
- job[:variables] || []
+ def builds
+ @jobs.map do |name, job|
+ build_job(name, job)
+ end
end
private
@@ -95,11 +101,10 @@ module Ci
commands: [job[:before_script] || @before_script, job[:script]].flatten.compact.join("\n"),
tag_list: job[:tags] || [],
name: name,
- only: job[:only],
- except: job[:except],
allow_failure: job[:allow_failure] || false,
when: job[:when] || 'on_success',
environment: job[:environment],
+ yaml_variables: yaml_variables(name),
options: {
image: job[:image] || @image,
services: job[:services] || @services,
@@ -111,6 +116,24 @@ module Ci
}
end
+ def yaml_variables(name)
+ variables = global_variables.merge(job_variables(name))
+ variables.map do |key, value|
+ { key: key, value: value, public: true }
+ end
+ end
+
+ def global_variables
+ @variables || {}
+ end
+
+ def job_variables(name)
+ job = @jobs[name.to_sym]
+ return {} unless job
+
+ job[:variables] || {}
+ end
+
def validate!
@jobs.each do |name, job|
validate_job!(name, job)
diff --git a/lib/container_registry/client.rb b/lib/container_registry/client.rb
index 42232b7129d..2edddb84fc3 100644
--- a/lib/container_registry/client.rb
+++ b/lib/container_registry/client.rb
@@ -7,62 +7,91 @@ module ContainerRegistry
MANIFEST_VERSION = 'application/vnd.docker.distribution.manifest.v2+json'
+ # Taken from: FaradayMiddleware::FollowRedirects
+ REDIRECT_CODES = Set.new [301, 302, 303, 307]
+
def initialize(base_uri, options = {})
@base_uri = base_uri
- @faraday = Faraday.new(@base_uri) do |conn|
- initialize_connection(conn, options)
- end
+ @options = options
end
def repository_tags(name)
- response_body @faraday.get("/v2/#{name}/tags/list")
+ response_body faraday.get("/v2/#{name}/tags/list")
end
def repository_manifest(name, reference)
- response_body @faraday.get("/v2/#{name}/manifests/#{reference}")
+ response_body faraday.get("/v2/#{name}/manifests/#{reference}")
end
def repository_tag_digest(name, reference)
- response = @faraday.head("/v2/#{name}/manifests/#{reference}")
+ response = faraday.head("/v2/#{name}/manifests/#{reference}")
response.headers['docker-content-digest'] if response.success?
end
def delete_repository_tag(name, reference)
- @faraday.delete("/v2/#{name}/manifests/#{reference}").success?
+ faraday.delete("/v2/#{name}/manifests/#{reference}").success?
end
def blob(name, digest, type = nil)
- headers = {}
- headers['Accept'] = type if type
- response_body @faraday.get("/v2/#{name}/blobs/#{digest}", nil, headers)
+ type ||= 'application/octet-stream'
+ response_body faraday_blob.get("/v2/#{name}/blobs/#{digest}", nil, 'Accept' => type), allow_redirect: true
end
def delete_blob(name, digest)
- @faraday.delete("/v2/#{name}/blobs/#{digest}").success?
+ faraday.delete("/v2/#{name}/blobs/#{digest}").success?
end
-
+
private
-
+
def initialize_connection(conn, options)
conn.request :json
+
+ if options[:user] && options[:password]
+ conn.request(:basic_auth, options[:user].to_s, options[:password].to_s)
+ elsif options[:token]
+ conn.request(:authorization, :bearer, options[:token].to_s)
+ end
+
+ conn.adapter :net_http
+ end
+
+ def accept_manifest(conn)
conn.headers['Accept'] = MANIFEST_VERSION
conn.response :json, content_type: 'application/json'
conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v1+prettyjws'
conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v1+json'
conn.response :json, content_type: 'application/vnd.docker.distribution.manifest.v2+json'
+ end
- if options[:user] && options[:password]
- conn.request(:basic_auth, options[:user].to_s, options[:password].to_s)
- elsif options[:token]
- conn.request(:authorization, :bearer, options[:token].to_s)
+ def response_body(response, allow_redirect: false)
+ if allow_redirect && REDIRECT_CODES.include?(response.status)
+ response = redirect_response(response.headers['location'])
end
- conn.adapter :net_http
+ response.body if response && response.success?
+ end
+
+ def redirect_response(location)
+ return unless location
+
+ # We explicitly remove authorization token
+ faraday_blob.get(location) do |req|
+ req['Authorization'] = ''
+ end
end
- def response_body(response)
- response.body if response.success?
+ def faraday
+ @faraday ||= Faraday.new(@base_uri) do |conn|
+ initialize_connection(conn, @options)
+ accept_manifest(conn)
+ end
+ end
+
+ def faraday_blob
+ @faraday_blob ||= Faraday.new(@base_uri) do |conn|
+ initialize_connection(conn, @options)
+ end
end
end
end
diff --git a/lib/container_registry/tag.rb b/lib/container_registry/tag.rb
index 708d01b95a1..59040199920 100644
--- a/lib/container_registry/tag.rb
+++ b/lib/container_registry/tag.rb
@@ -53,7 +53,7 @@ module ContainerRegistry
def config
return unless config_blob
- @config ||= ContainerRegistry::Config.new(self, config_blob)
+ @config ||= ContainerRegistry::Config.new(self, config_blob) if config_blob.data
end
def created_at
diff --git a/lib/gitlab/access.rb b/lib/gitlab/access.rb
index 831f1e635ba..de41ea415a6 100644
--- a/lib/gitlab/access.rb
+++ b/lib/gitlab/access.rb
@@ -14,9 +14,10 @@ module Gitlab
OWNER = 50
# Branch protection settings
- PROTECTION_NONE = 0
- PROTECTION_DEV_CAN_PUSH = 1
- PROTECTION_FULL = 2
+ PROTECTION_NONE = 0
+ PROTECTION_DEV_CAN_PUSH = 1
+ PROTECTION_FULL = 2
+ PROTECTION_DEV_CAN_MERGE = 3
class << self
def values
@@ -54,6 +55,7 @@ module Gitlab
def protection_options
{
"Not protected: Both developers and masters can push new commits, force push, or delete the branch." => PROTECTION_NONE,
+ "Protected against pushes: Developers cannot push new commits, but are allowed to accept merge requests to the branch." => PROTECTION_DEV_CAN_MERGE,
"Partially protected: Developers can push new commits, but cannot force push or delete the branch. Masters can do all of those." => PROTECTION_DEV_CAN_PUSH,
"Fully protected: Developers cannot push new commits, force push, or delete the branch. Only masters can do any of those." => PROTECTION_FULL,
}
diff --git a/lib/gitlab/award_emoji.rb b/lib/gitlab/award_emoji.rb
index c94bfc0e65f..39b43ab5489 100644
--- a/lib/gitlab/award_emoji.rb
+++ b/lib/gitlab/award_emoji.rb
@@ -1,24 +1,14 @@
module Gitlab
class AwardEmoji
CATEGORIES = {
- other: "Other",
objects: "Objects",
- places: "Places",
- travel_places: "Travel",
- emoticons: "Emoticons",
- objects_symbols: "Symbols",
+ travel: "Travel",
+ symbols: "Symbols",
nature: "Nature",
- celebration: "Celebration",
people: "People",
activity: "Activity",
flags: "Flags",
- food_drink: "Food"
- }.with_indifferent_access
-
- CATEGORY_ALIASES = {
- symbols: "objects_symbols",
- foods: "food_drink",
- travel: "travel_places"
+ food: "Food"
}.with_indifferent_access
def self.normalize_emoji_name(name)
@@ -35,7 +25,7 @@ module Gitlab
# Skip Fitzpatrick(tone) modifiers
next if data["category"] == "modifier"
- category = CATEGORY_ALIASES[data["category"]] || data["category"]
+ category = data["category"]
@emoji_by_category[category] << data
end
@@ -57,9 +47,9 @@ module Gitlab
def self.aliases
@aliases ||=
begin
- json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json' )
- JSON.parse(File.read(json_path))
- end
+ json_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json')
+ JSON.parse(File.read(json_path))
+ end
end
# Returns an Array of Emoji names and their asset URLs.
diff --git a/lib/gitlab/backend/grack_auth.rb b/lib/gitlab/backend/grack_auth.rb
index 478f145bfed..ab94abeda77 100644
--- a/lib/gitlab/backend/grack_auth.rb
+++ b/lib/gitlab/backend/grack_auth.rb
@@ -63,7 +63,7 @@ module Grack
def ci_request?(login, password)
matched_login = /(?<s>^[a-zA-Z]*-ci)-token$/.match(login)
- if project && matched_login.present? && git_cmd == 'git-upload-pack'
+ if project && matched_login.present?
underscored_service = matched_login['s'].underscore
if underscored_service == 'gitlab_ci'
diff --git a/lib/gitlab/checks/change_access.rb b/lib/gitlab/checks/change_access.rb
new file mode 100644
index 00000000000..5551fac4b8b
--- /dev/null
+++ b/lib/gitlab/checks/change_access.rb
@@ -0,0 +1,96 @@
+module Gitlab
+ module Checks
+ class ChangeAccess
+ attr_reader :user_access, :project
+
+ def initialize(change, user_access:, project:)
+ @oldrev, @newrev, @ref = change.split(' ')
+ @branch_name = branch_name(@ref)
+ @user_access = user_access
+ @project = project
+ end
+
+ def exec
+ error = protected_branch_checks || tag_checks || push_checks
+
+ if error
+ GitAccessStatus.new(false, error)
+ else
+ GitAccessStatus.new(true)
+ end
+ end
+
+ protected
+
+ def protected_branch_checks
+ return unless project.protected_branch?(@branch_name)
+
+ if forced_push? && user_access.cannot_do_action?(:force_push_code_to_protected_branches)
+ return "You are not allowed to force push code to a protected branch on this project."
+ elsif Gitlab::Git.blank_ref?(@newrev) && user_access.cannot_do_action?(:remove_protected_branches)
+ return "You are not allowed to delete protected branches from this project."
+ end
+
+ if matching_merge_request?
+ if user_access.can_merge_to_branch?(@branch_name) || user_access.can_push_to_branch?(@branch_name)
+ return
+ else
+ "You are not allowed to merge code into protected branches on this project."
+ end
+ else
+ if user_access.can_push_to_branch?(@branch_name)
+ return
+ else
+ "You are not allowed to push code to protected branches on this project."
+ end
+ end
+ end
+
+ def tag_checks
+ tag_ref = tag_name(@ref)
+
+ if tag_ref && protected_tag?(tag_ref) && user_access.cannot_do_action?(:admin_project)
+ "You are not allowed to change existing tags on this project."
+ end
+ end
+
+ def push_checks
+ if user_access.cannot_do_action?(:push_code)
+ "You are not allowed to push code to this project."
+ end
+ end
+
+ private
+
+ def protected_tag?(tag_name)
+ project.repository.tag_exists?(tag_name)
+ end
+
+ def forced_push?
+ Gitlab::Checks::ForcePush.force_push?(@project, @oldrev, @newrev)
+ end
+
+ def matching_merge_request?
+ Checks::MatchingMergeRequest.new(@newrev, @branch_name, @project).match?
+ end
+
+ def branch_name(ref)
+ ref = @ref.to_s
+ if Gitlab::Git.branch_ref?(ref)
+ Gitlab::Git.ref_name(ref)
+ else
+ nil
+ end
+ end
+
+ def tag_name(ref)
+ ref = @ref.to_s
+ if Gitlab::Git.tag_ref?(ref)
+ Gitlab::Git.ref_name(ref)
+ else
+ nil
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/checks/force_push.rb b/lib/gitlab/checks/force_push.rb
new file mode 100644
index 00000000000..dfa83a0eab3
--- /dev/null
+++ b/lib/gitlab/checks/force_push.rb
@@ -0,0 +1,17 @@
+module Gitlab
+ module Checks
+ class ForcePush
+ def self.force_push?(project, oldrev, newrev)
+ return false if project.empty_repo?
+
+ # Created or deleted branch
+ if Gitlab::Git.blank_ref?(oldrev) || Gitlab::Git.blank_ref?(newrev)
+ false
+ else
+ missed_refs, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} --git-dir=#{project.repository.path_to_repo} rev-list #{oldrev} ^#{newrev}))
+ missed_refs.split("\n").size > 0
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/checks/matching_merge_request.rb b/lib/gitlab/checks/matching_merge_request.rb
new file mode 100644
index 00000000000..849848515da
--- /dev/null
+++ b/lib/gitlab/checks/matching_merge_request.rb
@@ -0,0 +1,18 @@
+module Gitlab
+ module Checks
+ class MatchingMergeRequest
+ def initialize(newrev, branch_name, project)
+ @newrev = newrev
+ @branch_name = branch_name
+ @project = project
+ end
+
+ def match?
+ @project.merge_requests
+ .with_state(:locked)
+ .where(in_progress_merge_commit_sha: @newrev, target_branch: @branch_name)
+ .exists?
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/database/migration_helpers.rb b/lib/gitlab/database/migration_helpers.rb
index dec20d8659b..927f9dad20b 100644
--- a/lib/gitlab/database/migration_helpers.rb
+++ b/lib/gitlab/database/migration_helpers.rb
@@ -20,11 +20,19 @@ module Gitlab
if Database.postgresql?
options = options.merge({ algorithm: :concurrently })
+ disable_statement_timeout
end
add_index(table_name, column_name, options)
end
+ # Long-running migrations may take more than the timeout allowed by
+ # the database. Disable the session's statement timeout to ensure
+ # migrations don't get killed prematurely. (PostgreSQL only)
+ def disable_statement_timeout
+ ActiveRecord::Base.connection.execute('SET statement_timeout TO 0') if Database.postgresql?
+ end
+
# Updates the value of a column in batches.
#
# This method updates the table in batches of 5% of the total row count.
@@ -133,6 +141,8 @@ module Gitlab
'in the body of your migration class'
end
+ disable_statement_timeout
+
transaction do
add_column(table, column, type, default: nil)
diff --git a/lib/gitlab/diff/file.rb b/lib/gitlab/diff/file.rb
index 7e01f7b61fb..b09ca1fb8b0 100644
--- a/lib/gitlab/diff/file.rb
+++ b/lib/gitlab/diff/file.rb
@@ -5,7 +5,7 @@ module Gitlab
delegate :new_file, :deleted_file, :renamed_file,
:old_path, :new_path, :a_mode, :b_mode,
- :submodule?, :too_large?, to: :diff, prefix: false
+ :submodule?, :too_large?, :collapsed?, to: :diff, prefix: false
def initialize(diff, repository:, diff_refs: nil)
@diff = diff
@@ -68,10 +68,6 @@ module Gitlab
@lines ||= Gitlab::Diff::Parser.new.parse(raw_diff.each_line).to_a
end
- def collapsed_by_default?
- diff.diff.bytesize > 10240 # 10 KB
- end
-
def highlighted_diff_lines
@highlighted_diff_lines ||= Gitlab::Diff::Highlight.new(self, repository: self.repository).highlight
end
diff --git a/lib/gitlab/force_push_check.rb b/lib/gitlab/force_push_check.rb
deleted file mode 100644
index 93c6a5bb7f5..00000000000
--- a/lib/gitlab/force_push_check.rb
+++ /dev/null
@@ -1,15 +0,0 @@
-module Gitlab
- class ForcePushCheck
- def self.force_push?(project, oldrev, newrev)
- return false if project.empty_repo?
-
- # Created or deleted branch
- if Gitlab::Git.blank_ref?(oldrev) || Gitlab::Git.blank_ref?(newrev)
- false
- else
- missed_refs, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} --git-dir=#{project.repository.path_to_repo} rev-list #{oldrev} ^#{newrev}))
- missed_refs.split("\n").size > 0
- end
- end
- end
-end
diff --git a/lib/gitlab/git_access.rb b/lib/gitlab/git_access.rb
index 7679c7e4bb8..308f23bc9bc 100644
--- a/lib/gitlab/git_access.rb
+++ b/lib/gitlab/git_access.rb
@@ -1,52 +1,17 @@
+# Check a user's access to perform a git action. All public methods in this
+# class return an instance of `GitlabAccessStatus`
module Gitlab
class GitAccess
DOWNLOAD_COMMANDS = %w{ git-upload-pack git-upload-archive }
PUSH_COMMANDS = %w{ git-receive-pack }
- attr_reader :actor, :project, :protocol
+ attr_reader :actor, :project, :protocol, :user_access
def initialize(actor, project, protocol)
@actor = actor
@project = project
@protocol = protocol
- end
-
- def user
- return @user if defined?(@user)
-
- @user =
- case actor
- when User
- actor
- when DeployKey
- nil
- when Key
- actor.user
- end
- end
-
- def deploy_key
- actor if actor.is_a?(DeployKey)
- end
-
- def can_push_to_branch?(ref)
- return false unless user
-
- if project.protected_branch?(ref) && !project.developers_can_push_to_protected_branch?(ref)
- user.can?(:push_code_to_protected_branches, project)
- else
- user.can?(:push_code, project)
- end
- end
-
- def can_read_project?
- if user
- user.can?(:read_project, project)
- elsif deploy_key
- deploy_key.projects.include?(project)
- else
- false
- end
+ @user_access = UserAccess.new(user, project: project)
end
def check(cmd, changes = nil)
@@ -56,11 +21,11 @@ module Gitlab
return build_status_object(false, "No user or key was provided.")
end
- if user && !user_allowed?
+ if user && !user_access.allowed?
return build_status_object(false, "Your account has been blocked.")
end
- unless project && can_read_project?
+ unless project && (user_access.can_read_project? || deploy_key_can_read_project?)
return build_status_object(false, 'The project you were looking for could not be found.')
end
@@ -95,7 +60,7 @@ module Gitlab
end
def user_download_access_check
- unless user.can?(:download_code, project)
+ unless user_access.can_do_action?(:download_code)
return build_status_object(false, "You are not allowed to download code from this project.")
end
@@ -125,46 +90,8 @@ module Gitlab
build_status_object(true)
end
- def can_user_do_action?(action)
- @permission_cache ||= {}
- @permission_cache[action] ||= user.can?(action, project)
- end
-
def change_access_check(change)
- oldrev, newrev, ref = change.split(' ')
-
- action =
- if project.protected_branch?(branch_name(ref))
- protected_branch_action(oldrev, newrev, branch_name(ref))
- elsif (tag_ref = tag_name(ref)) && protected_tag?(tag_ref)
- # Prevent any changes to existing git tag unless user has permissions
- :admin_project
- else
- :push_code
- end
-
- unless can_user_do_action?(action)
- status =
- case action
- when :force_push_code_to_protected_branches
- build_status_object(false, "You are not allowed to force push code to a protected branch on this project.")
- when :remove_protected_branches
- build_status_object(false, "You are not allowed to deleted protected branches from this project.")
- when :push_code_to_protected_branches
- build_status_object(false, "You are not allowed to push code to protected branches on this project.")
- when :admin_project
- build_status_object(false, "You are not allowed to change existing tags on this project.")
- else # :push_code
- build_status_object(false, "You are not allowed to push code to this project.")
- end
- return status
- end
-
- build_status_object(true)
- end
-
- def forced_push?(oldrev, newrev)
- Gitlab::ForcePushCheck.force_push?(project, oldrev, newrev)
+ Checks::ChangeAccess.new(change, user_access: user_access, project: project).exec
end
def protocol_allowed?
@@ -173,48 +100,38 @@ module Gitlab
private
- def protected_branch_action(oldrev, newrev, branch_name)
- # we dont allow force push to protected branch
- if forced_push?(oldrev, newrev)
- :force_push_code_to_protected_branches
- elsif Gitlab::Git.blank_ref?(newrev)
- # and we dont allow remove of protected branch
- :remove_protected_branches
- elsif project.developers_can_push_to_protected_branch?(branch_name)
- :push_code
- else
- :push_code_to_protected_branches
- end
+ def matching_merge_request?(newrev, branch_name)
+ Checks::MatchingMergeRequest.new(newrev, branch_name, project).match?
end
- def protected_tag?(tag_name)
- project.repository.tag_exists?(tag_name)
- end
-
- def user_allowed?
- Gitlab::UserAccess.allowed?(user)
- end
-
- def branch_name(ref)
- ref = ref.to_s
- if Gitlab::Git.branch_ref?(ref)
- Gitlab::Git.ref_name(ref)
- else
- nil
- end
+ def deploy_key
+ actor if actor.is_a?(DeployKey)
end
- def tag_name(ref)
- ref = ref.to_s
- if Gitlab::Git.tag_ref?(ref)
- Gitlab::Git.ref_name(ref)
+ def deploy_key_can_read_project?
+ if deploy_key
+ deploy_key.projects.include?(project)
else
- nil
+ false
end
end
protected
+ def user
+ return @user if defined?(@user)
+
+ @user =
+ case actor
+ when User
+ actor
+ when DeployKey
+ nil
+ when Key
+ actor.user
+ end
+ end
+
def build_status_object(status, message = '')
GitAccessStatus.new(status, message)
end
diff --git a/lib/gitlab/git_access_wiki.rb b/lib/gitlab/git_access_wiki.rb
index 8672cbc0ec4..f71d3575909 100644
--- a/lib/gitlab/git_access_wiki.rb
+++ b/lib/gitlab/git_access_wiki.rb
@@ -1,7 +1,7 @@
module Gitlab
class GitAccessWiki < GitAccess
def change_access_check(change)
- if user.can?(:create_wiki, project)
+ if user_access.can_do_action?(:create_wiki)
build_status_object(true)
else
build_status_object(false, "You are not allowed to write to this project's wiki.")
diff --git a/lib/gitlab/gitlab_import/importer.rb b/lib/gitlab/gitlab_import/importer.rb
index e6d31ea04c0..46d40f75be6 100644
--- a/lib/gitlab/gitlab_import/importer.rb
+++ b/lib/gitlab/gitlab_import/importer.rb
@@ -15,32 +15,35 @@ module Gitlab
end
def execute
- project_identifier = CGI.escape(project.import_source)
-
- # Issues && Comments
- issues = client.issues(project_identifier)
-
- issues.each do |issue|
- body = @formatter.author_line(issue["author"]["name"])
- body += issue["description"]
-
- comments = client.issue_comments(project_identifier, issue["id"])
-
- if comments.any?
- body += @formatter.comments_header
+ ActiveRecord::Base.no_touching do
+ project_identifier = CGI.escape(project.import_source)
+
+ # Issues && Comments
+ issues = client.issues(project_identifier)
+
+ issues.each do |issue|
+ body = @formatter.author_line(issue["author"]["name"])
+ body += issue["description"]
+
+ comments = client.issue_comments(project_identifier, issue["id"])
+
+ if comments.any?
+ body += @formatter.comments_header
+ end
+
+ comments.each do |comment|
+ body += @formatter.comment(comment["author"]["name"], comment["created_at"], comment["body"])
+ end
+
+ project.issues.create!(
+ iid: issue["iid"],
+ description: body,
+ title: issue["title"],
+ state: issue["state"],
+ updated_at: issue["updated_at"],
+ author_id: gl_user_id(project, issue["author"]["id"])
+ )
end
-
- comments.each do |comment|
- body += @formatter.comment(comment["author"]["name"], comment["created_at"], comment["body"])
- end
-
- project.issues.create!(
- iid: issue["iid"],
- description: body,
- title: issue["title"],
- state: issue["state"],
- author_id: gl_user_id(project, issue["author"]["id"])
- )
end
true
diff --git a/lib/gitlab/highlight.rb b/lib/gitlab/highlight.rb
index 41296415e35..9360afedfcb 100644
--- a/lib/gitlab/highlight.rb
+++ b/lib/gitlab/highlight.rb
@@ -1,7 +1,7 @@
module Gitlab
class Highlight
- def self.highlight(blob_name, blob_content, repository: nil, nowrap: true, plain: false)
- new(blob_name, blob_content, nowrap: nowrap, repository: repository).
+ def self.highlight(blob_name, blob_content, repository: nil, plain: false)
+ new(blob_name, blob_content, repository: repository).
highlight(blob_content, continue: false, plain: plain)
end
@@ -13,30 +13,34 @@ module Gitlab
highlight(file_name, blob.data, repository: repository).lines.map!(&:html_safe)
end
- attr_reader :lexer
- def initialize(blob_name, blob_content, repository: nil, nowrap: true)
+ def initialize(blob_name, blob_content, repository: nil)
+ @formatter = Rouge::Formatters::HTMLGitlab.new
+ @repository = repository
@blob_name = blob_name
@blob_content = blob_content
- @repository = repository
- @formatter = rouge_formatter(nowrap: nowrap)
-
- @lexer = custom_language || begin
- Rouge::Lexer.guess(filename: blob_name, source: blob_content).new
- rescue Rouge::Lexer::AmbiguousGuess => e
- e.alternatives.sort_by(&:tag).first
- end
end
def highlight(text, continue: true, plain: false)
if plain
- @formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe
+ hl_lexer = Rouge::Lexers::PlainText
+ continue = false
else
- @formatter.format(@lexer.lex(text, continue: continue)).html_safe
+ hl_lexer = self.lexer
end
+
+ @formatter.format(hl_lexer.lex(text, continue: continue)).html_safe
rescue
@formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe
end
+ def lexer
+ @lexer ||= custom_language || begin
+ Rouge::Lexer.guess(filename: @blob_name, source: @blob_content).new
+ rescue Rouge::Guesser::Ambiguous => e
+ e.alternatives.sort_by(&:tag).first
+ end
+ end
+
private
def custom_language
@@ -46,16 +50,5 @@ module Gitlab
Rouge::Lexer.find_fancy(language_name)
end
-
- def rouge_formatter(options = {})
- options = options.reverse_merge(
- nowrap: true,
- cssclass: 'code highlight',
- lineanchors: true,
- lineanchorsid: 'LC'
- )
-
- Rouge::Formatters::HTMLGitlab.new(options)
- end
end
end
diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb
index 588647e5adb..d6d14bd98a0 100644
--- a/lib/gitlab/import_export.rb
+++ b/lib/gitlab/import_export.rb
@@ -2,7 +2,8 @@ module Gitlab
module ImportExport
extend self
- VERSION = '0.1.1'
+ VERSION = '0.1.2'
+ FILENAME_LIMIT = 50
def export_path(relative_path:)
File.join(storage_path, relative_path)
@@ -28,6 +29,12 @@ module Gitlab
'VERSION'
end
+ def export_filename(project:)
+ basename = "#{Time.now.strftime('%Y-%m-%d_%H-%M-%3N')}_#{project.namespace.path}_#{project.path}"
+
+ "#{basename[0..FILENAME_LIMIT]}_export.tar.gz"
+ end
+
def version
VERSION
end
diff --git a/lib/gitlab/import_export/import_export.yml b/lib/gitlab/import_export/import_export.yml
index 05f4ad527ac..15afe8174a4 100644
--- a/lib/gitlab/import_export/import_export.yml
+++ b/lib/gitlab/import_export/import_export.yml
@@ -53,7 +53,11 @@ included_attributes:
excluded_attributes:
snippets:
- :expired_at
+ merge_request_diff:
+ - :st_diffs
methods:
statuses:
- - :type \ No newline at end of file
+ - :type
+ merge_request_diff:
+ - :utf8_st_diffs \ No newline at end of file
diff --git a/lib/gitlab/import_export/importer.rb b/lib/gitlab/import_export/importer.rb
index 8f66f48cbfe..6b69a653f12 100644
--- a/lib/gitlab/import_export/importer.rb
+++ b/lib/gitlab/import_export/importer.rb
@@ -44,8 +44,7 @@ module Gitlab
def wiki_restorer
Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: wiki_repo_path,
shared: @shared,
- project: ProjectWiki.new(project_tree.restored_project),
- wiki: true)
+ project: ProjectWiki.new(project_tree.restored_project))
end
def uploads_restorer
diff --git a/lib/gitlab/import_export/project_tree_restorer.rb b/lib/gitlab/import_export/project_tree_restorer.rb
index 025ecc12f9f..051110c23cf 100644
--- a/lib/gitlab/import_export/project_tree_restorer.rb
+++ b/lib/gitlab/import_export/project_tree_restorer.rb
@@ -12,7 +12,10 @@ module Gitlab
json = IO.read(@path)
@tree_hash = ActiveSupport::JSON.decode(json)
@project_members = @tree_hash.delete('project_members')
- create_relations
+
+ ActiveRecord::Base.no_touching do
+ create_relations
+ end
rescue => e
@shared.error(e)
false
diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb
index 9824df3f274..e41c7e6bf4f 100644
--- a/lib/gitlab/import_export/relation_factory.rb
+++ b/lib/gitlab/import_export/relation_factory.rb
@@ -33,6 +33,7 @@ module Gitlab
update_project_references
reset_ci_tokens if @relation_name == 'Ci::Trigger'
@relation_hash['data'].deep_symbolize_keys! if @relation_name == :events && @relation_hash['data']
+ set_st_diffs if @relation_name == :merge_request_diff
generate_imported_object
end
@@ -87,7 +88,7 @@ module Gitlab
project_id = @relation_hash.delete('project_id')
# project_id may not be part of the export, but we always need to populate it if required.
- @relation_hash['project_id'] = project_id if relation_class.column_names.include?('project_id')
+ @relation_hash['project_id'] = project_id
@relation_hash['gl_project_id'] = project_id if @relation_hash['gl_project_id']
@relation_hash['target_project_id'] = project_id if @relation_hash['target_project_id']
@relation_hash['source_project_id'] = -1 if @relation_hash['source_project_id']
@@ -111,7 +112,7 @@ module Gitlab
end
def imported_object
- imported_object = relation_class.new(@relation_hash)
+ imported_object = relation_class.new(parsed_relation_hash)
yield(imported_object) if block_given?
imported_object.importing = true if imported_object.respond_to?(:importing)
imported_object
@@ -125,6 +126,14 @@ module Gitlab
def admin_user?
@user.is_admin?
end
+
+ def parsed_relation_hash
+ @relation_hash.reject { |k, _v| !relation_class.attribute_method?(k) }
+ end
+
+ def set_st_diffs
+ @relation_hash['st_diffs'] = @relation_hash.delete('utf8_st_diffs')
+ end
end
end
end
diff --git a/lib/gitlab/import_export/repo_restorer.rb b/lib/gitlab/import_export/repo_restorer.rb
index 546dae4d122..f84de652a57 100644
--- a/lib/gitlab/import_export/repo_restorer.rb
+++ b/lib/gitlab/import_export/repo_restorer.rb
@@ -3,15 +3,14 @@ module Gitlab
class RepoRestorer
include Gitlab::ImportExport::CommandLineUtil
- def initialize(project:, shared:, path_to_bundle:, wiki: false)
+ def initialize(project:, shared:, path_to_bundle:)
@project = project
@path_to_bundle = path_to_bundle
@shared = shared
- @wiki = wiki
end
def restore
- return wiki? unless File.exist?(@path_to_bundle)
+ return true unless File.exist?(@path_to_bundle)
FileUtils.mkdir_p(path_to_repo)
@@ -30,10 +29,6 @@ module Gitlab
def path_to_repo
@project.repository.path_to_repo
end
-
- def wiki?
- @wiki
- end
end
end
end
diff --git a/lib/gitlab/import_export/repo_saver.rb b/lib/gitlab/import_export/repo_saver.rb
index cce43fe994b..331e14021e6 100644
--- a/lib/gitlab/import_export/repo_saver.rb
+++ b/lib/gitlab/import_export/repo_saver.rb
@@ -11,7 +11,7 @@ module Gitlab
end
def save
- return false if @project.empty_repo?
+ return true if @project.empty_repo? # it's ok to have no repo
@full_path = File.join(@shared.export_path, ImportExport.project_bundle_filename)
bundle_to_disk
diff --git a/lib/gitlab/import_export/saver.rb b/lib/gitlab/import_export/saver.rb
index 6a60b65071f..6130c124dd1 100644
--- a/lib/gitlab/import_export/saver.rb
+++ b/lib/gitlab/import_export/saver.rb
@@ -7,7 +7,8 @@ module Gitlab
new(*args).save
end
- def initialize(shared:)
+ def initialize(project:, shared:)
+ @project = project
@shared = shared
end
@@ -36,7 +37,7 @@ module Gitlab
end
def archive_file
- @archive_file ||= File.join(@shared.export_path, '..', "#{Time.now.strftime('%Y-%m-%d_%H-%M-%3N')}_project_export.tar.gz")
+ @archive_file ||= File.join(@shared.export_path, '..', Gitlab::ImportExport.export_filename(project: @project))
end
end
end
diff --git a/lib/gitlab/import_export/wiki_repo_saver.rb b/lib/gitlab/import_export/wiki_repo_saver.rb
index 1eedae39f8a..6107420e4dd 100644
--- a/lib/gitlab/import_export/wiki_repo_saver.rb
+++ b/lib/gitlab/import_export/wiki_repo_saver.rb
@@ -4,6 +4,7 @@ module Gitlab
def save
@wiki = ProjectWiki.new(@project)
return true unless wiki_repository_exists? # it's okay to have no Wiki
+
bundle_to_disk(File.join(@shared.export_path, project_filename))
end
diff --git a/lib/gitlab/lfs/response.rb b/lib/gitlab/lfs/response.rb
index 811363405a8..a1ee1aa81ff 100644
--- a/lib/gitlab/lfs/response.rb
+++ b/lib/gitlab/lfs/response.rb
@@ -47,6 +47,8 @@ module Gitlab
end
def render_storage_upload_store_response(oid, size, tmp_file_name)
+ return render_forbidden unless tmp_file_name
+
render_response_to_push do
render_lfs_upload_ok(oid, size, tmp_file_name)
end
diff --git a/lib/gitlab/lfs/router.rb b/lib/gitlab/lfs/router.rb
index 69bd5e62305..f2a76a56b8f 100644
--- a/lib/gitlab/lfs/router.rb
+++ b/lib/gitlab/lfs/router.rb
@@ -74,8 +74,6 @@ module Gitlab
lfs.render_storage_upload_authorize_response(oid, size)
else
tmp_file_name = sanitize_tmp_filename(@request.env['HTTP_X_GITLAB_LFS_TMP'])
- return nil unless tmp_file_name
-
lfs.render_storage_upload_store_response(oid, size, tmp_file_name)
end
end
diff --git a/lib/gitlab/user_access.rb b/lib/gitlab/user_access.rb
index d1b42c1f9b9..c0f85e9b3a8 100644
--- a/lib/gitlab/user_access.rb
+++ b/lib/gitlab/user_access.rb
@@ -1,7 +1,23 @@
module Gitlab
- module UserAccess
- def self.allowed?(user)
- return false if user.blocked?
+ class UserAccess
+ attr_reader :user, :project
+
+ def initialize(user, project: nil)
+ @user = user
+ @project = project
+ end
+
+ def can_do_action?(action)
+ @permission_cache ||= {}
+ @permission_cache[action] ||= user.can?(action, project)
+ end
+
+ def cannot_do_action?(action)
+ !can_do_action?(action)
+ end
+
+ def allowed?
+ return false if user.blank? || user.blocked?
if user.requires_ldap_check? && user.try_obtain_ldap_lease
return false unless Gitlab::LDAP::Access.allowed?(user)
@@ -9,5 +25,31 @@ module Gitlab
true
end
+
+ def can_push_to_branch?(ref)
+ return false unless user
+
+ if project.protected_branch?(ref) && !project.developers_can_push_to_protected_branch?(ref)
+ user.can?(:push_code_to_protected_branches, project)
+ else
+ user.can?(:push_code, project)
+ end
+ end
+
+ def can_merge_to_branch?(ref)
+ return false unless user
+
+ if project.protected_branch?(ref) && !project.developers_can_merge_to_protected_branch?(ref)
+ user.can?(:push_code_to_protected_branches, project)
+ else
+ user.can?(:push_code, project)
+ end
+ end
+
+ def can_read_project?
+ return false unless user
+
+ user.can?(:read_project, project)
+ end
end
end
diff --git a/lib/rouge/formatters/html_gitlab.rb b/lib/rouge/formatters/html_gitlab.rb
index 3358ed6773e..f818dc78d34 100644
--- a/lib/rouge/formatters/html_gitlab.rb
+++ b/lib/rouge/formatters/html_gitlab.rb
@@ -1,171 +1,27 @@
-require 'cgi'
-
module Rouge
module Formatters
- class HTMLGitlab < Rouge::Formatter
+ class HTMLGitlab < Rouge::Formatters::HTML
tag 'html_gitlab'
# Creates a new <tt>Rouge::Formatter::HTMLGitlab</tt> instance.
#
- # [+nowrap+] If set to True, don't wrap the output at all, not
- # even inside a <tt><pre></tt> tag (default: false).
- # [+cssclass+] CSS class for the wrapping <tt><div></tt> tag
- # (default: 'highlight').
- # [+linenos+] If set to 'table', output line numbers as a table
- # with two cells, one containing the line numbers,
- # the other the whole code. This is copy paste friendly,
- # but may cause alignment problems with some browsers
- # or fonts. If set to 'inline', the line numbers will
- # be integrated in the <tt><pre></tt> tag that contains
- # the code (default: nil).
# [+linenostart+] The line number for the first line (default: 1).
- # [+lineanchors+] If set to true the formatter will wrap each output
- # line in an anchor tag with a name of L-linenumber.
- # This allows easy linking to certain lines
- # (default: false).
- # [+lineanchorsid+] If lineanchors is true the name of the anchors can
- # be changed with lineanchorsid to e.g. foo-linenumber
- # (default: 'L').
- # [+anchorlinenos+] If set to true, will wrap line numbers in <tt><a></tt>
- # tags. Used in combination with linenos and lineanchors
- # (default: false).
- # [+inline_theme+] Inline CSS styles for the <pre> tag (default: false).
- def initialize(
- nowrap: false,
- cssclass: 'highlight',
- linenos: nil,
- linenostart: 1,
- lineanchors: false,
- lineanchorsid: 'L',
- anchorlinenos: false,
- inline_theme: nil
- )
- @nowrap = nowrap
- @cssclass = cssclass
- @linenos = linenos
+ def initialize(linenostart: 1)
@linenostart = linenostart
- @lineanchors = lineanchors
- @lineanchorsid = lineanchorsid
- @anchorlinenos = anchorlinenos
- @inline_theme = Theme.find(inline_theme).new if inline_theme.is_a?(String)
- end
-
- def render(tokens)
- case @linenos
- when 'table'
- render_tableized(tokens)
- when 'inline'
- render_untableized(tokens)
- else
- render_untableized(tokens)
- end
- end
-
- alias_method :format, :render
-
- private
-
- def render_untableized(tokens)
- data = process_tokens(tokens)
-
- html = ''
- html << "<pre class=\"#{@cssclass}\"><code>" unless @nowrap
- html << wrap_lines(data[:code])
- html << "</code></pre>\n" unless @nowrap
- html
+ @line_number = linenostart
end
- def render_tableized(tokens)
- data = process_tokens(tokens)
-
- html = ''
- html << "<div class=\"#{@cssclass}\">" unless @nowrap
- html << '<table><tbody>'
- html << "<td class=\"linenos\"><pre>"
- html << wrap_linenos(data[:numbers])
- html << '</pre></td>'
- html << "<td class=\"lines\"><pre><code>"
- html << wrap_lines(data[:code])
- html << '</code></pre></td>'
- html << '</tbody></table>'
- html << '</div>' unless @nowrap
- html
- end
-
- def process_tokens(tokens)
- rendered = []
- current_line = ''
-
- tokens.each do |tok, val|
- # In the case of multi-line values (e.g. comments), we need to apply
- # styling to each line since span elements are inline.
- val.lines.each do |line|
- stripped = line.chomp
- current_line << span(tok, stripped)
-
- if line.end_with?("\n")
- rendered << current_line
- current_line = ''
- end
- end
- end
-
- # Add leftover text
- rendered << current_line if current_line.present?
-
- num_lines = rendered.size
- numbers = (@linenostart..num_lines + @linenostart - 1).to_a
-
- { numbers: numbers, code: rendered }
- end
-
- def wrap_linenos(numbers)
- if @anchorlinenos
- numbers.map! do |number|
- "<a href=\"##{@lineanchorsid}#{number}\">#{number}</a>"
- end
- end
- numbers.join("\n")
- end
-
- def wrap_lines(lines)
- if @lineanchors
- lines = lines.each_with_index.map do |line, index|
- number = index + @linenostart
-
- if @linenos == 'inline'
- "<a name=\"L#{number}\"></a>" \
- "<span class=\"linenos\">#{number}</span>" \
- "<span id=\"#{@lineanchorsid}#{number}\" class=\"line\">#{line}" \
- '</span>'
- else
- "<span id=\"#{@lineanchorsid}#{number}\" class=\"line\">#{line}" \
- '</span>'
- end
- end
- elsif @linenos == 'inline'
- lines = lines.each_with_index.map do |line, index|
- number = index + @linenostart
- "<span class=\"linenos\">#{number}</span>#{line}"
- end
- end
-
- lines.join("\n")
- end
+ def stream(tokens, &b)
+ is_first = true
+ token_lines(tokens) do |line|
+ yield "\n" unless is_first
+ is_first = false
- def span(tok, val)
- # http://stackoverflow.com/a/1600584/2587286
- val = CGI.escapeHTML(val)
+ yield %(<span id="LC#{@line_number}" class="line">)
+ line.each { |token, value| yield span(token, value) }
+ yield %(</span>)
- if tok.shortname.empty?
- val
- else
- if @inline_theme
- rules = @inline_theme.style_for(tok).rendered_rules
- "<span style=\"#{rules.to_a.join(';')}\"#{val}</span>"
- else
- "<span class=\"#{tok.shortname}\">#{val}</span>"
- end
+ @line_number += 1
end
end
end
diff --git a/lib/tasks/gemojione.rake b/lib/tasks/gemojione.rake
index e930ace1041..993112aee3b 100644
--- a/lib/tasks/gemojione.rake
+++ b/lib/tasks/gemojione.rake
@@ -4,7 +4,7 @@ namespace :gemojione do
require 'digest/sha2'
require 'json'
- dir = Gemojione.index.images_path
+ dir = Gemojione.images_path
digests = []
aliases = Hash.new { |hash, key| hash[key] = [] }
aliases_path = File.join(Rails.root, 'fixtures', 'emojis', 'aliases.json')
@@ -50,9 +50,14 @@ namespace :gemojione do
SIZE = 20
RETINA = SIZE * 2
+ # Update these values to the width and height of the spritesheet when
+ # new emoji are added.
+ SPRITESHEET_WIDTH = 860
+ SPRITESHEET_HEIGHT = 840
+
Dir.mktmpdir do |tmpdir|
# Copy the Gemojione assets to the temporary folder for resizing
- FileUtils.cp_r(Gemojione.index.images_path, tmpdir)
+ FileUtils.cp_r(Gemojione.images_path, tmpdir)
Dir.chdir(tmpdir) do
Dir["**/*.png"].each do |png|
@@ -64,7 +69,7 @@ namespace :gemojione do
# Combine the resized assets into a packed sprite and re-generate the SCSS
SpriteFactory.cssurl = "image-url('$IMAGE')"
- SpriteFactory.run!(File.join(tmpdir, 'images'), {
+ SpriteFactory.run!(File.join(tmpdir, 'png'), {
output_style: style_path,
output_image: "app/assets/images/emoji.png",
selector: '.emoji-',
@@ -97,7 +102,7 @@ namespace :gemojione do
only screen and (min-resolution: 192dpi),
only screen and (min-resolution: 2dppx) {
background-image: image-url('emoji@2x.png');
- background-size: 840px 820px;
+ background-size: #{SPRITESHEET_WIDTH}px #{SPRITESHEET_HEIGHT}px;
}
}
CSS
@@ -107,7 +112,7 @@ namespace :gemojione do
# Now do it again but for Retina
Dir.mktmpdir do |tmpdir|
# Copy the Gemojione assets to the temporary folder for resizing
- FileUtils.cp_r(Gemojione.index.images_path, tmpdir)
+ FileUtils.cp_r(Gemojione.images_path, tmpdir)
Dir.chdir(tmpdir) do
Dir["**/*.png"].each do |png|
@@ -116,7 +121,7 @@ namespace :gemojione do
end
# Combine the resized assets into a packed sprite and re-generate the SCSS
- SpriteFactory.run!(File.join(tmpdir, 'images'), {
+ SpriteFactory.run!(File.join(tmpdir), {
output_image: "app/assets/images/emoji@2x.png",
style: false,
nocomments: true,
diff --git a/lib/tasks/gitlab/track_deployment.rake b/lib/tasks/gitlab/track_deployment.rake
new file mode 100644
index 00000000000..84aa2e8507a
--- /dev/null
+++ b/lib/tasks/gitlab/track_deployment.rake
@@ -0,0 +1,9 @@
+namespace :gitlab do
+ desc 'GitLab | Tracks a deployment in GitLab Performance Monitoring'
+ task track_deployment: :environment do
+ metric = Gitlab::Metrics::Metric.
+ new('deployments', version: Gitlab::VERSION)
+
+ Gitlab::Metrics.submit_metrics([metric.to_hash])
+ end
+end
diff --git a/spec/controllers/projects_controller_spec.rb b/spec/controllers/projects_controller_spec.rb
index 1b1b1bdf52d..3edce4d339c 100644
--- a/spec/controllers/projects_controller_spec.rb
+++ b/spec/controllers/projects_controller_spec.rb
@@ -43,6 +43,26 @@ describe ProjectsController do
end
end
+ context "project with empty repo" do
+ let(:empty_project) { create(:project_empty_repo, :public) }
+
+ before { sign_in(user) }
+
+ User.project_views.keys.each do |project_view|
+ context "with #{project_view} view set" do
+ before do
+ user.update_attributes(project_view: project_view)
+
+ get :show, namespace_id: empty_project.namespace.path, id: empty_project.path
+ end
+
+ it "renders the empty project view" do
+ expect(response).to render_template('empty')
+ end
+ end
+ end
+ end
+
context "rendering default project view" do
render_views
diff --git a/spec/factories/ci/builds.rb b/spec/factories/ci/builds.rb
index fe05a0cfc00..5fb671df570 100644
--- a/spec/factories/ci/builds.rb
+++ b/spec/factories/ci/builds.rb
@@ -15,6 +15,11 @@ FactoryGirl.define do
services: ["postgres"]
}
end
+ yaml_variables do
+ [
+ { key: :DB_NAME, value: 'postgres', public: true }
+ ]
+ end
pipeline factory: :ci_pipeline
diff --git a/spec/features/admin/admin_builds_spec.rb b/spec/features/admin/admin_builds_spec.rb
index a6198389f04..e177059d959 100644
--- a/spec/features/admin/admin_builds_spec.rb
+++ b/spec/features/admin/admin_builds_spec.rb
@@ -36,12 +36,45 @@ describe 'Admin Builds' do
end
end
+ context 'Pending tab' do
+ context 'when have pending builds' do
+ it 'shows pending builds' do
+ build1 = create(:ci_build, pipeline: pipeline, status: :pending)
+ build2 = create(:ci_build, pipeline: pipeline, status: :running)
+ build3 = create(:ci_build, pipeline: pipeline, status: :success)
+ build4 = create(:ci_build, pipeline: pipeline, status: :failed)
+
+ visit admin_builds_path(scope: :pending)
+
+ expect(page).to have_selector('.nav-links li.active', text: 'Pending')
+ expect(page.find('.build-link')).to have_content(build1.id)
+ expect(page.find('.build-link')).not_to have_content(build2.id)
+ expect(page.find('.build-link')).not_to have_content(build3.id)
+ expect(page.find('.build-link')).not_to have_content(build4.id)
+ expect(page).to have_link 'Cancel all'
+ end
+ end
+
+ context 'when have no builds pending' do
+ it 'shows a message' do
+ create(:ci_build, pipeline: pipeline, status: :success)
+
+ visit admin_builds_path(scope: :pending)
+
+ expect(page).to have_selector('.nav-links li.active', text: 'Pending')
+ expect(page).to have_content 'No builds to show'
+ expect(page).not_to have_link 'Cancel all'
+ end
+ end
+ end
+
context 'Running tab' do
context 'when have running builds' do
it 'shows running builds' do
- build1 = create(:ci_build, pipeline: pipeline, status: :pending)
+ build1 = create(:ci_build, pipeline: pipeline, status: :running)
build2 = create(:ci_build, pipeline: pipeline, status: :success)
build3 = create(:ci_build, pipeline: pipeline, status: :failed)
+ build4 = create(:ci_build, pipeline: pipeline, status: :pending)
visit admin_builds_path(scope: :running)
@@ -49,6 +82,7 @@ describe 'Admin Builds' do
expect(page.find('.build-link')).to have_content(build1.id)
expect(page.find('.build-link')).not_to have_content(build2.id)
expect(page.find('.build-link')).not_to have_content(build3.id)
+ expect(page.find('.build-link')).not_to have_content(build4.id)
expect(page).to have_link 'Cancel all'
end
end
diff --git a/spec/features/builds_spec.rb b/spec/features/builds_spec.rb
index 16832c297ac..cab3dc1d167 100644
--- a/spec/features/builds_spec.rb
+++ b/spec/features/builds_spec.rb
@@ -13,17 +13,33 @@ describe "Builds" do
end
describe "GET /:project/builds" do
+ context "Pending scope" do
+ before do
+ visit namespace_project_builds_path(@project.namespace, @project, scope: :pending)
+ end
+
+ it "shows Pending tab builds" do
+ expect(page).to have_link 'Cancel running'
+ expect(page).to have_selector('.nav-links li.active', text: 'Pending')
+ expect(page).to have_content @build.short_sha
+ expect(page).to have_content @build.ref
+ expect(page).to have_content @build.name
+ end
+ end
+
context "Running scope" do
before do
@build.run!
visit namespace_project_builds_path(@project.namespace, @project, scope: :running)
end
- it { expect(page).to have_selector('.nav-links li.active', text: 'Running') }
- it { expect(page).to have_link 'Cancel running' }
- it { expect(page).to have_content @build.short_sha }
- it { expect(page).to have_content @build.ref }
- it { expect(page).to have_content @build.name }
+ it "shows Running tab builds" do
+ expect(page).to have_selector('.nav-links li.active', text: 'Running')
+ expect(page).to have_link 'Cancel running'
+ expect(page).to have_content @build.short_sha
+ expect(page).to have_content @build.ref
+ expect(page).to have_content @build.name
+ end
end
context "Finished scope" do
@@ -32,9 +48,11 @@ describe "Builds" do
visit namespace_project_builds_path(@project.namespace, @project, scope: :finished)
end
- it { expect(page).to have_selector('.nav-links li.active', text: 'Finished') }
- it { expect(page).to have_content 'No builds to show' }
- it { expect(page).to have_link 'Cancel running' }
+ it "shows Finished tab builds" do
+ expect(page).to have_selector('.nav-links li.active', text: 'Finished')
+ expect(page).to have_content 'No builds to show'
+ expect(page).to have_link 'Cancel running'
+ end
end
context "All builds" do
@@ -43,11 +61,13 @@ describe "Builds" do
visit namespace_project_builds_path(@project.namespace, @project)
end
- it { expect(page).to have_selector('.nav-links li.active', text: 'All') }
- it { expect(page).to have_content @build.short_sha }
- it { expect(page).to have_content @build.ref }
- it { expect(page).to have_content @build.name }
- it { expect(page).not_to have_link 'Cancel running' }
+ it "shows All tab builds" do
+ expect(page).to have_selector('.nav-links li.active', text: 'All')
+ expect(page).to have_content @build.short_sha
+ expect(page).to have_content @build.ref
+ expect(page).to have_content @build.name
+ expect(page).not_to have_link 'Cancel running'
+ end
end
end
diff --git a/spec/features/compare_spec.rb b/spec/features/compare_spec.rb
new file mode 100644
index 00000000000..c62556948e0
--- /dev/null
+++ b/spec/features/compare_spec.rb
@@ -0,0 +1,42 @@
+require "spec_helper"
+
+describe "Compare", js: true do
+ let(:user) { create(:user) }
+ let(:project) { create(:project) }
+
+ before do
+ project.team << [user, :master]
+ login_as user
+ visit namespace_project_compare_index_path(project.namespace, project, from: "master", to: "master")
+ end
+
+ describe "branches" do
+ it "should pre-populate fields" do
+ expect(page.find_field("from").value).to eq("master")
+ end
+
+ it "should compare branches" do
+ fill_in "from", with: "fea"
+ find("#from").click
+
+ click_link "feature"
+ expect(page.find_field("from").value).to eq("feature")
+
+ click_button "Compare"
+ expect(page).to have_content "Commits"
+ end
+ end
+
+ describe "tags" do
+ it "should compare tags" do
+ fill_in "from", with: "v1.0"
+ find("#from").click
+
+ click_link "v1.0.0"
+ expect(page.find_field("from").value).to eq("v1.0.0")
+
+ click_button "Compare"
+ expect(page).to have_content "Commits"
+ end
+ end
+end
diff --git a/spec/features/expand_collapse_diffs_spec.rb b/spec/features/expand_collapse_diffs_spec.rb
index 78bc888f2a6..688f68d3cff 100644
--- a/spec/features/expand_collapse_diffs_spec.rb
+++ b/spec/features/expand_collapse_diffs_spec.rb
@@ -3,10 +3,11 @@ require 'spec_helper'
feature 'Expand and collapse diffs', js: true, feature: true do
include WaitForAjax
+ let(:branch) { 'expand-collapse-diffs' }
+
before do
login_as :admin
project = create(:project)
- branch = 'expand-collapse-diffs'
# Ensure that undiffable.md is in .gitattributes
project.repository.copy_gitattributes(branch)
@@ -167,6 +168,46 @@ feature 'Expand and collapse diffs', js: true, feature: true do
end
end
+ context 'visiting a commit without collapsed diffs' do
+ let(:branch) { 'feature' }
+
+ it 'does not show Expand all button' do
+ expect(page).not_to have_link('Expand all')
+ end
+ end
+
+ context 'visiting a commit with more than safe files' do
+ let(:branch) { 'expand-collapse-files' }
+
+ # safe-files -> 100 | safe-lines -> 5000 | commit-files -> 105
+ it 'does collapsing from the safe number of files to the end on small files' do
+ expect(page).to have_link('Expand all')
+
+ expect(page).to have_selector('.diff-content', count: 105)
+ expect(page).to have_selector('.diff-collapsed', count: 5)
+
+ %w(file-95.txt file-96.txt file-97.txt file-98.txt file-99.txt).each do |filename|
+ expect(find("[data-blob-diff-path*='#{filename}']")).to have_selector('.diff-collapsed')
+ end
+ end
+ end
+
+ context 'visiting a commit with more than safe lines' do
+ let(:branch) { 'expand-collapse-lines' }
+
+ # safe-files -> 100 | safe-lines -> 5000 | commit_files -> 8 (each 1250 lines)
+ it 'does collapsing from the safe number of lines to the end' do
+ expect(page).to have_link('Expand all')
+
+ expect(page).to have_selector('.diff-content', count: 6)
+ expect(page).to have_selector('.diff-collapsed', count: 2)
+
+ %w(file-4.txt file-5.txt).each do |filename|
+ expect(find("[data-blob-diff-path*='#{filename}']")).to have_selector('.diff-collapsed')
+ end
+ end
+ end
+
context 'expanding all diffs' do
before do
click_link('Expand all')
diff --git a/spec/features/groups_spec.rb b/spec/features/groups_spec.rb
index 891df65216d..2d8b59472e8 100644
--- a/spec/features/groups_spec.rb
+++ b/spec/features/groups_spec.rb
@@ -1,14 +1,26 @@
require 'spec_helper'
feature 'Group', feature: true do
+ before do
+ login_as(:admin)
+ end
+
+ describe 'creating a group with space in group path' do
+ it 'renders new group form with validation errors' do
+ visit new_group_path
+ fill_in 'Group path', with: 'space group'
+
+ click_button 'Create group'
+
+ expect(current_path).to eq(groups_path)
+ expect(page).to have_content("Path can contain only letters, digits, '_', '-' and '.'. Cannot start with '-' or end in '.'.")
+ end
+ end
+
describe 'description' do
let(:group) { create(:group) }
let(:path) { group_path(group) }
- before do
- login_as(:admin)
- end
-
it 'parses Markdown' do
group.update_attribute(:description, 'This is **my** group')
visit path
diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb
index cfe6349a1a1..d51c9abea19 100644
--- a/spec/features/issues_spec.rb
+++ b/spec/features/issues_spec.rb
@@ -121,17 +121,6 @@ describe 'Issues', feature: true do
expect(page).to have_content date.to_s(:medium)
end
end
-
- it 'warns about version conflict' do
- issue.update(title: "New title")
-
- fill_in 'issue_title', with: 'bug 345'
- fill_in 'issue_description', with: 'bug description'
-
- click_button 'Save changes'
-
- expect(page).to have_content 'Someone edited the issue the same time you did'
- end
end
end
diff --git a/spec/features/merge_requests/edit_mr_spec.rb b/spec/features/merge_requests/edit_mr_spec.rb
index 8ad884492d1..9e007ab7635 100644
--- a/spec/features/merge_requests/edit_mr_spec.rb
+++ b/spec/features/merge_requests/edit_mr_spec.rb
@@ -17,16 +17,5 @@ feature 'Edit Merge Request', feature: true do
it 'form should have class js-quick-submit' do
expect(page).to have_selector('.js-quick-submit')
end
-
- it 'warns about version conflict' do
- merge_request.update(title: "New title")
-
- fill_in 'merge_request_title', with: 'bug 345'
- fill_in 'merge_request_description', with: 'bug description'
-
- click_button 'Save changes'
-
- expect(page).to have_content 'Someone edited the merge request the same time you did'
- end
end
end
diff --git a/spec/features/security/project/internal_access_spec.rb b/spec/features/security/project/internal_access_spec.rb
index 13d980a326f..b6acc509342 100644
--- a/spec/features/security/project/internal_access_spec.rb
+++ b/spec/features/security/project/internal_access_spec.rb
@@ -426,4 +426,23 @@ describe "Internal Project Access", feature: true do
it { is_expected.to be_denied_for :external }
it { is_expected.to be_denied_for :visitor }
end
+
+ describe "GET /:project_path/container_registry" do
+ before do
+ stub_container_registry_tags('latest')
+ stub_container_registry_config(enabled: true)
+ end
+
+ subject { namespace_project_container_registry_index_path(project.namespace, project) }
+
+ it { is_expected.to be_allowed_for :admin }
+ it { is_expected.to be_allowed_for owner }
+ it { is_expected.to be_allowed_for master }
+ it { is_expected.to be_allowed_for developer }
+ it { is_expected.to be_allowed_for reporter }
+ it { is_expected.to be_allowed_for guest }
+ it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_denied_for :external }
+ it { is_expected.to be_denied_for :visitor }
+ end
end
diff --git a/spec/features/security/project/private_access_spec.rb b/spec/features/security/project/private_access_spec.rb
index ac9690cc127..ccb5c06dab0 100644
--- a/spec/features/security/project/private_access_spec.rb
+++ b/spec/features/security/project/private_access_spec.rb
@@ -362,4 +362,23 @@ describe "Private Project Access", feature: true do
it { is_expected.to be_denied_for :external }
it { is_expected.to be_denied_for :visitor }
end
+
+ describe "GET /:project_path/container_registry" do
+ before do
+ stub_container_registry_tags('latest')
+ stub_container_registry_config(enabled: true)
+ end
+
+ subject { namespace_project_container_registry_index_path(project.namespace, project) }
+
+ it { is_expected.to be_allowed_for :admin }
+ it { is_expected.to be_allowed_for owner }
+ it { is_expected.to be_allowed_for master }
+ it { is_expected.to be_allowed_for developer }
+ it { is_expected.to be_allowed_for reporter }
+ it { is_expected.to be_denied_for guest }
+ it { is_expected.to be_denied_for :user }
+ it { is_expected.to be_denied_for :external }
+ it { is_expected.to be_denied_for :visitor }
+ end
end
diff --git a/spec/features/security/project/public_access_spec.rb b/spec/features/security/project/public_access_spec.rb
index 737897de52b..985663e7c98 100644
--- a/spec/features/security/project/public_access_spec.rb
+++ b/spec/features/security/project/public_access_spec.rb
@@ -426,4 +426,23 @@ describe "Public Project Access", feature: true do
it { is_expected.to be_denied_for :external }
it { is_expected.to be_denied_for :visitor }
end
+
+ describe "GET /:project_path/container_registry" do
+ before do
+ stub_container_registry_tags('latest')
+ stub_container_registry_config(enabled: true)
+ end
+
+ subject { namespace_project_container_registry_index_path(project.namespace, project) }
+
+ it { is_expected.to be_allowed_for :admin }
+ it { is_expected.to be_allowed_for owner }
+ it { is_expected.to be_allowed_for master }
+ it { is_expected.to be_allowed_for developer }
+ it { is_expected.to be_allowed_for reporter }
+ it { is_expected.to be_allowed_for guest }
+ it { is_expected.to be_allowed_for :user }
+ it { is_expected.to be_allowed_for :external }
+ it { is_expected.to be_allowed_for :visitor }
+ end
end
diff --git a/spec/features/u2f_spec.rb b/spec/features/u2f_spec.rb
index 14613754f74..9335f5bf120 100644
--- a/spec/features/u2f_spec.rb
+++ b/spec/features/u2f_spec.rb
@@ -1,6 +1,8 @@
require 'spec_helper'
feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature: true, js: true do
+ before { allow_any_instance_of(U2fHelper).to receive(:inject_u2f_api?).and_return(true) }
+
def register_u2f_device(u2f_device = nil)
u2f_device ||= FakeU2fDevice.new(page)
u2f_device.respond_to_u2f_registration
@@ -208,21 +210,52 @@ feature 'Using U2F (Universal 2nd Factor) Devices for Authentication', feature:
expect(page.body).to match('Authentication via U2F device failed')
end
end
- end
- describe "when two-factor authentication is disabled" do
- let(:user) { create(:user) }
+ describe "when more than one device has been registered by the same user" do
+ it "allows logging in with either device" do
+ # Register first device
+ user = login_as(:user)
+ user.update_attribute(:otp_required_for_login, true)
+ visit profile_two_factor_auth_path
+ expect(page).to have_content("Your U2F device needs to be set up.")
+ first_device = register_u2f_device
+
+ # Register second device
+ visit profile_two_factor_auth_path
+ expect(page).to have_content("Your U2F device needs to be set up.")
+ second_device = register_u2f_device
+ logout
+
+ # Authenticate as both devices
+ [first_device, second_device].each do |device|
+ login_as(user)
+ device.respond_to_u2f_authentication
+ click_on "Login Via U2F Device"
+ expect(page.body).to match('We heard back from your U2F device')
+ click_on "Authenticate via U2F Device"
- before do
- login_as(user)
- user.update_attribute(:otp_required_for_login, true)
- visit profile_account_path
- click_on 'Manage Two-Factor Authentication'
- register_u2f_device
+ expect(page.body).to match('Signed in successfully')
+
+ logout
+ end
+ end
end
- it "deletes u2f registrations" do
- expect { click_on "Disable" }.to change { U2fRegistration.count }.from(1).to(0)
+ describe "when two-factor authentication is disabled" do
+ let(:user) { create(:user) }
+
+ before do
+ user = login_as(:user)
+ user.update_attribute(:otp_required_for_login, true)
+ visit profile_account_path
+ click_on 'Manage Two-Factor Authentication'
+ expect(page).to have_content("Your U2F device needs to be set up.")
+ register_u2f_device
+ end
+
+ it "deletes u2f registrations" do
+ expect { click_on "Disable" }.to change { U2fRegistration.count }.by(-1)
+ end
end
end
end
diff --git a/spec/fixtures/parallel_diff_result.yml b/spec/fixtures/parallel_diff_result.yml
index 333eda1191a..37066c8e930 100644
--- a/spec/fixtures/parallel_diff_result.yml
+++ b/spec/fixtures/parallel_diff_result.yml
@@ -121,7 +121,7 @@
:type: old
:number: 9
:text: |
- -<span id="LC9" class="line"> <span class="k">raise</span> <span class="s2">&quot;System commands must be given as an array of strings&quot;</span></span>
+ -<span id="LC9" class="line"> <span class="k">raise</span> <span class="s2">"System commands must be given as an array of strings"</span></span>
:line_code: 2f6fcd96b88b36ce98c38da085c795a27d92a3dd_9_9
:position: !ruby/object:Gitlab::Diff::Position
attributes:
@@ -136,7 +136,7 @@
:type: new
:number: 9
:text: |
- +<span id="LC9" class="line"> <span class="k">raise</span> <span class="no"><span class='idiff left'>RuntimeError</span></span><span class="p"><span class='idiff'>,</span></span><span class='idiff right'> </span><span class="s2">&quot;System commands must be given as an array of strings&quot;</span></span>
+ +<span id="LC9" class="line"> <span class="k">raise</span> <span class="no"><span class='idiff left'>RuntimeError</span></span><span class="p"><span class='idiff'>,</span></span><span class='idiff right'> </span><span class="s2">"System commands must be given as an array of strings"</span></span>
:line_code: 2f6fcd96b88b36ce98c38da085c795a27d92a3dd_10_9
:position: !ruby/object:Gitlab::Diff::Position
attributes:
@@ -241,7 +241,7 @@
:type: old
:number: 13
:text: |
- -<span id="LC13" class="line"> <span class="n">vars</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">&quot;PWD&quot;</span> <span class="o">=&gt;</span> <span class="n">path</span> <span class="p">}</span></span>
+ -<span id="LC13" class="line"> <span class="n">vars</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"PWD"</span> <span class="o">=&gt;</span> <span class="n">path</span> <span class="p">}</span></span>
:line_code: 2f6fcd96b88b36ce98c38da085c795a27d92a3dd_13_13
:position: !ruby/object:Gitlab::Diff::Position
attributes:
@@ -315,7 +315,7 @@
:type: new
:number: 15
:text: |
- +<span id="LC15" class="line"> <span class="s2">&quot;PWD&quot;</span> <span class="o">=&gt;</span> <span class="n">path</span></span>
+ +<span id="LC15" class="line"> <span class="s2">"PWD"</span> <span class="o">=&gt;</span> <span class="n">path</span></span>
:line_code: 2f6fcd96b88b36ce98c38da085c795a27d92a3dd_15_15
:position: !ruby/object:Gitlab::Diff::Position
attributes:
@@ -623,7 +623,7 @@
:type:
:number: 20
:text: |2
- <span id="LC26" class="line"> <span class="vi">@cmd_output</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span></span>
+ <span id="LC26" class="line"> <span class="vi">@cmd_output</span> <span class="o">=</span> <span class="s2">""</span></span>
:line_code: 2f6fcd96b88b36ce98c38da085c795a27d92a3dd_20_26
:position: !ruby/object:Gitlab::Diff::Position
attributes:
@@ -638,7 +638,7 @@
:type:
:number: 26
:text: |2
- <span id="LC26" class="line"> <span class="vi">@cmd_output</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span></span>
+ <span id="LC26" class="line"> <span class="vi">@cmd_output</span> <span class="o">=</span> <span class="s2">""</span></span>
:line_code: 2f6fcd96b88b36ce98c38da085c795a27d92a3dd_20_26
:position: !ruby/object:Gitlab::Diff::Position
attributes:
diff --git a/spec/helpers/blob_helper_spec.rb b/spec/helpers/blob_helper_spec.rb
index 6d1c02db297..bd0108f9938 100644
--- a/spec/helpers/blob_helper_spec.rb
+++ b/spec/helpers/blob_helper_spec.rb
@@ -16,19 +16,19 @@ describe BlobHelper do
describe '#highlight' do
it 'should return plaintext for unknown lexer context' do
- result = helper.highlight(blob_name, no_context_content, nowrap: true)
- expect(result).to eq('<span id="LC1" class="line">:type &quot;assem&quot;))</span>')
+ result = helper.highlight(blob_name, no_context_content)
+ expect(result).to eq(%[<pre class="code highlight"><code><span id="LC1" class="line">:type "assem"))</span></code></pre>])
end
it 'should highlight single block' do
- expected = %Q[<span id="LC1" class="line"><span class="p">(</span><span class="nb">make-pathname</span> <span class="ss">:defaults</span> <span class="nv">name</span></span>
-<span id="LC2" class="line"><span class="ss">:type</span> <span class="s">&quot;assem&quot;</span><span class="p">))</span></span>]
+ expected = %Q[<pre class="code highlight"><code><span id="LC1" class="line"><span class="p">(</span><span class="nb">make-pathname</span> <span class="ss">:defaults</span> <span class="nv">name</span></span>
+<span id="LC2" class="line"><span class="ss">:type</span> <span class="s">"assem"</span><span class="p">))</span></span></code></pre>]
- expect(helper.highlight(blob_name, blob_content, nowrap: true)).to eq(expected)
+ expect(helper.highlight(blob_name, blob_content)).to eq(expected)
end
it 'should highlight multi-line comments' do
- result = helper.highlight(blob_name, multiline_content, nowrap: true)
+ result = helper.highlight(blob_name, multiline_content)
html = Nokogiri::HTML(result)
lines = html.search('.s')
expect(lines.count).to eq(3)
@@ -41,33 +41,19 @@ describe BlobHelper do
let(:blob_name) { 'test.diff' }
let(:blob_content) { "+aaa\n+bbb\n- ccc\n ddd\n"}
let(:expected) do
- %q(<span id="LC1" class="line"><span class="gi">+aaa</span></span>
+ %q(<pre class="code highlight"><code><span id="LC1" class="line"><span class="gi">+aaa</span></span>
<span id="LC2" class="line"><span class="gi">+bbb</span></span>
<span id="LC3" class="line"><span class="gd">- ccc</span></span>
-<span id="LC4" class="line"> ddd</span>)
+<span id="LC4" class="line"> ddd</span></code></pre>)
end
it 'should highlight each line properly' do
- result = helper.highlight(blob_name, blob_content, nowrap: true)
+ result = helper.highlight(blob_name, blob_content)
expect(result).to eq(expected)
end
end
end
- describe "#highlighter" do
- it 'should highlight continued blocks' do
- # Both lines have LC1 as ID since formatter doesn't support continue at the moment
- expected = [
- '<span id="LC1" class="line"><span class="p">(</span><span class="nb">make-pathname</span> <span class="ss">:defaults</span> <span class="nv">name</span></span>',
- '<span id="LC1" class="line"><span class="ss">:type</span> <span class="s">&quot;assem&quot;</span><span class="p">))</span></span>'
- ]
-
- highlighter = helper.highlighter(blob_name, blob_content, nowrap: true)
- result = split_content.map{ |content| highlighter.highlight(content) }
- expect(result).to eq(expected)
- end
- end
-
describe "#sanitize_svg" do
let(:input_svg_path) { File.join(Rails.root, 'spec', 'fixtures', 'unsanitized.svg') }
let(:data) { open(input_svg_path).read }
diff --git a/spec/helpers/diff_helper_spec.rb b/spec/helpers/diff_helper_spec.rb
index 4b134a48410..c2fd2c8a533 100644
--- a/spec/helpers/diff_helper_spec.rb
+++ b/spec/helpers/diff_helper_spec.rb
@@ -30,12 +30,31 @@ describe DiffHelper do
expect(helper.diff_view).to eq 'inline'
end
end
-
+
describe 'diff_options' do
- it 'should return hard limit for a diff' do
+ it 'should return hard limit for a diff if force diff is true' do
allow(controller).to receive(:params) { { force_show_diff: true } }
expect(diff_options).to include(Commit.max_diff_options)
end
+
+ it 'should return hard limit for a diff if expand_all_diffs is true' do
+ allow(controller).to receive(:params) { { expand_all_diffs: true } }
+ expect(diff_options).to include(Commit.max_diff_options)
+ end
+
+ it 'should return no collapse false' do
+ expect(diff_options).to include(no_collapse: false)
+ end
+
+ it 'should return no collapse true if expand_all_diffs' do
+ allow(controller).to receive(:params) { { expand_all_diffs: true } }
+ expect(diff_options).to include(no_collapse: true)
+ end
+
+ it 'should return no collapse true if action name diff_for_path' do
+ allow(controller).to receive(:action_name) { 'diff_for_path' }
+ expect(diff_options).to include(no_collapse: true)
+ end
end
describe 'unfold_bottom_class' do
diff --git a/spec/helpers/events_helper_spec.rb b/spec/helpers/events_helper_spec.rb
index c0d2be98e85..6b5e3d93d48 100644
--- a/spec/helpers/events_helper_spec.rb
+++ b/spec/helpers/events_helper_spec.rb
@@ -57,7 +57,7 @@ describe EventsHelper do
expected = '<pre class="code highlight js-syntax-highlight ruby">' \
"<code><span class=\"k\">def</span> <span class=\"nf\">test</span>\n" \
" <span class=\"s1\">\'hello world\'</span>\n" \
- "<span class=\"k\">end</span>" \
+ "<span class=\"k\">end</span>\n" \
'</code></pre>'
expect(helper.event_note(input)).to eq(expected)
end
diff --git a/spec/javascripts/u2f/authenticate_spec.coffee b/spec/javascripts/u2f/authenticate_spec.coffee
index e8a2892d678..8ffeda11704 100644
--- a/spec/javascripts/u2f/authenticate_spec.coffee
+++ b/spec/javascripts/u2f/authenticate_spec.coffee
@@ -5,13 +5,12 @@
#= require ./mock_u2f_device
describe 'U2FAuthenticate', ->
- U2FUtil.enableTestMode()
fixture.load('u2f/authenticate')
beforeEach ->
@u2fDevice = new MockU2FDevice
@container = $("#js-authenticate-u2f")
- @component = new U2FAuthenticate(@container, {}, "token")
+ @component = new U2FAuthenticate(@container, {sign_requests: []}, "token")
@component.start()
it 'allows authenticating via a U2F device', ->
diff --git a/spec/javascripts/u2f/register_spec.js.coffee b/spec/javascripts/u2f/register_spec.js.coffee
index 0858abeca1a..87dc769792b 100644
--- a/spec/javascripts/u2f/register_spec.js.coffee
+++ b/spec/javascripts/u2f/register_spec.js.coffee
@@ -5,7 +5,6 @@
#= require ./mock_u2f_device
describe 'U2FRegister', ->
- U2FUtil.enableTestMode()
fixture.load('u2f/register')
beforeEach ->
diff --git a/spec/lib/banzai/filter/autolink_filter_spec.rb b/spec/lib/banzai/filter/autolink_filter_spec.rb
index 84c2ddf444e..dca7f997570 100644
--- a/spec/lib/banzai/filter/autolink_filter_spec.rb
+++ b/spec/lib/banzai/filter/autolink_filter_spec.rb
@@ -15,6 +15,16 @@ describe Banzai::Filter::AutolinkFilter, lib: true do
expect(filter(act).to_html).to eq exp
end
+ context 'when the input contains no links' do
+ it 'does not parse_html back the rinku returned value' do
+ act = HTML::Pipeline.parse('<p>This text contains no links to autolink</p>')
+
+ expect_any_instance_of(described_class).not_to receive(:parse_html)
+
+ filter(act).to_html
+ end
+ end
+
context 'Rinku schemes' do
it 'autolinks http' do
doc = filter("See #{link}")
@@ -58,6 +68,16 @@ describe Banzai::Filter::AutolinkFilter, lib: true do
expect(filter(act).to_html).to eq exp
end
end
+
+ context 'when the input contains link' do
+ it 'does parse_html back the rinku returned value' do
+ act = HTML::Pipeline.parse("<p>See #{link}</p>")
+
+ expect_any_instance_of(described_class).to receive(:parse_html).at_least(:once).and_call_original
+
+ filter(act).to_html
+ end
+ end
end
context 'other schemes' do
diff --git a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb
index 407617f3307..b1370bca833 100644
--- a/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb
+++ b/spec/lib/banzai/filter/syntax_highlight_filter_spec.rb
@@ -3,15 +3,35 @@ require 'spec_helper'
describe Banzai::Filter::SyntaxHighlightFilter, lib: true do
include FilterSpecHelper
- it 'highlights valid code blocks' do
- result = filter('<pre><code>def fun end</code>')
- expect(result.to_html).to eq("<pre class=\"code highlight js-syntax-highlight plaintext\"><code>def fun end</code></pre>\n")
+ context "when no language is specified" do
+ it "highlights as plaintext" do
+ result = filter('<pre><code>def fun end</code></pre>')
+ expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight plaintext"><code>def fun end</code></pre>')
+ end
end
- it 'passes through invalid code blocks' do
- allow_any_instance_of(described_class).to receive(:block_code).and_raise(StandardError)
+ context "when a valid language is specified" do
+ it "highlights as that language" do
+ result = filter('<pre><code class="ruby">def fun end</code></pre>')
+ expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight ruby"><code><span class="k">def</span> <span class="nf">fun</span> <span class="k">end</span></code></pre>')
+ end
+ end
+
+ context "when an invalid language is specified" do
+ it "highlights as plaintext" do
+ result = filter('<pre><code class="gnuplot">This is a test</code></pre>')
+ expect(result.to_html).to eq('<pre class="code highlight js-syntax-highlight plaintext"><code>This is a test</code></pre>')
+ end
+ end
+
+ context "when Rouge formatting fails" do
+ before do
+ allow_any_instance_of(Rouge::Formatter).to receive(:format).and_raise(StandardError)
+ end
- result = filter('<pre><code>This is a test</code></pre>')
- expect(result.to_html).to eq('<pre>This is a test</pre>')
+ it "highlights as plaintext" do
+ result = filter('<pre><code class="ruby">This is a test</code></pre>')
+ expect(result.to_html).to eq('<pre class="code highlight"><code>This is a test</code></pre>')
+ end
end
end
diff --git a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
index bcbf409c8b0..ad6587b4c25 100644
--- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
+++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb
@@ -19,15 +19,14 @@ module Ci
expect(config_processor.builds_for_stage_and_ref(type, "master").first).to eq({
stage: "test",
stage_idx: 1,
- except: nil,
name: :rspec,
- only: nil,
commands: "pwd\nrspec",
tag_list: [],
options: {},
allow_failure: false,
when: "on_success",
environment: nil,
+ yaml_variables: []
})
end
@@ -432,11 +431,9 @@ module Ci
expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1)
expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({
- except: nil,
stage: "test",
stage_idx: 1,
name: :rspec,
- only: nil,
commands: "pwd\nrspec",
tag_list: [],
options: {
@@ -446,6 +443,7 @@ module Ci
allow_failure: false,
when: "on_success",
environment: nil,
+ yaml_variables: []
})
end
@@ -461,11 +459,9 @@ module Ci
expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1)
expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({
- except: nil,
stage: "test",
stage_idx: 1,
name: :rspec,
- only: nil,
commands: "pwd\nrspec",
tag_list: [],
options: {
@@ -475,101 +471,126 @@ module Ci
allow_failure: false,
when: "on_success",
environment: nil,
+ yaml_variables: []
})
end
end
describe 'Variables' do
- context 'when global variables are defined' do
- it 'returns global variables' do
- variables = {
- VAR1: 'value1',
- VAR2: 'value2',
- }
+ let(:config_processor) { GitlabCiYamlProcessor.new(YAML.dump(config), path) }
- config = YAML.dump({
+ subject { config_processor.builds.first[:yaml_variables] }
+
+ context 'when global variables are defined' do
+ let(:variables) do
+ { VAR1: 'value1', VAR2: 'value2' }
+ end
+ let(:config) do
+ {
variables: variables,
before_script: ['pwd'],
rspec: { script: 'rspec' }
- })
+ }
+ end
- config_processor = GitlabCiYamlProcessor.new(config, path)
+ it 'returns global variables' do
+ expect(subject).to contain_exactly(
+ { key: :VAR1, value: 'value1', public: true },
+ { key: :VAR2, value: 'value2', public: true }
+ )
+ end
+ end
+
+ context 'when job and global variables are defined' do
+ let(:global_variables) do
+ { VAR1: 'global1', VAR3: 'global3' }
+ end
+ let(:job_variables) do
+ { VAR1: 'value1', VAR2: 'value2' }
+ end
+ let(:config) do
+ {
+ before_script: ['pwd'],
+ variables: global_variables,
+ rspec: { script: 'rspec', variables: job_variables }
+ }
+ end
- expect(config_processor.global_variables).to eq(variables)
+ it 'returns all unique variables' do
+ expect(subject).to contain_exactly(
+ { key: :VAR3, value: 'global3', public: true },
+ { key: :VAR1, value: 'value1', public: true },
+ { key: :VAR2, value: 'value2', public: true }
+ )
end
end
context 'when job variables are defined' do
- context 'when syntax is correct' do
- it 'returns job variables' do
- variables = {
- KEY1: 'value1',
- SOME_KEY_2: 'value2'
- }
+ let(:config) do
+ {
+ before_script: ['pwd'],
+ rspec: { script: 'rspec', variables: variables }
+ }
+ end
+
+ context 'when also global variables are defined' do
- config = YAML.dump(
- { before_script: ['pwd'],
- rspec: {
- variables: variables,
- script: 'rspec' }
- })
+ end
- config_processor = GitlabCiYamlProcessor.new(config, path)
+ context 'when syntax is correct' do
+ let(:variables) do
+ { VAR1: 'value1', VAR2: 'value2' }
+ end
- expect(config_processor.job_variables(:rspec)).to eq variables
+ it 'returns job variables' do
+ expect(subject).to contain_exactly(
+ { key: :VAR1, value: 'value1', public: true },
+ { key: :VAR2, value: 'value2', public: true }
+ )
end
end
context 'when syntax is incorrect' do
context 'when variables defined but invalid' do
- it 'raises error' do
- variables = [:KEY1, 'value1', :KEY2, 'value2']
-
- config = YAML.dump(
- { before_script: ['pwd'],
- rspec: {
- variables: variables,
- script: 'rspec' }
- })
+ let(:variables) do
+ [ :VAR1, 'value1', :VAR2, 'value2' ]
+ end
- expect { GitlabCiYamlProcessor.new(config, path) }
+ it 'raises error' do
+ expect { subject }
.to raise_error(GitlabCiYamlProcessor::ValidationError,
- /job: variables should be a map/)
+ /job: variables should be a map/)
end
end
context 'when variables key defined but value not specified' do
- it 'returns empty array' do
- config = YAML.dump(
- { before_script: ['pwd'],
- rspec: {
- variables: nil,
- script: 'rspec' }
- })
-
- config_processor = GitlabCiYamlProcessor.new(config, path)
+ let(:variables) do
+ nil
+ end
+ it 'returns empty array' do
##
# When variables config is empty, we assume this is a valid
# configuration, see issue #18775
#
- expect(config_processor.job_variables(:rspec))
- .to be_an_instance_of(Array).and be_empty
+ expect(subject).to be_an_instance_of(Array)
+ expect(subject).to be_empty
end
end
end
end
context 'when job variables are not defined' do
- it 'returns empty array' do
- config = YAML.dump({
+ let(:config) do
+ {
before_script: ['pwd'],
rspec: { script: 'rspec' }
- })
-
- config_processor = GitlabCiYamlProcessor.new(config, path)
+ }
+ end
- expect(config_processor.job_variables(:rspec)).to eq []
+ it 'returns empty array' do
+ expect(subject).to be_an_instance_of(Array)
+ expect(subject).to be_empty
end
end
end
@@ -681,11 +702,9 @@ module Ci
expect(config_processor.builds_for_stage_and_ref("test", "master").size).to eq(1)
expect(config_processor.builds_for_stage_and_ref("test", "master").first).to eq({
- except: nil,
stage: "test",
stage_idx: 1,
name: :rspec,
- only: nil,
commands: "pwd\nrspec",
tag_list: [],
options: {
@@ -701,6 +720,7 @@ module Ci
when: "on_success",
allow_failure: false,
environment: nil,
+ yaml_variables: []
})
end
@@ -819,17 +839,16 @@ module Ci
it "doesn't create jobs that start with dot" do
expect(subject.size).to eq(1)
expect(subject.first).to eq({
- except: nil,
stage: "test",
stage_idx: 1,
name: :normal_job,
- only: nil,
commands: "test",
tag_list: [],
options: {},
when: "on_success",
allow_failure: false,
environment: nil,
+ yaml_variables: []
})
end
end
@@ -865,30 +884,28 @@ module Ci
it "is correctly supported for jobs" do
expect(subject.size).to eq(2)
expect(subject.first).to eq({
- except: nil,
stage: "build",
stage_idx: 0,
name: :job1,
- only: nil,
commands: "execute-script-for-job",
tag_list: [],
options: {},
when: "on_success",
allow_failure: false,
environment: nil,
+ yaml_variables: []
})
expect(subject.second).to eq({
- except: nil,
stage: "build",
stage_idx: 0,
name: :job2,
- only: nil,
commands: "execute-script-for-job",
tag_list: [],
options: {},
when: "on_success",
allow_failure: false,
environment: nil,
+ yaml_variables: []
})
end
end
diff --git a/spec/lib/container_registry/blob_spec.rb b/spec/lib/container_registry/blob_spec.rb
index 4d8cb787dde..bbacdc67ebd 100644
--- a/spec/lib/container_registry/blob_spec.rb
+++ b/spec/lib/container_registry/blob_spec.rb
@@ -9,8 +9,9 @@ describe ContainerRegistry::Blob do
'size' => 1000
}
end
+ let(:token) { 'authorization-token' }
- let(:registry) { ContainerRegistry::Registry.new('http://example.com') }
+ let(:registry) { ContainerRegistry::Registry.new('http://example.com', token: token) }
let(:repository) { registry.repository('group/test') }
let(:blob) { repository.blob(config) }
@@ -58,4 +59,53 @@ describe ContainerRegistry::Blob do
it { is_expected.to be_truthy }
end
+
+ context '#data' do
+ let(:data) { '{"key":"value"}' }
+
+ subject { blob.data }
+
+ context 'when locally stored' do
+ before do
+ stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:0123456789012345').
+ to_return(
+ status: 200,
+ headers: { 'Content-Type' => 'application/json' },
+ body: data)
+ end
+
+ it { is_expected.to eq(data) }
+ end
+
+ context 'when externally stored' do
+ before do
+ stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:0123456789012345').
+ with(headers: { 'Authorization' => "bearer #{token}" }).
+ to_return(
+ status: 307,
+ headers: { 'Location' => location })
+ end
+
+ context 'for a valid address' do
+ let(:location) { 'http://external.com/blob/file' }
+
+ before do
+ stub_request(:get, location).
+ with(headers: { 'Authorization' => nil }).
+ to_return(
+ status: 200,
+ headers: { 'Content-Type' => 'application/json' },
+ body: data)
+ end
+
+ it { is_expected.to eq(data) }
+ end
+
+ context 'for invalid file' do
+ let(:location) { 'file:///etc/passwd' }
+
+ it { expect{ subject }.to raise_error(ArgumentError, 'invalid address') }
+ end
+ end
+ end
end
diff --git a/spec/lib/container_registry/tag_spec.rb b/spec/lib/container_registry/tag_spec.rb
index c7324c2bf77..c5e31ae82b6 100644
--- a/spec/lib/container_registry/tag_spec.rb
+++ b/spec/lib/container_registry/tag_spec.rb
@@ -77,24 +77,47 @@ describe ContainerRegistry::Tag do
end
context 'config processing' do
- before do
- stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
- with(headers: { 'Accept' => 'application/octet-stream' }).
- to_return(
- status: 200,
- body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
- end
+ shared_examples 'a processable' do
+ context '#config' do
+ subject { tag.config }
- context '#config' do
- subject { tag.config }
+ it { is_expected.not_to be_nil }
+ end
+
+ context '#created_at' do
+ subject { tag.created_at }
- it { is_expected.not_to be_nil }
+ it { is_expected.not_to be_nil }
+ end
end
- context '#created_at' do
- subject { tag.created_at }
+ context 'when locally stored' do
+ before do
+ stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
+ with(headers: { 'Accept' => 'application/octet-stream' }).
+ to_return(
+ status: 200,
+ body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
+ end
+
+ it_behaves_like 'a processable'
+ end
- it { is_expected.not_to be_nil }
+ context 'when externally stored' do
+ before do
+ stub_request(:get, 'http://example.com/v2/group/test/blobs/sha256:d7a513a663c1a6dcdba9ed832ca53c02ac2af0c333322cd6ca92936d1d9917ac').
+ with(headers: { 'Accept' => 'application/octet-stream' }).
+ to_return(
+ status: 307,
+ headers: { 'Location' => 'http://external.com/blob/file' })
+
+ stub_request(:get, 'http://external.com/blob/file').
+ to_return(
+ status: 200,
+ body: File.read(Rails.root + 'spec/fixtures/container_registry/config_blob.json'))
+ end
+
+ it_behaves_like 'a processable'
end
end
end
diff --git a/spec/lib/gitlab/bitbucket_import/client_spec.rb b/spec/lib/gitlab/bitbucket_import/client_spec.rb
index 760d66a1488..7543c29bcc4 100644
--- a/spec/lib/gitlab/bitbucket_import/client_spec.rb
+++ b/spec/lib/gitlab/bitbucket_import/client_spec.rb
@@ -54,12 +54,12 @@ describe Gitlab::BitbucketImport::Client, lib: true do
context 'project import' do
it 'calls .from_project with no errors' do
project = create(:empty_project)
+ project.import_url = "ssh://git@bitbucket.org/test/test.git"
project.create_or_update_import_data(credentials:
{ user: "git",
password: nil,
bb_session: { bitbucket_access_token: "test",
bitbucket_access_token_secret: "test" } })
- project.import_url = "ssh://git@bitbucket.org/test/test.git"
expect { described_class.from_project(project) }.not_to raise_error
end
diff --git a/spec/lib/gitlab/database/migration_helpers_spec.rb b/spec/lib/gitlab/database/migration_helpers_spec.rb
index 9096ad101b0..4ec3f19e03f 100644
--- a/spec/lib/gitlab/database/migration_helpers_spec.rb
+++ b/spec/lib/gitlab/database/migration_helpers_spec.rb
@@ -13,6 +13,10 @@ describe Gitlab::Database::MigrationHelpers, lib: true do
context 'outside a transaction' do
before do
expect(model).to receive(:transaction_open?).and_return(false)
+
+ unless Gitlab::Database.postgresql?
+ allow_any_instance_of(Gitlab::Database::MigrationHelpers).to receive(:disable_statement_timeout)
+ end
end
context 'using PostgreSQL' do
diff --git a/spec/lib/gitlab/diff/file_spec.rb b/spec/lib/gitlab/diff/file_spec.rb
index 0460dcf4658..e883a6eb9c2 100644
--- a/spec/lib/gitlab/diff/file_spec.rb
+++ b/spec/lib/gitlab/diff/file_spec.rb
@@ -32,4 +32,18 @@ describe Gitlab::Diff::File, lib: true do
expect(diff_file.too_large?).to eq(false)
end
end
+
+ describe '#collapsed?' do
+ it 'returns true for a file that is quite big' do
+ expect(diff).to receive(:collapsed?).and_return(true)
+
+ expect(diff_file.collapsed?).to eq(true)
+ end
+
+ it 'returns false for a file that is small enough' do
+ expect(diff).to receive(:collapsed?).and_return(false)
+
+ expect(diff_file.collapsed?).to eq(false)
+ end
+ end
end
diff --git a/spec/lib/gitlab/diff/highlight_spec.rb b/spec/lib/gitlab/diff/highlight_spec.rb
index fb5d50a5c68..88e4115c453 100644
--- a/spec/lib/gitlab/diff/highlight_spec.rb
+++ b/spec/lib/gitlab/diff/highlight_spec.rb
@@ -28,13 +28,13 @@ describe Gitlab::Diff::Highlight, lib: true do
end
it 'highlights and marks removed lines' do
- code = %Q{-<span id="LC9" class="line"> <span class="k">raise</span> <span class="s2">&quot;System commands must be given as an array of strings&quot;</span></span>\n}
+ code = %Q{-<span id="LC9" class="line"> <span class="k">raise</span> <span class="s2">"System commands must be given as an array of strings"</span></span>\n}
expect(subject[4].text).to eq(code)
end
it 'highlights and marks added lines' do
- code = %Q{+<span id="LC9" class="line"> <span class="k">raise</span> <span class="no"><span class='idiff left'>RuntimeError</span></span><span class="p"><span class='idiff'>,</span></span><span class='idiff right'> </span><span class="s2">&quot;System commands must be given as an array of strings&quot;</span></span>\n}
+ code = %Q{+<span id="LC9" class="line"> <span class="k">raise</span> <span class="no"><span class='idiff left'>RuntimeError</span></span><span class="p"><span class='idiff'>,</span></span><span class='idiff right'> </span><span class="s2">"System commands must be given as an array of strings"</span></span>\n}
expect(subject[5].text).to eq(code)
end
diff --git a/spec/lib/gitlab/diff/position_tracer_spec.rb b/spec/lib/gitlab/diff/position_tracer_spec.rb
index 08312e60f4a..c268f84c759 100644
--- a/spec/lib/gitlab/diff/position_tracer_spec.rb
+++ b/spec/lib/gitlab/diff/position_tracer_spec.rb
@@ -1639,7 +1639,8 @@ describe Gitlab::Diff::PositionTracer, lib: true do
committer: committer
}
- repository.merge(current_user, second_create_file_commit.sha, branch_name, options)
+ merge_request = create(:merge_request, source_branch: second_create_file_commit.sha, target_branch: branch_name, source_project: project)
+ repository.merge(current_user, merge_request, options)
project.commit(branch_name)
end
diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb
index c79ba11f782..db33c7a22bb 100644
--- a/spec/lib/gitlab/git_access_spec.rb
+++ b/spec/lib/gitlab/git_access_spec.rb
@@ -6,67 +6,6 @@ describe Gitlab::GitAccess, lib: true do
let(:user) { create(:user) }
let(:actor) { user }
- describe 'can_push_to_branch?' do
- describe 'push to none protected branch' do
- it "returns true if user is a master" do
- project.team << [user, :master]
- expect(access.can_push_to_branch?("random_branch")).to be_truthy
- end
-
- it "returns true if user is a developer" do
- project.team << [user, :developer]
- expect(access.can_push_to_branch?("random_branch")).to be_truthy
- end
-
- it "returns false if user is a reporter" do
- project.team << [user, :reporter]
- expect(access.can_push_to_branch?("random_branch")).to be_falsey
- end
- end
-
- describe 'push to protected branch' do
- before do
- @branch = create :protected_branch, project: project
- end
-
- it "returns true if user is a master" do
- project.team << [user, :master]
- expect(access.can_push_to_branch?(@branch.name)).to be_truthy
- end
-
- it "returns false if user is a developer" do
- project.team << [user, :developer]
- expect(access.can_push_to_branch?(@branch.name)).to be_falsey
- end
-
- it "returns false if user is a reporter" do
- project.team << [user, :reporter]
- expect(access.can_push_to_branch?(@branch.name)).to be_falsey
- end
- end
-
- describe 'push to protected branch if allowed for developers' do
- before do
- @branch = create :protected_branch, project: project, developers_can_push: true
- end
-
- it "returns true if user is a master" do
- project.team << [user, :master]
- expect(access.can_push_to_branch?(@branch.name)).to be_truthy
- end
-
- it "returns true if user is a developer" do
- project.team << [user, :developer]
- expect(access.can_push_to_branch?(@branch.name)).to be_truthy
- end
-
- it "returns false if user is a reporter" do
- project.team << [user, :reporter]
- expect(access.can_push_to_branch?(@branch.name)).to be_falsey
- end
- end
- end
-
describe '#check with single protocols allowed' do
def disable_protocol(protocol)
settings = ::ApplicationSetting.create_from_defaults
@@ -160,96 +99,46 @@ describe Gitlab::GitAccess, lib: true do
end
describe 'push_access_check' do
- def protect_feature_branch
- create(:protected_branch, name: 'feature', project: project)
- end
+ before { merge_into_protected_branch }
+ let(:unprotected_branch) { FFaker::Internet.user_name }
- def changes
- {
- push_new_branch: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/heads/wow",
+ let(:changes) do
+ { push_new_branch: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/heads/wow",
push_master: '6f6d7e7ed 570e7b2ab refs/heads/master',
push_protected_branch: '6f6d7e7ed 570e7b2ab refs/heads/feature',
push_remove_protected_branch: "570e7b2ab #{Gitlab::Git::BLANK_SHA} "\
'refs/heads/feature',
push_tag: '6f6d7e7ed 570e7b2ab refs/tags/v1.0.0',
push_new_tag: "#{Gitlab::Git::BLANK_SHA} 570e7b2ab refs/tags/v7.8.9",
- push_all: ['6f6d7e7ed 570e7b2ab refs/heads/master', '6f6d7e7ed 570e7b2ab refs/heads/feature']
- }
+ push_all: ['6f6d7e7ed 570e7b2ab refs/heads/master', '6f6d7e7ed 570e7b2ab refs/heads/feature'],
+ merge_into_protected_branch: "0b4bc9a #{merge_into_protected_branch} refs/heads/feature" }
end
- def self.permissions_matrix
- {
- master: {
- push_new_branch: true,
- push_master: true,
- push_protected_branch: true,
- push_remove_protected_branch: false,
- push_tag: true,
- push_new_tag: true,
- push_all: true,
- },
-
- developer: {
- push_new_branch: true,
- push_master: true,
- push_protected_branch: false,
- push_remove_protected_branch: false,
- push_tag: false,
- push_new_tag: true,
- push_all: false,
- },
-
- reporter: {
- push_new_branch: false,
- push_master: false,
- push_protected_branch: false,
- push_remove_protected_branch: false,
- push_tag: false,
- push_new_tag: false,
- push_all: false,
- },
-
- guest: {
- push_new_branch: false,
- push_master: false,
- push_protected_branch: false,
- push_remove_protected_branch: false,
- push_tag: false,
- push_new_tag: false,
- push_all: false,
- }
- }
- end
-
- def self.updated_permissions_matrix
- updated_permissions_matrix = permissions_matrix.dup
- updated_permissions_matrix[:developer][:push_protected_branch] = true
- updated_permissions_matrix[:developer][:push_all] = true
- updated_permissions_matrix
+ def stub_git_hooks
+ # Running the `pre-receive` hook is expensive, and not necessary for this test.
+ allow_any_instance_of(GitHooksService).to receive(:execute).and_yield
end
- permissions_matrix.keys.each do |role|
- describe "#{role} access" do
- before { protect_feature_branch }
- before { project.team << [user, role] }
-
- permissions_matrix[role].each do |action, allowed|
- context action do
- subject { access.push_access_check(changes[action]) }
+ def merge_into_protected_branch
+ @protected_branch_merge_commit ||= begin
+ stub_git_hooks
+ project.repository.add_branch(user, unprotected_branch, 'feature')
+ target_branch = project.repository.lookup('feature')
+ source_branch = project.repository.commit_file(user, FFaker::InternetSE.login_user_name, FFaker::HipsterIpsum.paragraph, FFaker::HipsterIpsum.sentence, unprotected_branch, false)
+ rugged = project.repository.rugged
+ author = { email: "email@example.com", time: Time.now, name: "Example Git User" }
- it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey }
- end
- end
+ merge_index = rugged.merge_commits(target_branch, source_branch)
+ Rugged::Commit.create(rugged, author: author, committer: author, message: "commit message", parents: [target_branch, source_branch], tree: merge_index.write_tree(rugged))
end
end
- context "with enabled developers push to protected branches " do
- updated_permissions_matrix.keys.each do |role|
+ def self.run_permission_checks(permissions_matrix)
+ permissions_matrix.keys.each do |role|
describe "#{role} access" do
- before { create(:protected_branch, name: 'feature', developers_can_push: true, project: project) }
before { project.team << [user, role] }
- updated_permissions_matrix[role].each do |action, allowed|
+ permissions_matrix[role].each do |action, allowed|
context action do
subject { access.push_access_check(changes[action]) }
@@ -259,5 +148,97 @@ describe Gitlab::GitAccess, lib: true do
end
end
end
+
+ permissions_matrix = {
+ master: {
+ push_new_branch: true,
+ push_master: true,
+ push_protected_branch: true,
+ push_remove_protected_branch: false,
+ push_tag: true,
+ push_new_tag: true,
+ push_all: true,
+ merge_into_protected_branch: true
+ },
+
+ developer: {
+ push_new_branch: true,
+ push_master: true,
+ push_protected_branch: false,
+ push_remove_protected_branch: false,
+ push_tag: false,
+ push_new_tag: true,
+ push_all: false,
+ merge_into_protected_branch: false
+ },
+
+ reporter: {
+ push_new_branch: false,
+ push_master: false,
+ push_protected_branch: false,
+ push_remove_protected_branch: false,
+ push_tag: false,
+ push_new_tag: false,
+ push_all: false,
+ merge_into_protected_branch: false
+ },
+
+ guest: {
+ push_new_branch: false,
+ push_master: false,
+ push_protected_branch: false,
+ push_remove_protected_branch: false,
+ push_tag: false,
+ push_new_tag: false,
+ push_all: false,
+ merge_into_protected_branch: false
+ }
+ }
+
+ [['feature', 'exact'], ['feat*', 'wildcard']].each do |protected_branch_name, protected_branch_type|
+ context do
+ before { create(:protected_branch, name: protected_branch_name, project: project) }
+
+ run_permission_checks(permissions_matrix)
+ end
+
+ context "when 'developers can push' is turned on for the #{protected_branch_type} protected branch" do
+ before { create(:protected_branch, name: protected_branch_name, developers_can_push: true, project: project) }
+
+ run_permission_checks(permissions_matrix.deep_merge(developer: { push_protected_branch: true, push_all: true, merge_into_protected_branch: true }))
+ end
+
+ context "when 'developers can merge' is turned on for the #{protected_branch_type} protected branch" do
+ before { create(:protected_branch, name: protected_branch_name, developers_can_merge: true, project: project) }
+
+ context "when a merge request exists for the given source/target branch" do
+ context "when the merge request is in progress" do
+ before do
+ create(:merge_request, source_project: project, source_branch: unprotected_branch, target_branch: 'feature', state: 'locked', in_progress_merge_commit_sha: merge_into_protected_branch)
+ end
+
+ run_permission_checks(permissions_matrix.deep_merge(developer: { merge_into_protected_branch: true }))
+ end
+
+ context "when the merge request is not in progress" do
+ before do
+ create(:merge_request, source_project: project, source_branch: unprotected_branch, target_branch: 'feature', in_progress_merge_commit_sha: nil)
+ end
+
+ run_permission_checks(permissions_matrix.deep_merge(developer: { merge_into_protected_branch: false }))
+ end
+ end
+
+ context "when a merge request does not exist for the given source/target branch" do
+ run_permission_checks(permissions_matrix.deep_merge(developer: { merge_into_protected_branch: false }))
+ end
+ end
+
+ context "when 'developers can merge' and 'developers can push' are turned on for the #{protected_branch_type} protected branch" do
+ before { create(:protected_branch, name: protected_branch_name, developers_can_merge: true, developers_can_push: true, project: project) }
+
+ run_permission_checks(permissions_matrix.deep_merge(developer: { push_protected_branch: true, push_all: true, merge_into_protected_branch: true }))
+ end
+ end
end
end
diff --git a/spec/lib/gitlab/import_export/import_export_spec.rb b/spec/lib/gitlab/import_export/import_export_spec.rb
new file mode 100644
index 00000000000..d6409a29550
--- /dev/null
+++ b/spec/lib/gitlab/import_export/import_export_spec.rb
@@ -0,0 +1,21 @@
+require 'spec_helper'
+
+describe Gitlab::ImportExport, services: true do
+ describe 'export filename' do
+ let(:project) { create(:project, :public, path: 'project-path') }
+
+ it 'contains the project path' do
+ expect(described_class.export_filename(project: project)).to include(project.path)
+ end
+
+ it 'contains the namespace path' do
+ expect(described_class.export_filename(project: project)).to include(project.namespace.path)
+ end
+
+ it 'does not go over a certain length' do
+ project.path = 'a' * 100
+
+ expect(described_class.export_filename(project: project).length).to be < 70
+ end
+ end
+end
diff --git a/spec/lib/gitlab/import_export/project.json b/spec/lib/gitlab/import_export/project.json
index 7286b0c39c0..b1a5d72c624 100644
--- a/spec/lib/gitlab/import_export/project.json
+++ b/spec/lib/gitlab/import_export/project.json
@@ -26,6 +26,7 @@
"deleted_at": null,
"due_date": null,
"moved_to_id": null,
+ "test_ee_field": "test",
"notes": [
{
"id": 351,
@@ -2764,7 +2765,7 @@
"committer_email": "dmitriy.zaporozhets@gmail.com"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "Binary files a/.DS_Store and /dev/null differ\n",
"new_path": ".DS_Store",
@@ -3137,7 +3138,7 @@
"committer_email": "dmitriy.zaporozhets@gmail.com"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "--- /dev/null\n+++ b/files/ruby/feature.rb\n@@ -0,0 +1,5 @@\n+class Feature\n+ def foo\n+ puts 'bar'\n+ end\n+end\n",
"new_path": "files/ruby/feature.rb",
@@ -3422,7 +3423,7 @@
"committer_email": "james@jameslopez.es"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "--- /dev/null\n+++ b/test\n",
"new_path": "test",
@@ -3959,7 +3960,7 @@
"committer_email": "dmitriy.zaporozhets@gmail.com"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "Binary files a/.DS_Store and /dev/null differ\n",
"new_path": ".DS_Store",
@@ -4596,7 +4597,7 @@
"committer_email": "marmis85@gmail.com"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
"new_path": "CHANGELOG",
@@ -5107,7 +5108,7 @@
"committer_email": "stanhu@packetzoom.com"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "--- a/CHANGELOG\n+++ b/CHANGELOG\n@@ -1,4 +1,6 @@\n-v 6.7.0\n+v6.8.0\n+\n+v6.7.0\n - Add support for Gemnasium as a Project Service (Olivier Gonzalez)\n - Add edit file button to MergeRequest diff\n - Public groups (Jason Hollingsworth)\n",
"new_path": "CHANGELOG",
@@ -5433,7 +5434,7 @@
"id": 11,
"state": "empty",
"st_commits": null,
- "st_diffs": [
+ "utf8_st_diffs": [
],
"merge_request_id": 11,
@@ -5960,7 +5961,7 @@
"committer_email": "dmitriy.zaporozhets@gmail.com"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "Binary files a/.DS_Store and /dev/null differ\n",
"new_path": ".DS_Store",
@@ -6399,7 +6400,7 @@
"committer_email": "james@jameslopez.es"
}
],
- "st_diffs": [
+ "utf8_st_diffs": [
{
"diff": "--- /dev/null\n+++ b/test\n",
"new_path": "test",
diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
index 05ffec8ea0a..6ae20c943b1 100644
--- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb
@@ -2,6 +2,7 @@ require 'spec_helper'
describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
describe 'restore project tree' do
+
let(:user) { create(:user) }
let(:namespace) { create(:namespace, owner: user) }
let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: "", project_path: 'path') }
@@ -30,6 +31,14 @@ describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
expect(Event.where.not(data: nil).first.data[:ref]).not_to be_empty
end
+ it 'preserves updated_at on issues' do
+ restored_project_json
+
+ issue = Issue.where(description: 'Aliquam enim illo et possimus.').first
+
+ expect(issue.reload.updated_at.to_s).to eq('2016-06-14 15:02:47 UTC')
+ end
+
context 'event at forth level of the tree' do
let(:event) { Event.where(title: 'test levels').first }
@@ -45,6 +54,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer, services: true do
expect(event.note.noteable.project).not_to be_nil
end
end
+
+ it 'has the correct data for merge request st_diffs' do
+ # makes sure we are renaming the custom method +utf8_st_diffs+ into +st_diffs+
+
+ expect { restored_project_json }.to change(MergeRequestDiff.where.not(st_diffs: nil), :count).by(9)
+ end
end
end
end
diff --git a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
index 1424de9e60b..057ef6e76a0 100644
--- a/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
+++ b/spec/lib/gitlab/import_export/project_tree_saver_spec.rb
@@ -102,12 +102,17 @@ describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
it 'has ci pipeline notes' do
expect(saved_project_json['pipelines'].first['notes']).not_to be_empty
end
+
+ it 'does not complain about non UTF-8 characters in MR diffs' do
+ ActiveRecord::Base.connection.execute("UPDATE merge_request_diffs SET st_diffs = '---\n- :diff: !binary |-\n LS0tIC9kZXYvbnVsbAorKysgYi9pbWFnZXMvbnVjb3IucGRmCkBAIC0wLDAg\n KzEsMTY3OSBAQAorJVBERi0xLjUNJeLjz9MNCisxIDAgb2JqDTw8L01ldGFk\n YXR'")
+
+ expect(project_tree_saver.save).to be true
+ end
end
end
def setup_project
issue = create(:issue, assignee: user)
- merge_request = create(:merge_request)
label = create(:label)
snippet = create(:project_snippet)
release = create(:release)
@@ -115,12 +120,12 @@ describe Gitlab::ImportExport::ProjectTreeSaver, services: true do
project = create(:project,
:public,
issues: [issue],
- merge_requests: [merge_request],
labels: [label],
snippets: [snippet],
releases: [release]
)
+ merge_request = create(:merge_request, source_project: project)
commit_status = create(:commit_status, project: project)
ci_pipeline = create(:ci_pipeline,
diff --git a/spec/lib/gitlab/lfs/lfs_router_spec.rb b/spec/lib/gitlab/lfs/lfs_router_spec.rb
deleted file mode 100644
index 659facd6c19..00000000000
--- a/spec/lib/gitlab/lfs/lfs_router_spec.rb
+++ /dev/null
@@ -1,730 +0,0 @@
-require 'spec_helper'
-
-describe Gitlab::Lfs::Router, lib: true do
- let(:project) { create(:project) }
- let(:public_project) { create(:project, :public) }
- let(:forked_project) { fork_project(public_project, user) }
-
- let(:user) { create(:user) }
- let(:user_two) { create(:user) }
- let!(:lfs_object) { create(:lfs_object, :with_file) }
-
- let(:request) { Rack::Request.new(env) }
- let(:env) do
- {
- 'rack.input' => '',
- 'REQUEST_METHOD' => 'GET',
- }
- end
-
- let(:lfs_router_auth) { new_lfs_router(project, user: user) }
- let(:lfs_router_ci_auth) { new_lfs_router(project, ci: true) }
- let(:lfs_router_noauth) { new_lfs_router(project) }
- let(:lfs_router_public_auth) { new_lfs_router(public_project, user: user) }
- let(:lfs_router_public_ci_auth) { new_lfs_router(public_project, ci: true) }
- let(:lfs_router_public_noauth) { new_lfs_router(public_project) }
- let(:lfs_router_forked_noauth) { new_lfs_router(forked_project) }
- let(:lfs_router_forked_auth) { new_lfs_router(forked_project, user: user_two) }
- let(:lfs_router_forked_ci_auth) { new_lfs_router(forked_project, ci: true) }
-
- let(:sample_oid) { "b68143e6463773b1b6c6fd009a76c32aeec041faff32ba2ed42fd7f708a17f80" }
- let(:sample_size) { 499013 }
- let(:respond_with_deprecated) {[ 501, { "Content-Type" => "application/json; charset=utf-8" }, ["{\"message\":\"Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.\",\"documentation_url\":\"#{Gitlab.config.gitlab.url}/help\"}"]]}
- let(:respond_with_disabled) {[ 501, { "Content-Type" => "application/json; charset=utf-8" }, ["{\"message\":\"Git LFS is not enabled on this GitLab server, contact your admin.\",\"documentation_url\":\"#{Gitlab.config.gitlab.url}/help\"}"]]}
-
- describe 'when lfs is disabled' do
- before do
- allow(Gitlab.config.lfs).to receive(:enabled).and_return(false)
- env['REQUEST_METHOD'] = 'POST'
- body = {
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078
- },
- { 'oid' => sample_oid,
- 'size' => sample_size
- }
- ],
- 'operation' => 'upload'
- }.to_json
- env['rack.input'] = StringIO.new(body)
- env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/batch"
- end
-
- it 'responds with 501' do
- expect(lfs_router_auth.try_call).to match_array(respond_with_disabled)
- end
- end
-
- describe 'when fetching lfs object using deprecated API' do
- before do
- enable_lfs
- env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/#{sample_oid}"
- end
-
- it 'responds with 501' do
- expect(lfs_router_auth.try_call).to match_array(respond_with_deprecated)
- end
- end
-
- describe 'when fetching lfs object' do
- before do
- enable_lfs
- env['HTTP_ACCEPT'] = "application/vnd.git-lfs+json; charset=utf-8"
- env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}"
- end
-
- describe 'and request comes from gitlab-workhorse' do
- context 'without user being authorized' do
- it "responds with status 401" do
- expect(lfs_router_noauth.try_call.first).to eq(401)
- end
- end
-
- context 'with required headers' do
- before do
- project.lfs_objects << lfs_object
- env['HTTP_X_SENDFILE_TYPE'] = "X-Sendfile"
- end
-
- context 'when user does not have project access' do
- it "responds with status 403" do
- expect(lfs_router_auth.try_call.first).to eq(403)
- end
- end
-
- context 'when user has project access' do
- before do
- project.team << [user, :master]
- end
-
- it "responds with status 200" do
- expect(lfs_router_auth.try_call.first).to eq(200)
- end
-
- it "responds with the file location" do
- expect(lfs_router_auth.try_call[1]['Content-Type']).to eq("application/octet-stream")
- expect(lfs_router_auth.try_call[1]['X-Sendfile']).to eq(lfs_object.file.path)
- end
- end
-
- context 'when CI is authorized' do
- it "responds with status 200" do
- expect(lfs_router_ci_auth.try_call.first).to eq(200)
- end
-
- it "responds with the file location" do
- expect(lfs_router_ci_auth.try_call[1]['Content-Type']).to eq("application/octet-stream")
- expect(lfs_router_ci_auth.try_call[1]['X-Sendfile']).to eq(lfs_object.file.path)
- end
- end
- end
-
- context 'without required headers' do
- it "responds with status 403" do
- expect(lfs_router_auth.try_call.first).to eq(403)
- end
- end
- end
- end
-
- describe 'when handling lfs request using deprecated API' do
- before do
- enable_lfs
- env['REQUEST_METHOD'] = 'POST'
- env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/info/lfs/objects"
- end
-
- it 'responds with 501' do
- expect(lfs_router_auth.try_call).to match_array(respond_with_deprecated)
- end
- end
-
- describe 'when handling lfs batch request' do
- before do
- enable_lfs
- env['REQUEST_METHOD'] = 'POST'
- env['PATH_INFO'] = "#{project.repository.path_with_namespace}.git/info/lfs/objects/batch"
- end
-
- describe 'download' do
- before do
- body = { 'operation' => 'download',
- 'objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size
- }]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- end
-
- shared_examples 'an authorized requests' do
- context 'when downloading an lfs object that is assigned to our project' do
- before do
- project.lfs_objects << lfs_object
- end
-
- it 'responds with status 200 and href to download' do
- response = router.try_call
- expect(response.first).to eq(200)
- response_body = ActiveSupport::JSON.decode(response.last.first)
-
- expect(response_body).to eq('objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size,
- 'actions' => {
- 'download' => {
- 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
- 'header' => { 'Authorization' => auth }
- }
- }
- }])
- end
- end
-
- context 'when downloading an lfs object that is assigned to other project' do
- before do
- public_project.lfs_objects << lfs_object
- end
-
- it 'responds with status 200 and error message' do
- response = router.try_call
- expect(response.first).to eq(200)
- response_body = ActiveSupport::JSON.decode(response.last.first)
-
- expect(response_body).to eq('objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size,
- 'error' => {
- 'code' => 404,
- 'message' => "Object does not exist on the server or you don't have permissions to access it",
- }
- }])
- end
- end
-
- context 'when downloading a lfs object that does not exist' do
- before do
- body = { 'operation' => 'download',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078
- }]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- end
-
- it "responds with status 200 and error message" do
- response = router.try_call
- expect(response.first).to eq(200)
- response_body = ActiveSupport::JSON.decode(response.last.first)
-
- expect(response_body).to eq('objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078,
- 'error' => {
- 'code' => 404,
- 'message' => "Object does not exist on the server or you don't have permissions to access it",
- }
- }])
- end
- end
-
- context 'when downloading one new and one existing lfs object' do
- before do
- body = { 'operation' => 'download',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078
- },
- { 'oid' => sample_oid,
- 'size' => sample_size
- }
- ]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- project.lfs_objects << lfs_object
- end
-
- it "responds with status 200 with upload hypermedia link for the new object" do
- response = router.try_call
- expect(response.first).to eq(200)
- response_body = ActiveSupport::JSON.decode(response.last.first)
-
- expect(response_body).to eq('objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078,
- 'error' => {
- 'code' => 404,
- 'message' => "Object does not exist on the server or you don't have permissions to access it",
- }
- },
- { 'oid' => sample_oid,
- 'size' => sample_size,
- 'actions' => {
- 'download' => {
- 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
- 'header' => { 'Authorization' => auth }
- }
- }
- }])
- end
- end
- end
-
- context 'when user is authenticated' do
- let(:auth) { authorize(user) }
-
- before do
- env["HTTP_AUTHORIZATION"] = auth
- project.team << [user, role]
- end
-
- it_behaves_like 'an authorized requests' do
- let(:role) { :reporter }
- let(:router) { lfs_router_auth }
- end
-
- context 'when user does is not member of the project' do
- let(:role) { :guest }
-
- it 'responds with 403' do
- expect(lfs_router_auth.try_call.first).to eq(403)
- end
- end
-
- context 'when user does not have download access' do
- let(:role) { :guest }
-
- it 'responds with 403' do
- expect(lfs_router_auth.try_call.first).to eq(403)
- end
- end
- end
-
- context 'when CI is authorized' do
- let(:auth) { 'gitlab-ci-token:password' }
-
- before do
- env["HTTP_AUTHORIZATION"] = auth
- end
-
- it_behaves_like 'an authorized requests' do
- let(:router) { lfs_router_ci_auth }
- end
- end
-
- context 'when user is not authenticated' do
- describe 'is accessing public project' do
- before do
- public_project.lfs_objects << lfs_object
- end
-
- it 'responds with status 200 and href to download' do
- response = lfs_router_public_noauth.try_call
- expect(response.first).to eq(200)
- response_body = ActiveSupport::JSON.decode(response.last.first)
-
- expect(response_body).to eq('objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size,
- 'actions' => {
- 'download' => {
- 'href' => "#{public_project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
- 'header' => {}
- }
- }
- }])
- end
- end
-
- describe 'is accessing non-public project' do
- before do
- project.lfs_objects << lfs_object
- end
-
- it 'responds with authorization required' do
- expect(lfs_router_noauth.try_call.first).to eq(401)
- end
- end
- end
- end
-
- describe 'upload' do
- before do
- body = { 'operation' => 'upload',
- 'objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size
- }]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- end
-
- describe 'when request is authenticated' do
- describe 'when user has project push access' do
- before do
- @auth = authorize(user)
- env["HTTP_AUTHORIZATION"] = @auth
- project.team << [user, :developer]
- end
-
- context 'when pushing an lfs object that already exists' do
- before do
- public_project.lfs_objects << lfs_object
- end
-
- it "responds with status 200 and links the object to the project" do
- response_body = lfs_router_auth.try_call.last
- response = ActiveSupport::JSON.decode(response_body.first)
-
- expect(response['objects']).to be_kind_of(Array)
- expect(response['objects'].first['oid']).to eq(sample_oid)
- expect(response['objects'].first['size']).to eq(sample_size)
- expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
- expect(lfs_object.projects.pluck(:id)).to include(public_project.id)
- expect(response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
- expect(response['objects'].first['actions']['upload']['header']).to eq('Authorization' => @auth)
- end
- end
-
- context 'when pushing a lfs object that does not exist' do
- before do
- body = { 'operation' => 'upload',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078
- }]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- end
-
- it "responds with status 200 and upload hypermedia link" do
- response = lfs_router_auth.try_call
- expect(response.first).to eq(200)
-
- response_body = ActiveSupport::JSON.decode(response.last.first)
- expect(response_body['objects']).to be_kind_of(Array)
- expect(response_body['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
- expect(response_body['objects'].first['size']).to eq(1575078)
- expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
- expect(response_body['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
- expect(response_body['objects'].first['actions']['upload']['header']).to eq('Authorization' => @auth)
- end
- end
-
- context 'when pushing one new and one existing lfs object' do
- before do
- body = { 'operation' => 'upload',
- 'objects' => [
- { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
- 'size' => 1575078
- },
- { 'oid' => sample_oid,
- 'size' => sample_size
- }
- ]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- project.lfs_objects << lfs_object
- end
-
- it "responds with status 200 with upload hypermedia link for the new object" do
- response = lfs_router_auth.try_call
- expect(response.first).to eq(200)
-
- response_body = ActiveSupport::JSON.decode(response.last.first)
- expect(response_body['objects']).to be_kind_of(Array)
-
- expect(response_body['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
- expect(response_body['objects'].first['size']).to eq(1575078)
- expect(response_body['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
- expect(response_body['objects'].first['actions']['upload']['header']).to eq("Authorization" => @auth)
-
- expect(response_body['objects'].last['oid']).to eq(sample_oid)
- expect(response_body['objects'].last['size']).to eq(sample_size)
- expect(response_body['objects'].last).not_to have_key('actions')
- end
- end
- end
-
- context 'when user does not have push access' do
- it 'responds with 403' do
- expect(lfs_router_auth.try_call.first).to eq(403)
- end
- end
-
- context 'when CI is authorized' do
- it 'responds with 401' do
- expect(lfs_router_ci_auth.try_call.first).to eq(401)
- end
- end
- end
-
- context 'when user is not authenticated' do
- context 'when user has push access' do
- before do
- project.team << [user, :master]
- end
-
- it "responds with status 401" do
- expect(lfs_router_public_noauth.try_call.first).to eq(401)
- end
- end
-
- context 'when user does not have push access' do
- it "responds with status 401" do
- expect(lfs_router_public_noauth.try_call.first).to eq(401)
- end
- end
- end
-
- context 'when CI is authorized' do
- let(:auth) { 'gitlab-ci-token:password' }
-
- before do
- env["HTTP_AUTHORIZATION"] = auth
- end
-
- it "responds with status 403" do
- expect(lfs_router_public_ci_auth.try_call.first).to eq(401)
- end
- end
- end
-
- describe 'unsupported' do
- before do
- body = { 'operation' => 'other',
- 'objects' => [
- { 'oid' => sample_oid,
- 'size' => sample_size
- }]
- }.to_json
- env['rack.input'] = StringIO.new(body)
- end
-
- it 'responds with status 404' do
- expect(lfs_router_public_noauth.try_call.first).to eq(404)
- end
- end
- end
-
- describe 'when pushing a lfs object' do
- before do
- enable_lfs
- env['REQUEST_METHOD'] = 'PUT'
- end
-
- shared_examples 'unauthorized' do
- context 'and request is sent by gitlab-workhorse to authorize the request' do
- before do
- header_for_upload_authorize(router.project)
- end
-
- it 'responds with status 401' do
- expect(router.try_call.first).to eq(401)
- end
- end
-
- context 'and request is sent by gitlab-workhorse to finalize the upload' do
- before do
- headers_for_upload_finalize(router.project)
- end
-
- it 'responds with status 401' do
- expect(router.try_call.first).to eq(401)
- end
- end
-
- context 'and request is sent with a malformed headers' do
- before do
- env["PATH_INFO"] = "#{router.project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}"
- env["HTTP_X_GITLAB_LFS_TMP"] = "cat /etc/passwd"
- end
-
- it 'does not recognize it as a valid lfs command' do
- expect(router.try_call).to eq(nil)
- end
- end
- end
-
- shared_examples 'forbidden' do
- context 'and request is sent by gitlab-workhorse to authorize the request' do
- before do
- header_for_upload_authorize(router.project)
- end
-
- it 'responds with 403' do
- expect(router.try_call.first).to eq(403)
- end
- end
-
- context 'and request is sent by gitlab-workhorse to finalize the upload' do
- before do
- headers_for_upload_finalize(router.project)
- end
-
- it 'responds with 403' do
- expect(router.try_call.first).to eq(403)
- end
- end
- end
-
- describe 'to one project' do
- describe 'when user is authenticated' do
- describe 'when user has push access to the project' do
- before do
- project.team << [user, :developer]
- end
-
- context 'and request is sent by gitlab-workhorse to authorize the request' do
- before do
- header_for_upload_authorize(project)
- end
-
- it 'responds with status 200, location of lfs store and object details' do
- json_response = ActiveSupport::JSON.decode(lfs_router_auth.try_call.last.first)
-
- expect(lfs_router_auth.try_call.first).to eq(200)
- expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
- expect(json_response['LfsOid']).to eq(sample_oid)
- expect(json_response['LfsSize']).to eq(sample_size)
- end
- end
-
- context 'and request is sent by gitlab-workhorse to finalize the upload' do
- before do
- headers_for_upload_finalize(project)
- end
-
- it 'responds with status 200 and lfs object is linked to the project' do
- expect(lfs_router_auth.try_call.first).to eq(200)
- expect(lfs_object.projects.pluck(:id)).to include(project.id)
- end
- end
- end
-
- describe 'and user does not have push access' do
- let(:router) { lfs_router_auth }
-
- it_behaves_like 'forbidden'
- end
- end
-
- context 'when CI is authenticated' do
- let(:router) { lfs_router_ci_auth }
-
- it_behaves_like 'unauthorized'
- end
-
- context 'for unauthenticated' do
- let(:router) { new_lfs_router(project) }
-
- it_behaves_like 'unauthorized'
- end
- end
-
- describe 'to a forked project' do
- let(:forked_project) { fork_project(public_project, user) }
-
- describe 'when user is authenticated' do
- describe 'when user has push access to the project' do
- before do
- forked_project.team << [user_two, :developer]
- end
-
- context 'and request is sent by gitlab-workhorse to authorize the request' do
- before do
- header_for_upload_authorize(forked_project)
- end
-
- it 'responds with status 200, location of lfs store and object details' do
- json_response = ActiveSupport::JSON.decode(lfs_router_forked_auth.try_call.last.first)
-
- expect(lfs_router_forked_auth.try_call.first).to eq(200)
- expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
- expect(json_response['LfsOid']).to eq(sample_oid)
- expect(json_response['LfsSize']).to eq(sample_size)
- end
- end
-
- context 'and request is sent by gitlab-workhorse to finalize the upload' do
- before do
- headers_for_upload_finalize(forked_project)
- end
-
- it 'responds with status 200 and lfs object is linked to the source project' do
- expect(lfs_router_forked_auth.try_call.first).to eq(200)
- expect(lfs_object.projects.pluck(:id)).to include(public_project.id)
- end
- end
- end
-
- describe 'and user does not have push access' do
- let(:router) { lfs_router_forked_auth }
-
- it_behaves_like 'forbidden'
- end
- end
-
- context 'when CI is authenticated' do
- let(:router) { lfs_router_forked_ci_auth }
-
- it_behaves_like 'unauthorized'
- end
-
- context 'for unauthenticated' do
- let(:router) { lfs_router_forked_noauth }
-
- it_behaves_like 'unauthorized'
- end
-
- describe 'and second project not related to fork or a source project' do
- let(:second_project) { create(:project) }
- let(:lfs_router_second_project) { new_lfs_router(second_project, user: user) }
-
- before do
- public_project.lfs_objects << lfs_object
- headers_for_upload_finalize(second_project)
- end
-
- context 'when pushing the same lfs object to the second project' do
- before do
- second_project.team << [user, :master]
- end
-
- it 'responds with 200 and links the lfs object to the project' do
- expect(lfs_router_second_project.try_call.first).to eq(200)
- expect(lfs_object.projects.pluck(:id)).to include(second_project.id, public_project.id)
- end
- end
- end
- end
- end
-
- def enable_lfs
- allow(Gitlab.config.lfs).to receive(:enabled).and_return(true)
- end
-
- def authorize(user)
- ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
- end
-
- def new_lfs_router(project, user: nil, ci: false)
- Gitlab::Lfs::Router.new(project, user, ci, request)
- end
-
- def header_for_upload_authorize(project)
- env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize"
- end
-
- def headers_for_upload_finalize(project)
- env["PATH_INFO"] = "#{project.repository.path_with_namespace}.git/gitlab-lfs/objects/#{sample_oid}/#{sample_size}"
- env["HTTP_X_GITLAB_LFS_TMP"] = "#{sample_oid}6e561c9d4"
- end
-
- def fork_project(project, user, object = nil)
- allow(RepositoryForkWorker).to receive(:perform_async).and_return(true)
- Projects::ForkService.new(project, user, {}).execute
- end
-end
diff --git a/spec/lib/gitlab/user_access_spec.rb b/spec/lib/gitlab/user_access_spec.rb
new file mode 100644
index 00000000000..aa9ec243498
--- /dev/null
+++ b/spec/lib/gitlab/user_access_spec.rb
@@ -0,0 +1,88 @@
+require 'spec_helper'
+
+describe Gitlab::UserAccess, lib: true do
+ let(:access) { Gitlab::UserAccess.new(user, project: project) }
+ let(:project) { create(:project) }
+ let(:user) { create(:user) }
+
+ describe 'can_push_to_branch?' do
+ describe 'push to none protected branch' do
+ it 'returns true if user is a master' do
+ project.team << [user, :master]
+ expect(access.can_push_to_branch?('random_branch')).to be_truthy
+ end
+
+ it 'returns true if user is a developer' do
+ project.team << [user, :developer]
+ expect(access.can_push_to_branch?('random_branch')).to be_truthy
+ end
+
+ it 'returns false if user is a reporter' do
+ project.team << [user, :reporter]
+ expect(access.can_push_to_branch?('random_branch')).to be_falsey
+ end
+ end
+
+ describe 'push to protected branch' do
+ let(:branch) { create :protected_branch, project: project }
+
+ it 'returns true if user is a master' do
+ project.team << [user, :master]
+ expect(access.can_push_to_branch?(branch.name)).to be_truthy
+ end
+
+ it 'returns false if user is a developer' do
+ project.team << [user, :developer]
+ expect(access.can_push_to_branch?(branch.name)).to be_falsey
+ end
+
+ it 'returns false if user is a reporter' do
+ project.team << [user, :reporter]
+ expect(access.can_push_to_branch?(branch.name)).to be_falsey
+ end
+ end
+
+ describe 'push to protected branch if allowed for developers' do
+ before do
+ @branch = create :protected_branch, project: project, developers_can_push: true
+ end
+
+ it 'returns true if user is a master' do
+ project.team << [user, :master]
+ expect(access.can_push_to_branch?(@branch.name)).to be_truthy
+ end
+
+ it 'returns true if user is a developer' do
+ project.team << [user, :developer]
+ expect(access.can_push_to_branch?(@branch.name)).to be_truthy
+ end
+
+ it 'returns false if user is a reporter' do
+ project.team << [user, :reporter]
+ expect(access.can_push_to_branch?(@branch.name)).to be_falsey
+ end
+ end
+
+ describe 'merge to protected branch if allowed for developers' do
+ before do
+ @branch = create :protected_branch, project: project, developers_can_merge: true
+ end
+
+ it 'returns true if user is a master' do
+ project.team << [user, :master]
+ expect(access.can_merge_to_branch?(@branch.name)).to be_truthy
+ end
+
+ it 'returns true if user is a developer' do
+ project.team << [user, :developer]
+ expect(access.can_merge_to_branch?(@branch.name)).to be_truthy
+ end
+
+ it 'returns false if user is a reporter' do
+ project.team << [user, :reporter]
+ expect(access.can_merge_to_branch?(@branch.name)).to be_falsey
+ end
+ end
+
+ end
+end
diff --git a/spec/models/build_spec.rb b/spec/models/build_spec.rb
index e8171788872..481416319dd 100644
--- a/spec/models/build_spec.rb
+++ b/spec/models/build_spec.rb
@@ -208,7 +208,7 @@ describe Ci::Build, models: true do
end
before do
- build.update_attributes(stage: 'stage')
+ build.update_attributes(stage: 'stage', yaml_variables: yaml_variables)
end
it { is_expected.to eq(predefined_variables + yaml_variables) }
@@ -260,22 +260,6 @@ describe Ci::Build, models: true do
it { is_expected.to eq(predefined_variables + predefined_trigger_variable + yaml_variables + secure_variables + trigger_variables) }
end
-
- context 'when job variables are defined' do
- ##
- # Job-level variables are defined in gitlab_ci.yml fixture
- #
- context 'when job variables are unique' do
- let(:build) { create(:ci_build, name: 'staging') }
-
- it 'includes job variables' do
- expect(subject).to include(
- { key: :KEY1, value: 'value1', public: true },
- { key: :KEY2, value: 'value2', public: true }
- )
- end
- end
- end
end
end
end
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index 4e5481f9154..10db79bd15f 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -5,9 +5,12 @@ describe Ci::Pipeline, models: true do
let(:pipeline) { FactoryGirl.create :ci_pipeline, project: project }
it { is_expected.to belong_to(:project) }
+ it { is_expected.to belong_to(:user) }
+
it { is_expected.to have_many(:statuses) }
it { is_expected.to have_many(:trigger_requests) }
it { is_expected.to have_many(:builds) }
+
it { is_expected.to validate_presence_of :sha }
it { is_expected.to validate_presence_of :status }
diff --git a/spec/models/commit_status_spec.rb b/spec/models/commit_status_spec.rb
index 05f22c7a9eb..ff6371ad685 100644
--- a/spec/models/commit_status_spec.rb
+++ b/spec/models/commit_status_spec.rb
@@ -177,10 +177,10 @@ describe CommitStatus, models: true do
describe '#stages' do
before do
- FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'build', stage_idx: 0, status: 'success'
- FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'build', stage_idx: 0, status: 'failed'
- FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'deploy', stage_idx: 2, status: 'running'
- FactoryGirl.create :commit_status, pipeline: pipeline, stage: 'test', stage_idx: 1, status: 'success'
+ create :commit_status, pipeline: pipeline, stage: 'build', name: 'linux', stage_idx: 0, status: 'success'
+ create :commit_status, pipeline: pipeline, stage: 'build', name: 'mac', stage_idx: 0, status: 'failed'
+ create :commit_status, pipeline: pipeline, stage: 'deploy', name: 'staging', stage_idx: 2, status: 'running'
+ create :commit_status, pipeline: pipeline, stage: 'test', name: 'rspec', stage_idx: 1, status: 'success'
end
context 'stages list' do
@@ -192,7 +192,7 @@ describe CommitStatus, models: true do
end
context 'stages with statuses' do
- subject { CommitStatus.where(pipeline: pipeline).stages_status }
+ subject { CommitStatus.where(pipeline: pipeline).latest.stages_status }
it 'return list of stages with statuses' do
is_expected.to eq({
@@ -201,6 +201,20 @@ describe CommitStatus, models: true do
'deploy' => 'running'
})
end
+
+ context 'when build is retried' do
+ before do
+ create :commit_status, pipeline: pipeline, stage: 'build', name: 'mac', stage_idx: 0, status: 'success'
+ end
+
+ it 'ignores a previous state' do
+ is_expected.to eq({
+ 'build' => 'success',
+ 'test' => 'success',
+ 'deploy' => 'running'
+ })
+ end
+ end
end
end
diff --git a/spec/models/legacy_diff_note_spec.rb b/spec/models/legacy_diff_note_spec.rb
index d64d89edbd3..d23fc06c3ad 100644
--- a/spec/models/legacy_diff_note_spec.rb
+++ b/spec/models/legacy_diff_note_spec.rb
@@ -16,10 +16,10 @@ describe LegacyDiffNote, models: true do
end
describe '#active?' do
- it 'is always true when the note has no associated diff' do
+ it 'is always true when the note has no associated diff line' do
note = build(:legacy_diff_note_on_merge_request)
- expect(note).to receive(:diff).and_return(nil)
+ expect(note).to receive(:diff_line).and_return(nil)
expect(note).to be_active
end
@@ -27,7 +27,7 @@ describe LegacyDiffNote, models: true do
it 'is never true when the note has no noteable associated' do
note = build(:legacy_diff_note_on_merge_request)
- expect(note).to receive(:diff).and_return(double)
+ expect(note).to receive(:diff_line).and_return(double)
expect(note).to receive(:noteable).and_return(nil)
expect(note).not_to be_active
@@ -47,7 +47,7 @@ describe LegacyDiffNote, models: true do
merge = build_stubbed(:merge_request, :simple)
note = build(:legacy_diff_note_on_merge_request, noteable: merge)
- allow(note).to receive(:diff).and_return(double)
+ allow(note).to receive(:diff_line).and_return(double)
expect(note).to receive(:find_noteable_diff).and_return(nil)
expect(note).not_to be_active
diff --git a/spec/models/project_services/builds_email_service_spec.rb b/spec/models/project_services/builds_email_service_spec.rb
index 236df8f047d..ca2cd8aa551 100644
--- a/spec/models/project_services/builds_email_service_spec.rb
+++ b/spec/models/project_services/builds_email_service_spec.rb
@@ -23,6 +23,44 @@ describe BuildsEmailService do
end
end
+ describe '#test_data' do
+ let(:build) { create(:ci_build) }
+ let(:project) { build.project }
+ let(:user) { create(:user) }
+
+ before { project.team << [user, :developer] }
+
+ it 'builds test data' do
+ data = subject.test_data(project)
+
+ expect(data[:object_kind]).to eq("build")
+ end
+ end
+
+ describe '#test' do
+ it 'sends email' do
+ data = Gitlab::BuildDataBuilder.build(create(:ci_build))
+ subject.recipients = 'test@gitlab.com'
+
+ expect(BuildEmailWorker).to receive(:perform_async)
+
+ subject.test(data)
+ end
+
+ context 'notify only failed builds is true' do
+ it 'sends email' do
+ data = Gitlab::BuildDataBuilder.build(create(:ci_build))
+ data[:build_status] = "success"
+ subject.recipients = 'test@gitlab.com'
+
+ expect(subject).not_to receive(:notify_only_broken_builds)
+ expect(BuildEmailWorker).to receive(:perform_async)
+
+ subject.test(data)
+ end
+ end
+ end
+
describe '#execute' do
it 'sends email' do
subject.recipients = 'test@gitlab.com'
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index d2269854354..9dc34276f18 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -130,17 +130,35 @@ describe Project, models: true do
end
end
- it 'should not allow an invalid URI as import_url' do
+ it 'does not allow an invalid URI as import_url' do
project2 = build(:project, import_url: 'invalid://')
expect(project2).not_to be_valid
end
- it 'should allow a valid URI as import_url' do
+ it 'does allow a valid URI as import_url' do
project2 = build(:project, import_url: 'ssh://test@gitlab.com/project.git')
expect(project2).to be_valid
end
+
+ it 'allows an empty URI' do
+ project2 = build(:project, import_url: '')
+
+ expect(project2).to be_valid
+ end
+
+ it 'does not produce import data on an empty URI' do
+ project2 = build(:project, import_url: '')
+
+ expect(project2.import_data).to be_nil
+ end
+
+ it 'does not produce import data on an invalid URI' do
+ project2 = build(:project, import_url: 'test://')
+
+ expect(project2.import_data).to be_nil
+ end
end
describe 'default_scope' do
diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb
index b39b958450c..e14cec589fe 100644
--- a/spec/models/repository_spec.rb
+++ b/spec/models/repository_spec.rb
@@ -4,16 +4,17 @@ describe Repository, models: true do
include RepoHelpers
TestBlob = Struct.new(:name)
- let(:repository) { create(:project).repository }
+ let(:project) { create(:project) }
+ let(:repository) { 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_sha = repository.merge(user, source_sha, 'master', commit_options)
- repository.commit(merge_commit_sha)
+ merge_request = create(:merge_request, source_branch: 'feature', target_branch: 'master', source_project: project)
+ merge_commit_id = repository.merge(user, merge_request, commit_options)
+ repository.commit(merge_commit_id)
end
describe '#branch_names_contains' do
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index ff39f187759..fc74488ac0e 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -31,6 +31,8 @@ describe User, models: true do
it { is_expected.to have_many(:spam_logs).dependent(:destroy) }
it { is_expected.to have_many(:todos).dependent(:destroy) }
it { is_expected.to have_many(:award_emoji).dependent(:destroy) }
+ it { is_expected.to have_many(:builds).dependent(:nullify) }
+ it { is_expected.to have_many(:pipelines).dependent(:nullify) }
describe '#group_members' do
it 'does not include group memberships for which user is a requester' do
diff --git a/spec/requests/api/api_helpers_spec.rb b/spec/requests/api/api_helpers_spec.rb
index 83025953889..831889afb6c 100644
--- a/spec/requests/api/api_helpers_spec.rb
+++ b/spec/requests/api/api_helpers_spec.rb
@@ -49,7 +49,7 @@ describe API::Helpers, api: true do
it "should return nil for a user without access" do
env[API::Helpers::PRIVATE_TOKEN_HEADER] = user.private_token
- allow(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
+ allow_any_instance_of(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
expect(current_user).to be_nil
end
@@ -73,7 +73,7 @@ describe API::Helpers, api: true do
it "should return nil for a user without access" do
env[API::Helpers::PRIVATE_TOKEN_HEADER] = personal_access_token.token
- allow(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
+ allow_any_instance_of(Gitlab::UserAccess).to receive(:allowed?).and_return(false)
expect(current_user).to be_nil
end
@@ -211,4 +211,27 @@ describe API::Helpers, api: true do
expect(sudo_identifier).to eq(' 123')
end
end
+
+ describe '.to_boolean' do
+ it 'converts a valid string to a boolean' do
+ expect(to_boolean('true')).to be_truthy
+ expect(to_boolean('YeS')).to be_truthy
+ expect(to_boolean('t')).to be_truthy
+ expect(to_boolean('1')).to be_truthy
+ expect(to_boolean('ON')).to be_truthy
+ expect(to_boolean('FaLse')).to be_falsy
+ expect(to_boolean('F')).to be_falsy
+ expect(to_boolean('NO')).to be_falsy
+ expect(to_boolean('n')).to be_falsy
+ expect(to_boolean('0')).to be_falsy
+ expect(to_boolean('oFF')).to be_falsy
+ end
+
+ it 'converts an invalid string to nil' do
+ expect(to_boolean('fals')).to be_nil
+ expect(to_boolean('yeah')).to be_nil
+ expect(to_boolean('')).to be_nil
+ expect(to_boolean(nil)).to be_nil
+ end
+ end
end
diff --git a/spec/requests/api/award_emoji_spec.rb b/spec/requests/api/award_emoji_spec.rb
index 72a6d45f47d..2b74dd4bbb0 100644
--- a/spec/requests/api/award_emoji_spec.rb
+++ b/spec/requests/api/award_emoji_spec.rb
@@ -135,6 +135,22 @@ describe API::API, api: true do
expect(response).to have_http_status(401)
end
+
+ it "normalizes +1 as thumbsup award" do
+ post api("/projects/#{project.id}/issues/#{issue.id}/award_emoji", user), name: '+1'
+
+ expect(issue.award_emoji.last.name).to eq("thumbsup")
+ end
+
+ context 'when the emoji already has been awarded' do
+ it 'returns a 404 status code' do
+ post api("/projects/#{project.id}/issues/#{issue.id}/award_emoji", user), name: 'thumbsup'
+ post api("/projects/#{project.id}/issues/#{issue.id}/award_emoji", user), name: 'thumbsup'
+
+ expect(response).to have_http_status(404)
+ expect(json_response["message"]).to match("has already been taken")
+ end
+ end
end
end
@@ -147,6 +163,22 @@ describe API::API, api: true do
expect(response).to have_http_status(201)
expect(json_response['user']['username']).to eq(user.username)
end
+
+ it "normalizes +1 as thumbsup award" do
+ post api("/projects/#{project.id}/issues/#{issue.id}/notes/#{note.id}/award_emoji", user), name: '+1'
+
+ expect(note.award_emoji.last.name).to eq("thumbsup")
+ end
+
+ context 'when the emoji already has been awarded' do
+ it 'returns a 404 status code' do
+ post api("/projects/#{project.id}/issues/#{issue.id}/notes/#{note.id}/award_emoji", user), name: 'rocket'
+ post api("/projects/#{project.id}/issues/#{issue.id}/notes/#{note.id}/award_emoji", user), name: 'rocket'
+
+ expect(response).to have_http_status(404)
+ expect(json_response["message"]).to match("has already been taken")
+ end
+ end
end
describe 'DELETE /projects/:id/awardable/:awardable_id/award_emoji/:award_id' do
diff --git a/spec/requests/api/branches_spec.rb b/spec/requests/api/branches_spec.rb
index b11ca26ee68..719da27f919 100644
--- a/spec/requests/api/branches_spec.rb
+++ b/spec/requests/api/branches_spec.rb
@@ -32,6 +32,8 @@ describe API::API, api: true do
expect(json_response['name']).to eq(branch_name)
expect(json_response['commit']['id']).to eq(branch_sha)
expect(json_response['protected']).to eq(false)
+ expect(json_response['developers_can_push']).to eq(false)
+ expect(json_response['developers_can_merge']).to eq(false)
end
it "should return a 403 error if guest" do
@@ -45,14 +47,95 @@ describe API::API, api: true do
end
end
- describe "PUT /projects/:id/repository/branches/:branch/protect" do
- it "should protect a single branch" do
+ describe 'PUT /projects/:id/repository/branches/:branch/protect' do
+ it 'protects a single branch' do
put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user)
+
expect(response).to have_http_status(200)
+ expect(json_response['name']).to eq(branch_name)
+ expect(json_response['commit']['id']).to eq(branch_sha)
+ expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(false)
+ expect(json_response['developers_can_merge']).to eq(false)
+ end
+
+ it 'protects a single branch and developers can push' do
+ put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+ developers_can_push: true
+
+ expect(response).to have_http_status(200)
+ expect(json_response['name']).to eq(branch_name)
+ expect(json_response['commit']['id']).to eq(branch_sha)
+ expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(true)
+ expect(json_response['developers_can_merge']).to eq(false)
+ end
+ it 'protects a single branch and developers can merge' do
+ put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+ developers_can_merge: true
+
+ expect(response).to have_http_status(200)
expect(json_response['name']).to eq(branch_name)
expect(json_response['commit']['id']).to eq(branch_sha)
expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(false)
+ expect(json_response['developers_can_merge']).to eq(true)
+ end
+
+ it 'protects a single branch and developers can push and merge' do
+ put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+ developers_can_push: true, developers_can_merge: true
+
+ expect(response).to have_http_status(200)
+ expect(json_response['name']).to eq(branch_name)
+ expect(json_response['commit']['id']).to eq(branch_sha)
+ expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(true)
+ expect(json_response['developers_can_merge']).to eq(true)
+ end
+
+ it 'protects a single branch and developers cannot push and merge' do
+ put api("/projects/#{project.id}/repository/branches/#{branch_name}/protect", user),
+ developers_can_push: 'tru', developers_can_merge: 'tr'
+
+ expect(response).to have_http_status(200)
+ expect(json_response['name']).to eq(branch_name)
+ expect(json_response['commit']['id']).to eq(branch_sha)
+ expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(false)
+ expect(json_response['developers_can_merge']).to eq(false)
+ end
+
+ context 'on a protected branch' do
+ let(:protected_branch) { 'foo' }
+
+ before do
+ project.repository.add_branch(user, protected_branch, 'master')
+ create(:protected_branch, project: project, name: protected_branch, developers_can_push: true, developers_can_merge: true)
+ end
+
+ it 'updates that a developer can push' do
+ put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
+ developers_can_push: false, developers_can_merge: false
+
+ expect(response).to have_http_status(200)
+ expect(json_response['name']).to eq(protected_branch)
+ expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(false)
+ expect(json_response['developers_can_merge']).to eq(false)
+ end
+
+ it 'does not update that a developer can push' do
+ put api("/projects/#{project.id}/repository/branches/#{protected_branch}/protect", user),
+ developers_can_push: 'foobar', developers_can_merge: 'foo'
+
+ expect(response).to have_http_status(200)
+ expect(json_response['name']).to eq(protected_branch)
+ expect(json_response['protected']).to eq(true)
+ expect(json_response['developers_can_push']).to eq(true)
+ expect(json_response['developers_can_merge']).to eq(true)
+ end
end
it "should return a 404 error if branch not found" do
diff --git a/spec/requests/api/internal_spec.rb b/spec/requests/api/internal_spec.rb
index e567d36afa8..f6f85d6e95e 100644
--- a/spec/requests/api/internal_spec.rb
+++ b/spec/requests/api/internal_spec.rb
@@ -56,13 +56,21 @@ describe API::API, api: true do
context "git push with project.wiki" do
it 'responds with success' do
- project_wiki = create(:project, name: 'my.wiki', path: 'my.wiki')
- project_wiki.team << [user, :developer]
+ push(key, project.wiki)
- push(key, project_wiki)
+ expect(response).to have_http_status(200)
+ expect(json_response["status"]).to be_truthy
+ expect(json_response["repository_path"]).to eq(project.wiki.repository.path_to_repo)
+ end
+ end
+
+ context "git pull with project.wiki" do
+ it 'responds with success' do
+ pull(key, project.wiki)
expect(response).to have_http_status(200)
expect(json_response["status"]).to be_truthy
+ expect(json_response["repository_path"]).to eq(project.wiki.repository.path_to_repo)
end
end
diff --git a/spec/requests/api/issues_spec.rb b/spec/requests/api/issues_spec.rb
index 6adccb4ebae..12f2cfa6942 100644
--- a/spec/requests/api/issues_spec.rb
+++ b/spec/requests/api/issues_spec.rb
@@ -503,6 +503,20 @@ describe API::API, api: true do
])
end
+ context 'with due date' do
+ it 'creates a new project issue' do
+ due_date = 2.weeks.from_now.strftime('%Y-%m-%d')
+
+ post api("/projects/#{project.id}/issues", user),
+ title: 'new issue', due_date: due_date
+
+ expect(response).to have_http_status(201)
+ expect(json_response['title']).to eq('new issue')
+ expect(json_response['description']).to be_nil
+ expect(json_response['due_date']).to eq(due_date)
+ end
+ end
+
context 'when an admin or owner makes the request' do
it 'accepts the creation date to be set' do
creation_time = 2.weeks.ago
@@ -683,6 +697,17 @@ describe API::API, api: true do
end
end
+ describe 'PUT /projects/:id/issues/:issue_id to update due date' do
+ it 'creates a new project issue' do
+ due_date = 2.weeks.from_now.strftime('%Y-%m-%d')
+
+ put api("/projects/#{project.id}/issues/#{issue.id}", user), due_date: due_date
+
+ expect(response).to have_http_status(200)
+ expect(json_response['due_date']).to eq(due_date)
+ end
+ end
+
describe "DELETE /projects/:id/issues/:issue_id" do
it "rejects a non member from deleting an issue" do
delete api("/projects/#{project.id}/issues/#{issue.id}", non_member)
diff --git a/spec/requests/api/todos_spec.rb b/spec/requests/api/todos_spec.rb
index 92a4fa216cd..3ccd0af652f 100644
--- a/spec/requests/api/todos_spec.rb
+++ b/spec/requests/api/todos_spec.rb
@@ -134,8 +134,7 @@ describe API::Todos, api: true do
delete api('/todos', john_doe)
expect(response.status).to eq(200)
- expect(json_response).to be_an Array
- expect(json_response.length).to eq(3)
+ expect(response.body).to eq('3')
expect(pending_1.reload).to be_done
expect(pending_2.reload).to be_done
expect(pending_3.reload).to be_done
diff --git a/spec/requests/lfs_http_spec.rb b/spec/requests/lfs_http_spec.rb
new file mode 100644
index 00000000000..93d2bc160cc
--- /dev/null
+++ b/spec/requests/lfs_http_spec.rb
@@ -0,0 +1,768 @@
+require 'spec_helper'
+
+describe Gitlab::Lfs::Router do
+ let(:user) { create(:user) }
+ let!(:lfs_object) { create(:lfs_object, :with_file) }
+
+ let(:headers) do
+ {
+ 'Authorization' => authorization,
+ 'X-Sendfile-Type' => sendfile
+ }.compact
+ end
+ let(:authorization) { }
+ let(:sendfile) { }
+
+ let(:sample_oid) { lfs_object.oid }
+ let(:sample_size) { lfs_object.size }
+
+ describe 'when lfs is disabled' do
+ let(:project) { create(:empty_project) }
+ let(:body) do
+ {
+ 'objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078
+ },
+ { 'oid' => sample_oid,
+ 'size' => sample_size
+ }
+ ],
+ 'operation' => 'upload'
+ }
+ end
+
+ before do
+ allow(Gitlab.config.lfs).to receive(:enabled).and_return(false)
+ post_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ end
+
+ it 'responds with 501' do
+ expect(response).to have_http_status(501)
+ expect(json_response).to include('message' => 'Git LFS is not enabled on this GitLab server, contact your admin.')
+ end
+ end
+
+ describe 'deprecated API' do
+ let(:project) { create(:empty_project) }
+
+ before do
+ enable_lfs
+ end
+
+ shared_examples 'a deprecated' do
+ it 'responds with 501' do
+ expect(response).to have_http_status(501)
+ end
+
+ it 'returns deprecated message' do
+ expect(json_response).to include('message' => 'Server supports batch API only, please update your Git LFS client to version 1.0.1 and up.')
+ end
+ end
+
+ context 'when fetching lfs object using deprecated API' do
+ let(:authorization) { authorize_user }
+
+ before do
+ get "#{project.http_url_to_repo}/info/lfs/objects/#{sample_oid}", nil, headers
+ end
+
+ it_behaves_like 'a deprecated'
+ end
+
+ context 'when handling lfs request using deprecated API' do
+ before do
+ post_json "#{project.http_url_to_repo}/info/lfs/objects", nil, headers
+ end
+
+ it_behaves_like 'a deprecated'
+ end
+ end
+
+ describe 'when fetching lfs object' do
+ let(:project) { create(:empty_project) }
+ let(:update_permissions) { }
+
+ before do
+ enable_lfs
+ update_permissions
+ get "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}", nil, headers
+ end
+
+ context 'and request comes from gitlab-workhorse' do
+ context 'without user being authorized' do
+ it 'responds with status 401' do
+ expect(response).to have_http_status(401)
+ end
+ end
+
+ context 'with required headers' do
+ shared_examples 'responds with a file' do
+ let(:sendfile) { 'X-Sendfile' }
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with the file location' do
+ expect(response.headers['Content-Type']).to eq('application/octet-stream')
+ expect(response.headers['X-Sendfile']).to eq(lfs_object.file.path)
+ end
+ end
+
+ context 'with user is authorized' do
+ let(:authorization) { authorize_user }
+
+ context 'and does not have project access' do
+ let(:update_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ context 'and does have project access' do
+ let(:update_permissions) do
+ project.team << [user, :master]
+ project.lfs_objects << lfs_object
+ end
+
+ it_behaves_like 'responds with a file'
+ end
+ end
+
+ context 'when CI is authorized' do
+ let(:authorization) { authorize_ci_project }
+
+ let(:update_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it_behaves_like 'responds with a file'
+ end
+ end
+
+ context 'without required headers' do
+ let(:authorization) { authorize_user }
+
+ it 'responds with status 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+ end
+ end
+
+ describe 'when handling lfs batch request' do
+ let(:update_lfs_permissions) { }
+ let(:update_user_permissions) { }
+
+ before do
+ enable_lfs
+ update_lfs_permissions
+ update_user_permissions
+ post_json "#{project.http_url_to_repo}/info/lfs/objects/batch", body, headers
+ end
+
+ describe 'download' do
+ let(:project) { create(:empty_project) }
+ let(:body) do
+ { 'operation' => 'download',
+ 'objects' => [
+ { 'oid' => sample_oid,
+ 'size' => sample_size
+ }]
+ }
+ end
+
+ shared_examples 'an authorized requests' do
+ context 'when downloading an lfs object that is assigned to our project' do
+ let(:update_lfs_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'with href to download' do
+ expect(json_response).to eq('objects' => [
+ { 'oid' => sample_oid,
+ 'size' => sample_size,
+ 'actions' => {
+ 'download' => {
+ 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+ 'header' => { 'Authorization' => authorization }
+ }
+ }
+ }])
+ end
+ end
+
+ context 'when downloading an lfs object that is assigned to other project' do
+ let(:other_project) { create(:empty_project) }
+ let(:update_lfs_permissions) do
+ other_project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'with href to download' do
+ expect(json_response).to eq('objects' => [
+ { 'oid' => sample_oid,
+ 'size' => sample_size,
+ 'error' => {
+ 'code' => 404,
+ 'message' => "Object does not exist on the server or you don't have permissions to access it",
+ }
+ }])
+ end
+ end
+
+ context 'when downloading a lfs object that does not exist' do
+ let(:body) do
+ { 'operation' => 'download',
+ 'objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078
+ }]
+ }
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'with an 404 for specific object' do
+ expect(json_response).to eq('objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078,
+ 'error' => {
+ 'code' => 404,
+ 'message' => "Object does not exist on the server or you don't have permissions to access it",
+ }
+ }])
+ end
+ end
+
+ context 'when downloading one new and one existing lfs object' do
+ let(:body) do
+ { 'operation' => 'download',
+ 'objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078
+ },
+ { 'oid' => sample_oid,
+ 'size' => sample_size
+ }
+ ]
+ }
+ end
+
+ let(:update_lfs_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with upload hypermedia link for the new object' do
+ expect(json_response).to eq('objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078,
+ 'error' => {
+ 'code' => 404,
+ 'message' => "Object does not exist on the server or you don't have permissions to access it",
+ }
+ },
+ { 'oid' => sample_oid,
+ 'size' => sample_size,
+ 'actions' => {
+ 'download' => {
+ 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+ 'header' => { 'Authorization' => authorization }
+ }
+ }
+ }])
+ end
+ end
+ end
+
+ context 'when user is authenticated' do
+ let(:authorization) { authorize_user }
+
+ let(:update_user_permissions) do
+ project.team << [user, role]
+ end
+
+ it_behaves_like 'an authorized requests' do
+ let(:role) { :reporter }
+ end
+
+ context 'when user does is not member of the project' do
+ let(:role) { :guest }
+
+ it 'responds with 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ context 'when user does not have download access' do
+ let(:role) { :guest }
+
+ it 'responds with 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+ end
+
+ context 'when CI is authorized' do
+ let(:authorization) { authorize_ci_project }
+
+ it_behaves_like 'an authorized requests'
+ end
+
+ context 'when user is not authenticated' do
+ describe 'is accessing public project' do
+ let(:project) { create(:project, :public) }
+
+ let(:update_lfs_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 200 and href to download' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with status 200 and href to download' do
+ expect(json_response).to eq('objects' => [
+ { 'oid' => sample_oid,
+ 'size' => sample_size,
+ 'actions' => {
+ 'download' => {
+ 'href' => "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}",
+ 'header' => {}
+ }
+ }
+ }])
+ end
+ end
+
+ describe 'is accessing non-public project' do
+ let(:update_lfs_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'responds with authorization required' do
+ expect(response).to have_http_status(401)
+ end
+ end
+ end
+ end
+
+ describe 'upload' do
+ let(:project) { create(:project, :public) }
+ let(:body) do
+ { 'operation' => 'upload',
+ 'objects' => [
+ { 'oid' => sample_oid,
+ 'size' => sample_size
+ }]
+ }
+ end
+
+ describe 'when request is authenticated' do
+ describe 'when user has project push access' do
+ let(:authorization) { authorize_user }
+
+ let(:update_user_permissions) do
+ project.team << [user, :developer]
+ end
+
+ context 'when pushing an lfs object that already exists' do
+ let(:other_project) { create(:empty_project) }
+ let(:update_lfs_permissions) do
+ other_project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with links the object to the project' do
+ expect(json_response['objects']).to be_kind_of(Array)
+ expect(json_response['objects'].first['oid']).to eq(sample_oid)
+ expect(json_response['objects'].first['size']).to eq(sample_size)
+ expect(lfs_object.projects.pluck(:id)).not_to include(project.id)
+ expect(lfs_object.projects.pluck(:id)).to include(other_project.id)
+ expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}")
+ expect(json_response['objects'].first['actions']['upload']['header']).to eq('Authorization' => authorization)
+ end
+ end
+
+ context 'when pushing a lfs object that does not exist' do
+ let(:body) do
+ { 'operation' => 'upload',
+ 'objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078
+ }]
+ }
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with upload hypermedia link' do
+ expect(json_response['objects']).to be_kind_of(Array)
+ expect(json_response['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
+ expect(json_response['objects'].first['size']).to eq(1575078)
+ expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{Gitlab.config.gitlab.url}/#{project.path_with_namespace}.git/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
+ expect(json_response['objects'].first['actions']['upload']['header']).to eq('Authorization' => authorization)
+ end
+ end
+
+ context 'when pushing one new and one existing lfs object' do
+ let(:body) do
+ { 'operation' => 'upload',
+ 'objects' => [
+ { 'oid' => '91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897',
+ 'size' => 1575078
+ },
+ { 'oid' => sample_oid,
+ 'size' => sample_size
+ }
+ ]
+ }
+ end
+
+ let(:update_lfs_permissions) do
+ project.lfs_objects << lfs_object
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with upload hypermedia link for the new object' do
+ expect(json_response['objects']).to be_kind_of(Array)
+
+ expect(json_response['objects'].first['oid']).to eq("91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897")
+ expect(json_response['objects'].first['size']).to eq(1575078)
+ expect(json_response['objects'].first['actions']['upload']['href']).to eq("#{project.http_url_to_repo}/gitlab-lfs/objects/91eff75a492a3ed0dfcb544d7f31326bc4014c8551849c192fd1e48d4dd2c897/1575078")
+ expect(json_response['objects'].first['actions']['upload']['header']).to eq("Authorization" => authorization)
+
+ expect(json_response['objects'].last['oid']).to eq(sample_oid)
+ expect(json_response['objects'].last['size']).to eq(sample_size)
+ expect(json_response['objects'].last).not_to have_key('actions')
+ end
+ end
+ end
+
+ context 'when user does not have push access' do
+ let(:authorization) { authorize_user }
+
+ it 'responds with 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ context 'when CI is authorized' do
+ let(:authorization) { authorize_ci_project }
+
+ it 'responds with 401' do
+ expect(response).to have_http_status(401)
+ end
+ end
+ end
+
+ context 'when user is not authenticated' do
+ context 'when user has push access' do
+ let(:update_user_permissions) do
+ project.team << [user, :master]
+ end
+
+ it 'responds with status 401' do
+ expect(response).to have_http_status(401)
+ end
+ end
+
+ context 'when user does not have push access' do
+ it 'responds with status 401' do
+ expect(response).to have_http_status(401)
+ end
+ end
+ end
+
+ context 'when CI is authorized' do
+ let(:authorization) { authorize_ci_project }
+
+ it 'responds with status 403' do
+ expect(response).to have_http_status(401)
+ end
+ end
+ end
+
+ describe 'unsupported' do
+ let(:project) { create(:empty_project) }
+ let(:body) do
+ { 'operation' => 'other',
+ 'objects' => [
+ { 'oid' => sample_oid,
+ 'size' => sample_size
+ }]
+ }
+ end
+
+ it 'responds with status 404' do
+ expect(response).to have_http_status(404)
+ end
+ end
+ end
+
+ describe 'when pushing a lfs object' do
+ before do
+ enable_lfs
+ end
+
+ shared_examples 'unauthorized' do
+ context 'and request is sent by gitlab-workhorse to authorize the request' do
+ before do
+ put_authorize
+ end
+
+ it 'responds with status 401' do
+ expect(response).to have_http_status(401)
+ end
+ end
+
+ context 'and request is sent by gitlab-workhorse to finalize the upload' do
+ before do
+ put_finalize
+ end
+
+ it 'responds with status 401' do
+ expect(response).to have_http_status(401)
+ end
+ end
+
+ context 'and request is sent with a malformed headers' do
+ before do
+ put_finalize('cat /etc/passwd')
+ end
+
+ it 'does not recognize it as a valid lfs command' do
+ expect(response).to have_http_status(403)
+ end
+ end
+ end
+
+ shared_examples 'forbidden' do
+ context 'and request is sent by gitlab-workhorse to authorize the request' do
+ before do
+ put_authorize
+ end
+
+ it 'responds with 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+
+ context 'and request is sent by gitlab-workhorse to finalize the upload' do
+ before do
+ put_finalize
+ end
+
+ it 'responds with 403' do
+ expect(response).to have_http_status(403)
+ end
+ end
+ end
+
+ describe 'to one project' do
+ let(:project) { create(:empty_project) }
+
+ describe 'when user is authenticated' do
+ let(:authorization) { authorize_user }
+
+ describe 'when user has push access to the project' do
+ before do
+ project.team << [user, :developer]
+ end
+
+ context 'and request is sent by gitlab-workhorse to authorize the request' do
+ before do
+ put_authorize
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'responds with status 200, location of lfs store and object details' do
+ expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
+ expect(json_response['LfsOid']).to eq(sample_oid)
+ expect(json_response['LfsSize']).to eq(sample_size)
+ end
+ end
+
+ context 'and request is sent by gitlab-workhorse to finalize the upload' do
+ before do
+ put_finalize
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'lfs object is linked to the project' do
+ expect(lfs_object.projects.pluck(:id)).to include(project.id)
+ end
+ end
+ end
+
+ describe 'and user does not have push access' do
+ it_behaves_like 'forbidden'
+ end
+ end
+
+ context 'when CI is authenticated' do
+ let(:authorization) { authorize_ci_project }
+
+ it_behaves_like 'unauthorized'
+ end
+
+ context 'for unauthenticated' do
+ it_behaves_like 'unauthorized'
+ end
+ end
+
+ describe 'to a forked project' do
+ let(:upstream_project) { create(:project, :public) }
+ let(:project_owner) { create(:user) }
+ let(:project) { fork_project(upstream_project, project_owner) }
+
+ describe 'when user is authenticated' do
+ let(:authorization) { authorize_user }
+
+ describe 'when user has push access to the project' do
+ before do
+ project.team << [user, :developer]
+ end
+
+ context 'and request is sent by gitlab-workhorse to authorize the request' do
+ before do
+ put_authorize
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'with location of lfs store and object details' do
+ expect(json_response['StoreLFSPath']).to eq("#{Gitlab.config.shared.path}/lfs-objects/tmp/upload")
+ expect(json_response['LfsOid']).to eq(sample_oid)
+ expect(json_response['LfsSize']).to eq(sample_size)
+ end
+ end
+
+ context 'and request is sent by gitlab-workhorse to finalize the upload' do
+ before do
+ put_finalize
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'lfs object is linked to the source project' do
+ expect(lfs_object.projects.pluck(:id)).to include(upstream_project.id)
+ end
+ end
+ end
+
+ describe 'and user does not have push access' do
+ it_behaves_like 'forbidden'
+ end
+ end
+
+ context 'when CI is authenticated' do
+ let(:authorization) { authorize_ci_project }
+
+ it_behaves_like 'unauthorized'
+ end
+
+ context 'for unauthenticated' do
+ it_behaves_like 'unauthorized'
+ end
+
+ describe 'and second project not related to fork or a source project' do
+ let(:second_project) { create(:empty_project) }
+ let(:authorization) { authorize_user }
+
+ before do
+ second_project.team << [user, :master]
+ upstream_project.lfs_objects << lfs_object
+ end
+
+ context 'when pushing the same lfs object to the second project' do
+ before do
+ put "#{second_project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}", nil,
+ headers.merge('X-Gitlab-Lfs-Tmp' => lfs_tmp_file).compact
+ end
+
+ it 'responds with status 200' do
+ expect(response).to have_http_status(200)
+ end
+
+ it 'links the lfs object to the project' do
+ expect(lfs_object.projects.pluck(:id)).to include(second_project.id, upstream_project.id)
+ end
+ end
+ end
+ end
+
+ def put_authorize
+ put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}/authorize", nil, headers
+ end
+
+ def put_finalize(lfs_tmp = lfs_tmp_file)
+ put "#{project.http_url_to_repo}/gitlab-lfs/objects/#{sample_oid}/#{sample_size}", nil,
+ headers.merge('X-Gitlab-Lfs-Tmp' => lfs_tmp).compact
+ end
+
+ def lfs_tmp_file
+ "#{sample_oid}012345678"
+ end
+ end
+
+ def enable_lfs
+ allow(Gitlab.config.lfs).to receive(:enabled).and_return(true)
+ end
+
+ def authorize_ci_project
+ ActionController::HttpAuthentication::Basic.encode_credentials('gitlab-ci-token', project.runners_token)
+ end
+
+ def authorize_user
+ ActionController::HttpAuthentication::Basic.encode_credentials(user.username, user.password)
+ end
+
+ def fork_project(project, user, object = nil)
+ allow(RepositoryForkWorker).to receive(:perform_async).and_return(true)
+ Projects::ForkService.new(project, user, {}).execute
+ end
+
+ def post_json(url, body = nil, headers = nil)
+ post(url, body.try(:to_json), (headers || {}).merge('Content-Type' => 'application/json'))
+ end
+
+ def json_response
+ @json_response ||= JSON.parse(response.body)
+ end
+end
diff --git a/spec/services/auth/container_registry_authentication_service_spec.rb b/spec/services/auth/container_registry_authentication_service_spec.rb
index 67777ad48bc..7cc71f706ce 100644
--- a/spec/services/auth/container_registry_authentication_service_spec.rb
+++ b/spec/services/auth/container_registry_authentication_service_spec.rb
@@ -87,51 +87,105 @@ describe Auth::ContainerRegistryAuthenticationService, services: true do
end
context 'user authorization' do
- let(:project) { create(:project) }
let(:current_user) { create(:user) }
- context 'allow to use scope-less authentication' do
- it_behaves_like 'a valid token'
- end
+ context 'for private project' do
+ let(:project) { create(:empty_project) }
- context 'allow developer to push images' do
- before { project.team << [current_user, :developer] }
+ context 'allow to use scope-less authentication' do
+ it_behaves_like 'a valid token'
+ end
- let(:current_params) do
- { scope: "repository:#{project.path_with_namespace}:push" }
+ context 'allow developer to push images' do
+ before { project.team << [current_user, :developer] }
+
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:push" }
+ end
+
+ it_behaves_like 'a pushable'
end
- it_behaves_like 'a pushable'
- end
+ context 'allow reporter to pull images' do
+ before { project.team << [current_user, :reporter] }
+
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:pull" }
+ end
- context 'allow reporter to pull images' do
- before { project.team << [current_user, :reporter] }
+ it_behaves_like 'a pullable'
+ end
- let(:current_params) do
- { scope: "repository:#{project.path_with_namespace}:pull" }
+ context 'return a least of privileges' do
+ before { project.team << [current_user, :reporter] }
+
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:push,pull" }
+ end
+
+ it_behaves_like 'a pullable'
end
- it_behaves_like 'a pullable'
+ context 'disallow guest to pull or push images' do
+ before { project.team << [current_user, :guest] }
+
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:pull,push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
end
- context 'return a least of privileges' do
- before { project.team << [current_user, :reporter] }
+ context 'for public project' do
+ let(:project) { create(:empty_project, :public) }
- let(:current_params) do
- { scope: "repository:#{project.path_with_namespace}:push,pull" }
+ context 'allow anyone to pull images' do
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:pull" }
+ end
+
+ it_behaves_like 'a pullable'
end
- it_behaves_like 'a pullable'
+ context 'disallow anyone to push images' do
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
end
- context 'disallow guest to pull or push images' do
- before { project.team << [current_user, :guest] }
+ context 'for internal project' do
+ let(:project) { create(:empty_project, :internal) }
- let(:current_params) do
- { scope: "repository:#{project.path_with_namespace}:pull,push" }
+ context 'for internal user' do
+ context 'allow anyone to pull images' do
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:pull" }
+ end
+
+ it_behaves_like 'a pullable'
+ end
+
+ context 'disallow anyone to push images' do
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
end
- it_behaves_like 'an inaccessible'
+ context 'for external user' do
+ let(:current_user) { create(:user, external: true) }
+ let(:current_params) do
+ { scope: "repository:#{project.path_with_namespace}:pull,push" }
+ end
+
+ it_behaves_like 'an inaccessible'
+ end
end
end
diff --git a/spec/services/create_commit_builds_service_spec.rb b/spec/services/create_commit_builds_service_spec.rb
index 4d09bc5fb12..d4c5e584421 100644
--- a/spec/services/create_commit_builds_service_spec.rb
+++ b/spec/services/create_commit_builds_service_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper'
describe CreateCommitBuildsService, services: true do
let(:service) { CreateCommitBuildsService.new }
let(:project) { FactoryGirl.create(:empty_project) }
- let(:user) { nil }
+ let(:user) { create(:user) }
before do
stub_ci_pipeline_to_return_yaml_file
@@ -24,6 +24,7 @@ describe CreateCommitBuildsService, services: true do
it { expect(pipeline).to be_valid }
it { expect(pipeline).to be_persisted }
it { expect(pipeline).to eq(project.pipelines.last) }
+ it { expect(pipeline).to have_attributes(user: user) }
it { expect(pipeline.builds.first).to be_kind_of(Ci::Build) }
end
diff --git a/spec/services/create_deployment_service_spec.rb b/spec/services/create_deployment_service_spec.rb
index 654e441f3cd..8da2a2b3c1b 100644
--- a/spec/services/create_deployment_service_spec.rb
+++ b/spec/services/create_deployment_service_spec.rb
@@ -89,6 +89,12 @@ describe CreateDeploymentService, services: true do
expect_any_instance_of(described_class).to receive(:execute)
subject
end
+
+ it 'is set as deployable' do
+ subject
+
+ expect(Deployment.last.deployable).to eq(deployable)
+ end
end
context 'without environment specified' do
@@ -105,6 +111,8 @@ describe CreateDeploymentService, services: true do
context 'when build succeeds' do
it_behaves_like 'does create environment and deployment' do
+ let(:deployable) { build }
+
subject { build.success }
end
end
@@ -114,6 +122,14 @@ describe CreateDeploymentService, services: true do
subject { build.drop }
end
end
+
+ context 'when build is retried' do
+ it_behaves_like 'does create environment and deployment' do
+ let(:deployable) { Ci::Build.retry(build) }
+
+ subject { deployable.success }
+ end
+ end
end
end
end
diff --git a/spec/services/git_push_service_spec.rb b/spec/services/git_push_service_spec.rb
index afabeed4a80..47c0580e0f0 100644
--- a/spec/services/git_push_service_spec.rb
+++ b/spec/services/git_push_service_spec.rb
@@ -224,7 +224,7 @@ describe GitPushService, services: true do
it "when pushing a branch for the first time" do
expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master")
- expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: false })
+ expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: false, developers_can_merge: false })
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' )
end
@@ -242,7 +242,17 @@ describe GitPushService, services: true do
expect(project).to receive(:execute_hooks)
expect(project.default_branch).to eq("master")
- expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: true })
+ expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: true, developers_can_merge: false })
+
+ execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master')
+ end
+
+ it "when pushing a branch for the first time with default branch protection set to 'developers can merge'" do
+ stub_application_setting(default_branch_protection: Gitlab::Access::PROTECTION_DEV_CAN_MERGE)
+
+ expect(project).to receive(:execute_hooks)
+ expect(project.default_branch).to eq("master")
+ expect(project.protected_branches).to receive(:create).with({ name: "master", developers_can_push: false, developers_can_merge: true })
execute_service(project, user, @blankrev, 'newrev', 'refs/heads/master' )
end
diff --git a/spec/services/issues/bulk_update_service_spec.rb b/spec/services/issues/bulk_update_service_spec.rb
index 4a689e64dc5..ba3a4dfc048 100644
--- a/spec/services/issues/bulk_update_service_spec.rb
+++ b/spec/services/issues/bulk_update_service_spec.rb
@@ -262,4 +262,42 @@ describe Issues::BulkUpdateService, services: true do
end
end
end
+
+ describe :subscribe_issues do
+ let(:issues) { create_list(:issue, 5, project: project) }
+ let(:params) do
+ {
+ subscription_event: 'subscribe',
+ issues_ids: issues.map(&:id).join(',')
+ }
+ end
+
+ it 'subscribes the given user' do
+ issues.each do |issue|
+ expect(issue.subscribed?(user)).to be_truthy
+ end
+ end
+ end
+
+ describe :unsubscribe_issues do
+ let(:issues) { create_list(:closed_issue, 5, project: project) }
+ let(:params) do
+ {
+ subscription_event: 'unsubscribe',
+ issues_ids: issues.map(&:id).join(',')
+ }
+ end
+
+ before do
+ issues.each do |issue|
+ issue.subscriptions.create(user: user, subscribed: true)
+ end
+ end
+
+ it 'unsubscribes the given user' do
+ issues.each do |issue|
+ expect(issue.subscribed?(user)).to be_falsey
+ end
+ end
+ end
end
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index 06f56d85aa8..ce643b3f860 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -88,8 +88,7 @@ describe MergeRequests::RefreshService, services: true do
# Merge master -> feature branch
author = { email: 'test@gitlab.com', time: Time.now, name: "Me" }
commit_options = { message: 'Test message', committer: author, author: author }
- master_commit = @project.repository.commit('master')
- @project.repository.merge(@user, master_commit.id, 'feature', commit_options)
+ @project.repository.merge(@user, @merge_request, commit_options)
commit = @project.repository.commit('feature')
service.new(@project, @user).execute(@oldrev, commit.id, 'refs/heads/feature')
reload_mrs
diff --git a/spec/services/todo_service_spec.rb b/spec/services/todo_service_spec.rb
index b4522536724..34d8ea9090e 100644
--- a/spec/services/todo_service_spec.rb
+++ b/spec/services/todo_service_spec.rb
@@ -35,8 +35,11 @@ describe TodoService, services: true 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) }
+ it 'creates a todo if assignee is the current user' do
+ unassigned_issue.update_attribute(:assignee, john_doe)
+ service.new_issue(unassigned_issue, john_doe)
+
+ should_create_todo(user: john_doe, target: unassigned_issue, author: john_doe, action: Todo::ASSIGNED)
end
it 'creates a todo for each valid mentioned user' do
@@ -44,7 +47,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: issue, action: Todo::MENTIONED)
should_create_todo(user: guest, target: issue, action: Todo::MENTIONED)
- should_not_create_todo(user: author, target: issue, action: Todo::MENTIONED)
+ should_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: non_member, target: issue, action: Todo::MENTIONED)
end
@@ -57,7 +60,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: admin, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_not_create_todo(user: guest, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
- should_not_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
+ should_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
end
context 'when a private group is mentioned' do
@@ -87,7 +90,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: issue, action: Todo::MENTIONED)
should_create_todo(user: guest, 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_create_todo(user: author, target: issue, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: issue, action: Todo::MENTIONED)
end
@@ -105,7 +108,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_create_todo(user: admin, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
should_not_create_todo(user: guest, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
- should_not_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
+ should_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED)
end
context 'issues with a task list' do
@@ -156,10 +159,11 @@ describe TodoService, services: true do
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
+ it 'creates a todo if new assignee is the current user' do
unassigned_issue.update_attribute(:assignee, john_doe)
+ service.reassigned_issue(unassigned_issue, john_doe)
- should_not_create_any_todo { service.reassigned_issue(unassigned_issue, john_doe) }
+ should_create_todo(user: john_doe, target: unassigned_issue, author: john_doe, action: Todo::ASSIGNED)
end
end
@@ -250,7 +254,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
should_create_todo(user: guest, 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_create_todo(user: john_doe, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
should_not_create_todo(user: non_member, target: issue, author: john_doe, action: Todo::MENTIONED, note: note)
end
@@ -262,7 +266,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
should_create_todo(user: admin, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
should_not_create_todo(user: guest, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
- should_not_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
+ should_create_todo(user: john_doe, target: confidential_issue, author: john_doe, action: Todo::MENTIONED, note: note_on_confidential_issue)
end
it 'creates a todo for each valid mentioned user when leaving a note on commit' do
@@ -270,7 +274,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target_id: nil, target_type: 'Commit', commit_id: note_on_commit.commit_id, author: john_doe, action: Todo::MENTIONED, note: note_on_commit)
should_create_todo(user: author, target_id: nil, target_type: 'Commit', commit_id: note_on_commit.commit_id, author: john_doe, action: Todo::MENTIONED, note: note_on_commit)
- should_not_create_todo(user: john_doe, target_id: nil, target_type: 'Commit', commit_id: note_on_commit.commit_id, author: john_doe, action: Todo::MENTIONED, note: note_on_commit)
+ should_create_todo(user: john_doe, target_id: nil, target_type: 'Commit', commit_id: note_on_commit.commit_id, author: john_doe, action: Todo::MENTIONED, note: note_on_commit)
should_not_create_todo(user: non_member, target_id: nil, target_type: 'Commit', commit_id: note_on_commit.commit_id, author: john_doe, action: Todo::MENTIONED, note: note_on_commit)
end
@@ -312,7 +316,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: mr_assigned, action: Todo::MENTIONED)
should_create_todo(user: guest, target: mr_assigned, action: Todo::MENTIONED)
- should_not_create_todo(user: author, target: mr_assigned, action: Todo::MENTIONED)
+ should_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: non_member, target: mr_assigned, action: Todo::MENTIONED)
end
@@ -325,7 +329,7 @@ describe TodoService, services: true do
should_create_todo(user: member, target: mr_assigned, action: Todo::MENTIONED)
should_create_todo(user: guest, 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_create_todo(user: author, target: mr_assigned, action: Todo::MENTIONED)
should_not_create_todo(user: non_member, target: mr_assigned, action: Todo::MENTIONED)
end
@@ -382,10 +386,11 @@ describe TodoService, services: true do
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
+ it 'creates a todo if new assignee is the current user' do
mr_assigned.update_attribute(:assignee, john_doe)
+ service.reassigned_merge_request(mr_assigned, john_doe)
- should_not_create_any_todo { service.reassigned_merge_request(mr_assigned, john_doe) }
+ should_create_todo(user: john_doe, target: mr_assigned, author: john_doe, action: Todo::ASSIGNED)
end
end
@@ -435,6 +440,24 @@ describe TodoService, services: true do
should_create_todo(user: author, target: mr_unassigned, action: Todo::MARKED)
end
end
+
+ describe '#new_note' do
+ let(:mention) { john_doe.to_reference }
+ let(:diff_note_on_merge_request) { create(:diff_note_on_merge_request, project: project, noteable: mr_unassigned, author: author, note: "Hey #{mention}") }
+ let(:legacy_diff_note_on_merge_request) { create(:legacy_diff_note_on_merge_request, project: project, noteable: mr_unassigned, author: author, note: "Hey #{mention}") }
+
+ it 'creates a todo for mentioned user on new diff note' do
+ service.new_note(diff_note_on_merge_request, author)
+
+ should_create_todo(user: john_doe, target: mr_unassigned, author: author, action: Todo::MENTIONED, note: diff_note_on_merge_request)
+ end
+
+ it 'creates a todo for mentioned user on legacy diff note' do
+ service.new_note(legacy_diff_note_on_merge_request, author)
+
+ should_create_todo(user: john_doe, target: mr_unassigned, author: author, action: Todo::MENTIONED, note: legacy_diff_note_on_merge_request)
+ end
+ end
end
it 'updates cached counts when a todo is created' do
diff --git a/spec/support/fake_u2f_device.rb b/spec/support/fake_u2f_device.rb
index 553fe9f1fbc..f550e9a0160 100644
--- a/spec/support/fake_u2f_device.rb
+++ b/spec/support/fake_u2f_device.rb
@@ -18,8 +18,8 @@ class FakeU2fDevice
def respond_to_u2f_authentication
app_id = @page.evaluate_script('gon.u2f.app_id')
- challenges = @page.evaluate_script('gon.u2f.challenges')
- json_response = u2f_device(app_id).sign_response(challenges[0])
+ challenge = @page.evaluate_script('gon.u2f.challenge')
+ json_response = u2f_device(app_id).sign_response(challenge)
@page.execute_script("
u2f.sign = function(appId, challenges, signRequests, callback) {
diff --git a/spec/support/test_env.rb b/spec/support/test_env.rb
index bb6c84262f6..83f2ad96fd8 100644
--- a/spec/support/test_env.rb
+++ b/spec/support/test_env.rb
@@ -18,7 +18,9 @@ module TestEnv
'orphaned-branch' => '45127a9',
'binary-encoding' => '7b1cf43',
'gitattributes' => '5a62481',
- 'expand-collapse-diffs' => '4842455'
+ 'expand-collapse-diffs' => '4842455',
+ 'expand-collapse-files' => '025db92',
+ 'expand-collapse-lines' => '238e82d'
}
# gitlab-test-fork is a fork of gitlab-fork, but we don't necessarily
diff --git a/spec/views/projects/builds/show.html.haml_spec.rb b/spec/views/projects/builds/show.html.haml_spec.rb
index cd18d19ef5e..42220a20c75 100644
--- a/spec/views/projects/builds/show.html.haml_spec.rb
+++ b/spec/views/projects/builds/show.html.haml_spec.rb
@@ -3,8 +3,12 @@ require 'spec_helper'
describe 'projects/builds/show' do
include Devise::TestHelpers
- let(:build) { create(:ci_build) }
- let(:project) { build.project }
+ let(:project) { create(:project) }
+ let(:pipeline) do
+ create(:ci_pipeline, project: project,
+ sha: project.commit.id)
+ end
+ let(:build) { create(:ci_build, pipeline: pipeline) }
before do
assign(:build, build)
@@ -34,4 +38,15 @@ describe 'projects/builds/show' do
expect(rendered).to have_link('Retry')
end
end
+
+ describe 'commit title in sidebar' do
+ let(:commit_title) { project.commit.title }
+
+ it 'shows commit title and not show commit message' do
+ render
+
+ expect(rendered).to have_css('p.build-light-text.append-bottom-0',
+ text: /\A\n#{Regexp.escape(commit_title)}\n\Z/)
+ end
+ end
end
diff --git a/spec/workers/git_garbage_collect_worker_spec.rb b/spec/workers/git_garbage_collect_worker_spec.rb
index a9cce8b8b59..c9f5aae0815 100644
--- a/spec/workers/git_garbage_collect_worker_spec.rb
+++ b/spec/workers/git_garbage_collect_worker_spec.rb
@@ -16,7 +16,10 @@ describe GitGarbageCollectWorker do
project.repository_storage_path,
project.path_with_namespace).
and_return(true)
- expect_any_instance_of(Repository).to receive(:after_create_branch)
+ expect_any_instance_of(Repository).to receive(:after_create_branch).and_call_original
+ expect_any_instance_of(Repository).to receive(:branch_names).and_call_original
+ expect_any_instance_of(Repository).to receive(:branch_count).and_call_original
+ expect_any_instance_of(Repository).to receive(:has_visible_content?).and_call_original
subject.perform(project.id)
end