diff options
author | Lin Jen-Shin <godfat@godfat.org> | 2016-07-21 18:28:33 +0800 |
---|---|---|
committer | Lin Jen-Shin <godfat@godfat.org> | 2016-07-21 18:28:33 +0800 |
commit | 83975914337d1dc05193a83d27be577c5631f801 (patch) | |
tree | aeaf2450cb8a8a1c99b064d7d353e28d682c0b65 | |
parent | e3ce02300bf90451b98479720d1093afe8b7eea8 (diff) | |
parent | 4211f50014faebf027fd2bc80e0cf1d3f012627c (diff) | |
download | gitlab-ce-83975914337d1dc05193a83d27be577c5631f801.tar.gz |
Merge branch 'artifacts-from-ref-and-build-name-api' into artifacts-from-ref-and-build-name
* artifacts-from-ref-and-build-name-api: (384 commits)
Add API documentation for downloading the latest successful build
Since it's too hard to use JOIN with Rails... feedback:
Workaround MySQL with INNER JOIN:
Just put setup directly in the test, feedback:
Cleanup the use of let, feedback:
Lose unneeded instance variables and variables, feedback:
Add link to user profile to commit avatar (!5163)
It's not longer than 80 chars
Make sure there's a build
Use the same logic, it should specify that it's not logged in
Use 'when logging as guest' for context, feedback:
Cleanup that a bit
Refactor service settings view
Fix a problem with processing a pipeline where stage only has manual actions
Rename user2 to reporter_user
Should check against `authorize_read_builds!`
A CHANGELOG entry
Don't show other actions of the same name
Use limit parameter rather than hardcoded value
Reuse those two methods
...
259 files changed, 15475 insertions, 8435 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index ff8aa351226..f566dfd76e9 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -148,7 +148,7 @@ spinach 9 10: *spinach-knapsack .spinach-knapsack-ruby23: &spinach-knapsack-ruby23 <<: *spinach-knapsack <<: *ruby-23 - + rspec 0 20 ruby23: *rspec-knapsack-ruby23 rspec 1 20 ruby23: *rspec-knapsack-ruby23 rspec 2 20 ruby23: *rspec-knapsack-ruby23 @@ -196,6 +196,7 @@ rake flog: *exec rake flay: *exec rake db:migrate:reset: *exec license_finder: *exec +rake downtime_check: *exec bundler:audit: stage: test diff --git a/.rubocop.yml b/.rubocop.yml index db0bcfadcf4..6adbda53456 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -291,6 +291,10 @@ Style/MultilineMethodDefinitionBraceLayout: Style/MultilineOperationIndentation: Enabled: false +# Avoid multi-line `? :` (the ternary operator), use if/unless instead. +Style/MultilineTernaryOperator: + Enabled: true + # Favor unless over if for negative conditions (or control flow or). Style/NegatedIf: Enabled: true diff --git a/.rubocop_todo.yml b/.rubocop_todo.yml index 9310e711889..b622b9239d4 100644 --- a/.rubocop_todo.yml +++ b/.rubocop_todo.yml @@ -226,10 +226,6 @@ Style/LineEndConcatenation: Style/MethodCallParentheses: Enabled: false -# Offense count: 3 -Style/MultilineTernaryOperator: - Enabled: false - # Offense count: 62 # Cop supports --auto-correct. Style/MutableConstant: diff --git a/CHANGELOG b/CHANGELOG index fcfc2d7aa30..16c50ef107e 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,17 +1,26 @@ 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' + - Limit git rev-list output count to one in forced push check v 8.10.0 (unreleased) + - Fix profile activity heatmap to show correct day name (eanplatter) + - Speed up ExternalWikiHelper#get_project_wiki_path - Expose {should,force}_remove_source_branch (Ben Boeckel) + - Add the functionality to be able to rename a file. !5049 (tiagonbotelho) - 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 - Refresh the branch cache after `git gc` runs + - Allow to disable request access button on projects/groups - 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 - Delete award emoji when deleting a user - Remove pinTo from Flash and make inline flash messages look nicer !4854 (winniehell) + - Add an API for downloading latest successful build from a particular branch or tag !5347 + - Add link to profile to commit avatar !5163 (winniehell) - 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) @@ -21,26 +30,36 @@ v 8.10.0 (unreleased) - Escape file extension when parsing search results !5141 (winniehell) - Apply the trusted_proxies config to the rack request object for use with rack_attack - Upgrade to Rails 4.2.7. !5236 + - Extend exposed environment variables for CI builds + - Allow to pull code with deploy key from public projects + - Use limit parameter rather than hardcoded value in `ldap:check` rake task (Mike Ricketts) - 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 GFM autocomplete not working on wiki pages - 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 + - Redirects back to issue after clicking login link - Eager load award emoji on notes + - Allow to define manual actions/builds on Pipelines and Environments - 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 + - Fix compare view not changing code view rendering style - 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 @@ -52,9 +71,11 @@ v 8.10.0 (unreleased) - 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 @@ -65,6 +86,7 @@ v 8.10.0 (unreleased) - 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 @@ -77,6 +99,7 @@ v 8.10.0 (unreleased) - Avoid to retrieve MR closes_issues as much as possible. - Add API endpoint for a group issues !4520 (mahcsig) - Add Bugzilla integration !4930 (iamtjg) + - Fix new snippet style bug (elliotec) - Instrument Rinku usage - Be explicit to define merge request discussion variables - Metrics for Rouge::Plugins::Redcarpet and Rouge::Formatters::HTMLGitlab @@ -87,6 +110,7 @@ v 8.10.0 (unreleased) - Don't render discussion notes when requesting diff tab through AJAX - 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 + - Allow to setup event by channel on slack service - 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 @@ -100,6 +124,7 @@ v 8.10.0 (unreleased) - 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 @@ -111,9 +136,17 @@ v 8.10.0 (unreleased) - 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 / !5360 - 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 + - Move builds settings out of project settings and rename Pipelines + - Add builds badge to Pipelines settings page + - Export and import avatar as part of project import/export + - Fix migration corrupting import data for old version upgrades v 8.9.6 - Fix importing of events under notes for GitLab projects. !5154 @@ -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 @@ -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' @@ -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 0987fd5665a..363904a4baa 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -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) @@ -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) @@ -578,7 +578,7 @@ GEM railties (>= 4.2.0, < 5.1) rinku (2.0.0) rotp (2.1.2) - rouge (2.0.3) + rouge (2.0.5) rqrcode (0.7.0) chunky_png rqrcode-rails3 (0.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) @@ -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,11 +860,11 @@ 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.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.2) @@ -944,6 +947,7 @@ DEPENDENCIES 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 Binary files differindex 6bacb0e92b6..6f1a34a5591 100644 --- a/app/assets/images/emoji.png +++ b/app/assets/images/emoji.png diff --git a/app/assets/images/emoji@2x.png b/app/assets/images/emoji@2x.png Binary files differindex 99588b56616..dc9cae1d44c 100644 --- a/app/assets/images/emoji@2x.png +++ b/app/assets/images/emoji@2x.png diff --git a/app/assets/javascripts/gl_dropdown.js.coffee b/app/assets/javascripts/gl_dropdown.js.coffee index 1b0d0db8954..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 diff --git a/app/assets/javascripts/graphs/application.js.coffee b/app/assets/javascripts/graphs/graphs_bundle.js.coffee index e0f681acf0b..e0f681acf0b 100644 --- a/app/assets/javascripts/graphs/application.js.coffee +++ b/app/assets/javascripts/graphs/graphs_bundle.js.coffee 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/network/application.js.coffee b/app/assets/javascripts/network/network_bundle.js.coffee index f75f63869c5..f75f63869c5 100644 --- a/app/assets/javascripts/network/application.js.coffee +++ b/app/assets/javascripts/network/network_bundle.js.coffee diff --git a/app/assets/javascripts/profile/application.js.coffee b/app/assets/javascripts/profile/profile_bundle.js.coffee index 91cacfece46..91cacfece46 100644 --- a/app/assets/javascripts/profile/application.js.coffee +++ b/app/assets/javascripts/profile/profile_bundle.js.coffee 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/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/users/application.js.coffee b/app/assets/javascripts/users/users_bundle.js.coffee index 91cacfece46..91cacfece46 100644 --- a/app/assets/javascripts/users/application.js.coffee +++ b/app/assets/javascripts/users/users_bundle.js.coffee diff --git a/app/assets/stylesheets/framework/blocks.scss b/app/assets/stylesheets/framework/blocks.scss index ad94e457cfd..7ce203d2ec7 100644 --- a/app/assets/stylesheets/framework/blocks.scss +++ b/app/assets/stylesheets/framework/blocks.scss @@ -232,7 +232,9 @@ .nav-block { .controls { float: right; - margin-top: 11px; + margin-top: 8px; + padding-bottom: 7px; + border-bottom: 1px solid $border-color; } } diff --git a/app/assets/stylesheets/framework/buttons.scss b/app/assets/stylesheets/framework/buttons.scss index 590b8f54363..f87b8a2ad1c 100644 --- a/app/assets/stylesheets/framework/buttons.scss +++ b/app/assets/stylesheets/framework/buttons.scss @@ -49,6 +49,17 @@ border-color: $border-dark; color: $color; } + + svg { + + path { + fill: $color; + } + + use { + stroke: $color; + } + } } @mixin btn-green { @@ -173,6 +184,13 @@ .caret { margin-left: 5px; } + + svg { + height: 15px; + width: auto; + position: relative; + top: 2px; + } } .btn-lg { 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 d52e8f00172..3fa4a22258d 100644 --- a/app/assets/stylesheets/framework/sidebar.scss +++ b/app/assets/stylesheets/framework/sidebar.scss @@ -198,6 +198,10 @@ header.header-pinned-nav { .sidebar-collapsed-icon { cursor: pointer; + + .btn { + background-color: $gray-light; + } } } 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 f0e7002e4cd..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; /* 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/issuable.scss b/app/assets/stylesheets/pages/issuable.scss index 542fa244689..ded437625ee 100644 --- a/app/assets/stylesheets/pages/issuable.scss +++ b/app/assets/stylesheets/pages/issuable.scss @@ -122,7 +122,8 @@ button { float: right; - padding: 3px 5px; + padding: 1px 5px; + background-color: $gray-light; } } diff --git a/app/assets/stylesheets/pages/issues.scss b/app/assets/stylesheets/pages/issues.scss index 0e4d8c140aa..ee3b2d2b801 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; } @@ -78,6 +78,14 @@ form.edit-issue { } } +.merge-request-ci-status { + svg { + margin-right: 4px; + position: relative; + top: 1px; + } +} + @media (max-width: $screen-xs-max) { .issue-btn-group { width: 100%; diff --git a/app/assets/stylesheets/pages/merge_requests.scss b/app/assets/stylesheets/pages/merge_requests.scss index 15c6c9f231a..5254faf723d 100644 --- a/app/assets/stylesheets/pages/merge_requests.scss +++ b/app/assets/stylesheets/pages/merge_requests.scss @@ -60,8 +60,10 @@ .ci_widget { border-bottom: 1px solid #eef0f2; - i { + svg { margin-right: 4px; + position: relative; + top: 1px; } &.ci-success { @@ -196,6 +198,16 @@ .merge-request-title { margin-bottom: 2px; + + .ci-status-link { + + svg { + height: 16px; + width: 16px; + position: relative; + top: 3px; + } + } } } @@ -270,7 +282,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 a0334207c68..a404f108dc4 100644 --- a/app/assets/stylesheets/pages/pipelines.scss +++ b/app/assets/stylesheets/pages/pipelines.scss @@ -1,7 +1,7 @@ .pipelines { .stage { - max-width: 80px; - width: 80px; + max-width: 90px; + width: 90px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; @@ -30,13 +30,17 @@ } .table.builds { - min-width: 1100px; + min-width: 1200px; tr { th { - padding: 16px; + padding: 16px 8px; border: none; } + + td { + padding: 10px 8px; + } } tbody { @@ -45,6 +49,14 @@ .commit-link { + .ci-status { + + svg { + top: 1px; + margin-right: 0; + } + } + a:hover { text-decoration: none; } @@ -53,9 +65,8 @@ .branch-commit { .branch-name { - margin-left: 8px; font-weight: bold; - max-width: 180px; + max-width: 150px; overflow: hidden; display: inline-block; white-space: nowrap; @@ -64,10 +75,15 @@ } svg { - margin: 0 6px; height: 14px; width: auto; vertical-align: middle; + fill: $table-text-gray; + } + + .fa { + font-size: 12px; + color: $table-text-gray; } .commit-id { @@ -100,6 +116,31 @@ } } + .icon-container { + display: inline-block; + text-align: right; + width: 20px; + + .fa { + position: relative; + right: 3px; + } + + svg { + position: relative; + right: 1px; + } + } + + .stage-cell { + + svg { + height: 18px; + width: 18px; + vertical-align: middle; + } + } + .duration, .finished-at { color: $table-text-gray; @@ -107,21 +148,19 @@ .fa { font-size: 12px; + margin-right: 4px; } svg { - height: 12px; - width: auto; + width: 12px; + height: auto; vertical-align: middle; - } - - .fa, - svg { - margin-right: 5px; + margin-right: 4px; } } .pipeline-actions { + min-width: 140px; .btn { margin: 0; diff --git a/app/assets/stylesheets/pages/projects.scss b/app/assets/stylesheets/pages/projects.scss index ea9f7cf0540..cc3aef5199e 100644 --- a/app/assets/stylesheets/pages/projects.scss +++ b/app/assets/stylesheets/pages/projects.scss @@ -129,6 +129,17 @@ color: $layout-link-gray; } + svg { + + path { + fill: $layout-link-gray; + } + + use { + stroke: $layout-link-gray; + } + } + .fa-caret-down { margin-left: 3px; } @@ -322,18 +333,53 @@ a.deploy-project-label { } .fork-namespaces { - .fork-thumbnail { - text-align: center; - margin-bottom: $gl-padding; - - .caption { - padding: $gl-padding 0; - min-height: 30px; - } + .row { + -webkit-flex-wrap: wrap; + display: -webkit-flex; + display: flex; + flex-wrap: wrap; + justify-content: flex-start; + + .fork-thumbnail { + @include border-radius($border-radius-base); + background-color: $white-light; + border: 1px solid $border-white-light; + height: 202px; + margin: $gl-padding; + text-align: center; + width: 169px; + &:hover, &.forked { + background-color: $row-hover; + border-color: $row-hover-border; + } + .no-avatar { + width: 100px; + height: 100px; + background-color: $gray-light; + border: 1px solid $gray-dark; + margin: 0 auto; + @include border-radius(50%); + i { + font-size: 100px; + color: $gray-dark; + } + } + a { + display: block; + width: 100%; + height: 100%; + padding-top: $gl-padding; + color: $gl-gray; + .caption { + min-height: 30px; + padding: $gl-padding 0; + } + } - img { - @include border-radius(50%); - max-width: 100px; + img { + @include border-radius(50%); + max-width: 100px; + } } } } @@ -486,6 +532,11 @@ pre.light-well { > span { margin-left: 10px; } + + svg { + position: relative; + top: 2px; + } } } diff --git a/app/assets/stylesheets/pages/status.scss b/app/assets/stylesheets/pages/status.scss index c6b053150be..a22d4b6f6be 100644 --- a/app/assets/stylesheets/pages/status.scss +++ b/app/assets/stylesheets/pages/status.scss @@ -41,6 +41,14 @@ color: $blue-normal; border-color: $blue-normal; } + + svg { + height: 13px; + width: 13px; + position: relative; + top: 1px; + margin: 0 3px; + } } .ci-status-icon-success { diff --git a/app/assets/stylesheets/pages/tags.scss b/app/assets/stylesheets/pages/tags.scss new file mode 100644 index 00000000000..24ebd3e7cfa --- /dev/null +++ b/app/assets/stylesheets/pages/tags.scss @@ -0,0 +1,7 @@ +.tag-buttons { + line-height: 40px; + + .btn:not(.dropdown-toggle) { + margin-left: 10px; + } +} diff --git a/app/assets/stylesheets/pages/tree.scss b/app/assets/stylesheets/pages/tree.scss index 42a20e9775f..390977297fb 100644 --- a/app/assets/stylesheets/pages/tree.scss +++ b/app/assets/stylesheets/pages/tree.scss @@ -19,7 +19,7 @@ border-top: 1px solid $table-border-gray; td, th { - line-height: 23px; + line-height: 21px; } &:hover { diff --git a/app/controllers/admin/groups_controller.rb b/app/controllers/admin/groups_controller.rb index 94b5aaa71d0..f3a88a8e6c8 100644 --- a/app/controllers/admin/groups_controller.rb +++ b/app/controllers/admin/groups_controller.rb @@ -60,6 +60,6 @@ class Admin::GroupsController < Admin::ApplicationController end def group_params - params.require(:group).permit(:name, :description, :path, :avatar, :visibility_level) + params.require(:group).permit(:name, :description, :path, :avatar, :visibility_level, :request_access_enabled) end end diff --git a/app/controllers/admin/services_controller.rb b/app/controllers/admin/services_controller.rb index 46133588332..7c37f3155da 100644 --- a/app/controllers/admin/services_controller.rb +++ b/app/controllers/admin/services_controller.rb @@ -1,4 +1,6 @@ class Admin::ServicesController < Admin::ApplicationController + include ServiceParams + before_action :service, only: [:edit, :update] def index @@ -13,7 +15,7 @@ class Admin::ServicesController < Admin::ApplicationController end def update - if service.update_attributes(application_services_params[:service]) + if service.update_attributes(service_params[:service]) redirect_to admin_application_settings_services_path, notice: 'Application settings saved successfully' else @@ -37,15 +39,4 @@ class Admin::ServicesController < Admin::ApplicationController def service @service ||= Service.where(id: params[:id], template: true).first end - - def application_services_params - application_services_params = params.permit(:id, - service: Projects::ServicesController::ALLOWED_PARAMS) - if application_services_params[:service].is_a?(Hash) - Projects::ServicesController::FILTER_BLANK_PARAMS.each do |param| - application_services_params[:service].delete(param) if application_services_params[:service][param].blank? - end - end - application_services_params - end end diff --git a/app/controllers/concerns/creates_commit.rb b/app/controllers/concerns/creates_commit.rb index dacb5679dd3..f2b8f297bc2 100644 --- a/app/controllers/concerns/creates_commit.rb +++ b/app/controllers/concerns/creates_commit.rb @@ -7,7 +7,8 @@ module CreatesCommit commit_params = @commit_params.merge( source_project: @project, source_branch: @ref, - target_branch: @target_branch + target_branch: @target_branch, + previous_path: @previous_path ) result = service.new(@tree_edit_project, current_user, commit_params).execute 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/concerns/service_params.rb b/app/controllers/concerns/service_params.rb new file mode 100644 index 00000000000..471d15af913 --- /dev/null +++ b/app/controllers/concerns/service_params.rb @@ -0,0 +1,35 @@ +module ServiceParams + extend ActiveSupport::Concern + + ALLOWED_PARAMS = [:title, :token, :type, :active, :api_key, :api_url, :api_version, :subdomain, + :room, :recipients, :project_url, :webhook, + :user_key, :device, :priority, :sound, :bamboo_url, :username, :password, + :build_key, :server, :teamcity_url, :drone_url, :build_type, + :description, :issues_url, :new_issue_url, :restrict_to_branch, :channel, + :colorize_messages, :channels, + :push_events, :issues_events, :merge_requests_events, :tag_push_events, + :note_events, :build_events, :wiki_page_events, + :notify_only_broken_builds, :add_pusher, + :send_from_committer_email, :disable_diffs, :external_wiki_url, + :notify, :color, + :server_host, :server_port, :default_irc_uri, :enable_ssl_verification, + :jira_issue_transition_id] + + # Parameters to ignore if no value is specified + FILTER_BLANK_PARAMS = [:password] + + def service_params + dynamic_params = [] + dynamic_params.concat(@service.event_channel_names) + + service_params = params.permit(:id, service: ALLOWED_PARAMS + dynamic_params) + + if service_params[:service].is_a?(Hash) + FILTER_BLANK_PARAMS.each do |param| + service_params[:service].delete(param) if service_params[:service][param].blank? + end + end + + service_params + end +end diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index a04bf7df722..6780a6d4d87 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -121,7 +121,7 @@ class GroupsController < Groups::ApplicationController end def group_params - params.require(:group).permit(:name, :description, :path, :avatar, :public, :visibility_level, :share_with_group_lock) + params.require(:group).permit(:name, :description, :path, :avatar, :public, :visibility_level, :share_with_group_lock, :request_access_enabled) end def load_events diff --git a/app/controllers/projects/badges_controller.rb b/app/controllers/projects/badges_controller.rb index 824aa41db51..a9f482c8787 100644 --- a/app/controllers/projects/badges_controller.rb +++ b/app/controllers/projects/badges_controller.rb @@ -3,11 +3,6 @@ class Projects::BadgesController < Projects::ApplicationController before_action :authorize_admin_project!, only: [:index] before_action :no_cache_headers, except: [:index] - def index - @ref = params[:ref] || @project.default_branch || 'master' - @build_badge = Gitlab::Badge::Build.new(@project, @ref) - end - def build badge = Gitlab::Badge::Build.new(project, params[:ref]) diff --git a/app/controllers/projects/blob_controller.rb b/app/controllers/projects/blob_controller.rb index 5356fdf010d..eda3727a28d 100644 --- a/app/controllers/projects/blob_controller.rb +++ b/app/controllers/projects/blob_controller.rb @@ -38,6 +38,12 @@ class Projects::BlobController < Projects::ApplicationController end def update + if params[:file_path].present? + @previous_path = @path + @path = params[:file_path] + @commit_params[:file_path] = @path + end + after_edit_path = if from_merge_request && @target_branch == @ref diffs_namespace_project_merge_request_path(from_merge_request.target_project.namespace, from_merge_request.target_project, from_merge_request) + diff --git a/app/controllers/projects/builds_controller.rb b/app/controllers/projects/builds_controller.rb index d7513d75f01..553b62741a5 100644 --- a/app/controllers/projects/builds_controller.rb +++ b/app/controllers/projects/builds_controller.rb @@ -1,6 +1,6 @@ class Projects::BuildsController < Projects::ApplicationController before_action :build, except: [:index, :cancel_all] - before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry] + before_action :authorize_read_build!, except: [:cancel, :cancel_all, :retry, :play] before_action :authorize_update_build!, except: [:index, :show, :status, :raw] layout 'project' @@ -49,14 +49,19 @@ class Projects::BuildsController < Projects::ApplicationController end def retry - unless @build.retryable? - return render_404 - end + return render_404 unless @build.retryable? build = Ci::Build.retry(@build, current_user) redirect_to build_path(build) end + def play + return render_404 unless @build.playable? + + build = @build.play(current_user) + redirect_to build_path(build) + end + def cancel @build.cancel redirect_to build_path(@build) diff --git a/app/controllers/projects/compare_controller.rb b/app/controllers/projects/compare_controller.rb index 5f3ee71444d..10749d0fef8 100644 --- a/app/controllers/projects/compare_controller.rb +++ b/app/controllers/projects/compare_controller.rb @@ -15,6 +15,7 @@ class Projects::CompareController < Projects::ApplicationController end def show + apply_diff_view_cookie! end def diff_for_path diff --git a/app/controllers/projects/issues_controller.rb b/app/controllers/projects/issues_controller.rb index b6e80762e3c..fa663c9bda4 100644 --- a/app/controllers/projects/issues_controller.rb +++ b/app/controllers/projects/issues_controller.rb @@ -226,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/pipelines_settings_controller.rb b/app/controllers/projects/pipelines_settings_controller.rb new file mode 100644 index 00000000000..85ba706e5cd --- /dev/null +++ b/app/controllers/projects/pipelines_settings_controller.rb @@ -0,0 +1,30 @@ +class Projects::PipelinesSettingsController < Projects::ApplicationController + before_action :authorize_admin_pipeline! + + def show + @ref = params[:ref] || @project.default_branch || 'master' + @build_badge = Gitlab::Badge::Build.new(@project, @ref) + end + + def update + if @project.update_attributes(update_params) + flash[:notice] = "CI/CD Pipelines settings for '#{@project.name}' were successfully updated." + redirect_to namespace_project_pipelines_settings_path(@project.namespace, @project) + else + render 'index' + end + end + + private + + def create_params + params.require(:pipeline).permit(:ref) + end + + def update_params + params.require(:project).permit( + :runners_token, :builds_enabled, :build_allow_git_fetch, :build_timeout_in_minutes, :build_coverage_regex, + :public_builds + ) + end +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/refs_controller.rb b/app/controllers/projects/refs_controller.rb index d79f16e6a5a..3602b3d5e58 100644 --- a/app/controllers/projects/refs_controller.rb +++ b/app/controllers/projects/refs_controller.rb @@ -25,7 +25,7 @@ class Projects::RefsController < Projects::ApplicationController when "graphs_commits" commits_namespace_project_graph_path(@project.namespace, @project, @id) when "badges" - namespace_project_badges_path(@project.namespace, @project, ref: @id) + namespace_project_pipelines_settings_path(@project.namespace, @project, ref: @id) else namespace_project_commits_path(@project.namespace, @project, @id) end diff --git a/app/controllers/projects/services_controller.rb b/app/controllers/projects/services_controller.rb index 739681f4085..6a227d85f6f 100644 --- a/app/controllers/projects/services_controller.rb +++ b/app/controllers/projects/services_controller.rb @@ -1,20 +1,5 @@ class Projects::ServicesController < Projects::ApplicationController - ALLOWED_PARAMS = [:title, :token, :type, :active, :api_key, :api_url, :api_version, :subdomain, - :room, :recipients, :project_url, :webhook, - :user_key, :device, :priority, :sound, :bamboo_url, :username, :password, - :build_key, :server, :teamcity_url, :drone_url, :build_type, - :description, :issues_url, :new_issue_url, :restrict_to_branch, :channel, - :colorize_messages, :channels, - :push_events, :issues_events, :merge_requests_events, :tag_push_events, - :note_events, :build_events, :wiki_page_events, - :notify_only_broken_builds, :add_pusher, - :send_from_committer_email, :disable_diffs, :external_wiki_url, - :notify, :color, - :server_host, :server_port, :default_irc_uri, :enable_ssl_verification, - :jira_issue_transition_id] - - # Parameters to ignore if no value is specified - FILTER_BLANK_PARAMS = [:password] + include ServiceParams # Authorize before_action :authorize_admin_project! @@ -33,7 +18,7 @@ class Projects::ServicesController < Projects::ApplicationController end def update - if @service.update_attributes(service_params) + if @service.update_attributes(service_params[:service]) redirect_to( edit_namespace_project_service_path(@project.namespace, @project, @service.to_param, notice: @@ -45,8 +30,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 @@ -63,12 +49,4 @@ class Projects::ServicesController < Projects::ApplicationController def service @service ||= @project.services.find { |service| service.to_param == params[:id] } end - - def service_params - service_params = params.require(:service).permit(ALLOWED_PARAMS) - FILTER_BLANK_PARAMS.each do |param| - service_params.delete(param) if service_params[param].blank? - end - service_params - end end diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 1803aa8eab4..ec7a2e63b9a 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] @@ -296,7 +296,7 @@ class ProjectsController < Projects::ApplicationController :issues_tracker_id, :default_branch, :wiki_enabled, :visibility_level, :import_url, :last_activity_at, :namespace_id, :avatar, :builds_enabled, :build_allow_git_fetch, :build_timeout_in_minutes, :build_coverage_regex, - :public_builds, :only_allow_merge_if_build_succeeds + :public_builds, :only_allow_merge_if_build_succeeds, :request_access_enabled ) end diff --git a/app/helpers/avatars_helper.rb b/app/helpers/avatars_helper.rb new file mode 100644 index 00000000000..6ff40c6b461 --- /dev/null +++ b/app/helpers/avatars_helper.rb @@ -0,0 +1,30 @@ +module AvatarsHelper + + def author_avatar(commit_or_event, options = {}) + user_avatar(options.merge({ + user: commit_or_event.author, + user_name: commit_or_event.author_name, + user_email: commit_or_event.author_email, + })) + end + + private + + def user_avatar(options = {}) + avatar_size = options[:size] || 16 + user_name = options[:user].try(:name) || options[:user_name] + avatar = image_tag( + avatar_icon(options[:user] || options[:user_email], avatar_size), + class: "avatar has-tooltip hidden-xs s#{avatar_size}", + alt: "#{user_name}'s avatar", + title: user_name + ) + + if options[:user] + link_to(avatar, user_path(options[:user])) + elsif options[:user_email] + mail_to(options[:user_email], avatar) + end + end + +end 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/ci_status_helper.rb b/app/helpers/ci_status_helper.rb index e6c99c9959e..59a8365d60b 100644 --- a/app/helpers/ci_status_helper.rb +++ b/app/helpers/ci_status_helper.rb @@ -26,18 +26,20 @@ module CiStatusHelper icon_name = case status when 'success' - 'check' + 'icon_status_success' + when 'success_with_warnings' + 'icon_status_warning' when 'failed' - 'close' + 'icon_status_failed' when 'pending' - 'clock-o' + 'icon_status_pending' when 'running' - 'spinner' + 'icon_status_running' else - 'circle' + 'icon_status_cancel' end - icon(icon_name + ' fw') + custom_icon(icon_name) end def render_commit_status(commit, tooltip_placement: 'auto left', cssclass: '') diff --git a/app/helpers/commits_helper.rb b/app/helpers/commits_helper.rb index 474041eccbb..052ce56809e 100644 --- a/app/helpers/commits_helper.rb +++ b/app/helpers/commits_helper.rb @@ -16,16 +16,6 @@ module CommitsHelper commit_person_link(commit, options.merge(source: :committer)) end - def commit_author_avatar(commit, options = {}) - options = options.merge(source: :author) - user = commit.send(options[:source]) - - source_email = clean(commit.send "#{options[:source]}_email".to_sym) - person_email = user.try(:email) || source_email - - image_tag(avatar_icon(person_email, options[:size]), class: "avatar #{"s#{options[:size]}" if options[:size]} hidden-xs", width: options[:size], alt: "") - end - def image_diff_class(diff) if diff.deleted_file "deleted" 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/external_wiki_helper.rb b/app/helpers/external_wiki_helper.rb index 1f3401f2906..defd87d6bbe 100644 --- a/app/helpers/external_wiki_helper.rb +++ b/app/helpers/external_wiki_helper.rb @@ -1,8 +1,7 @@ module ExternalWikiHelper def get_project_wiki_path(project) - external_wiki_service = project.services. - find { |service| service.to_param == 'external_wiki' } - if external_wiki_service.present? && external_wiki_service.active? + external_wiki_service = project.external_wiki + if external_wiki_service external_wiki_service.properties['external_wiki_url'] else namespace_project_wiki_path(project.namespace, project, :home) diff --git a/app/helpers/services_helper.rb b/app/helpers/services_helper.rb new file mode 100644 index 00000000000..2dd0bf5d71e --- /dev/null +++ b/app/helpers/services_helper.rb @@ -0,0 +1,25 @@ +module ServicesHelper + def service_event_description(event) + case event + when "push" + "Event will be triggered by a push to the repository" + when "tag_push" + "Event will be triggered when a new tag is pushed to the repository" + when "note" + "Event will be triggered when someone adds a comment" + when "issue" + "Event will be triggered when an issue is created/updated/merged" + when "merge_request" + "Event will be triggered when a merge request is created/updated/merged" + when "build" + "Event will be triggered when a build status changes" + when "wiki_page" + "Event will be triggered when a wiki page is created/updated" + end + end + + def service_event_field_name(event) + event = event.pluralize if %w[merge_request issue].include?(event) + "#{event}_events" + end +end diff --git a/app/helpers/time_helper.rb b/app/helpers/time_helper.rb index 8cb82c2d5cc..1926f03af07 100644 --- a/app/helpers/time_helper.rb +++ b/app/helpers/time_helper.rb @@ -1,14 +1,4 @@ module TimeHelper - def duration_in_words(finished_at, started_at) - if finished_at && started_at - interval_in_seconds = finished_at.to_i - started_at.to_i - elsif started_at - interval_in_seconds = Time.now.to_i - started_at.to_i - end - - time_interval_in_words(interval_in_seconds) - end - def time_interval_in_words(interval_in_seconds) minutes = interval_in_seconds / 60 seconds = interval_in_seconds - minutes * 60 @@ -25,9 +15,19 @@ module TimeHelper end def duration_in_numbers(finished_at, started_at) - diff_in_seconds = finished_at.to_i - started_at.to_i - time_format = diff_in_seconds < 1.hour ? "%M:%S" : "%H:%M:%S" + interval = interval_in_seconds(started_at, finished_at) + time_format = interval < 1.hour ? "%M:%S" : "%H:%M:%S" - Time.at(diff_in_seconds).utc.strftime(time_format) + Time.at(interval).utc.strftime(time_format) + end + + private + + def interval_in_seconds(started_at, finished_at = nil) + if started_at && finished_at + finished_at.to_i - started_at.to_i + elsif started_at + Time.now.to_i - started_at.to_i + end 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 6fd18f2ee24..f33c8d61d3f 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -172,7 +172,7 @@ class Ability rules << :read_build if project.public_builds? unless owner || project.team.member?(user) || project_group_member?(project, user) - rules << :request_access + rules << :request_access if project.request_access_enabled end end @@ -373,7 +373,7 @@ class Ability end if group.public? || (group.internal? && !user.external?) - rules << :request_access unless group.users.include?(user) + rules << :request_access if group.request_access_enabled && group.users.exclude?(user) end rules.flatten diff --git a/app/models/ci/build.rb b/app/models/ci/build.rb index 65dfe4f0190..58a813f35ef 100644 --- a/app/models/ci/build.rb +++ b/app/models/ci/build.rb @@ -12,12 +12,10 @@ module Ci scope :unstarted, ->() { where(runner_id: nil) } scope :ignore_failures, ->() { where(allow_failure: false) } - scope :with_artifacts, ->() { where.not(artifacts_file: nil) } + scope :with_artifacts, ->() { where.not(artifacts_file: [nil, '']) } scope :with_expired_artifacts, ->() { with_artifacts.where('artifacts_expire_at < ?', Time.now) } scope :last_month, ->() { where('created_at > ?', Date.today - 1.month) } - scope :latest_successful_with_artifacts, ->() do - with_artifacts.success.order(id: :desc) - end + scope :manual_actions, ->() { where(when: :manual) } mount_uploader :artifacts_file, ArtifactUploader mount_uploader :artifacts_metadata, ArtifactUploader @@ -94,6 +92,29 @@ module Ci end end + def manual? + self.when == 'manual' + end + + def other_actions + pipeline.manual_actions.where.not(name: name) + end + + def playable? + project.builds_enabled? && commands.present? && manual? + end + + def play(current_user = nil) + # Try to queue a current build + if self.queue + self.update(user: current_user) + self + else + # Otherwise we need to create a duplicate + Ci::Build.retry(self, current_user) + end + end + def retryable? project.builds_enabled? && commands.present? && complete? end @@ -124,11 +145,14 @@ module Ci end def variables - variables = [] - variables += predefined_variables - variables += yaml_variables if yaml_variables - variables += project_variables - variables += trigger_variables + variables = predefined_variables + variables += project.predefined_variables + variables += pipeline.predefined_variables + variables += runner.predefined_variables if runner + variables += project.container_registry_variables + variables += yaml_variables + variables += project.secret_variables + variables += trigger_request.user_variables if trigger_request variables end @@ -388,6 +412,14 @@ module Ci self.update(artifacts_expire_at: nil) end + def when + read_attribute(:when) || build_attributes_from_config[:when] || 'on_success' + end + + def yaml_variables + read_attribute(:yaml_variables) || build_attributes_from_config[:yaml_variables] || [] + end + private def update_artifacts_size @@ -406,29 +438,30 @@ module Ci self.update(erased_by: user, erased_at: Time.now, artifacts_expire_at: nil) end - def project_variables - project.variables.map do |variable| - { key: variable.key, value: variable.value, public: false } - end + def predefined_variables + variables = [ + { key: 'CI', value: 'true', public: true }, + { key: 'GITLAB_CI', value: 'true', public: true }, + { key: 'CI_BUILD_ID', value: id.to_s, public: true }, + { key: 'CI_BUILD_TOKEN', value: token, public: false }, + { key: 'CI_BUILD_REF', value: sha, public: true }, + { key: 'CI_BUILD_BEFORE_SHA', value: before_sha, public: true }, + { key: 'CI_BUILD_REF_NAME', value: ref, public: true }, + { key: 'CI_BUILD_NAME', value: name, public: true }, + { key: 'CI_BUILD_STAGE', value: stage, public: true }, + { key: 'CI_SERVER_NAME', value: 'GitLab', public: true }, + { key: 'CI_SERVER_VERSION', value: Gitlab::VERSION, public: true }, + { key: 'CI_SERVER_REVISION', value: Gitlab::REVISION, public: true } + ] + variables << { key: 'CI_BUILD_TAG', value: ref, public: true } if tag? + variables << { key: 'CI_BUILD_TRIGGERED', value: 'true', public: true } if trigger_request + variables end - def trigger_variables - if trigger_request && trigger_request.variables - trigger_request.variables.map do |key, value| - { key: key, value: value, public: false } - end - else - [] - end - end + def build_attributes_from_config + return {} unless pipeline.config_processor - def predefined_variables - variables = [] - variables << { key: :CI_BUILD_TAG, value: ref, public: true } if tag? - variables << { key: :CI_BUILD_NAME, value: name, public: true } - variables << { key: :CI_BUILD_STAGE, value: stage, public: true } - variables << { key: :CI_BUILD_TRIGGERED, value: 'true', public: true } if trigger_request - variables + pipeline.config_processor.build_attributes(name) end end end diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb index 148b056789a..f0edf3e2731 100644 --- a/app/models/ci/pipeline.rb +++ b/app/models/ci/pipeline.rb @@ -20,6 +20,11 @@ module Ci after_touch :update_state after_save :keep_around_commits + # ref can't be HEAD or SHA, can only be branch/tag name + scope :latest_successful_for, ->(ref = default_branch) do + where(ref: ref).success.order(id: :desc).limit(1) + end + def self.truncate_sha(sha) sha[0...8] end @@ -51,6 +56,10 @@ module Ci commit.try(:message) end + def git_commit_title + commit.try(:title) + end + def short_sha Ci::Pipeline.truncate_sha(sha) end @@ -65,6 +74,10 @@ module Ci !tag? end + def manual_actions + builds.latest.manual_actions + end + def retryable? builds.latest.any? do |build| build.failed? && build.retryable? @@ -190,6 +203,12 @@ module Ci Note.for_commit_id(sha) end + def predefined_variables + [ + { key: 'CI_PIPELINE_ID', value: id.to_s, public: true } + ] + end + private def build_builds_for_stages(stages, user, status, trigger_request) @@ -198,8 +217,9 @@ module Ci # build builds only for the first stage that has builds available. # stages.any? do |stage| - CreateBuildsService.new(self) - .execute(stage, user, status, trigger_request).present? + CreateBuildsService.new(self). + execute(stage, user, status, trigger_request). + any?(&:active?) end end diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index b64ec79ec2b..49f05f881a2 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -114,6 +114,14 @@ module Ci tag_list.any? end + def predefined_variables + [ + { key: 'CI_RUNNER_ID', value: id.to_s, public: true }, + { key: 'CI_RUNNER_DESCRIPTION', value: description, public: true }, + { key: 'CI_RUNNER_TAGS', value: tag_list.to_s, public: true } + ] + end + private def tag_constraints diff --git a/app/models/ci/trigger_request.rb b/app/models/ci/trigger_request.rb index fcf2b6dc5e2..fc674871743 100644 --- a/app/models/ci/trigger_request.rb +++ b/app/models/ci/trigger_request.rb @@ -7,5 +7,13 @@ module Ci has_many :builds, class_name: 'Ci::Build' serialize :variables + + def user_variables + return [] unless variables + + variables.map do |key, value| + { key: key, value: value, public: false } + end + end end end diff --git a/app/models/commit_status.rb b/app/models/commit_status.rb index 3e97fe68d4b..2d185c28809 100644 --- a/app/models/commit_status.rb +++ b/app/models/commit_status.rb @@ -17,17 +17,19 @@ class CommitStatus < ActiveRecord::Base alias_attribute :author, :user scope :latest, -> do - max_id = unscope(:select). - select("max(#{table_name}.id)"). - group(:name, :commit_id) + max_id = unscope(:select).select("max(#{quoted_table_name}.id)") - where(id: max_id) + where(id: max_id.group(:name, :commit_id)) end scope :retried, -> { where.not(id: latest) } scope :ordered, -> { order(:name) } scope :ignored, -> { where(allow_failure: true, status: [:failed, :canceled]) } state_machine :status, initial: :pending do + event :queue do + transition skipped: :pending + end + event :run do transition pending: :running end diff --git a/app/models/concerns/statuseable.rb b/app/models/concerns/statuseable.rb index 3ef91caad47..44c6b30f278 100644 --- a/app/models/concerns/statuseable.rb +++ b/app/models/concerns/statuseable.rb @@ -16,10 +16,10 @@ module Statuseable deduce_status = "(CASE WHEN (#{builds})=0 THEN NULL - WHEN (#{builds})=(#{success})+(#{ignored}) THEN 'success' - WHEN (#{builds})=(#{pending}) THEN 'pending' - WHEN (#{builds})=(#{canceled})+(#{success})+(#{ignored}) THEN 'canceled' WHEN (#{builds})=(#{skipped}) THEN 'skipped' + WHEN (#{builds})=(#{success})+(#{ignored})+(#{skipped}) THEN 'success' + WHEN (#{builds})=(#{pending})+(#{skipped}) THEN 'pending' + WHEN (#{builds})=(#{canceled})+(#{success})+(#{ignored})+(#{skipped}) THEN 'canceled' WHEN (#{running})+(#{pending})>0 THEN 'running' ELSE 'failed' END)" diff --git a/app/models/deployment.rb b/app/models/deployment.rb index 520026c18dd..1a7cd60817e 100644 --- a/app/models/deployment.rb +++ b/app/models/deployment.rb @@ -32,4 +32,8 @@ class Deployment < ActiveRecord::Base def keep_around_commit project.repository.keep_around(self.sha) end + + def manual_actions + deployable.try(:other_actions) + end end 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/project.rb b/app/models/project.rb index 60928bf9922..d14d15fdc5c 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -430,18 +430,14 @@ class Project < ActiveRecord::Base end # ref can't be HEAD, can only be branch/tag name or SHA - def latest_successful_pipeline_for(ref = 'master') - table = Ci::Pipeline.quoted_table_name - # TODO: Use `where(ref: ref).or(sha: ref)` in Rails 5 - pipelines.where("#{table}.ref = ? OR #{table}.sha = ?", ref, ref). - success.order(id: :desc) - end + def latest_successful_builds_for(ref = default_branch) + latest_pipeline = pipelines.latest_successful_for(ref).first - # ref can't be HEAD, can only be branch/tag name or SHA - def latest_successful_builds_for(ref = 'master') - Ci::Build.joins(:pipeline). - merge(latest_successful_pipeline_for(ref)). - latest_successful_with_artifacts + if latest_pipeline + latest_pipeline.builds.latest.with_artifacts + else + builds.none + end end def merge_base_commit(first_commit_id, second_commit_id) @@ -665,6 +661,22 @@ class Project < ActiveRecord::Base update_column(:has_external_issue_tracker, services.external_issue_trackers.any?) end + def external_wiki + if has_external_wiki.nil? + cache_has_external_wiki # Populate + end + + if has_external_wiki + @external_wiki ||= services.external_wikis.first + else + nil + end + end + + def cache_has_external_wiki + update_column(:has_external_wiki, services.external_wikis.any?) + end + def build_missing_services services_templates = Service.where(template: true) @@ -853,6 +865,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 @@ -1175,4 +1191,34 @@ class Project < ActiveRecord::Base def ensure_dir_exist gitlab_shell.add_namespace(repository_storage_path, namespace.path) end + + def predefined_variables + [ + { key: 'CI_PROJECT_ID', value: id.to_s, public: true }, + { key: 'CI_PROJECT_NAME', value: path, public: true }, + { key: 'CI_PROJECT_PATH', value: path_with_namespace, public: true }, + { key: 'CI_PROJECT_NAMESPACE', value: namespace.path, public: true }, + { key: 'CI_PROJECT_URL', value: web_url, public: true } + ] + end + + def container_registry_variables + return [] unless Gitlab.config.registry.enabled + + variables = [ + { key: 'CI_REGISTRY', value: Gitlab.config.registry.host_port, public: true } + ] + + if container_registry_enabled? + variables << { key: 'CI_REGISTRY_IMAGE', value: container_registry_repository_url, public: true } + end + + variables + end + + def secret_variables + variables.map do |variable| + { key: variable.key, value: variable.value, public: false } + end + end end 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/project_services/slack_service.rb b/app/models/project_services/slack_service.rb index cf9e4d5a8b6..abbc780dc1a 100644 --- a/app/models/project_services/slack_service.rb +++ b/app/models/project_services/slack_service.rb @@ -4,6 +4,9 @@ class SlackService < Service validates :webhook, presence: true, url: true, if: :activated? def initialize_properties + # Custom serialized properties initialization + self.supported_events.each { |event| self.class.prop_accessor(event_channel_name(event)) } + if properties.nil? self.properties = {} self.notify_only_broken_builds = true @@ -29,13 +32,15 @@ class SlackService < Service end def fields - [ - { type: 'text', name: 'webhook', - placeholder: 'https://hooks.slack.com/services/...' }, - { type: 'text', name: 'username', placeholder: 'username' }, - { type: 'text', name: 'channel', placeholder: '#channel' }, - { type: 'checkbox', name: 'notify_only_broken_builds' }, - ] + default_fields = + [ + { type: 'text', name: 'webhook', placeholder: 'https://hooks.slack.com/services/...' }, + { type: 'text', name: 'username', placeholder: 'username' }, + { type: 'text', name: 'channel', placeholder: "#general" }, + { type: 'checkbox', name: 'notify_only_broken_builds' }, + ] + + default_fields + build_event_channels end def supported_events @@ -74,7 +79,10 @@ class SlackService < Service end opt = {} - opt[:channel] = channel if channel + + event_channel = get_channel_field(object_kind) || channel + + opt[:channel] = event_channel if event_channel opt[:username] = username if username if message @@ -83,8 +91,35 @@ class SlackService < Service end end + def event_channel_names + supported_events.map { |event| event_channel_name(event) } + end + + def event_field(event) + fields.find { |field| field[:name] == event_channel_name(event) } + end + + def global_fields + fields.reject { |field| field[:name].end_with?('channel') } + end + private + def get_channel_field(event) + field_name = event_channel_name(event) + self.public_send(field_name) + end + + def build_event_channels + supported_events.reduce([]) do |channels, event| + channels << { type: 'text', name: event_channel_name(event), placeholder: "#general" } + end + end + + def event_channel_name(event) + "#{event}_channel" + end + def project_name project.name_with_namespace.gsub(/\s/, '') end diff --git a/app/models/repository.rb b/app/models/repository.rb index 5b670cb4b8f..511df2d67c6 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -392,6 +392,11 @@ class Repository expire_cache if exists? + # expire cache that don't depend on repository data (when expiring) + expire_tags_cache + expire_tag_count_cache + expire_branches_cache + expire_branch_count_cache expire_root_ref_cache expire_emptiness_caches expire_exists_cache @@ -704,6 +709,7 @@ class Repository options[:commit] = { message: message, branch: ref, + update_ref: false, } raw_repository.mkdir(path, options) @@ -719,6 +725,7 @@ class Repository options[:commit] = { message: message, branch: ref, + update_ref: false, } options[:file] = { @@ -731,6 +738,33 @@ class Repository end end + def update_file(user, path, content, branch:, previous_path:, message:) + commit_with_hooks(user, branch) do |ref| + committer = user_to_committer(user) + options = {} + options[:committer] = committer + options[:author] = committer + options[:commit] = { + message: message, + branch: ref, + update_ref: false + } + + options[:file] = { + content: content, + path: path, + update: true + } + + if previous_path + options[:file][:previous_path] = previous_path + Gitlab::Git::Blob.rename(raw_repository, options) + else + Gitlab::Git::Blob.commit(raw_repository, options) + end + end + end + def remove_file(user, path, message, branch) commit_with_hooks(user, branch) do |ref| committer = user_to_committer(user) @@ -739,7 +773,8 @@ class Repository options[:author] = committer options[:commit] = { message: message, - branch: ref + branch: ref, + update_ref: false, } options[:file] = { @@ -769,9 +804,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 +814,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 +832,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 +849,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 +860,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 +961,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 +973,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..a8e1cc2f422 100644 --- a/app/models/service.rb +++ b/app/models/service.rb @@ -17,6 +17,7 @@ class Service < ActiveRecord::Base after_commit :reset_updated_properties after_commit :cache_project_has_external_issue_tracker + after_commit :cache_project_has_external_wiki belongs_to :project, inverse_of: :services has_one :service_hook @@ -25,6 +26,7 @@ class Service < ActiveRecord::Base scope :visible, -> { where.not(type: ['GitlabIssueTrackerService', 'GitlabCiService']) } scope :issue_trackers, -> { where(category: 'issue_tracker') } + scope :external_wikis, -> { where(type: 'ExternalWikiService') } scope :active, -> { where(active: true) } scope :without_defaults, -> { where(default: false) } @@ -76,6 +78,22 @@ class Service < ActiveRecord::Base [] end + def test_data(project, user) + Gitlab::PushDataBuilder.build_sample(project, user) + end + + def event_channel_names + [] + end + + def event_field(event) + nil + end + + def global_fields + fields + end + def supported_events %w(push tag_push issue merge_request wiki_page) end @@ -94,6 +112,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 @@ -203,4 +226,10 @@ class Service < ActiveRecord::Base project.cache_has_external_issue_tracker end end + + def cache_project_has_external_wiki + if project && !project.destroyed? + project.cache_has_external_wiki + end + end end diff --git a/app/models/user.rb b/app/models/user.rb index 3d0a033785c..975e935fa20 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -854,7 +854,7 @@ class User < ActiveRecord::Base groups.joins(:shared_projects).select(:project_id)] if min_access_level - scope = { access_level: Gitlab::Access.values.select { |access| access >= min_access_level } } + scope = { access_level: Gitlab::Access.all_values.select { |access| access >= min_access_level } } relations = [relations.shift] + relations.map { |relation| relation.where(members: scope) } end diff --git a/app/services/ci/create_builds_service.rb b/app/services/ci/create_builds_service.rb index 3b21f0acb96..4946f7076fd 100644 --- a/app/services/ci/create_builds_service.rb +++ b/app/services/ci/create_builds_service.rb @@ -15,7 +15,7 @@ module Ci status == 'success' when 'on_failure' status == 'failed' - when 'always' + when 'always', 'manual' %w(success failed).include?(status) end end @@ -47,6 +47,10 @@ module Ci user: user, project: @pipeline.project) + # TODO: The proper implementation for this is in + # https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5295 + build_attrs[:status] = 'skipped' if build_attrs[:when] == 'manual' + ## # We do not persist new builds here. # Those will be persisted when @pipeline is saved. 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/files/base_service.rb b/app/services/files/base_service.rb index 37c5e321b39..c4a206f785e 100644 --- a/app/services/files/base_service.rb +++ b/app/services/files/base_service.rb @@ -9,12 +9,14 @@ module Files @commit_message = params[:commit_message] @file_path = params[:file_path] + @previous_path = params[:previous_path] @file_content = if params[:file_content_encoding] == 'base64' Base64.decode64(params[:file_content]) else params[:file_content] end + # Validate parameters validate # Create new branch if it different from source_branch @@ -42,7 +44,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/files/update_service.rb b/app/services/files/update_service.rb index 1960dc7d949..8d2b5083179 100644 --- a/app/services/files/update_service.rb +++ b/app/services/files/update_service.rb @@ -3,7 +3,10 @@ require_relative "base_service" module Files class UpdateService < Files::BaseService def commit - repository.commit_file(current_user, @file_path, @file_content, @commit_message, @target_branch, true) + repository.update_file(current_user, @file_path, @file_content, + branch: @target_branch, + previous_path: @previous_path, + message: @commit_message) end end end 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/projects/import_export/export_service.rb b/app/services/projects/import_export/export_service.rb index 998789d64d2..06252c7b625 100644 --- a/app/services/projects/import_export/export_service.rb +++ b/app/services/projects/import_export/export_service.rb @@ -9,7 +9,7 @@ module Projects private def save_all - if [version_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver].all?(&:save) + if [version_saver, avatar_saver, project_tree_saver, uploads_saver, repo_saver, wiki_repo_saver].all?(&:save) Gitlab::ImportExport::Saver.save(project: project, shared: @shared) notify_success else @@ -21,6 +21,10 @@ module Projects Gitlab::ImportExport::VersionSaver.new(shared: @shared) end + def avatar_saver + Gitlab::ImportExport::AvatarSaver.new(project: project, shared: @shared) + end + def project_tree_saver Gitlab::ImportExport::ProjectTreeSaver.new(project: project, shared: @shared) end diff --git a/app/uploaders/avatar_uploader.rb b/app/uploaders/avatar_uploader.rb index 6135c3ad96f..03d9329a14e 100644 --- a/app/uploaders/avatar_uploader.rb +++ b/app/uploaders/avatar_uploader.rb @@ -14,4 +14,8 @@ class AvatarUploader < CarrierWave::Uploader::Base def reset_events_cache(file) model.reset_events_cache if model.is_a?(User) end + + def exists? + model.avatar.file && model.avatar.file.exists? + end end diff --git a/app/views/admin/groups/_form.html.haml b/app/views/admin/groups/_form.html.haml index 0cc405401cf..5f7fdfdb011 100644 --- a/app/views/admin/groups/_form.html.haml +++ b/app/views/admin/groups/_form.html.haml @@ -9,6 +9,10 @@ = render 'shared/visibility_level', f: f, visibility_level: @group.visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group + .form-group + .col-sm-offset-2.col-sm-10 + = render 'shared/allow_request_access', form: f + - if @group.new_record? .form-group .col-sm-offset-2.col-sm-10 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/events/_event.html.haml b/app/views/events/_event.html.haml index e4629bae0e6..5c318cd3b8b 100644 --- a/app/views/events/_event.html.haml +++ b/app/views/events/_event.html.haml @@ -4,11 +4,7 @@ #{time_ago_with_tooltip(event.created_at)} = cache [event, current_application_settings, "v2.2"] do - - if event.author - = link_to user_path(event.author) do - = image_tag avatar_icon(event.author_email, 40), class: "avatar s40", alt:'' - - else - = image_tag avatar_icon(event.author_email, 40), class: "avatar s40", alt:'' + = author_avatar(event, size: 40) - if event.created_project? = render "events/event/created_project", event: event diff --git a/app/views/groups/edit.html.haml b/app/views/groups/edit.html.haml index 92cd4c553d0..decb89b2fd6 100644 --- a/app/views/groups/edit.html.haml +++ b/app/views/groups/edit.html.haml @@ -22,6 +22,10 @@ = render 'shared/visibility_level', f: f, visibility_level: @group.visibility_level, can_change_visibility_level: can_change_group_visibility_level?(@group), form_model: @group .form-group + .col-sm-offset-2.col-sm-10 + = render 'shared/allow_request_access', form: f + + .form-group %hr = f.label :share_with_group_lock, class: 'control-label' do Share with group lock diff --git a/app/views/layouts/_init_auto_complete.html.haml b/app/views/layouts/_init_auto_complete.html.haml index 12e7ed0e792..351100f3523 100644 --- a/app/views/layouts/_init_auto_complete.html.haml +++ b/app/views/layouts/_init_auto_complete.html.haml @@ -1,7 +1,7 @@ - project = @target_project || @project +- noteable_class = @noteable.class if @noteable.present? -- if @noteable - :javascript - GitLab.GfmAutoComplete.dataSource = "#{autocomplete_sources_namespace_project_path(project.namespace, project, type: @noteable.class, type_id: params[:id])}" - GitLab.GfmAutoComplete.cachedData = undefined; - GitLab.GfmAutoComplete.setup(); +:javascript + GitLab.GfmAutoComplete.dataSource = "#{autocomplete_sources_namespace_project_path(project.namespace, project, type: noteable_class, type_id: params[:id])}" + GitLab.GfmAutoComplete.cachedData = undefined; + GitLab.GfmAutoComplete.setup(); diff --git a/app/views/layouts/nav/_explore.html.haml b/app/views/layouts/nav/_explore.html.haml index 3b40006a0cc..e5bda7b3a6f 100644 --- a/app/views/layouts/nav/_explore.html.haml +++ b/app/views/layouts/nav/_explore.html.haml @@ -1,21 +1,17 @@ %ul.nav.nav-sidebar = nav_link(path: ['dashboard#show', 'root#show', 'projects#trending', 'projects#starred', 'projects#index'], html_options: {class: 'home'}) do = link_to explore_root_path, title: 'Projects' do - = icon('bookmark fw') %span Projects = nav_link(controller: [:groups, 'groups/milestones', 'groups/group_members']) do = link_to explore_groups_path, title: 'Groups' do - = icon('group fw') %span Groups = nav_link(controller: :snippets) do = link_to explore_snippets_path, title: 'Snippets' do - = icon('clipboard fw') %span Snippets = nav_link(controller: :help) do = link_to help_path, title: 'Help' do - = icon('question-circle fw') %span Help diff --git a/app/views/layouts/nav/_project_settings.html.haml b/app/views/layouts/nav/_project_settings.html.haml index 51a54b4f262..52a5bdc1a1b 100644 --- a/app/views/layouts/nav/_project_settings.html.haml +++ b/app/views/layouts/nav/_project_settings.html.haml @@ -39,7 +39,7 @@ = link_to namespace_project_triggers_path(@project.namespace, @project), title: 'Triggers' do %span Triggers - = nav_link(controller: :badges) do - = link_to namespace_project_badges_path(@project.namespace, @project), title: 'Badges' do + = nav_link(controller: :pipelines_settings) do + = link_to namespace_project_pipelines_settings_path(@project.namespace, @project), title: 'CI/CD Pipelines' do %span - Badges + CI/CD Pipelines diff --git a/app/views/profiles/_head.html.haml b/app/views/profiles/_head.html.haml index 003884a5bd9..943ebdaeffe 100644 --- a/app/views/profiles/_head.html.haml +++ b/app/views/profiles/_head.html.haml @@ -1,3 +1,3 @@ - content_for :page_specific_javascripts do = page_specific_javascript_tag('lib/cropper.js') - = page_specific_javascript_tag('profile/application.js') + = page_specific_javascript_tag('profile/profile_bundle.js') diff --git a/app/views/projects/_builds_settings.html.haml b/app/views/projects/_builds_settings.html.haml deleted file mode 100644 index fff30f11d82..00000000000 --- a/app/views/projects/_builds_settings.html.haml +++ /dev/null @@ -1,65 +0,0 @@ -%fieldset.builds-feature - %h5.prepend-top-0 - Builds - - unless @repository.gitlab_ci_yml - .form-group - %p Builds need to be configured before you can begin using Continuous Integration. - = link_to 'Get started with Builds', help_page_path('ci/quick_start/README'), class: 'btn btn-info' - .form-group - %p Get recent application code using the following command: - .radio - = f.label :build_allow_git_fetch_false do - = f.radio_button :build_allow_git_fetch, 'false' - %strong git clone - %br - %span.descr Slower but makes sure you have a clean dir before every build - .radio - = f.label :build_allow_git_fetch_true do - = f.radio_button :build_allow_git_fetch, 'true' - %strong git fetch - %br - %span.descr Faster - - .form-group - = f.label :build_timeout_in_minutes, 'Timeout', class: 'label-light' - = f.number_field :build_timeout_in_minutes, class: 'form-control', min: '0' - %p.help-block per build in minutes - .form-group - = f.label :build_coverage_regex, "Test coverage parsing", class: 'label-light' - .input-group - %span.input-group-addon / - = f.text_field :build_coverage_regex, class: 'form-control', placeholder: '\(\d+.\d+\%\) covered' - %span.input-group-addon / - %p.help-block - We will use this regular expression to find test coverage output in build trace. - Leave blank if you want to disable this feature - .bs-callout.bs-callout-info - %p Below are examples of regex for existing tools: - %ul - %li - Simplecov (Ruby) - - %code \(\d+.\d+\%\) covered - %li - pytest-cov (Python) - - %code \d+\%\s*$ - %li - phpunit --coverage-text --colors=never (PHP) - - %code ^\s*Lines:\s*\d+.\d+\% - %li - gcovr (C/C++) - - %code ^TOTAL.*\s+(\d+\%)$ - %li - tap --coverage-report=text-summary (Node.js) - - %code ^Statements\s*:\s*([^%]+) - - .form-group - .checkbox - = f.label :public_builds do - = f.check_box :public_builds - %strong Public builds - .help-block Allow everyone to access builds for Public and Internal projects - - .form-group.append-bottom-0 - = f.label :runners_token, "Runners token", class: 'label-light' - = f.text_field :runners_token, class: "form-control", placeholder: 'xEeFCaDAB89' - %p.help-block The secure token used to checkout project. diff --git a/app/views/projects/badges/index.html.haml b/app/views/projects/badges/index.html.haml deleted file mode 100644 index ac80951dd4f..00000000000 --- a/app/views/projects/badges/index.html.haml +++ /dev/null @@ -1,23 +0,0 @@ -- page_title 'Badges' -- badges_path = namespace_project_badges_path(@project.namespace, @project) - -.prepend-top-10 - .panel.panel-default - .panel-heading - %b Builds badge · - = @build_badge.to_html - .pull-right - = render 'shared/ref_switcher', destination: 'badges', align_right: true - .panel-body - .row - .col-md-2.text-center - Markdown - .col-md-10.code.js-syntax-highlight - = highlight('.md', @build_badge.to_markdown) - .row - %hr - .row - .col-md-2.text-center - HTML - .col-md-10.code.js-syntax-highlight - = highlight('.html', @build_badge.to_html) diff --git a/app/views/projects/blob/_editor.html.haml b/app/views/projects/blob/_editor.html.haml index 29c7d45074a..ff379bafb26 100644 --- a/app/views/projects/blob/_editor.html.haml +++ b/app/views/projects/blob/_editor.html.haml @@ -4,7 +4,9 @@ = icon('code-fork') = ref %span.editor-file-name - = @path + - if current_action?(:edit) || current_action?(:update) + = text_field_tag 'file_path', (params[:file_path] || @path), + class: 'form-control new-file-path' - if current_action?(:new) || current_action?(:create) %span.editor-file-name diff --git a/app/views/projects/branches/_branch.html.haml b/app/views/projects/branches/_branch.html.haml index e48b78f9eef..b096516c627 100644 --- a/app/views/projects/branches/_branch.html.haml +++ b/app/views/projects/branches/_branch.html.haml @@ -27,9 +27,9 @@ = link_to namespace_project_compare_index_path(@project.namespace, @project, from: @repository.root_ref, to: branch.name), class: 'btn btn-default', method: :post, title: "Compare" do Compare - - pipeline = @project.latest_successful_pipeline_for(branch.name).first + - pipeline = @project.pipelines.latest_successful_for(branch.name).first - if pipeline - - artifacts = pipeline.builds.latest_successful_with_artifacts + - artifacts = pipeline.builds.latest.with_artifacts - if artifacts.any? .dropdown.inline.artifacts-btn %a.btn.dropdown-toggle{ 'data-toggle' => 'dropdown' } diff --git a/app/views/projects/builds/_sidebar.html.haml b/app/views/projects/builds/_sidebar.html.haml index cab21f0cf19..dc57b49f27a 100644 --- a/app/views/projects/builds/_sidebar.html.haml +++ b/app/views/projects/builds/_sidebar.html.haml @@ -49,7 +49,7 @@ - if @build.duration %p.build-detail-row %span.build-light-text Duration: - #{duration_in_words(@build.finished_at, @build.started_at)} + = time_interval_in_words(@build.duration) - if @build.finished_at %p.build-detail-row %span.build-light-text Finished: @@ -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/buttons/_download.html.haml b/app/views/projects/buttons/_download.html.haml index 32f911f6b31..d135b448dd7 100644 --- a/app/views/projects/buttons/_download.html.haml +++ b/app/views/projects/buttons/_download.html.haml @@ -14,9 +14,9 @@ %li = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: @ref, format: 'tar.gz'), rel: 'nofollow' do %span Download tar.gz - - pipeline = @project.latest_successful_pipeline_for(@ref).first + - pipeline = @project.pipelines.latest_successful_for(@ref).first - if pipeline - - artifacts = pipeline.builds.latest_successful_with_artifacts + - artifacts = pipeline.builds.latest.with_artifacts - if artifacts.any? %li.dropdown-header Artifacts - unless pipeline.latest? diff --git a/app/views/projects/buttons/_fork.html.haml b/app/views/projects/buttons/_fork.html.haml index a9eaed4c5f6..a098a082854 100644 --- a/app/views/projects/buttons/_fork.html.haml +++ b/app/views/projects/buttons/_fork.html.haml @@ -2,7 +2,7 @@ - if current_user && can?(current_user, :fork_project, @project) - if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2 = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn has-tooltip' do - = icon('code-fork fw') + = custom_icon('icon_fork') Fork %div.count-with-arrow %span.arrow @@ -10,7 +10,7 @@ = @project.forks_count - else = link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn has-tooltip' do - = icon('code-fork fw') + = custom_icon('icon_fork') Fork %div.count-with-arrow %span.arrow diff --git a/app/views/projects/ci/builds/_build.html.haml b/app/views/projects/ci/builds/_build.html.haml index e1b42b2cfa5..9264289987d 100644 --- a/app/views/projects/ci/builds/_build.html.haml +++ b/app/views/projects/ci/builds/_build.html.haml @@ -39,6 +39,8 @@ %span.label.label-danger allowed to fail - if defined?(retried) && retried %span.label.label-warning retried + - if build.manual? + %span.label.label-info manual - if defined?(runner) && runner @@ -79,6 +81,11 @@ - if build.active? = link_to cancel_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Cancel', class: 'btn btn-build' do = icon('remove', class: 'cred') - - elsif defined?(allow_retry) && allow_retry && build.retryable? - = link_to retry_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Retry', class: 'btn btn-build' do - = icon('repeat') + - elsif defined?(allow_retry) && allow_retry + - if build.retryable? + = link_to retry_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Retry', class: 'btn btn-build' do + = icon('repeat') + - elsif build.playable? + = link_to play_namespace_project_build_path(build.project.namespace, build.project, build, return_to: request.original_url), method: :post, title: 'Play', class: 'btn btn-build' do + = icon('play') + diff --git a/app/views/projects/ci/pipelines/_pipeline.html.haml b/app/views/projects/ci/pipelines/_pipeline.html.haml index 0557d384e33..2f7d54f0bdd 100644 --- a/app/views/projects/ci/pipelines/_pipeline.html.haml +++ b/app/views/projects/ci/pipelines/_pipeline.html.haml @@ -10,12 +10,13 @@ = link_to namespace_project_pipeline_path(@project.namespace, @project, pipeline.id) do %span ##{pipeline.id} - if pipeline.ref + .icon-container + = pipeline.tag? ? icon('tag') : icon('code-fork') = link_to pipeline.ref, namespace_project_commits_path(@project.namespace, @project, pipeline.ref), class: "monospace branch-name" - = custom_icon("icon_commit") + .icon-container + = custom_icon("icon_commit") = link_to pipeline.short_sha, namespace_project_commit_path(@project.namespace, @project, pipeline.sha), class: "commit-id monospace" - - if pipeline.tag? - %span.label.label-primary tag - - elsif pipeline.latest? + - if pipeline.latest? %span.label.label-success.has-tooltip{ title: 'Latest build for this branch' } latest - if pipeline.triggered? %span.label.label-primary triggered @@ -26,7 +27,7 @@ %p.commit-title - if commit = pipeline.commit - = commit_author_avatar(commit, size: 20) + = author_avatar(commit, size: 20) = link_to_gfm truncate(commit.title, length: 60), namespace_project_commit_path(@project.namespace, @project, commit.id), class: "commit-row-message" - else Cant find HEAD commit for this branch @@ -34,7 +35,7 @@ - stages_status = pipeline.statuses.latest.stages_status - stages.each do |stage| - %td + %td.stage-cell - status = stages_status[stage] - tooltip = "#{stage.titleize}: #{status || 'not found'}" - if status @@ -57,18 +58,31 @@ %td.pipeline-actions .controls.hidden-xs.pull-right - artifacts = pipeline.builds.latest.select { |b| b.artifacts? } - - if artifacts.present? - .inline - .btn-group - %a.dropdown-toggle.btn.btn-default.build-artifacts{type: 'button', 'data-toggle' => 'dropdown'} - = icon("download") - %b.caret - %ul.dropdown-menu.dropdown-menu-align-right - - artifacts.each do |build| - %li - = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, build), rel: 'nofollow' do - = icon("download") - %span Download '#{build.name}' artifacts + - actions = pipeline.manual_actions + - if artifacts.present? || actions.any? + .btn-group.inline + - if actions.any? + .btn-group + %a.dropdown-toggle.btn.btn-default{type: 'button', 'data-toggle' => 'dropdown'} + = icon("play") + %b.caret + %ul.dropdown-menu.dropdown-menu-align-right + - actions.each do |build| + %li + = link_to play_namespace_project_build_path(@project.namespace, @project, build), method: :post, rel: 'nofollow' do + = icon("play") + %span= build.name.humanize + - if artifacts.present? + .btn-group + %a.dropdown-toggle.btn.btn-default.build-artifacts{type: 'button', 'data-toggle' => 'dropdown'} + = icon("download") + %b.caret + %ul.dropdown-menu.dropdown-menu-align-right + - artifacts.each do |build| + %li + = link_to download_namespace_project_build_artifacts_path(@project.namespace, @project, build), rel: 'nofollow' do + = icon("download") + %span Download '#{build.name}' artifacts - if can?(current_user, :update_pipeline, @project) .cancel-retry-btns.inline diff --git a/app/views/projects/commits/_commit.html.haml b/app/views/projects/commits/_commit.html.haml index c8c7b858baa..ab9afb06afb 100644 --- a/app/views/projects/commits/_commit.html.haml +++ b/app/views/projects/commits/_commit.html.haml @@ -9,7 +9,8 @@ = cache(cache_key) do %li.commit.js-toggle-container{ id: "commit-#{commit.short_id}" } - = commit_author_avatar(commit, size: 36) + = author_avatar(commit, size: 36) + .commit-info-block .commit-row-title %span.item-title diff --git a/app/views/projects/deployments/_actions.haml b/app/views/projects/deployments/_actions.haml new file mode 100644 index 00000000000..65d68aa2985 --- /dev/null +++ b/app/views/projects/deployments/_actions.haml @@ -0,0 +1,22 @@ +- if can?(current_user, :create_deployment, deployment) && deployment.deployable + .pull-right + - actions = deployment.manual_actions + - if actions.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 + - actions.each do |action| + %li + = link_to [:play, @project.namespace.becomes(Namespace), @project, action], method: :post, rel: 'nofollow' do + = icon("play") + %span= action.name.humanize + + - if local_assigns.fetch(:allow_rollback, false) + = link_to [:retry, @project.namespace.becomes(Namespace), @project, deployment.deployable], method: :post, class: 'btn btn-build' do + - if deployment.last? + Retry + - else + Rollback diff --git a/app/views/projects/deployments/_deployment.html.haml b/app/views/projects/deployments/_deployment.html.haml index d08dd92f1f6..baf02f1e6a0 100644 --- a/app/views/projects/deployments/_deployment.html.haml +++ b/app/views/projects/deployments/_deployment.html.haml @@ -7,17 +7,11 @@ %td - if deployment.deployable - = link_to namespace_project_build_path(@project.namespace, @project, deployment.deployable) do + = link_to [@project.namespace.becomes(Namespace), @project, deployment.deployable] do = "#{deployment.deployable.name} (##{deployment.deployable.id})" %td #{time_ago_with_tooltip(deployment.created_at)} %td - - if can?(current_user, :create_deployment, deployment) && deployment.deployable - .pull-right - = link_to retry_namespace_project_build_path(@project.namespace, @project, deployment.deployable), method: :post, class: 'btn btn-build' do - - if deployment.last? - Retry - - else - Rollback + = render 'projects/deployments/actions', deployment: deployment, allow_rollback: true 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/edit.html.haml b/app/views/projects/edit.html.haml index 57af167180b..921155e970b 100644 --- a/app/views/projects/edit.html.haml +++ b/app/views/projects/edit.html.haml @@ -32,6 +32,10 @@ %strong = visibility_level_label(@project.visibility_level) .light= visibility_level_description(@project.visibility_level, @project) + + .form-group + = render 'shared/allow_request_access', form: f + .form-group = f.label :tag_list, "Tags", class: 'label-light' = f.text_field :tag_list, value: @project.tag_list.to_s, maxlength: 2000, class: "form-control" @@ -86,8 +90,6 @@ %hr = render 'merge_request_settings', f: f %hr - = render 'builds_settings', f: f - %hr %fieldset.features.append-bottom-default %h5.prepend-top-0 Project avatar diff --git a/app/views/projects/environments/_environment.html.haml b/app/views/projects/environments/_environment.html.haml index eafa246d05f..e2453395602 100644 --- a/app/views/projects/environments/_environment.html.haml +++ b/app/views/projects/environments/_environment.html.haml @@ -15,3 +15,6 @@ %td - if last_deployment #{time_ago_with_tooltip(last_deployment.created_at)} + + %td + = render 'projects/deployments/actions', deployment: last_deployment diff --git a/app/views/projects/environments/index.html.haml b/app/views/projects/environments/index.html.haml index 303d7c23d01..a6dd34653ab 100644 --- a/app/views/projects/environments/index.html.haml +++ b/app/views/projects/environments/index.html.haml @@ -28,4 +28,5 @@ %th Environment %th Last deployment %th Date + %th = render @environments diff --git a/app/views/projects/environments/show.html.haml b/app/views/projects/environments/show.html.haml index b17aba2431f..b8b1ce52a91 100644 --- a/app/views/projects/environments/show.html.haml +++ b/app/views/projects/environments/show.html.haml @@ -5,7 +5,7 @@ %div{ class: container_class } .top-area .col-md-9 - %h3.page-title= @environment.name.titleize + %h3.page-title= @environment.name.capitalize .col-md-3 .nav-controls diff --git a/app/views/projects/forks/index.html.haml b/app/views/projects/forks/index.html.haml index dbe9ddfde2f..a1d79bdabda 100644 --- a/app/views/projects/forks/index.html.haml +++ b/app/views/projects/forks/index.html.haml @@ -31,11 +31,11 @@ - if current_user && can?(current_user, :fork_project, @project) - if current_user.already_forked?(@project) && current_user.manageable_namespaces.size < 2 = link_to namespace_project_path(current_user, current_user.fork_of(@project)), title: 'Go to your fork', class: 'btn btn-new' do - = icon('code-fork fw') + = custom_icon('icon_fork') Fork - else = link_to new_namespace_project_fork_path(@project.namespace, @project), title: "Fork project", class: 'btn btn-new' do - = icon('code-fork fw') + = custom_icon('icon_fork') Fork diff --git a/app/views/projects/forks/new.html.haml b/app/views/projects/forks/new.html.haml index 73a7fc0e1ac..5242bc72b71 100644 --- a/app/views/projects/forks/new.html.haml +++ b/app/views/projects/forks/new.html.haml @@ -1,45 +1,54 @@ - page_title "Fork project" -- if @namespaces.present? - %h3.page-title Fork project - %p.lead - Click to fork the project to a user or group - %hr - .fork-namespaces - - @namespaces.in_groups_of(6, false) do |group| - .row - - group.each do |namespace| - .col-md-2.col-sm-3 - - if fork = namespace.find_fork_of(@project) - .fork-thumbnail - = link_to project_path(fork), title: "Visit project fork", class: 'has-tooltip' do - = image_tag namespace_icon(namespace, 100) - .caption - %strong - = namespace.human_name - %div.text-primary - Already forked - - - else - .fork-thumbnail - = link_to namespace_project_forks_path(@project.namespace, @project, namespace_key: namespace.id), title: "Fork here", method: "POST", class: 'has-tooltip' do - = image_tag namespace_icon(namespace, 100) - .caption - %strong - = namespace.human_name - - %p.light - Fork is a copy of a project repository. +.row.prepend-top-default + .col-lg-3 + %h4.prepend-top-0 + Fork project + %p + A fork is a copy of a project. %br - Forking a repository allows you to do changes without affecting the original project. -- else - %h3 No available namespaces to fork the project - %p.slead - You must have permission to create a project in a namespace before forking. + Forking a repository allows you to make changes without affecting the original project. + .col-lg-9 + .fork-namespaces + - if @namespaces.present? + %label.label-light + %span + Click to fork the project to a user or group + - @namespaces.in_groups_of(6, false) do |group| + .row + - group.each do |namespace| + - avatar = namespace_icon(namespace, 100) + - if fork = namespace.find_fork_of(@project) + .fork-thumbnail.forked + = link_to project_path(fork) do + - if /no_((\w*)_)*avatar/.match(avatar) + .no-avatar + = icon 'question' + - else + = image_tag avatar + .caption + = namespace.human_name + - else + .fork-thumbnail + = link_to namespace_project_forks_path(@project.namespace, @project, namespace_key: namespace.id), method: "POST" do + - if /no_((\w*)_)*avatar/.match(avatar) + .no-avatar + = icon 'question' + - else + = image_tag avatar + .caption + = namespace.human_name + - else + %label.label-light + %span + No available namespaces to fork the project. + %br + %small + You must have permission to create a project in a namespace before forking. -.save-project-loader.hide - .center - %h2 - %i.fa.fa-spinner.fa-spin - Forking repository - %p Please wait a moment, this page will automatically refresh when ready. + .save-project-loader.hide + .center + %h2 + %i.fa.fa-spinner.fa-spin + Forking repository + %p Please wait a moment, this page will automatically refresh when ready. diff --git a/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml b/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml index 542827b2f15..331dc1fcc29 100644 --- a/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml +++ b/app/views/projects/generic_commit_statuses/_generic_commit_status.html.haml @@ -51,7 +51,7 @@ %td.duration - if generic_commit_status.duration = icon("clock-o") - #{duration_in_words(generic_commit_status.finished_at, generic_commit_status.started_at)} + = time_interval_in_words(generic_commit_status.duration) %td.timestamp - if generic_commit_status.finished_at diff --git a/app/views/projects/graphs/_head.html.haml b/app/views/projects/graphs/_head.html.haml index ca347406dfe..45e51389c00 100644 --- a/app/views/projects/graphs/_head.html.haml +++ b/app/views/projects/graphs/_head.html.haml @@ -3,7 +3,7 @@ - content_for :page_specific_javascripts do = page_specific_javascript_tag('lib/chart.js') - = page_specific_javascript_tag('graphs/application.js') + = page_specific_javascript_tag('graphs/graphs_bundle.js') = nav_link(action: :show) do = link_to 'Contributors', namespace_project_graph_path = nav_link(action: :commits) do 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/network/show.html.haml b/app/views/projects/network/show.html.haml index 091af4df4a1..b2ece44d966 100644 --- a/app/views/projects/network/show.html.haml +++ b/app/views/projects/network/show.html.haml @@ -1,7 +1,7 @@ - page_title "Network", @ref - content_for :page_specific_javascripts do = page_specific_javascript_tag('lib/raphael.js') - = page_specific_javascript_tag('network/application.js') + = page_specific_javascript_tag('network/network_bundle.js') = render "projects/commits/head" = render "head" %div{ class: container_class } diff --git a/app/views/projects/notes/_notes_with_form.html.haml b/app/views/projects/notes/_notes_with_form.html.haml index 56d302fab82..74538a9723e 100644 --- a/app/views/projects/notes/_notes_with_form.html.haml +++ b/app/views/projects/notes/_notes_with_form.html.haml @@ -14,9 +14,9 @@ .disabled-comment.text-center .disabled-comment-text.inline Please - = link_to "register",new_user_session_path + = link_to "register", new_session_path(:user, redirect_to_referer: 'yes') or - = link_to "login",new_user_session_path + = link_to "login", new_session_path(:user, redirect_to_referer: 'yes') to post a comment :javascript diff --git a/app/views/projects/pipelines_settings/show.html.haml b/app/views/projects/pipelines_settings/show.html.haml new file mode 100644 index 00000000000..228bad36ebd --- /dev/null +++ b/app/views/projects/pipelines_settings/show.html.haml @@ -0,0 +1,103 @@ +- page_title "CI/CD Pipelines" + +.row.prepend-top-default + .col-lg-3.profile-settings-sidebar + %h4.prepend-top-0 + = page_title + .col-lg-9 + %h5.prepend-top-0 + Pipelines + = form_for @project, url: namespace_project_pipelines_settings_path(@project.namespace.becomes(Namespace), @project), remote: true, authenticity_token: true do |f| + %fieldset.builds-feature + - unless @repository.gitlab_ci_yml + .form-group + %p Pipelines need to be configured before you can begin using Continuous Integration. + = link_to 'Get started with CI/CD Pipelines', help_page_path('ci/quick_start/README'), class: 'btn btn-info' + .form-group + %p Get recent application code using the following command: + .radio + = f.label :build_allow_git_fetch_false do + = f.radio_button :build_allow_git_fetch, 'false' + %strong git clone + %br + %span.descr Slower but makes sure you have a clean dir before every build + .radio + = f.label :build_allow_git_fetch_true do + = f.radio_button :build_allow_git_fetch, 'true' + %strong git fetch + %br + %span.descr Faster + + .form-group + = f.label :build_timeout_in_minutes, 'Timeout', class: 'label-light' + = f.number_field :build_timeout_in_minutes, class: 'form-control', min: '0' + %p.help-block per build in minutes + .form-group + = f.label :build_coverage_regex, "Test coverage parsing", class: 'label-light' + .input-group + %span.input-group-addon / + = f.text_field :build_coverage_regex, class: 'form-control', placeholder: '\(\d+.\d+\%\) covered' + %span.input-group-addon / + %p.help-block + We will use this regular expression to find test coverage output in build trace. + Leave blank if you want to disable this feature + .bs-callout.bs-callout-info + %p Below are examples of regex for existing tools: + %ul + %li + Simplecov (Ruby) - + %code \(\d+.\d+\%\) covered + %li + pytest-cov (Python) - + %code \d+\%\s*$ + %li + phpunit --coverage-text --colors=never (PHP) - + %code ^\s*Lines:\s*\d+.\d+\% + %li + gcovr (C/C++) - + %code ^TOTAL.*\s+(\d+\%)$ + %li + tap --coverage-report=text-summary (Node.js) - + %code ^Statements\s*:\s*([^%]+) + + .form-group + .checkbox + = f.label :public_builds do + = f.check_box :public_builds + %strong Public pipelines + .help-block Allow everyone to access pipelines for Public and Internal projects + + .form-group.append-bottom-default + = f.label :runners_token, "Runners token", class: 'label-light' + = f.text_field :runners_token, class: "form-control", placeholder: 'xEeFCaDAB89' + %p.help-block The secure token used to checkout project. + + = f.submit 'Save changes', class: "btn btn-save" + +%hr + +.row.prepend-top-default + .col-lg-3.profile-settings-sidebar + %h4.prepend-top-0 + Builds Badge + .col-lg-9 + .prepend-top-10 + .panel.panel-default + .panel-heading + %b Builds badge · + = @build_badge.to_html + .pull-right + = render 'shared/ref_switcher', destination: 'badges', align_right: true + .panel-body + .row + .col-md-2.text-center + Markdown + .col-md-10.code.js-syntax-highlight + = highlight('.md', @build_badge.to_markdown) + .row + %hr + .row + .col-md-2.text-center + HTML + .col-md-10.code.js-syntax-highlight + = highlight('.html', @build_badge.to_html) 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 883d3e3af1e..151e1d64851 100644 --- a/app/views/projects/protected_branches/index.html.haml +++ b/app/views/projects/protected_branches/index.html.haml @@ -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/repositories/_download_archive.html.haml b/app/views/projects/repositories/_download_archive.html.haml index e29d99371c8..183daebfc3a 100644 --- a/app/views/projects/repositories/_download_archive.html.haml +++ b/app/views/projects/repositories/_download_archive.html.haml @@ -25,9 +25,9 @@ = link_to archive_namespace_project_repository_path(@project.namespace, @project, ref: ref, format: 'tar'), rel: 'nofollow' do %i.fa.fa-download %span Download tar - - pipeline = @project.latest_successful_pipeline_for(ref).first + - pipeline = @project.pipelines.latest_successful_for(ref).first - if pipeline - - artifacts = pipeline.builds.latest_successful_with_artifacts + - artifacts = pipeline.builds.latest.with_artifacts - if artifacts.any? %li.dropdown-header Artifacts - unless pipeline.latest? diff --git a/app/views/projects/services/_form.html.haml b/app/views/projects/services/_form.html.haml index 1f13ea28b4e..752fbc21a11 100644 --- a/app/views/projects/services/_form.html.haml +++ b/app/views/projects/services/_form.html.haml @@ -8,9 +8,10 @@ .col-lg-9 = form_for(@service, as: :service, url: namespace_project_service_path(@project.namespace, @project, @service.to_param), method: :put, html: { class: 'form-horizontal' }) do |form| = render 'shared/service_settings', form: form + = form.submit 'Save changes', class: 'btn btn-save' - 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/projects/tags/_download.html.haml b/app/views/projects/tags/_download.html.haml index 8acf145049a..bb2e5224306 100644 --- a/app/views/projects/tags/_download.html.haml +++ b/app/views/projects/tags/_download.html.haml @@ -12,9 +12,9 @@ %li = link_to archive_namespace_project_repository_path(project.namespace, project, ref: ref, format: 'tar.gz'), rel: 'nofollow' do %span Download tar.gz - - pipeline = project.latest_successful_pipeline_for(ref).first + - pipeline = project.pipelines.latest_successful_for(ref).first - if pipeline - - artifacts = pipeline.builds.latest_successful_with_artifacts + - artifacts = pipeline.builds.latest.with_artifacts - if artifacts.any? %li.dropdown-header Artifacts - unless pipeline.latest? diff --git a/app/views/projects/tags/show.html.haml b/app/views/projects/tags/show.html.haml index b7d7d5c5382..395d7af6cbb 100644 --- a/app/views/projects/tags/show.html.haml +++ b/app/views/projects/tags/show.html.haml @@ -1,36 +1,39 @@ +- @no_container = true - page_title @tag.name, "Tags" = render "projects/commits/head" -.row-content-block - .pull-right - - if can?(current_user, :push_code, @project) - = link_to edit_namespace_project_tag_release_path(@project.namespace, @project, @tag.name), class: 'btn-grouped btn has-tooltip', title: 'Edit release notes' do - = icon("pencil") - = link_to namespace_project_tree_path(@project.namespace, @project, @tag.name), class: 'btn btn-grouped has-tooltip', title: 'Browse files' do - = icon('files-o') - = link_to namespace_project_commits_path(@project.namespace, @project, @tag.name), class: 'btn btn-grouped has-tooltip', title: 'Browse commits' do - = icon('history') - - if can? current_user, :download_code, @project - = render 'projects/tags/download', ref: @tag.name, project: @project - - if can?(current_user, :admin_project, @project) - .pull-right - = link_to namespace_project_tag_path(@project.namespace, @project, @tag.name), class: 'btn btn-remove remove-row grouped has-tooltip', title: "Delete tag", method: :delete, data: { confirm: "Deleting the '#{@tag.name}' tag cannot be undone. Are you sure?" } do - %i.fa.fa-trash-o - .title - %span.item-title= @tag.name - - if @commit - = render 'projects/branches/commit', commit: @commit, project: @project - - else - Cant find HEAD commit for this tag - - if @tag.message.present? - %pre.body - = strip_gpg_signature(@tag.message) +%div{ class: container_class } + .sub-header-block + .pull-right.tag-buttons + - if can?(current_user, :push_code, @project) + = link_to edit_namespace_project_tag_release_path(@project.namespace, @project, @tag.name), class: 'btn has-tooltip', title: 'Edit release notes' do + = icon("pencil") + = link_to namespace_project_tree_path(@project.namespace, @project, @tag.name), class: 'btn has-tooltip', title: 'Browse files' do + = icon('files-o') + = link_to namespace_project_commits_path(@project.namespace, @project, @tag.name), class: 'btn has-tooltip', title: 'Browse commits' do + = icon('history') + - if can? current_user, :download_code, @project + = render 'projects/tags/download', ref: @tag.name, project: @project + - if can?(current_user, :admin_project, @project) + .pull-right + = link_to namespace_project_tag_path(@project.namespace, @project, @tag.name), class: 'btn btn-remove remove-row grouped has-tooltip', title: "Delete tag", method: :delete, data: { confirm: "Deleting the '#{@tag.name}' tag cannot be undone. Are you sure?" } do + %i.fa.fa-trash-o + .tag-info.append-bottom-10 + .title + %span.item-title= @tag.name + - if @commit + = render 'projects/branches/commit', commit: @commit, project: @project + - else + Cant find HEAD commit for this tag + - if @tag.message.present? + %pre.body + = strip_gpg_signature(@tag.message) -.append-bottom-default.prepend-top-default - - if @release.description.present? - .description - .wiki - = preserve do - = markdown @release.description - - else - This tag has no release notes. + .append-bottom-default.prepend-top-default + - if @release.description.present? + .description + .wiki + = preserve do + = markdown @release.description + - else + This tag has no release notes. diff --git a/app/views/shared/_allow_request_access.html.haml b/app/views/shared/_allow_request_access.html.haml new file mode 100644 index 00000000000..53a99a736c0 --- /dev/null +++ b/app/views/shared/_allow_request_access.html.haml @@ -0,0 +1,6 @@ +.checkbox + = form.label :request_access_enabled do + = form.check_box :request_access_enabled + %strong Allow users to request access + %br + %span.descr Allow users to request access if visibility is public or internal. diff --git a/app/views/shared/_service_settings.html.haml b/app/views/shared/_service_settings.html.haml index 4eaf7c2a025..5254d265918 100644 --- a/app/views/shared/_service_settings.html.haml +++ b/app/views/shared/_service_settings.html.haml @@ -10,69 +10,28 @@ .col-sm-10 = form.check_box :active -- if @service.supported_events.length > 1 - .form-group - = form.label :url, "Trigger", class: 'control-label' - .col-sm-10 - - if @service.supported_events.include?("push") - %div - = form.check_box :push_events, class: 'pull-left' - .prepend-left-20 - = form.label :push_events, class: 'list-label' do - %strong Push events - %p.light - This url will be triggered by a push to the repository - - if @service.supported_events.include?("tag_push") - %div - = form.check_box :tag_push_events, class: 'pull-left' - .prepend-left-20 - = form.label :tag_push_events, class: 'list-label' do - %strong Tag push events - %p.light - This url will be triggered when a new tag is pushed to the repository - - if @service.supported_events.include?("note") - %div - = form.check_box :note_events, class: 'pull-left' - .prepend-left-20 - = form.label :note_events, class: 'list-label' do - %strong Comments - %p.light - This url will be triggered when someone adds a comment - - if @service.supported_events.include?("issue") - %div - = form.check_box :issues_events, class: 'pull-left' - .prepend-left-20 - = form.label :issues_events, class: 'list-label' do - %strong Issues events - %p.light - This url will be triggered when an issue is created/updated/merged - - if @service.supported_events.include?("merge_request") - %div - = form.check_box :merge_requests_events, class: 'pull-left' - .prepend-left-20 - = form.label :merge_requests_events, class: 'list-label' do - %strong Merge Request events - %p.light - This url will be triggered when a merge request is created/updated/merged - - if @service.supported_events.include?("build") - %div - = form.check_box :build_events, class: 'pull-left' - .prepend-left-20 - = form.label :build_events, class: 'list-label' do - %strong Build events - %p.light - This url will be triggered when a build status changes - - if @service.supported_events.include?("wiki_page") - %div - = form.check_box :wiki_page_events, class: 'pull-left' - .prepend-left-20 - = form.label :wiki_page_events, class: 'list-label' do - %strong Wiki Page events - %p.light - This url will be triggered when a wiki page is created/updated +.form-group + = form.label :url, "Trigger", class: 'control-label' + + .col-sm-10 + - @service.supported_events.each do |event| + %div + = form.check_box service_event_field_name(event), class: 'pull-left' + .prepend-left-20 + = form.label service_event_field_name(event), class: 'list-label' do + %strong + = event.humanize + + - field = @service.event_field(event) + + - if field + %p + = form.text_field field[:name], class: "form-control", placeholder: field[:placeholder] + %p.light + = service_event_description(event) -- @service.fields.each do |field| +- @service.global_fields.each do |field| - type = field[:type] - if type == 'fieldset' diff --git a/app/views/shared/icons/_icon_fork.svg b/app/views/shared/icons/_icon_fork.svg new file mode 100644 index 00000000000..420ffe3a55b --- /dev/null +++ b/app/views/shared/icons/_icon_fork.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="40" height="40" viewBox="0 0 40 40" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><circle id="a" cx="4" cy="4" r="4"/><mask id="d" width="8" height="8" x="0" y="0" fill="#fff"><use xlink:href="#a"/></mask><circle id="b" cx="20" cy="4" r="4"/><mask id="e" width="8" height="8" x="0" y="0" fill="#fff"><use xlink:href="#b"/></mask><circle id="c" cx="12" cy="30" r="4"/><mask id="f" width="8" height="8" x="0" y="0" fill="#fff"><use xlink:href="#c"/></mask></defs><g fill="none" fill-rule="evenodd" transform="translate(8 3)"><path fill="#7E7E7E" d="M10 19.667c-4.14-1.29-7.389-5.878-7.389-5.878C2.274 13.353 2 12.545 2 12.01V6h4v5.509c0 .276.166.65.367.831 0 0 1.136 1.028 1.746 1.574C9.617 15.261 11.048 16 12.09 16c1.028 0 2.41-.723 3.858-2.048.588-.54 1.84-1.742 1.84-1.742a.784.784 0 0 0 .211-.502V6h4v6.008c0 .548-.259 1.349-.601 1.795 0 0-3.21 4.707-7.399 5.916V27h-4v-7.333z"/><use stroke="#7E7E7E" stroke-width="4" mask="url(#d)" xlink:href="#a"/><use stroke="#7E7E7E" stroke-width="4" mask="url(#e)" xlink:href="#b"/><use stroke="#7E7E7E" stroke-width="4" mask="url(#f)" xlink:href="#c"/></g></svg>
\ No newline at end of file diff --git a/app/views/shared/icons/_icon_status_cancel.svg b/app/views/shared/icons/_icon_status_cancel.svg new file mode 100644 index 00000000000..6a0bc1490c4 --- /dev/null +++ b/app/views/shared/icons/_icon_status_cancel.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="a" cx="7" cy="7" r="7"/> + <mask id="b" width="14" height="14" x="0" y="0" fill="white"> + <use xlink:href="#a"/> + </mask> + </defs> + <g fill="none" fill-rule="evenodd"> + <use stroke="#5C5C5C" stroke-width="2" mask="url(#b)" xlink:href="#a"/> + <rect width="10" height="1" x="2" y="6.5" fill="#5C5C5C" transform="rotate(45 7 7)" rx=".3"/> + </g> +</svg> diff --git a/app/views/shared/icons/_icon_status_failed.svg b/app/views/shared/icons/_icon_status_failed.svg new file mode 100644 index 00000000000..c41ca18cae7 --- /dev/null +++ b/app/views/shared/icons/_icon_status_failed.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="a" cx="7" cy="7" r="7"/> + <mask id="b" width="14" height="14" x="0" y="0" fill="white"> + <use xlink:href="#a"/> + </mask> + </defs> + <g fill="none" fill-rule="evenodd"> + <use stroke="#D22852" stroke-width="2" mask="url(#b)" xlink:href="#a"/> + <path fill="#D22852" d="M7.5,6.5 L7.5,4.30578971 C7.5,4.12531853 7.36809219,4 7.20537567,4 L6.79462433,4 C6.63904572,4 6.5,4.13690672 6.5,4.30578971 L6.5,6.5 L4.30578971,6.5 C4.12531853,6.5 4,6.63190781 4,6.79462433 L4,7.20537567 C4,7.36095428 4.13690672,7.5 4.30578971,7.5 L6.5,7.5 L6.5,9.69421029 C6.5,9.87468147 6.63190781,10 6.79462433,10 L7.20537567,10 C7.36095428,10 7.5,9.86309328 7.5,9.69421029 L7.5,7.5 L9.69421029,7.5 C9.87468147,7.5 10,7.36809219 10,7.20537567 L10,6.79462433 C10,6.63904572 9.86309328,6.5 9.69421029,6.5 L7.5,6.5 Z" transform="rotate(45 7 7)"/> + </g> +</svg> diff --git a/app/views/shared/icons/_icon_status_pending.svg b/app/views/shared/icons/_icon_status_pending.svg new file mode 100644 index 00000000000..035cd8b4ccc --- /dev/null +++ b/app/views/shared/icons/_icon_status_pending.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="a" cx="7" cy="7" r="7"/> + <mask id="b" width="14" height="14" x="0" y="0" fill="white"> + <use xlink:href="#a"/> + </mask> + </defs> + <g fill="none" fill-rule="evenodd"> + <use stroke="#E75E40" stroke-width="2" mask="url(#b)" xlink:href="#a"/> + <rect width="1" height="4" x="5" y="5" fill="#E75E40" rx=".3"/> + <rect width="1" height="4" x="8" y="5" fill="#E75E40" rx=".3"/> + </g> +</svg> diff --git a/app/views/shared/icons/_icon_status_running.svg b/app/views/shared/icons/_icon_status_running.svg new file mode 100644 index 00000000000..a48b3a25099 --- /dev/null +++ b/app/views/shared/icons/_icon_status_running.svg @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="a" cx="7" cy="7" r="7"/> + <mask id="b" width="14" height="14" x="0" y="0" fill="white"> + <use xlink:href="#a"/> + </mask> + </defs> + <g fill="none" fill-rule="evenodd"> + <use stroke="#2D9FD8" stroke-width="2" mask="url(#b)" xlink:href="#a"/> + <path fill="#2D9FD8" d="M7,3.00800862 C9.09023405,3.13960661 10.7448145,4.87657932 10.7448145,7 C10.7448145,9.209139 8.95395346,11 6.74481446,11 C5.4560962,11 4.30972054,10.3905589 3.57817301,9.44416214 L7,7 L7,3.00800862 Z"/> + </g> +</svg> diff --git a/app/views/shared/icons/_icon_status_success.svg b/app/views/shared/icons/_icon_status_success.svg new file mode 100644 index 00000000000..260eab013a3 --- /dev/null +++ b/app/views/shared/icons/_icon_status_success.svg @@ -0,0 +1,15 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="a" cx="7" cy="7" r="7"/> + <mask id="b" width="14" height="14" x="0" y="0" fill="white"> + <use xlink:href="#a"/> + </mask> + </defs> + <g fill="none" fill-rule="evenodd"> + <use stroke="#31AF64" stroke-width="2" mask="url(#b)" xlink:href="#a"/> + <g fill="#31AF64" transform="rotate(45 -.13 10.953)"> + <rect width="1" height="5" x="2" rx=".3"/> + <rect width="3" height="1" y="4" rx=".3"/> + </g> + </g> +</svg> diff --git a/app/views/shared/icons/_icon_status_warning.svg b/app/views/shared/icons/_icon_status_warning.svg new file mode 100644 index 00000000000..d47e7a1c93f --- /dev/null +++ b/app/views/shared/icons/_icon_status_warning.svg @@ -0,0 +1,15 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 14 14" xmlns:xlink="http://www.w3.org/1999/xlink"> + <defs> + <circle id="a" cx="7" cy="7" r="7"/> + <mask id="b" width="14" height="14" x="0" y="0" fill="white"> + <use xlink:href="#a"/> + </mask> + </defs> + <g fill="none" fill-rule="evenodd"> + <g fill="#FF8A24" transform="translate(6 3)"> + <rect width="2" height="5" rx=".5"/> + <rect width="2" height="2" y="6" rx=".5"/> + </g> + <use stroke="#FF8A24" stroke-width="2" mask="url(#b)" xlink:href="#a"/> + </g> +</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/users/show.html.haml b/app/views/users/show.html.haml index db2b4885861..c7f39868e71 100644 --- a/app/views/users/show.html.haml +++ b/app/views/users/show.html.haml @@ -2,7 +2,7 @@ - page_description @user.bio - content_for :page_specific_javascripts do = page_specific_javascript_tag('lib/d3.js') - = page_specific_javascript_tag('users/application.js') + = page_specific_javascript_tag('users/users_bundle.js') - header_title @user.name, user_path(@user) - @no_container = true diff --git a/config/application.rb b/config/application.rb index 5f7b6a3c049..06ebb14a5fe 100644 --- a/config/application.rb +++ b/config/application.rb @@ -76,15 +76,15 @@ 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" config.assets.precompile << "mailers/*.css" - config.assets.precompile << "graphs/application.js" - config.assets.precompile << "users/application.js" - config.assets.precompile << "network/application.js" - config.assets.precompile << "profile/application.js" + config.assets.precompile << "graphs/graphs_bundle.js" + config.assets.precompile << "users/users_bundle.js" + config.assets.precompile << "network/network_bundle.js" + config.assets.precompile << "profile/profile_bundle.js" config.assets.precompile << "lib/utils/*.js" config.assets.precompile << "lib/*.js" config.assets.precompile << "u2f.js" diff --git a/config/initializers/relative_naming_ci_namespace.rb b/config/initializers/relative_naming_ci_namespace.rb new file mode 100644 index 00000000000..59abe1b9b91 --- /dev/null +++ b/config/initializers/relative_naming_ci_namespace.rb @@ -0,0 +1,16 @@ +# Description: https://coderwall.com/p/heed_q/rails-routing-and-namespaced-models +# +# This allows us to use CI ActiveRecord objects in all routes and use it: +# - [project.namespace, project, build] +# +# instead of: +# - namespace_project_build_path(project.namespace, project, build) +# +# Without that, Ci:: namespace is used for resolving routes: +# - namespace_project_ci_build_path(project.namespace, project, build) + +module Ci + def self.use_relative_model_naming? + true + end +end diff --git a/config/initializers/secure_headers.rb b/config/initializers/secure_headers.rb new file mode 100644 index 00000000000..253e3cf7410 --- /dev/null +++ b/config/initializers/secure_headers.rb @@ -0,0 +1,99 @@ +# 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 + +CSP_REPORT_URI = '' + +# 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 + } + + config.csp[:report_uri] = %W(#{CSP_REPORT_URI}) + + # 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..5e839327e7a 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -13,7 +13,15 @@ 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 + cron_jobs.delete(k) + Rails.logger.error("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/config/routes.rb b/config/routes.rb index 97c1e8d2154..ccc50f5cd08 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -89,11 +89,10 @@ Rails.application.routes.draw do mount Grack::AuthSpawner, at: '/', constraints: lambda { |request| /[-\/\w\.]+\.git\/(info\/lfs|gitlab-lfs)/.match(request.path_info) }, via: [:get, :post, :put] # Help - - get 'help' => 'help#index' - get 'help/*path' => 'help#show', as: :help_page - get 'help/shortcuts' - get 'help/ui' => 'help#ui' + get 'help' => 'help#index' + get 'help/shortcuts' => 'help#shortcuts' + get 'help/ui' => 'help#ui' + get 'help/*path' => 'help#show', as: :help_page # # Global snippets @@ -733,6 +732,10 @@ Rails.application.routes.draw do resources :triggers, only: [:index, :create, :destroy] resources :pipelines, only: [:index, :new, :create, :show] do + collection do + resource :pipelines_settings, path: 'settings', only: [:show, :update] + end + member do post :cancel post :retry @@ -758,6 +761,7 @@ Rails.application.routes.draw do get :status post :cancel post :retry + post :play post :erase get :trace get :raw diff --git a/db/fixtures/development/14_builds.rb b/db/fixtures/development/14_builds.rb index 51ff451eb4c..124704cb451 100644 --- a/db/fixtures/development/14_builds.rb +++ b/db/fixtures/development/14_builds.rb @@ -1,13 +1,34 @@ class Gitlab::Seeder::Builds + STAGES = %w[build notify_build test notify_test deploy notify_deploy] + def initialize(project) @project = project end def seed! - ci_commits.each do |ci_commit| + pipelines.each do |pipeline| begin - build_create!(ci_commit, name: 'test build 1') - build_create!(ci_commit, status: 'success', name: 'test build 2') + build_create!(pipeline, name: 'build:linux', stage: 'build') + build_create!(pipeline, name: 'build:osx', stage: 'build') + + build_create!(pipeline, name: 'slack post build', stage: 'notify_build') + + build_create!(pipeline, name: 'rspec:linux', stage: 'test') + build_create!(pipeline, name: 'rspec:windows', stage: 'test') + build_create!(pipeline, name: 'rspec:windows', stage: 'test') + build_create!(pipeline, name: 'rspec:osx', stage: 'test') + build_create!(pipeline, name: 'spinach:linux', stage: 'test') + build_create!(pipeline, name: 'spinach:osx', stage: 'test') + build_create!(pipeline, name: 'cucumber:linux', stage: 'test') + build_create!(pipeline, name: 'cucumber:osx', stage: 'test') + + build_create!(pipeline, name: 'slack post test', stage: 'notify_test') + + build_create!(pipeline, name: 'staging', stage: 'deploy', environment: 'staging') + build_create!(pipeline, name: 'production', stage: 'deploy', environment: 'production', when: 'manual') + + commit_status_create!(pipeline, name: 'jenkins') + print '.' rescue ActiveRecord::RecordInvalid print 'F' @@ -15,8 +36,8 @@ class Gitlab::Seeder::Builds end end - def ci_commits - commits = @project.repository.commits('master', nil, 5) + def pipelines + commits = @project.repository.commits('master', limit: 5) commits_sha = commits.map { |commit| commit.raw.id } commits_sha.map do |sha| @project.ensure_pipeline(sha, 'master') @@ -25,11 +46,11 @@ class Gitlab::Seeder::Builds [] end - def build_create!(ci_commit, opts = {}) - attributes = build_attributes_for(ci_commit).merge(opts) + def build_create!(pipeline, opts = {}) + attributes = build_attributes_for(pipeline, opts) build = Ci::Build.new(attributes) - if %w(success failed).include?(build.status) + if opts[:name].start_with?('build') artifacts_cache_file(artifacts_archive_path) do |file| build.artifacts_file = file end @@ -40,19 +61,28 @@ class Gitlab::Seeder::Builds end build.save! + build.update(status: build_status) if %w(running success failed).include?(build.status) # We need to set build trace after saving a build (id required) build.trace = FFaker::Lorem.paragraphs(6).join("\n\n") end end + + def commit_status_create!(pipeline, opts = {}) + attributes = commit_status_attributes_for(pipeline, opts) + GenericCommitStatus.create(attributes) + end + + def commit_status_attributes_for(pipeline, opts) + { name: 'test build', stage: 'test', stage_idx: stage_index(opts[:stage]), + ref: 'master', user: build_user, project: @project, pipeline: pipeline, + created_at: Time.now, updated_at: Time.now + }.merge(opts) + end - def build_attributes_for(ci_commit) - { name: 'test build', commands: "$ build command", - stage: 'test', stage_idx: 1, ref: 'master', - user_id: build_user, gl_project_id: @project.id, - status: build_status, commit_id: ci_commit.id, - created_at: Time.now, updated_at: Time.now } + def build_attributes_for(pipeline, opts) + commit_status_attributes_for(pipeline, opts).merge(commands: '$ build command') end def build_user @@ -63,13 +93,16 @@ class Gitlab::Seeder::Builds Ci::Build::AVAILABLE_STATUSES.sample end + def stage_index(stage) + STAGES.index(stage) || 0 + end + def artifacts_archive_path Rails.root + 'spec/fixtures/ci_build_artifacts.zip' end def artifacts_metadata_path Rails.root + 'spec/fixtures/ci_build_artifacts_metadata.gz' - end def artifacts_cache_file(file_path) diff --git a/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb b/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb index ac7eac0ea7c..611767ac7fe 100644 --- a/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb +++ b/db/migrate/20160302152808_remove_wrong_import_url_from_projects.rb @@ -7,7 +7,13 @@ class RemoveWrongImportUrlFromProjects < ActiveRecord::Migration class ProjectImportDataFake extend AttrEncrypted attr_accessor :credentials - attr_encrypted :credentials, key: Gitlab::Application.secrets.db_key_base, marshal: true, encode: true, :mode => :per_attribute_iv_and_salt + attr_encrypted :credentials, + key: Gitlab::Application.secrets.db_key_base, + marshal: true, + encode: true, + :mode => :per_attribute_iv_and_salt, + insecure_mode: true, + algorithm: 'aes-256-cbc' end def up 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/20160715154212_add_request_access_enabled_to_projects.rb b/db/migrate/20160715154212_add_request_access_enabled_to_projects.rb new file mode 100644 index 00000000000..bf0131c6d76 --- /dev/null +++ b/db/migrate/20160715154212_add_request_access_enabled_to_projects.rb @@ -0,0 +1,12 @@ +class AddRequestAccessEnabledToProjects < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + disable_ddl_transaction! + + def up + add_column_with_default :projects, :request_access_enabled, :boolean, default: true + end + + def down + remove_column :projects, :request_access_enabled + end +end diff --git a/db/migrate/20160715204316_add_request_access_enabled_to_groups.rb b/db/migrate/20160715204316_add_request_access_enabled_to_groups.rb new file mode 100644 index 00000000000..e7b14cd3ee2 --- /dev/null +++ b/db/migrate/20160715204316_add_request_access_enabled_to_groups.rb @@ -0,0 +1,12 @@ +class AddRequestAccessEnabledToGroups < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + disable_ddl_transaction! + + def up + add_column_with_default :namespaces, :request_access_enabled, :boolean, default: true + end + + def down + remove_column :namespaces, :request_access_enabled + end +end diff --git a/db/migrate/20160718153603_add_has_external_wiki_to_projects.rb b/db/migrate/20160718153603_add_has_external_wiki_to_projects.rb new file mode 100644 index 00000000000..55a3e954292 --- /dev/null +++ b/db/migrate/20160718153603_add_has_external_wiki_to_projects.rb @@ -0,0 +1,7 @@ +class AddHasExternalWikiToProjects < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + def change + add_column :projects, :has_external_wiki, :boolean + end +end diff --git a/db/schema.rb b/db/schema.rb index d250d65fe21..72780fb8d03 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: 20160716115710) do +ActiveRecord::Schema.define(version: 20160718153603) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -628,8 +628,8 @@ ActiveRecord::Schema.define(version: 20160716115710) do t.integer "merge_user_id" t.string "merge_commit_sha" t.datetime "deleted_at" + 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 @@ -664,16 +664,17 @@ ActiveRecord::Schema.define(version: 20160716115710) do add_index "milestones", ["title"], name: "index_milestones_on_title_trigram", using: :gin, opclasses: {"title"=>"gin_trgm_ops"} create_table "namespaces", force: :cascade do |t| - t.string "name", null: false - t.string "path", null: false + t.string "name", null: false + t.string "path", null: false t.integer "owner_id" t.datetime "created_at" t.datetime "updated_at" t.string "type" - t.string "description", default: "", null: false + t.string "description", default: "", null: false t.string "avatar" - t.boolean "share_with_group_lock", default: false - t.integer "visibility_level", default: 20, null: false + t.boolean "share_with_group_lock", default: false + t.integer "visibility_level", default: 20, null: false + t.boolean "request_access_enabled", default: true, null: false end add_index "namespaces", ["created_at", "id"], name: "index_namespaces_on_created_at_and_id", using: :btree @@ -842,6 +843,8 @@ ActiveRecord::Schema.define(version: 20160716115710) do t.boolean "only_allow_merge_if_build_succeeds", default: false, null: false t.boolean "has_external_issue_tracker" t.string "repository_storage", default: "default", null: false + t.boolean "has_external_wiki" + t.boolean "request_access_enabled", default: true, null: false end add_index "projects", ["builds_enabled", "shared_runners_enabled"], name: "index_projects_on_builds_enabled_and_shared_runners_enabled", using: :btree @@ -862,11 +865,12 @@ ActiveRecord::Schema.define(version: 20160716115710) 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 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/builds.md b/doc/api/builds.md index 2adea11247e..443739ff845 100644 --- a/doc/api/builds.md +++ b/doc/api/builds.md @@ -283,6 +283,40 @@ Response: [ce-2893]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/2893 +## Download the artifacts file + +> [Introduced][ce-5347] in GitLab 8.10. + +Download the artifacts file from the given reference name and job provided the +build finished successfully. + +``` +GET /projects/:id/artifacts/:ref_name/download?job=name +``` + +Parameters + +| Attribute | Type | Required | Description | +|-------------|---------|----------|-------------------------- | +| `id` | integer | yes | The ID of a project | +| `ref_name` | string | yes | The ref from a repository | +| `job` | string | yes | The name of the job | + +Example request: + +``` +curl -H "PRIVATE-TOKEN: 9koXpg98eAheJpvBs5tK" "https://gitlab.example.com/api/v3/projects/1/artifacts/master/download?job=test" +``` + +Example response: + +| Status | Description | +|-----------|---------------------------------| +| 200 | Serves the artifacts file | +| 404 | Build not found or no artifacts | + +[ce-5347]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/5347 + ## Get a trace file Get a trace of a specific build of a project @@ -409,7 +443,7 @@ POST /projects/:id/builds/:build_id/erase Parameters -| Attribute | Type | required | Description | +| Attribute | Type | Required | Description | |-------------|---------|----------|---------------------| | `id` | integer | yes | The ID of a project | | `build_id` | integer | yes | The ID of a build | @@ -459,7 +493,7 @@ POST /projects/:id/builds/:build_id/artifacts/keep Parameters -| Attribute | Type | required | Description | +| Attribute | Type | Required | Description | |-------------|---------|----------|---------------------| | `id` | integer | yes | The ID of a project | | `build_id` | integer | yes | The ID of a build | 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/variables/README.md b/doc/ci/variables/README.md index 137b080a8f7..4bf610f0e9a 100644 --- a/doc/ci/variables/README.md +++ b/doc/ci/variables/README.md @@ -18,25 +18,35 @@ The `API_TOKEN` will take the Secure Variable value: `SECURE`. ### Predefined variables (Environment Variables) -| Variable | Runner | Description | -|-------------------------|-----|--------| -| **CI** | 0.4 | Mark that build is executed in CI environment | -| **GITLAB_CI** | all | Mark that build is executed in GitLab CI environment | -| **CI_SERVER** | all | Mark that build is executed in CI environment | -| **CI_SERVER_NAME** | all | CI server that is used to coordinate builds | -| **CI_SERVER_VERSION** | all | Not yet defined | -| **CI_SERVER_REVISION** | all | Not yet defined | -| **CI_BUILD_REF** | all | The commit revision for which project is built | -| **CI_BUILD_TAG** | 0.5 | The commit tag name. Present only when building tags. | -| **CI_BUILD_NAME** | 0.5 | The name of the build as defined in `.gitlab-ci.yml` | -| **CI_BUILD_STAGE** | 0.5 | The name of the stage as defined in `.gitlab-ci.yml` | -| **CI_BUILD_REF_NAME** | all | The branch or tag name for which project is built | -| **CI_BUILD_ID** | all | The unique id of the current build that GitLab CI uses internally | -| **CI_BUILD_REPO** | all | The URL to clone the Git repository | -| **CI_BUILD_TRIGGERED** | 0.5 | The flag to indicate that build was [triggered] | -| **CI_BUILD_TOKEN** | 1.2 | Token used for authenticating with the GitLab Container Registry | -| **CI_PROJECT_ID** | all | The unique id of the current project that GitLab CI uses internally | -| **CI_PROJECT_DIR** | all | The full path where the repository is cloned and where the build is ran | +| Variable | GitLab | Runner | Description | +|-------------------------|--------|--------|-------------| +| **CI** | all | 0.4 | Mark that build is executed in CI environment | +| **GITLAB_CI** | all | all | Mark that build is executed in GitLab CI environment | +| **CI_SERVER** | all | all | Mark that build is executed in CI environment | +| **CI_SERVER_NAME** | all | all | The name of CI server that is used to coordinate builds | +| **CI_SERVER_VERSION** | all | all | GitLab version that is used to schedule builds | +| **CI_SERVER_REVISION** | all | all | GitLab revision that is used to schedule builds | +| **CI_BUILD_ID** | all | all | The unique id of the current build that GitLab CI uses internally | +| **CI_BUILD_REF** | all | all | The commit revision for which project is built | +| **CI_BUILD_TAG** | all | 0.5 | The commit tag name. Present only when building tags. | +| **CI_BUILD_NAME** | all | 0.5 | The name of the build as defined in `.gitlab-ci.yml` | +| **CI_BUILD_STAGE** | all | 0.5 | The name of the stage as defined in `.gitlab-ci.yml` | +| **CI_BUILD_REF_NAME** | all | all | The branch or tag name for which project is built | +| **CI_BUILD_REPO** | all | all | The URL to clone the Git repository | +| **CI_BUILD_TRIGGERED** | all | 0.5 | The flag to indicate that build was [triggered] | +| **CI_BUILD_TOKEN** | all | 1.2 | Token used for authenticating with the GitLab Container Registry | +| **CI_PIPELINE_ID** | 8.10 | 0.5 | The unique id of the current pipeline that GitLab CI uses internally | +| **CI_PROJECT_ID** | all | all | The unique id of the current project that GitLab CI uses internally | +| **CI_PROJECT_NAME** | 8.10 | 0.5 | The project name that is currently being built | +| **CI_PROJECT_NAMESPACE**| 8.10 | 0.5 | The project namespace that is currently being built | +| **CI_PROJECT_PATH** | 8.10 | 0.5 | The namespace with project name | +| **CI_PROJECT_URL** | 8.10 | 0.5 | The HTTP address to access project | +| **CI_PROJECT_DIR** | all | all | The full path where the repository is cloned and where the build is run | +| **CI_REGISTRY** | 8.10 | 0.5 | If the Container Registry is enabled it returns the address of GitLab's Container Registry | +| **CI_REGISTRY_IMAGE** | 8.10 | 0.5 | If the Container Registry is enabled for the project it returnes the address of the registry tied to the specific project | +| **CI_RUNNER_ID** | 8.10 | 0.5 | The unique id of runner being used | +| **CI_RUNNER_DESCRIPTION** | 8.10 | 0.5 | The description of the runner as saved in GitLab | +| **CI_RUNNER_TAGS** | 8.10 | 0.5 | The defined runner tags | **Some of the variables are only available when using runner with at least defined version.** @@ -46,18 +56,28 @@ Example values: export CI_BUILD_ID="50" export CI_BUILD_REF="1ecfd275763eff1d6b4844ea3168962458c9f27a" export CI_BUILD_REF_NAME="master" -export CI_BUILD_REPO="https://gitlab.com/gitlab-org/gitlab-ce.git" +export CI_BUILD_REPO="https://gitab-ci-token:abcde-1234ABCD5678ef@gitlab.com/gitlab-org/gitlab-ce.git" export CI_BUILD_TAG="1.0.0" export CI_BUILD_NAME="spec:other" export CI_BUILD_STAGE="test" export CI_BUILD_TRIGGERED="true" export CI_BUILD_TOKEN="abcde-1234ABCD5678ef" -export CI_PROJECT_DIR="/builds/gitlab-org/gitlab-ce" +export CI_PIPELINE_ID="1000" export CI_PROJECT_ID="34" +export CI_PROJECT_DIR="/builds/gitlab-org/gitlab-ce" +export CI_PROJECT_NAME="gitlab-ce" +export CI_PROJECT_NAMESPACE="gitlab-org" +export CI_PROJECT_PATH="gitlab-org/gitlab-ce" +export CI_PROJECT_URL="https://gitlab.com/gitlab-org/gitlab-ce" +export CI_REGISTRY="registry.gitlab.com" +export CI_REGISTRY_IMAGE="registry.gitlab.com/gitlab-org/gitlab-ce" +export CI_RUNNER_ID="10" +export CI_RUNNER_DESCRIPTION="my runner" +export CI_RUNNER_TAGS="docker, linux" export CI_SERVER="yes" -export CI_SERVER_NAME="GitLab CI" -export CI_SERVER_REVISION="" -export CI_SERVER_VERSION="" +export CI_SERVER_NAME="GitLab" +export CI_SERVER_REVISION="8.9.0" +export CI_SERVER_VERSION="70606bf" ``` ### YAML-defined variables diff --git a/doc/ci/yaml/README.md b/doc/ci/yaml/README.md index 50fa263f693..31b4fd2669e 100644 --- a/doc/ci/yaml/README.md +++ b/doc/ci/yaml/README.md @@ -485,6 +485,7 @@ failure. 1. `on_failure` - execute build only when at least one build from prior stages fails. 1. `always` - execute build regardless of the status of builds from prior stages. +1. `manual` - execute build manually. For example: @@ -516,6 +517,7 @@ deploy_job: stage: deploy script: - make deploy + when: manual cleanup_job: stage: cleanup @@ -527,7 +529,20 @@ cleanup_job: The above script will: 1. Execute `cleanup_build_job` only when `build_job` fails -2. Always execute `cleanup_job` as the last step in pipeline. +2. Always execute `cleanup_job` as the last step in pipeline +3. Allow you to manually execute `deploy_job` from GitLab + +#### Manual actions + +>**Note:** +Introduced in GitLab 8.10. + +Manual actions are special type of jobs that are not executed automatically in pipeline. +They need to be explicitly started by the user. +Manual actions can be started from pipelines, builds, environments and deployments views. +You can execute the same manual action multiple times. + +Example usage of manual actions is deployment, ex. promote a staging environment to production. ### environment @@ -757,12 +772,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. --- diff --git a/doc/development/migration_style_guide.md b/doc/development/migration_style_guide.md index e2ca46504e7..b8fab3aaff7 100644 --- a/doc/development/migration_style_guide.md +++ b/doc/development/migration_style_guide.md @@ -11,7 +11,8 @@ migrations are written carefully, can be applied online and adhere to the style Migrations should not require GitLab installations to be taken offline unless _absolutely_ necessary. If a migration requires downtime this should be clearly mentioned during the review process as well as being documented in the -monthly release post. +monthly release post. For more information see the "Downtime Tagging" section +below. When writing your migrations, also consider that databases might have stale data or inconsistencies and guard for that. Try to make as little assumptions as possible @@ -20,35 +21,34 @@ about the state of the database. Please don't depend on GitLab specific code since it can change in future versions. If needed copy-paste GitLab code into the migration to make it forward compatible. -## Comments in the migration +## Downtime Tagging -Each migration you write needs to have the two following pieces of information -as comments. +Every migration must specify if it requires downtime or not, and if it should +require downtime it must also specify a reason for this. To do so, add the +following two constants to the migration class' body: -### Online, Offline, errors? +* `DOWNTIME`: a boolean that when set to `true` indicates the migration requires + downtime. +* `DOWNTIME_REASON`: a String containing the reason for the migration requiring + downtime. This constant **must** be set when `DOWNTIME` is set to `true`. -First, you need to provide information on whether the migration can be applied: +For example: -1. online without errors (works on previous version and new one) -2. online with errors on old instances after migrating -3. online with errors on new instances while migrating -4. offline (needs to happen without app servers to prevent db corruption) - -For example: - -``` -# Migration type: online without errors (works on previous version and new one) +```ruby class MyMigration < ActiveRecord::Migration -... -``` + DOWNTIME = true + DOWNTIME_REASON = 'This migration requires downtime because ...' -It is always preferable to have a migration run online. If you expect the migration -to take particularly long (for instance, if it loops through all notes), -this is valuable information to add. + def change + ... + end +end +``` -If you don't provide the information it means that a migration is safe to run online. +It is an error (that is, CI will fail) if the `DOWNTIME` constant is missing +from a migration class. -### Reversibility +## Reversibility Your migration should be reversible. This is very important, as it should be possible to downgrade in case of a vulnerability or bugs. @@ -100,7 +100,7 @@ value of `10` you'd write the following: class MyMigration < ActiveRecord::Migration include Gitlab::Database::MigrationHelpers disable_ddl_transaction! - + def up add_column_with_default(:projects, :foo, :integer, default: 10) end 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/integration/slack.md b/doc/integration/slack.md index f6ba80f46d5..11f956fed3e 100644 --- a/doc/integration/slack.md +++ b/doc/integration/slack.md @@ -26,14 +26,13 @@ After Slack is ready we need to setup GitLab. Here are the steps to achieve this 1. Navigate to Settings -> Services -> Slack -1. Pick the triggers you want to activate +1. Pick the triggers you want to activate and respective channel (`#general` by default). 1. Fill in your Slack details - Webhook: Paste the Webhook URL from the step above - Username: Fill this in if you want to change the username of the bot - - Channel: Fill this in if you want to change the channel where the messages will be posted - Mark it as active - + 1. Save your settings Have fun :) diff --git a/doc/project_services/img/slack_configuration.png b/doc/project_services/img/slack_configuration.png Binary files differnew file mode 100644 index 00000000000..d3ebe5969af --- /dev/null +++ b/doc/project_services/img/slack_configuration.png diff --git a/doc/project_services/project_services.md b/doc/project_services/project_services.md index e15d5db3253..4442b7c1742 100644 --- a/doc/project_services/project_services.md +++ b/doc/project_services/project_services.md @@ -45,7 +45,7 @@ further configuration instructions and details. Contributions are welcome. | PivotalTracker | Project Management Software (Source Commits Endpoint) | | Pushover | Pushover makes it easy to get real-time notifications on your Android device, iPhone, iPad, and Desktop | | [Redmine](redmine.md) | Redmine issue tracker | -| Slack | A team communication tool for the 21st century | +| [Slack](slack.md) | A team communication tool for the 21st century | ## Services Templates diff --git a/doc/project_services/slack.md b/doc/project_services/slack.md new file mode 100644 index 00000000000..4ed33838f7c --- /dev/null +++ b/doc/project_services/slack.md @@ -0,0 +1,26 @@ +# Slack Service + +Go to your project's **Settings > Services > Slack** and you will see a checkbox with the following events that can be triggered: + +* Push +* Issue +* Merge request +* Note +* Tag push +* Build +* Wiki page + +Below each of these event checkboxes you will have an input to insert which Slack channel do you want to send that event message, +`#general` channel is default. + + +![Slack configuration](img/slack_configuration.png) + + +| Field | Description | +| ----- | ----------- | +| `Webhook` | The incoming webhook url which you have to setup on slack. (https://my.slack.com/services/new/incoming-webhook/) | +| `Username` | Optional username which can be on messages sent to slack. | +| `notify only broken builds` | Notify only about broken builds, when build events are marked to be sent.| + + 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/doc/workflow/add-user/add-user.md b/doc/workflow/add-user/add-user.md index 0537ce0bcd4..e541111d7b3 100644 --- a/doc/workflow/add-user/add-user.md +++ b/doc/workflow/add-user/add-user.md @@ -90,6 +90,9 @@ GitLab account using the same e-mail address the invitation was sent to. ## Request access to a project +As a project owner you can enable or disable non members to request access to +your project. Go to the project settings and click on **Allow users to request access**. + As a user, you can request to be a member of a project. Go to the project you'd like to be a member of, and click the **Request Access** button on the right side of your screen. diff --git a/doc/workflow/groups.md b/doc/workflow/groups.md index 9b50286b179..a693cc3d0fd 100644 --- a/doc/workflow/groups.md +++ b/doc/workflow/groups.md @@ -53,6 +53,9 @@ If necessary, you can increase the access level of an individual user for a spec ## Requesting access to a group +As a group owner you can enable or disable non members to request access to +your group. Go to the group settings and click on **Allow users to request access**. + As a user, you can request to be a member of a group. Go to the group you'd like to be a member of, and click the **Request Access** button on the right side of your screen. diff --git a/features/steps/admin/settings.rb b/features/steps/admin/settings.rb index 037f7494a77..03f87df7a60 100644 --- a/features/steps/admin/settings.rb +++ b/features/steps/admin/settings.rb @@ -27,19 +27,19 @@ class Spinach::Features::AdminSettings < Spinach::FeatureSteps step 'I check all events and submit form' do page.check('Active') - page.check('Push events') - page.check('Tag push events') - page.check('Comments') - page.check('Issues events') - page.check('Merge Request events') - page.check('Build events') + page.check('Push') + page.check('Tag push') + page.check('Note') + page.check('Issue') + page.check('Merge request') + page.check('Build') click_on 'Save' end step 'I fill out Slack settings' do fill_in 'Webhook', with: 'http://localhost' fill_in 'Username', with: 'test_user' - fill_in 'Channel', with: '#test_channel' + fill_in 'service_push_channel', with: '#test_channel' page.check('Notify only broken builds') end @@ -56,6 +56,6 @@ class Spinach::Features::AdminSettings < Spinach::FeatureSteps step 'I should see Slack settings saved' do expect(find_field('Webhook').value).to eq 'http://localhost' expect(find_field('Username').value).to eq 'test_user' - expect(find_field('Channel').value).to eq '#test_channel' + expect(find('#service_push_channel').value).to eq '#test_channel' end end 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's" + "hershey'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", "ö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épublique dé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ñ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", "é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é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ésie franç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'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/generator_templates/active_record/migration/create_table_migration.rb b/generator_templates/active_record/migration/create_table_migration.rb index 27acc75dcc4..aad8626a720 100644 --- a/generator_templates/active_record/migration/create_table_migration.rb +++ b/generator_templates/active_record/migration/create_table_migration.rb @@ -4,6 +4,14 @@ class <%= migration_class_name %> < ActiveRecord::Migration include Gitlab::Database::MigrationHelpers + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + # When a migration requires downtime you **must** uncomment the following + # constant and define a short and easy to understand explanation as to why the + # migration requires downtime. + # DOWNTIME_REASON = '' + # When using the methods "add_concurrent_index" or "add_column_with_default" # you must disable the use of transactions as these methods can not run in an # existing transaction. When using "add_concurrent_index" make sure that this diff --git a/generator_templates/active_record/migration/migration.rb b/generator_templates/active_record/migration/migration.rb index 06bdea11367..825bc8bdf61 100644 --- a/generator_templates/active_record/migration/migration.rb +++ b/generator_templates/active_record/migration/migration.rb @@ -4,6 +4,14 @@ class <%= migration_class_name %> < ActiveRecord::Migration include Gitlab::Database::MigrationHelpers + # Set this constant to true if this migration requires downtime. + DOWNTIME = false + + # When a migration requires downtime you **must** uncomment the following + # constant and define a short and easy to understand explanation as to why the + # migration requires downtime. + # DOWNTIME_REASON = '' + # When using the methods "add_concurrent_index" or "add_column_with_default" # you must disable the use of transactions as these methods can not run in an # existing transaction. When using "add_concurrent_index" make sure that this diff --git a/lib/api/branches.rb b/lib/api/branches.rb index d467eb9d474..66b853eb342 100644 --- a/lib/api/branches.rb +++ b/lib/api/branches.rb @@ -15,7 +15,8 @@ module API # GET /projects/:id/repository/branches get ":id/repository/branches" do branches = user_project.repository.branches.sort_by(&:name) - present branches, with: Entities::RepoObject, project: user_project + + present branches, with: Entities::RepoBranch, project: user_project end # Get a single branch @@ -28,7 +29,8 @@ module API get ':id/repository/branches/:branch', requirements: { branch: /.+/ } do @branch = user_project.repository.branches.find { |item| item.name == params[:branch] } not_found!("Branch") unless @branch - present @branch, with: Entities::RepoObject, project: user_project + + present @branch, with: Entities::RepoBranch, project: user_project end # Protect a single branch @@ -36,6 +38,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,11 +47,22 @@ 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 + present @branch, with: Entities::RepoBranch, project: user_project end # Unprotect a single branch @@ -66,7 +81,7 @@ module API protected_branch = user_project.protected_branches.find_by(name: @branch.name) protected_branch.destroy if protected_branch - present @branch, with: Entities::RepoObject, project: user_project + present @branch, with: Entities::RepoBranch, project: user_project end # Create branch @@ -84,7 +99,7 @@ module API if result[:status] == :success present result[:branch], - with: Entities::RepoObject, + with: Entities::RepoBranch, project: user_project else render_api_error!(result[:message], 400) diff --git a/lib/api/builds.rb b/lib/api/builds.rb index bb9e8f1ae6e..657d421fe97 100644 --- a/lib/api/builds.rb +++ b/lib/api/builds.rb @@ -70,7 +70,7 @@ module API build = get_build!(params[:build_id]) - present_artifact!(build.artifacts_file) + present_artifacts!(build.artifacts_file) end # Download the artifacts file from ref_name and job @@ -83,10 +83,12 @@ module API # GET /projects/:id/artifacts/:ref_name/download?job=name get ':id/builds/artifacts/:ref_name/download', requirements: { ref_name: /.+/ } do + authorize_read_builds! + builds = user_project.latest_successful_builds_for(params[:ref_name]) latest_build = builds.find_by!(name: params[:job]) - present_artifact!(latest_build.artifacts_file) + present_artifacts!(latest_build.artifacts_file) end # Get a trace of a specific build of a project @@ -198,7 +200,7 @@ module API get_build(id) || not_found! end - def present_artifact!(artifacts_file) + def present_artifacts!(artifacts_file) if !artifacts_file.file_storage? redirect_to(build.artifacts_file.url) elsif artifacts_file.exists? diff --git a/lib/api/commit_statuses.rb b/lib/api/commit_statuses.rb index acb4812b5cf..4df6ca8333e 100644 --- a/lib/api/commit_statuses.rb +++ b/lib/api/commit_statuses.rb @@ -24,7 +24,7 @@ module API pipelines = user_project.pipelines.where(sha: params[:sha]) statuses = ::CommitStatus.where(pipeline: pipelines) - statuses = statuses.latest unless parse_boolean(params[:all]) + statuses = statuses.latest unless to_boolean(params[:all]) statuses = statuses.where(ref: params[:ref]) if params[:ref].present? statuses = statuses.where(stage: params[:stage]) if params[:stage].present? statuses = statuses.where(name: params[:name]) if params[:name].present? diff --git a/lib/api/entities.rb b/lib/api/entities.rb index 3c79a00eb8c..d7e74582459 100644 --- a/lib/api/entities.rb +++ b/lib/api/entities.rb @@ -114,21 +114,23 @@ module API end end - class RepoObject < Grape::Entity + class RepoBranch < Grape::Entity expose :name - expose :commit do |repo_obj, options| - if repo_obj.respond_to?(:commit) - repo_obj.commit - elsif options[:project] - options[:project].repository.commit(repo_obj.target) - end + expose :commit do |repo_branch, options| + options[:project].repository.commit(repo_branch.target) end - expose :protected do |repo, options| - if options[:project] - options[:project].protected_branch? repo.name - end + expose :protected do |repo_branch, options| + options[:project].protected_branch? repo_branch.name + end + + expose :developers_can_push do |repo_branch, options| + options[:project].developers_can_push_to_protected_branch? repo_branch.name + end + + expose :developers_can_merge do |repo_branch, options| + options[:project].developers_can_merge_to_protected_branch? repo_branch.name end end @@ -425,27 +427,14 @@ module API end class RepoTag < Grape::Entity - expose :name - expose :message do |repo_obj, _options| - if repo_obj.respond_to?(:message) - repo_obj.message - else - nil - end - end + expose :name, :message - expose :commit do |repo_obj, options| - if repo_obj.respond_to?(:commit) - repo_obj.commit - elsif options[:project] - options[:project].repository.commit(repo_obj.target) - end + expose :commit do |repo_tag, options| + options[:project].repository.commit(repo_tag.target) end - expose :release, using: Entities::Release do |repo_obj, options| - if options[:project] - options[:project].releases.find_by(tag: repo_obj.name) - end + expose :release, using: Entities::Release do |repo_tag, options| + options[:project].releases.find_by(tag: repo_tag.name) end end diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 77e407b54c5..130509cdad6 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -5,8 +5,11 @@ module API SUDO_HEADER = "HTTP_SUDO" SUDO_PARAM = :sudo - def parse_boolean(value) - [ true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON' ].include?(value) + 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 @@ -17,7 +20,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 @@ -290,7 +293,7 @@ module API def filter_projects(projects) # If the archived parameter is passed, limit results accordingly if params[:archived].present? - projects = projects.where(archived: parse_boolean(params[:archived])) + projects = projects.where(archived: to_boolean(params[:archived])) end if params[:search].present? diff --git a/lib/api/merge_requests.rb b/lib/api/merge_requests.rb index 4fcdf8968c9..2b685621da9 100644 --- a/lib/api/merge_requests.rb +++ b/lib/api/merge_requests.rb @@ -242,7 +242,7 @@ module API should_remove_source_branch: params[:should_remove_source_branch] } - if parse_boolean(params[:merge_when_build_succeeds]) && merge_request.pipeline && merge_request.pipeline.active? + if to_boolean(params[:merge_when_build_succeeds]) && merge_request.pipeline && merge_request.pipeline.active? ::MergeRequests::MergeWhenBuildSucceedsService.new(merge_request.target_project, current_user, merge_params). execute(merge_request) else diff --git a/lib/api/projects.rb b/lib/api/projects.rb index 6d2a6f3946c..8fed7db8803 100644 --- a/lib/api/projects.rb +++ b/lib/api/projects.rb @@ -8,7 +8,7 @@ module API def map_public_to_visibility_level(attrs) publik = attrs.delete(:public) if publik.present? && !attrs[:visibility_level].present? - publik = parse_boolean(publik) + publik = to_boolean(publik) # Since setting the public attribute to private could mean either # private or internal, use the more conservative option, private. attrs[:visibility_level] = (publik == true) ? Gitlab::VisibilityLevel::PUBLIC : Gitlab::VisibilityLevel::PRIVATE 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/relative_link_filter.rb b/lib/banzai/filter/relative_link_filter.rb index c78da404607..21ed0410f7f 100644 --- a/lib/banzai/filter/relative_link_filter.rb +++ b/lib/banzai/filter/relative_link_filter.rb @@ -112,8 +112,7 @@ module Banzai end def current_commit - @current_commit ||= context[:commit] || - ref ? repository.commit(ref) : repository.head_commit + @current_commit ||= context[:commit] || ref ? repository.commit(ref) : repository.head_commit end def relative_url_root diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index a48dc542b14..83afed9f49f 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -44,23 +44,51 @@ module Ci end 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) + jobs_for_ref(ref, tag, trigger_request).map do |name, _| + build_attributes(name) end end 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) + jobs_for_stage_and_ref(stage, ref, tag, trigger_request).map do |name, _| + build_attributes(name) end end def builds - @jobs.map do |name, job| - build_job(name, job) + @jobs.map do |name, _| + build_attributes(name) end end + def build_attributes(name) + job = @jobs[name.to_sym] || {} + { + stage_idx: @stages.index(job[:stage]), + stage: job[:stage], + ## + # Refactoring note: + # - before script behaves differently than after script + # - after script returns an array of commands + # - before script should be a concatenated command + commands: [job[:before_script] || @before_script, job[:script]].flatten.compact.join("\n"), + tag_list: job[:tags] || [], + name: name, + 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, + artifacts: job[:artifacts], + cache: job[:cache] || @cache, + dependencies: job[:dependencies], + after_script: job[:after_script] || @after_script, + }.compact + } + end + private def initial_parsing @@ -89,33 +117,6 @@ module Ci @jobs[name] = { stage: stage }.merge(job) end - def build_job(name, job) - { - stage_idx: @stages.index(job[:stage]), - stage: job[:stage], - ## - # Refactoring note: - # - before script behaves differently than after script - # - after script returns an array of commands - # - before script should be a concatenated command - commands: [job[:before_script] || @before_script, job[:script]].flatten.compact.join("\n"), - tag_list: job[:tags] || [], - name: name, - 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, - artifacts: job[:artifacts], - cache: job[:cache] || @cache, - dependencies: job[:dependencies], - after_script: job[:after_script] || @after_script, - }.compact - } - end - def yaml_variables(name) variables = global_variables.merge(job_variables(name)) variables.map do |key, value| @@ -194,8 +195,8 @@ module Ci raise ValidationError, "#{name} job: allow_failure parameter should be an boolean" end - if job[:when] && !job[:when].in?(%w[on_success on_failure always]) - raise ValidationError, "#{name} job: when parameter should be on_success, on_failure or always" + if job[:when] && !job[:when].in?(%w[on_success on_failure always manual]) + raise ValidationError, "#{name} job: when parameter should be on_success, on_failure, always or manual" end if job[:environment] && !validate_environment(job[:environment]) 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/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..5fe86553bd0 --- /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_ref, _ = Gitlab::Popen.popen(%W(#{Gitlab.config.git.bin_path} --git-dir=#{project.repository.path_to_repo} rev-list --max-count=1 #{oldrev} ^#{newrev})) + missed_ref.present? + 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/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/diff/position.rb b/lib/gitlab/diff/position.rb index 989fff8918e..2fdcf8d7838 100644 --- a/lib/gitlab/diff/position.rb +++ b/lib/gitlab/diff/position.rb @@ -73,8 +73,8 @@ module Gitlab diff_refs.complete? end - def to_json - JSON.generate(self.to_h) + def to_json(opts = nil) + JSON.generate(self.to_h, opts) end def type diff --git a/lib/gitlab/downtime_check.rb b/lib/gitlab/downtime_check.rb new file mode 100644 index 00000000000..ab9537ed7d7 --- /dev/null +++ b/lib/gitlab/downtime_check.rb @@ -0,0 +1,71 @@ +module Gitlab + # Checks if a set of migrations requires downtime or not. + class DowntimeCheck + # The constant containing the boolean that indicates if downtime is needed + # or not. + DOWNTIME_CONST = :DOWNTIME + + # The constant that specifies the reason for the migration requiring + # downtime. + DOWNTIME_REASON_CONST = :DOWNTIME_REASON + + # Checks the given migration paths and returns an Array of + # `Gitlab::DowntimeCheck::Message` instances. + # + # migrations - The migration file paths to check. + def check(migrations) + migrations.map do |path| + require(path) + + migration_class = class_for_migration_file(path) + + unless migration_class.const_defined?(DOWNTIME_CONST) + raise "The migration in #{path} does not specify if it requires " \ + "downtime or not" + end + + if online?(migration_class) + Message.new(path) + else + reason = downtime_reason(migration_class) + + unless reason + raise "The migration in #{path} requires downtime but no reason " \ + "was given" + end + + Message.new(path, true, reason) + end + end + end + + # Checks the given migrations and prints the results to STDOUT/STDERR. + # + # migrations - The migration file paths to check. + def check_and_print(migrations) + check(migrations).each do |message| + puts message.to_s # rubocop: disable Rails/Output + end + end + + # Returns the class for the given migration file path. + def class_for_migration_file(path) + File.basename(path, File.extname(path)).split('_', 2).last.camelize. + constantize + end + + # Returns true if the given migration can be performed without downtime. + def online?(migration) + migration.const_get(DOWNTIME_CONST) == false + end + + # Returns the downtime reason, or nil if none was defined. + def downtime_reason(migration) + if migration.const_defined?(DOWNTIME_REASON_CONST) + migration.const_get(DOWNTIME_REASON_CONST) + else + nil + end + end + end +end diff --git a/lib/gitlab/downtime_check/message.rb b/lib/gitlab/downtime_check/message.rb new file mode 100644 index 00000000000..4446e921e0d --- /dev/null +++ b/lib/gitlab/downtime_check/message.rb @@ -0,0 +1,28 @@ +module Gitlab + class DowntimeCheck + class Message + attr_reader :path, :offline, :reason + + OFFLINE = "\e[32moffline\e[0m" + ONLINE = "\e[31monline\e[0m" + + # path - The file path of the migration. + # offline - When set to `true` the migration will require downtime. + # reason - The reason as to why the migration requires downtime. + def initialize(path, offline = false, reason = nil) + @path = path + @offline = offline + @reason = reason + end + + def to_s + label = offline ? OFFLINE : ONLINE + + message = "[#{label}]: #{path}" + message += ": #{reason}" if reason + + message + end + end + end +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..8e8f39d9cb2 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,39 @@ 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 + return true if project.public? + 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_status.rb b/lib/gitlab/git_access_status.rb index 5a806ff6e0d..09bb01be694 100644 --- a/lib/gitlab/git_access_status.rb +++ b/lib/gitlab/git_access_status.rb @@ -8,8 +8,8 @@ module Gitlab @message = message end - def to_json - { status: @status, message: @message }.to_json + def to_json(opts = nil) + { status: @status, message: @message }.to_json(opts) end end 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/gon_helper.rb b/lib/gitlab/gon_helper.rb index d4f12cb1df9..c5a11148d33 100644 --- a/lib/gitlab/gon_helper.rb +++ b/lib/gitlab/gon_helper.rb @@ -5,7 +5,7 @@ module Gitlab gon.default_avatar_url = URI::join(Gitlab.config.gitlab.url, ActionController::Base.helpers.image_path('no_avatar.png')).to_s gon.max_file_size = current_application_settings.max_attachment_size gon.relative_url_root = Gitlab.config.gitlab.relative_url_root - gon.shortcuts_path = help_shortcuts_path + gon.shortcuts_path = help_page_path('shortcuts') gon.user_color_scheme = Gitlab::ColorSchemes.for_user(current_user).css_class gon.award_menu_url = emojis_path diff --git a/lib/gitlab/import_export.rb b/lib/gitlab/import_export.rb index bab2ea73c4f..d6d14bd98a0 100644 --- a/lib/gitlab/import_export.rb +++ b/lib/gitlab/import_export.rb @@ -2,7 +2,7 @@ module Gitlab module ImportExport extend self - VERSION = '0.1.1' + VERSION = '0.1.2' FILENAME_LIMIT = 50 def export_path(relative_path:) diff --git a/lib/gitlab/import_export/avatar_restorer.rb b/lib/gitlab/import_export/avatar_restorer.rb new file mode 100644 index 00000000000..352539eb594 --- /dev/null +++ b/lib/gitlab/import_export/avatar_restorer.rb @@ -0,0 +1,31 @@ +module Gitlab + module ImportExport + class AvatarRestorer + + def initialize(project:, shared:) + @project = project + @shared = shared + end + + def restore + return true unless avatar_export_file + + @project.avatar = File.open(avatar_export_file) + @project.save! + rescue => e + @shared.error(e) + false + end + + private + + def avatar_export_file + @avatar_export_file ||= Dir["#{avatar_export_path}/*"].first + end + + def avatar_export_path + File.join(@shared.export_path, 'avatar') + end + end + end +end diff --git a/lib/gitlab/import_export/avatar_saver.rb b/lib/gitlab/import_export/avatar_saver.rb new file mode 100644 index 00000000000..998c21e2586 --- /dev/null +++ b/lib/gitlab/import_export/avatar_saver.rb @@ -0,0 +1,31 @@ +module Gitlab + module ImportExport + class AvatarSaver + include Gitlab::ImportExport::CommandLineUtil + + def initialize(project:, shared:) + @project = project + @shared = shared + end + + def save + return true unless @project.avatar.exists? + + copy_files(avatar_path, avatar_export_path) + rescue => e + @shared.error(e) + false + end + + private + + def avatar_export_path + File.join(@shared.export_path, 'avatar', @project.avatar_identifier) + end + + def avatar_path + @project.avatar.path + end + end + end +end diff --git a/lib/gitlab/import_export/command_line_util.rb b/lib/gitlab/import_export/command_line_util.rb index 2249904145c..5dd0e34c18e 100644 --- a/lib/gitlab/import_export/command_line_util.rb +++ b/lib/gitlab/import_export/command_line_util.rb @@ -36,6 +36,15 @@ module Gitlab def git_bin_path Gitlab.config.git.bin_path end + + def copy_files(source, destination) + # if we are copying files, create the destination folder + destination_folder = File.file?(source) ? File.dirname(destination) : destination + + FileUtils.mkdir_p(destination_folder) + FileUtils.copy_entry(source, destination) + true + end end end 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 6b69a653f12..e9ee47fc090 100644 --- a/lib/gitlab/import_export/importer.rb +++ b/lib/gitlab/import_export/importer.rb @@ -9,7 +9,7 @@ module Gitlab end def execute - if import_file && check_version! && [project_tree, repo_restorer, wiki_restorer, uploads_restorer].all?(&:restore) + if import_file && check_version! && [project_tree, avatar_restorer, repo_restorer, wiki_restorer, uploads_restorer].all?(&:restore) project_tree.restored_project else raise Projects::ImportService::Error.new(@shared.errors.join(', ')) @@ -35,6 +35,10 @@ module Gitlab project: @project) end + def avatar_restorer + Gitlab::ImportExport::AvatarRestorer.new(project: project_tree.restored_project, shared: @shared) + end + def repo_restorer Gitlab::ImportExport::RepoRestorer.new(path_to_bundle: repo_path, shared: @shared, diff --git a/lib/gitlab/import_export/relation_factory.rb b/lib/gitlab/import_export/relation_factory.rb index 6ba25a31641..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 @@ -129,6 +130,10 @@ module Gitlab 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/uploads_saver.rb b/lib/gitlab/import_export/uploads_saver.rb index d6f4fa57510..62a2553675c 100644 --- a/lib/gitlab/import_export/uploads_saver.rb +++ b/lib/gitlab/import_export/uploads_saver.rb @@ -1,6 +1,8 @@ module Gitlab module ImportExport class UploadsSaver + include Gitlab::ImportExport::CommandLineUtil + def initialize(project:, shared:) @project = project @shared = shared @@ -17,12 +19,6 @@ module Gitlab private - def copy_files(source, destination) - FileUtils.mkdir_p(destination) - FileUtils.copy_entry(source, destination) - true - end - def uploads_export_path File.join(@shared.export_path, 'uploads') 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/tasks/downtime_check.rake b/lib/tasks/downtime_check.rake new file mode 100644 index 00000000000..30a2e9be5ce --- /dev/null +++ b/lib/tasks/downtime_check.rake @@ -0,0 +1,26 @@ +desc 'Checks if migrations in a branch require downtime' +task downtime_check: :environment do + # First we'll want to make sure we're comparing with the right upstream + # repository/branch. + current_branch = `git rev-parse --abbrev-ref HEAD`.strip + + # Either the developer ran this task directly on the master branch, or they're + # making changes directly on the master branch. + if current_branch == 'master' + if defined?(Gitlab::License) + repo = 'gitlab-ee' + else + repo = 'gitlab-ce' + end + + `git fetch https://gitlab.com/gitlab-org/#{repo}.git --depth 1` + + compare_with = 'FETCH_HEAD' + # The developer is working on a different branch, in this case we can just + # compare with the master branch. + else + compare_with = 'master' + end + + Rake::Task['gitlab:db:downtime_check'].invoke(compare_with) +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/check.rake b/lib/tasks/gitlab/check.rake index e9a4e37ec48..60f4636e737 100644 --- a/lib/tasks/gitlab/check.rake +++ b/lib/tasks/gitlab/check.rake @@ -784,7 +784,7 @@ namespace :gitlab do servers.each do |server| puts "Server: #{server}" Gitlab::LDAP::Adapter.open(server) do |adapter| - users = adapter.users(adapter.config.uid, '*', 100) + users = adapter.users(adapter.config.uid, '*', limit) users.each do |user| puts "\tDN: #{user.dn}\t #{adapter.config.uid}: #{user.uid}" end diff --git a/lib/tasks/gitlab/db.rake b/lib/tasks/gitlab/db.rake index 7230b9485be..0ec19e1a625 100644 --- a/lib/tasks/gitlab/db.rake +++ b/lib/tasks/gitlab/db.rake @@ -46,5 +46,20 @@ namespace :gitlab do Rake::Task['db:seed_fu'].invoke end end + + desc 'Checks if migrations require downtime or not' + task :downtime_check, [:ref] => :environment do |_, args| + abort 'You must specify a Git reference to compare with' unless args[:ref] + + require 'shellwords' + + ref = Shellwords.escape(args[:ref]) + + migrations = `git diff #{ref}.. --name-only -- db/migrate`.lines. + map { |file| Rails.root.join(file.strip).to_s }. + select { |file| File.file?(file) } + + Gitlab::DowntimeCheck.new.check_and_print(migrations) + end end end 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/help_controller_spec.rb b/spec/controllers/help_controller_spec.rb index 267d511c2db..347bef1e129 100644 --- a/spec/controllers/help_controller_spec.rb +++ b/spec/controllers/help_controller_spec.rb @@ -63,4 +63,13 @@ describe HelpController do end end end + + describe 'GET #ui' do + context 'for UI Development Kit' do + it 'renders found' do + get :ui + expect(response).to have_http_status(200) + end + end + 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 5fb671df570..5e19e403c6b 100644 --- a/spec/factories/ci/builds.rb +++ b/spec/factories/ci/builds.rb @@ -3,6 +3,8 @@ include ActionDispatch::TestProcess FactoryGirl.define do factory :ci_build, class: Ci::Build do name 'test' + stage 'test' + stage_idx 0 ref 'master' tag false created_at 'Di 29. Okt 09:50:00 CET 2013' @@ -43,6 +45,11 @@ FactoryGirl.define do status 'pending' end + trait :manual do + status 'skipped' + self.when 'manual' + end + trait :allowed_to_fail do allow_failure true end diff --git a/spec/features/environments_spec.rb b/spec/features/environments_spec.rb index 7fb28f4174b..9c018be14b7 100644 --- a/spec/features/environments_spec.rb +++ b/spec/features/environments_spec.rb @@ -13,6 +13,7 @@ feature 'Environments', feature: true do describe 'when showing environments' do given!(:environment) { } given!(:deployment) { } + given!(:manual) { } before do visit namespace_project_environments_path(project.namespace, project) @@ -43,6 +44,24 @@ feature 'Environments', feature: true do scenario 'does show deployment SHA' do expect(page).to have_link(deployment.short_sha) end + + context 'with build and manual actions' do + given(:pipeline) { create(:ci_pipeline, project: project) } + given(:build) { create(:ci_build, pipeline: pipeline) } + given(:deployment) { create(:deployment, environment: environment, deployable: build) } + given(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy to production') } + + scenario 'does show a play button' do + expect(page).to have_link(manual.name.humanize) + end + + scenario 'does allow to play manual action' do + expect(manual).to be_skipped + expect{ click_link(manual.name.humanize) }.not_to change { Ci::Pipeline.count } + expect(page).to have_content(manual.name) + expect(manual.reload).to be_pending + end + end end end @@ -54,6 +73,7 @@ feature 'Environments', feature: true do describe 'when showing the environment' do given(:environment) { create(:environment, project: project) } given!(:deployment) { } + given!(:manual) { } before do visit namespace_project_environment_path(project.namespace, project, environment) @@ -77,7 +97,8 @@ feature 'Environments', feature: true do end context 'with build' do - given(:build) { create(:ci_build, project: project) } + given(:pipeline) { create(:ci_pipeline, project: project) } + given(:build) { create(:ci_build, pipeline: pipeline) } given(:deployment) { create(:deployment, environment: environment, deployable: build) } scenario 'does show build name' do @@ -87,6 +108,21 @@ feature 'Environments', feature: true do scenario 'does show retry button' do expect(page).to have_link('Retry') end + + context 'with manual action' do + given(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy to production') } + + scenario 'does show a play button' do + expect(page).to have_link(manual.name.humanize) + end + + scenario 'does allow to play manual action' do + expect(manual).to be_skipped + expect{ click_link(manual.name.humanize) }.not_to change { Ci::Pipeline.count } + expect(page).to have_content(manual.name) + expect(manual.reload).to be_pending + end + end 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/members/user_requests_access_spec.rb b/spec/features/groups/members/user_requests_access_spec.rb index d1a6a98ab72..b3baa2ab57c 100644 --- a/spec/features/groups/members/user_requests_access_spec.rb +++ b/spec/features/groups/members/user_requests_access_spec.rb @@ -12,6 +12,13 @@ feature 'Groups > Members > User requests access', feature: true do visit group_path(group) end + scenario 'request access feature is disabled' do + group.update_attributes(request_access_enabled: false) + visit group_path(group) + + expect(page).not_to have_content 'Request Access' + end + scenario 'user can request access to a group' do perform_enqueued_jobs { click_link 'Request Access' } diff --git a/spec/features/pipelines_settings_spec.rb b/spec/features/pipelines_settings_spec.rb new file mode 100644 index 00000000000..dcc364a3d01 --- /dev/null +++ b/spec/features/pipelines_settings_spec.rb @@ -0,0 +1,35 @@ +require 'spec_helper' + +feature "Pipelines settings", feature: true do + include GitlabRoutingHelper + + let(:project) { create(:empty_project) } + let(:user) { create(:user) } + let(:role) { :developer } + + background do + login_as(user) + project.team << [user, role] + visit namespace_project_pipelines_settings_path(project.namespace, project) + end + + context 'for developer' do + given(:role) { :developer } + + scenario 'to be disallowed to view' do + expect(page.status_code).to eq(404) + end + end + + context 'for master' do + given(:role) { :master } + + scenario 'be allowed to change' do + fill_in('Test coverage parsing', with: 'coverage_regex') + click_on 'Save changes' + + expect(page.status_code).to eq(200) + expect(page).to have_field('Test coverage parsing', with: 'coverage_regex') + end + end +end diff --git a/spec/features/pipelines_spec.rb b/spec/features/pipelines_spec.rb index e7ee0aaea3c..7f861db1969 100644 --- a/spec/features/pipelines_spec.rb +++ b/spec/features/pipelines_spec.rb @@ -62,6 +62,20 @@ describe "Pipelines" do end end + context 'with manual actions' do + let!(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'manual build', stage: 'test', commands: 'test') } + + before { visit namespace_project_pipelines_path(project.namespace, project) } + + it { expect(page).to have_link('Manual build') } + + context 'when playing' do + before { click_link('Manual build') } + + it { expect(manual.reload).to be_pending } + end + end + context 'for generic statuses' do context 'when running' do let!(:running) { create(:generic_commit_status, status: 'running', pipeline: pipeline, stage: 'test') } @@ -117,6 +131,7 @@ describe "Pipelines" do @success = create(:ci_build, :success, pipeline: pipeline, stage: 'build', name: 'build') @failed = create(:ci_build, :failed, pipeline: pipeline, stage: 'test', name: 'test', commands: 'test') @running = create(:ci_build, :running, pipeline: pipeline, stage: 'deploy', name: 'deploy') + @manual = create(:ci_build, :manual, pipeline: pipeline, stage: 'deploy', name: 'manual build') @external = create(:generic_commit_status, status: 'success', pipeline: pipeline, name: 'jenkins', stage: 'external') end @@ -131,6 +146,7 @@ describe "Pipelines" do expect(page).to have_content(@external.id) expect(page).to have_content('Retry failed') expect(page).to have_content('Cancel running') + expect(page).to have_link('Play') end context 'retrying builds' do @@ -154,6 +170,12 @@ describe "Pipelines" do it { expect(page).to have_selector('.ci-canceled') } end end + + context 'playing manual build' do + before { click_link('Play') } + + it { expect(@manual.reload).to be_pending } + end end describe 'POST /:project/pipelines' do diff --git a/spec/features/projects/badges/list_spec.rb b/spec/features/projects/badges/list_spec.rb index 01e90618a98..75166bca119 100644 --- a/spec/features/projects/badges/list_spec.rb +++ b/spec/features/projects/badges/list_spec.rb @@ -6,7 +6,7 @@ feature 'list of badges' do project = create(:project) project.team << [user, :master] login_as(user) - visit namespace_project_badges_path(project.namespace, project) + visit namespace_project_pipelines_settings_path(project.namespace, project) end scenario 'user displays list of badges' do diff --git a/spec/features/projects/members/user_requests_access_spec.rb b/spec/features/projects/members/user_requests_access_spec.rb index f2fe3ef364d..56ede8eb5be 100644 --- a/spec/features/projects/members/user_requests_access_spec.rb +++ b/spec/features/projects/members/user_requests_access_spec.rb @@ -11,6 +11,13 @@ feature 'Projects > Members > User requests access', feature: true do visit namespace_project_path(project.namespace, project) end + scenario 'request access feature is disabled' do + project.update_attributes(request_access_enabled: false) + visit namespace_project_path(project.namespace, project) + + expect(page).not_to have_content 'Request Access' + end + scenario 'user can request access to a project' do perform_enqueued_jobs { click_link 'Request Access' } diff --git a/spec/features/projects/slack_service/slack_service_spec.rb b/spec/features/projects/slack_service/slack_service_spec.rb new file mode 100644 index 00000000000..16541f51d98 --- /dev/null +++ b/spec/features/projects/slack_service/slack_service_spec.rb @@ -0,0 +1,26 @@ +require 'spec_helper' + +feature 'Projects > Slack service > Setup events', feature: true do + let(:user) { create(:user) } + let(:service) { SlackService.new } + let(:project) { create(:project, slack_service: service) } + + background do + service.fields + service.update_attributes(push_channel: 1, issue_channel: 2, merge_request_channel: 3, note_channel: 4, tag_push_channel: 5, build_channel: 6, wiki_page_channel: 7) + project.team << [user, :master] + login_as(user) + end + + scenario 'user can filter events by channel' do + visit edit_namespace_project_service_path(project.namespace, project, service) + + expect(page.find_field("service_push_channel").value).to have_content '1' + expect(page.find_field("service_issue_channel").value).to have_content '2' + expect(page.find_field("service_merge_request_channel").value).to have_content '3' + expect(page.find_field("service_note_channel").value).to have_content '4' + expect(page.find_field("service_tag_push_channel").value).to have_content '5' + expect(page.find_field("service_build_channel").value).to have_content '6' + expect(page.find_field("service_wiki_page_channel").value).to have_content '7' + end +end diff --git a/spec/helpers/ci_status_helper_spec.rb b/spec/helpers/ci_status_helper_spec.rb index 45199d0f09d..637b02d9388 100644 --- a/spec/helpers/ci_status_helper_spec.rb +++ b/spec/helpers/ci_status_helper_spec.rb @@ -7,7 +7,13 @@ describe CiStatusHelper do let(:failed_commit) { double("Ci::Pipeline", status: 'failed') } describe 'ci_icon_for_status' do - it { expect(helper.ci_icon_for_status(success_commit.status)).to include('fa-check') } - it { expect(helper.ci_icon_for_status(failed_commit.status)).to include('fa-close') } + it 'renders to correct svg on success' do + expect(helper).to receive(:render).with('shared/icons/icon_status_success.svg', anything) + helper.ci_icon_for_status(success_commit.status) + end + it 'renders the correct svg on failure' do + expect(helper).to receive(:render).with('shared/icons/icon_status_failed.svg', anything) + helper.ci_icon_for_status(failed_commit.status) + end end end 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/time_helper_spec.rb b/spec/helpers/time_helper_spec.rb index 3f62527c5bb..413ead944b9 100644 --- a/spec/helpers/time_helper_spec.rb +++ b/spec/helpers/time_helper_spec.rb @@ -1,7 +1,7 @@ require 'spec_helper' describe TimeHelper do - describe "#duration_in_words" do + describe "#time_interval_in_words" do it "returns minutes and seconds" do intervals_in_words = { 100 => "1 minute 40 seconds", @@ -11,26 +11,23 @@ describe TimeHelper do } intervals_in_words.each do |interval, expectation| - expect(duration_in_words(Time.now + interval, Time.now)).to eq(expectation) + expect(time_interval_in_words(interval)).to eq(expectation) end end - - it "calculates interval from now if there is no finished_at" do - expect(duration_in_words(nil, Time.now - 5)).to eq("5 seconds") - end end - describe "#time_interval_in_words" do + describe "#duration_in_numbers" do it "returns minutes and seconds" do - intervals_in_words = { - 100 => "1 minute 40 seconds", - 121 => "2 minutes 1 second", - 3721 => "62 minutes 1 second", - 0 => "0 seconds" + duration_in_numbers = { + [100, 0] => "01:40", + [121, 0] => "02:01", + [3721, 0] => "01:02:01", + [0, 0] => "00:00", + [nil, Time.now.to_i - 42] => "00:42" } - intervals_in_words.each do |interval, expectation| - expect(time_interval_in_words(interval)).to eq(expectation) + duration_in_numbers.each do |interval, expectation| + expect(duration_in_numbers(*interval)).to eq(expectation) end end end 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/ci/gitlab_ci_yaml_processor_spec.rb b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb index ad6587b4c25..d20fd4ab7dd 100644 --- a/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb +++ b/spec/lib/ci/gitlab_ci_yaml_processor_spec.rb @@ -1141,7 +1141,7 @@ EOT config = YAML.dump({ rspec: { script: "test", when: 1 } }) expect do GitlabCiYamlProcessor.new(config, path) - end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: when parameter should be on_success, on_failure or always") + end.to raise_error(GitlabCiYamlProcessor::ValidationError, "rspec job: when parameter should be on_success, on_failure, always or manual") end it "returns errors if job artifacts:name is not an a string" do diff --git a/spec/lib/gitlab/badge/build_spec.rb b/spec/lib/gitlab/badge/build_spec.rb index 2034445a197..f3b522a02f5 100644 --- a/spec/lib/gitlab/badge/build_spec.rb +++ b/spec/lib/gitlab/badge/build_spec.rb @@ -113,7 +113,7 @@ describe Gitlab::Badge::Build do sha: sha, ref: branch) - create(:ci_build, pipeline: pipeline) + create(:ci_build, pipeline: pipeline, stage: 'notify') end def status_node(data, status) 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/position_spec.rb b/spec/lib/gitlab/diff/position_spec.rb index cf28628cb96..10537bea008 100644 --- a/spec/lib/gitlab/diff/position_spec.rb +++ b/spec/lib/gitlab/diff/position_spec.rb @@ -338,4 +338,28 @@ describe Gitlab::Diff::Position, lib: true do end end end + + describe "#to_json" do + let(:hash) do + { + old_path: "files/ruby/popen.rb", + new_path: "files/ruby/popen.rb", + old_line: nil, + new_line: 14, + base_sha: nil, + head_sha: nil, + start_sha: nil + } + end + + let(:diff_position) { described_class.new(hash) } + + it "returns the position as JSON" do + expect(JSON.parse(diff_position.to_json)).to eq(hash.stringify_keys) + end + + it "works when nested under another hash" do + expect(JSON.parse(JSON.generate(pos: diff_position))).to eq('pos' => hash.stringify_keys) + end + end 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/downtime_check/message_spec.rb b/spec/lib/gitlab/downtime_check/message_spec.rb new file mode 100644 index 00000000000..93094cda776 --- /dev/null +++ b/spec/lib/gitlab/downtime_check/message_spec.rb @@ -0,0 +1,17 @@ +require 'spec_helper' + +describe Gitlab::DowntimeCheck::Message do + describe '#to_s' do + it 'returns an ANSI formatted String for an offline migration' do + message = described_class.new('foo.rb', true, 'hello') + + expect(message.to_s).to eq("[\e[32moffline\e[0m]: foo.rb: hello") + end + + it 'returns an ANSI formatted String for an online migration' do + message = described_class.new('foo.rb') + + expect(message.to_s).to eq("[\e[31monline\e[0m]: foo.rb") + end + end +end diff --git a/spec/lib/gitlab/downtime_check_spec.rb b/spec/lib/gitlab/downtime_check_spec.rb new file mode 100644 index 00000000000..42d895e548e --- /dev/null +++ b/spec/lib/gitlab/downtime_check_spec.rb @@ -0,0 +1,113 @@ +require 'spec_helper' + +describe Gitlab::DowntimeCheck do + subject { described_class.new } + let(:path) { 'foo.rb' } + + describe '#check' do + before do + expect(subject).to receive(:require).with(path) + end + + context 'when a migration does not specify if downtime is required' do + it 'raises RuntimeError' do + expect(subject).to receive(:class_for_migration_file). + with(path). + and_return(Class.new) + + expect { subject.check([path]) }. + to raise_error(RuntimeError, /it requires downtime/) + end + end + + context 'when a migration requires downtime' do + context 'when no reason is specified' do + it 'raises RuntimeError' do + stub_const('TestMigration::DOWNTIME', true) + + expect(subject).to receive(:class_for_migration_file). + with(path). + and_return(TestMigration) + + expect { subject.check([path]) }. + to raise_error(RuntimeError, /no reason was given/) + end + end + + context 'when a reason is specified' do + it 'returns an Array of messages' do + stub_const('TestMigration::DOWNTIME', true) + stub_const('TestMigration::DOWNTIME_REASON', 'foo') + + expect(subject).to receive(:class_for_migration_file). + with(path). + and_return(TestMigration) + + messages = subject.check([path]) + + expect(messages).to be_an_instance_of(Array) + expect(messages[0]).to be_an_instance_of(Gitlab::DowntimeCheck::Message) + + message = messages[0] + + expect(message.path).to eq(path) + expect(message.offline).to eq(true) + expect(message.reason).to eq('foo') + end + end + end + end + + describe '#check_and_print' do + it 'checks the migrations and prints the results to STDOUT' do + stub_const('TestMigration::DOWNTIME', true) + stub_const('TestMigration::DOWNTIME_REASON', 'foo') + + expect(subject).to receive(:require).with(path) + + expect(subject).to receive(:class_for_migration_file). + with(path). + and_return(TestMigration) + + expect(subject).to receive(:puts).with(an_instance_of(String)) + + subject.check_and_print([path]) + end + end + + describe '#class_for_migration_file' do + it 'returns the class for a migration file path' do + expect(subject.class_for_migration_file('123_string.rb')).to eq(String) + end + end + + describe '#online?' do + it 'returns true when a migration can be performed online' do + stub_const('TestMigration::DOWNTIME', false) + + expect(subject.online?(TestMigration)).to eq(true) + end + + it 'returns false when a migration can not be performed online' do + stub_const('TestMigration::DOWNTIME', true) + + expect(subject.online?(TestMigration)).to eq(false) + end + end + + describe '#downtime_reason' do + context 'when a reason is defined' do + it 'returns the downtime reason' do + stub_const('TestMigration::DOWNTIME_REASON', 'hello') + + expect(subject.downtime_reason(TestMigration)).to eq('hello') + end + end + + context 'when a reason is not defined' do + it 'returns nil' do + expect(subject.downtime_reason(Class.new)).to be_nil + end + end + end +end diff --git a/spec/lib/gitlab/git_access_spec.rb b/spec/lib/gitlab/git_access_spec.rb index c79ba11f782..ae064a878b0 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 @@ -105,12 +44,12 @@ describe Gitlab::GitAccess, lib: true do end describe 'download_access_check' do + subject { access.check('git-upload-pack') } + describe 'master permissions' do before { project.team << [user, :master] } context 'pull code' do - subject { access.download_access_check } - it { expect(subject.allowed?).to be_truthy } end end @@ -119,8 +58,6 @@ describe Gitlab::GitAccess, lib: true do before { project.team << [user, :guest] } context 'pull code' do - subject { access.download_access_check } - it { expect(subject.allowed?).to be_falsey } end end @@ -132,16 +69,12 @@ describe Gitlab::GitAccess, lib: true do end context 'pull code' do - subject { access.download_access_check } - it { expect(subject.allowed?).to be_falsey } end end describe 'without acccess to project' do context 'pull code' do - subject { access.download_access_check } - it { expect(subject.allowed?).to be_falsey } end end @@ -151,110 +84,208 @@ describe Gitlab::GitAccess, lib: true do let(:actor) { key } context 'pull code' do - before { key.projects << project } - subject { access.download_access_check } + context 'when project is authorized' do + before { key.projects << project } - it { expect(subject.allowed?).to be_truthy } + it { expect(subject).to be_allowed } + end + + context 'when unauthorized' do + context 'from public project' do + let(:project) { create(:project, :public) } + + it { expect(subject).to be_allowed } + end + + context 'from internal project' do + let(:project) { create(:project, :internal) } + + it { expect(subject).not_to be_allowed } + end + + context 'from private project' do + let(:project) { create(:project, :internal) } + + it { expect(subject).not_to be_allowed } + end + end end end 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, - } - } + 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 - 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 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" } + + 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 - permissions_matrix.keys.each do |role| - describe "#{role} access" do - before { protect_feature_branch } - before { project.team << [user, role] } + def self.run_permission_checks(permissions_matrix) + permissions_matrix.keys.each do |role| + describe "#{role} access" do + before { project.team << [user, role] } - permissions_matrix[role].each do |action, allowed| - context action do - subject { access.push_access_check(changes[action]) } + permissions_matrix[role].each do |action, allowed| + context action do + subject { access.push_access_check(changes[action]) } - it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey } + it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey } + end end end end end - context "with enabled developers push to protected branches " do - updated_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] } + 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 + } + } - updated_permissions_matrix[role].each do |action, allowed| - context action do - subject { access.push_access_check(changes[action]) } + [['feature', 'exact'], ['feat*', 'wildcard']].each do |protected_branch_name, protected_branch_type| + context do + before { create(:protected_branch, name: protected_branch_name, project: project) } - it { expect(subject.allowed?).to allowed ? be_truthy : be_falsey } + 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 + + describe 'deploy key permissions' do + let(:key) { create(:deploy_key) } + let(:actor) { key } + + context 'push code' do + subject { access.check('git-receive-pack') } + + context 'when project is authorized' do + before { key.projects << project } + + it { expect(subject).not_to be_allowed } + end + + context 'when unauthorized' do + context 'to public project' do + let(:project) { create(:project, :public) } + + it { expect(subject).not_to be_allowed } + end + + context 'to internal project' do + let(:project) { create(:project, :internal) } + + it { expect(subject).not_to be_allowed } + end + + context 'to private project' do + let(:project) { create(:project, :internal) } + + it { expect(subject).not_to be_allowed } end end end diff --git a/spec/lib/gitlab/import_export/avatar_restorer_spec.rb b/spec/lib/gitlab/import_export/avatar_restorer_spec.rb new file mode 100644 index 00000000000..5ae178414cc --- /dev/null +++ b/spec/lib/gitlab/import_export/avatar_restorer_spec.rb @@ -0,0 +1,25 @@ +require 'spec_helper' + +describe Gitlab::ImportExport::AvatarRestorer, lib: true do + let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: 'test') } + let(:project) { create(:empty_project) } + + before do + allow_any_instance_of(described_class).to receive(:avatar_export_file) + .and_return(Rails.root + "spec/fixtures/dk.png") + end + + after do + project.remove_avatar! + end + + it 'restores a project avatar' do + expect(described_class.new(project: project, shared: shared).restore).to be true + end + + it 'saves the avatar into the project' do + described_class.new(project: project, shared: shared).restore + + expect(project.reload.avatar.file.exists?).to be true + end +end diff --git a/spec/lib/gitlab/import_export/avatar_saver_spec.rb b/spec/lib/gitlab/import_export/avatar_saver_spec.rb new file mode 100644 index 00000000000..d6ee94442cb --- /dev/null +++ b/spec/lib/gitlab/import_export/avatar_saver_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe Gitlab::ImportExport::AvatarSaver, lib: true do + let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: 'test') } + let(:export_path) { "#{Dir::tmpdir}/project_tree_saver_spec" } + let(:project_with_avatar) { create(:empty_project, avatar: fixture_file_upload(Rails.root + "spec/fixtures/dk.png", "image/png")) } + let(:project) { create(:empty_project) } + + before do + FileUtils.mkdir_p("#{shared.export_path}/avatar/") + allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path) + end + + after do + FileUtils.rm_rf("#{shared.export_path}/avatar") + end + + it 'saves a project avatar' do + described_class.new(project: project_with_avatar, shared: shared).save + + expect(File).to exist("#{shared.export_path}/avatar/dk.png") + end + + it 'is fine not to have an avatar' do + expect(described_class.new(project: project, shared: shared).save).to be true + end +end diff --git a/spec/lib/gitlab/import_export/project.json b/spec/lib/gitlab/import_export/project.json index 4113d829c3c..b1a5d72c624 100644 --- a/spec/lib/gitlab/import_export/project.json +++ b/spec/lib/gitlab/import_export/project.json @@ -2765,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", @@ -3138,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", @@ -3423,7 +3423,7 @@ "committer_email": "james@jameslopez.es" } ], - "st_diffs": [ + "utf8_st_diffs": [ { "diff": "--- /dev/null\n+++ b/test\n", "new_path": "test", @@ -3960,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", @@ -4597,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", @@ -5108,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", @@ -5434,7 +5434,7 @@ "id": 11, "state": "empty", "st_commits": null, - "st_diffs": [ + "utf8_st_diffs": [ ], "merge_request_id": 11, @@ -5961,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", @@ -6400,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 877be300262..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') } @@ -53,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/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 355cb8fdfff..950580fdee3 100644 --- a/spec/models/build_spec.rb +++ b/spec/models/build_spec.rb @@ -6,7 +6,7 @@ describe Ci::Build, models: true do let(:pipeline) do create(:ci_pipeline, project: project, sha: project.commit.id, - ref: 'fix', + ref: project.default_branch, status: 'success') end @@ -193,77 +193,185 @@ describe Ci::Build, models: true do end describe '#variables' do + let(:container_registry_enabled) { false } + let(:predefined_variables) do + [ + { key: 'CI', value: 'true', public: true }, + { key: 'GITLAB_CI', value: 'true', public: true }, + { key: 'CI_BUILD_ID', value: build.id.to_s, public: true }, + { key: 'CI_BUILD_TOKEN', value: build.token, public: false }, + { key: 'CI_BUILD_REF', value: build.sha, public: true }, + { key: 'CI_BUILD_BEFORE_SHA', value: build.before_sha, public: true }, + { key: 'CI_BUILD_REF_NAME', value: 'master', public: true }, + { key: 'CI_BUILD_NAME', value: 'test', public: true }, + { key: 'CI_BUILD_STAGE', value: 'test', public: true }, + { key: 'CI_SERVER_NAME', value: 'GitLab', public: true }, + { key: 'CI_SERVER_VERSION', value: Gitlab::VERSION, public: true }, + { key: 'CI_SERVER_REVISION', value: Gitlab::REVISION, public: true }, + { key: 'CI_PROJECT_ID', value: project.id.to_s, public: true }, + { key: 'CI_PROJECT_NAME', value: project.path, public: true }, + { key: 'CI_PROJECT_PATH', value: project.path_with_namespace, public: true }, + { key: 'CI_PROJECT_NAMESPACE', value: project.namespace.path, public: true }, + { key: 'CI_PROJECT_URL', value: project.web_url, public: true }, + { key: 'CI_PIPELINE_ID', value: pipeline.id.to_s, public: true } + ] + end + + before do + stub_container_registry_config(enabled: container_registry_enabled, host_port: 'registry.example.com') + end + + subject { build.variables } + context 'returns variables' do - subject { build.variables } + before do + build.yaml_variables = [] + end - let(:predefined_variables) do - [ - { key: :CI_BUILD_NAME, value: 'test', public: true }, - { key: :CI_BUILD_STAGE, value: 'stage', public: true }, - ] + it { is_expected.to eq(predefined_variables) } + end + + context 'when build is for tag' do + let(:tag_variable) do + { key: 'CI_BUILD_TAG', value: 'master', public: true } end - let(:yaml_variables) do - [ - { key: :DB_NAME, value: 'postgres', public: true } - ] + before do + build.update_attributes(tag: true) + end + + it { is_expected.to include(tag_variable) } + end + + context 'when secure variable is defined' do + let(:secure_variable) do + { key: 'SECRET_KEY', value: 'secret_value', public: false } end before do - build.update_attributes(stage: 'stage', yaml_variables: yaml_variables) + build.project.variables << Ci::Variable.new(key: 'SECRET_KEY', value: 'secret_value') end - it { is_expected.to eq(predefined_variables + yaml_variables) } + it { is_expected.to include(secure_variable) } + end - context 'for tag' do - let(:tag_variable) do - [ - { key: :CI_BUILD_TAG, value: 'master', public: true } - ] - end + context 'when build is for triggers' do + let(:trigger) { create(:ci_trigger, project: project) } + let(:trigger_request) { create(:ci_trigger_request_with_variables, pipeline: pipeline, trigger: trigger) } + let(:user_trigger_variable) do + { key: :TRIGGER_KEY, value: 'TRIGGER_VALUE', public: false } + end + let(:predefined_trigger_variable) do + { key: 'CI_BUILD_TRIGGERED', value: 'true', public: true } + end - before do - build.update_attributes(tag: true) - end + before do + build.trigger_request = trigger_request + end - it { is_expected.to eq(tag_variable + predefined_variables + yaml_variables) } + it { is_expected.to include(user_trigger_variable) } + it { is_expected.to include(predefined_trigger_variable) } + end + + context 'when yaml_variables are undefined' do + before do + build.yaml_variables = nil end - context 'and secure variables' do - let(:secure_variables) do - [ - { key: 'SECRET_KEY', value: 'secret_value', public: false } - ] + context 'use from gitlab-ci.yml' do + before do + stub_ci_pipeline_yaml_file(config) end - before do - build.project.variables << Ci::Variable.new(key: 'SECRET_KEY', value: 'secret_value') + context 'if config is not found' do + let(:config) { nil } + + it { is_expected.to eq(predefined_variables) } end - it { is_expected.to eq(predefined_variables + yaml_variables + secure_variables) } + context 'if config does not have a questioned job' do + let(:config) do + YAML.dump({ + test_other: { + script: 'Hello World' + } + }) + end - context 'and trigger variables' do - let(:trigger) { create(:ci_trigger, project: project) } - let(:trigger_request) { create(:ci_trigger_request_with_variables, pipeline: pipeline, trigger: trigger) } - let(:trigger_variables) do - [ - { key: :TRIGGER_KEY, value: 'TRIGGER_VALUE', public: false } - ] + it { is_expected.to eq(predefined_variables) } + end + + context 'if config has variables' do + let(:config) do + YAML.dump({ + test: { + script: 'Hello World', + variables: { + KEY: 'value' + } + } + }) end - let(:predefined_trigger_variable) do - [ - { key: :CI_BUILD_TRIGGERED, value: 'true', public: true } - ] + let(:variables) do + [{ key: :KEY, value: 'value', public: true }] end - before do - build.trigger_request = trigger_request - end + it { is_expected.to eq(predefined_variables + variables) } + end + end + end + + context 'when container registry is enabled' do + let(:container_registry_enabled) { true } + let(:ci_registry) do + { key: 'CI_REGISTRY', value: 'registry.example.com', public: true } + end + let(:ci_registry_image) do + { key: 'CI_REGISTRY_IMAGE', value: project.container_registry_repository_url, public: true } + end + + context 'and is disabled for project' do + before do + project.update(container_registry_enabled: false) + end - it { is_expected.to eq(predefined_variables + predefined_trigger_variable + yaml_variables + secure_variables + trigger_variables) } + it { is_expected.to include(ci_registry) } + it { is_expected.not_to include(ci_registry_image) } + end + + context 'and is enabled for project' do + before do + project.update(container_registry_enabled: true) end + + it { is_expected.to include(ci_registry) } + it { is_expected.to include(ci_registry_image) } end end + + context 'when runner is assigned to build' do + let(:runner) { create(:ci_runner, description: 'description', tag_list: ['docker', 'linux']) } + + before do + build.update(runner: runner) + end + + it { is_expected.to include({ key: 'CI_RUNNER_ID', value: runner.id.to_s, public: true }) } + it { is_expected.to include({ key: 'CI_RUNNER_DESCRIPTION', value: 'description', public: true }) } + it { is_expected.to include({ key: 'CI_RUNNER_TAGS', value: 'docker, linux', public: true }) } + end + + context 'returns variables in valid order' do + before do + allow(build).to receive(:predefined_variables) { ['predefined'] } + allow(project).to receive(:predefined_variables) { ['project'] } + allow(pipeline).to receive(:predefined_variables) { ['pipeline'] } + allow(build).to receive(:yaml_variables) { ['yaml'] } + allow(project).to receive(:secret_variables) { ['secret'] } + end + + it { is_expected.to eq(%w[predefined project pipeline yaml secret]) } + end end describe '#has_tags?' do @@ -662,6 +770,136 @@ describe Ci::Build, models: true do build.run! end + it { expect(build).not_to be_retryable } + end + + context 'when build is finished' do + before do + build.success! + end + + it { expect(build).to be_retryable } + end + end + + describe '#manual?' do + before do + build.update(when: value) + end + + subject { build.manual? } + + context 'when is set to manual' do + let(:value) { 'manual' } + + it { is_expected.to be_truthy } + end + + context 'when set to something else' do + let(:value) { 'something else' } + + it { is_expected.to be_falsey } + end + end + + describe '#other_actions' do + let(:build) { create(:ci_build, :manual, pipeline: pipeline) } + let!(:other_build) { create(:ci_build, :manual, pipeline: pipeline, name: 'other action') } + + subject { build.other_actions } + + it 'returns other actions' do + is_expected.to contain_exactly(other_build) + end + + context 'when build is retried' do + let!(:new_build) { Ci::Build.retry(build) } + + it 'does not return any of them' do + is_expected.not_to include(build, new_build) + end + end + + context 'when other build is retried' do + let!(:retried_build) { Ci::Build.retry(other_build) } + + it 'returns a retried build' do + is_expected.to contain_exactly(retried_build) + end + end + end + + describe '#play' do + let(:build) { create(:ci_build, :manual, pipeline: pipeline) } + + subject { build.play } + + it 'enques a build' do + is_expected.to be_pending + is_expected.to eq(build) + end + + context 'for success build' do + before { build.queue } + + it 'creates a new build' do + is_expected.to be_pending + is_expected.not_to eq(build) + end + end + end + + describe '#when' do + subject { build.when } + + context 'if is undefined' do + before do + build.when = nil + end + + context 'use from gitlab-ci.yml' do + before do + stub_ci_pipeline_yaml_file(config) + end + + context 'if config is not found' do + let(:config) { nil } + + it { is_expected.to eq('on_success') } + end + + context 'if config does not have a questioned job' do + let(:config) do + YAML.dump({ + test_other: { + script: 'Hello World' + } + }) + end + + it { is_expected.to eq('on_success') } + end + + context 'if config has when' do + let(:config) do + YAML.dump({ + test: { + script: 'Hello World', + when: 'always' + } + }) + end + + it { is_expected.to eq('always') } + end + end + end + end + + describe '#retryable?' do + context 'when build is running' do + before { build.run! } + it 'returns false' do expect(build).not_to be_retryable end diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb index 10db79bd15f..a3bd8fdf30b 100644 --- a/spec/models/ci/pipeline_spec.rb +++ b/spec/models/ci/pipeline_spec.rb @@ -260,6 +260,70 @@ describe Ci::Pipeline, models: true do expect(pipeline.reload.status).to eq('canceled') end end + + context 'when listing manual actions' do + let(:yaml) do + { + stages: ["build", "test", "staging", "production", "cleanup"], + build: { + stage: "build", + script: "BUILD", + }, + test: { + stage: "test", + script: "TEST", + }, + staging: { + stage: "staging", + script: "PUBLISH", + }, + production: { + stage: "production", + script: "PUBLISH", + when: "manual", + }, + cleanup: { + stage: "cleanup", + script: "TIDY UP", + when: "always", + }, + clear_cache: { + stage: "cleanup", + script: "CLEAR CACHE", + when: "manual", + } + } + end + + it 'returns only for skipped builds' do + # currently all builds are created + expect(create_builds).to be_truthy + expect(manual_actions).to be_empty + + # succeed stage build + pipeline.builds.running_or_pending.each(&:success) + expect(manual_actions).to be_empty + + # succeed stage test + pipeline.builds.running_or_pending.each(&:success) + expect(manual_actions).to be_empty + + # succeed stage staging and skip stage production + pipeline.builds.running_or_pending.each(&:success) + expect(manual_actions).to be_many # production and clear cache + + # succeed stage cleanup + pipeline.builds.running_or_pending.each(&:success) + + # after processing a pipeline we should have 6 builds, 5 succeeded + expect(pipeline.builds.count).to eq(6) + expect(pipeline.builds.success.count).to eq(4) + end + + def manual_actions + pipeline.manual_actions + end + end end context 'when no builds created' do @@ -416,4 +480,28 @@ describe Ci::Pipeline, models: true do end end end + + describe '#manual_actions' do + subject { pipeline.manual_actions } + + it 'when none defined' do + is_expected.to be_empty + end + + context 'when action defined' do + let!(:manual) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy') } + + it 'returns one action' do + is_expected.to contain_exactly(manual) + end + + context 'there are multiple of the same name' do + let!(:manual2) { create(:ci_build, :manual, pipeline: pipeline, name: 'deploy') } + + it 'returns latest one' do + is_expected.to contain_exactly(manual2) + end + end + end + end end diff --git a/spec/models/deployment_spec.rb b/spec/models/deployment_spec.rb index b273018707f..7df3df4bb9e 100644 --- a/spec/models/deployment_spec.rb +++ b/spec/models/deployment_spec.rb @@ -11,6 +11,7 @@ describe Deployment, models: true do it { is_expected.to delegate_method(:name).to(:environment).with_prefix } it { is_expected.to delegate_method(:commit).to(:project) } it { is_expected.to delegate_method(:commit_title).to(:commit).as(:try) } + it { is_expected.to delegate_method(:manual_actions).to(:deployable).as(:try) } it { is_expected.to validate_presence_of(:ref) } it { is_expected.to validate_presence_of(:sha) } 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_services/slack_service_spec.rb b/spec/models/project_services/slack_service_spec.rb index 155f3e74e0d..df511b1bc4c 100644 --- a/spec/models/project_services/slack_service_spec.rb +++ b/spec/models/project_services/slack_service_spec.rb @@ -124,6 +124,7 @@ describe SlackService, models: true do and_return( double(:slack_service).as_null_object ) + slack.execute(push_sample_data) end @@ -136,6 +137,76 @@ describe SlackService, models: true do ) slack.execute(push_sample_data) end + + context "event channels" do + it "uses the right channel for push event" do + slack.update_attributes(push_channel: "random") + + expect(Slack::Notifier).to receive(:new). + with(webhook_url, channel: "random"). + and_return( + double(:slack_service).as_null_object + ) + + slack.execute(push_sample_data) + end + + it "uses the right channel for merge request event" do + slack.update_attributes(merge_request_channel: "random") + + expect(Slack::Notifier).to receive(:new). + with(webhook_url, channel: "random"). + and_return( + double(:slack_service).as_null_object + ) + + slack.execute(@merge_sample_data) + end + + it "uses the right channel for issue event" do + slack.update_attributes(issue_channel: "random") + + expect(Slack::Notifier).to receive(:new). + with(webhook_url, channel: "random"). + and_return( + double(:slack_service).as_null_object + ) + + slack.execute(@issues_sample_data) + end + + it "uses the right channel for wiki event" do + slack.update_attributes(wiki_page_channel: "random") + + expect(Slack::Notifier).to receive(:new). + with(webhook_url, channel: "random"). + and_return( + double(:slack_service).as_null_object + ) + + slack.execute(@wiki_page_sample_data) + end + + context "note event" do + let(:issue_note) do + create(:note_on_issue, project: project, note: "issue note") + end + + it "uses the right channel" do + slack.update_attributes(note_channel: "random") + + note_data = Gitlab::NoteDataBuilder.build(issue_note, user) + + expect(Slack::Notifier).to receive(:new). + with(webhook_url, channel: "random"). + and_return( + double(:slack_service).as_null_object + ) + + slack.execute(note_data) + end + end + end end describe "Note events" do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 53b420d808f..5629c75665a 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -458,6 +458,47 @@ describe Project, models: true do end end + describe "#cache_has_external_wiki" do + let(:project) { create(:project) } + + it "stores true if there is an external wiki" do + services = double(:service, external_wikis: [ExternalWikiService.new]) + expect(project).to receive(:services).and_return(services) + + expect do + project.cache_has_external_wiki + end.to change { project.has_external_wiki }.to(true) + end + + it "stores false if there is no external wiki" do + services = double(:service, external_wikis: []) + expect(project).to receive(:services).and_return(services) + + expect do + project.cache_has_external_wiki + end.to change { project.has_external_wiki }.to(false) + end + + it "changes to true if an external wiki service is created later" do + expect do + project.cache_has_external_wiki + end.to change { project.has_external_wiki }.to(false) + + expect do + create(:service, type: "ExternalWikiService", project: project) + end.to change { project.has_external_wiki }.to(true) + end + + it "changes to false if an external wiki service is destroyed later" do + service = create(:service, type: "ExternalWikiService", project: project) + expect(project.has_external_wiki).to be_truthy + + expect do + service.destroy + end.to change { project.has_external_wiki }.to(false) + end + end + describe '#open_branches' do let(:project) { create(:project) } @@ -1114,6 +1155,85 @@ describe Project, models: true do end end + describe '#latest_successful_builds_for' do + def create_pipeline(status = 'success') + create(:ci_pipeline, project: project, + sha: project.commit.sha, + ref: project.default_branch, + status: status) + end + + def create_build(new_pipeline = pipeline, name = 'test') + create(:ci_build, :success, :artifacts, + pipeline: new_pipeline, + status: new_pipeline.status, + name: name) + end + + let(:project) { create(:project) } + let(:pipeline) { create_pipeline } + + context 'with many builds' do + it 'gives the latest builds from latest pipeline' do + pipeline1 = create_pipeline + pipeline2 = create_pipeline + build1_p2 = create_build(pipeline2, 'test') + create_build(pipeline1, 'test') + create_build(pipeline1, 'test2') + build2_p2 = create_build(pipeline2, 'test2') + + latest_builds = project.latest_successful_builds_for + + expect(latest_builds).to contain_exactly(build2_p2, build1_p2) + end + end + + context 'with succeeded pipeline' do + let!(:build) { create_build } + + context 'standalone pipeline' do + it 'returns builds for ref for default_branch' do + builds = project.latest_successful_builds_for + + expect(builds).to contain_exactly(build) + end + + it 'returns empty relation if the build cannot be found' do + builds = project.latest_successful_builds_for('TAIL') + + expect(builds).to be_kind_of(ActiveRecord::Relation) + expect(builds).to be_empty + end + end + + context 'with some pending pipeline' do + before do + create_build(create_pipeline('pending')) + end + + it 'gives the latest build from latest pipeline' do + latest_build = project.latest_successful_builds_for + + expect(latest_build).to contain_exactly(build) + end + end + end + + context 'with pending pipeline' do + before do + pipeline.update(status: 'pending') + create_build(pipeline) + end + + it 'returns empty relation' do + builds = project.latest_successful_builds_for + + expect(builds).to be_kind_of(ActiveRecord::Relation) + expect(builds).to be_empty + end + end + end + describe '.where_paths_in' do context 'without any paths' do it 'returns an empty relation' do diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index b39b958450c..59c5732c075 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 @@ -129,6 +130,36 @@ describe Repository, models: true do end end + describe :commit_file do + it 'commits change to a file successfully' do + expect do + repository.commit_file(user, 'CHANGELOG', 'Changelog!', + 'Updates file content', + 'master', true) + end.to change { repository.commits('master').count }.by(1) + + blob = repository.blob_at('master', 'CHANGELOG') + + expect(blob.data).to eq('Changelog!') + end + end + + describe :update_file do + it 'updates filename successfully' do + expect do + repository.update_file(user, 'NEWLICENSE', 'Copyright!', + branch: 'master', + previous_path: 'LICENSE', + message: 'Changes filename') + end.to change { repository.commits('master').count }.by(1) + + files = repository.ls_files('master') + + expect(files).not_to include('LICENSE') + expect(files).to include('NEWLICENSE') + end + end + describe "search_files" do let(:results) { repository.search_files('feature', 'master') } subject { results } @@ -718,6 +749,30 @@ describe Repository, models: true do repository.before_delete end + it 'flushes the tags cache' do + expect(repository).to receive(:expire_tags_cache) + + repository.before_delete + end + + it 'flushes the tag count cache' do + expect(repository).to receive(:expire_tag_count_cache) + + repository.before_delete + end + + it 'flushes the branches cache' do + expect(repository).to receive(:expire_branches_cache) + + repository.before_delete + end + + it 'flushes the branch count cache' do + expect(repository).to receive(:expire_branch_count_cache) + + repository.before_delete + end + it 'flushes the root ref cache' do expect(repository).to receive(:expire_root_ref_cache) @@ -748,6 +803,30 @@ describe Repository, models: true do repository.before_delete end + it 'flushes the tags cache' do + expect(repository).to receive(:expire_tags_cache) + + repository.before_delete + end + + it 'flushes the tag count cache' do + expect(repository).to receive(:expire_tag_count_cache) + + repository.before_delete + end + + it 'flushes the branches cache' do + expect(repository).to receive(:expire_branches_cache) + + repository.before_delete + end + + it 'flushes the branch count cache' do + expect(repository).to receive(:expire_branch_count_cache) + + repository.before_delete + end + it 'flushes the root ref cache' do expect(repository).to receive(:expire_root_ref_cache) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index fc74488ac0e..3bf82cf2668 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -887,16 +887,25 @@ describe User, models: true do end describe '#authorized_projects' do - let!(:user) { create(:user) } - let!(:private_project) { create(:project, :private) } + context 'with a minimum access level' do + it 'includes projects for which the user is an owner' do + user = create(:user) + project = create(:empty_project, :private, namespace: user.namespace) - before do - private_project.team << [user, Gitlab::Access::MASTER] - end + expect(user.authorized_projects(Gitlab::Access::REPORTER)) + .to contain_exactly(project) + end - subject { user.authorized_projects } + it 'includes projects for which the user is a master' do + user = create(:user) + project = create(:empty_project, :private) + + project.team << [user, Gitlab::Access::MASTER] - it { is_expected.to eq([private_project]) } + expect(user.authorized_projects(Gitlab::Access::REPORTER)) + .to contain_exactly(project) + end + end end describe '#ci_authorized_runners' 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/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/builds_spec.rb b/spec/requests/api/builds_spec.rb index fb0f066498a..56eb9cd8f8d 100644 --- a/spec/requests/api/builds_spec.rb +++ b/spec/requests/api/builds_spec.rb @@ -6,12 +6,12 @@ describe API::API, api: true do let(:user) { create(:user) } let(:api_user) { user } - let(:user2) { create(:user) } - let(:project) { create(:project, creator_id: user.id) } - let(:developer) { create(:project_member, :developer, user: user, project: project) } - let(:reporter) { create(:project_member, :reporter, user: user2, project: project) } - let(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit.id) } - let(:build) { create(:ci_build, pipeline: pipeline) } + let!(:project) { create(:project, creator_id: user.id) } + let!(:developer) { create(:project_member, :developer, user: user, project: project) } + let(:reporter) { create(:project_member, :reporter, project: project) } + let(:guest) { create(:project_member, :guest, project: project) } + let!(:pipeline) { create(:ci_pipeline, project: project, sha: project.commit.id, ref: project.default_branch) } + let!(:build) { create(:ci_build, pipeline: pipeline) } describe 'GET /projects/:id/builds ' do let(:query) { '' } @@ -188,44 +188,94 @@ describe API::API, api: true do end describe 'GET /projects/:id/artifacts/:ref_name/download?job=name' do - include_context 'artifacts from ref and build name' + let(:api_user) { reporter.user } + let(:build) { create(:ci_build, :success, :artifacts, pipeline: pipeline) } - def path_from_ref(ref = pipeline.ref, job = build.name) - api("/projects/#{project.id}/builds/artifacts/#{ref}/download?job=#{job}", user) + def path_for_ref(ref = pipeline.ref, job = build.name) + api("/projects/#{project.id}/builds/artifacts/#{ref}/download?job=#{job}", api_user) end - context '401' do - let(:user) { nil } + context 'when not logged in' do + let(:api_user) { nil } before do - get path_from_ref + get path_for_ref end - it 'gives 401 for unauthorized user' do + it 'gives 401' do expect(response).to have_http_status(401) end end - context '404' do - def verify - expect(response).to have_http_status(404) + context 'when logging as guest' do + let(:api_user) { guest.user } + + before do + get path_for_ref + end + + it 'gives 403' do + expect(response).to have_http_status(403) + end + end + + context 'non-existing build' do + shared_examples 'not found' do + it { expect(response).to have_http_status(:not_found) } end - it_behaves_like 'artifacts from ref with 404' + context 'has no such ref' do + before do + get path_for_ref('TAIL', build.name) + end + + it_behaves_like 'not found' + end + + context 'has no such build' do + before do + get path_for_ref(pipeline.ref, 'NOBUILD') + end + + it_behaves_like 'not found' + end end - context '200' do - def verify - download_headers = + context 'find proper build' do + shared_examples 'a valid file' do + let(:download_headers) do { 'Content-Transfer-Encoding' => 'binary', 'Content-Disposition' => "attachment; filename=#{build.artifacts_file.filename}" } + end - expect(response).to have_http_status(200) - expect(response.headers).to include(download_headers) + it { expect(response).to have_http_status(200) } + it { expect(response.headers).to include(download_headers) } + end + + context 'with regular branch' do + before do + pipeline.update(ref: 'master', + sha: project.commit('master').sha) + + get path_for_ref('master') + end + + it_behaves_like 'a valid file' end - it_behaves_like 'artifacts from ref successfully' + context 'with branch name containing slash' do + before do + pipeline.update(ref: 'improve/awesome', + sha: project.commit('improve/awesome').sha) + end + + before do + get path_for_ref('improve/awesome') + end + + it_behaves_like 'a valid file' + end end end @@ -233,8 +283,6 @@ describe API::API, api: true do let(:build) { create(:ci_build, :trace, pipeline: pipeline) } before do - developer - get api("/projects/#{project.id}/builds/#{build.id}/trace", api_user) end @@ -271,7 +319,7 @@ describe API::API, api: true do end context 'user without :update_build permission' do - let(:api_user) { user2 } + let(:api_user) { reporter.user } it 'should not cancel build' do expect(response).to have_http_status(403) @@ -308,7 +356,7 @@ describe API::API, api: true do end context 'user without :update_build permission' do - let(:api_user) { user2 } + let(:api_user) { reporter.user } it 'should not retry build' do expect(response).to have_http_status(403) 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/ci/api/builds_spec.rb b/spec/requests/ci/api/builds_spec.rb index e7cbc3dd3a7..1c7c60ec644 100644 --- a/spec/requests/ci/api/builds_spec.rb +++ b/spec/requests/ci/api/builds_spec.rb @@ -73,12 +73,12 @@ describe Ci::API::API do post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin } expect(response).to have_http_status(201) - expect(json_response["variables"]).to eq([ + expect(json_response["variables"]).to include( { "key" => "CI_BUILD_NAME", "value" => "spinach", "public" => true }, { "key" => "CI_BUILD_STAGE", "value" => "test", "public" => true }, { "key" => "DB_NAME", "value" => "postgres", "public" => true }, { "key" => "SECRET_KEY", "value" => "secret_value", "public" => false } - ]) + ) end it "returns variables for triggers" do @@ -92,14 +92,14 @@ describe Ci::API::API do post ci_api("/builds/register"), token: runner.token, info: { platform: :darwin } expect(response).to have_http_status(201) - expect(json_response["variables"]).to eq([ + expect(json_response["variables"]).to include( { "key" => "CI_BUILD_NAME", "value" => "spinach", "public" => true }, { "key" => "CI_BUILD_STAGE", "value" => "test", "public" => true }, { "key" => "CI_BUILD_TRIGGERED", "value" => "true", "public" => true }, { "key" => "DB_NAME", "value" => "postgres", "public" => true }, { "key" => "SECRET_KEY", "value" => "secret_value", "public" => false }, - { "key" => "TRIGGER_KEY", "value" => "TRIGGER_VALUE", "public" => false }, - ]) + { "key" => "TRIGGER_KEY", "value" => "TRIGGER_VALUE", "public" => false } + ) end it "returns dependent builds" do diff --git a/spec/routing/routing_spec.rb b/spec/routing/routing_spec.rb index 2c755919456..0a52c1ab933 100644 --- a/spec/routing/routing_spec.rb +++ b/spec/routing/routing_spec.rb @@ -116,12 +116,9 @@ describe HelpController, "routing" do expect(get(path)).to route_to('help#show', path: 'workflow/protected_branches/protected_branches1', format: 'png') - path = '/help/shortcuts' - expect(get(path)).to route_to('help#show', - path: 'shortcuts') + path = '/help/ui' - expect(get(path)).to route_to('help#show', - path: 'ui') + expect(get(path)).to route_to('help#ui') 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/support/api_helpers.rb b/spec/support/api_helpers.rb index 1b3cafb497c..68b196d9033 100644 --- a/spec/support/api_helpers.rb +++ b/spec/support/api_helpers.rb @@ -24,8 +24,11 @@ module ApiHelpers (path.index('?') ? '' : '?') + # Append private_token if given a User object - (user.respond_to?(:private_token) ? - "&private_token=#{user.private_token}" : "") + if user.respond_to?(:private_token) + "&private_token=#{user.private_token}" + else + '' + end end def ci_api(path, user = nil) @@ -35,8 +38,11 @@ module ApiHelpers (path.index('?') ? '' : '?') + # Append private_token if given a User object - (user.respond_to?(:private_token) ? - "&private_token=#{user.private_token}" : "") + if user.respond_to?(:private_token) + "&private_token=#{user.private_token}" + else + '' + end end def json_response 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 |